From 9adcea04b08f067db8f746fa07e3205f25b0793b Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Wed, 18 Sep 2024 12:37:21 +0100 Subject: [PATCH 01/97] chore(compass-indexes): refactor indexes store(s) COMPASS-8212 COMPASS-8244 (#6218) --- package-lock.json | 2 - packages/compass-indexes/package.json | 1 - .../create-index-actions.spec.jsx | 67 +- .../create-index-actions.tsx | 26 +- .../components/create-index-fields.spec.tsx | 56 +- .../src/components/create-index-fields.tsx | 32 +- .../create-index-form/checkbox-input.tsx | 11 +- .../create-index-form/collapsible-input.tsx | 24 +- .../create-index-form/create-index-form.tsx | 29 +- .../create-index-modal/create-index-modal.tsx | 78 +- .../indexes-toolbar/indexes-toolbar.spec.tsx | 40 +- .../indexes-toolbar/indexes-toolbar.tsx | 46 +- .../src/components/indexes/indexes.spec.tsx | 8 +- .../src/components/indexes/indexes.tsx | 4 + .../index-actions.spec.tsx | 18 +- .../regular-indexes-table/index-actions.tsx | 20 +- .../regular-indexes-table.spec.tsx | 6 +- .../regular-indexes-table.tsx | 32 +- .../create-search-index-modal.tsx | 21 +- .../update-search-index-modal.spec.tsx | 4 +- .../update-search-index-modal.tsx | 21 +- .../search-indexes-table.spec.tsx | 12 +- .../search-indexes-table.tsx | 42 +- packages/compass-indexes/src/index.ts | 34 - .../src/modules/create-index.spec.ts | 370 ++++++++++ .../src/modules/create-index.tsx | 672 ++++++++++++++++++ .../src/modules/create-index/error.ts | 46 -- .../src/modules/create-index/fields.spec.js | 201 ------ .../src/modules/create-index/fields.ts | 100 --- .../src/modules/create-index/index.spec.js | 291 -------- .../src/modules/create-index/index.ts | 261 ------- .../src/modules/create-index/options.tsx | 171 ----- .../partial-filter-expression.spec.js | 39 - .../create-index/partial-filter-expression.ts | 44 -- ...escription.spec.js => description.spec.ts} | 6 +- .../{description.js => description.ts} | 7 +- .../src/modules/in-progress.spec.js | 32 - .../src/modules/in-progress.ts | 42 -- .../compass-indexes/src/modules/index-view.ts | 21 +- packages/compass-indexes/src/modules/index.ts | 26 +- ...-view.spec.js => is-readonly-view.spec.ts} | 0 ...s-readonly-view.js => is-readonly-view.ts} | 9 +- .../src/modules/is-visible.spec.js | 32 - .../compass-indexes/src/modules/is-visible.ts | 47 -- ...s-writable.spec.js => is-writable.spec.ts} | 6 +- .../{is-writable.js => is-writable.ts} | 7 +- .../{namespace.spec.js => namespace.spec.ts} | 0 .../modules/{namespace.js => namespace.ts} | 10 +- .../src/modules/regular-indexes.spec.ts | 380 ++++++---- .../src/modules/regular-indexes.ts | 338 +++++---- .../src/modules/reset-form.spec.ts | 11 - .../compass-indexes/src/modules/reset-form.ts | 13 - .../src/modules/search-indexes.spec.ts | 38 +- .../src/modules/search-indexes.ts | 338 +++++---- .../src/stores/create-index.ts | 57 -- .../src/stores/drop-index.spec.tsx | 57 -- .../compass-indexes/src/stores/drop-index.tsx | 88 --- .../compass-indexes/src/stores/store.spec.ts | 29 - packages/compass-indexes/src/stores/store.ts | 43 +- .../src/utils/columnstore-indexes.ts | 6 +- .../test/fixtures/regular-indexes.ts | 192 ++--- packages/compass-web/src/entrypoint.tsx | 8 +- .../compass/src/app/components/workspace.tsx | 8 +- 63 files changed, 2159 insertions(+), 2521 deletions(-) create mode 100644 packages/compass-indexes/src/modules/create-index.spec.ts create mode 100644 packages/compass-indexes/src/modules/create-index.tsx delete mode 100644 packages/compass-indexes/src/modules/create-index/error.ts delete mode 100644 packages/compass-indexes/src/modules/create-index/fields.spec.js delete mode 100644 packages/compass-indexes/src/modules/create-index/fields.ts delete mode 100644 packages/compass-indexes/src/modules/create-index/index.spec.js delete mode 100644 packages/compass-indexes/src/modules/create-index/index.ts delete mode 100644 packages/compass-indexes/src/modules/create-index/options.tsx delete mode 100644 packages/compass-indexes/src/modules/create-index/partial-filter-expression.spec.js delete mode 100644 packages/compass-indexes/src/modules/create-index/partial-filter-expression.ts rename packages/compass-indexes/src/modules/{description.spec.js => description.spec.ts} (82%) rename packages/compass-indexes/src/modules/{description.js => description.ts} (82%) delete mode 100644 packages/compass-indexes/src/modules/in-progress.spec.js delete mode 100644 packages/compass-indexes/src/modules/in-progress.ts rename packages/compass-indexes/src/modules/{is-readonly-view.spec.js => is-readonly-view.spec.ts} (100%) rename packages/compass-indexes/src/modules/{is-readonly-view.js => is-readonly-view.ts} (79%) delete mode 100644 packages/compass-indexes/src/modules/is-visible.spec.js delete mode 100644 packages/compass-indexes/src/modules/is-visible.ts rename packages/compass-indexes/src/modules/{is-writable.spec.js => is-writable.spec.ts} (72%) rename packages/compass-indexes/src/modules/{is-writable.js => is-writable.ts} (82%) rename packages/compass-indexes/src/modules/{namespace.spec.js => namespace.spec.ts} (100%) rename packages/compass-indexes/src/modules/{namespace.js => namespace.ts} (79%) delete mode 100644 packages/compass-indexes/src/modules/reset-form.spec.ts delete mode 100644 packages/compass-indexes/src/modules/reset-form.ts delete mode 100644 packages/compass-indexes/src/stores/create-index.ts delete mode 100644 packages/compass-indexes/src/stores/drop-index.spec.tsx delete mode 100644 packages/compass-indexes/src/stores/drop-index.tsx diff --git a/package-lock.json b/package-lock.json index d5f97858eb3..b92e4d9eb32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45431,7 +45431,6 @@ "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", "@mongodb-js/compass-editor": "^0.30.0", @@ -56978,7 +56977,6 @@ "version": "file:packages/compass-indexes", "requires": { "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", "@mongodb-js/compass-editor": "^0.30.0", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index e2295d05338..f906e786f31 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -67,7 +67,6 @@ }, "dependencies": { "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", "@mongodb-js/compass-editor": "^0.30.0", diff --git a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx index 7e6efea9fa1..ba27d6421f3 100644 --- a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx +++ b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx @@ -16,18 +16,18 @@ const noop = () => {}; describe('CreateIndexActions Component', function () { let clearErrorSpy; - let createIndexSpy; + let onCreateIndexClickSpy; let closeCreateIndexModalSpy; beforeEach(function () { clearErrorSpy = sinon.spy(); - createIndexSpy = sinon.spy(); + onCreateIndexClickSpy = sinon.spy(); closeCreateIndexModalSpy = sinon.spy(); }); afterEach(function () { clearErrorSpy = null; - createIndexSpy = null; + onCreateIndexClickSpy = null; closeCreateIndexModalSpy = null; cleanup(); @@ -37,10 +37,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -53,10 +53,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -67,14 +67,14 @@ describe('CreateIndexActions Component', function () { }); context('onConfirm', function () { - it('calls the createIndex function', function () { + it('calls the onCreateIndexClick function', function () { render( ); @@ -82,7 +82,7 @@ describe('CreateIndexActions Component', function () { 'create-index-actions-create-index-button' ); fireEvent.click(button); - expect(createIndexSpy).to.have.been.calledOnce; + expect(onCreateIndexClickSpy).to.have.been.calledOnce; }); }); @@ -90,10 +90,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -108,10 +108,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -125,10 +125,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -145,10 +145,9 @@ describe('CreateIndexActions Component', function () { render( ); @@ -164,10 +163,10 @@ describe('CreateIndexActions Component', function () { render( ); @@ -182,10 +181,10 @@ describe('CreateIndexActions Component', function () { render( ); }); @@ -200,10 +199,10 @@ describe('CreateIndexActions Component', function () { }); it('hides the create index button', function () { - const createIndexButton = screen.queryByTestId( + const onCreateIndexClickButton = screen.queryByTestId( 'create-index-actions-create-index-button' ); - expect(createIndexButton).to.not.exist; + expect(onCreateIndexClickButton).to.not.exist; }); it('renames the cancel button to close', function () { diff --git a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx index e4313d941b2..cc1f9ab9991 100644 --- a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx +++ b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx @@ -24,16 +24,16 @@ const createIndexButtonStyles = css({ */ function CreateIndexActions({ error, - clearError, inProgress, - createIndex, - closeCreateIndexModal, + onErrorBannerCloseClick, + onCreateIndexClick, + onCancelCreateIndexClick, }: { error: string | null; - clearError: () => void; inProgress: boolean; - createIndex: () => void; - closeCreateIndexModal: () => void; + onErrorBannerCloseClick: () => void; + onCreateIndexClick: () => void; + onCancelCreateIndexClick: () => void; }) { const renderError = () => { if (!error) { @@ -45,7 +45,7 @@ function CreateIndexActions({ data-testid="create-index-actions-error-banner-wrapper" className={bannerStyles} > - + {error} @@ -69,14 +69,6 @@ function CreateIndexActions({ ); }; - const onCancel = () => { - closeCreateIndexModal(); - }; - - const onConfirm = () => { - createIndex(); - }; - return (
{renderError()} @@ -84,14 +76,14 @@ function CreateIndexActions({ {!inProgress && (
)} - onAddItem={addField} - onRemoveItem={removeField} + onAddItem={onAddFieldClick} + onRemoveItem={onRemoveFieldClick} addButtonTestId="add-index-field-button" removeButtonTestId="remove-index-field-button" /> diff --git a/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx b/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx index 82d6479b8bd..ea35ff7212c 100644 --- a/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx +++ b/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx @@ -5,10 +5,9 @@ import { FormFieldContainer, } from '@mongodb-js/compass-components'; import { connect } from 'react-redux'; -import type { RootState } from '../../modules/create-index'; -import type { CheckboxOptions } from '../../modules/create-index/options'; -import { changeOption } from '../../modules/create-index/options'; -import { OPTIONS } from '../../modules/create-index/options'; +import type { RootState } from '../../modules'; +import type { CheckboxOptions } from '../../modules/create-index'; +import { OPTIONS, optionChanged } from '../../modules/create-index'; type CheckboxInputProps = { name: CheckboxOptions; @@ -50,8 +49,8 @@ export default connect( return { label: OPTIONS[name].label, description: OPTIONS[name].description, - checked: state.options[name].value, + checked: state.createIndex.options[name].value, }; }, - { onChange: changeOption } + { onChange: optionChanged } )(CheckboxInput); diff --git a/packages/compass-indexes/src/components/create-index-form/collapsible-input.tsx b/packages/compass-indexes/src/components/create-index-form/collapsible-input.tsx index 1b2da010a23..177b3898698 100644 --- a/packages/compass-indexes/src/components/create-index-form/collapsible-input.tsx +++ b/packages/compass-indexes/src/components/create-index-form/collapsible-input.tsx @@ -2,13 +2,13 @@ import { CollapsibleFieldSet, TextInput } from '@mongodb-js/compass-components'; import { CodemirrorMultilineEditor } from '@mongodb-js/compass-editor'; import React from 'react'; import { connect } from 'react-redux'; -import type { RootState } from '../../modules/create-index'; -import type { InputOptions } from '../../modules/create-index/options'; +import type { RootState } from '../../modules'; +import type { InputOptions } from '../../modules/create-index'; import { - changeOption, - changeOptionEnabled, + optionChanged, + optionToggled, OPTIONS, -} from '../../modules/create-index/options'; +} from '../../modules/create-index'; type CollapsibleInputProps = { name: InputOptions; @@ -21,7 +21,7 @@ type CollapsibleInputProps = { value: string; onChange(name: string, newVal: string): void; enabled: boolean; - onEnabled(name: string, newVal: boolean): void; + onToggled(name: string, newVal: boolean): void; }; export const CollapsibleInput: React.FunctionComponent< @@ -37,7 +37,7 @@ export const CollapsibleInput: React.FunctionComponent< value, onChange, enabled, - onEnabled, + onToggled, }) => { const id = `create-index-modal-${name}`; const inputId = `${id}-${type}`; @@ -46,7 +46,7 @@ export const CollapsibleInput: React.FunctionComponent< id={id} toggled={!disabled && enabled} onToggle={(enabled) => { - onEnabled(name, enabled); + onToggled(name, enabled); }} label={label} data-testid={id} @@ -93,12 +93,12 @@ export default connect( description: OPTIONS[name].description, optional: OPTIONS[name].optional, units: OPTIONS[name].units, - value: state.options[name].value, - enabled: state.options[name].enabled, + value: state.createIndex.options[name].value, + enabled: state.createIndex.options[name].enabled, }; }, { - onChange: changeOption, - onEnabled: changeOptionEnabled, + onChange: optionChanged, + onToggled: optionToggled, } )(CollapsibleInput); diff --git a/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx b/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx index 1ab4a0b7937..555af792ea8 100644 --- a/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx +++ b/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx @@ -1,5 +1,6 @@ import React, { useMemo } from 'react'; import { css, spacing, Accordion, Body } from '@mongodb-js/compass-components'; +import type { Field } from '../../modules/create-index'; import { useAutocompleteFields } from '@mongodb-js/compass-field-store'; import { CreateIndexFields } from '../create-index-fields'; import { hasColumnstoreIndexesSupport } from '../../utils/columnstore-indexes'; @@ -18,26 +19,24 @@ const createIndexModalOptionStyles = css({ paddingLeft: spacing[1] + 2, }); -type IndexField = { name: string; type: string }; - type CreateIndexFormProps = { namespace: string; - fields: IndexField[]; + fields: Field[]; serverVersion: string; - updateFieldName: (idx: number, name: string) => void; - updateFieldType: (idx: number, fType: string) => void; - addField: () => void; // Plus icon. - removeField: (idx: number) => void; // Minus icon. + onSelectFieldNameClick: (idx: number, name: string) => void; + onSelectFieldTypeClick: (idx: number, fType: string) => void; + onAddFieldClick: () => void; // Plus icon. + onRemoveFieldClick: (idx: number) => void; // Minus icon. }; function CreateIndexForm({ namespace, fields, serverVersion, - updateFieldName, - updateFieldType, - addField, - removeField, + onSelectFieldNameClick, + onSelectFieldTypeClick, + onAddFieldClick, + onRemoveFieldClick, }: CreateIndexFormProps) { const schemaFields = useAutocompleteFields(namespace); const schemaFieldNames = useMemo(() => { @@ -65,10 +64,10 @@ function CreateIndexForm({ fields={fields} serverVersion={serverVersion} isRemovable={!(fields.length > 1)} - updateFieldName={updateFieldName} - updateFieldType={updateFieldType} - addField={addField} - removeField={removeField} + onSelectFieldNameClick={onSelectFieldNameClick} + onSelectFieldTypeClick={onSelectFieldTypeClick} + onAddFieldClick={onAddFieldClick} + onRemoveFieldClick={onRemoveFieldClick} /> ) : null} diff --git a/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx b/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx index 004ed8c52f3..189c6988968 100644 --- a/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx +++ b/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx @@ -6,19 +6,18 @@ import { ModalHeader, ModalBody, } from '@mongodb-js/compass-components'; - import { - addField, - removeField, - updateFieldType, + fieldAdded, + fieldRemoved, + fieldTypeUpdated, updateFieldName, -} from '../../modules/create-index/fields'; -import { clearError } from '../../modules/create-index/error'; -import { createIndex, closeCreateIndexModal } from '../../modules/create-index'; + errorCleared, + createIndex, + createIndexClosed, +} from '../../modules/create-index'; import { CreateIndexForm } from '../create-index-form/create-index-form'; import CreateIndexActions from '../create-index-actions'; -import type { RootState } from '../../modules/create-index'; -import type { CollectionTabPluginMetadata } from '@mongodb-js/compass-collection'; +import type { RootState } from '../../modules'; import { useTrackOnChange, type TrackFunction, @@ -29,30 +28,30 @@ type CreateIndexModalProps = React.ComponentProps & { isVisible: boolean; namespace: string; error: string | null; - clearError: () => void; inProgress: boolean; - createIndex: () => void; - closeCreateIndexModal: () => void; + onErrorBannerCloseClick: () => void; + onCreateIndexClick: () => void; + onCancelCreateIndexClick: () => void; }; function CreateIndexModal({ isVisible, namespace, error, - clearError, inProgress, - createIndex, - closeCreateIndexModal, + onErrorBannerCloseClick, + onCreateIndexClick, + onCancelCreateIndexClick, ...props }: CreateIndexModalProps) { const connectionInfoRef = useConnectionInfoRef(); const onSetOpen = useCallback( (open) => { if (!open) { - closeCreateIndexModal(); + onCancelCreateIndexClick(); } }, - [closeCreateIndexModal] + [onCancelCreateIndexClick] ); useTrackOnChange( @@ -88,39 +87,36 @@ function CreateIndexModal({ ); } -const mapState = ( - { fields, inProgress, error, isVisible, namespace, serverVersion }: RootState, - // To make sure the derived type is correctly including plugin metadata passed - // by CollectionTab - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ownProps: Pick -) => ({ - fields, - inProgress, - error, - isVisible, - namespace, - serverVersion, -}); +const mapState = ({ namespace, serverVersion, createIndex }: RootState) => { + const { fields, inProgress, error, isVisible } = createIndex; + return { + fields, + inProgress, + error, + isVisible, + namespace, + serverVersion, + }; +}; const mapDispatch = { - clearError, - createIndex, - closeCreateIndexModal, - addField, - removeField, - updateFieldName, - updateFieldType, + onErrorBannerCloseClick: errorCleared, + onCreateIndexClick: createIndex, + onCancelCreateIndexClick: createIndexClosed, + onAddFieldClick: fieldAdded, + onRemoveFieldClick: fieldRemoved, + onSelectFieldNameClick: updateFieldName, + onSelectFieldTypeClick: fieldTypeUpdated, }; export default connect(mapState, mapDispatch)(CreateIndexModal); diff --git a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx index d22726dad06..ce7e488b03d 100644 --- a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx +++ b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx @@ -39,9 +39,9 @@ describe('IndexesToolbar Component', function () { onRefreshIndexes={() => {}} isAtlasSearchSupported={false} isRefreshing={false} - onChangeIndexView={() => {}} - onCreateRegularIndex={() => {}} - onCreateSearchIndex={() => {}} + onIndexViewChanged={() => {}} + onCreateRegularIndexClick={() => {}} + onCreateSearchIndexClick={() => {}} {...props} /> @@ -181,25 +181,25 @@ describe('IndexesToolbar Component', function () { describe('allows creating of indexes', function () { context('when search indexes is not supported', function () { - it('calls onCreateRegularIndex when index button is clicked', function () { - const onCreateRegularIndexSpy = sinon.spy(); + it('calls onCreateRegularIndexClick when index button is clicked', function () { + const onCreateRegularIndexClickSpy = sinon.spy(); renderIndexesToolbar({ - onCreateRegularIndex: onCreateRegularIndexSpy, + onCreateRegularIndexClick: onCreateRegularIndexClickSpy, }); - expect(onCreateRegularIndexSpy).to.not.have.been.called; + expect(onCreateRegularIndexClickSpy).to.not.have.been.called; screen.getByTestId('open-create-index-modal-button').click(); - expect(onCreateRegularIndexSpy).to.have.been.calledOnce; + expect(onCreateRegularIndexClickSpy).to.have.been.calledOnce; }); }); context('when search indexes is supported', function () { - it('calls onCreateRegularIndex when index button is clicked', function () { - const onCreateRegularIndexSpy = sinon.spy(); + it('calls onCreateRegularIndexClick when index button is clicked', function () { + const onCreateRegularIndexClickSpy = sinon.spy(); renderIndexesToolbar({ isAtlasSearchSupported: true, - onCreateRegularIndex: onCreateRegularIndexSpy, + onCreateRegularIndexClick: onCreateRegularIndexClickSpy, }); // open the dropdown @@ -207,7 +207,7 @@ describe('IndexesToolbar Component', function () { .getByTestId('multiple-index-types-creation-dropdown-show-actions') .click(); - expect(onCreateRegularIndexSpy).to.not.have.been.called; + expect(onCreateRegularIndexClickSpy).to.not.have.been.called; // click the button screen @@ -216,13 +216,13 @@ describe('IndexesToolbar Component', function () { ) .click(); - expect(onCreateRegularIndexSpy).to.have.been.calledOnce; + expect(onCreateRegularIndexClickSpy).to.have.been.calledOnce; }); - it('calls onCreateSearchIndex when index button is clicked', function () { - const onCreateSearchIndexSpy = sinon.spy(); + it('calls onCreateSearchIndexClick when index button is clicked', function () { + const onCreateSearchIndexClickSpy = sinon.spy(); renderIndexesToolbar({ isAtlasSearchSupported: true, - onCreateSearchIndex: onCreateSearchIndexSpy, + onCreateSearchIndexClick: onCreateSearchIndexClickSpy, }); // open the dropdown @@ -230,7 +230,7 @@ describe('IndexesToolbar Component', function () { .getByTestId('multiple-index-types-creation-dropdown-show-actions') .click(); - expect(onCreateSearchIndexSpy).to.not.have.been.called; + expect(onCreateSearchIndexClickSpy).to.not.have.been.called; // click the button screen @@ -239,7 +239,7 @@ describe('IndexesToolbar Component', function () { ) .click(); - expect(onCreateSearchIndexSpy).to.have.been.calledOnce; + expect(onCreateSearchIndexClickSpy).to.have.been.calledOnce; }); }); }); @@ -309,7 +309,7 @@ describe('IndexesToolbar Component', function () { it('when it supports search management, it changes tab view', function () { renderIndexesToolbar({ isAtlasSearchSupported: true, - onChangeIndexView: onChangeViewCallback, + onIndexViewChanged: onChangeViewCallback, }); const segmentControl = screen.getByText('Search Indexes'); userEvent.click(segmentControl); @@ -321,7 +321,7 @@ describe('IndexesToolbar Component', function () { it('when it does not support search management, it renders tab as disabled', function () { renderIndexesToolbar({ isAtlasSearchSupported: false, - onChangeIndexView: onChangeViewCallback, + onIndexViewChanged: onChangeViewCallback, }); const segmentControl = screen.getByText('Search Indexes'); userEvent.click(segmentControl); diff --git a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx index a77ec0b9ef6..00f159a5f78 100644 --- a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx +++ b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx @@ -23,11 +23,11 @@ import { import type { RootState } from '../../modules'; import { SearchIndexesStatuses, - showCreateModal as onCreateSearchIndex, + createSearchIndexOpened, } from '../../modules/search-indexes'; -import { showCreateModal as onCreateRegularIndex } from '../../modules/regular-indexes'; +import { createIndexOpened } from '../../modules/create-index'; import type { IndexView } from '../../modules/index-view'; -import { changeIndexView } from '../../modules/index-view'; +import { indexViewChanged } from '../../modules/index-view'; const toolbarButtonsContainer = css({ display: 'flex', @@ -54,12 +54,12 @@ type IndexesToolbarProps = { hasTooManyIndexes: boolean; isRefreshing: boolean; onRefreshIndexes: () => void; - onChangeIndexView: (newView: IndexView) => void; + onIndexViewChanged: (newView: IndexView) => void; // connected: isReadonlyView: boolean; isWritable: boolean; - onCreateRegularIndex: () => void; - onCreateSearchIndex: () => void; + onCreateRegularIndexClick: () => void; + onCreateSearchIndexClick: () => void; writeStateDescription?: string; isAtlasSearchSupported: boolean; // via withPreferences: @@ -71,14 +71,14 @@ export const IndexesToolbar: React.FunctionComponent = ({ errorMessage, isReadonlyView, isWritable, - onCreateRegularIndex, - onCreateSearchIndex, + onCreateRegularIndexClick, + onCreateSearchIndexClick, isRefreshing, writeStateDescription, hasTooManyIndexes, isAtlasSearchSupported, onRefreshIndexes, - onChangeIndexView, + onIndexViewChanged, readOnly, // preferences readOnly. }) => { const isSearchManagementActive = usePreference('enableAtlasSearchIndexes'); @@ -108,8 +108,8 @@ export const IndexesToolbar: React.FunctionComponent = ({ isSearchManagementActive={isSearchManagementActive} isAtlasSearchSupported={isAtlasSearchSupported} isWritable={isWritable} - onCreateRegularIndex={onCreateRegularIndex} - onCreateSearchIndex={onCreateSearchIndex} + onCreateRegularIndexClick={onCreateRegularIndexClick} + onCreateSearchIndexClick={onCreateSearchIndexClick} > } @@ -135,7 +135,7 @@ export const IndexesToolbar: React.FunctionComponent = ({ {isSearchManagementActive && ( onChangeIndexView(evt as IndexView)} + onChange={(evt) => onIndexViewChanged(evt as IndexView)} className={alignSelfEndStyles} label="Viewing" value={indexView} @@ -203,8 +203,8 @@ type CreateIndexButtonProps = { isSearchManagementActive: boolean; isAtlasSearchSupported: boolean; isWritable: boolean; - onCreateRegularIndex: () => void; - onCreateSearchIndex: () => void; + onCreateRegularIndexClick: () => void; + onCreateSearchIndexClick: () => void; }; type CreateIndexActions = 'createRegularIndex' | 'createSearchIndex'; @@ -215,19 +215,19 @@ export const CreateIndexButton: React.FunctionComponent< isSearchManagementActive, isAtlasSearchSupported, isWritable, - onCreateRegularIndex, - onCreateSearchIndex, + onCreateRegularIndexClick, + onCreateSearchIndexClick, }) => { const onActionDispatch = useCallback( (action: CreateIndexActions) => { switch (action) { case 'createRegularIndex': - return onCreateRegularIndex(); + return onCreateRegularIndexClick(); case 'createSearchIndex': - return onCreateSearchIndex(); + return onCreateSearchIndexClick(); } }, - [onCreateRegularIndex, onCreateSearchIndex] + [onCreateRegularIndexClick, onCreateSearchIndexClick] ); if (isAtlasSearchSupported && isSearchManagementActive) { @@ -253,7 +253,7 @@ export const CreateIndexButton: React.FunctionComponent< ); diff --git a/packages/compass-crud/src/stores/crud-store.ts b/packages/compass-crud/src/stores/crud-store.ts index 496556241e2..14ef0e39b79 100644 --- a/packages/compass-crud/src/stores/crud-store.ts +++ b/packages/compass-crud/src/stores/crud-store.ts @@ -2064,10 +2064,6 @@ export function activateDocumentsPlugin( } }); - on(localAppRegistry, 'refresh-collection-stats', () => { - void collection.fetch({ dataService, force: true }); - }); - if (!options.noRefreshOnConfigure) { queueMicrotask(() => { void store.refreshDocuments(); diff --git a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx index ce7e488b03d..b13e8821cbc 100644 --- a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx +++ b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.spec.tsx @@ -37,7 +37,7 @@ describe('IndexesToolbar Component', function () { isWritable={true} writeStateDescription={undefined} onRefreshIndexes={() => {}} - isAtlasSearchSupported={false} + isSearchIndexesSupported={false} isRefreshing={false} onIndexViewChanged={() => {}} onCreateRegularIndexClick={() => {}} @@ -75,7 +75,7 @@ describe('IndexesToolbar Component', function () { showInsights: true, }); - renderIndexesToolbar({ isAtlasSearchSupported: true }); + renderIndexesToolbar({ isSearchIndexesSupported: true }); }); it('should render the create index dropdown button enabled', async function () { @@ -100,7 +100,7 @@ describe('IndexesToolbar Component', function () { showInsights: true, }); - renderIndexesToolbar({ isAtlasSearchSupported: false }); + renderIndexesToolbar({ isSearchIndexesSupported: false }); }); it('should render the create index button only', function () { @@ -198,7 +198,7 @@ describe('IndexesToolbar Component', function () { it('calls onCreateRegularIndexClick when index button is clicked', function () { const onCreateRegularIndexClickSpy = sinon.spy(); renderIndexesToolbar({ - isAtlasSearchSupported: true, + isSearchIndexesSupported: true, onCreateRegularIndexClick: onCreateRegularIndexClickSpy, }); @@ -221,7 +221,7 @@ describe('IndexesToolbar Component', function () { it('calls onCreateSearchIndexClick when index button is clicked', function () { const onCreateSearchIndexClickSpy = sinon.spy(); renderIndexesToolbar({ - isAtlasSearchSupported: true, + isSearchIndexesSupported: true, onCreateSearchIndexClick: onCreateSearchIndexClickSpy, }); @@ -308,7 +308,7 @@ describe('IndexesToolbar Component', function () { it('when it supports search management, it changes tab view', function () { renderIndexesToolbar({ - isAtlasSearchSupported: true, + isSearchIndexesSupported: true, onIndexViewChanged: onChangeViewCallback, }); const segmentControl = screen.getByText('Search Indexes'); @@ -320,7 +320,7 @@ describe('IndexesToolbar Component', function () { it('when it does not support search management, it renders tab as disabled', function () { renderIndexesToolbar({ - isAtlasSearchSupported: false, + isSearchIndexesSupported: false, onIndexViewChanged: onChangeViewCallback, }); const segmentControl = screen.getByText('Search Indexes'); diff --git a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx index 1ae1c99ecdf..2b8632dc57f 100644 --- a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx +++ b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx @@ -21,10 +21,7 @@ import { } from '@mongodb-js/compass-components'; import type { RootState } from '../../modules'; -import { - SearchIndexesStatuses, - createSearchIndexOpened, -} from '../../modules/search-indexes'; +import { createSearchIndexOpened } from '../../modules/search-indexes'; import { createIndexOpened } from '../../modules/create-index'; import type { IndexView } from '../../modules/index-view'; import { indexViewChanged } from '../../modules/index-view'; @@ -61,7 +58,7 @@ type IndexesToolbarProps = { onCreateRegularIndexClick: () => void; onCreateSearchIndexClick: () => void; writeStateDescription?: string; - isAtlasSearchSupported: boolean; + isSearchIndexesSupported: boolean; // via withPreferences: readOnly?: boolean; }; @@ -76,7 +73,7 @@ export const IndexesToolbar: React.FunctionComponent = ({ isRefreshing, writeStateDescription, hasTooManyIndexes, - isAtlasSearchSupported, + isSearchIndexesSupported, onRefreshIndexes, onIndexViewChanged, readOnly, // preferences readOnly. @@ -106,7 +103,7 @@ export const IndexesToolbar: React.FunctionComponent = ({
= ({ > Indexes - {!isAtlasSearchSupported && ( + {!isSearchIndexesSupported && ( = ({

)} - {isAtlasSearchSupported && ( + {isSearchIndexesSupported && ( = ({ type CreateIndexButtonProps = { isSearchManagementActive: boolean; - isAtlasSearchSupported: boolean; + isSearchIndexesSupported: boolean; isWritable: boolean; onCreateRegularIndexClick: () => void; onCreateSearchIndexClick: () => void; @@ -212,7 +209,7 @@ export const CreateIndexButton: React.FunctionComponent< CreateIndexButtonProps > = ({ isSearchManagementActive, - isAtlasSearchSupported, + isSearchIndexesSupported, isWritable, onCreateRegularIndexClick, onCreateSearchIndexClick, @@ -229,7 +226,7 @@ export const CreateIndexButton: React.FunctionComponent< [onCreateRegularIndexClick, onCreateSearchIndexClick] ); - if (isAtlasSearchSupported && isSearchManagementActive) { + if (isSearchIndexesSupported && isSearchManagementActive) { return ( ); } @@ -264,6 +262,7 @@ export const CreateIndexButton: React.FunctionComponent< const mapState = ({ isWritable, isReadonlyView, + isSearchIndexesSupported, description, serverVersion, searchIndexes, @@ -271,11 +270,11 @@ const mapState = ({ }: RootState) => ({ isWritable, isReadonlyView, + isSearchIndexesSupported, writeStateDescription: description, indexView, serverVersion, - isAtlasSearchSupported: - searchIndexes.status !== SearchIndexesStatuses.NOT_AVAILABLE, + searchIndexes, }); const mapDispatch = { diff --git a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx index 5b0e2fa2320..d1ec4a6b5eb 100644 --- a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx +++ b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx @@ -10,45 +10,56 @@ import { } from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; import sinon from 'sinon'; -import type { RegularIndex } from '../../modules/regular-indexes'; -import type { IndexesDataService } from '../../stores/store'; +import { type RegularIndex } from '../../modules/regular-indexes'; +import type { + IndexesDataService, + IndexesPluginOptions, +} from '../../stores/store'; import Indexes from './indexes'; import { setupStore } from '../../../test/setup-store'; import { searchIndexes } from '../../../test/fixtures/search-indexes'; import type { RootState } from '../../modules'; -const DEFAULT_PROPS: Partial = { - regularIndexes: { - indexes: [], - inProgressIndexes: [], - error: null, - isRefreshing: false, - }, - searchIndexes: { - indexes: [], - error: null, - status: 'PENDING', - createIndex: { - isModalOpen: false, - }, - updateIndex: { - isModalOpen: false, - }, - }, -} as any; - -const renderIndexes = ( - props: Partial = {}, - dataProvider: Partial = {} +const renderIndexes = async ( + options: Partial = {}, + dataProvider: Partial = {}, + props?: Partial ) => { - const store = setupStore(undefined, dataProvider); + const store = setupStore( + { ...options, isSearchIndexesSupported: true }, + dataProvider + ); + + // activating the store dispatches refreshRegular/Search indexes, but doesn't + // wait for it + await waitFor(() => { + expect(store.getState().regularIndexes.status).to.be.oneOf([ + 'READY', + 'ERROR', + ]); + expect(store.getState().searchIndexes.status).to.be.oneOf([ + 'READY', + 'ERROR', + ]); + }); + + if (props) { + const state = store.getState(); - const allProps: Partial = { - ...DEFAULT_PROPS, - ...props, - }; + const allProps: Partial = { + indexView: props.indexView ?? 'regular-indexes', + regularIndexes: { + ...state.regularIndexes, + ...props.regularIndexes, + }, + searchIndexes: { + ...state.searchIndexes, + ...props.searchIndexes, + }, + }; - Object.assign(store.getState(), allProps); + Object.assign(store.getState(), allProps); + } render( @@ -63,23 +74,25 @@ describe('Indexes Component', function () { before(cleanup); afterEach(cleanup); - it('renders indexes', function () { - renderIndexes(); + it('renders indexes', async function () { + await renderIndexes(); expect(screen.getByTestId('indexes-list')).to.exist; }); - it('renders indexes toolbar', function () { - renderIndexes(); + it('renders indexes toolbar', async function () { + await renderIndexes(); expect(screen.getByTestId('indexes-toolbar')).to.exist; }); - it('renders indexes toolbar when there is a regular indexes error', function () { - renderIndexes({ + it('renders indexes toolbar when there is a regular indexes error', async function () { + await renderIndexes(undefined, undefined, { + indexView: 'regular-indexes', regularIndexes: { indexes: [], error: 'Some random error', - isRefreshing: false, - } as any, + status: 'ERROR', + inProgressIndexes: [], + }, }); expect(screen.getByTestId('indexes-toolbar')).to.exist; // TODO: actually check for the error @@ -93,7 +106,11 @@ describe('Indexes Component', function () { const dataProvider = { getSearchIndexes: getSearchIndexesStub, }; - renderIndexes({}, dataProvider); + await renderIndexes(undefined, dataProvider, { + indexView: 'search-indexes', + }); + + expect(getSearchIndexesStub.callCount).to.equal(1); const toolbar = screen.getByTestId('indexes-toolbar'); expect(toolbar).to.exist; @@ -109,12 +126,14 @@ describe('Indexes Component', function () { }); }); - it('does not render the indexes list if isReadonlyView is true', function () { - renderIndexes({ + it('does not render the indexes list if isReadonlyView is true', async function () { + await renderIndexes(undefined, undefined, { + indexView: 'regular-indexes', regularIndexes: { + status: 'NOT_READY', inProgressIndexes: [], indexes: [], - } as any, + }, isReadonlyView: true, }); @@ -124,8 +143,9 @@ describe('Indexes Component', function () { }); context('regular indexes', function () { - it('renders indexes list', function () { - renderIndexes({ + it('renders indexes list', async function () { + await renderIndexes(undefined, undefined, { + indexView: 'regular-indexes', regularIndexes: { indexes: [ { @@ -146,9 +166,10 @@ describe('Indexes Component', function () { usageCount: 20, }, ] as RegularIndex[], - error: null, - isRefreshing: false, - } as any, + error: undefined, + status: 'READY', + inProgressIndexes: [], + }, }); const indexesList = screen.getByTestId('indexes-list'); @@ -156,11 +177,13 @@ describe('Indexes Component', function () { expect(within(indexesList).getByText('_id_')).to.exist; }); - it('renders indexes list with in progress index', function () { - renderIndexes({ + it('renders indexes list with in progress index', async function () { + await renderIndexes(undefined, undefined, { + indexView: 'regular-indexes', regularIndexes: { indexes: [ { + key: {}, ns: 'db.coll', cardinality: 'single', name: '_id_', @@ -178,6 +201,7 @@ describe('Indexes Component', function () { usageCount: 20, }, { + key: {}, ns: 'db.coll', cardinality: 'single', name: 'item', @@ -196,10 +220,11 @@ describe('Indexes Component', function () { ], usageCount: 0, }, - ] as RegularIndex[], - error: null, - isRefreshing: false, - } as any, + ], + inProgressIndexes: [], + error: undefined, + status: 'READY', + }, }); const indexesList = screen.getByTestId('indexes-list'); @@ -215,11 +240,13 @@ describe('Indexes Component', function () { expect(dropIndexButton).to.not.exist; }); - it('renders indexes list with failed index', function () { - renderIndexes({ + it('renders indexes list with failed index', async function () { + await renderIndexes(undefined, undefined, { + indexView: 'regular-indexes', regularIndexes: { indexes: [ { + key: {}, ns: 'db.coll', cardinality: 'single', name: '_id_', @@ -237,6 +264,7 @@ describe('Indexes Component', function () { usageCount: 20, }, { + key: {}, ns: 'db.coll', cardinality: 'single', name: 'item', @@ -256,10 +284,11 @@ describe('Indexes Component', function () { ], usageCount: 0, }, - ] as RegularIndex[], - error: null, - isRefreshing: false, - } as any, + ], + inProgressIndexes: [], + error: undefined, + status: 'READY', + }, }); const indexesList = screen.getByTestId('indexes-list'); @@ -282,7 +311,7 @@ describe('Indexes Component', function () { const dataProvider = { getSearchIndexes: getSearchIndexesStub, }; - renderIndexes({}, dataProvider); + await renderIndexes(undefined, dataProvider); // switch to the Search Indexes tab const toolbar = screen.getByTestId('indexes-toolbar'); @@ -299,7 +328,9 @@ describe('Indexes Component', function () { const dataProvider = { getSearchIndexes: getSearchIndexesStub, }; - renderIndexes({}, dataProvider); + await renderIndexes(undefined, dataProvider, { + indexView: 'search-indexes', + }); // switch to the Search Indexes tab const toolbar = screen.getByTestId('indexes-toolbar'); @@ -316,27 +347,5 @@ describe('Indexes Component', function () { expect(getSearchIndexesStub.callCount).to.equal(2); }); - - it('switches to the search indexes table when a search index is created', async function () { - renderIndexes({ - // render with the create search index modal open - ...DEFAULT_PROPS, - searchIndexes: { - ...DEFAULT_PROPS.searchIndexes, - createIndex: { - ...DEFAULT_PROPS.searchIndexes!.createIndex, - isModalOpen: true, - }, - } as any, - }); - - // check that the search indexes table is not visible - expect(screen.queryByTestId('search-indexes')).is.null; - // click the create index button - (await screen.findByTestId('search-index-submit-button')).click(); - // we are not creating the index (due to the test) - // but we are switch, so we will see the zero-graphic - expect(await screen.findByText('No search indexes yet')).is.visible; - }); }); }); diff --git a/packages/compass-indexes/src/components/indexes/indexes.tsx b/packages/compass-indexes/src/components/indexes/indexes.tsx index 66a6df51638..61c8f18e3c8 100644 --- a/packages/compass-indexes/src/components/indexes/indexes.tsx +++ b/packages/compass-indexes/src/components/indexes/indexes.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect } from 'react'; +import React from 'react'; import { connect } from 'react-redux'; import { Banner, @@ -16,8 +16,8 @@ import { refreshRegularIndexes } from '../../modules/regular-indexes'; import { refreshSearchIndexes } from '../../modules/search-indexes'; import type { State as RegularIndexesState } from '../../modules/regular-indexes'; import type { State as SearchIndexesState } from '../../modules/search-indexes'; -import { SearchIndexesStatuses } from '../../modules/search-indexes'; -import type { SearchIndexesStatus } from '../../modules/search-indexes'; +import { FetchStatuses } from '../../utils/fetch-status'; +import type { FetchStatus } from '../../utils/fetch-status'; import type { RootState } from '../../modules'; import { CreateSearchIndexModal, @@ -67,20 +67,16 @@ const AtlasIndexesBanner = () => { type IndexesProps = { isReadonlyView?: boolean; - regularIndexes: Pick< - RegularIndexesState, - 'indexes' | 'error' | 'isRefreshing' - >; + regularIndexes: Pick; searchIndexes: Pick; currentIndexesView: IndexView; refreshRegularIndexes: () => void; refreshSearchIndexes: () => void; }; -function isRefreshingStatus(status: SearchIndexesStatus) { +function isRefreshingStatus(status: FetchStatus) { return ( - status === SearchIndexesStatuses.FETCHING || - status === SearchIndexesStatuses.REFRESHING + status === FetchStatuses.FETCHING || status === FetchStatuses.REFRESHING ); } @@ -110,7 +106,7 @@ export function Indexes({ const isRefreshing = currentIndexesView === 'regular-indexes' - ? regularIndexes.isRefreshing === true + ? isRefreshingStatus(regularIndexes.status) : isRefreshingStatus(searchIndexes.status); const onRefreshIndexes = @@ -118,18 +114,6 @@ export function Indexes({ ? refreshRegularIndexes : refreshSearchIndexes; - const loadIndexes = useCallback(() => { - if (currentIndexesView === 'regular-indexes') { - refreshRegularIndexes(); - } else { - refreshSearchIndexes(); - } - }, [currentIndexesView, refreshRegularIndexes, refreshSearchIndexes]); - - useEffect(() => { - loadIndexes(); - }, [loadIndexes]); - const enableAtlasSearchIndexes = usePreference('enableAtlasSearchIndexes'); return ( @@ -176,8 +160,6 @@ const mapState = ({ }); const mapDispatch = { - // TODO(COMPASS-8214): loading, polling, refreshing the indexes should all - // happen in the store, not the UI. refreshRegularIndexes, refreshSearchIndexes, }; diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx index ad123bcf338..4164b1e9e9a 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx @@ -111,6 +111,8 @@ const renderIndexList = ( onHideIndexClick={() => {}} onUnhideIndexClick={() => {}} onDeleteIndexClick={() => {}} + onRegularIndexesOpened={() => {}} + onRegularIndexesClosed={() => {}} {...props} /> ); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx index 77014926fa7..4325f27c3ad 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx @@ -1,6 +1,7 @@ -import React, { useMemo } from 'react'; +import React, { useMemo, useEffect } from 'react'; import { connect } from 'react-redux'; import { withPreferences } from 'compass-preferences-model/provider'; +import { useWorkspaceTabId } from '@mongodb-js/compass-workspaces/provider'; import { IndexKeysBadge } from '@mongodb-js/compass-components'; import type { LGColumnDef, @@ -21,6 +22,8 @@ import { dropIndex, hideIndex, unhideIndex, + startPollingRegularIndexes, + stopPollingRegularIndexes, } from '../../modules/regular-indexes'; import { type RegularIndex } from '../../modules/regular-indexes'; @@ -34,6 +37,8 @@ type RegularIndexesTableProps = { onDeleteIndexClick: (name: string) => void; readOnly?: boolean; error?: string | null; + onRegularIndexesOpened: (tabId: string) => void; + onRegularIndexesClosed: (tabId: string) => void; }; type IndexInfo = { @@ -145,8 +150,19 @@ export const RegularIndexesTable: React.FunctionComponent< onHideIndexClick, onUnhideIndexClick, onDeleteIndexClick, + onRegularIndexesOpened, + onRegularIndexesClosed, error, }) => { + const tabId = useWorkspaceTabId(); + + useEffect(() => { + onRegularIndexesOpened(tabId); + return () => { + onRegularIndexesClosed(tabId); + }; + }, [tabId, onRegularIndexesOpened, onRegularIndexesClosed]); + const data = useMemo[]>( () => indexes.map((index) => ({ @@ -224,6 +240,8 @@ const mapDispatch = { onDeleteIndexClick: dropIndex, onHideIndexClick: hideIndex, onUnhideIndexClick: unhideIndex, + onRegularIndexesOpened: startPollingRegularIndexes, + onRegularIndexesClosed: stopPollingRegularIndexes, }; export default connect( diff --git a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx index 2571f787352..ebfd350b258 100644 --- a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx +++ b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx @@ -5,14 +5,13 @@ import { screen, fireEvent, within, - waitFor, userEvent, } from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; import sinon from 'sinon'; import type { Document } from 'mongodb'; import { SearchIndexesTable } from './search-indexes-table'; -import { SearchIndexesStatuses } from '../../modules/search-indexes'; +import { FetchStatuses } from '../../utils/fetch-status'; import { searchIndexes as indexes, vectorSearchIndexes, @@ -33,7 +32,8 @@ const renderIndexList = ( onDropIndexClick={noop} onEditIndexClick={noop} onOpenCreateModalClick={noop} - onPollIndexes={noop} + onSearchIndexesOpened={noop} + onSearchIndexesClosed={noop} {...props} /> ); @@ -43,10 +43,7 @@ describe('SearchIndexesTable Component', function () { before(cleanup); afterEach(cleanup); - for (const status of [ - SearchIndexesStatuses.READY, - SearchIndexesStatuses.REFRESHING, - ]) { + for (const status of [FetchStatuses.READY, FetchStatuses.REFRESHING]) { it(`renders indexes list if the status is ${status}`, function () { renderIndexList({ status }); @@ -98,10 +95,7 @@ describe('SearchIndexesTable Component', function () { }); } - for (const status of [ - SearchIndexesStatuses.FETCHING, - SearchIndexesStatuses.NOT_READY, - ]) { + for (const status of [FetchStatuses.FETCHING, FetchStatuses.NOT_READY]) { it(`does not render the list if the status is ${status}`, function () { renderIndexList({ status, @@ -183,25 +177,6 @@ describe('SearchIndexesTable Component', function () { }); }); - describe('connectivity', function () { - it('does poll the index for changes in online mode', async function () { - const onPollIndexesSpy = sinon.spy(); - const testPollingInterval = 50; - renderIndexList({ - onPollIndexes: onPollIndexesSpy, - isWritable: true, - pollingInterval: testPollingInterval, - }); - - await waitFor( - () => { - expect(onPollIndexesSpy.callCount).to.equal(1); - }, - { timeout: testPollingInterval * 1.5 } - ); - }); - }); - describe('sorting', function () { function getIndexNames() { return screen.getAllByTestId('search-indexes-name-field').map((el) => { diff --git a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx index 4105c857f99..6285951d677 100644 --- a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx +++ b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo } from 'react'; +import React, { useMemo, useEffect } from 'react'; import { connect } from 'react-redux'; import type { Document } from 'mongodb'; import type { SearchIndex, SearchIndexStatus } from 'mongodb-data-service'; @@ -21,43 +21,43 @@ import type { LGTableDataType, } from '@mongodb-js/compass-components'; +import { FetchStatuses } from '../../utils/fetch-status'; import { - SearchIndexesStatuses, dropSearchIndex, getInitialSearchIndexPipeline, getInitialVectorSearchIndexPipelineText, - pollSearchIndexes, createSearchIndexOpened, updateSearchIndexOpened, + startPollingSearchIndexes, + stopPollingSearchIndexes, } from '../../modules/search-indexes'; -import type { SearchIndexesStatus } from '../../modules/search-indexes'; +import type { FetchStatus } from '../../utils/fetch-status'; import { IndexesTable } from '../indexes-table'; import SearchIndexActions from './search-index-actions'; import { ZeroGraphic } from './zero-graphic'; import type { RootState } from '../../modules'; import BadgeWithIconLink from '../indexes-table/badge-with-icon-link'; import { useConnectionInfo } from '@mongodb-js/compass-connections/provider'; - -export const POLLING_INTERVAL = 5000; +import { useWorkspaceTabId } from '@mongodb-js/compass-workspaces/provider'; type SearchIndexesTableProps = { namespace: string; indexes: SearchIndex[]; isWritable?: boolean; readOnly?: boolean; - status: SearchIndexesStatus; + status: FetchStatus; onDropIndexClick: (name: string) => void; onEditIndexClick: (name: string) => void; onOpenCreateModalClick: () => void; - onPollIndexes: () => void; - pollingInterval?: number; + onSearchIndexesOpened: (tabId: string) => void; + onSearchIndexesClosed: (tabId: string) => void; }; -function isReadyStatus(status: SearchIndexesStatus) { +function isReadyStatus(status: FetchStatus) { return ( - status === SearchIndexesStatuses.READY || - status === SearchIndexesStatuses.REFRESHING || - status === SearchIndexesStatuses.POLLING + status === FetchStatuses.READY || + status === FetchStatuses.REFRESHING || + status === FetchStatuses.POLLING ); } @@ -282,18 +282,20 @@ export const SearchIndexesTable: React.FunctionComponent< onOpenCreateModalClick, onEditIndexClick, onDropIndexClick, - onPollIndexes, - pollingInterval = POLLING_INTERVAL, + onSearchIndexesOpened, + onSearchIndexesClosed, }) => { const { openCollectionWorkspace } = useOpenWorkspace(); const { id: connectionId } = useConnectionInfo(); + const tabId = useWorkspaceTabId(); + useEffect(() => { - const id = setInterval(onPollIndexes, pollingInterval); + onSearchIndexesOpened(tabId); return () => { - clearInterval(id); + onSearchIndexesClosed(tabId); }; - }, [onPollIndexes, pollingInterval]); + }, [tabId, onSearchIndexesOpened, onSearchIndexesClosed]); const data = useMemo[]>( () => @@ -399,7 +401,8 @@ const mapDispatch = { onDropIndexClick: dropSearchIndex, onOpenCreateModalClick: createSearchIndexOpened, onEditIndexClick: updateSearchIndexOpened, - onPollIndexes: pollSearchIndexes, + onSearchIndexesOpened: startPollingSearchIndexes, + onSearchIndexesClosed: stopPollingSearchIndexes, }; export default connect( diff --git a/packages/compass-indexes/src/modules/create-index.tsx b/packages/compass-indexes/src/modules/create-index.tsx index a466561522c..f9ada33fa4a 100644 --- a/packages/compass-indexes/src/modules/create-index.tsx +++ b/packages/compass-indexes/src/modules/create-index.tsx @@ -9,7 +9,7 @@ import type { InProgressIndex } from './regular-indexes'; import type { IndexesThunkAction } from '.'; import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; import type { RootState } from '.'; -import { fetchIndexes } from './regular-indexes'; +import { refreshRegularIndexes } from './regular-indexes'; export enum ActionTypes { FieldAdded = 'compass-indexes/create-index/fields/field-added', @@ -67,7 +67,7 @@ type ErrorClearedAction = { type: ActionTypes.ErrorCleared; }; -type CreateIndexOpenedAction = { +export type CreateIndexOpenedAction = { type: ActionTypes.CreateIndexOpened; }; @@ -530,7 +530,7 @@ export const createIndex = (): IndexesThunkAction< // Start a new fetch so that the newly added index's details can be // loaded. indexCreationSucceeded() will remove the in-progress one, but // we still need the new info. - await dispatch(fetchIndexes()); + await dispatch(refreshRegularIndexes()); } catch (err) { dispatch(indexCreationFailed(inProgressIndex.id, (err as Error).message)); } diff --git a/packages/compass-indexes/src/modules/index-view.ts b/packages/compass-indexes/src/modules/index-view.ts index 612ef0f5e7a..1abceef58d3 100644 --- a/packages/compass-indexes/src/modules/index-view.ts +++ b/packages/compass-indexes/src/modules/index-view.ts @@ -1,6 +1,12 @@ import type { AnyAction } from 'redux'; import { isAction } from '../utils/is-action'; +import type { CreateIndexOpenedAction } from './create-index'; +import { ActionTypes as CreateIndexActionTypes } from './create-index'; + +import type { CreateSearchIndexOpenedAction } from './search-indexes'; +import { ActionTypes as SearchIndexActionTypes } from './search-indexes'; + export type IndexView = 'regular-indexes' | 'search-indexes'; export enum ActionTypes { @@ -18,6 +24,27 @@ export default function reducer( state = INITIAL_STATE, action: AnyAction ): IndexView { + // The create index button has a dropdown where you can select regular or + // search index and then open the appropriate modal regardless of what view + // the user is on. This switches to the appropriate view so the user can see + // the newly created index. + if ( + isAction( + action, + CreateIndexActionTypes.CreateIndexOpened + ) + ) { + return 'regular-indexes'; + } + if ( + isAction( + action, + SearchIndexActionTypes.CreateSearchIndexOpened + ) + ) { + return 'search-indexes'; + } + if (isAction(action, ActionTypes.IndexViewChanged)) { return action.view; } diff --git a/packages/compass-indexes/src/modules/index.ts b/packages/compass-indexes/src/modules/index.ts index e2f999b65ea..c953acdf1cf 100644 --- a/packages/compass-indexes/src/modules/index.ts +++ b/packages/compass-indexes/src/modules/index.ts @@ -4,6 +4,7 @@ import type AppRegistry from 'hadron-app-registry'; import isWritable from './is-writable'; import indexView from './index-view'; import isReadonlyView from './is-readonly-view'; +import isSearchIndexesSupported from './is-search-indexes-supported'; import description from './description'; import regularIndexes from './regular-indexes'; import searchIndexes from './search-indexes'; @@ -27,6 +28,9 @@ const reducer = combineReducers({ // CollectionProps) Used to know if many things should even be visible. isReadonlyView, + // Does this collection support search indexes + isSearchIndexesSupported, + // 'regular-indexes' or 'search-indexes' indexView, diff --git a/packages/compass-indexes/src/modules/is-search-indexes-supported.ts b/packages/compass-indexes/src/modules/is-search-indexes-supported.ts new file mode 100644 index 00000000000..a21e22029e3 --- /dev/null +++ b/packages/compass-indexes/src/modules/is-search-indexes-supported.ts @@ -0,0 +1,40 @@ +import type { AnyAction } from 'redux'; + +export const IS_SEARCH_INDEXES_SUPPORTED_CHANGED = + 'indexes/is-search-indexes-supported/is-search-indexes-supported-changed'; + +/** + * The initial state of the is readonly view attribute. + */ +export const INITIAL_STATE = false; + +/** + * Reducer function for is readonly view state. + * + * @param {Boolean} state - The state. + * + * @returns {Boolean} The state. + */ +export default function reducer( + state = INITIAL_STATE, + action: AnyAction +): boolean { + if (action.type === IS_SEARCH_INDEXES_SUPPORTED_CHANGED) { + return action.isSearchIndexesSupported; + } + return state; +} + +/** + * Action creator for readonly view changed events. + * + * @param {Boolean} isReadonlyView - Is the view readonly. + * + * @returns {import('redux').AnyAction} The readonly view changed action. + */ +export const isSearchIndexesSupportedChanged = ( + isSearchIndexesSupported: boolean +) => ({ + type: IS_SEARCH_INDEXES_SUPPORTED_CHANGED, + isSearchIndexesSupported, +}); diff --git a/packages/compass-indexes/src/modules/regular-indexes.spec.ts b/packages/compass-indexes/src/modules/regular-indexes.spec.ts index d7276e772fc..c138e14b411 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.spec.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.spec.ts @@ -1,24 +1,30 @@ import { expect } from 'chai'; -import { setTimeout as wait } from 'timers/promises'; import sinon from 'sinon'; import { - fetchIndexes, refreshRegularIndexes, + pollRegularIndexes, dropIndex, hideIndex, unhideIndex, + startPollingRegularIndexes, + stopPollingRegularIndexes, } from './regular-indexes'; import { indexesList, defaultSortedIndexes, - //usageSortedIndexes, inProgressIndexes, } from '../../test/fixtures/regular-indexes'; import { readonlyViewChanged } from './is-readonly-view'; -import { setupStore } from '../../test/setup-store'; +import { + setupStore, + setupStoreAndWait, + createMockCollection, +} from '../../test/setup-store'; // Importing this to stub showConfirmation import * as regularIndexesSlice from './regular-indexes'; +import type { FetchStatus } from '../utils/fetch-status'; +import { waitFor } from '@mongodb-js/testing-library-compass'; describe('regular-indexes module', function () { before(() => { @@ -29,13 +35,40 @@ describe('regular-indexes module', function () { sinon.restore(); }); - describe('#fetchIndexes action', function () { + describe('#fetchRegularIndexees action', function () { + it('sets status to ERROR and sets the error when there is an error', async function () { + const error = new Error('failed to connect to server'); + const store = await setupStoreAndWait( + {}, + { + indexes: () => Promise.reject(error), + } + ); + + // Set some data to validate the empty array condition + Object.assign(store.getState(), { + regularIndexes: { + ...store.getState().regularIndexes, + indexes: defaultSortedIndexes.slice(), + }, + }); + + const state = store.getState().regularIndexes; + expect(state.error).to.equal(error.message); + expect(state.status).to.equal('ERROR'); + expect(state.indexes).to.deep.equal(defaultSortedIndexes); + }); + }); + + describe('#refreshRegularIndexes action', function () { it('sets indexes to empty array for views', async function () { - const indexesSpy = sinon.spy(); + const indexesStub = sinon.stub().resolves([]); const store = setupStore( - {}, { - indexes: indexesSpy, + isReadonly: true, + }, + { + indexes: indexesStub, } ); @@ -48,15 +81,15 @@ describe('regular-indexes module', function () { store.dispatch(readonlyViewChanged(true)); - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); expect(store.getState().regularIndexes.indexes).to.have.lengthOf(0); - expect(indexesSpy.callCount).to.equal(0); + expect(indexesStub.callCount).to.equal(0); }); - it('sets indexes to empty array when there is an error', async function () { + it('sets status to ready and sets the error when there is an error', async function () { const error = new Error('failed to connect to server'); - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.reject(error), @@ -71,31 +104,31 @@ describe('regular-indexes module', function () { }, }); - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); const state = store.getState().regularIndexes; - expect(state.indexes).to.deep.equal(defaultSortedIndexes); expect(state.error).to.equal(error.message); - expect(state.isRefreshing).to.equal(false); + expect(state.status).to.equal('READY'); + expect(state.indexes).to.deep.equal(defaultSortedIndexes); }); it('sets indexes when fetched successfully', async function () { - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(defaultSortedIndexes), } ); - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); const state = store.getState().regularIndexes; expect(state.indexes).to.deep.eq(defaultSortedIndexes); - expect(state.error).to.be.null; - expect(state.isRefreshing).to.equal(false); + expect(state.error).to.be.undefined; + expect(state.status).to.equal('READY'); }); it('merges with in progress indexes', async function () { - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), @@ -109,7 +142,7 @@ describe('regular-indexes module', function () { }, }); - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); const state = store.getState().regularIndexes; @@ -165,32 +198,158 @@ describe('regular-indexes module', function () { }, ]); - expect(state.error).to.be.null; - expect(state.isRefreshing).to.equal(false); + expect(state.error).to.be.undefined; + expect(state.status).to.equal('READY'); }); - }); - describe('#refreshRegularIndexes action', function () { - it('sets isRefreshing when indexes are refreshed', async function () { + it('sets status=FETCHING when indexes are being fetched and status is NOT_READY', async function () { + let statusBeforeFetch: FetchStatus | undefined = undefined; + + const indexesStub = sinon.stub().callsFake(async () => { + // make sure the store is done setting up before we try and use it + await Promise.resolve(); + + statusBeforeFetch = store.getState().regularIndexes.status; + return Promise.resolve(defaultSortedIndexes); + }); + const store = setupStore( {}, { - indexes: async () => { - await wait(100); - return defaultSortedIndexes; - }, + indexes: indexesStub, + } + ); + + await waitFor(() => { + expect(statusBeforeFetch).to.equal('FETCHING'); + }); + }); + + it('sets status=REFRESHING when indexes are being fetched and status is READY', async function () { + let calls = 0; + let statusBeforeFetch: FetchStatus | undefined = undefined; + + const indexesStub = sinon.stub().callsFake(async () => { + // make sure the store is done setting up before we try and use it + await Promise.resolve(); + + if (calls === 1) { + statusBeforeFetch = store.getState().regularIndexes.status; + } + calls++; + return Promise.resolve(defaultSortedIndexes); + }); + + const store = await setupStoreAndWait( + {}, + { + indexes: indexesStub, + } + ); + + Object.assign(store.getState(), { + regularIndexes: { + ...store.getState().regularIndexes, + error: 'the previous error', + status: 'READY', + indexes: defaultSortedIndexes.slice(), + }, + }); + + expect(indexesStub.callCount).to.equal(1); + await store.dispatch(refreshRegularIndexes()); + + await waitFor(() => { + expect(statusBeforeFetch).to.equal('REFRESHING'); + }); + + expect(indexesStub.callCount).to.equal(2); + }); + + it('calls collection.fetch() when the indexes change', async function () { + const changedSortedIndexes = [defaultSortedIndexes[0]]; + const indexesStub = sinon + .stub() + .onFirstCall() + .resolves(defaultSortedIndexes) + .onSecondCall() + .resolves(changedSortedIndexes); + + const collection = createMockCollection(); + + const store = await setupStoreAndWait( + {}, + { + indexes: indexesStub, + }, + { collection } + ); + + // the initial fetch + expect(indexesStub.callCount).to.equal(1); + + expect(collection.fetch.callCount).to.equal(0); + + await store.dispatch(refreshRegularIndexes()); + + expect(indexesStub.callCount).to.equal(2); + + expect(collection.fetch.callCount).to.equal(1); + }); + }); + + describe('#pollRegularIndexes action', function () { + it('sets status to READY and leaves error when there is an error', async function () { + const error = new Error('failed to connect to server'); + const store = await setupStoreAndWait( + {}, + { + indexes: () => Promise.reject(error), } ); - // don't await so we can check the intermediate result - void store.dispatch(refreshRegularIndexes()); - expect(store.getState().regularIndexes.isRefreshing).to.be.true; + // Set some data to validate the empty array condition + Object.assign(store.getState(), { + regularIndexes: { + ...store.getState().regularIndexes, + error: 'the previous error', + status: 'READY', + indexes: defaultSortedIndexes.slice(), + }, + }); + + await store.dispatch(pollRegularIndexes()); - await wait(100); - expect(store.getState().regularIndexes.isRefreshing).to.be.false; - expect(store.getState().regularIndexes.indexes).to.deep.equal( - defaultSortedIndexes + const state = store.getState().regularIndexes; + expect(state.error).to.equal('the previous error'); + expect(state.status).to.equal('READY'); + expect(state.indexes).to.deep.equal(defaultSortedIndexes); + }); + + it('sets status=POLLING when indexes are being fetched', async function () { + let statusBeforeFetch: FetchStatus | undefined = undefined; + const store = await setupStoreAndWait( + {}, + { + indexes: sinon.stub().callsFake(() => { + statusBeforeFetch = store.getState().regularIndexes.status; + return Promise.resolve(defaultSortedIndexes); + }), + } ); + + Object.assign(store.getState(), { + regularIndexes: { + ...store.getState().regularIndexes, + error: 'the previous error', + status: 'READY', + indexes: defaultSortedIndexes.slice(), + }, + }); + + await store.dispatch(pollRegularIndexes()); + expect(statusBeforeFetch).to.equal('POLLING'); + expect(store.getState().regularIndexes.status).to.equal('READY'); }); }); @@ -200,7 +359,7 @@ describe('regular-indexes module', function () { describe('#dropIndex (thunk)', function () { it('removes a failed in-progress index', async function () { - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), @@ -223,7 +382,7 @@ describe('regular-indexes module', function () { }); // fetch first so it merges the in-progress ones - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); // one of the real indexes is also in progress, so gets merged together const numOverlapping = 1; @@ -250,7 +409,7 @@ describe('regular-indexes module', function () { }); it('removes a real index', async function () { - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), @@ -270,7 +429,7 @@ describe('regular-indexes module', function () { }); // fetch first so it merges the in-progress ones - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); // one of the real indexes is also in progress, so gets merged together const numOverlapping = 1; @@ -296,7 +455,7 @@ describe('regular-indexes module', function () { describe('#hideIndex (thunk)', function () { it('hides an index', async function () { const updateCollection = sinon.stub().resolves({}); - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), @@ -305,7 +464,7 @@ describe('regular-indexes module', function () { ); // fetch indexes so there's something to hide - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); await store.dispatch(hideIndex('BBBB')); @@ -318,7 +477,7 @@ describe('regular-indexes module', function () { describe('#unhideIndex (thunk)', function () { it('unhides an index', async function () { const updateCollection = sinon.stub().resolves({}); - const store = setupStore( + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), @@ -327,7 +486,7 @@ describe('regular-indexes module', function () { ); // fetch indexes so there's something to hide - await store.dispatch(fetchIndexes()); + await store.dispatch(refreshRegularIndexes()); await store.dispatch(unhideIndex('BBBB')); @@ -336,4 +495,92 @@ describe('regular-indexes module', function () { ]); }); }); + + describe('startPollingRegularIndexes and stopPollingRegularIndexes', function () { + let clock: sinon.SinonFakeTimers; + + after(() => { + clock.restore(); + }); + + it('starts and stops the polling', async function () { + const pollInterval = 5000; + const tabId = 'my-tab'; + + const collection = createMockCollection(); + + const indexesStub = sinon.stub().resolves(indexesList); + const store = await setupStoreAndWait( + {}, + { + indexes: indexesStub, + }, + { + collection, + } + ); + + const waitForStatus = async (status: FetchStatus) => { + await waitFor(() => { + expect(store.getState().regularIndexes.status).to.eq(status); + }); + }; + + clock = sinon.useFakeTimers(); + + expect(collection.fetch.callCount).to.equal(0); + + // before we start + expect(store.getState().regularIndexes.status).to.equal('READY'); + + // initial load + expect(indexesStub.callCount).to.equal(1); + + store.dispatch(startPollingRegularIndexes(tabId)); + + // poll + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(indexesStub.callCount).to.equal(2); + await waitForStatus('READY'); + + // poll + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(indexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // stop + store.dispatch(stopPollingRegularIndexes(tabId)); + + // no more polling + clock.tick(pollInterval); + expect(indexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // open again + store.dispatch(startPollingRegularIndexes(tabId)); + + // won't execute immediately + expect(indexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // does poll after the interval + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(indexesStub.callCount).to.equal(4); + await waitForStatus('READY'); + + // and again + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(indexesStub.callCount).to.equal(5); + await waitForStatus('READY'); + + // clean up + store.dispatch(stopPollingRegularIndexes(tabId)); + + expect(collection.fetch.callCount).to.equal(0); + }); + }); }); diff --git a/packages/compass-indexes/src/modules/regular-indexes.ts b/packages/compass-indexes/src/modules/regular-indexes.ts index 8c4be684955..e51e1bcdcaa 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.ts @@ -1,12 +1,16 @@ +import { cloneDeep, isEqual, pick } from 'lodash'; import type { IndexDefinition } from 'mongodb-data-service'; import type { AnyAction } from 'redux'; import { openToast, showConfirmation as showConfirmationModal, } from '@mongodb-js/compass-components'; -import { cloneDeep } from 'lodash'; -import { isAction } from './../utils/is-action'; +import { FetchStatuses, NOT_FETCHABLE_STATUSES } from '../utils/fetch-status'; +import type { FetchStatus } from '../utils/fetch-status'; +import { FetchReasons } from '../utils/fetch-reason'; +import type { FetchReason } from '../utils/fetch-reason'; +import { isAction } from '../utils/is-action'; import { ActionTypes as CreateIndexActionTypes } from './create-index'; import type { CreateIndexSpec, @@ -14,7 +18,7 @@ import type { IndexCreationSucceededAction, IndexCreationFailedAction, } from './create-index'; -import type { IndexesThunkAction } from '.'; +import type { IndexesThunkAction, RootState } from '.'; import { hideModalDescription, unhideModalDescription, @@ -42,6 +46,9 @@ export type InProgressIndex = { }; export enum ActionTypes { + IndexesOpened = 'compass-indexes/regular-indexes/indexes-opened', + IndexesClosed = 'compass-indexes/regular-indexes/indexes-closed', + FetchIndexesStarted = 'compass-indexes/regular-indexes/fetch-indexes-started', FetchIndexesSucceeded = 'compass-indexes/regular-indexes/fetch-indexes-succeeded', FetchIndexesFailed = 'compass-indexes/regular-indexes/fetch-indexes-failed', @@ -52,9 +59,17 @@ export enum ActionTypes { FailedIndexRemoved = 'compass-indexes/regular-indexes/failed-index-removed', } +type IndexesOpenedAction = { + type: ActionTypes.IndexesOpened; +}; + +type IndexesClosedAction = { + type: ActionTypes.IndexesClosed; +}; + type FetchIndexesStartedAction = { type: ActionTypes.FetchIndexesStarted; - isRefreshing: boolean; + reason: FetchReason; }; type FetchIndexesSucceededAction = { @@ -74,29 +89,45 @@ type FailedIndexRemovedAction = { export type State = { indexes: RegularIndex[]; - isRefreshing: boolean; + status: FetchStatus; inProgressIndexes: InProgressIndex[]; - error: string | null; + error?: string; }; export const INITIAL_STATE: State = { + status: FetchStatuses.NOT_READY, indexes: [], inProgressIndexes: [], - isRefreshing: false, - error: null, + error: undefined, }; export default function reducer( state = INITIAL_STATE, action: AnyAction ): State { + if (isAction(action, ActionTypes.IndexesOpened)) { + return { + ...state, + }; + } + + if (isAction(action, ActionTypes.IndexesClosed)) { + return { + ...state, + }; + } + if ( isAction(action, ActionTypes.FetchIndexesStarted) ) { return { ...state, - error: null, - isRefreshing: action.isRefreshing, + status: + action.reason === FetchReasons.POLL + ? FetchStatuses.POLLING + : action.reason === FetchReasons.REFRESH + ? FetchStatuses.REFRESHING + : FetchStatuses.FETCHING, }; } @@ -116,7 +147,7 @@ export default function reducer( return { ...state, indexes: allIndexes, - isRefreshing: false, + status: FetchStatuses.READY, }; } @@ -125,8 +156,15 @@ export default function reducer( ) { return { ...state, - error: action.error, - isRefreshing: false, + // We do no set any error on poll or refresh and the + // previous list of indexes is shown to the user. + // If fetch fails for refresh or polling, set the status to READY again. + error: + state.status === FetchStatuses.FETCHING ? action.error : state.error, + status: + state.status === FetchStatuses.FETCHING + ? FetchStatuses.ERROR + : FetchStatuses.READY, }; } @@ -210,10 +248,10 @@ export default function reducer( } const fetchIndexesStarted = ( - isRefreshing: boolean + reason: FetchReason ): FetchIndexesStartedAction => ({ type: ActionTypes.FetchIndexesStarted, - isRefreshing, + reason, }); const fetchIndexesSucceeded = ( @@ -233,37 +271,114 @@ type FetchIndexesActions = | FetchIndexesSucceededAction | FetchIndexesFailedAction; -export const fetchIndexes = ( - isRefreshing = false +const collectionStatFields = ['name', 'size']; + +function pickCollectionStatFields(state: RootState) { + return state.regularIndexes.indexes.map((index) => + pick(index, collectionStatFields) + ); +} + +const fetchIndexes = ( + reason: FetchReason ): IndexesThunkAction, FetchIndexesActions> => { - return async (dispatch, getState, { dataService, localAppRegistry }) => { - const { isReadonlyView, namespace } = getState(); + return async (dispatch, getState, { dataService, collection }) => { + const { + isReadonlyView, + namespace, + regularIndexes: { status }, + } = getState(); if (isReadonlyView) { dispatch(fetchIndexesSucceeded([])); return; } + // If we are already fetching indexes, we will wait for that + if (NOT_FETCHABLE_STATUSES.includes(status)) { + return; + } + try { - dispatch(fetchIndexesStarted(isRefreshing)); - // This makes sure that when the user or something else triggers a - // re-fetch for the list of indexes with this action, the tab header also - // gets updated. - localAppRegistry.emit('refresh-collection-stats'); + dispatch(fetchIndexesStarted(reason)); const indexes = await dataService.indexes(namespace); + const indexesBefore = pickCollectionStatFields(getState()); dispatch(fetchIndexesSucceeded(indexes)); + const indexesAfter = pickCollectionStatFields(getState()); + if ( + reason !== FetchReasons.INITIAL_FETCH && + !isEqual(indexesBefore, indexesAfter) + ) { + // This makes sure that when the user or something else triggers a + // re-fetch for the list of indexes with this action and the total + // changed, the tab header also gets updated. The check against the + // total is a bit of an optimisation so that we don't also poll the + // collection stats. + collection.fetch({ dataService, force: true }).catch(() => { + /* ignore */ + }); + } } catch (err) { dispatch(fetchIndexesFailed((err as Error).message)); } }; }; +export const fetchRegularIndexes = (): IndexesThunkAction< + Promise, + FetchIndexesActions +> => { + return async (dispatch) => { + await dispatch(fetchIndexes(FetchReasons.INITIAL_FETCH)); + }; +}; export const refreshRegularIndexes = (): IndexesThunkAction< Promise, FetchIndexesActions > => { return async (dispatch) => { - return dispatch(fetchIndexes(true)); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); + }; +}; + +export const pollRegularIndexes = (): IndexesThunkAction< + Promise, + FetchIndexesActions +> => { + return async (dispatch) => { + return await dispatch(fetchIndexes(FetchReasons.POLL)); + }; +}; + +export const POLLING_INTERVAL = 5000; + +const pollIntervalByTabId = new Map>(); + +export const startPollingRegularIndexes = ( + tabId: string +): IndexesThunkAction => { + return function (dispatch) { + if (pollIntervalByTabId.has(tabId)) { + return; + } + + pollIntervalByTabId.set( + tabId, + setInterval(() => { + void dispatch(pollRegularIndexes()); + }, POLLING_INTERVAL) + ); + }; +}; + +export const stopPollingRegularIndexes = (tabId: string) => { + return () => { + if (!pollIntervalByTabId.has(tabId)) { + return; + } + + clearInterval(pollIntervalByTabId.get(tabId)); + pollIntervalByTabId.delete(tabId); }; }; @@ -304,7 +419,7 @@ export const dropIndex = ( // By fetching the indexes again we make sure the merged list doesn't have // it either. - await dispatch(fetchIndexes()); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); return; } @@ -329,7 +444,7 @@ export const dropIndex = ( title: `Index "${indexName}" dropped`, timeout: 3000, }); - await dispatch(fetchIndexes(true)); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); } catch (err) { openToast('drop-index-error', { variant: 'important', @@ -362,7 +477,7 @@ export const hideIndex = ( hidden: true, }, }); - await dispatch(fetchIndexes()); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); } catch (error) { openToast('hide-index-error', { title: 'Failed to hide the index', @@ -396,7 +511,7 @@ export const unhideIndex = ( hidden: false, }, }); - await dispatch(fetchIndexes()); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); } catch (error) { openToast('unhide-index-error', { title: 'Failed to unhide the index', diff --git a/packages/compass-indexes/src/modules/search-indexes.spec.ts b/packages/compass-indexes/src/modules/search-indexes.spec.ts index 2484425dc32..6556a8f8da3 100644 --- a/packages/compass-indexes/src/modules/search-indexes.spec.ts +++ b/packages/compass-indexes/src/modules/search-indexes.spec.ts @@ -1,6 +1,8 @@ import { expect } from 'chai'; +import { waitFor } from '@mongodb-js/testing-library-compass'; +import type { FetchStatus } from '../utils/fetch-status'; +import { FetchStatuses } from '../utils/fetch-status'; import { - SearchIndexesStatuses, createSearchIndexClosed, createSearchIndexOpened, createIndex, @@ -9,11 +11,13 @@ import { updateSearchIndexOpened, updateSearchIndexClosed, updateIndex, + startPollingSearchIndexes, + stopPollingSearchIndexes, } from './search-indexes'; -import { setupStore } from '../../test/setup-store'; +import { setupStoreAndWait } from '../../test/setup-store'; import { searchIndexes } from '../../test/fixtures/search-indexes'; import sinon from 'sinon'; -import type { IndexesDataService } from '../stores/store'; +import type { IndexesDataService, IndexesStore } from '../stores/store'; import { readonlyViewChanged } from './is-readonly-view'; // Importing this to stub showConfirmation @@ -21,14 +25,14 @@ import * as searchIndexesSlice from './search-indexes'; import { writeStateChanged } from './is-writable'; describe('search-indexes module', function () { - let store: ReturnType; + let store: IndexesStore; let dataProvider: Partial; let createSearchIndexStub: sinon.SinonStub; let updateSearchIndexStub: sinon.SinonStub; let getSearchIndexesStub: sinon.SinonStub; let dropSearchIndexStub: sinon.SinonStub; - beforeEach(function () { + beforeEach(async function () { createSearchIndexStub = sinon.stub().resolves('foo'); updateSearchIndexStub = sinon.stub().resolves(); getSearchIndexesStub = sinon.stub().resolves(searchIndexes); @@ -40,7 +44,7 @@ describe('search-indexes module', function () { dropSearchIndex: dropSearchIndexStub, }; - store = setupStore( + store = await setupStoreAndWait( { namespace: 'citibike.trips', isSearchIndexesSupported: true, @@ -49,54 +53,58 @@ describe('search-indexes module', function () { ); }); - it('has not available search indexes state by default', function () { - store = setupStore(); + it('has not available search indexes state by default', async function () { + store = await setupStoreAndWait({ isSearchIndexesSupported: false }); expect(store.getState().searchIndexes.status).to.equal( - SearchIndexesStatuses.NOT_AVAILABLE + FetchStatuses.NOT_READY ); }); context('#refreshSearchIndexes action', function () { - it('does nothing if isReadonlyView is true', function () { + it('does nothing if isReadonlyView is true', async function () { + // already loaded once + expect(store.getState().isReadonlyView).to.equal(false); + expect(getSearchIndexesStub.callCount).to.equal(1); + store.dispatch(readonlyViewChanged(true)); expect(store.getState().isReadonlyView).to.equal(true); - expect(getSearchIndexesStub.callCount).to.equal(0); + expect(getSearchIndexesStub.callCount).to.equal(1); - store.dispatch(refreshSearchIndexes); + await store.dispatch(refreshSearchIndexes()); - expect(getSearchIndexesStub.callCount).to.equal(0); - expect(store.getState().searchIndexes.status).to.equal('NOT_READY'); + expect(getSearchIndexesStub.callCount).to.equal(1); + expect(store.getState().searchIndexes.status).to.equal('READY'); }); - it('does nothing if isWritable is false (offline mode)', function () { + it('does nothing if isWritable is false (offline mode)', async function () { + // already loaded once + expect(store.getState().isWritable).to.equal(true); + expect(getSearchIndexesStub.callCount).to.equal(1); + store.dispatch(writeStateChanged(false)); expect(store.getState().isWritable).to.equal(false); - expect(getSearchIndexesStub.callCount).to.equal(0); + expect(getSearchIndexesStub.callCount).to.equal(1); - store.dispatch(refreshSearchIndexes); + await store.dispatch(refreshSearchIndexes()); - expect(getSearchIndexesStub.callCount).to.equal(0); - expect(store.getState().searchIndexes.status).to.equal('NOT_READY'); + expect(getSearchIndexesStub.callCount).to.equal(1); + expect(store.getState().searchIndexes.status).to.equal('READY'); }); it('fetches the indexes', async function () { - expect(getSearchIndexesStub.callCount).to.equal(0); - expect(store.getState().searchIndexes.status).to.equal('NOT_READY'); + // already loaded once + expect(store.getState().searchIndexes.status).to.equal('READY'); + expect(getSearchIndexesStub.callCount).to.equal(1); await store.dispatch(refreshSearchIndexes()); - expect(getSearchIndexesStub.callCount).to.equal(1); + expect(getSearchIndexesStub.callCount).to.equal(2); expect(store.getState().searchIndexes.status).to.equal('READY'); }); - it('sets the status to REFRESHING if the status is READY', async function () { - expect(getSearchIndexesStub.callCount).to.equal(0); - expect(store.getState().searchIndexes.status).to.equal('NOT_READY'); - - await store.dispatch(refreshSearchIndexes()); - + it('sets the status to REFRESHING if the status is READY', function () { expect(getSearchIndexesStub.callCount).to.equal(1); expect(store.getState().searchIndexes.status).to.equal('READY'); @@ -138,11 +146,13 @@ describe('search-indexes module', function () { ]); }); - it('sets the status to ERROR if loading the indexes fails', async function () { - // replace the stub - getSearchIndexesStub.rejects(new Error('this is an error')); - - await store.dispatch(refreshSearchIndexes()); + it('sets the status to ERROR if initial loading of the indexes fails', async function () { + const getSearchIndexesStub = sinon + .stub() + .rejects(new Error('this is an error')); + store = await setupStoreAndWait(undefined, { + getSearchIndexes: getSearchIndexesStub, + }); expect(store.getState().searchIndexes.status).to.equal('ERROR'); expect(store.getState().searchIndexes.error).to.equal('this is an error'); @@ -269,6 +279,87 @@ describe('search-indexes module', function () { expect(store.getState().searchIndexes.error).to.be.undefined; }); }); + + describe('startPollingSearchIndexes and stopPollingSearchIndexes', function () { + let clock: sinon.SinonFakeTimers; + + after(() => { + clock.restore(); + }); + + it('starts and stops the polling', async function () { + const pollInterval = 5000; + const tabId = 'my-tab'; + + const getSearchIndexesStub = sinon.stub().resolves(searchIndexes); + const store = await setupStoreAndWait( + { + isSearchIndexesSupported: true, + }, + { + getSearchIndexes: getSearchIndexesStub, + } + ); + + clock = sinon.useFakeTimers(); + + const waitForStatus = async (status: FetchStatus) => { + await waitFor(() => { + expect(store.getState().searchIndexes.status).to.eq(status); + }); + }; + + // before we start + expect(store.getState().searchIndexes.status).to.equal('READY'); + + // initial load + expect(getSearchIndexesStub.callCount).to.equal(1); + + store.dispatch(startPollingSearchIndexes(tabId)); + + // poll + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(getSearchIndexesStub.callCount).to.equal(2); + await waitForStatus('READY'); + + // poll + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(getSearchIndexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // stop + store.dispatch(stopPollingSearchIndexes(tabId)); + + // no more polling + clock.tick(pollInterval); + expect(getSearchIndexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // open again + store.dispatch(startPollingSearchIndexes(tabId)); + + // won't execute immediately + expect(getSearchIndexesStub.callCount).to.equal(3); + await waitForStatus('READY'); + + // does poll after the interval + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(getSearchIndexesStub.callCount).to.equal(4); + await waitForStatus('READY'); + + // and again + clock.tick(pollInterval); + await waitForStatus('POLLING'); + expect(getSearchIndexesStub.callCount).to.equal(5); + await waitForStatus('READY'); + + // clean up + store.dispatch(stopPollingSearchIndexes(tabId)); + }); + }); }); describe('#getInitialVectorSearchIndexPipelineText', function () { diff --git a/packages/compass-indexes/src/modules/search-indexes.ts b/packages/compass-indexes/src/modules/search-indexes.ts index ece3e51d8cf..8020d10f8df 100644 --- a/packages/compass-indexes/src/modules/search-indexes.ts +++ b/packages/compass-indexes/src/modules/search-indexes.ts @@ -7,7 +7,13 @@ import { import type { Document } from 'mongodb'; import type { SearchIndex } from 'mongodb-data-service'; -import { isAction } from './../utils/is-action'; +import { isAction } from '../utils/is-action'; +import { FetchStatuses, NOT_FETCHABLE_STATUSES } from '../utils/fetch-status'; +import type { FetchStatus } from '../utils/fetch-status'; + +import { FetchReasons } from '../utils/fetch-reason'; +import type { FetchReason } from '../utils/fetch-reason'; + import type { IndexesThunkAction } from '.'; import { switchToSearchIndexes } from './index-view'; import type { IndexViewChangedAction } from './index-view'; @@ -18,48 +24,6 @@ const ATLAS_SEARCH_SERVER_ERRORS: Record = { 'This index name is already in use. Please choose another one.', }; -export enum SearchIndexesStatuses { - /** - * No support. Default status. - */ - NOT_AVAILABLE = 'NOT_AVAILABLE', - /** - * We do not have list yet. - */ - NOT_READY = 'NOT_READY', - /** - * We have list of indexes. - */ - READY = 'READY', - /** - * We are fetching the list first time. - */ - FETCHING = 'FETCHING', - /** - * We are refreshing the list. - */ - REFRESHING = 'REFRESHING', - /** - * We are polling the list. - */ - POLLING = 'POLLING', - /** - * Loading the list failed. - */ - ERROR = 'ERROR', -} - -export type SearchIndexesStatus = keyof typeof SearchIndexesStatuses; - -// List of SearchIndex statuses when server should not be called -// to avoid multiple requests. -const NOT_FETCHABLE_STATUSES: SearchIndexesStatus[] = [ - 'NOT_AVAILABLE', - 'FETCHING', - 'POLLING', - 'REFRESHING', -]; - export enum ActionTypes { // Fetch indexes FetchSearchIndexesStarted = 'compass-indexes/search-indexes/fetch-search-indexes-started', @@ -83,7 +47,7 @@ export enum ActionTypes { type FetchSearchIndexesStartedAction = { type: ActionTypes.FetchSearchIndexesStarted; - status: 'REFRESHING' | 'POLLING' | 'FETCHING'; + reason: FetchReason; }; type FetchSearchIndexesSucceededAction = { @@ -96,7 +60,7 @@ type FetchSearchIndexesFailedAction = { error: string; }; -type CreateSearchIndexOpenedAction = { +export type CreateSearchIndexOpenedAction = { type: ActionTypes.CreateSearchIndexOpened; }; @@ -153,7 +117,7 @@ type UpdateSearchIndexState = { }; export type State = { - status: SearchIndexesStatus; + status: FetchStatus; createIndex: CreateSearchIndexState; updateIndex: UpdateSearchIndexState; error?: string; @@ -161,7 +125,7 @@ export type State = { }; export const INITIAL_STATE: State = { - status: SearchIndexesStatuses.NOT_AVAILABLE, + status: FetchStatuses.NOT_READY, createIndex: { isModalOpen: false, isBusy: false, @@ -346,7 +310,12 @@ export default function reducer( ) { return { ...state, - status: action.status, + status: + action.reason === FetchReasons.POLL + ? FetchStatuses.POLLING + : action.reason === FetchReasons.REFRESH + ? FetchStatuses.REFRESHING + : FetchStatuses.FETCHING, }; } @@ -359,7 +328,7 @@ export default function reducer( return { ...state, indexes: action.indexes, - status: SearchIndexesStatuses.READY, + status: FetchStatuses.READY, }; } @@ -375,12 +344,11 @@ export default function reducer( // previous list of indexes is shown to the user. // If fetch fails for refresh or polling, set the status to READY again. error: - state.status === SearchIndexesStatuses.FETCHING - ? action.error - : undefined, - status: SearchIndexesStatuses.FETCHING - ? SearchIndexesStatuses.ERROR - : SearchIndexesStatuses.READY, + state.status === FetchStatuses.FETCHING ? action.error : state.error, + status: + state.status === FetchStatuses.FETCHING + ? FetchStatuses.ERROR + : FetchStatuses.READY, }; } @@ -407,10 +375,10 @@ export const updateSearchIndexClosed = (): UpdateSearchIndexClosedAction => ({ }); const fetchSearchIndexesStarted = ( - status: 'REFRESHING' | 'POLLING' | 'FETCHING' + reason: FetchReason ): FetchSearchIndexesStartedAction => ({ type: ActionTypes.FetchSearchIndexesStarted, - status, + reason, }); const fetchSearchIndexesSucceeded = ( @@ -457,6 +425,38 @@ const updateSearchIndexSucceeded = (): UpdateSearchIndexSucceededAction => ({ type: ActionTypes.UpdateSearchIndexSucceeded, }); +export const POLLING_INTERVAL = 5000; + +const pollIntervalByTabId = new Map>(); + +export const startPollingSearchIndexes = ( + tabId: string +): IndexesThunkAction => { + return function (dispatch) { + if (pollIntervalByTabId.has(tabId)) { + return; + } + + pollIntervalByTabId.set( + tabId, + setInterval(() => { + void dispatch(pollSearchIndexes()); + }, POLLING_INTERVAL) + ); + }; +}; + +export const stopPollingSearchIndexes = (tabId: string) => { + return () => { + if (!pollIntervalByTabId.has(tabId)) { + return; + } + + clearInterval(pollIntervalByTabId.get(tabId)); + pollIntervalByTabId.delete(tabId); + }; +}; + export const createIndex = ({ name, type, @@ -523,7 +523,7 @@ export const createIndex = ({ }); dispatch(switchToSearchIndexes()); - await dispatch(fetchIndexes(SearchIndexesStatuses.REFRESHING)); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); }; }; @@ -576,7 +576,7 @@ export const updateIndex = ({ timeout: 5000, variant: 'progress', }); - await dispatch(fetchIndexes(SearchIndexesStatuses.REFRESHING)); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); } catch (e) { const error = (e as Error).message; dispatch( @@ -593,7 +593,7 @@ type FetchSearchIndexesActions = | FetchSearchIndexesFailedAction; const fetchIndexes = ( - newStatus: 'REFRESHING' | 'POLLING' | 'FETCHING' + reason: FetchReason ): IndexesThunkAction, FetchSearchIndexesActions> => { return async (dispatch, getState, { dataService }) => { const { @@ -607,14 +607,13 @@ const fetchIndexes = ( return; } - // If we are currently doing fetching indexes, we will - // wait for that + // If we are already fetching indexes, we will wait for that if (NOT_FETCHABLE_STATUSES.includes(status)) { return; } try { - dispatch(fetchSearchIndexesStarted(newStatus)); + dispatch(fetchSearchIndexesStarted(reason)); const indexes = await dataService.getSearchIndexes(namespace); dispatch(fetchSearchIndexesSucceeded(indexes)); } catch (err) { @@ -623,20 +622,21 @@ const fetchIndexes = ( }; }; +export const fetchSearchIndexes = (): IndexesThunkAction< + Promise, + FetchSearchIndexesActions +> => { + return async (dispatch) => { + await dispatch(fetchIndexes(FetchReasons.INITIAL_FETCH)); + }; +}; + export const refreshSearchIndexes = (): IndexesThunkAction< Promise, FetchSearchIndexesActions > => { - return async (dispatch, getState) => { - const { status } = getState().searchIndexes; - - // If we are in a READY state, then we have already fetched the data - // and are refreshing the list. - const newStatus: SearchIndexesStatus = - status === SearchIndexesStatuses.READY - ? SearchIndexesStatuses.REFRESHING - : SearchIndexesStatuses.FETCHING; - await dispatch(fetchIndexes(newStatus)); + return async (dispatch) => { + await dispatch(fetchIndexes(FetchReasons.REFRESH)); }; }; @@ -645,7 +645,7 @@ export const pollSearchIndexes = (): IndexesThunkAction< FetchSearchIndexesActions > => { return async (dispatch) => { - return await dispatch(fetchIndexes(SearchIndexesStatuses.POLLING)); + return await dispatch(fetchIndexes(FetchReasons.POLL)); }; }; @@ -690,7 +690,7 @@ export const dropSearchIndex = ( timeout: 5000, variant: 'progress', }); - await dispatch(fetchIndexes(SearchIndexesStatuses.REFRESHING)); + await dispatch(fetchIndexes(FetchReasons.REFRESH)); } catch (e) { openToast('search-index-delete-failed', { title: `Failed to drop index.`, diff --git a/packages/compass-indexes/src/stores/store.ts b/packages/compass-indexes/src/stores/store.ts index 529a98a51cb..efbac61c95c 100644 --- a/packages/compass-indexes/src/stores/store.ts +++ b/packages/compass-indexes/src/stores/store.ts @@ -7,11 +7,9 @@ import { writeStateChanged } from '../modules/is-writable'; import { getDescription } from '../modules/description'; import { INITIAL_STATE as INDEX_LIST_INITIAL_STATE } from '../modules/index-view'; import { createIndexOpened } from '../modules/create-index'; -import { fetchIndexes } from '../modules/regular-indexes'; +import { fetchRegularIndexes } from '../modules/regular-indexes'; import { - INITIAL_STATE as SEARCH_INDEXES_INITIAL_STATE, - refreshSearchIndexes, - SearchIndexesStatuses, + fetchSearchIndexes, createSearchIndexOpened, } from '../modules/search-indexes'; import type { DataService } from 'mongodb-data-service'; @@ -90,13 +88,8 @@ export function activateIndexesPlugin( namespace: options.namespace, serverVersion: options.serverVersion, isReadonlyView: options.isReadonly, + isSearchIndexesSupported: options.isSearchIndexesSupported, indexView: INDEX_LIST_INITIAL_STATE, - searchIndexes: { - ...SEARCH_INDEXES_INITIAL_STATE, - status: options.isSearchIndexesSupported - ? SearchIndexesStatuses.NOT_READY - : SearchIndexesStatuses.NOT_AVAILABLE, - }, collectionStats: extractCollectionStats(collectionModel), }, applyMiddleware( @@ -107,6 +100,7 @@ export function activateIndexesPlugin( track, connectionInfoRef, dataService, + collection: collectionModel, }) ) ); @@ -120,8 +114,10 @@ export function activateIndexesPlugin( }); on(globalAppRegistry, 'refresh-data', () => { - void store.dispatch(fetchIndexes()); - void store.dispatch(refreshSearchIndexes()); + void store.dispatch(fetchRegularIndexes()); + if (options.isSearchIndexesSupported) { + void store.dispatch(fetchRegularIndexes()); + } }); // these can change later @@ -132,15 +128,15 @@ export function activateIndexesPlugin( store.dispatch(getDescription(instance.description)); }); + void store.dispatch(fetchRegularIndexes()); + if (options.isSearchIndexesSupported) { + void store.dispatch(fetchSearchIndexes()); + } on(collectionModel, 'change:status', (model: Collection, status: string) => { if (status === 'ready') { store.dispatch(collectionStatsFetched(model)); } }); - on(localAppRegistry, 'refresh-collection-stats', () => { - void collectionModel.fetch({ dataService, force: true }); - }); - return { store, deactivate: () => cleanup() }; } diff --git a/packages/compass-indexes/src/utils/fetch-reason.ts b/packages/compass-indexes/src/utils/fetch-reason.ts new file mode 100644 index 00000000000..ca4f800fcca --- /dev/null +++ b/packages/compass-indexes/src/utils/fetch-reason.ts @@ -0,0 +1,7 @@ +export enum FetchReasons { + INITIAL_FETCH = 'INITIAL_FETCH', + REFRESH = 'REFRESH', + POLL = 'POLL', +} + +export type FetchReason = keyof typeof FetchReasons; diff --git a/packages/compass-indexes/src/utils/fetch-status.ts b/packages/compass-indexes/src/utils/fetch-status.ts new file mode 100644 index 00000000000..c43cb762e65 --- /dev/null +++ b/packages/compass-indexes/src/utils/fetch-status.ts @@ -0,0 +1,39 @@ +export enum FetchStatuses { + /** + * We do not have a list yet. + */ + NOT_READY = 'NOT_READY', + /** + * We have a list of indexes. + */ + READY = 'READY', + /** + * We are fetching the list for first time. + */ + FETCHING = 'FETCHING', + /** + * We are refreshing the list. + */ + REFRESHING = 'REFRESHING', + /** + * We are polling the list. + */ + POLLING = 'POLLING', + /** + * Loading the list failed. + */ + ERROR = 'ERROR', +} + +export type FetchStatus = keyof typeof FetchStatuses; + +// Any the status which means we're busy fetching the list one way or another +export type FetchingStatus = 'REFRESHING' | 'POLLING' | 'FETCHING'; + +// List of fetch statuses when the server should not be called to avoid multiple +// requests. +export const NOT_FETCHABLE_STATUSES: FetchStatus[] = [ + 'FETCHING', + 'POLLING', + 'REFRESHING', +]; diff --git a/packages/compass-indexes/test/setup-store.ts b/packages/compass-indexes/test/setup-store.ts index 5252de87adf..e4407a48e4d 100644 --- a/packages/compass-indexes/test/setup-store.ts +++ b/packages/compass-indexes/test/setup-store.ts @@ -5,12 +5,15 @@ import type { IndexesDataService, IndexesPluginOptions, IndexesPluginServices, + IndexesStore, } from '../src/stores/store'; import { activateIndexesPlugin } from '../src/stores/store'; import { createActivateHelpers } from 'hadron-app-registry'; import { createNoopLogger } from '@mongodb-js/compass-logging/provider'; import { createNoopTrack } from '@mongodb-js/compass-telemetry/provider'; import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import { waitFor } from '@mongodb-js/testing-library-compass'; +import { expect } from 'chai'; const NOOP_DATA_PROVIDER: IndexesDataService = { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -100,16 +103,20 @@ const defaultMetadata = { isSearchIndexesSupported: false, sourceName: 'test.bar', }; -const mockCollection = { - _id: defaultMetadata.namespace, - fetchMetadata() { - return Promise.resolve(defaultMetadata); - }, - toJSON() { - return this; - }, - on: Sinon.spy(), -}; + +export function createMockCollection() { + return { + _id: defaultMetadata.namespace, + fetch: Sinon.spy(), + fetchMetadata() { + return Promise.resolve(defaultMetadata); + }, + toJSON() { + return this; + }, + on: Sinon.spy(), + } as any; +} export const setupStore = ( options: Partial = {}, @@ -137,7 +144,7 @@ export const setupStore = ( namespace: 'citibike.trips', serverVersion: '6.0.0', isReadonly: false, - isSearchIndexesSupported: false, + isSearchIndexesSupported: true, ...options, }, { @@ -147,10 +154,31 @@ export const setupStore = ( instance: fakeInstance as any, logger: createNoopLogger('TEST'), track: createNoopTrack(), - collection: mockCollection as any, + collection: createMockCollection(), connectionInfoRef, ...services, }, createActivateHelpers() ).store; }; + +export async function setupStoreAndWait( + options?: Partial, + dataProvider?: Partial, + services?: Partial +): Promise { + const store = setupStore(options, dataProvider, services); + await waitFor(() => { + expect(store.getState().regularIndexes.status).to.be.oneOf([ + 'READY', + 'ERROR', + ]); + if (store.getState().isSearchIndexesSupported) { + expect(store.getState().searchIndexes.status).to.be.oneOf([ + 'READY', + 'ERROR', + ]); + } + }); + return store; +} diff --git a/packages/compass-workspaces/src/provider.tsx b/packages/compass-workspaces/src/provider.tsx index 463841f3497..fb9bcca6211 100644 --- a/packages/compass-workspaces/src/provider.tsx +++ b/packages/compass-workspaces/src/provider.tsx @@ -363,7 +363,10 @@ export const workspacesServiceLocator = createServiceLocator( ); export { useWorkspacePlugins } from './components/workspaces-provider'; -export { useTabState } from './components/workspace-tab-state-provider'; +export { + useWorkspaceTabId, + useTabState, +} from './components/workspace-tab-state-provider'; export { useOnTabClose, useOnTabReplace, From cd91aec0bc3aa9687feb7e86a0c50f069b3251e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:31:49 +0000 Subject: [PATCH 14/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6275) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index dfc51e7aa46..eef07a2763f 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Mon Sep 23 2024. +This document was automatically generated on Tue Sep 24 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 91fc5606256..458072df9bc 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Sep 23, 2024 at 01:02 PM +Generated on Tue, Sep 24, 2024 at 12:31 PM ## Table of Contents From d146488117ace94bfda46a5ee7b8342315c6d8f3 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 24 Sep 2024 16:56:06 +0200 Subject: [PATCH 15/97] chore(indexes): add rollingIndexesService to indexes store (#6274) * chore(indexes): add rollingIndexesService to indexes store * chore(indexes): fix linting issues --- package-lock.json | 6 +++--- packages/compass-indexes/package.json | 4 ++-- packages/compass-indexes/src/index.ts | 2 ++ packages/compass-indexes/src/modules/index.ts | 2 ++ packages/compass-indexes/src/stores/store.ts | 8 ++++++++ packages/compass-indexes/test/setup-store.ts | 4 ++++ 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc87f160cf6..b30fbebc5a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45430,6 +45430,7 @@ "version": "5.41.0", "license": "SSPL", "dependencies": { + "@mongodb-js/atlas-service": "^0.28.3", "@mongodb-js/compass-app-stores": "^7.28.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", @@ -45448,6 +45449,7 @@ "mongodb": "^6.8.0", "mongodb-collection-model": "^5.23.3", "mongodb-data-service": "^22.23.3", + "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", "react": "^17.0.2", @@ -45457,7 +45459,6 @@ "semver": "^7.6.2" }, "devDependencies": { - "@mongodb-js/atlas-service": "^0.28.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -45470,7 +45471,6 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^9.2.3", @@ -56982,7 +56982,7 @@ "@mongodb-js/compass-indexes": { "version": "file:packages/compass-indexes", "requires": { - "@mongodb-js/atlas-service": "^0.28.2", + "@mongodb-js/atlas-service": "^0.28.3", "@mongodb-js/compass-app-stores": "^7.28.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index ae10f59c8d6..cf4db773739 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -48,7 +48,6 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "devDependencies": { - "@mongodb-js/atlas-service": "^0.28.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -61,7 +60,6 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^9.2.3", @@ -69,6 +67,7 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { + "@mongodb-js/atlas-service": "^0.28.3", "@mongodb-js/compass-app-stores": "^7.28.0", "@mongodb-js/compass-components": "^1.29.4", "@mongodb-js/compass-connections": "^1.42.0", @@ -88,6 +87,7 @@ "mongodb-collection-model": "^5.23.3", "mongodb-data-service": "^22.23.3", "mongodb-query-parser": "^4.2.3", + "mongodb-ns": "^2.4.2", "numeral": "^2.0.6", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-indexes/src/index.ts b/packages/compass-indexes/src/index.ts index f92d5a56b68..6c5072b58e8 100644 --- a/packages/compass-indexes/src/index.ts +++ b/packages/compass-indexes/src/index.ts @@ -17,6 +17,7 @@ import { import { createLoggerLocator } from '@mongodb-js/compass-logging/provider'; import { telemetryLocator } from '@mongodb-js/compass-telemetry/provider'; import { IndexesTabTitle } from './plugin-title'; +import { atlasServiceLocator } from '@mongodb-js/atlas-service/provider'; const CompassIndexesHadronPlugin = registerHadronPlugin( { @@ -34,6 +35,7 @@ const CompassIndexesHadronPlugin = registerHadronPlugin( logger: createLoggerLocator('COMPASS-INDEXES-UI'), track: telemetryLocator, collection: collectionModelLocator, + atlasService: atlasServiceLocator, } ); diff --git a/packages/compass-indexes/src/modules/index.ts b/packages/compass-indexes/src/modules/index.ts index c953acdf1cf..0fb8f7f1d1f 100644 --- a/packages/compass-indexes/src/modules/index.ts +++ b/packages/compass-indexes/src/modules/index.ts @@ -19,6 +19,7 @@ import type { TrackFunction } from '@mongodb-js/compass-telemetry'; import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; import type { IndexesDataServiceProps } from '../stores/store'; import type { Collection } from '@mongodb-js/compass-app-stores/provider'; +import type { RollingIndexesService } from './rolling-indexes-service'; const reducer = combineReducers({ // From instance.isWritable. Used to know if the create button should be // enabled. @@ -70,6 +71,7 @@ export type IndexesExtraArgs = { dataService: Pick; connectionInfoRef: ConnectionInfoRef; collection: Collection; + rollingIndexesService: RollingIndexesService; }; export type IndexesThunkDispatch
= ThunkDispatch< RootState, diff --git a/packages/compass-indexes/src/stores/store.ts b/packages/compass-indexes/src/stores/store.ts index efbac61c95c..5614cbe178a 100644 --- a/packages/compass-indexes/src/stores/store.ts +++ b/packages/compass-indexes/src/stores/store.ts @@ -26,6 +26,8 @@ import { collectionStatsFetched, extractCollectionStats, } from '../modules/collection-stats'; +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; +import { RollingIndexesService } from '../modules/rolling-indexes-service'; export type IndexesDataServiceProps = | 'indexes' @@ -53,6 +55,7 @@ export type IndexesPluginServices = { logger: Logger; collection: Collection; track: TrackFunction; + atlasService: AtlasService; }; export type IndexesPluginOptions = { @@ -77,6 +80,7 @@ export function activateIndexesPlugin( track, dataService, collection: collectionModel, + atlasService, }: IndexesPluginServices, { on, cleanup }: ActivateHelpers ) { @@ -101,6 +105,10 @@ export function activateIndexesPlugin( connectionInfoRef, dataService, collection: collectionModel, + rollingIndexesService: new RollingIndexesService( + atlasService, + connectionInfoRef + ), }) ) ); diff --git a/packages/compass-indexes/test/setup-store.ts b/packages/compass-indexes/test/setup-store.ts index e4407a48e4d..2b8a7676ece 100644 --- a/packages/compass-indexes/test/setup-store.ts +++ b/packages/compass-indexes/test/setup-store.ts @@ -14,6 +14,7 @@ import { createNoopTrack } from '@mongodb-js/compass-telemetry/provider'; import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; import { waitFor } from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; const NOOP_DATA_PROVIDER: IndexesDataService = { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -139,6 +140,8 @@ export const setupStore = ( }, } as ConnectionInfoRef; + const atlasService = {} as AtlasService; + return activateIndexesPlugin( { namespace: 'citibike.trips', @@ -156,6 +159,7 @@ export const setupStore = ( track: createNoopTrack(), collection: createMockCollection(), connectionInfoRef, + atlasService, ...services, }, createActivateHelpers() From 87665747bcf41449ff86f88cb7c4d459e4a52e50 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Tue, 24 Sep 2024 16:01:50 +0100 Subject: [PATCH 16/97] chore: don't wrap the indexes table header cells (#6276) Don't wrap the indexes table header cells --- .../src/components/indexes-table/indexes-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/compass-indexes/src/components/indexes-table/indexes-table.tsx b/packages/compass-indexes/src/components/indexes-table/indexes-table.tsx index ff6fc876476..4546db7687e 100644 --- a/packages/compass-indexes/src/components/indexes-table/indexes-table.tsx +++ b/packages/compass-indexes/src/components/indexes-table/indexes-table.tsx @@ -18,7 +18,6 @@ import { import type { LGColumnDef, LGTableDataType, - HeaderGroup, LeafyGreenTableCell, LeafyGreenTableRow, SortingState, @@ -76,6 +75,7 @@ const tableHeadDarkModeStyles = css({ }); const tableHeadCellStyles = css({ + whiteSpace: 'nowrap', '> div': { // Push the sort button to the right of the head cell. justifyContent: 'space-between', @@ -126,7 +126,7 @@ export function IndexesTable({ isSticky className={cx(tableHeadStyles, darkMode && tableHeadDarkModeStyles)} > - {table.getHeaderGroups().map((headerGroup: HeaderGroup) => ( + {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( From 9d33a701f3f390c70222cf30ebd579e34767d77b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:03:14 +0000 Subject: [PATCH 17/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6277) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 458072df9bc..ab201723132 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Sep 24, 2024 at 12:31 PM +Generated on Tue, Sep 24, 2024 at 03:03 PM ## Table of Contents From f8d79ba205d3e3dcda4115db590cc29f0adb767c Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Wed, 25 Sep 2024 13:23:15 +0200 Subject: [PATCH 18/97] chore(scripts): make sure that update-electron script hoists all electron and electron related deps (#6279) * chore: update electron * chore(scripts): make sure all electron related dependencies are hoisted --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 101 +++++++------------- packages/hadron-build/package.json | 2 +- scripts/update-electron.js | 13 ++- 4 files changed, 43 insertions(+), 75 deletions(-) diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index 697091a06fb..20faec34cc9 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -68,7 +68,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", "babel-loader": "^8.2.5", "babel-plugin-istanbul": "^5.2.0", - "browserslist": "^4.23.3", + "browserslist": "^4.24.0", "chalk": "^4.1.2", "cli-progress": "^3.9.1", "core-js": "^3.17.3", diff --git a/package-lock.json b/package-lock.json index b30fbebc5a6..b1b86066b39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -511,7 +511,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", "babel-loader": "^8.2.5", "babel-plugin-istanbul": "^5.2.0", - "browserslist": "^4.23.3", + "browserslist": "^4.24.0", "chalk": "^4.1.2", "cli-progress": "^3.9.1", "core-js": "^3.17.3", @@ -16924,9 +16924,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "funding": [ { "type": "opencollective", @@ -16942,8 +16942,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -17259,9 +17259,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", "funding": [ { "type": "opencollective", @@ -20956,9 +20956,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==" }, "node_modules/electron-window": { "version": "0.8.1", @@ -32557,9 +32557,9 @@ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", + "version": "3.68.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.68.0.tgz", + "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==", "dependencies": { "semver": "^7.3.5" }, @@ -48274,7 +48274,7 @@ "lodash": "^4.17.21", "moment": "^2.29.4", "mongodb-js-cli": "^0.0.3", - "node-abi": "^3.67.0", + "node-abi": "^3.68.0", "normalize-package-data": "^2.3.5", "parse-github-repo-url": "^1.3.0", "semver": "^7.6.2", @@ -48701,28 +48701,6 @@ "mkdirp": "bin/cmd.js" } }, - "packages/hadron-build/node_modules/node-abi": { - "version": "3.67.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", - "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "packages/hadron-build/node_modules/node-abi/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "packages/hadron-build/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -60328,7 +60306,7 @@ "@types/webpack-bundle-analyzer": "^4.7.0", "babel-loader": "^8.2.5", "babel-plugin-istanbul": "^5.2.0", - "browserslist": "^4.23.3", + "browserslist": "^4.24.0", "chalk": "^4.1.2", "cli-progress": "^3.9.1", "core-js": "^3.17.3", @@ -67166,12 +67144,12 @@ } }, "browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "requires": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" } @@ -67429,9 +67407,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==" + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==" }, "caseless": { "version": "0.12.0", @@ -70647,9 +70625,9 @@ } }, "electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==" }, "electron-window": { "version": "0.8.1", @@ -74198,7 +74176,7 @@ "mocha": "^10.2.0", "moment": "^2.29.4", "mongodb-js-cli": "^0.0.3", - "node-abi": "^3.67.0", + "node-abi": "^3.68.0", "normalize-package-data": "^2.3.5", "parse-github-repo-url": "^1.3.0", "plist": "^3.0.1", @@ -74537,21 +74515,6 @@ "minimist": "^1.2.6" } }, - "node-abi": { - "version": "3.67.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", - "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" - } - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -80805,9 +80768,9 @@ } }, "node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", + "version": "3.68.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.68.0.tgz", + "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==", "requires": { "semver": "^7.3.5" } diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index ffe9bc8e343..c2cb91e401e 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -46,7 +46,7 @@ "lodash": "^4.17.21", "moment": "^2.29.4", "mongodb-js-cli": "^0.0.3", - "node-abi": "^3.67.0", + "node-abi": "^3.68.0", "normalize-package-data": "^2.3.5", "parse-github-repo-url": "^1.3.0", "semver": "^7.6.2", diff --git a/scripts/update-electron.js b/scripts/update-electron.js index 8ac80760c0f..e184c8fe3e1 100644 --- a/scripts/update-electron.js +++ b/scripts/update-electron.js @@ -6,14 +6,19 @@ const path = require('path'); const { forEachPackage } = require('@mongodb-js/monorepo-tools'); const { runInDir } = require('./run-in-dir'); -async function cleanAndBootstrap(electronVersion) { +async function cleanAndBootstrap(newVersions) { try { await runInDir("npx lerna exec 'rm -Rf node_modules'"); await runInDir('rm -Rf node_modules'); const packageJsonBkp = fs.readFileSync('./package.json'); await runInDir('npm i'); - // Make sure electron is hoisted on the root - await runInDir(`npm i electron@${electronVersion}`); + // Make sure all new deps are hoisted on the root + const versionsToInstall = Object.entries(newVersions) + .map(([name, version]) => { + return `${name}@${version}`; + }) + .join(' '); + await runInDir(`npm i ${versionsToInstall}`); await runInDir('npm run bootstrap'); fs.writeFileSync('./package.json', packageJsonBkp); // Run install again to make sure root level electron is removed from @@ -122,7 +127,7 @@ async function main() { }); console.log('Cleaning node_modules and rebootstrapping'); - cleanAndBootstrap(latestElectronVersion); + cleanAndBootstrap(newVersions); } main(); From 03b5c5be4c389fbbf1737b5d0d7904bc8552fef1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:30:26 +0000 Subject: [PATCH 19/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6278) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 8 ++++---- docs/tracking-plan.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index eef07a2763f..9ac0e06de39 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Sep 24 2024. +This document was automatically generated on Wed Sep 25 2024. ## List of dependencies @@ -476,7 +476,7 @@ This document was automatically generated on Tue Sep 24 2024. | **[napi-build-utils](#26912b5ff7632f262d64273f99cd1a869376c5c378960e24501585e35b31054a)** | 1.0.2 | MIT | | **[negotiator](#e3856213d8f0a7d28cd4166e53ec7e2c019cb7becf4a8535097bac28d21e8579)** | 0.6.3 | MIT | | **[netmask](#2bd5b8ff7fab9adace6c38d3fd32e7328484939fdd07836635b0155d0afc35b2)** | 2.0.2 | MIT | -| **[node-abi](#3270c7aabb829975e51696cea9bb249f08dc5b70d87ad1d40937f0a735b773c4)** | 3.65.0 | MIT | +| **[node-abi](#e95a83ce4ffe7621819fbbceed23c54f12e0e1066aad9e5b3093bbdc7c958e0b)** | 3.68.0 | MIT | | **[node-addon-api](#af9f7588524ca4e68f4efe7b24aea46d9c8004263b1d7cf3b558f86d87a163e8)** | 4.3.0 | MIT | | **[node-domexception](#3c25065fd2bc1b6b56856e30ac5b8f34ddae33ca87b225854f8d855b0ccabfbe)** | 1.0.0 | MIT | | **[node-fetch](#364527ef1b51cc6ac34872b931049c9e25b5014f9b40e3898c84e1a830e21720)** | 2.6.7 | MIT | @@ -29222,9 +29222,9 @@ License files: License tags: MIT - + -### [node-abi](https://www.npmjs.com/package/node-abi) (version 3.65.0) +### [node-abi](https://www.npmjs.com/package/node-abi) (version 3.68.0) License tags: MIT diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index ab201723132..089bdb7e688 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Sep 24, 2024 at 03:03 PM +Generated on Wed, Sep 25, 2024 at 11:30 AM ## Table of Contents From ccee5de1ffb4cdf69a50173e912365f5a74cd598 Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:35:19 +0200 Subject: [PATCH 20/97] feat(global-writes): setup global-writes plugin COMPASS-8275 (#6273) * setup plugin * service and clean up * show tab only if global writes is supported * clean up * fix ts * clean up * depcheck * correct version of redux in lock file * depcheck again * feedback --- package-lock.json | 241 ++++++++++++++++++ .../src/components/collection-tab.tsx | 23 +- packages/compass-connections/src/provider.ts | 1 + packages/compass-global-writes/.depcheckrc | 11 + packages/compass-global-writes/.eslintignore | 2 + packages/compass-global-writes/.eslintrc.js | 8 + packages/compass-global-writes/.mocharc.js | 1 + .../compass-global-writes/.prettierignore | 3 + .../compass-global-writes/.prettierrc.json | 1 + packages/compass-global-writes/package.json | 86 +++++++ .../src/components/index.spec.tsx | 12 + .../src/components/index.tsx | 34 +++ packages/compass-global-writes/src/index.ts | 33 +++ .../src/plugin-title.tsx | 5 + .../services/atlas-global-writes-service.ts | 5 + .../compass-global-writes/src/store/index.ts | 65 +++++ .../src/store/reducer.ts | 26 ++ .../compass-global-writes/tsconfig-lint.json | 5 + packages/compass-global-writes/tsconfig.json | 8 + .../compass-telemetry/src/telemetry-events.ts | 1 + packages/compass-web/package.json | 1 + packages/compass-web/src/entrypoint.tsx | 2 + packages/compass-workspaces/src/types.ts | 3 +- packages/compass/package.json | 1 + .../compass/src/app/components/workspace.tsx | 2 + 25 files changed, 574 insertions(+), 6 deletions(-) create mode 100644 packages/compass-global-writes/.depcheckrc create mode 100644 packages/compass-global-writes/.eslintignore create mode 100644 packages/compass-global-writes/.eslintrc.js create mode 100644 packages/compass-global-writes/.mocharc.js create mode 100644 packages/compass-global-writes/.prettierignore create mode 100644 packages/compass-global-writes/.prettierrc.json create mode 100644 packages/compass-global-writes/package.json create mode 100644 packages/compass-global-writes/src/components/index.spec.tsx create mode 100644 packages/compass-global-writes/src/components/index.tsx create mode 100644 packages/compass-global-writes/src/index.ts create mode 100644 packages/compass-global-writes/src/plugin-title.tsx create mode 100644 packages/compass-global-writes/src/services/atlas-global-writes-service.ts create mode 100644 packages/compass-global-writes/src/store/index.ts create mode 100644 packages/compass-global-writes/src/store/reducer.ts create mode 100644 packages/compass-global-writes/tsconfig-lint.json create mode 100644 packages/compass-global-writes/tsconfig.json diff --git a/package-lock.json b/package-lock.json index b1b86066b39..63a4b545584 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7818,6 +7818,10 @@ "resolved": "packages/compass-generative-ai", "link": true }, + "node_modules/@mongodb-js/compass-global-writes": { + "resolved": "packages/compass-global-writes", + "link": true + }, "node_modules/@mongodb-js/compass-import-export": { "resolved": "packages/compass-import-export", "link": true @@ -43785,6 +43789,7 @@ "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-find-in-page": "^4.30.4", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-import-export": "^7.41.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-intercom": "^0.12.3", @@ -45261,6 +45266,126 @@ "url": "https://opencollective.com/sinon" } }, + "packages/compass-global-writes": { + "name": "@mongodb-js/compass-global-writes", + "version": "1.0.0", + "license": "SSPL", + "dependencies": { + "@mongodb-js/atlas-service": "^0.28.3", + "@mongodb-js/compass-collection": "^4.41.0", + "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-connections": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-telemetry": "^1.1.7", + "hadron-app-registry": "^9.2.6", + "react": "^17.0.2", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2" + }, + "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", + "@mongodb-js/mocha-config-compass": "^1.4.2", + "@mongodb-js/prettier-config-compass": "^1.0.2", + "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/tsconfig-compass": "^1.0.5", + "@types/chai": "^4.2.21", + "@types/chai-dom": "^0.0.10", + "@types/mocha": "^9.0.0", + "@types/react": "^17.0.5", + "@types/react-dom": "^17.0.10", + "@types/sinon-chai": "^3.2.5", + "chai": "^4.3.6", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "mocha": "^10.2.0", + "nyc": "^15.1.0", + "prettier": "^2.7.1", + "sinon": "^17.0.1", + "typescript": "^5.0.4", + "xvfb-maybe": "^0.2.1" + } + }, + "packages/compass-global-writes/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "packages/compass-global-writes/node_modules/@sinonjs/fake-timers": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "packages/compass-global-writes/node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "packages/compass-global-writes/node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "packages/compass-global-writes/node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true + }, + "packages/compass-global-writes/node_modules/nise": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "packages/compass-global-writes/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "packages/compass-global-writes/node_modules/sinon": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", + "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.5", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, "packages/compass-home": { "name": "@mongodb-js/compass-home", "version": "7.0.1", @@ -46964,6 +47089,7 @@ "@mongodb-js/compass-export-to-language": "^9.18.0", "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-logging": "^1.4.7", "@mongodb-js/compass-query-bar": "^8.43.0", @@ -56872,6 +56998,119 @@ } } }, + "@mongodb-js/compass-global-writes": { + "version": "file:packages/compass-global-writes", + "requires": { + "@mongodb-js/atlas-service": "^0.28.3", + "@mongodb-js/compass-collection": "^4.41.0", + "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-connections": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/eslint-config-compass": "^1.1.7", + "@mongodb-js/mocha-config-compass": "^1.4.2", + "@mongodb-js/prettier-config-compass": "^1.0.2", + "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/tsconfig-compass": "^1.0.5", + "@types/chai": "^4.2.21", + "@types/chai-dom": "^0.0.10", + "@types/mocha": "^9.0.0", + "@types/react": "^17.0.5", + "@types/react-dom": "^17.0.10", + "@types/sinon-chai": "^3.2.5", + "chai": "^4.3.6", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "hadron-app-registry": "^9.2.6", + "mocha": "^10.2.0", + "nyc": "^15.1.0", + "prettier": "^2.7.1", + "react": "^17.0.2", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "sinon": "^17.0.1", + "typescript": "^5.0.4", + "xvfb-maybe": "^0.2.1" + }, + "dependencies": { + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1" + } + }, + "@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + }, + "dependencies": { + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true + } + } + }, + "just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true + }, + "nise": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "sinon": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", + "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.5", + "supports-color": "^7.2.0" + } + } + } + }, "@mongodb-js/compass-import-export": { "version": "file:packages/compass-import-export", "requires": { @@ -58529,6 +58768,7 @@ "@mongodb-js/compass-export-to-language": "^9.18.0", "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-logging": "^1.4.7", "@mongodb-js/compass-query-bar": "^8.43.0", @@ -79824,6 +80064,7 @@ "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-find-in-page": "^4.30.4", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-import-export": "^7.41.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-intercom": "^0.12.3", diff --git a/packages/compass-collection/src/components/collection-tab.tsx b/packages/compass-collection/src/components/collection-tab.tsx index 4d9df0da573..f4da240c81b 100644 --- a/packages/compass-collection/src/components/collection-tab.tsx +++ b/packages/compass-collection/src/components/collection-tab.tsx @@ -13,7 +13,10 @@ import type { CollectionTabOptions } from '../stores/collection-tab'; import type { CollectionMetadata } from 'mongodb-collection-model'; import type { CollectionSubtab } from '@mongodb-js/compass-workspaces'; import { useTelemetry } from '@mongodb-js/compass-telemetry/provider'; -import { useConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import { + useConnectionInfoRef, + useConnectionSupports, +} from '@mongodb-js/compass-connections/provider'; type CollectionSubtabTrackingId = Lowercase extends infer U ? U extends string @@ -114,8 +117,19 @@ function WithErrorBoundary({ function useCollectionTabs(props: CollectionMetadata) { const pluginTabs = useCollectionSubTabs(); - return pluginTabs.map( - ({ name, content: Content, provider: Provider, header: Header }) => { + const connectionInfoRef = useConnectionInfoRef(); + const isGlobalWritesSupported = useConnectionSupports( + connectionInfoRef.current.id, + 'globalWrites' + ); + return pluginTabs + .filter((x) => { + if (x.name === 'GlobalWrites' && !isGlobalWritesSupported) { + return false; + } + return true; + }) + .map(({ name, content: Content, provider: Provider, header: Header }) => { // `pluginTabs` never change in runtime so it's safe to call the hook here // eslint-disable-next-line react-hooks/rules-of-hooks Provider.useActivate(props); @@ -136,8 +150,7 @@ function useCollectionTabs(props: CollectionMetadata) { ), }; - } - ); + }); } const CollectionTabWithMetadata: React.FunctionComponent< diff --git a/packages/compass-connections/src/provider.ts b/packages/compass-connections/src/provider.ts index dee73bd3e64..96c74721ddf 100644 --- a/packages/compass-connections/src/provider.ts +++ b/packages/compass-connections/src/provider.ts @@ -98,6 +98,7 @@ export { } from './stores/store-context'; export { useConnectionsStore as useConnections }; +export { useConnectionSupports } from './hooks/use-connection-supports'; const ConnectionStatus = { /** diff --git a/packages/compass-global-writes/.depcheckrc b/packages/compass-global-writes/.depcheckrc new file mode 100644 index 00000000000..ae7c8273e41 --- /dev/null +++ b/packages/compass-global-writes/.depcheckrc @@ -0,0 +1,11 @@ +ignores: + - '@mongodb-js/prettier-config-compass' + - '@mongodb-js/tsconfig-compass' + - '@types/chai' + - '@types/sinon-chai' + - 'sinon' + - '@types/chai-dom' + - '@types/react' + - '@types/react-dom' +ignore-patterns: + - 'dist' diff --git a/packages/compass-global-writes/.eslintignore b/packages/compass-global-writes/.eslintignore new file mode 100644 index 00000000000..85a8a75e68c --- /dev/null +++ b/packages/compass-global-writes/.eslintignore @@ -0,0 +1,2 @@ +.nyc-output +dist diff --git a/packages/compass-global-writes/.eslintrc.js b/packages/compass-global-writes/.eslintrc.js new file mode 100644 index 00000000000..f06f8fc6013 --- /dev/null +++ b/packages/compass-global-writes/.eslintrc.js @@ -0,0 +1,8 @@ +module.exports = { + root: true, + extends: ['@mongodb-js/eslint-config-compass/plugin'], + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig-lint.json'], + }, +}; diff --git a/packages/compass-global-writes/.mocharc.js b/packages/compass-global-writes/.mocharc.js new file mode 100644 index 00000000000..a7e53abc444 --- /dev/null +++ b/packages/compass-global-writes/.mocharc.js @@ -0,0 +1 @@ +module.exports = require('@mongodb-js/mocha-config-compass/compass-plugin'); diff --git a/packages/compass-global-writes/.prettierignore b/packages/compass-global-writes/.prettierignore new file mode 100644 index 00000000000..4d28df6603a --- /dev/null +++ b/packages/compass-global-writes/.prettierignore @@ -0,0 +1,3 @@ +.nyc_output +dist +coverage diff --git a/packages/compass-global-writes/.prettierrc.json b/packages/compass-global-writes/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/compass-global-writes/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json new file mode 100644 index 00000000000..917f8d4791a --- /dev/null +++ b/packages/compass-global-writes/package.json @@ -0,0 +1,86 @@ +{ + "name": "@mongodb-js/compass-global-writes", + "description": "Compass Global Sharding management", + "author": { + "name": "MongoDB Inc", + "email": "compass@mongodb.com" + }, + "private": true, + "bugs": { + "url": "https://jira.mongodb.org/projects/COMPASS/issues", + "email": "compass@mongodb.com" + }, + "homepage": "https://github.com/mongodb-js/compass", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "https://github.com/mongodb-js/compass.git" + }, + "files": [ + "dist" + ], + "license": "SSPL", + "main": "dist/index.js", + "compass:main": "src/index.ts", + "exports": { + "import": "./dist/.esm-wrapper.mjs", + "require": "./dist/index.js" + }, + "compass:exports": { + ".": "./src/index.ts" + }, + "types": "./dist/index.d.ts", + "scripts": { + "bootstrap": "npm run compile", + "compile": "tsc -p tsconfig.json", + "typecheck": "tsc -p tsconfig-lint.json --noEmit", + "eslint": "eslint", + "prettier": "prettier", + "lint": "npm run eslint . && npm run prettier -- --check .", + "depcheck": "compass-scripts check-peer-deps && depcheck", + "check": "npm run typecheck && npm run lint && npm run depcheck", + "check-ci": "npm run check", + "test": "mocha", + "test-electron": "xvfb-maybe electron-mocha --no-sandbox", + "test-cov": "nyc --compact=false --produce-source-map=false -x \"**/*.spec.*\" --reporter=lcov --reporter=text --reporter=html npm run test", + "test-watch": "npm run test -- --watch", + "test-ci": "npm run test-cov", + "test-ci-electron": "npm run test-electron", + "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." + }, + "dependencies": { + "@mongodb-js/atlas-service": "^0.28.3", + "@mongodb-js/compass-collection": "^4.41.0", + "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-connections": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-telemetry": "^1.1.7", + "hadron-app-registry": "^9.2.6", + "react": "^17.0.2", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2" + }, + "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", + "@mongodb-js/mocha-config-compass": "^1.4.2", + "@mongodb-js/prettier-config-compass": "^1.0.2", + "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/tsconfig-compass": "^1.0.5", + "@types/chai": "^4.2.21", + "@types/chai-dom": "^0.0.10", + "@types/mocha": "^9.0.0", + "@types/react": "^17.0.5", + "@types/react-dom": "^17.0.10", + "@types/sinon-chai": "^3.2.5", + "chai": "^4.3.6", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "mocha": "^10.2.0", + "nyc": "^15.1.0", + "prettier": "^2.7.1", + "sinon": "^17.0.1", + "typescript": "^5.0.4", + "xvfb-maybe": "^0.2.1" + }, + "is_compass_plugin": true +} diff --git a/packages/compass-global-writes/src/components/index.spec.tsx b/packages/compass-global-writes/src/components/index.spec.tsx new file mode 100644 index 00000000000..eeb039f28f5 --- /dev/null +++ b/packages/compass-global-writes/src/components/index.spec.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { expect } from 'chai'; +import { render, screen } from '@mongodb-js/testing-library-compass'; +import { GlobalWrites } from './index'; + +describe('Compass GlobalWrites Plugin', function () { + it('renders a Plugin', function () { + render(); + expect(screen.getByText('This feature is currently in development.')).to + .exist; + }); +}); diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx new file mode 100644 index 00000000000..cf5d50f8f1a --- /dev/null +++ b/packages/compass-global-writes/src/components/index.tsx @@ -0,0 +1,34 @@ +import { + css, + spacing, + WorkspaceContainer, + Body, +} from '@mongodb-js/compass-components'; +import React from 'react'; + +const containerStyles = css({ + paddingLeft: spacing[3], + paddingRight: spacing[3], + display: 'flex', + width: '100%', + height: '100%', +}); + +const centeredContent = css({ + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '100%', +}); + +export function GlobalWrites() { + return ( +
+ + + This feature is currently in development. + + +
+ ); +} diff --git a/packages/compass-global-writes/src/index.ts b/packages/compass-global-writes/src/index.ts new file mode 100644 index 00000000000..754e14a2086 --- /dev/null +++ b/packages/compass-global-writes/src/index.ts @@ -0,0 +1,33 @@ +import React from 'react'; +import { registerHadronPlugin } from 'hadron-app-registry'; + +import { GlobalWrites } from './components'; +import { GlobalWritesTabTitle } from './plugin-title'; +import { activateGlobalWritesPlugin } from './store'; +import { createLoggerLocator } from '@mongodb-js/compass-logging/provider'; +import { telemetryLocator } from '@mongodb-js/compass-telemetry/provider'; +import { connectionInfoRefLocator } from '@mongodb-js/compass-connections/provider'; +import { atlasServiceLocator } from '@mongodb-js/atlas-service/provider'; + +const CompassGlobalWritesHadronPlugin = registerHadronPlugin( + { + name: 'CompassGlobalWrites', + component: function GlobalWritesProvider({ children }) { + return React.createElement(React.Fragment, null, children); + }, + activate: activateGlobalWritesPlugin, + }, + { + logger: createLoggerLocator('COMPASS-GLOBAL-WRITES-UI'), + track: telemetryLocator, + connectionInfoRef: connectionInfoRefLocator, + atlasService: atlasServiceLocator, + } +); + +export const CompassGlobalWritesPlugin = { + name: 'GlobalWrites' as const, + provider: CompassGlobalWritesHadronPlugin, + content: GlobalWrites, + header: GlobalWritesTabTitle, +}; diff --git a/packages/compass-global-writes/src/plugin-title.tsx b/packages/compass-global-writes/src/plugin-title.tsx new file mode 100644 index 00000000000..a733e03dee5 --- /dev/null +++ b/packages/compass-global-writes/src/plugin-title.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export function GlobalWritesTabTitle() { + return
Global Writes
; +} diff --git a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts new file mode 100644 index 00000000000..44c7fc583de --- /dev/null +++ b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts @@ -0,0 +1,5 @@ +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; + +export class AtlasGlobalWritesService { + constructor(private atlasService: AtlasService) {} +} diff --git a/packages/compass-global-writes/src/store/index.ts b/packages/compass-global-writes/src/store/index.ts new file mode 100644 index 00000000000..1ddb8a33263 --- /dev/null +++ b/packages/compass-global-writes/src/store/index.ts @@ -0,0 +1,65 @@ +import { createStore, applyMiddleware, type Action } from 'redux'; +import thunk from 'redux-thunk'; +import type { ActivateHelpers } from 'hadron-app-registry'; +import type { Logger } from '@mongodb-js/compass-logging'; +import type { TrackFunction } from '@mongodb-js/compass-telemetry'; +import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import type { CollectionTabPluginMetadata } from '@mongodb-js/compass-collection'; +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; +import type { ThunkAction } from 'redux-thunk'; + +import reducer, { ShardingStatuses, type RootState } from './reducer'; +import { AtlasGlobalWritesService } from '../services/atlas-global-writes-service'; + +type GlobalWritesExtraArgs = { + logger: Logger; + track: TrackFunction; + connectionInfoRef: ConnectionInfoRef; + atlasGlobalWritesService: AtlasGlobalWritesService; +}; + +export type GlobalWritesThunkAction = ThunkAction< + R, + RootState, + GlobalWritesExtraArgs, + A +>; + +type GlobalWritesPluginOptions = CollectionTabPluginMetadata; +type GlobalWritesPluginServices = Pick< + GlobalWritesExtraArgs, + 'logger' | 'track' | 'connectionInfoRef' +> & { + atlasService: AtlasService; +}; + +export function activateGlobalWritesPlugin( + options: GlobalWritesPluginOptions, + { + connectionInfoRef, + logger, + track, + atlasService, + }: GlobalWritesPluginServices, + { cleanup }: ActivateHelpers +) { + const atlasGlobalWritesService = new AtlasGlobalWritesService(atlasService); + const store = createStore( + reducer, + { + namespace: options.namespace, + isNamespaceSharded: false, + status: ShardingStatuses.NOT_READY, + }, + applyMiddleware( + thunk.withExtraArgument({ + logger, + track, + connectionInfoRef, + atlasGlobalWritesService, + }) + ) + ); + + return { store, deactivate: () => cleanup() }; +} diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts new file mode 100644 index 00000000000..5555f3ac410 --- /dev/null +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -0,0 +1,26 @@ +import type { Action, Reducer } from 'redux'; + +export enum ShardingStatuses { + /** + * Initial status, no information available yet. + */ + NOT_READY = 'NOT_READY', +} + +export type RootState = { + namespace: string; + isNamespaceSharded: boolean; + status: keyof typeof ShardingStatuses; +}; + +const initialState: RootState = { + namespace: '', + isNamespaceSharded: false, + status: ShardingStatuses.NOT_READY, +}; + +const reducer: Reducer = (state = initialState) => { + return state; +}; + +export default reducer; diff --git a/packages/compass-global-writes/tsconfig-lint.json b/packages/compass-global-writes/tsconfig-lint.json new file mode 100644 index 00000000000..6bdef84f322 --- /dev/null +++ b/packages/compass-global-writes/tsconfig-lint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/compass-global-writes/tsconfig.json b/packages/compass-global-writes/tsconfig.json new file mode 100644 index 00000000000..79bc84584ce --- /dev/null +++ b/packages/compass-global-writes/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@mongodb-js/tsconfig-compass/tsconfig.react.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src/**/*"], + "exclude": ["./src/**/*.spec.*"] +} diff --git a/packages/compass-telemetry/src/telemetry-events.ts b/packages/compass-telemetry/src/telemetry-events.ts index 88381525972..08797c9c8ec 100644 --- a/packages/compass-telemetry/src/telemetry-events.ts +++ b/packages/compass-telemetry/src/telemetry-events.ts @@ -2434,6 +2434,7 @@ type ScreenEvent = ConnectionScoped<{ | 'databases' | 'documents' | 'indexes' + | 'globalwrites' | 'my_queries' | 'performance' | 'schema' diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 1e3a95da45a..d52c9e31d25 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -74,6 +74,7 @@ "@mongodb-js/compass-export-to-language": "^9.18.0", "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-logging": "^1.4.7", "@mongodb-js/compass-query-bar": "^8.43.0", diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index 1bbf0b0302e..e2103fe782b 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -29,6 +29,7 @@ import { import { CompassSchemaPlugin } from '@mongodb-js/compass-schema'; import { CompassIndexesPlugin } from '@mongodb-js/compass-indexes'; import { CompassSchemaValidationPlugin } from '@mongodb-js/compass-schema-validation'; +import { CompassGlobalWritesPlugin } from '@mongodb-js/compass-global-writes'; import ExplainPlanCollectionTabModal from '@mongodb-js/compass-explain-plan'; import ExportToLanguageCollectionTabModal from '@mongodb-js/compass-export-to-language'; import { @@ -172,6 +173,7 @@ function CompassWorkspace({ CompassSchemaPlugin, CompassIndexesPlugin, CompassSchemaValidationPlugin, + CompassGlobalWritesPlugin, ]} modals={[ ExplainPlanCollectionTabModal, diff --git a/packages/compass-workspaces/src/types.ts b/packages/compass-workspaces/src/types.ts index c489c713b28..9a2fca9f88b 100644 --- a/packages/compass-workspaces/src/types.ts +++ b/packages/compass-workspaces/src/types.ts @@ -3,7 +3,8 @@ export type CollectionSubtab = | 'Aggregations' | 'Schema' | 'Indexes' - | 'Validation'; + | 'Validation' + | 'GlobalWrites'; export type WelcomeWorkspace = { type: 'Welcome'; diff --git a/packages/compass/package.json b/packages/compass/package.json index 327751e90d6..f3894466020 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -205,6 +205,7 @@ "@mongodb-js/compass-field-store": "^9.17.0", "@mongodb-js/compass-find-in-page": "^4.30.4", "@mongodb-js/compass-generative-ai": "^0.22.3", + "@mongodb-js/compass-global-writes": "^1.0.0", "@mongodb-js/compass-import-export": "^7.41.0", "@mongodb-js/compass-indexes": "^5.41.0", "@mongodb-js/compass-intercom": "^0.12.3", diff --git a/packages/compass/src/app/components/workspace.tsx b/packages/compass/src/app/components/workspace.tsx index 4e30ae5998f..7804ee984c8 100644 --- a/packages/compass/src/app/components/workspace.tsx +++ b/packages/compass/src/app/components/workspace.tsx @@ -26,6 +26,7 @@ import { CompassAggregationsPlugin } from '@mongodb-js/compass-aggregations'; import { CompassSchemaPlugin } from '@mongodb-js/compass-schema'; import { CompassIndexesPlugin } from '@mongodb-js/compass-indexes'; import { CompassSchemaValidationPlugin } from '@mongodb-js/compass-schema-validation'; +import { CompassGlobalWritesPlugin } from '@mongodb-js/compass-global-writes'; import { CreateViewPlugin } from '@mongodb-js/compass-aggregations'; import { CreateNamespacePlugin, @@ -101,6 +102,7 @@ export default function Workspace({ CompassSchemaPlugin, CompassIndexesPlugin, CompassSchemaValidationPlugin, + CompassGlobalWritesPlugin, ]} modals={[ ExplainPlanCollectionTabModal, From 847f2496c500335bbaa539a2ad1112944da46758 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:42:27 +0000 Subject: [PATCH 21/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6281) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- docs/tracking-plan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 089bdb7e688..cb7b267b37d 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Sep 25, 2024 at 11:30 AM +Generated on Wed, Sep 25, 2024 at 11:42 AM ## Table of Contents @@ -1642,7 +1642,7 @@ This event is fired when a user activates (i.e., navigates to) a screen. **Properties**: -- **name** (optional): `"my_queries" | "aggregations" | "documents" | "collections" | "databases" | "indexes" | "performance" | "schema" | "validation" | "confirm_new_pipeline_modal" | "create_collection_modal" | "create_database_modal" | "drop_collection_modal" | "drop_database_modal" | "create_index_modal" | "create_search_index_modal" | "create_view_modal" | "csfle_connection_modal" | "delete_pipeline_modal" | "drop_index_modal" | "export_modal" | "export_to_language_modal" | "import_modal" | "insert_document_modal" | "non_genuine_mongodb_modal" | "rename_collection_modal" | "restore_pipeline_modal" | "save_pipeline_modal" | "shell_info_modal" | "update_search_index_modal" | undefined` +- **name** (optional): `"my_queries" | "aggregations" | "documents" | "collections" | "databases" | "indexes" | "globalwrites" | "performance" | "schema" | "validation" | "confirm_new_pipeline_modal" | "create_collection_modal" | "create_database_modal" | "drop_collection_modal" | "drop_database_modal" | "create_index_modal" | "create_search_index_modal" | "create_view_modal" | "csfle_connection_modal" | "delete_pipeline_modal" | "drop_index_modal" | "export_modal" | "export_to_language_modal" | "import_modal" | "insert_document_modal" | "non_genuine_mongodb_modal" | "rename_collection_modal" | "restore_pipeline_modal" | "save_pipeline_modal" | "shell_info_modal" | "update_search_index_modal" | undefined` - The name of the screen that was activated. - **connection_id** (optional): `string | undefined` - The id of the connection associated to this event. From b64d171c5347657999457d559dbd83c8439f16d7 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 25 Sep 2024 22:35:23 +0200 Subject: [PATCH 22/97] chore(ci): account for 8.0.0 publish COMPASS-8087 (#6283) Use proper 8.0.x versions where possible and switch the crypt_shared library back to using a `continuous` version. --- .evergreen/buildvariants-and-tasks.in.yml | 6 +++--- .evergreen/buildvariants-and-tasks.yml | 12 ++++++------ .evergreen/functions.yml | 2 +- packages/compass/scripts/download-csfle.js | 6 ++---- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.evergreen/buildvariants-and-tasks.in.yml b/.evergreen/buildvariants-and-tasks.in.yml index 33f66627cf3..c8e742c289d 100644 --- a/.evergreen/buildvariants-and-tasks.in.yml +++ b/.evergreen/buildvariants-and-tasks.in.yml @@ -110,8 +110,8 @@ const MAINTAINED_SERVER_VERSIONS = [ { name: '60x-enterprise', version: '6.0.x-enterprise' }, { name: '70x-community', version: '7.0.x' }, { name: '70x-enterprise', version: '7.0.x-enterprise' }, - { name: '80x-community', version: '8.0.0-rc18' }, - { name: '80x-enterprise', version: '8.0.0-rc18-enterprise' }, + { name: '80x-community', version: '8.0.x' }, + { name: '80x-enterprise', version: '8.0.x-enterprise' }, ]; const TEST_LATEST_ALPHA_SERVER_VERSION = { name: 'latest-alpha', version: 'latest-alpha-enterprise' }; @@ -281,7 +281,7 @@ tasks: - func: check - name: test - tags: + tags: - required-for-publish - run-on-pr - assigned_to_jira_team_compass_compass diff --git a/.evergreen/buildvariants-and-tasks.yml b/.evergreen/buildvariants-and-tasks.yml index 9db333b07a0..8c3aa4df9f3 100644 --- a/.evergreen/buildvariants-and-tasks.yml +++ b/.evergreen/buildvariants-and-tasks.yml @@ -1291,7 +1291,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18 + mongodb_version: 8.0.x compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 1 @@ -1314,7 +1314,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18 + mongodb_version: 8.0.x compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 2 @@ -1337,7 +1337,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18 + mongodb_version: 8.0.x compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 3 @@ -1360,7 +1360,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18-enterprise + mongodb_version: 8.0.x-enterprise compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 1 @@ -1383,7 +1383,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18-enterprise + mongodb_version: 8.0.x-enterprise compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 2 @@ -1406,7 +1406,7 @@ tasks: compass_distribution: compass - func: test-packaged-app vars: - mongodb_version: 8.0.0-rc18-enterprise + mongodb_version: 8.0.x-enterprise compass_distribution: compass e2e_test_groups: 3 e2e_test_group: 3 diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index bf77d055ee8..68b4dd24be7 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -699,7 +699,7 @@ functions: eval $(.evergreen/print-compass-env.sh) rm -rf mongodb-crypt && mkdir -p mongodb-crypt (cd mongodb-crypt && \ - curl -sSfL $(npx -y mongodb-download-url --enterprise --crypt_shared --version '>= 8.0.0-rc18') | \ + curl -sSfL $(npx -y mongodb-download-url --enterprise --crypt_shared --version continuous) | \ tar -xvz) export COMPASS_CRYPT_LIBRARY_PATH=$(echo $PWD/mongodb-crypt/lib/mongo_*_v1.*) npm run test-csfle --workspace mongodb-data-service diff --git a/packages/compass/scripts/download-csfle.js b/packages/compass/scripts/download-csfle.js index 366c9644d26..57ffa43ffce 100644 --- a/packages/compass/scripts/download-csfle.js +++ b/packages/compass/scripts/download-csfle.js @@ -35,9 +35,7 @@ const CSFLE_DIRECTORY = path.resolve(PACKAGE_ROOT, 'src', 'deps', 'csfle'); const downloadOptions = { enterprise: true, crypt_shared: true, - // TODO(MONGOSH-1833): The current 'continuous' release is not compatible with 8.x rc server releases. So we are using - // 8.0.0-rc18 (current latest) for now and once 8.0 is released we should switch back to continuous. - version: '8.0.0-rc18', + version: 'continuous', }; if (process.platform === 'linux') { // The CSFLE shared library is built for different distros, @@ -49,7 +47,7 @@ const CSFLE_DIRECTORY = path.resolve(PACKAGE_ROOT, 'src', 'deps', 'csfle'); const { downloadedBinDir, version } = await downloadMongoDbWithVersionInfo( CACHE_DIR, - '8.0.0-rc18', + 'continuous', downloadOptions ); await fs.mkdir(CSFLE_DIRECTORY, { recursive: true }); From c7ed88d0e42ba09436ddae20beaa1b824f19ba39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 20:42:05 +0000 Subject: [PATCH 23/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6284) Update report Co-authored-by: addaleax <899444+addaleax@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index cb7b267b37d..2d6fa16c2ac 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Sep 25, 2024 at 11:42 AM +Generated on Wed, Sep 25, 2024 at 08:41 PM ## Table of Contents From 6ecce93b6bd0b370e57fcad02a151e21289bdb49 Mon Sep 17 00:00:00 2001 From: Rhys Date: Wed, 25 Sep 2024 22:42:37 -0400 Subject: [PATCH 24/97] chore(aggregations): telemetry add stage names to aggregation executed COMPASS-8301 (#6228) --- packages/compass-aggregations/src/modules/aggregation.ts | 1 + packages/compass-telemetry/src/telemetry-events.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/packages/compass-aggregations/src/modules/aggregation.ts b/packages/compass-aggregations/src/modules/aggregation.ts index 3c4efbe7e5d..ed9b9e39930 100644 --- a/packages/compass-aggregations/src/modules/aggregation.ts +++ b/packages/compass-aggregations/src/modules/aggregation.ts @@ -314,6 +314,7 @@ export const runAggregation = (): PipelineBuilderThunkAction> => { () => ({ num_stages: pipeline.length, editor_view_type: mapPipelineModeToEditorViewType(getState()), + stage_operators: pipeline.map((stage) => getStageOperator(stage)), }), connectionInfoRef.current ); diff --git a/packages/compass-telemetry/src/telemetry-events.ts b/packages/compass-telemetry/src/telemetry-events.ts index 08797c9c8ec..2975f205095 100644 --- a/packages/compass-telemetry/src/telemetry-events.ts +++ b/packages/compass-telemetry/src/telemetry-events.ts @@ -222,6 +222,11 @@ type AggregationExecutedEvent = ConnectionScoped<{ * The type of editor view from which the aggregation has been executed. */ editor_view_type: 'stage' | 'text' | 'focus'; + + /** + * The names of the stages in the pipeline being executed. + */ + stage_operators: (string | undefined)[]; }; }>; From fa19459ba83e357560a078c8e9ca1154bd9deb38 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 02:49:39 +0000 Subject: [PATCH 25/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6285) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 9ac0e06de39..6aae68e49c1 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Wed Sep 25 2024. +This document was automatically generated on Thu Sep 26 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 2d6fa16c2ac..e05c4d135d1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Sep 25, 2024 at 08:41 PM +Generated on Thu, Sep 26, 2024 at 02:49 AM ## Table of Contents @@ -299,6 +299,8 @@ This event is fired when user runs the aggregation. the even has been fired. - **editor_view_type** (required): `"stage" | "text" | "focus"` - The type of editor view from which the aggregation has been executed. +- **stage_operators** (required): `{}` + - The names of the stages in the pipeline being executed. - **connection_id** (optional): `string | undefined` - The id of the connection associated to this event. From b9e26bd4c87ec50a51e936ee30a76d24f91d3523 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 26 Sep 2024 09:45:03 +0200 Subject: [PATCH 26/97] chore(indexes): remove in progress state from create index modal; decouple index creation and form submission (#6282) * chore(indexes): remove in progress state from create index modal; decouple index creation and form submission * chore(e2e): update create index helper to wait for index creation based on badge in the table --- .../helpers/commands/create-index.ts | 6 + .../compass-e2e-tests/helpers/selectors.ts | 1 + .../create-index-actions.spec.jsx | 73 +----- .../create-index-actions.tsx | 72 ++---- .../create-index-modal/create-index-modal.tsx | 10 +- .../regular-indexes-table/property-field.tsx | 4 +- .../src/modules/create-index.spec.ts | 142 ++--------- .../src/modules/create-index.tsx | 236 +++++------------- .../src/modules/regular-indexes.ts | 163 ++++++++++-- 9 files changed, 265 insertions(+), 442 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/commands/create-index.ts b/packages/compass-e2e-tests/helpers/commands/create-index.ts index ea0a4c23fd6..a62d69cd1af 100644 --- a/packages/compass-e2e-tests/helpers/commands/create-index.ts +++ b/packages/compass-e2e-tests/helpers/commands/create-index.ts @@ -108,5 +108,11 @@ export async function createIndex( const indexComponent = await browser.$(indexComponentSelector); await indexComponent.waitForDisplayed(); + // Wait for index to get ready before proceeding + await browser + .$(indexComponentSelector) + .$(Selectors.IndexPropertyInProgress) + .waitForDisplayed({ reverse: true }); + return indexName; } diff --git a/packages/compass-e2e-tests/helpers/selectors.ts b/packages/compass-e2e-tests/helpers/selectors.ts index eac0d4f5f43..5760e945347 100644 --- a/packages/compass-e2e-tests/helpers/selectors.ts +++ b/packages/compass-e2e-tests/helpers/selectors.ts @@ -1088,6 +1088,7 @@ export const indexComponent = (name: string): string => { }; export const IndexFieldName = '[data-testid="indexes-name-field"]'; export const IndexFieldType = '[data-testid="indexes-type-field"]'; +export const IndexPropertyInProgress = '[data-testid="index-in-progress"]'; export const IndexToggleOptions = '[data-testid="create-index-modal-toggle-options"]'; export const indexToggleOption = (fieldName: string) => { diff --git a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx index ba27d6421f3..f76599042c2 100644 --- a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx +++ b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.spec.jsx @@ -5,15 +5,12 @@ import sinon from 'sinon'; import { render, screen, - cleanup, - fireEvent, + userEvent, within, } from '@mongodb-js/testing-library-compass'; import CreateIndexActions from '../create-index-actions'; -const noop = () => {}; - describe('CreateIndexActions Component', function () { let clearErrorSpy; let onCreateIndexClickSpy; @@ -29,8 +26,6 @@ describe('CreateIndexActions Component', function () { clearErrorSpy = null; onCreateIndexClickSpy = null; closeCreateIndexModalSpy = null; - - cleanup(); }); it('renders a cancel button', function () { @@ -38,7 +33,6 @@ describe('CreateIndexActions Component', function () { @@ -54,14 +48,13 @@ describe('CreateIndexActions Component', function () { ); const button = screen.getByTestId('create-index-actions-cancel-button'); - fireEvent.click(button); + userEvent.click(button); expect(closeCreateIndexModalSpy).to.have.been.calledOnce; }); }); @@ -72,7 +65,6 @@ describe('CreateIndexActions Component', function () { @@ -81,7 +73,7 @@ describe('CreateIndexActions Component', function () { const button = screen.getByTestId( 'create-index-actions-create-index-button' ); - fireEvent.click(button); + userEvent.click(button); expect(onCreateIndexClickSpy).to.have.been.calledOnce; }); }); @@ -91,7 +83,6 @@ describe('CreateIndexActions Component', function () { @@ -109,7 +100,6 @@ describe('CreateIndexActions Component', function () { @@ -126,7 +116,6 @@ describe('CreateIndexActions Component', function () { @@ -137,25 +126,9 @@ describe('CreateIndexActions Component', function () { ); const closeIcon = within(errorBanner).getByLabelText('X Icon'); - fireEvent.click(closeIcon); + userEvent.click(closeIcon); expect(clearErrorSpy).to.have.been.calledOnce; }); - - it('does not render in progress banner', function () { - render( - - ); - - const inProgressBanner = screen.queryByTestId( - 'create-index-actions-in-progress-banner-wrapper' - ); - expect(inProgressBanner).to.not.exist; - }); }); context('without error', function () { @@ -164,7 +137,6 @@ describe('CreateIndexActions Component', function () { @@ -175,42 +147,5 @@ describe('CreateIndexActions Component', function () { ); expect(errorBanner).to.not.exist; }); - - context('when in progress', function () { - beforeEach(function () { - render( - - ); - }); - - afterEach(cleanup); - - it('renders in progress banner', function () { - const inProgressBanner = screen.getByTestId( - 'create-index-actions-in-progress-banner-wrapper' - ); - expect(inProgressBanner).to.contain.text('Index creation in progress'); - }); - - it('hides the create index button', function () { - const onCreateIndexClickButton = screen.queryByTestId( - 'create-index-actions-create-index-button' - ); - expect(onCreateIndexClickButton).to.not.exist; - }); - - it('renames the cancel button to close', function () { - const cancelButton = screen.getByTestId( - 'create-index-actions-cancel-button' - ); - expect(cancelButton.textContent).to.be.equal('Close'); - }); - }); }); }); diff --git a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx index cc1f9ab9991..ab6aab6d67f 100644 --- a/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx +++ b/packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx @@ -24,72 +24,46 @@ const createIndexButtonStyles = css({ */ function CreateIndexActions({ error, - inProgress, onErrorBannerCloseClick, onCreateIndexClick, onCancelCreateIndexClick, }: { error: string | null; - inProgress: boolean; onErrorBannerCloseClick: () => void; onCreateIndexClick: () => void; onCancelCreateIndexClick: () => void; }) { - const renderError = () => { - if (!error) { - return; - } - - return ( -
- - {error} - -
- ); - }; - - const renderInProgress = () => { - if (error || !inProgress) { - return; - } - - return ( -
- - Index creation in progress. The dialog can be closed. - -
- ); - }; - return (
- {renderError()} - {renderInProgress()} + {error && ( +
+ + {error} + +
+ )} + - {!inProgress && ( - - )}
); } diff --git a/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx b/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx index 189c6988968..2f4e744bc66 100644 --- a/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx +++ b/packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx @@ -12,7 +12,7 @@ import { fieldTypeUpdated, updateFieldName, errorCleared, - createIndex, + createIndexFormSubmitted, createIndexClosed, } from '../../modules/create-index'; import { CreateIndexForm } from '../create-index-form/create-index-form'; @@ -28,7 +28,6 @@ type CreateIndexModalProps = React.ComponentProps & { isVisible: boolean; namespace: string; error: string | null; - inProgress: boolean; onErrorBannerCloseClick: () => void; onCreateIndexClick: () => void; onCancelCreateIndexClick: () => void; @@ -38,7 +37,6 @@ function CreateIndexModal({ isVisible, namespace, error, - inProgress, onErrorBannerCloseClick, onCreateIndexClick, onCancelCreateIndexClick, @@ -88,7 +86,6 @@ function CreateIndexModal({ @@ -98,10 +95,9 @@ function CreateIndexModal({ } const mapState = ({ namespace, serverVersion, createIndex }: RootState) => { - const { fields, inProgress, error, isVisible } = createIndex; + const { fields, error, isVisible } = createIndex; return { fields, - inProgress, error, isVisible, namespace, @@ -111,7 +107,7 @@ const mapState = ({ namespace, serverVersion, createIndex }: RootState) => { const mapDispatch = { onErrorBannerCloseClick: errorCleared, - onCreateIndexClick: createIndex, + onCreateIndexClick: createIndexFormSubmitted, onCancelCreateIndexClick: createIndexClosed, onAddFieldClick: fieldAdded, onRemoveFieldClick: fieldRemoved, diff --git a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx index ffcfd89f6fd..fe29fa9197c 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx @@ -109,7 +109,9 @@ const PropertyField: React.FunctionComponent = ({ /> )} {extra.status === 'inprogress' && ( - In Progress ... + + In Progress ... + )} {extra.status === 'failed' && ( => { - // store it so we can assert on the in-between state - stateBeforeCreateIndex = { ...store.getState().createIndex }; - return Promise.resolve('ok'); - }); - - store = setupStore( - {}, - { - createIndex: createIndexStub, - } - ); - - store.dispatch(updateFieldName(0, 'foo')); - store.dispatch(fieldTypeUpdated(0, '1 (asc)')); - - store.dispatch(optionToggled('unique', true)); - store.dispatch(optionToggled('name', true)); - store.dispatch(optionChanged('name', 'my-index')); - store.dispatch(optionToggled('expireAfterSeconds', true)); - store.dispatch(optionChanged('expireAfterSeconds', '60')); - store.dispatch(optionToggled('partialFilterExpression', true)); - store.dispatch( - optionChanged('partialFilterExpression', '{ "rating": { "$gt": 5 } }') - ); - - await store.dispatch(createIndex()); - - // make sure it got to insert - expect(createIndexStub.callCount).to.equal(1); - - // it should have set it to be in progress before calling dataService.createIndex - expect(stateBeforeCreateIndex).to.deep.equal({ - inProgress: true, - isVisible: false, - error: null, - fields: [{ name: 'foo', type: '1 (asc)' }], - options: { - unique: { value: false, enabled: true }, - name: { value: 'my-index', enabled: true }, - expireAfterSeconds: { value: '60', enabled: true }, - partialFilterExpression: { - value: '{ "rating": { "$gt": 5 } }', - enabled: true, - }, - wildcardProjection: { value: '', enabled: false }, - collation: { value: '', enabled: false }, - columnstoreProjection: { value: '', enabled: false }, - sparse: { value: false, enabled: false }, - }, - }); - - const [ns, spec, options] = createIndexStub.args[0]; - expect(ns).to.equal('citibike.trips'); - expect(spec).to.deep.equal({ foo: 1 }); - expect(options).to.deep.equal({ - expireAfterSeconds: 60, - name: 'my-index', - partialFilterExpression: { - rating: { - $gt: 5, - }, - }, - }); - - expect(store.getState().createIndex).to.deep.equal(INITIAL_STATE); - }); - - it('fails if dataService.createIndex() rejects', async function () { - const createIndexStub = sinon - .stub() - .rejects(new Error('This is an error')); - - store = setupStore( - {}, - { - createIndex: createIndexStub, - } - ); - - store.dispatch(updateFieldName(0, 'foo')); - store.dispatch(fieldTypeUpdated(0, 'text')); - - await store.dispatch(createIndex()); - - // make sure it got to insert - expect(createIndexStub.callCount).to.equal(1); - - // state should be there with an error, not inProgress anymore - expect(store.getState().createIndex).to.deep.equal({ - inProgress: false, - isVisible: false, - error: 'This is an error', - fields: [{ name: 'foo', type: 'text' }], - options: { - unique: { value: false, enabled: false }, - name: { value: '', enabled: false }, - expireAfterSeconds: { value: '', enabled: false }, - partialFilterExpression: { value: '', enabled: false }, - wildcardProjection: { value: '', enabled: false }, - collation: { value: '', enabled: false }, - columnstoreProjection: { value: '', enabled: false }, - sparse: { value: false, enabled: false }, - }, - }); - }); }); describe('fieldAdded', function () { diff --git a/packages/compass-indexes/src/modules/create-index.tsx b/packages/compass-indexes/src/modules/create-index.tsx index f9ada33fa4a..fb5d380197c 100644 --- a/packages/compass-indexes/src/modules/create-index.tsx +++ b/packages/compass-indexes/src/modules/create-index.tsx @@ -1,15 +1,13 @@ import { EJSON, ObjectId } from 'bson'; -import type { CreateIndexesOptions, IndexSpecification } from 'mongodb'; +import type { CreateIndexesOptions } from 'mongodb'; import { isCollationValid } from 'mongodb-query-parser'; import React from 'react'; import type { Action, Reducer, Dispatch } from 'redux'; import { Badge } from '@mongodb-js/compass-components'; import { isAction } from '../utils/is-action'; -import type { InProgressIndex } from './regular-indexes'; import type { IndexesThunkAction } from '.'; -import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; import type { RootState } from '.'; -import { refreshRegularIndexes } from './regular-indexes'; +import { createRegularIndex } from './regular-indexes'; export enum ActionTypes { FieldAdded = 'compass-indexes/create-index/fields/field-added', @@ -26,10 +24,7 @@ export enum ActionTypes { CreateIndexOpened = 'compass-indexes/create-index/create-index-shown', CreateIndexClosed = 'compass-indexes/create-index/create-index-hidden', - // These also get used by the regular-indexes slice's reducer - IndexCreationStarted = 'compass-indexes/create-index/index-creation-started', - IndexCreationSucceeded = 'compass-indexes/create-index/index-creation-succeeded', - IndexCreationFailed = 'compass-indexes/create-index/index-creation-failed', + CreateIndexFormSubmitted = 'compass-indexes/create-index/create-index-form-submitted', } // fields @@ -58,6 +53,10 @@ type FieldsChangedAction = { fields: Field[]; }; +/** + * Emitted only when the form fails client-side validation before being + * submitted + */ type ErrorEncounteredAction = { type: ActionTypes.ErrorEncountered; error: string; @@ -75,20 +74,12 @@ type CreateIndexClosedAction = { type: ActionTypes.CreateIndexClosed; }; -export type IndexCreationStartedAction = { - type: ActionTypes.IndexCreationStarted; - inProgressIndex: InProgressIndex; -}; - -export type IndexCreationSucceededAction = { - type: ActionTypes.IndexCreationSucceeded; - inProgressIndexId: string; -}; - -export type IndexCreationFailedAction = { - type: ActionTypes.IndexCreationFailed; - inProgressIndexId: string; - error: string; +/** + * Dispatched when the form passed the client validation and the form data was + * submitted for index creation + */ +type CreateIndexFormSubmittedAction = { + type: ActionTypes.CreateIndexFormSubmitted; }; export const fieldAdded = () => ({ @@ -259,11 +250,15 @@ const INITIAL_OPTIONS_STATE = Object.fromEntries( // other export type State = { - // modal state - inProgress: boolean; + // A unique id assigned to the create index modal on open, will be used when + // creating an instance of in-progress index and can be used to map the index + // to the form if needed + indexId: string; + + // Whether or not the modal is open or closed isVisible: boolean; - // validation + // Client-side validation error error: string | null; // form fields related @@ -274,15 +269,18 @@ export type State = { }; export const INITIAL_STATE: State = { - inProgress: false, + indexId: new ObjectId().toHexString(), isVisible: false, error: null, fields: INITIAL_FIELDS_STATE, options: INITIAL_OPTIONS_STATE, }; -function getInitialState() { - return JSON.parse(JSON.stringify(INITIAL_STATE)); +function getInitialState(): State { + return { + ...JSON.parse(JSON.stringify(INITIAL_STATE)), + indexId: new ObjectId().toHexString(), + }; } //------- @@ -304,67 +302,9 @@ export const errorCleared = (): ErrorClearedAction => ({ type: ActionTypes.ErrorCleared, }); -const indexCreationStarted = ( - inProgressIndex: InProgressIndex -): IndexCreationStartedAction => ({ - type: ActionTypes.IndexCreationStarted, - inProgressIndex, -}); - -const indexCreationSucceeded = ( - inProgressIndexId: string -): IndexCreationSucceededAction => ({ - type: ActionTypes.IndexCreationSucceeded, - inProgressIndexId, -}); - -const indexCreationFailed = ( - inProgressIndexId: string, - error: string -): IndexCreationFailedAction => ({ - type: ActionTypes.IndexCreationFailed, - inProgressIndexId, - error, -}); - export type CreateIndexSpec = { [key: string]: string | number; }; -const prepareIndex = ({ - ns, - name, - spec, -}: { - ns: string; - name?: string; - spec: CreateIndexSpec; -}): InProgressIndex => { - const inProgressIndexId = new ObjectId().toHexString(); - const inProgressIndexFields = Object.keys(spec).map((field: string) => ({ - field, - value: spec[field], - })); - const inProgressIndexName = - name || - Object.keys(spec).reduce((previousValue, currentValue) => { - return `${ - previousValue === '' ? '' : `${previousValue}_` - }${currentValue}_${spec[currentValue]}`; - }, ''); - return { - id: inProgressIndexId, - extra: { - status: 'inprogress', - }, - key: spec, - fields: inProgressIndexFields, - name: inProgressIndexName, - ns, - size: 0, - relativeSize: 0, - usageCount: 0, - }; -}; function isEmptyValue(value: unknown) { if (value === '') { @@ -377,24 +317,16 @@ function isEmptyValue(value: unknown) { return false; } -export const createIndex = (): IndexesThunkAction< - Promise, - | ErrorEncounteredAction - | IndexCreationStartedAction - | IndexCreationSucceededAction - | IndexCreationFailedAction +export const createIndexFormSubmitted = (): IndexesThunkAction< + void, + ErrorEncounteredAction | CreateIndexFormSubmittedAction > => { - return async ( - dispatch, - getState, - { dataService, track, connectionInfoRef } - ) => { - const state = getState(); + return (dispatch, getState) => { const spec = {} as CreateIndexSpec; // Check for field errors. if ( - state.createIndex.fields.some( + getState().createIndex.fields.some( (field: Field) => field.name === '' || field.type === '' ) ) { @@ -402,9 +334,9 @@ export const createIndex = (): IndexesThunkAction< return; } - const stateOptions = state.createIndex.options; + const formIndexOptions = getState().createIndex.options; - state.createIndex.fields.forEach((field: Field) => { + getState().createIndex.fields.forEach((field: Field) => { let type: string | number = field.type; if (field.type === '1 (asc)') type = 1; if (field.type === '-1 (desc)') type = -1; @@ -415,48 +347,48 @@ export const createIndex = (): IndexesThunkAction< // Check for collation errors. const collation = - isCollationValid(stateOptions.collation.value ?? '') || undefined; + isCollationValid(formIndexOptions.collation.value ?? '') || undefined; - if (stateOptions.collation.enabled && !collation) { + if (formIndexOptions.collation.enabled && !collation) { dispatch(errorEncountered('You must provide a valid collation object')); return; } - if (stateOptions.collation.enabled) { + if (formIndexOptions.collation.enabled) { options.collation = collation; } - if (stateOptions.unique.enabled) { - options.unique = stateOptions.unique.value; + if (formIndexOptions.unique.enabled) { + options.unique = formIndexOptions.unique.value; } - if (stateOptions.sparse.enabled) { - options.sparse = stateOptions.sparse.value; + if (formIndexOptions.sparse.enabled) { + options.sparse = formIndexOptions.sparse.value; } // The server will generate a name when we don't provide one. - if (stateOptions.name.enabled && stateOptions.name.value) { - options.name = stateOptions.name.value; + if (formIndexOptions.name.enabled && formIndexOptions.name.value) { + options.name = formIndexOptions.name.value; } - if (stateOptions.expireAfterSeconds.enabled) { + if (formIndexOptions.expireAfterSeconds.enabled) { options.expireAfterSeconds = Number( - stateOptions.expireAfterSeconds.value + formIndexOptions.expireAfterSeconds.value ); if (isNaN(options.expireAfterSeconds)) { dispatch( errorEncountered( - `Bad TTL: "${String(stateOptions.expireAfterSeconds.value)}"` + `Bad TTL: "${String(formIndexOptions.expireAfterSeconds.value)}"` ) ); return; } } - if (stateOptions.wildcardProjection.enabled) { + if (formIndexOptions.wildcardProjection.enabled) { try { options.wildcardProjection = EJSON.parse( - stateOptions.wildcardProjection.value ?? '' + formIndexOptions.wildcardProjection.value ?? '' ) as Document; } catch (err) { dispatch(errorEncountered(`Bad WildcardProjection: ${String(err)}`)); @@ -464,11 +396,11 @@ export const createIndex = (): IndexesThunkAction< } } - if (stateOptions.columnstoreProjection.enabled) { + if (formIndexOptions.columnstoreProjection.enabled) { try { // @ts-expect-error columnstoreProjection is not a part of CreateIndexesOptions yet. options.columnstoreProjection = EJSON.parse( - stateOptions.columnstoreProjection.value ?? '' + formIndexOptions.columnstoreProjection.value ?? '' ) as Document; } catch (err) { dispatch(errorEncountered(`Bad ColumnstoreProjection: ${String(err)}`)); @@ -476,10 +408,10 @@ export const createIndex = (): IndexesThunkAction< } } - if (stateOptions.partialFilterExpression.enabled) { + if (formIndexOptions.partialFilterExpression.enabled) { try { options.partialFilterExpression = EJSON.parse( - state.createIndex.options.partialFilterExpression.value ?? '' + formIndexOptions.partialFilterExpression.value ?? '' ) as Document; } catch (err) { dispatch( @@ -495,45 +427,18 @@ export const createIndex = (): IndexesThunkAction< // explicitly can lead to the server errors for some index types that don't // support them (even though technically user is not enabling them) for (const optionName of Object.keys( - stateOptions - ) as (keyof typeof stateOptions)[]) { - if (isEmptyValue(stateOptions[optionName].value)) { + formIndexOptions + ) as (keyof typeof formIndexOptions)[]) { + if (isEmptyValue(formIndexOptions[optionName].value)) { // @ts-expect-error columnstoreProjection is not a part of CreateIndexesOptions yet. delete options[optionName]; } } - const ns = state.namespace; - const inProgressIndex = prepareIndex({ ns, name: options.name, spec }); - - dispatch(indexCreationStarted(inProgressIndex)); - - const trackEvent = { - unique: options.unique, - ttl: stateOptions.expireAfterSeconds.enabled, - columnstore_index: hasColumnstoreIndex(state.createIndex.fields), - has_columnstore_projection: stateOptions.columnstoreProjection.enabled, - has_wildcard_projection: stateOptions.wildcardProjection.enabled, - custom_collation: stateOptions.collation.enabled, - geo: - state.createIndex.fields.filter( - ({ type }: { type: string }) => type === '2dsphere' - ).length > 0, - atlas_search: false, - }; - - try { - await dataService.createIndex(ns, spec as IndexSpecification, options); - dispatch(indexCreationSucceeded(inProgressIndex.id)); - track('Index Created', trackEvent, connectionInfoRef.current); - - // Start a new fetch so that the newly added index's details can be - // loaded. indexCreationSucceeded() will remove the in-progress one, but - // we still need the new info. - await dispatch(refreshRegularIndexes()); - } catch (err) { - dispatch(indexCreationFailed(inProgressIndex.id, (err as Error).message)); - } + dispatch({ type: ActionTypes.CreateIndexFormSubmitted }); + void dispatch( + createRegularIndex(getState().createIndex.indexId, spec, options) + ); }; }; @@ -609,7 +514,7 @@ const reducer: Reducer = (state = INITIAL_STATE, action) => { isAction(action, ActionTypes.CreateIndexOpened) ) { return { - ...state, + ...getInitialState(), isVisible: true, }; } @@ -638,34 +543,17 @@ const reducer: Reducer = (state = INITIAL_STATE, action) => { } if ( - isAction( + isAction( action, - ActionTypes.IndexCreationStarted + ActionTypes.CreateIndexFormSubmitted ) ) { return { ...state, - error: null, - inProgress: true, - }; - } - if ( - isAction( - action, - ActionTypes.IndexCreationSucceeded - ) - ) { - return { - ...getInitialState(), + isVisible: false, }; } - if ( - isAction(action, ActionTypes.IndexCreationFailed) - ) { - return { ...state, inProgress: false, error: action.error }; - } - return state; }; diff --git a/packages/compass-indexes/src/modules/regular-indexes.ts b/packages/compass-indexes/src/modules/regular-indexes.ts index e51e1bcdcaa..042dc2775a1 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.ts @@ -11,18 +11,14 @@ import type { FetchStatus } from '../utils/fetch-status'; import { FetchReasons } from '../utils/fetch-reason'; import type { FetchReason } from '../utils/fetch-reason'; import { isAction } from '../utils/is-action'; -import { ActionTypes as CreateIndexActionTypes } from './create-index'; -import type { - CreateIndexSpec, - IndexCreationStartedAction, - IndexCreationSucceededAction, - IndexCreationFailedAction, -} from './create-index'; +import type { CreateIndexSpec } from './create-index'; import type { IndexesThunkAction, RootState } from '.'; import { hideModalDescription, unhideModalDescription, } from '../utils/modal-descriptions'; +import type { IndexSpecification, CreateIndexesOptions } from 'mongodb'; +import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; export type RegularIndex = Omit< IndexDefinition, @@ -45,6 +41,44 @@ export type InProgressIndex = { }; }; +const prepareInProgressIndex = ( + id: string, + { + ns, + name, + spec, + }: { + ns: string; + name?: string; + spec: CreateIndexSpec; + } +): InProgressIndex => { + const inProgressIndexFields = Object.keys(spec).map((field: string) => ({ + field, + value: spec[field], + })); + const inProgressIndexName = + name || + Object.keys(spec).reduce((previousValue, currentValue) => { + return `${ + previousValue === '' ? '' : `${previousValue}_` + }${currentValue}_${spec[currentValue]}`; + }, ''); + return { + id, + extra: { + status: 'inprogress', + }, + key: spec, + fields: inProgressIndexFields, + name: inProgressIndexName, + ns, + size: 0, + relativeSize: 0, + usageCount: 0, + }; +}; + export enum ActionTypes { IndexesOpened = 'compass-indexes/regular-indexes/indexes-opened', IndexesClosed = 'compass-indexes/regular-indexes/indexes-closed', @@ -53,10 +87,14 @@ export enum ActionTypes { FetchIndexesSucceeded = 'compass-indexes/regular-indexes/fetch-indexes-succeeded', FetchIndexesFailed = 'compass-indexes/regular-indexes/fetch-indexes-failed', - // Basically the same thing as CreateIndexActionTypes.IndexCreationSucceeded + // Basically the same thing as ActionTypes.IndexCreationSucceeded // in that it will remove the index, but it is for manually removing the row // of an index that failed FailedIndexRemoved = 'compass-indexes/regular-indexes/failed-index-removed', + + IndexCreationStarted = 'compass-indexes/create-index/index-creation-started', + IndexCreationSucceeded = 'compass-indexes/create-index/index-creation-succeeded', + IndexCreationFailed = 'compass-indexes/create-index/index-creation-failed', } type IndexesOpenedAction = { @@ -82,6 +120,22 @@ type FetchIndexesFailedAction = { error: string; }; +type IndexCreationStartedAction = { + type: ActionTypes.IndexCreationStarted; + inProgressIndex: InProgressIndex; +}; + +type IndexCreationSucceededAction = { + type: ActionTypes.IndexCreationSucceeded; + inProgressIndexId: string; +}; + +type IndexCreationFailedAction = { + type: ActionTypes.IndexCreationFailed; + inProgressIndexId: string; + error: string; +}; + type FailedIndexRemovedAction = { type: ActionTypes.FailedIndexRemoved; inProgressIndexId: string; @@ -171,7 +225,7 @@ export default function reducer( if ( isAction( action, - CreateIndexActionTypes.IndexCreationStarted + ActionTypes.IndexCreationStarted ) ) { // Add the new in-progress index to the in-progress indexes. @@ -196,7 +250,7 @@ export default function reducer( if ( isAction( action, - CreateIndexActionTypes.IndexCreationSucceeded + ActionTypes.IndexCreationSucceeded ) || isAction(action, ActionTypes.FailedIndexRemoved) ) { @@ -212,10 +266,7 @@ export default function reducer( } if ( - isAction( - action, - CreateIndexActionTypes.IndexCreationFailed - ) + isAction(action, ActionTypes.IndexCreationFailed) ) { const idx = state.inProgressIndexes.findIndex( (x) => x.id === action.inProgressIndexId @@ -323,6 +374,7 @@ const fetchIndexes = ( } }; }; + export const fetchRegularIndexes = (): IndexesThunkAction< Promise, FetchIndexesActions @@ -382,6 +434,89 @@ export const stopPollingRegularIndexes = (tabId: string) => { }; }; +const indexCreationStarted = ( + inProgressIndex: InProgressIndex +): IndexCreationStartedAction => ({ + type: ActionTypes.IndexCreationStarted, + inProgressIndex, +}); + +const indexCreationSucceeded = ( + inProgressIndexId: string +): IndexCreationSucceededAction => ({ + type: ActionTypes.IndexCreationSucceeded, + inProgressIndexId, +}); + +const indexCreationFailed = ( + inProgressIndexId: string, + error: string +): IndexCreationFailedAction => ({ + type: ActionTypes.IndexCreationFailed, + inProgressIndexId, + error, +}); + +export function createRegularIndex( + inProgressIndexId: string, + spec: CreateIndexSpec, + options: CreateIndexesOptions +): IndexesThunkAction< + Promise, + | IndexCreationStartedAction + | IndexCreationSucceededAction + | IndexCreationFailedAction +> { + return async ( + dispatch, + getState, + { track, dataService, connectionInfoRef } + ) => { + const ns = getState().namespace; + const inProgressIndex = prepareInProgressIndex(inProgressIndexId, { + ns, + name: options.name, + spec, + }); + + dispatch(indexCreationStarted(inProgressIndex)); + + const fieldsFromSpec = Object.entries(spec).map(([k, v]) => { + return { name: k, type: String(v) }; + }); + + const trackEvent = { + unique: options.unique, + ttl: typeof options.expireAfterSeconds !== 'undefined', + columnstore_index: hasColumnstoreIndex(fieldsFromSpec), + has_columnstore_projection: + // @ts-expect-error columnstoreProjection is not a part of + // CreateIndexesOptions yet. + typeof options.columnstoreProjection !== 'undefined', + has_wildcard_projection: + typeof options.wildcardProjection !== 'undefined', + custom_collation: typeof options.collation !== 'undefined', + geo: fieldsFromSpec.some(({ type }) => { + return type === '2dsphere'; + }), + atlas_search: false, + }; + + try { + await dataService.createIndex(ns, spec as IndexSpecification, options); + dispatch(indexCreationSucceeded(inProgressIndexId)); + track('Index Created', trackEvent, connectionInfoRef.current); + + // Start a new fetch so that the newly added index's details can be + // loaded. indexCreationSucceeded() will remove the in-progress one, but + // we still need the new info. + await dispatch(refreshRegularIndexes()); + } catch (err) { + dispatch(indexCreationFailed(inProgressIndexId, (err as Error).message)); + } + }; +} + const failedIndexRemoved = ( inProgressIndexId: string ): FailedIndexRemovedAction => ({ From fa9be310a5c47572062f14ff08bf61a85047053d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 07:51:40 +0000 Subject: [PATCH 27/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6286) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index e05c4d135d1..2dc60e204d3 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Sep 26, 2024 at 02:49 AM +Generated on Thu, Sep 26, 2024 at 07:51 AM ## Table of Contents From c7c05844ab1acbff2d36a3ec8ff443cb829e88e0 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 26 Sep 2024 13:25:21 +0200 Subject: [PATCH 28/97] fix(atlas-service): use metricsId for clusterId when doing automation agent requests (#6287) --- packages/atlas-service/src/atlas-service.ts | 8 ++++++-- packages/compass-web/scripts/start-electron-proxy.js | 4 +++- packages/compass-web/src/connection-storage.tsx | 10 +++++++--- packages/compass-web/webpack.config.js | 8 ++++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/atlas-service/src/atlas-service.ts b/packages/atlas-service/src/atlas-service.ts index 9069dde11ef..8abe8f2c03b 100644 --- a/packages/atlas-service/src/atlas-service.ts +++ b/packages/atlas-service/src/atlas-service.ts @@ -107,7 +107,11 @@ export class AtlasService { automationAgentFetch( atlasMetadata: Pick< AtlasClusterMetadata, - 'projectId' | 'clusterUniqueId' | 'regionalBaseUrl' | 'metricsType' + | 'projectId' + | 'clusterUniqueId' + | 'regionalBaseUrl' + | 'metricsType' + | 'metricsId' >, opType: OpType, opBody: Omit< @@ -118,7 +122,7 @@ export class AtlasService { const opBodyClusterId = atlasMetadata.metricsType === 'serverless' ? { serverlessId: atlasMetadata.clusterUniqueId } - : { clusterId: atlasMetadata.clusterUniqueId }; + : { clusterId: atlasMetadata.metricsId }; return makeAutomationAgentOpRequest( this.authenticatedFetch.bind(this), this.regionalizedCloudEndpoint(atlasMetadata), diff --git a/packages/compass-web/scripts/start-electron-proxy.js b/packages/compass-web/scripts/start-electron-proxy.js index f70b733fe29..dbbc4e2f1f0 100644 --- a/packages/compass-web/scripts/start-electron-proxy.js +++ b/packages/compass-web/scripts/start-electron-proxy.js @@ -4,11 +4,13 @@ const child_process = require('child_process'); const electronPath = require('electron'); function startElectronProxy() { - child_process.execFile( + const child = child_process.execFile( electronPath, [path.resolve(__dirname, 'electron-proxy.js')], { env: process.env } ); + child.stdout.pipe(process.stdout); + child.stderr.pipe(process.stderr); } module.exports = { startElectronProxy }; diff --git a/packages/compass-web/src/connection-storage.tsx b/packages/compass-web/src/connection-storage.tsx index 3ef497b78d4..213a22b919e 100644 --- a/packages/compass-web/src/connection-storage.tsx +++ b/packages/compass-web/src/connection-storage.tsx @@ -281,9 +281,13 @@ class AtlasCloudConnectionStorage }); } - loadAll(): Promise { - return (this.loadAllPromise ??= - this._loadAndNormalizeClusterDescriptionInfo()); + async loadAll(): Promise { + try { + return (this.loadAllPromise ??= + this._loadAndNormalizeClusterDescriptionInfo()); + } finally { + delete this.loadAllPromise; + } } } diff --git a/packages/compass-web/webpack.config.js b/packages/compass-web/webpack.config.js index d3e85b9c50b..d16c68303f5 100644 --- a/packages/compass-web/webpack.config.js +++ b/packages/compass-web/webpack.config.js @@ -180,6 +180,14 @@ module.exports = async (env, args) => { tls: localPolyfill('tls'), }, }, + plugins: [ + new webpack.DefinePlugin({ + // Matches the electron-proxy.js default value + 'process.env.COMPASS_WEB_HTTP_PROXY_CLOUD_CONFIG': JSON.stringify( + process.env.COMPASS_WEB_HTTP_PROXY_CLOUD_CONFIG ?? 'dev' + ), + }), + ], }); } From df47e20728978e1544dccaef9251273df0081782 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:32:07 +0000 Subject: [PATCH 29/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6288) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 2dc60e204d3..f95dda5216a 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Sep 26, 2024 at 07:51 AM +Generated on Thu, Sep 26, 2024 at 11:31 AM ## Table of Contents From 0a551902678d00334ede731628cb8811efd7e340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 26 Sep 2024 19:59:21 +0200 Subject: [PATCH 30/97] chore: add `CONTRIBUTING.md` note on using React Developer Tools (#6263) * Add instruction on how to use the React Developer Tools. * Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c76a149aeb3..a8ecdf711c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,7 +35,7 @@ This repository includes a few recommended plugins for your convenience: - ESLint extension highlights possible issues in your code following our common eslint configuration. - ANTLR4 grammar support extension helps to work with the `bson-transpilers` package that is implemented with the help of antlr (.g and .g4 files). -## Enabling DevTools +## Enabling Chrome DevTools To enable the Chrome DevTools for the Electron renderer processes, click "Settings" under "MongoDB Compass Dev Local" in the top menu (or press + ,) and click "Enable DevTools" followed by "Save", which will enable a "Toggle DevTools" item in the "View" top menu. Click this to toggle the DevTools panel (or press + + I). @@ -149,3 +149,7 @@ The root cause is native modules compiled for a different version of the runtime This means that if you e.g., start Compass application locally it will recompile all native modules to work in Electron runtime, if you would try to run tests for `@mongodb-js/connection-storage` library right after that, tests would fail due to `keytar` library not being compatible with Node.js environment that the tests are running in. If you run into this issue, make sure that native modules are rebuilt for whatever runtime you are planning to use at the moment. To help with that we provide two npm scripts: `npm run electron-rebuild` will recompile native modules to work with Electron and `npm run node-rebuild` will recompile them to work with Node.js. + +### The React Developer Tools extension is not working? + +To inspect the React component hierarchies in the Chrome DevTools panel, use the [React Developer Tools](https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi), which is already installed when running a local development build. For a reason, yet to be determined, you must reload ( + R) the DevTools window to see the "⚛️ Components" and "⚛️ Profiler" tabs. From 586b9373697d2564918e33b4e3719f2a8ba48fe9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 18:05:52 +0000 Subject: [PATCH 31/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6291) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index f95dda5216a..8c4be2ae085 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Sep 26, 2024 at 11:31 AM +Generated on Thu, Sep 26, 2024 at 06:05 PM ## Table of Contents From dc136947f311e2a2cb6eb4cd8c1310fdf6e5a34b Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 27 Sep 2024 10:31:36 +0200 Subject: [PATCH 32/97] fix(connection-form): vscode support & cleanup COMPASS-8098 (#6225) --- .../src/components/legacy-connections.tsx | 2 +- .../multiple-connections/sidebar.tsx | 2 +- .../compass/src/app/components/home.spec.tsx | 73 ---- .../advanced-options-tabs.spec.tsx | 6 +- .../advanced-options-tabs.tsx | 4 +- .../authentication-gssapi.spec.tsx | 6 +- .../authentication-gssapi.tsx | 4 +- .../authentication-oidc.spec.tsx | 3 +- .../authentication-oidc.tsx | 6 +- .../authentication-tab.spec.tsx | 18 +- .../authentication-tab/authentication-tab.tsx | 8 +- .../csfle-tab/csfle-tab.tsx | 4 +- .../proxy-and-ssh-tunnel-tab.tsx | 4 +- .../connection-form-actions.spec.tsx | 99 +++-- .../components/connection-form-actions.tsx | 113 +----- .../src/components/connection-form.spec.tsx | 102 ++--- .../src/components/connection-form.tsx | 384 ++++++------------ ...nces.tsx => use-connect-form-settings.tsx} | 25 +- .../src/hooks/use-connect-form.ts | 9 +- 19 files changed, 292 insertions(+), 580 deletions(-) rename packages/connection-form/src/hooks/{use-connect-form-preferences.tsx => use-connect-form-settings.tsx} (59%) diff --git a/packages/compass-connections/src/components/legacy-connections.tsx b/packages/compass-connections/src/components/legacy-connections.tsx index b47138d32bb..5da0cd144c2 100644 --- a/packages/compass-connections/src/components/legacy-connections.tsx +++ b/packages/compass-connections/src/components/legacy-connections.tsx @@ -191,8 +191,8 @@ function Connections({ onSaveClicked={saveEditedConnection} initialConnectionInfo={activeConnectionInfo} connectionErrorMessage={connectionErrorMessage} - preferences={connectionFormPreferences} openSettingsModal={openSettingsModal} + {...connectionFormPreferences} />
diff --git a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx index 3ad5238b987..3189961eda0 100644 --- a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx +++ b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx @@ -248,8 +248,8 @@ export function MultipleConnectionSidebar({ connectionErrorMessage={ connectionErrors[editingConnectionInfo.id]?.message } - preferences={formPreferences} openSettingsModal={openSettingsModal} + {...formPreferences} /> )} { - screen.getByTestId('home'); - }, - { timeout: 1_000_000 } - ); - } - afterEach(() => { cleanup(); sinon.restore(); }); describe('is not connected', function () { - it('renders the connect screen', function () { - renderHome(); - expect(() => screen.getByTestId('home')).to.throw; - expect(screen.getByTestId('connections-wrapper')).to.be.displayed; - }); - it('renders welcome modal and hides it', async function () { renderHome({ showWelcomeModal: true }); const modal = screen.getByTestId('welcome-modal'); @@ -137,58 +118,4 @@ describe('Home [Component]', function () { }); }); }); - - describe('is connected', function () { - describe('when UI status is complete', function () { - let dataServiceDisconnectedSpy: sinon.SinonSpy; - - let onDisconnectSpy: sinon.SinonSpy; - let hideCollectionSubMenuSpy: sinon.SinonSpy; - - beforeEach(async function () { - dataServiceDisconnectedSpy = sinon.fake.resolves(true); - hideCollectionSubMenuSpy = sinon.spy(); - onDisconnectSpy = sinon.spy(); - const dataService = { - ...createDataService(), - disconnect: dataServiceDisconnectedSpy, - addReauthenticationHandler: sinon.stub(), - }; - renderHome( - { - hideCollectionSubMenu: hideCollectionSubMenuSpy, - onDisconnect: onDisconnectSpy, - }, - [], - dataService - ); - await waitForConnect(); - }); - - afterEach(function () { - sinon.restore(); - }); - - it('renders only the workspaces', function () { - expect(screen.getByTestId('home')).to.be.displayed; - expect(() => screen.getByTestId('connections-wrapper')).to.throw; - }); - - it('on `app:disconnect`', async function () { - hadronIpc.ipcRenderer?.emit('app:disconnect'); - await waitFor(() => { - expect(onDisconnectSpy.called, 'it calls onDisconnect').to.be.true; - expect( - hideCollectionSubMenuSpy.called, - 'it calls hideCollectionSubMenu' - ).to.be.true; - }); - - await waitFor(() => { - expect(screen.queryByTestId('connections-wrapper')).to.be.visible; - }); - expect(dataServiceDisconnectedSpy.callCount).to.equal(1); - }); - }); - }); }); diff --git a/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.spec.tsx b/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.spec.tsx index 38f415c878d..4f33c2ba3df 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.spec.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.spec.tsx @@ -4,7 +4,7 @@ import { expect } from 'chai'; import sinon from 'sinon'; import AdvancedOptionsTabs from './advanced-options-tabs'; -import { ConnectionFormPreferencesContext } from '../../hooks/use-connect-form-preferences'; +import { ConnectionFormSettingsContext } from '../../hooks/use-connect-form-settings'; const testUrl = 'mongodb+srv://0ranges:p!neapp1es@localhost/?ssl=true'; @@ -110,7 +110,7 @@ describe('AdvancedOptionsTabs Component', function () { it('should not render CSFLE when its set to false in the preferences', function () { render( - + - + ); const csfleTabName = tabs.find((tab) => tab.id === 'csfle')?.name; diff --git a/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.tsx b/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.tsx index f247914e132..bb09a5c5c9a 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/advanced-options-tabs.tsx @@ -20,7 +20,7 @@ import type { UpdateConnectionFormField } from '../../hooks/use-connect-form'; import type { ConnectionFormError, TabId } from '../../utils/validation'; import { errorsByFieldTab } from '../../utils/validation'; import { defaultConnectionString } from '../../constants/default-connection'; -import { useConnectionFormPreference } from '../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../hooks/use-connect-form-settings'; const tabsStyles = css({ marginTop: spacing[2], @@ -72,7 +72,7 @@ function AdvancedOptionsTabs({ openSettingsModal?: (tab?: string) => void; }): React.ReactElement { const [activeTab, setActiveTab] = useState(0); - const showCSFLE = useConnectionFormPreference('showCSFLE'); + const showCSFLE = useConnectionFormSetting('showCSFLE'); const tabs: TabObject[] = [ { name: 'General', id: 'general', component: GeneralTab }, diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.spec.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.spec.tsx index a3e7cf69533..3c3eecb8dd6 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.spec.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.spec.tsx @@ -12,7 +12,7 @@ import ConnectionStringUrl from 'mongodb-connection-string-url'; import AuthenticationGssapi from './authentication-gssapi'; import type { ConnectionFormError } from '../../../utils/validation'; import type { UpdateConnectionFormField } from '../../../hooks/use-connect-form'; -import { ConnectionFormPreferencesContext } from '../../../hooks/use-connect-form-preferences'; +import { ConnectionFormSettingsContext } from '../../../hooks/use-connect-form-settings'; function renderComponent({ errors = [], @@ -24,7 +24,7 @@ function renderComponent({ updateConnectionFormField: UpdateConnectionFormField; }) { render( - - + ); } diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.tsx index 88c9feecb44..1d4d803011f 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-gssapi.tsx @@ -17,7 +17,7 @@ import { getConnectionStringUsername, parseAuthMechanismProperties, } from '../../../utils/connection-string-helpers'; -import { useConnectionFormPreference } from '../../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../../hooks/use-connect-form-settings'; const GSSAPI_CANONICALIZE_HOST_NAME_OPTIONS: Record< string, @@ -56,7 +56,7 @@ function AuthenticationGSSAPI({ const [showPassword, setShowPassword] = useState(false); - const showKerberosPasswordField = !!useConnectionFormPreference( + const showKerberosPasswordField = !!useConnectionFormSetting( 'showKerberosPasswordField' ); diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.spec.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.spec.tsx index 85a16e897cf..27bfda46557 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.spec.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.spec.tsx @@ -31,7 +31,8 @@ async function renderConnectionForm( onSaveAndConnectClicked={(connectionInfo) => { void connectSpy(connectionInfo.connectionOptions); }} - preferences={{ enableOidc: true, showOIDCDeviceAuthFlow }} + enableOidc={true} + showOIDCDeviceAuthFlow={showOIDCDeviceAuthFlow} onSaveClicked={() => { return Promise.resolve(); }} diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.tsx index 97a805c29fd..e4a8698593a 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-oidc.tsx @@ -16,7 +16,7 @@ import type { ConnectionFormError } from '../../../utils/validation'; import { errorMessageByFieldName } from '../../../utils/validation'; import { getConnectionStringUsername } from '../../../utils/connection-string-helpers'; import type { OIDCOptions } from '../../../utils/oidc-handler'; -import { useConnectionFormPreference } from '../../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../../hooks/use-connect-form-settings'; type AuthFlowType = NonNullable[number]; @@ -50,7 +50,7 @@ function AuthenticationOIDC({ const hasEnabledDeviceAuthFlow = !!connectionOptions.oidc?.allowedFlows?.includes?.('device-auth'); - const showOIDCDeviceAuthFlow = !!useConnectionFormPreference( + const showOIDCDeviceAuthFlow = !!useConnectionFormSetting( 'showOIDCDeviceAuthFlow' ); @@ -59,7 +59,7 @@ function AuthenticationOIDC({ [openSettingsModal] ); const showProxySettings = - useConnectionFormPreference('showProxySettings') && openSettingsModal; + useConnectionFormSetting('showProxySettings') && openSettingsModal; return ( <> diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.spec.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.spec.tsx index 6d317bf4733..cec0f60c13c 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.spec.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.spec.tsx @@ -8,26 +8,24 @@ import type { AuthMechanism } from 'mongodb'; import AuthenticationTab from './authentication-tab'; import type { ConnectionFormError } from '../../../utils/validation'; import type { UpdateConnectionFormField } from '../../../hooks/use-connect-form'; -import { ConnectionFormPreferencesContext } from '../../../hooks/use-connect-form-preferences'; -import type { ConnectionFormPreferences } from '../../../hooks/use-connect-form-preferences'; +import { ConnectionFormSettingsContext } from '../../../hooks/use-connect-form-settings'; +import type { ConnectionFormSettings } from '../../../hooks/use-connect-form-settings'; function renderComponent({ errors = [], connectionStringUrl = new ConnectionStringUrl('mongodb://localhost:27017'), - connectionFormPreferences = { + connectionFormSettings = { enableOidc: true, }, updateConnectionFormField, }: { connectionStringUrl?: ConnectionStringUrl; - connectionFormPreferences?: Partial; + connectionFormSettings?: Partial; errors?: ConnectionFormError[]; updateConnectionFormField: UpdateConnectionFormField; }) { render( - + - + ); } @@ -142,7 +140,7 @@ describe('AuthenticationTab Component', function () { it('should not render OIDC auth when its set to false in the preferences', function () { renderComponent({ - connectionFormPreferences: { showOIDCAuth: false }, + connectionFormSettings: { showOIDCAuth: false }, updateConnectionFormField: updateConnectionFormFieldSpy, }); @@ -155,7 +153,7 @@ describe('AuthenticationTab Component', function () { it('should not render Kerberos auth when its set to false in the preferences', function () { renderComponent({ - connectionFormPreferences: { showKerberosAuth: false }, + connectionFormSettings: { showKerberosAuth: false }, updateConnectionFormField: updateConnectionFormFieldSpy, }); diff --git a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.tsx b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.tsx index a3b63287974..7a8b5343cd7 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/authentication-tab/authentication-tab.tsx @@ -20,7 +20,7 @@ import AuthenticationGSSAPI from './authentication-gssapi'; import AuthenticationPlain from './authentication-plain'; import AuthenticationAWS from './authentication-aws'; import AuthenticationOidc from './authentication-oidc'; -import { useConnectionFormPreference } from '../../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../../hooks/use-connect-form-settings'; interface TabOption { id: AuthMechanism; @@ -100,9 +100,9 @@ function AuthenticationTab({ openSettingsModal?: (tab?: string) => void; }): React.ReactElement { // enableOIDC is the feature flag, showOIDC is the connection form preference. - const enableOIDC = !!useConnectionFormPreference('enableOidc'); - const showOIDC = useConnectionFormPreference('showOIDCAuth'); - const showKerberos = useConnectionFormPreference('showKerberosAuth'); + const enableOIDC = !!useConnectionFormSetting('enableOidc'); + const showOIDC = useConnectionFormSetting('showOIDCAuth'); + const showKerberos = useConnectionFormSetting('showKerberosAuth'); const enabledAuthOptions = useMemo( () => options.filter((option) => { diff --git a/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.tsx b/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.tsx index 81372d65138..9eeb1829a15 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.tsx @@ -35,7 +35,7 @@ import type { KMSProviderName, } from '../../../utils/csfle-kms-fields'; import { KMSProviderFields } from '../../../utils/csfle-kms-fields'; -import { useConnectionFormPreference } from '../../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../../hooks/use-connect-form-settings'; const kmsProviderComponentWrapperStyles = css({ paddingLeft: spacing[3], @@ -96,7 +96,7 @@ function CSFLETab({ const autoEncryptionOptions = connectionOptions.fleOptions?.autoEncryption ?? {}; - const enableSchemaMapDebugFlag = useConnectionFormPreference( + const enableSchemaMapDebugFlag = useConnectionFormSetting( 'enableDebugUseCsfleSchemaMap' ); diff --git a/packages/connection-form/src/components/advanced-options-tabs/ssh-tunnel-tab/proxy-and-ssh-tunnel-tab.tsx b/packages/connection-form/src/components/advanced-options-tabs/ssh-tunnel-tab/proxy-and-ssh-tunnel-tab.tsx index 62ea137f0fa..ec8a0782d0c 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/ssh-tunnel-tab/proxy-and-ssh-tunnel-tab.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/ssh-tunnel-tab/proxy-and-ssh-tunnel-tab.tsx @@ -22,7 +22,7 @@ import SshTunnelPassword from './ssh-tunnel-password'; import Socks from './socks'; import { AppProxy } from './app-proxy'; import type { ConnectionFormError } from '../../../utils/validation'; -import { useConnectionFormPreference } from '../../../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../../../hooks/use-connect-form-settings'; interface TabOption { id: string; @@ -127,7 +127,7 @@ function ProxyAndSshTunnelTab({ ); const options = [...tabOptions]; - const showProxySettings = useConnectionFormPreference('showProxySettings'); + const showProxySettings = useConnectionFormSetting('showProxySettings'); if (showProxySettings) { options.push({ title: 'Application-level Proxy', diff --git a/packages/connection-form/src/components/connection-form-actions.spec.tsx b/packages/connection-form/src/components/connection-form-actions.spec.tsx index 3fb75a3ab22..03434261762 100644 --- a/packages/connection-form/src/components/connection-form-actions.spec.tsx +++ b/packages/connection-form/src/components/connection-form-actions.spec.tsx @@ -1,12 +1,54 @@ import React from 'react'; -import { render, screen, fireEvent } from '@mongodb-js/testing-library-compass'; +import { render, screen, userEvent } from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; import sinon from 'sinon'; import { ConnectionFormModalActions } from './connection-form-actions'; describe('', function () { + it('should show warnings', function () { + render( + undefined} + onSaveAndConnect={() => undefined} + > + ); + expect(screen.getByText('Warning!')).to.be.visible; + }); + + it('should show errors', function () { + render( + undefined} + onSaveAndConnect={() => undefined} + > + ); + expect(screen.getByText('Error!')).to.be.visible; + }); + describe('Connect Button', function () { + it('should call onSaveAndConnect function', function () { + const onSaveAndConnectSpy = sinon.spy(); + render( + undefined} + onSaveAndConnect={onSaveAndConnectSpy} + > + ); + const connectButton = screen.getByRole('button', { name: 'Connect' }); + userEvent.click(connectButton); + + expect(onSaveAndConnectSpy).to.have.been.calledOnce; + }); + }); + + describe('Save Button', function () { it('should call onSave function', function () { const onSaveSpy = sinon.spy(); render( @@ -17,38 +59,24 @@ describe('', function () { onSaveAndConnect={() => undefined} > ); - const saveButton = screen.getByText('Save'); - fireEvent( - saveButton, - new MouseEvent('click', { - bubbles: true, - cancelable: true, - }) - ); + const saveButton = screen.getByRole('button', { name: 'Save' }); + userEvent.click(saveButton); expect(onSaveSpy).to.have.been.calledOnce; }); - it('should call onSaveAndConnect function', function () { - const onSaveAndConnectSpy = sinon.spy(); + it('should hide "save" button if there is no callback', function () { render( undefined} - onSaveAndConnect={onSaveAndConnectSpy} + onSaveAndConnect={() => undefined} > ); - const saveButton = screen.getByText('Connect'); - fireEvent( - saveButton, - new MouseEvent('click', { - bubbles: true, - cancelable: true, - }) - ); - expect(onSaveAndConnectSpy).to.have.been.calledOnce; + expect(screen.queryByRole('button', { name: 'Save' })).to.not.exist; }); + }); + describe('Cancel Button', function () { it('should call onCancel function', function () { const onCancelSpy = sinon.spy(); render( @@ -60,39 +88,22 @@ describe('', function () { onCancel={onCancelSpy} > ); - const saveButton = screen.getByText('Cancel'); - fireEvent( - saveButton, - new MouseEvent('click', { - bubbles: true, - cancelable: true, - }) - ); + const cancelButton = screen.getByRole('button', { name: 'Cancel' }); + userEvent.click(cancelButton); + expect(onCancelSpy).to.have.been.calledOnce; }); - it('should show warnings', function () { + it('should hide onCancel button if there is no callback', function () { render( undefined} - onSaveAndConnect={() => undefined} - > - ); - expect(screen.getByText('Warning!')).to.be.visible; - }); - - it('should show errors', function () { - render( - undefined} onSaveAndConnect={() => undefined} > ); - expect(screen.getByText('Error!')).to.be.visible; + expect(screen.queryByRole('button', { name: 'Cancel' })).to.not.exist; }); }); }); diff --git a/packages/connection-form/src/components/connection-form-actions.tsx b/packages/connection-form/src/components/connection-form-actions.tsx index dd32358a213..86de081c126 100644 --- a/packages/connection-form/src/components/connection-form-actions.tsx +++ b/packages/connection-form/src/components/connection-form-actions.tsx @@ -12,7 +12,7 @@ import type { ConnectionFormError, ConnectionFormWarning, } from '../utils/validation'; -import { useConnectionFormPreference } from '../hooks/use-connect-form-preferences'; +import { useConnectionFormSetting } from '../hooks/use-connect-form-settings'; const formActionStyles = css({ paddingLeft: spacing[4], @@ -38,99 +38,15 @@ const saveAndConnectStyles = css({ justifyContent: 'flex-end', }); -export function LegacyConnectionFormActions({ - errors, - warnings, - onConnectClicked, - onSaveClicked, - onSaveAndConnectClicked, - saveButton, - saveAndConnectButton, -}: { - errors: ConnectionFormError[]; - warnings: ConnectionFormWarning[]; - onConnectClicked: () => void; - onSaveClicked: () => void; - onSaveAndConnectClicked: () => void; - saveButton: 'enabled' | 'disabled' | 'hidden'; - saveAndConnectButton: 'enabled' | 'disabled' | 'hidden'; -}): React.ReactElement { - const showFavoriteActions = useConnectionFormPreference( - 'showFavoriteActions' - ); - - return ( -
- {warnings.length > 0 && ( -
- warning.message)} - /> -
- )} - {errors.length > 0 && ( -
- error.message)} - /> -
- )} -
- {showFavoriteActions && ( - <> - {saveButton !== 'hidden' && ( - - )} - - {saveAndConnectButton !== 'hidden' && ( -
- -
- )} - - )} - - -
-
- ); -} - export type ConnectionFormModalActionsProps = { errors: ConnectionFormError[]; warnings: ConnectionFormWarning[]; onCancel?(): void; - onSave(): void; + onSave?(): void; onSaveAndConnect(): void; }; -// TODO(COMPASS-8098): Make sure these work for VSCode, for example add: -// saveButton: 'enabled' | 'disabled' | 'hidden'; -// saveAndConnectButton: 'enabled' | 'disabled' | 'hidden'; -// cancelButton: 'enabled' | 'disabled' | 'hidden'; export function ConnectionFormModalActions({ errors, warnings, @@ -138,6 +54,7 @@ export function ConnectionFormModalActions({ onSave, onSaveAndConnect, }: ConnectionFormModalActionsProps): React.ReactElement { + const saveAndConnectLabel = useConnectionFormSetting('saveAndConnectLabel'); return (
{warnings.length > 0 && ( @@ -168,23 +85,25 @@ export function ConnectionFormModalActions({ )} -
- -
+ {onSave && ( +
+ +
+ )}
diff --git a/packages/connection-form/src/components/connection-form.spec.tsx b/packages/connection-form/src/components/connection-form.spec.tsx index e915862dc51..0620a892e00 100644 --- a/packages/connection-form/src/components/connection-form.spec.tsx +++ b/packages/connection-form/src/components/connection-form.spec.tsx @@ -11,7 +11,6 @@ import { import { expect } from 'chai'; import type { PreferencesAccess } from 'compass-preferences-model'; import { createSandboxFromDefaultPreferences } from 'compass-preferences-model'; -import { PreferencesProvider } from 'compass-preferences-model/provider'; import ConnectionForm from './connection-form'; import type { ConnectionFormProps } from './connection-form'; import Sinon from 'sinon'; @@ -36,19 +35,16 @@ describe('ConnectionForm Component', function () { let preferences: PreferencesAccess; function renderForm(props: Partial = {}) { return render( - - - + ); } @@ -73,7 +69,7 @@ describe('ConnectionForm Component', function () { it('should render the connection string textbox', function () { renderForm(); - const textArea = screen.getByTestId('connectionString'); + const textArea = screen.getByTestId('connectionString'); expect(textArea).to.have.text('mongodb://pineapple:*****@localhost:27019/'); }); @@ -97,10 +93,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the off state for default connection', function () { renderForm({ initialConnectionInfo: DEFAULT_CONNECTION, - preferences: { - protectConnectionStringsForNewConnections: true, - protectConnectionStrings: false, - }, + protectConnectionStringsForNewConnections: true, + protectConnectionStrings: false, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to @@ -114,10 +108,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the off state for existing connection', function () { renderForm({ - preferences: { - protectConnectionStringsForNewConnections: true, - protectConnectionStrings: false, - }, + protectConnectionStringsForNewConnections: true, + protectConnectionStrings: false, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .not.be.null; @@ -136,10 +128,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the off state for default connection', function () { renderForm({ initialConnectionInfo: DEFAULT_CONNECTION, - preferences: { - protectConnectionStringsForNewConnections: true, - protectConnectionStrings: true, - }, + protectConnectionStringsForNewConnections: true, + protectConnectionStrings: true, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .not.be.null; @@ -152,10 +142,8 @@ describe('ConnectionForm Component', function () { it('should not render the toggle button for existing connection', function () { renderForm({ - preferences: { - protectConnectionStringsForNewConnections: true, - protectConnectionStrings: true, - }, + protectConnectionStringsForNewConnections: true, + protectConnectionStrings: true, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .be.null; @@ -174,10 +162,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the on state for default connection', function () { renderForm({ initialConnectionInfo: DEFAULT_CONNECTION, - preferences: { - protectConnectionStringsForNewConnections: false, - protectConnectionStrings: false, - }, + protectConnectionStringsForNewConnections: false, + protectConnectionStrings: false, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .not.be.null; @@ -190,10 +176,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the off state for existing connection', function () { renderForm({ - preferences: { - protectConnectionStringsForNewConnections: false, - protectConnectionStrings: false, - }, + protectConnectionStringsForNewConnections: false, + protectConnectionStrings: false, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .not.be.null; @@ -212,10 +196,8 @@ describe('ConnectionForm Component', function () { it('should render the toggle button in the on state for default connection', function () { renderForm({ initialConnectionInfo: DEFAULT_CONNECTION, - preferences: { - protectConnectionStringsForNewConnections: false, - protectConnectionStrings: true, - }, + protectConnectionStringsForNewConnections: false, + protectConnectionStrings: true, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .not.be.null; @@ -228,10 +210,8 @@ describe('ConnectionForm Component', function () { it('should not render the toggle button for existing connection', function () { renderForm({ - preferences: { - protectConnectionStringsForNewConnections: false, - protectConnectionStrings: true, - }, + protectConnectionStringsForNewConnections: false, + protectConnectionStrings: true, }); expect(screen.queryByTestId('toggle-edit-connection-string')).to .be.null; @@ -246,9 +226,7 @@ describe('ConnectionForm Component', function () { context.skip('when preferences.showFavoriteActions === false', function () { it('should not render the favorite button', function () { renderForm({ - preferences: { - showFavoriteActions: false, - }, + showFavoriteActions: false, }); expect(screen.queryByText(favoriteText)).to.not.exist; }); @@ -388,10 +366,8 @@ describe('ConnectionForm Component', function () { }); renderForm({ initialConnectionInfo: DEFAULT_CONNECTION, - preferences: { - protectConnectionStringsForNewConnections: false, - protectConnectionStrings: false, - }, + protectConnectionStringsForNewConnections: false, + protectConnectionStrings: false, onCancel, }); }); @@ -417,9 +393,8 @@ describe('ConnectionForm Component', function () { describe('name input', function () { it('should sync with the href of the connection string unless it has been edited', async function () { - const connectionString = screen.getByTestId( - 'connectionString' - ) as HTMLInputElement; + const connectionString = + screen.getByTestId('connectionString'); userEvent.clear(connectionString); await waitFor(() => expect(connectionString.value).to.equal('')); @@ -430,19 +405,18 @@ describe('ConnectionForm Component', function () { expect(connectionString.value).to.equal('mongodb://myserver:27017/') ); - const personalizationName = screen.getByTestId( + const personalizationName = screen.getByTestId( 'personalization-name-input' - ) as HTMLInputElement; + ); expect(personalizationName.value).to.equal('myserver:27017'); }); it('should not sync with the href of the connection string when it has been edited', async function () { - const connectionString = screen.getByTestId( - 'connectionString' - ) as HTMLInputElement; - const personalizationName = screen.getByTestId( + const connectionString = + screen.getByTestId('connectionString'); + const personalizationName = screen.getByTestId( 'personalization-name-input' - ) as HTMLInputElement; + ); userEvent.clear(personalizationName); userEvent.clear(connectionString); diff --git a/packages/connection-form/src/components/connection-form.tsx b/packages/connection-form/src/components/connection-form.tsx index a0896967c72..ff5b278edc4 100644 --- a/packages/connection-form/src/components/connection-form.tsx +++ b/packages/connection-form/src/components/connection-form.tsx @@ -8,10 +8,6 @@ import { BannerVariant, Checkbox, Description, - FavoriteIcon, - Icon, - IconButton, - Overline, H3, spacing, Select, @@ -25,25 +21,20 @@ import { useDarkMode, } from '@mongodb-js/compass-components'; import { cloneDeep } from 'lodash'; -import { usePreference } from 'compass-preferences-model/provider'; import ConnectionStringInput from './connection-string-input'; import AdvancedConnectionOptions from './advanced-connection-options'; -import { - ConnectionFormModalActions, - LegacyConnectionFormActions, -} from './connection-form-actions'; +import { ConnectionFormModalActions } from './connection-form-actions'; import { useConnectForm, type ConnectionPersonalizationOptions, type UpdateConnectionFormField, } from '../hooks/use-connect-form'; import { validateConnectionOptionsErrors } from '../utils/validation'; -import SaveConnectionModal from './save-connection-modal'; -import type { ConnectionFormPreferences } from '../hooks/use-connect-form-preferences'; +import type { ConnectionFormSettings } from '../hooks/use-connect-form-settings'; import { - ConnectionFormPreferencesContext, - useConnectionFormPreference, -} from '../hooks/use-connect-form-preferences'; + ConnectionFormSettingsContext, + useConnectionFormSetting, +} from '../hooks/use-connect-form-settings'; import { useConnectionColor } from '../hooks/use-connection-color'; import FormHelp from './form-help/form-help'; @@ -125,22 +116,6 @@ const formFooterBorderLightModeStyles = css({ borderTop: `1px solid ${palette.gray.light2}`, }); -const favoriteButtonStyles = css({ - position: 'absolute', - top: -spacing[400], - right: 0, - cursor: 'pointer', - width: spacing[7], - height: spacing[7], -}); - -const favoriteButtonContentStyles = css({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', -}); - const headingWithHiddenButtonStyles = css({ button: { visibility: 'hidden', @@ -152,14 +127,6 @@ const headingWithHiddenButtonStyles = css({ }, }); -const editFavoriteButtonStyles = css({ - verticalAlign: 'text-top', -}); - -const favoriteButtonLabelStyles = css({ - paddingTop: spacing[1], -}); - const connectionStringErrorStyles = css({ marginBottom: spacing[3], }); @@ -243,9 +210,7 @@ function ConnectionPersonalizationForm({ updateConnectionFormField, personalizationOptions, }: ConnectionPersonalizationFormProps): React.ReactElement { - const showFavoriteActions = useConnectionFormPreference( - 'showFavoriteActions' - ); + const showFavoriteActions = useConnectionFormSetting('showFavoriteActions'); const onChangeName = useCallback( (ev: React.ChangeEvent) => { @@ -334,37 +299,32 @@ function ConnectionPersonalizationForm({ ); } -type ConnectionFormPropsWithoutPreferences = { +type ConnectionFormPropsWithoutSettings = { darkMode?: boolean; initialConnectionInfo: ConnectionInfo; connectionErrorMessage?: string | null; onCancel?: () => void; onConnectClicked?: (connectionInfo: ConnectionInfo) => void; onSaveAndConnectClicked?: (connectionInfo: ConnectionInfo) => void; - onSaveClicked: (connectionInfo: ConnectionInfo) => Promise; + onSaveClicked?: (connectionInfo: ConnectionInfo) => Promise; onAdvancedOptionsToggle?: (newState: boolean) => void; openSettingsModal?: (tab?: string) => void; }; -export type ConnectionFormProps = ConnectionFormPropsWithoutPreferences & { - preferences?: Partial; -}; +export type ConnectionFormProps = ConnectionFormPropsWithoutSettings & + Partial; function ConnectionForm({ initialConnectionInfo, connectionErrorMessage, - onConnectClicked, onSaveAndConnectClicked, onSaveClicked, onCancel, onAdvancedOptionsToggle, openSettingsModal, -}: ConnectionFormPropsWithoutPreferences): React.ReactElement { +}: ConnectionFormPropsWithoutSettings): React.ReactElement { const [advancedOpen, setAdvancedOpen] = useState(false); const isDarkMode = useDarkMode(); - const isMultiConnectionEnabled = usePreference( - 'enableMultipleConnectionSystem' - ); const onAdvancedChange = useCallback( (newState: boolean) => { @@ -377,7 +337,6 @@ function ConnectionForm({ const [ { enableEditingConnectionString: _enableEditingConnectionString, - isDirty, errors, warnings: _warnings, connectionOptions, @@ -387,17 +346,13 @@ function ConnectionForm({ { setEnableEditingConnectionString, updateConnectionFormField, setErrors }, ] = useConnectForm(initialConnectionInfo, connectionErrorMessage); - type SaveConnectionModalState = 'hidden' | 'save' | 'saveAndConnect'; - - const [saveConnectionModal, setSaveConnectionModal] = - useState('hidden'); const protectConnectionStrings = - !!useConnectionFormPreference('protectConnectionStrings') && + !!useConnectionFormSetting('protectConnectionStrings') && !allowEditingIfProtected; const enableEditingConnectionString = _enableEditingConnectionString && !protectConnectionStrings; - const forceConnectionOptions = useConnectionFormPreference( + const forceConnectionOptions = useConnectionFormSetting( 'forceConnectionOptions' ); const warnings = useMemo(() => { @@ -419,75 +374,43 @@ function ConnectionForm({ ); const getConnectionInfoToSave = useCallback( - (favoriteInfo?: ConnectionFavoriteOptions): ConnectionInfo => { - if (isMultiConnectionEnabled) { - return { - ...cloneDeep(initialConnectionInfo), - connectionOptions: cloneDeep(connectionOptions), - savedConnectionType: personalizationOptions.isFavorite - ? 'favorite' - : 'recent', - favorite: { - ...(favoriteInfo || {}), - name: personalizationOptions.name, - color: personalizationOptions.color, - }, - }; - } else { - return { - ...cloneDeep(initialConnectionInfo), - connectionOptions: cloneDeep(connectionOptions), - savedConnectionType: 'favorite', - favorite: { - name: '', - color: undefined, - ...favoriteInfo, - }, - }; - } - }, - [ - isMultiConnectionEnabled, - initialConnectionInfo, - connectionOptions, - personalizationOptions, - ] - ); - const onSubmitForm = useCallback( - (action: 'saveAndConnect' | 'connect') => { - // TODO(COMPASS-7906): cleanup - const updatedConnectionOptions = cloneDeep(connectionOptions); - // TODO: this method throws on malformed connection strings instead of - // returning errors - const formErrors = validateConnectionOptionsErrors( - updatedConnectionOptions - ); - if (formErrors.length) { - setErrors(formErrors); - return; - } - if (action === 'saveAndConnect') { - onSaveAndConnectClicked?.({ - ...initialConnectionInfo, - ...getConnectionInfoToSave(), - connectionOptions: updatedConnectionOptions, - }); - } else { - onConnectClicked?.({ - ...initialConnectionInfo, - connectionOptions: updatedConnectionOptions, - }); - } - }, - [ - initialConnectionInfo, - onSaveAndConnectClicked, - onConnectClicked, - setErrors, - connectionOptions, - getConnectionInfoToSave, - ] + (favoriteInfo?: ConnectionFavoriteOptions): ConnectionInfo => ({ + ...cloneDeep(initialConnectionInfo), + connectionOptions: cloneDeep(connectionOptions), + savedConnectionType: personalizationOptions.isFavorite + ? 'favorite' + : 'recent', + favorite: { + ...(favoriteInfo || {}), + name: personalizationOptions.name, + color: personalizationOptions.color, + }, + }), + [initialConnectionInfo, connectionOptions, personalizationOptions] ); + const onSubmitForm = useCallback(() => { + const updatedConnectionOptions = cloneDeep(connectionOptions); + // TODO: this method throws on malformed connection strings instead of + // returning errors + const formErrors = validateConnectionOptionsErrors( + updatedConnectionOptions + ); + if (formErrors.length) { + setErrors(formErrors); + return; + } + onSaveAndConnectClicked?.({ + ...initialConnectionInfo, + ...getConnectionInfoToSave(), + connectionOptions: updatedConnectionOptions, + }); + }, [ + initialConnectionInfo, + onSaveAndConnectClicked, + setErrors, + connectionOptions, + getConnectionInfoToSave, + ]); const callOnSaveConnectionClickedAndStoreErrors = useCallback( async (connectionInfo: ConnectionInfo): Promise => { @@ -507,13 +430,11 @@ function ConnectionForm({ [onSaveClicked, setErrors] ); - const showFavoriteActions = useConnectionFormPreference( - 'showFavoriteActions' + const showPersonalisationForm = useConnectionFormSetting( + 'showPersonalisationForm' ); - const showFooterBorder = !!isMultiConnectionEnabled; - - const showHelpCardsInForm = !!isMultiConnectionEnabled; + const showHelpCardsInForm = useConnectionFormSetting('showHelpCardsInForm'); return ( @@ -522,7 +443,7 @@ function ConnectionForm({ onSubmit={(e) => { // Prevent default html page refresh. e.preventDefault(); - onSubmitForm(isMultiConnectionEnabled ? 'saveAndConnect' : 'connect'); + onSubmitForm(); }} // Prevent default html tooltip popups. noValidate @@ -531,47 +452,10 @@ function ConnectionForm({

{initialConnectionInfo.favorite?.name ?? 'New Connection'} - {!isMultiConnectionEnabled && showFavoriteActions && ( - { - setSaveConnectionModal('save'); - }} - > - - - )}

- {!isMultiConnectionEnabled && 'Connect to a MongoDB deployment'} - {isMultiConnectionEnabled && 'Manage your connection settings'} + Manage your connection settings - - {!isMultiConnectionEnabled && showFavoriteActions && ( - { - setSaveConnectionModal('save'); - }} - > -
- - - FAVORITE - -
-
- )}
@@ -583,11 +467,7 @@ function ConnectionForm({ setEnableEditingConnectionString={ setEnableEditingConnectionString } - onSubmit={() => - onSubmitForm( - isMultiConnectionEnabled ? 'saveAndConnect' : 'connect' - ) - } + onSubmit={onSubmitForm} updateConnectionFormField={updateConnectionFormField} protectConnectionStrings={protectConnectionStrings} /> @@ -599,7 +479,7 @@ function ConnectionForm({ {connectionStringInvalidError.message}
)} - {isMultiConnectionEnabled && ( + {showPersonalisationForm && (
- {isMultiConnectionEnabled && ( - + void callOnSaveConnectionClickedAndStoreErrors?.( getConnectionInfoToSave() - ) - } - onSaveAndConnect={() => onSubmitForm('saveAndConnect')} - /> - )} - {!isMultiConnectionEnabled && ( - { - if (initialConnectionInfo.favorite) { - void callOnSaveConnectionClickedAndStoreErrors({ - ...cloneDeep(initialConnectionInfo), - connectionOptions: cloneDeep(connectionOptions), - }); - } else { - setSaveConnectionModal('save'); - } - }} - onSaveAndConnectClicked={() => { - setSaveConnectionModal('saveAndConnect'); - }} - onConnectClicked={() => onSubmitForm('connect')} - /> - )} + )) + } + onSaveAndConnect={onSubmitForm} + />
- - {showFavoriteActions && ( - { - setSaveConnectionModal('hidden'); - }} - onSaveClicked={async (favoriteInfo: ConnectionFavoriteOptions) => { - setSaveConnectionModal('hidden'); - - const connectionInfo = getConnectionInfoToSave(favoriteInfo); - await callOnSaveConnectionClickedAndStoreErrors(connectionInfo); - - if (saveConnectionModal === 'saveAndConnect') { - // Connect to the newly created favorite - onSubmitForm('connect'); - } - }} - key={initialConnectionInfo.id} - initialFavoriteInfo={initialConnectionInfo.favorite} - /> - )} ); } -const ConnectionFormWithPreferences = ( - props: ConnectionFormPropsWithoutPreferences & { - preferences?: Partial; - } -) => { - const { preferences, ...rest } = props; +const ConnectionFormWithSettings: React.FunctionComponent< + ConnectionFormPropsWithoutSettings & Partial +> = ({ + showFavoriteActions, + showHelpCardsInForm, + showPersonalisationForm, + protectConnectionStrings, + forceConnectionOptions, + showKerberosPasswordField, + showOIDCDeviceAuthFlow, + enableOidc, + enableDebugUseCsfleSchemaMap, + protectConnectionStringsForNewConnections, + showOIDCAuth, + showKerberosAuth, + showCSFLE, + showProxySettings, + saveAndConnectLabel, + ...rest +}) => { + const value = useMemo( + () => ({ + showFavoriteActions, + showHelpCardsInForm, + showPersonalisationForm, + protectConnectionStrings, + forceConnectionOptions, + showKerberosPasswordField, + showOIDCDeviceAuthFlow, + enableOidc, + enableDebugUseCsfleSchemaMap, + protectConnectionStringsForNewConnections, + showOIDCAuth, + showKerberosAuth, + showCSFLE, + showProxySettings, + saveAndConnectLabel, + }), + [ + showFavoriteActions, + showHelpCardsInForm, + showPersonalisationForm, + protectConnectionStrings, + forceConnectionOptions, + showKerberosPasswordField, + showOIDCDeviceAuthFlow, + enableOidc, + enableDebugUseCsfleSchemaMap, + protectConnectionStringsForNewConnections, + showOIDCAuth, + showKerberosAuth, + showCSFLE, + showProxySettings, + saveAndConnectLabel, + ] + ); return ( - + - + ); }; -export default ConnectionFormWithPreferences; +export default ConnectionFormWithSettings; diff --git a/packages/connection-form/src/hooks/use-connect-form-preferences.tsx b/packages/connection-form/src/hooks/use-connect-form-settings.tsx similarity index 59% rename from packages/connection-form/src/hooks/use-connect-form-preferences.tsx rename to packages/connection-form/src/hooks/use-connect-form-settings.tsx index 0a2367841bf..c0803853253 100644 --- a/packages/connection-form/src/hooks/use-connect-form-preferences.tsx +++ b/packages/connection-form/src/hooks/use-connect-form-settings.tsx @@ -1,8 +1,9 @@ import { createContext, useContext } from 'react'; -// Not all of these preference map to Compass preferences. -export type ConnectionFormPreferences = { +export type ConnectionFormSettings = { showFavoriteActions: boolean; + showHelpCardsInForm: boolean; + showPersonalisationForm: boolean; protectConnectionStrings: boolean; forceConnectionOptions: [key: string, value: string][]; showKerberosPasswordField: boolean; @@ -14,10 +15,13 @@ export type ConnectionFormPreferences = { showKerberosAuth: boolean; showCSFLE: boolean; showProxySettings: boolean; + saveAndConnectLabel: string; }; -const defaultPreferences = { +const defaultSettings = { showFavoriteActions: true, + showPersonalisationForm: true, + showHelpCardsInForm: true, protectConnectionStrings: false, forceConnectionOptions: [], showKerberosPasswordField: false, @@ -29,18 +33,19 @@ const defaultPreferences = { showKerberosAuth: true, showCSFLE: true, showProxySettings: true, + saveAndConnectLabel: 'Connect', }; -export const ConnectionFormPreferencesContext = createContext< - Partial +export const ConnectionFormSettingsContext = createContext< + Partial >({}); -export const useConnectionFormPreference = < - K extends keyof ConnectionFormPreferences +export const useConnectionFormSetting = < + K extends keyof ConnectionFormSettings >( preferenceKey: K -): ConnectionFormPreferences[K] => { - const preferences = useContext(ConnectionFormPreferencesContext); +): ConnectionFormSettings[K] => { + const settings = useContext(ConnectionFormSettingsContext); - return preferences[preferenceKey] ?? defaultPreferences[preferenceKey]; + return settings[preferenceKey] ?? defaultSettings[preferenceKey]; }; diff --git a/packages/connection-form/src/hooks/use-connect-form.ts b/packages/connection-form/src/hooks/use-connect-form.ts index 6df2cad09d5..117e546265b 100644 --- a/packages/connection-form/src/hooks/use-connect-form.ts +++ b/packages/connection-form/src/hooks/use-connect-form.ts @@ -67,7 +67,7 @@ import { import type { UpdateOIDCAction } from '../utils/oidc-handler'; import { setAppNameParamIfMissing } from '../utils/set-app-name-if-missing'; import { applyForceConnectionOptions } from '../utils/force-connection-options'; -import { useConnectionFormPreference } from './use-connect-form-preferences'; +import { useConnectionFormSetting } from './use-connect-form-settings'; import ConnectionString from 'mongodb-connection-string-url'; export type ConnectionPersonalizationOptions = { @@ -723,9 +723,8 @@ export function useConnectForm( const initialFormState: ConnectFormState = { ...derivedFormState, enableEditingConnectionString: - !useConnectionFormPreference( - 'protectConnectionStringsForNewConnections' - ) && derivedFormState.enableEditingConnectionString, + !useConnectionFormSetting('protectConnectionStringsForNewConnections') && + derivedFormState.enableEditingConnectionString, }; const [state, dispatch] = useReducer(connectFormReducer, initialFormState); @@ -802,7 +801,7 @@ function setInitialState({ setErrors: (errors: ConnectionFormError[]) => void; dispatch: Dispatch; }) { - const protectConnectionStringsForNewConnections = useConnectionFormPreference( + const protectConnectionStringsForNewConnections = useConnectionFormSetting( 'protectConnectionStringsForNewConnections' ); useEffect(() => { From c34e124323a5ebe5b6f47c78ef58eabefbfabb1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 08:38:17 +0000 Subject: [PATCH 33/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6292) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 6aae68e49c1..e06548e5b02 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Thu Sep 26 2024. +This document was automatically generated on Fri Sep 27 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 8c4be2ae085..ea6ba770e01 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Sep 26, 2024 at 06:05 PM +Generated on Fri, Sep 27, 2024 at 08:38 AM ## Table of Contents From 7bb0ec47c90909273d5cf0a63a39f12fc31e8d42 Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Fri, 27 Sep 2024 08:55:14 -0400 Subject: [PATCH 34/97] chore(release): bump package versions (#6255) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/testing-library-compass/package.json | 2 +- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 1662 ++++++++--------- packages/atlas-service/package.json | 18 +- packages/collection-model/package.json | 4 +- packages/compass-aggregations/package.json | 42 +- packages/compass-app-stores/package.json | 20 +- packages/compass-collection/package.json | 24 +- packages/compass-components/package.json | 4 +- .../package.json | 12 +- .../package.json | 16 +- packages/compass-connections/package.json | 24 +- packages/compass-crud/package.json | 34 +- packages/compass-e2e-tests/package.json | 8 +- packages/compass-editor/package.json | 4 +- packages/compass-explain-plan/package.json | 20 +- .../compass-export-to-language/package.json | 20 +- packages/compass-field-store/package.json | 10 +- packages/compass-find-in-page/package.json | 8 +- packages/compass-generative-ai/package.json | 16 +- packages/compass-global-writes/package.json | 18 +- packages/compass-import-export/package.json | 22 +- packages/compass-indexes/package.json | 32 +- packages/compass-intercom/package.json | 6 +- packages/compass-logging/package.json | 4 +- .../package.json | 4 +- .../compass-preferences-model/package.json | 10 +- packages/compass-query-bar/package.json | 32 +- .../package.json | 26 +- .../compass-schema-validation/package.json | 28 +- packages/compass-schema/package.json | 26 +- packages/compass-serverstats/package.json | 16 +- packages/compass-settings/package.json | 16 +- packages/compass-shell/package.json | 20 +- packages/compass-sidebar/package.json | 34 +- packages/compass-telemetry/package.json | 6 +- packages/compass-user-data/package.json | 4 +- packages/compass-web/package.json | 58 +- packages/compass-welcome/package.json | 18 +- packages/compass-workspaces/package.json | 20 +- packages/compass/package.json | 80 +- packages/connection-form/package.json | 14 +- packages/connection-info/package.json | 4 +- packages/connection-storage/package.json | 14 +- packages/data-service/package.json | 4 +- packages/database-model/package.json | 6 +- .../databases-collections-list/package.json | 16 +- packages/databases-collections/package.json | 32 +- packages/hadron-app-registry/package.json | 4 +- packages/hadron-build/package.json | 2 +- packages/instance-model/package.json | 8 +- packages/my-queries-storage/package.json | 8 +- scripts/package.json | 2 +- 53 files changed, 1272 insertions(+), 1272 deletions(-) diff --git a/configs/testing-library-compass/package.json b/configs/testing-library-compass/package.json index 23b1a75b57b..df93b977fb5 100644 --- a/configs/testing-library-compass/package.json +++ b/configs/testing-library-compass/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.0.1", + "version": "1.0.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index 20faec34cc9..b4f8955cc12 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.2", + "version": "1.4.3", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/package-lock.json b/package-lock.json index 63a4b545584..41d711acf4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -379,7 +379,7 @@ }, "configs/testing-library-compass": { "name": "@mongodb-js/testing-library-compass", - "version": "1.0.1", + "version": "1.0.2", "license": "SSPL", "dependencies": { "@testing-library/react": "^12.1.5", @@ -497,7 +497,7 @@ }, "configs/webpack-config-compass": { "name": "@mongodb-js/webpack-config-compass", - "version": "1.4.2", + "version": "1.4.3", "license": "SSPL", "dependencies": { "@babel/core": "^7.21.4", @@ -43605,21 +43605,21 @@ }, "packages/atlas-service": { "name": "@mongodb-js/atlas-service", - "version": "0.28.3", + "version": "0.29.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/devtools-connect": "^3.2.10", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/oidc-plugin": "^1.1.1", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "electron": "^30.5.1", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", "react": "^17.0.2", @@ -43631,7 +43631,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -43740,12 +43740,12 @@ }, "packages/collection-model": { "name": "mongodb-collection-model", - "version": "5.23.3", + "version": "5.23.4", "license": "SSPL", "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2" }, "devDependencies": { @@ -43775,56 +43775,56 @@ "devDependencies": { "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-find-in-page": "^4.30.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-import-export": "^7.41.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.42.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-serverstats": "^16.41.0", - "@mongodb-js/compass-settings": "^0.40.3", - "@mongodb-js/compass-shell": "^3.41.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-find-in-page": "^4.31.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-import-export": "^7.42.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-settings": "^0.41.0", + "@mongodb-js/compass-shell": "^3.42.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^30.5.1", @@ -43834,8 +43834,8 @@ "electron-squirrel-startup": "^1.0.1", "ensure-error": "^3.0.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", - "hadron-build": "^25.5.10", + "hadron-app-registry": "^9.2.7", + "hadron-build": "^25.5.11", "hadron-ipc": "^3.2.23", "local-links": "^1.4.0", "make-fetch-happen": "^8.0.14", @@ -43844,8 +43844,8 @@ "mongodb-build-info": "^1.7.2", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-data-service": "^22.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "react": "^17.0.2", @@ -43865,7 +43865,7 @@ }, "packages/compass-aggregations": { "name": "@mongodb-js/compass-aggregations", - "version": "9.44.0", + "version": "9.45.0", "license": "SSPL", "dependencies": { "@babel/generator": "^7.19.5", @@ -43874,34 +43874,34 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -43917,7 +43917,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/babel__generator": "^7.6.8", "@types/enzyme": "^3.10.14", @@ -43966,17 +43966,17 @@ }, "packages/compass-app-stores": { "name": "@mongodb-js/compass-app-stores", - "version": "7.28.0", + "version": "7.29.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/connection-info": "^0.8.0", - "hadron-app-registry": "^9.2.6", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/connection-info": "^0.9.0", + "hadron-app-registry": "^9.2.7", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -43984,7 +43984,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -44030,20 +44030,20 @@ }, "packages/compass-collection": { "name": "@mongodb-js/compass-collection", - "version": "4.41.0", + "version": "4.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", - "mongodb-collection-model": "^5.23.3", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", + "mongodb-collection-model": "^5.23.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -44054,7 +44054,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -44104,7 +44104,7 @@ }, "packages/compass-components": { "name": "@mongodb-js/compass-components", - "version": "1.29.4", + "version": "1.30.0", "license": "SSPL", "dependencies": { "@dnd-kit/core": "^6.0.7", @@ -44171,7 +44171,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -44216,13 +44216,13 @@ }, "packages/compass-connection-import-export": { "name": "@mongodb-js/compass-connection-import-export", - "version": "0.38.0", + "version": "0.39.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/connection-storage": "^0.21.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/connection-storage": "^0.22.0", + "compass-preferences-model": "^2.29.0", "hadron-ipc": "^3.2.23", "react": "^17.0.2" }, @@ -44230,7 +44230,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -44278,24 +44278,24 @@ }, "packages/compass-connections": { "name": "@mongodb-js/compass-connections", - "version": "1.42.0", + "version": "1.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -44305,7 +44305,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -44327,15 +44327,15 @@ }, "packages/compass-connections-navigation": { "name": "@mongodb-js/compass-connections-navigation", - "version": "1.41.0", + "version": "1.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "compass-preferences-model": "^2.29.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", @@ -44345,7 +44345,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -44422,33 +44422,33 @@ }, "packages/compass-crud": { "name": "@mongodb-js/compass-crud", - "version": "13.42.0", + "version": "13.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/explain-plan-helper": "^1.2.3", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -44462,7 +44462,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "@types/reflux": "^6.4.3", @@ -44474,7 +44474,7 @@ "enzyme": "^3.11.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", @@ -44526,11 +44526,11 @@ } }, "packages/compass-e2e-tests": { - "version": "1.27.0", + "version": "1.27.1", "devDependencies": { "@electron/rebuild": "^3.6.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -44543,7 +44543,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -44551,7 +44551,7 @@ "eslint": "^7.25.0", "fast-glob": "^3.2.7", "glob": "^10.2.5", - "hadron-build": "^25.5.10", + "hadron-build": "^25.5.11", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", @@ -44830,7 +44830,7 @@ }, "packages/compass-editor": { "name": "@mongodb-js/compass-editor", - "version": "0.30.0", + "version": "0.31.0", "license": "SSPL", "dependencies": { "@codemirror/autocomplete": "^6.17.0", @@ -44842,7 +44842,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/mongodb-constants": "^0.10.0", "mongodb-query-parser": "^4.2.3", "polished": "^4.2.2", @@ -44896,21 +44896,21 @@ }, "packages/compass-explain-plan": { "name": "@mongodb-js/compass-explain-plan", - "version": "6.42.0", + "version": "6.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/explain-plan-helper": "^1.2.3", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", "react": "^17.0.2", @@ -44922,7 +44922,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "@types/d3-flextree": "^2.1.0", @@ -44975,19 +44975,19 @@ }, "packages/compass-export-to-language": { "name": "@mongodb-js/compass-export-to-language", - "version": "9.18.0", + "version": "9.19.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.9", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -44997,7 +44997,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.3.6", "depcheck": "^1.4.1", @@ -45038,12 +45038,12 @@ }, "packages/compass-field-store": { "name": "@mongodb-js/compass-field-store", - "version": "9.17.0", + "version": "9.18.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-schema": "^12.2.0", "react": "^17.0.2", @@ -45055,7 +45055,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -45101,11 +45101,11 @@ }, "packages/compass-find-in-page": { "name": "@mongodb-js/compass-find-in-page", - "version": "4.30.4", + "version": "4.31.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-components": "^1.30.0", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -45116,7 +45116,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -45167,16 +45167,16 @@ }, "packages/compass-generative-ai": { "name": "@mongodb-js/compass-generative-ai", - "version": "0.22.3", + "version": "0.23.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "mongodb": "^6.8.0", "mongodb-schema": "^12.2.0", "react": "^17.0.2" @@ -45185,7 +45185,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -45268,16 +45268,16 @@ }, "packages/compass-global-writes": { "name": "@mongodb-js/compass-global-writes", - "version": "1.0.0", + "version": "1.1.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", "redux-thunk": "^2.4.2" @@ -45286,7 +45286,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -45458,27 +45458,27 @@ }, "packages/compass-import-export": { "name": "@mongodb-js/compass-import-export", - "version": "7.41.0", + "version": "7.42.0", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "electron": "^30.5.1", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -45495,7 +45495,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-as-promised": "^7.1.4", @@ -45552,28 +45552,28 @@ }, "packages/compass-indexes": { "name": "@mongodb-js/compass-indexes", - "version": "5.41.0", + "version": "5.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -45587,7 +45587,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/numeral": "^2.0.5", "chai": "^4.2.0", @@ -45682,11 +45682,11 @@ }, "packages/compass-intercom": { "name": "@mongodb-js/compass-intercom", - "version": "0.12.3", + "version": "0.13.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "compass-preferences-model": "^2.28.3" + "@mongodb-js/compass-logging": "^1.4.8", + "compass-preferences-model": "^2.29.0" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -45789,11 +45789,11 @@ }, "packages/compass-logging": { "name": "@mongodb-js/compass-logging", - "version": "1.4.7", + "version": "1.4.8", "license": "SSPL", "dependencies": { "debug": "^4.3.4", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "is-electron-renderer": "^2.0.1", "mongodb-log-writer": "^1.4.2", @@ -45847,10 +45847,10 @@ }, "packages/compass-maybe-protect-connection-string": { "name": "@mongodb-js/compass-maybe-protect-connection-string", - "version": "0.26.3", + "version": "0.27.0", "license": "SSPL", "dependencies": { - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { @@ -45900,14 +45900,14 @@ } }, "packages/compass-preferences-model": { - "version": "2.28.3", + "version": "2.29.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/devtools-proxy-support": "^0.3.9", "bson": "^6.7.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -45918,7 +45918,7 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/js-yaml": "^4.0.5", "@types/yargs-parser": "21.0.0", @@ -45966,27 +45966,27 @@ }, "packages/compass-query-bar": { "name": "@mongodb-js/compass-query-bar", - "version": "8.43.0", + "version": "8.44.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.8", @@ -46000,7 +46000,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", @@ -46044,22 +46044,22 @@ }, "packages/compass-saved-aggregations-queries": { "name": "@mongodb-js/compass-saved-aggregations-queries", - "version": "1.42.0", + "version": "1.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "fuse.js": "^6.5.3", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46070,7 +46070,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -46120,22 +46120,22 @@ }, "packages/compass-schema": { "name": "@mongodb-js/compass-schema", - "version": "6.43.0", + "version": "6.44.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "leaflet": "^1.5.1", "leaflet-defaulticon-compatibility": "^0.1.1", @@ -46155,9 +46155,9 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/leaflet": "^1.9.8", @@ -46179,21 +46179,21 @@ }, "packages/compass-schema-validation": { "name": "@mongodb-js/compass-schema-validation", - "version": "6.42.0", + "version": "6.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", @@ -46209,7 +46209,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "chai": "^4.2.0", @@ -46220,7 +46220,7 @@ "eslint": "^7.25.0", "hadron-ipc": "^3.2.23", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", @@ -46256,18 +46256,18 @@ }, "packages/compass-serverstats": { "name": "@mongodb-js/compass-serverstats", - "version": "16.41.0", + "version": "16.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", "prop-types": "^15.7.2", @@ -46278,7 +46278,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "chai": "^4.1.2", @@ -46305,15 +46305,15 @@ }, "packages/compass-settings": { "name": "@mongodb-js/compass-settings", - "version": "0.40.3", + "version": "0.41.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46324,7 +46324,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -46374,22 +46374,22 @@ }, "packages/compass-shell": { "name": "@mongodb-js/compass-shell", - "version": "3.41.0", + "version": "3.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -46399,7 +46399,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "chai": "^4.2.0", @@ -46699,25 +46699,25 @@ }, "packages/compass-sidebar": { "name": "@mongodb-js/compass-sidebar", - "version": "5.42.0", + "version": "5.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-connections-navigation": "^1.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46728,7 +46728,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -46741,7 +46741,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "nyc": "^15.1.0", "prettier": "^2.7.1", "react-dom": "^17.0.2", @@ -46779,11 +46779,11 @@ }, "packages/compass-telemetry": { "name": "@mongodb-js/compass-telemetry", - "version": "1.1.7", + "version": "1.2.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-logging": "^1.4.8", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2" }, @@ -46940,10 +46940,10 @@ }, "packages/compass-user-data": { "name": "@mongodb-js/compass-user-data", - "version": "0.3.7", + "version": "0.3.8", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-utils": "^0.6.12", "write-file-atomic": "^5.0.1", "zod": "^3.22.3" @@ -47074,39 +47074,39 @@ }, "packages/compass-web": { "name": "@mongodb-js/compass-web", - "version": "0.7.1", + "version": "0.8.0", "license": "SSPL", "devDependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -47118,7 +47118,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -47128,13 +47128,13 @@ "events": "^3.3.0", "express": "^4.20.0", "express-http-proxy": "^2.0.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", @@ -47314,16 +47314,16 @@ }, "packages/compass-welcome": { "name": "@mongodb-js/compass-welcome", - "version": "0.40.0", + "version": "0.41.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", "redux-thunk": "^2.4.2" @@ -47332,7 +47332,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -47380,19 +47380,19 @@ }, "packages/compass-workspaces": { "name": "@mongodb-js/compass-workspaces", - "version": "0.23.0", + "version": "0.24.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -47403,7 +47403,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -47553,19 +47553,19 @@ }, "packages/connection-form": { "name": "@mongodb-js/connection-form", - "version": "1.40.0", + "version": "1.41.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/shell-bson-parser": "^1.1.2", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-query-parser": "^4.2.3", "react": "^17.0.2" }, @@ -47573,7 +47573,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -47621,13 +47621,13 @@ }, "packages/connection-info": { "name": "@mongodb-js/connection-info", - "version": "0.8.0", + "version": "0.9.0", "license": "SSPL", "dependencies": { "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3" + "mongodb-data-service": "^22.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -47747,18 +47747,18 @@ }, "packages/connection-storage": { "name": "@mongodb-js/connection-storage", - "version": "0.21.0", + "version": "0.22.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "electron": "^30.5.1", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "keytar": "^7.9.0", "lodash": "^4.17.21", @@ -47812,10 +47812,10 @@ }, "packages/data-service": { "name": "mongodb-data-service", - "version": "22.23.3", + "version": "22.23.4", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-utils": "^0.6.12", "@mongodb-js/devtools-connect": "^3.2.10", "@mongodb-js/devtools-proxy-support": "^0.3.9", @@ -48003,13 +48003,13 @@ }, "packages/database-model": { "name": "mongodb-database-model", - "version": "2.23.3", + "version": "2.23.4", "license": "SSPL", "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -48070,24 +48070,24 @@ }, "packages/databases-collections": { "name": "@mongodb-js/compass-databases-collections", - "version": "1.41.0", + "version": "1.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/databases-collections-list": "^1.39.0", - "@mongodb-js/my-queries-storage": "^0.16.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/databases-collections-list": "^1.40.0", + "@mongodb-js/my-queries-storage": "^0.17.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "prop-types": "^15.7.2", @@ -48101,7 +48101,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.7.0", "chai": "^4.2.0", @@ -48117,15 +48117,15 @@ }, "packages/databases-collections-list": { "name": "@mongodb-js/databases-collections-list", - "version": "1.39.0", + "version": "1.40.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", + "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -48133,7 +48133,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -48313,7 +48313,7 @@ } }, "packages/hadron-app-registry": { - "version": "9.2.6", + "version": "9.2.7", "license": "SSPL", "dependencies": { "eventemitter3": "^4.0.0", @@ -48326,7 +48326,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -48369,7 +48369,7 @@ } }, "packages/hadron-build": { - "version": "25.5.10", + "version": "25.5.11", "hasInstallScript": true, "license": "SSPL", "dependencies": { @@ -49273,13 +49273,13 @@ }, "packages/instance-model": { "name": "mongodb-instance-model", - "version": "12.24.3", + "version": "12.24.4", "license": "SSPL", "dependencies": { "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -49550,13 +49550,13 @@ }, "packages/my-queries-storage": { "name": "@mongodb-js/my-queries-storage", - "version": "0.16.0", + "version": "0.17.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-user-data": "^0.3.8", "bson": "^6.7.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2" }, "devDependencies": { @@ -50171,7 +50171,7 @@ }, "scripts": { "name": "@mongodb-js/compass-scripts", - "version": "0.16.21", + "version": "0.16.22", "license": "SSPL", "dependencies": { "@babel/core": "^7.24.3", @@ -55910,29 +55910,29 @@ "@mongodb-js/atlas-service": { "version": "file:packages/atlas-service", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/devtools-connect": "^3.2.10", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/oidc-plugin": "^1.1.1", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", "mocha": "^10.2.0", @@ -55998,27 +55998,27 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/shell-bson-parser": "^1.1.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/babel__generator": "^7.6.8", "@types/enzyme": "^3.10.14", @@ -56026,21 +56026,21 @@ "@types/semver": "^7.3.9", "bson": "^6.7.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -56084,14 +56084,14 @@ "@mongodb-js/compass-app-stores": { "version": "file:packages/compass-app-stores", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -56100,11 +56100,11 @@ "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -56139,18 +56139,18 @@ "@mongodb-js/compass-collection": { "version": "file:packages/compass-collection", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56159,13 +56159,13 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", + "mongodb-collection-model": "^5.23.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -56250,7 +56250,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@react-aria/interactions": "^3.9.1", "@react-aria/utils": "^3.13.1", @@ -56309,13 +56309,13 @@ "@mongodb-js/compass-connection-import-export": { "version": "file:packages/compass-connection-import-export", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56323,7 +56323,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -56364,18 +56364,18 @@ "@mongodb-js/compass-connections": { "version": "file:packages/compass-connections", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56385,16 +56385,16 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "nyc": "^15.1.0", "prettier": "^2.7.1", "react": "^17.0.2", @@ -56433,15 +56433,15 @@ "@mongodb-js/compass-connections-navigation": { "version": "file:packages/compass-connections-navigation", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56452,7 +56452,7 @@ "@types/react-window": "^1.8.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -56494,25 +56494,25 @@ "@mongodb-js/compass-crud": { "version": "file:packages/compass-crud", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "@types/reflux": "^6.4.3", @@ -56521,20 +56521,20 @@ "bson": "^6.7.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-data-service": "^22.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -56558,32 +56558,32 @@ "@mongodb-js/compass-databases-collections": { "version": "file:packages/databases-collections", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/databases-collections-list": "^1.39.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/databases-collections-list": "^1.40.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.7.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", @@ -56632,7 +56632,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", @@ -56682,23 +56682,23 @@ "@mongodb-js/compass-explain-plan": { "version": "file:packages/compass-explain-plan", "requires": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "@types/d3-flextree": "^2.1.0", "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", @@ -56706,7 +56706,7 @@ "electron": "^30.5.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", @@ -56752,24 +56752,24 @@ "@mongodb-js/compass-export-to-language": { "version": "file:packages/compass-export-to-language", "requires": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/shell-bson-parser": "^1.1.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson-transpilers": "^3.0.9", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", @@ -56808,12 +56808,12 @@ "@mongodb-js/compass-field-store": { "version": "file:packages/compass-field-store", "requires": { - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -56822,7 +56822,7 @@ "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb-schema": "^12.2.0", @@ -56862,11 +56862,11 @@ "@mongodb-js/compass-find-in-page": { "version": "file:packages/compass-find-in-page", "requires": { - "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56879,7 +56879,7 @@ "electron": "^30.5.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "mocha": "^10.2.0", "nyc": "^15.1.0", @@ -56921,14 +56921,14 @@ "@mongodb-js/compass-generative-ai": { "version": "file:packages/compass-generative-ai", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -56937,11 +56937,11 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "mongodb": "^6.8.0", "mongodb-schema": "^12.2.0", @@ -57001,16 +57001,16 @@ "@mongodb-js/compass-global-writes": { "version": "file:packages/compass-global-writes", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -57021,7 +57021,7 @@ "chai": "^4.3.6", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57115,18 +57115,18 @@ "version": "file:packages/compass-import-export", "requires": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-as-promised": "^7.1.4", @@ -57141,19 +57141,19 @@ "bson": "^6.7.0", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -57199,37 +57199,37 @@ "@mongodb-js/compass-indexes": { "version": "file:packages/compass-indexes", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/shell-bson-parser": "^1.1.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/numeral": "^2.0.5", "bson": "^6.7.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -57277,7 +57277,7 @@ "@mongodb-js/compass-intercom": { "version": "file:packages/compass-intercom", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57286,7 +57286,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -57392,7 +57392,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "is-electron-renderer": "^2.0.1", "mocha": "^10.2.0", @@ -57439,7 +57439,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -57478,35 +57478,35 @@ "@mongodb-js/compass-query-bar": { "version": "file:packages/compass-query-bar", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.7.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.8", @@ -57547,19 +57547,19 @@ "@mongodb-js/compass-saved-aggregations-queries": { "version": "file:packages/compass-saved-aggregations-queries", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -57569,12 +57569,12 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "fuse.js": "^6.5.3", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", @@ -57616,20 +57616,20 @@ "@mongodb-js/compass-schema": { "version": "file:packages/compass-schema", "requires": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/reflux-state-mixin": "^1.0.7", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/leaflet": "^1.9.8", @@ -57639,12 +57639,12 @@ "@types/react-dom": "^17.0.10", "bson": "^6.7.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "leaflet": "^1.5.1", "leaflet-defaulticon-compatibility": "^0.1.1", @@ -57693,35 +57693,35 @@ "@mongodb-js/compass-schema-validation": { "version": "file:packages/compass-schema-validation", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "bson": "^6.7.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", @@ -58082,15 +58082,15 @@ "@mongodb-js/compass-serverstats": { "version": "file:packages/compass-serverstats", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "chai": "^4.1.2", @@ -58101,7 +58101,7 @@ "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb-ns": "^2.4.2", @@ -58129,14 +58129,14 @@ "@mongodb-js/compass-settings": { "version": "file:packages/compass-settings", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -58145,11 +58145,11 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "mocha": "^10.2.0", "nyc": "^15.1.0", @@ -58191,17 +58191,17 @@ "@mongodb-js/compass-shell": { "version": "file:packages/compass-shell", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", @@ -58209,13 +58209,13 @@ "@types/enzyme": "^3.10.14", "bson": "^6.7.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "nyc": "^15.1.0", "react": "^17.0.2", @@ -58426,21 +58426,21 @@ "@mongodb-js/compass-sidebar": { "version": "file:packages/compass-sidebar", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-connections-navigation": "^1.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -58449,16 +58449,16 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", - "mongodb-data-service": "^22.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-data-service": "^22.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -58499,7 +58499,7 @@ "@mongodb-js/compass-telemetry": { "version": "file:packages/compass-telemetry", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58511,7 +58511,7 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "mocha": "^10.2.0", "nyc": "^15.1.0", @@ -58647,7 +58647,7 @@ "@mongodb-js/compass-user-data": { "version": "file:packages/compass-user-data", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-utils": "^0.6.12", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -58756,36 +58756,36 @@ "@mongodb-js/compass-web": { "version": "file:packages/compass-web", "requires": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -58797,7 +58797,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -58807,13 +58807,13 @@ "events": "^3.3.0", "express": "^4.20.0", "express-http-proxy": "^2.0.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", @@ -58974,15 +58974,15 @@ "@mongodb-js/compass-welcome": { "version": "file:packages/compass-welcome", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -58990,11 +58990,11 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -59033,14 +59033,14 @@ "@mongodb-js/compass-workspaces": { "version": "file:packages/compass-workspaces", "requires": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -59050,15 +59050,15 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -59175,14 +59175,14 @@ "@mongodb-js/connection-form": { "version": "file:packages/connection-form", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/shell-bson-parser": "^1.1.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -59191,7 +59191,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -59200,7 +59200,7 @@ "mongodb": "^6.8.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -59252,7 +59252,7 @@ "mocha": "^10.2.0", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "nyc": "^15.1.0", "prettier": "^2.7.1", "sinon": "^17.0.1", @@ -59362,11 +59362,11 @@ "@mongodb-js/connection-storage": { "version": "file:packages/connection-storage", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -59376,11 +59376,11 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron": "^30.5.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "keytar": "^7.9.0", "lodash": "^4.17.21", @@ -59418,15 +59418,15 @@ "@mongodb-js/databases-collections-list": { "version": "file:packages/databases-collections-list", "requires": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -59434,7 +59434,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -60039,8 +60039,8 @@ "@mongodb-js/my-queries-storage": { "version": "file:packages/my-queries-storage", "requires": { - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -60053,7 +60053,7 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -68125,7 +68125,7 @@ "requires": { "@electron/rebuild": "^3.6.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -68138,7 +68138,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -68146,7 +68146,7 @@ "eslint": "^7.25.0", "fast-glob": "^3.2.7", "glob": "^10.2.5", - "hadron-build": "^25.5.10", + "hadron-build": "^25.5.11", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", @@ -68360,12 +68360,12 @@ "compass-preferences-model": { "version": "file:packages/compass-preferences-model", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/js-yaml": "^4.0.5", "@types/yargs-parser": "21.0.0", @@ -68373,7 +68373,7 @@ "chai": "^4.3.6", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -74334,7 +74334,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -80040,7 +80040,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "xvfb-maybe": "^0.2.1" } @@ -80050,50 +80050,50 @@ "requires": { "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-find-in-page": "^4.30.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-import-export": "^7.41.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.42.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-serverstats": "^16.41.0", - "@mongodb-js/compass-settings": "^0.40.3", - "@mongodb-js/compass-shell": "^3.41.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-find-in-page": "^4.31.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-import-export": "^7.42.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-settings": "^0.41.0", + "@mongodb-js/compass-shell": "^3.42.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@mongosh/node-runtime-worker-thread": "^2.3.1", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", @@ -80101,7 +80101,7 @@ "chalk": "^4.1.2", "clean-stack": "^2.0.0", "clipboard": "^2.0.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^30.5.1", @@ -80111,8 +80111,8 @@ "electron-squirrel-startup": "^1.0.1", "ensure-error": "^3.0.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", - "hadron-build": "^25.5.10", + "hadron-app-registry": "^9.2.7", + "hadron-build": "^25.5.11", "hadron-ipc": "^3.2.23", "kerberos": "^2.1.1", "keytar": "^7.9.0", @@ -80125,8 +80125,8 @@ "mongodb-client-encryption": "^6.1.0", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-data-service": "^22.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "os-dns-native": "^1.2.1", @@ -80186,7 +80186,7 @@ "mongodb-data-service": { "version": "file:packages/data-service", "requires": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/compass-utils": "^0.6.12", "@mongodb-js/devtools-connect": "^3.2.10", @@ -80345,8 +80345,8 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4" } }, "mongodb-download-url": { @@ -80385,9 +80385,9 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4" } }, "mongodb-js-cli": { diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index e7bef43fa9e..cfd6e8dbe42 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.28.3", + "version": "0.29.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -58,7 +58,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -73,17 +73,17 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/devtools-connect": "^3.2.10", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/oidc-plugin": "^1.1.1", - "hadron-app-registry": "^9.2.6", - "compass-preferences-model": "^2.28.3", + "hadron-app-registry": "^9.2.7", + "compass-preferences-model": "^2.29.0", "electron": "^30.5.1", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", diff --git a/packages/collection-model/package.json b/packages/collection-model/package.json index 32ab151930f..cef931b6c19 100644 --- a/packages/collection-model/package.json +++ b/packages/collection-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-collection-model", "description": "MongoDB collection model", "author": "Lucas Hrabovsky ", - "version": "5.23.3", + "version": "5.23.4", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -31,7 +31,7 @@ "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2" }, "devDependencies": { diff --git a/packages/compass-aggregations/package.json b/packages/compass-aggregations/package.json index 197c3337a90..7b8bedac027 100644 --- a/packages/compass-aggregations/package.json +++ b/packages/compass-aggregations/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-aggregations", "description": "Compass Aggregation Pipeline Builder", "private": true, - "version": "9.44.0", + "version": "9.45.0", "main": "dist/index.js", "compass:main": "src/index.ts", "types": "dist/index.d.ts", @@ -35,7 +35,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/babel__generator": "^7.6.8", "@types/enzyme": "^3.10.14", @@ -61,34 +61,34 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-app-stores/package.json b/packages/compass-app-stores/package.json index c34959021e5..1c0f8c613fc 100644 --- a/packages/compass-app-stores/package.json +++ b/packages/compass-app-stores/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.28.0", + "version": "7.29.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -56,7 +56,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -73,14 +73,14 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/connection-info": "^0.8.0", - "hadron-app-registry": "^9.2.6", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/connection-info": "^0.9.0", + "hadron-app-registry": "^9.2.7", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, diff --git a/packages/compass-collection/package.json b/packages/compass-collection/package.json index c04f15526a3..12da225d0b8 100644 --- a/packages/compass-collection/package.json +++ b/packages/compass-collection/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "4.41.0", + "version": "4.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,17 +48,17 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", - "mongodb-collection-model": "^5.23.3", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", + "mongodb-collection-model": "^5.23.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -69,7 +69,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-components/package.json b/packages/compass-components/package.json index 6146771023e..196f1993470 100644 --- a/packages/compass-components/package.json +++ b/packages/compass-components/package.json @@ -1,6 +1,6 @@ { "name": "@mongodb-js/compass-components", - "version": "1.29.4", + "version": "1.30.0", "description": "React Components used in Compass", "license": "SSPL", "main": "lib/index.js", @@ -95,7 +95,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-connection-import-export/package.json b/packages/compass-connection-import-export/package.json index 9ae74b9211c..42d690f47ae 100644 --- a/packages/compass-connection-import-export/package.json +++ b/packages/compass-connection-import-export/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.38.0", + "version": "0.39.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,10 +51,10 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/connection-storage": "^0.21.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/connection-storage": "^0.22.0", + "compass-preferences-model": "^2.29.0", "hadron-ipc": "^3.2.23", "react": "^17.0.2" }, @@ -62,7 +62,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-connections-navigation/package.json b/packages/compass-connections-navigation/package.json index 0df6dd96fdd..d96d133ba40 100644 --- a/packages/compass-connections-navigation/package.json +++ b/packages/compass-connections-navigation/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.41.0", + "version": "1.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "compass-preferences-model": "^2.29.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", @@ -64,7 +64,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-connections/package.json b/packages/compass-connections/package.json index 025ae2c07d8..d44c2895c3a 100644 --- a/packages/compass-connections/package.json +++ b/packages/compass-connections/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.42.0", + "version": "1.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,21 +51,21 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -75,7 +75,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 91ad9d5846b..1467c8bb7e2 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "13.42.0", + "version": "13.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,7 +52,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "@types/reflux": "^6.4.3", @@ -64,37 +64,37 @@ "enzyme": "^3.11.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongodb-js/explain-plan-helper": "^1.2.3", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-type-checker": "^7.2.2", "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index 1c675f5eb3e..fb6a7405e35 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "compass-e2e-tests", - "version": "1.27.0", + "version": "1.27.1", "private": true, "description": "E2E test suite for Compass app that follows smoke tests / feature testing matrix", "scripts": { @@ -34,7 +34,7 @@ }, "devDependencies": { "@electron/rebuild": "^3.6.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", @@ -48,7 +48,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -56,7 +56,7 @@ "eslint": "^7.25.0", "fast-glob": "^3.2.7", "glob": "^10.2.5", - "hadron-build": "^25.5.10", + "hadron-build": "^25.5.11", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", diff --git a/packages/compass-editor/package.json b/packages/compass-editor/package.json index 40dbe0a8bf4..f816fc0b00f 100644 --- a/packages/compass-editor/package.json +++ b/packages/compass-editor/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.30.0", + "version": "0.31.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,7 +72,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.29.4", + "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/mongodb-constants": "^0.10.0", "mongodb-query-parser": "^4.2.3", "polished": "^4.2.2", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index 66bef2eebcc..a67cb924f0b 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.42.0", + "version": "6.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "@types/d3-flextree": "^2.1.0", @@ -69,18 +69,18 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/explain-plan-helper": "^1.2.3", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", "react": "^17.0.2", diff --git a/packages/compass-export-to-language/package.json b/packages/compass-export-to-language/package.json index 6b62f947b54..9bc7a271299 100644 --- a/packages/compass-export-to-language/package.json +++ b/packages/compass-export-to-language/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.18.0", + "version": "9.19.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,16 +48,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.9", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -67,7 +67,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.3.6", "depcheck": "^1.4.1", diff --git a/packages/compass-field-store/package.json b/packages/compass-field-store/package.json index 282422499b7..15de2554167 100644 --- a/packages/compass-field-store/package.json +++ b/packages/compass-field-store/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.17.0", + "version": "9.18.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,7 +52,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", @@ -69,9 +69,9 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-schema": "^12.2.0", "react": "^17.0.2", diff --git a/packages/compass-find-in-page/package.json b/packages/compass-find-in-page/package.json index 9fc848d89a8..4c9d5492618 100644 --- a/packages/compass-find-in-page/package.json +++ b/packages/compass-find-in-page/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "4.30.4", + "version": "4.31.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -73,8 +73,8 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-components": "^1.30.0", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-generative-ai/package.json b/packages/compass-generative-ai/package.json index d78f596e021..c00567810a0 100644 --- a/packages/compass-generative-ai/package.json +++ b/packages/compass-generative-ai/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.22.3", + "version": "0.23.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,13 +52,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "mongodb": "^6.8.0", "mongodb-schema": "^12.2.0", "react": "^17.0.2" @@ -67,7 +67,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index 917f8d4791a..45b351a258e 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.0.0", + "version": "1.1.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,13 +49,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", "redux-thunk": "^2.4.2" @@ -64,7 +64,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index 7b3f869a1a2..d520739a5c4 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.41.0", + "version": "7.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,23 +49,23 @@ }, "dependencies": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "electron": "^30.5.1", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "hadron-ipc": "^3.2.23", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -82,7 +82,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-as-promised": "^7.1.4", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index cf4db773739..8d173ddd12b 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "5.41.0", + "version": "5.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/numeral": "^2.0.5", "chai": "^4.2.0", @@ -67,25 +67,25 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", "mongodb-query-parser": "^4.2.3", "mongodb-ns": "^2.4.2", "numeral": "^2.0.6", diff --git a/packages/compass-intercom/package.json b/packages/compass-intercom/package.json index 524df6d2db3..5a49d458980 100644 --- a/packages/compass-intercom/package.json +++ b/packages/compass-intercom/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.12.3", + "version": "0.13.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -67,7 +67,7 @@ "typescript": "^5.0.4" }, "dependencies": { - "compass-preferences-model": "^2.28.3", - "@mongodb-js/compass-logging": "^1.4.7" + "compass-preferences-model": "^2.29.0", + "@mongodb-js/compass-logging": "^1.4.8" } } diff --git a/packages/compass-logging/package.json b/packages/compass-logging/package.json index e922efd6e19..fd4acf4ccca 100644 --- a/packages/compass-logging/package.json +++ b/packages/compass-logging/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.7", + "version": "1.4.8", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,7 +52,7 @@ }, "dependencies": { "debug": "^4.3.4", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "is-electron-renderer": "^2.0.1", "mongodb-log-writer": "^1.4.2", diff --git a/packages/compass-maybe-protect-connection-string/package.json b/packages/compass-maybe-protect-connection-string/package.json index 7e79304f508..bad1af7bc7a 100644 --- a/packages/compass-maybe-protect-connection-string/package.json +++ b/packages/compass-maybe-protect-connection-string/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.26.3", + "version": "0.27.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,7 +50,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { diff --git a/packages/compass-preferences-model/package.json b/packages/compass-preferences-model/package.json index 711078b9fc0..308681c72c3 100644 --- a/packages/compass-preferences-model/package.json +++ b/packages/compass-preferences-model/package.json @@ -2,7 +2,7 @@ "name": "compass-preferences-model", "description": "Compass preferences model", "author": "Lucas Hrabovsky ", - "version": "2.28.3", + "version": "2.29.0", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -49,11 +49,11 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/devtools-proxy-support": "^0.3.9", "bson": "^6.7.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -64,7 +64,7 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/js-yaml": "^4.0.5", "@types/yargs-parser": "21.0.0", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index f8816d40a1b..cfafc7de36e 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "8.43.0", + "version": "8.44.0", "homepage": "https://github.com/mongodb-js/compass", "license": "SSPL", "bugs": { @@ -51,7 +51,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", @@ -66,24 +66,24 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.8", diff --git a/packages/compass-saved-aggregations-queries/package.json b/packages/compass-saved-aggregations-queries/package.json index 3a83612b5a9..2872532c07c 100644 --- a/packages/compass-saved-aggregations-queries/package.json +++ b/packages/compass-saved-aggregations-queries/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.42.0", + "version": "1.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,19 +48,19 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "fuse.js": "^6.5.3", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -71,7 +71,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index 292777d7b05..bb8da9d3bea 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.42.0", + "version": "6.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "chai": "^4.2.0", @@ -62,25 +62,25 @@ "eslint": "^7.25.0", "hadron-ipc": "^3.2.23", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index 095ecd8b4b9..658f6d5993d 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.43.0", + "version": "6.44.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,9 +50,9 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/leaflet": "^1.9.8", @@ -72,18 +72,18 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "d3": "^3.5.17", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.3", "leaflet": "^1.5.1", "leaflet-defaulticon-compatibility": "^0.1.1", diff --git a/packages/compass-serverstats/package.json b/packages/compass-serverstats/package.json index b25c452969a..d843e95ffd0 100644 --- a/packages/compass-serverstats/package.json +++ b/packages/compass-serverstats/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-serverstats", "description": "Compass Real Time", "private": true, - "version": "16.41.0", + "version": "16.42.0", "main": "dist/index.js", "compass:main": "src/index.ts", "exports": { @@ -30,15 +30,15 @@ }, "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", "prop-types": "^15.7.2", @@ -49,7 +49,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.0", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/d3": "^3.5.x", "chai": "^4.1.2", diff --git a/packages/compass-settings/package.json b/packages/compass-settings/package.json index 54b2a249760..6b4db3a72c0 100644 --- a/packages/compass-settings/package.json +++ b/packages/compass-settings/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.40.3", + "version": "0.41.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-logging": "^1.4.7", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-logging": "^1.4.8", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -65,7 +65,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 8385b43394f..ad2c132fa5e 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "3.41.0", + "version": "3.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,19 +49,19 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.23.0", + "@mongodb-js/compass-workspaces": "^0.24.0", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -71,7 +71,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/enzyme": "^3.10.14", "chai": "^4.2.0", diff --git a/packages/compass-sidebar/package.json b/packages/compass-sidebar/package.json index 2322dccac95..d27751a2aa3 100644 --- a/packages/compass-sidebar/package.json +++ b/packages/compass-sidebar/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "5.42.0", + "version": "5.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,22 +48,22 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-connections-navigation": "^1.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.26.3", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-form": "^1.40.0", - "@mongodb-js/connection-info": "^0.8.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-info": "^0.9.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.8.0", - "mongodb-instance-model": "^12.24.3", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -74,7 +74,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", @@ -87,7 +87,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "nyc": "^15.1.0", "prettier": "^2.7.1", "react-dom": "^17.0.2", diff --git a/packages/compass-telemetry/package.json b/packages/compass-telemetry/package.json index 77e464ae26b..d4fc547aa85 100644 --- a/packages/compass-telemetry/package.json +++ b/packages/compass-telemetry/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.1.7", + "version": "1.2.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,8 +52,8 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-logging": "^1.4.8", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "react": "^17.0.2" }, diff --git a/packages/compass-user-data/package.json b/packages/compass-user-data/package.json index 835e8f4f0c2..d06bc76592b 100644 --- a/packages/compass-user-data/package.json +++ b/packages/compass-user-data/package.json @@ -12,7 +12,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.3.7", + "version": "0.3.8", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,7 +49,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-utils": "^0.6.12", "write-file-atomic": "^5.0.1", "zod": "^3.22.3" diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index d52c9e31d25..1018ecbfa84 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.7.1", + "version": "0.8.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -62,36 +62,36 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -103,7 +103,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -113,13 +113,13 @@ "events": "^3.3.0", "express": "^4.20.0", "express-http-proxy": "^2.0.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", diff --git a/packages/compass-welcome/package.json b/packages/compass-welcome/package.json index 1d1fa3643bb..27ec568e488 100644 --- a/packages/compass-welcome/package.json +++ b/packages/compass-welcome/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.40.0", + "version": "0.41.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,13 +49,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", "redux-thunk": "^2.4.2" @@ -64,7 +64,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass-workspaces/package.json b/packages/compass-workspaces/package.json index ba026e845ea..d389188ac4e 100644 --- a/packages/compass-workspaces/package.json +++ b/packages/compass-workspaces/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.23.0", + "version": "0.24.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,16 +51,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -71,7 +71,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/compass/package.json b/packages/compass/package.json index f3894466020..89055421783 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -191,56 +191,56 @@ "devDependencies": { "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.28.3", - "@mongodb-js/compass-aggregations": "^9.44.0", - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-collection": "^4.41.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connection-import-export": "^0.38.0", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-crud": "^13.42.0", - "@mongodb-js/compass-databases-collections": "^1.41.0", - "@mongodb-js/compass-explain-plan": "^6.42.0", - "@mongodb-js/compass-export-to-language": "^9.18.0", - "@mongodb-js/compass-field-store": "^9.17.0", - "@mongodb-js/compass-find-in-page": "^4.30.4", - "@mongodb-js/compass-generative-ai": "^0.22.3", - "@mongodb-js/compass-global-writes": "^1.0.0", - "@mongodb-js/compass-import-export": "^7.41.0", - "@mongodb-js/compass-indexes": "^5.41.0", - "@mongodb-js/compass-intercom": "^0.12.3", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-query-bar": "^8.43.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.42.0", - "@mongodb-js/compass-schema": "^6.43.0", - "@mongodb-js/compass-schema-validation": "^6.42.0", - "@mongodb-js/compass-serverstats": "^16.41.0", - "@mongodb-js/compass-settings": "^0.40.3", - "@mongodb-js/compass-shell": "^3.41.0", - "@mongodb-js/compass-sidebar": "^5.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", + "@mongodb-js/atlas-service": "^0.29.0", + "@mongodb-js/compass-aggregations": "^9.45.0", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connection-import-export": "^0.39.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-databases-collections": "^1.42.0", + "@mongodb-js/compass-explain-plan": "^6.43.0", + "@mongodb-js/compass-export-to-language": "^9.19.0", + "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-find-in-page": "^4.31.0", + "@mongodb-js/compass-generative-ai": "^0.23.0", + "@mongodb-js/compass-global-writes": "^1.1.0", + "@mongodb-js/compass-import-export": "^7.42.0", + "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-intercom": "^0.13.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", + "@mongodb-js/compass-schema": "^6.44.0", + "@mongodb-js/compass-schema-validation": "^6.43.0", + "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-settings": "^0.41.0", + "@mongodb-js/compass-shell": "^3.42.0", + "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.40.0", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", - "@mongodb-js/connection-storage": "^0.21.0", + "@mongodb-js/compass-welcome": "^0.41.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", + "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.16.0", + "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.2", + "@mongodb-js/webpack-config-compass": "^1.4.3", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^30.5.1", @@ -250,8 +250,8 @@ "electron-squirrel-startup": "^1.0.1", "ensure-error": "^3.0.1", "eslint": "^7.25.0", - "hadron-app-registry": "^9.2.6", - "hadron-build": "^25.5.10", + "hadron-app-registry": "^9.2.7", + "hadron-build": "^25.5.11", "hadron-ipc": "^3.2.23", "local-links": "^1.4.0", "make-fetch-happen": "^8.0.14", @@ -260,8 +260,8 @@ "mongodb-build-info": "^1.7.2", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-data-service": "^22.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "react": "^17.0.2", diff --git a/packages/connection-form/package.json b/packages/connection-form/package.json index b430adf76d7..410310a5bcb 100644 --- a/packages/connection-form/package.json +++ b/packages/connection-form/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.40.0", + "version": "1.41.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,16 +48,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/shell-bson-parser": "^1.1.2", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3", + "mongodb-data-service": "^22.23.4", "mongodb-query-parser": "^4.2.3", "react": "^17.0.2" }, @@ -65,7 +65,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/connection-info/package.json b/packages/connection-info/package.json index 6b16e011a5b..2e0550970dc 100644 --- a/packages/connection-info/package.json +++ b/packages/connection-info/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.8.0", + "version": "0.9.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -54,7 +54,7 @@ "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.3" + "mongodb-data-service": "^22.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/connection-storage/package.json b/packages/connection-storage/package.json index 3f82113aba6..bf413b477dc 100644 --- a/packages/connection-storage/package.json +++ b/packages/connection-storage/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.21.0", + "version": "0.22.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -56,15 +56,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-info": "^0.8.0", + "@mongodb-js/connection-info": "^0.9.0", "bson": "^6.7.0", - "compass-preferences-model": "^2.28.3", + "compass-preferences-model": "^2.29.0", "electron": "^30.5.1", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.23", "keytar": "^7.9.0", "lodash": "^4.17.21", diff --git a/packages/data-service/package.json b/packages/data-service/package.json index ebc1f114967..d6a16320fa8 100644 --- a/packages/data-service/package.json +++ b/packages/data-service/package.json @@ -7,7 +7,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "22.23.3", + "version": "22.23.4", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.7", + "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-utils": "^0.6.12", "@mongodb-js/devtools-connect": "^3.2.10", "@mongodb-js/devtools-proxy-support": "^0.3.9", diff --git a/packages/database-model/package.json b/packages/database-model/package.json index 3c3dce5a8ec..44fb1765897 100644 --- a/packages/database-model/package.json +++ b/packages/database-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-database-model", "description": "MongoDB database model", "author": "Lucas Hrabovsky ", - "version": "2.23.3", + "version": "2.23.4", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -30,8 +30,8 @@ "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/databases-collections-list/package.json b/packages/databases-collections-list/package.json index f2bd2e265ce..19533c42d1c 100644 --- a/packages/databases-collections-list/package.json +++ b/packages/databases-collections-list/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.39.0", + "version": "1.40.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,12 +48,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/connection-info": "^0.8.0", - "compass-preferences-model": "^2.28.3", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-info": "^0.9.0", + "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -61,7 +61,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", diff --git a/packages/databases-collections/package.json b/packages/databases-collections/package.json index a34fa649b34..cc3f0e9bae8 100644 --- a/packages/databases-collections/package.json +++ b/packages/databases-collections/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-databases-collections", "description": "Plugin for viewing the list of, creating, and dropping databases and collections", "private": true, - "version": "1.41.0", + "version": "1.42.0", "license": "SSPL", "homepage": "https://github.com/mongodb-js/compass", "bugs": { @@ -45,7 +45,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.7.0", "chai": "^4.2.0", @@ -59,21 +59,21 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.28.0", - "@mongodb-js/compass-components": "^1.29.4", - "@mongodb-js/compass-connections": "^1.42.0", - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-logging": "^1.4.7", - "@mongodb-js/compass-telemetry": "^1.1.7", - "@mongodb-js/compass-workspaces": "^0.23.0", - "@mongodb-js/databases-collections-list": "^1.39.0", - "@mongodb-js/my-queries-storage": "^0.16.0", - "compass-preferences-model": "^2.28.3", - "hadron-app-registry": "^9.2.6", + "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-components": "^1.30.0", + "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-logging": "^1.4.8", + "@mongodb-js/compass-telemetry": "^1.2.0", + "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/databases-collections-list": "^1.40.0", + "@mongodb-js/my-queries-storage": "^0.17.0", + "compass-preferences-model": "^2.29.0", + "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.3", - "mongodb-database-model": "^2.23.3", - "mongodb-instance-model": "^12.24.3", + "mongodb-collection-model": "^5.23.4", + "mongodb-database-model": "^2.23.4", + "mongodb-instance-model": "^12.24.4", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "prop-types": "^15.7.2", diff --git a/packages/hadron-app-registry/package.json b/packages/hadron-app-registry/package.json index 75f0a9476ab..f99f7cfc781 100644 --- a/packages/hadron-app-registry/package.json +++ b/packages/hadron-app-registry/package.json @@ -7,7 +7,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.2.6", + "version": "9.2.7", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", - "@mongodb-js/testing-library-compass": "^1.0.1", + "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "@types/chai": "^4.2.21", "@types/mocha": "^9.0.0", diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index c2cb91e401e..c8d3f7f3205 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -1,7 +1,7 @@ { "name": "hadron-build", "description": "Tooling for Hadron apps like Compass", - "version": "25.5.10", + "version": "25.5.11", "scripts": { "check": "npm run lint && npm run depcheck", "test": "mocha -R spec", diff --git a/packages/instance-model/package.json b/packages/instance-model/package.json index bd144dd9e0a..74939c6c0cf 100644 --- a/packages/instance-model/package.json +++ b/packages/instance-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-instance-model", "description": "MongoDB instance model", "author": "Lucas Hrabovsky ", - "version": "12.24.3", + "version": "12.24.4", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -29,9 +29,9 @@ }, "dependencies": { "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.3", - "mongodb-data-service": "^22.23.3", - "mongodb-database-model": "^2.23.3" + "mongodb-collection-model": "^5.23.4", + "mongodb-data-service": "^22.23.4", + "mongodb-database-model": "^2.23.4" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/my-queries-storage/package.json b/packages/my-queries-storage/package.json index 1913a9e3ded..a7ead1894db 100644 --- a/packages/my-queries-storage/package.json +++ b/packages/my-queries-storage/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.16.0", + "version": "0.17.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -73,10 +73,10 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-editor": "^0.30.0", - "@mongodb-js/compass-user-data": "^0.3.7", + "@mongodb-js/compass-editor": "^0.31.0", + "@mongodb-js/compass-user-data": "^0.3.8", "bson": "^6.7.0", - "hadron-app-registry": "^9.2.6", + "hadron-app-registry": "^9.2.7", "react": "^17.0.2" } } diff --git a/scripts/package.json b/scripts/package.json index 9c20a3595e6..8ac01e8e7a6 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.16.21", + "version": "0.16.22", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" From d82bfb543d377c0ddab79defb4a01ced9c39d565 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 13:02:32 +0000 Subject: [PATCH 35/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6293) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index ea6ba770e01..0c42ec0c93d 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Sep 27, 2024 at 08:38 AM +Generated on Fri, Sep 27, 2024 at 01:02 PM ## Table of Contents From b9957ffb6e2a99ceaa580952a4bde9c8da67484f Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Fri, 27 Sep 2024 18:43:05 +0200 Subject: [PATCH 36/97] feat(global-writes): add unsharded state COMPASS-8276 (#6289) * setup plugin * service and clean up * show tab only if global writes is supported * clean up * fix ts * clean up * depcheck * correct version of redux in lock file * depcheck again * feedback * warning * show warning * title tooltip * unsharded view and tests * sharding in progress * small clean up * correct nums * error toasts * fix html * tests * clean up * pedantic details * add missing header * check * clean up lock file * clean action name * func to component * fix check * use state when waiting for server to accept sharding * name fix * clean up * assert as correct type * add test * remove assertion * add back assertion * avoid cutting off radio buttons * npm i --- package-lock.json | 6 + packages/compass-global-writes/package.json | 3 + .../src/components/index.spec.tsx | 27 +- .../src/components/index.tsx | 59 ++- .../src/components/states/sharding.spec.tsx | 18 + .../src/components/states/sharding.tsx | 42 +++ .../src/components/states/unsharded.tsx | 349 ++++++++++++++++++ .../src/components/states/usharded.spec.tsx | 193 ++++++++++ packages/compass-global-writes/src/index.ts | 6 +- .../src/plugin-title.tsx | 79 +++- .../services/atlas-global-writes-service.ts | 104 ++++++ .../src/store/index.spec.ts | 144 ++++++++ .../compass-global-writes/src/store/index.ts | 27 +- .../src/store/reducer.ts | 222 ++++++++++- .../tests/cluster-api-response.json | 17 + .../tests/create-store.tsx | 79 ++++ 16 files changed, 1347 insertions(+), 28 deletions(-) create mode 100644 packages/compass-global-writes/src/components/states/sharding.spec.tsx create mode 100644 packages/compass-global-writes/src/components/states/sharding.tsx create mode 100644 packages/compass-global-writes/src/components/states/unsharded.tsx create mode 100644 packages/compass-global-writes/src/components/states/usharded.spec.tsx create mode 100644 packages/compass-global-writes/src/store/index.spec.ts create mode 100644 packages/compass-global-writes/tests/cluster-api-response.json create mode 100644 packages/compass-global-writes/tests/create-store.tsx diff --git a/package-lock.json b/package-lock.json index 41d711acf4b..5cbc368642d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45275,10 +45275,13 @@ "@mongodb-js/compass-collection": "^4.42.0", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-field-store": "^9.18.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", + "mongodb-ns": "^2.4.2", "react": "^17.0.2", + "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2" }, @@ -57005,6 +57008,7 @@ "@mongodb-js/compass-collection": "^4.42.0", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-field-store": "^9.18.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57023,9 +57027,11 @@ "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", + "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", "react": "^17.0.2", + "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2", "sinon": "^17.0.1", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index 45b351a258e..af67762fb58 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -56,7 +56,10 @@ "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", + "@mongodb-js/compass-field-store": "^9.18.0", + "mongodb-ns": "^2.4.2", "react": "^17.0.2", + "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2" }, diff --git a/packages/compass-global-writes/src/components/index.spec.tsx b/packages/compass-global-writes/src/components/index.spec.tsx index eeb039f28f5..e264d94197d 100644 --- a/packages/compass-global-writes/src/components/index.spec.tsx +++ b/packages/compass-global-writes/src/components/index.spec.tsx @@ -1,12 +1,29 @@ import React from 'react'; import { expect } from 'chai'; -import { render, screen } from '@mongodb-js/testing-library-compass'; +import { screen } from '@mongodb-js/testing-library-compass'; import { GlobalWrites } from './index'; +import { renderWithStore } from './../../tests/create-store'; describe('Compass GlobalWrites Plugin', function () { - it('renders a Plugin', function () { - render(); - expect(screen.getByText('This feature is currently in development.')).to - .exist; + it('renders plugin in NOT_READY state', function () { + renderWithStore(); + expect(screen.getByText(/loading/i)).to.exist; + }); + + it('renders plugin in UNSHARDED state', function () { + renderWithStore(); + expect(screen.getByTestId('shard-collection-button')).to.exist; + }); + + it('renders plugin in SUBMITTING_FOR_SHARDING state', function () { + renderWithStore( + + ); + expect(screen.getByTestId('shard-collection-button')).to.exist; + }); + + it('renders plugin in SHARDING state', function () { + renderWithStore(); + expect(screen.getByText(/sharding your collection/i)).to.exist; }); }); diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index cf5d50f8f1a..ff0a5b02fa4 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -1,19 +1,28 @@ +import React from 'react'; +import { connect } from 'react-redux'; import { css, spacing, WorkspaceContainer, - Body, + SpinLoaderWithLabel, } from '@mongodb-js/compass-components'; -import React from 'react'; +import type { RootState, ShardingStatus } from '../store/reducer'; +import { ShardingStatuses } from '../store/reducer'; +import UnshardedState from './states/unsharded'; +import ShardingState from './states/sharding'; const containerStyles = css({ - paddingLeft: spacing[3], - paddingRight: spacing[3], + paddingLeft: spacing[400], + paddingRight: spacing[400], display: 'flex', width: '100%', height: '100%', }); +const workspaceContentStyles = css({ + paddingTop: spacing[400], +}); + const centeredContent = css({ display: 'flex', justifyContent: 'center', @@ -21,14 +30,46 @@ const centeredContent = css({ height: '100%', }); -export function GlobalWrites() { +type GlobalWritesProps = { + shardingStatus: ShardingStatus; +}; + +function ShardingStateView({ + shardingStatus, +}: { + shardingStatus: ShardingStatus; +}) { + if (shardingStatus === ShardingStatuses.NOT_READY) { + return ( +
+ +
+ ); + } + + if ( + shardingStatus === ShardingStatuses.UNSHARDED || + shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING + ) { + return ; + } + + if (shardingStatus === ShardingStatuses.SHARDING) { + return ; + } + + return null; +} + +export function GlobalWrites({ shardingStatus }: GlobalWritesProps) { return (
- - - This feature is currently in development. - + +
); } +export default connect((state: RootState) => ({ + shardingStatus: state.status, +}))(GlobalWrites); diff --git a/packages/compass-global-writes/src/components/states/sharding.spec.tsx b/packages/compass-global-writes/src/components/states/sharding.spec.tsx new file mode 100644 index 00000000000..beb6e372928 --- /dev/null +++ b/packages/compass-global-writes/src/components/states/sharding.spec.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { expect } from 'chai'; +import { screen } from '@mongodb-js/testing-library-compass'; +import { ShardingState } from './sharding'; +import { renderWithStore } from '../../../tests/create-store'; + +function renderWithProps( + props?: Partial> +) { + return renderWithStore(); +} + +describe('Sharding', function () { + it('renders the info banner', function () { + renderWithProps(); + expect(screen.getByRole('alert')).to.exist; + }); +}); diff --git a/packages/compass-global-writes/src/components/states/sharding.tsx b/packages/compass-global-writes/src/components/states/sharding.tsx new file mode 100644 index 00000000000..f64e788a4ab --- /dev/null +++ b/packages/compass-global-writes/src/components/states/sharding.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { + Banner, + BannerVariant, + Body, + css, + Link, + spacing, +} from '@mongodb-js/compass-components'; +import { connect } from 'react-redux'; + +const nbsp = '\u00a0'; + +const containerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[400], +}); + +export function ShardingState() { + return ( +
+ + Sharding your collection … + {nbsp}this should not take too long. + + + Once your collection is sharded, this tab will show instructions on + document ‘location’ field formatting, and provide some common command + examples. + + + You can read more about Global Writes in our documentation. + +
+ ); +} + +export default connect()(ShardingState); diff --git a/packages/compass-global-writes/src/components/states/unsharded.tsx b/packages/compass-global-writes/src/components/states/unsharded.tsx new file mode 100644 index 00000000000..073929dfe0d --- /dev/null +++ b/packages/compass-global-writes/src/components/states/unsharded.tsx @@ -0,0 +1,349 @@ +import React, { useCallback, useState } from 'react'; +import { + Banner, + BannerVariant, + Body, + css, + Label, + Link, + spacing, + Subtitle, + InlineInfoLink, + TextInput, + Accordion, + RadioGroup, + Radio, + ComboboxWithCustomOption, + ComboboxOption, + Checkbox, + Button, + SpinLoader, + cx, +} from '@mongodb-js/compass-components'; +import { useAutocompleteFields } from '@mongodb-js/compass-field-store'; +import { connect } from 'react-redux'; +import type { CreateShardKeyData, RootState } from '../../store/reducer'; +import { createShardKey, ShardingStatuses } from '../../store/reducer'; + +const nbsp = '\u00a0'; + +const containerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[400], +}); + +const contentStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[200], +}); + +const listStyles = css({ + listStyle: 'disc', + paddingLeft: 'auto', + marginTop: 0, +}); + +const shardKeyFormFieldsStyles = css({ + display: 'flex', + flexDirection: 'row', + gap: spacing[400], +}); + +const secondShardKeyStyles = css({ + width: '300px', +}); + +const hasedIndexOptionsStyles = css({ + marginLeft: spacing[1200], // This aligns it with the radio button text + marginTop: spacing[400], +}); + +const advanceOptionsGroupStyles = css({ + paddingLeft: spacing[500], // Avoid visual cutoff +}); + +const chunksInputStyles = css({ + display: 'flex', + alignItems: 'center', + gap: spacing[100], +}); + +function CreateShardKeyDescription() { + return ( +
+ Configure compound shard key + + To properly configure Global Writes, your collections must be sharded + using a compound shard key made up of a ‘location’ field and a second + field of your choosing. + + + + All documents in your collection should contain both the ‘location’ + field and your chosen second field. + + +
    +
  • + + The second field should represent a well-distributed and immutable + value to ensure that data is equally distributed across shards in a + particular zone.{nbsp} + + Note that the value of this field cannot be an array. + + {nbsp} + For more information, read our documentation on{' '} + + selecting a shard key + + . + +
  • +
+ + + Once you shard your collection, it cannot be unsharded. + +
+ ); +} + +type ShardingAdvancedOption = 'default' | 'unique-index' | 'hashed-index'; + +function CreateShardKeyForm({ + namespace, + isSubmittingForSharding, + onCreateShardKey, +}: Pick< + UnshardedStateProps, + 'isSubmittingForSharding' | 'namespace' | 'onCreateShardKey' +>) { + const [isAdvancedOptionsOpen, setIsAdvancedOptionsOpen] = useState(false); + const [selectedAdvancedOption, setSelectedAdvancedOption] = + useState('default'); + const fields = useAutocompleteFields(namespace); + + const [secondShardKey, setSecondShardKey] = useState(null); + const [numInitialChunks, setNumInitialChunks] = useState< + string | undefined + >(); + const [isPreSplitData, setIsPreSplitData] = useState(false); + + const onSubmit = useCallback(() => { + if (!secondShardKey) { + return; + } + const isCustomShardKeyHashed = selectedAdvancedOption === 'hashed-index'; + const presplitHashedZones = isCustomShardKeyHashed && isPreSplitData; + + const data: CreateShardKeyData = { + customShardKey: secondShardKey, + isShardKeyUnique: selectedAdvancedOption === 'unique-index', + isCustomShardKeyHashed, + presplitHashedZones, + numInitialChunks: + presplitHashedZones && numInitialChunks + ? Number(numInitialChunks) + : null, + }; + + onCreateShardKey(data); + }, [ + isPreSplitData, + numInitialChunks, + secondShardKey, + selectedAdvancedOption, + onCreateShardKey, + ]); + + return ( +
+
+
+ + +
+
+ + ({ value }))} + className={secondShardKeyStyles} + value={secondShardKey} + searchEmptyMessage="No fields found. Please enter a valid field name." + renderOption={(option, index, isCustom) => { + return ( + + ); + }} + /> +
+
+ + ) => { + setSelectedAdvancedOption( + event.target.value as ShardingAdvancedOption + ); + }} + > + + Default + + +
+ + + Enforce a uniqueness constraint on the shard key of this Global + Collection.{' '} + + Learn more + + +
+
+ +
+ + + Improve even distribution of the sharded data by hashing the + second field of the shard key.{' '} + + Learn more + + +
+
+
+ {selectedAdvancedOption === 'hashed-index' && ( +
+ setIsPreSplitData(!isPreSplitData)} + label="Pre-split data for even distribution." + checked={isPreSplitData} + /> +
+ setNumInitialChunks(event.target.value)} + /> + chunks per shard. +
+
+ )} +
+
+ +
+
+ ); +} + +type UnshardedStateProps = { + namespace: string; + isSubmittingForSharding: boolean; + onCreateShardKey: (data: CreateShardKeyData) => void; +}; +export function UnshardedState(props: UnshardedStateProps) { + return ( +
+ + + To use Global Writes, this collection must be configured with a + compound shard key made up of both a ‘location’ field and an + identifier field that you should provide. + + {nbsp}See the instructions below for details. + + + +
+ ); +} + +export default connect( + (state: RootState) => ({ + namespace: state.namespace, + isSubmittingForSharding: + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING, + }), + { + onCreateShardKey: createShardKey, + } +)(UnshardedState); diff --git a/packages/compass-global-writes/src/components/states/usharded.spec.tsx b/packages/compass-global-writes/src/components/states/usharded.spec.tsx new file mode 100644 index 00000000000..a26d5b228de --- /dev/null +++ b/packages/compass-global-writes/src/components/states/usharded.spec.tsx @@ -0,0 +1,193 @@ +import React from 'react'; +import { expect } from 'chai'; +import { screen, userEvent } from '@mongodb-js/testing-library-compass'; +import { UnshardedState } from './unsharded'; +import { renderWithStore } from '../../../tests/create-store'; +import sinon from 'sinon'; + +function renderWithProps( + props?: Partial> +) { + return renderWithStore( + {}} + {...props} + /> + ); +} + +function setShardingKeyFieldValue(value: string) { + const input = screen.getByLabelText('Second shard key field'); + expect(input).to.exist; + userEvent.type(input, value); + expect(input).to.have.value(value); + userEvent.keyboard('{Escape}'); + + // For some reason, when running tests in electron mode, the value of + // the input field is not being updated. This is a workaround to ensure + // the value is being updated before clicking the submit button. + userEvent.click(screen.getByText(value), undefined, { + skipPointerEventsCheck: true, + }); +} + +describe('UnshardedState', function () { + it('renders the warning banner', function () { + renderWithProps(); + expect(screen.getByRole('alert')).to.exist; + }); + + it('renders the text to the user', function () { + renderWithProps(); + expect(screen.getByTestId('unsharded-text-description')).to.exist; + }); + + context('shard collection form', function () { + let onCreateShardKeySpy: sinon.SinonSpy; + beforeEach(function () { + onCreateShardKeySpy = sinon.spy(); + renderWithProps({ onCreateShardKey: onCreateShardKeySpy }); + }); + + it('renders location form field as disabled', function () { + expect(screen.getByLabelText('First shard key field')).to.have.attribute( + 'aria-disabled', + 'true' + ); + }); + + it('does not allow user to submit when no second shard key is selected', function () { + expect(screen.getByTestId('shard-collection-button')).to.have.attribute( + 'aria-disabled', + 'true' + ); + + userEvent.click(screen.getByTestId('shard-collection-button')); + expect(onCreateShardKeySpy.called).to.be.false; + }); + + it('allows user to input second shard key and submit it', function () { + setShardingKeyFieldValue('name'); + + userEvent.click(screen.getByTestId('shard-collection-button')); + + expect(onCreateShardKeySpy.calledOnce).to.be.true; + expect(onCreateShardKeySpy.firstCall.args[0]).to.deep.equal({ + customShardKey: 'name', + isShardKeyUnique: false, + isCustomShardKeyHashed: false, + presplitHashedZones: false, + numInitialChunks: null, + }); + }); + + it('renders advanced options and radio buttons for: default, unique-index and hashed index', function () { + const accordian = screen.getByText('Advanced Shard Key Configuration'); + expect(accordian).to.exist; + + userEvent.click(accordian); + + const defaultRadio = screen.getByLabelText('Default'); + const uniqueIndexRadio = screen.getByLabelText( + 'Use unique index as the shard key' + ); + const hashedIndexRadio = screen.getByLabelText( + 'Use hashed index as the shard key' + ); + + expect(defaultRadio).to.exist; + expect(uniqueIndexRadio).to.exist; + expect(hashedIndexRadio).to.exist; + }); + + it('allows user to select unique index as shard key', function () { + const accordian = screen.getByText('Advanced Shard Key Configuration'); + userEvent.click(accordian); + + const uniqueIndexRadio = screen.getByLabelText( + 'Use unique index as the shard key' + ); + userEvent.click(uniqueIndexRadio); + + expect(uniqueIndexRadio).to.have.attribute('aria-checked', 'true'); + + setShardingKeyFieldValue('name'); + + userEvent.click(screen.getByTestId('shard-collection-button')); + + expect(onCreateShardKeySpy.calledOnce).to.be.true; + expect(onCreateShardKeySpy.firstCall.args[0]).to.deep.equal({ + customShardKey: 'name', + isShardKeyUnique: true, + isCustomShardKeyHashed: false, + presplitHashedZones: false, + numInitialChunks: null, + }); + }); + + it('allows user to select hashed index as shard key with split-chunks option', function () { + const accordian = screen.getByText('Advanced Shard Key Configuration'); + userEvent.click(accordian); + + const hashedIndexRadio = screen.getByLabelText( + 'Use hashed index as the shard key' + ); + userEvent.click(hashedIndexRadio); + + expect(hashedIndexRadio).to.have.attribute('aria-checked', 'true'); + + setShardingKeyFieldValue('name'); + + // Check pre-split data + userEvent.click(screen.getByTestId('presplit-data-checkbox'), undefined, { + skipPointerEventsCheck: true, + }); + + userEvent.click(screen.getByTestId('shard-collection-button')); + + expect(onCreateShardKeySpy.calledOnce).to.be.true; + expect(onCreateShardKeySpy.firstCall.args[0]).to.deep.equal({ + customShardKey: 'name', + isShardKeyUnique: false, + isCustomShardKeyHashed: true, + presplitHashedZones: true, + numInitialChunks: null, + }); + }); + + it('allows user to select hashed index as shard key with all its options', function () { + const accordian = screen.getByText('Advanced Shard Key Configuration'); + userEvent.click(accordian); + + const hashedIndexRadio = screen.getByLabelText( + 'Use hashed index as the shard key' + ); + userEvent.click(hashedIndexRadio); + + expect(hashedIndexRadio).to.have.attribute('aria-checked', 'true'); + + setShardingKeyFieldValue('name'); + + // Check pre-split data + userEvent.click(screen.getByTestId('presplit-data-checkbox'), undefined, { + skipPointerEventsCheck: true, + }); + + // Enter number of chunks + userEvent.type(screen.getByTestId('chunks-per-shard-input'), '10'); + + userEvent.click(screen.getByTestId('shard-collection-button')); + + expect(onCreateShardKeySpy.calledOnce).to.be.true; + expect(onCreateShardKeySpy.firstCall.args[0]).to.deep.equal({ + customShardKey: 'name', + isShardKeyUnique: false, + isCustomShardKeyHashed: true, + presplitHashedZones: true, + numInitialChunks: 10, + }); + }); + }); +}); diff --git a/packages/compass-global-writes/src/index.ts b/packages/compass-global-writes/src/index.ts index 754e14a2086..a0cadcc0b76 100644 --- a/packages/compass-global-writes/src/index.ts +++ b/packages/compass-global-writes/src/index.ts @@ -1,7 +1,7 @@ import React from 'react'; import { registerHadronPlugin } from 'hadron-app-registry'; -import { GlobalWrites } from './components'; +import GlobalWrites from './components'; import { GlobalWritesTabTitle } from './plugin-title'; import { activateGlobalWritesPlugin } from './store'; import { createLoggerLocator } from '@mongodb-js/compass-logging/provider'; @@ -28,6 +28,6 @@ const CompassGlobalWritesHadronPlugin = registerHadronPlugin( export const CompassGlobalWritesPlugin = { name: 'GlobalWrites' as const, provider: CompassGlobalWritesHadronPlugin, - content: GlobalWrites, - header: GlobalWritesTabTitle, + content: GlobalWrites as React.FunctionComponent, + header: GlobalWritesTabTitle as React.FunctionComponent, }; diff --git a/packages/compass-global-writes/src/plugin-title.tsx b/packages/compass-global-writes/src/plugin-title.tsx index a733e03dee5..e7fd917d6d2 100644 --- a/packages/compass-global-writes/src/plugin-title.tsx +++ b/packages/compass-global-writes/src/plugin-title.tsx @@ -1,5 +1,78 @@ +import { connect } from 'react-redux'; import React from 'react'; +import { type RootState, ShardingStatuses } from './store/reducer'; +import { + Body, + css, + cx, + Icon, + palette, + spacing, + Tooltip, + useDarkMode, +} from '@mongodb-js/compass-components'; -export function GlobalWritesTabTitle() { - return
Global Writes
; -} +const containerStyles = css({ + display: 'flex', + gap: spacing[200], + alignItems: 'center', +}); + +const warningIconStyles = css({ + display: 'flex', +}); + +const iconStylesLight = css({ + color: palette.yellow.dark2, +}); + +const iconStylesDark = css({ + color: palette.yellow.base, +}); + +const PluginTitle = ({ showWarning }: { showWarning: boolean }) => { + const darkMode = useDarkMode(); + return ( +
+ Global Writes{' '} + {showWarning && ( + { + // LG does not bubble up the click event to the parent component, + // so we add noop onClick and let it bubble up. + }} + > + + + } + > + + Collections in Atlas Global Clusters with Atlas-managed sharding + must be configured with a compound shard key made up of both a + 'location' field and an identifier field that you provide. + Please configure sharding here. + + + )} +
+ ); +}; + +export const GlobalWritesTabTitle = connect( + ({ isNamespaceSharded, status }: RootState) => ({ + showWarning: !isNamespaceSharded && status !== ShardingStatuses.NOT_READY, + }) +)(PluginTitle); diff --git a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts index 44c7fc583de..d548eae05c3 100644 --- a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts +++ b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts @@ -1,5 +1,109 @@ +import toNS from 'mongodb-ns'; import type { AtlasService } from '@mongodb-js/atlas-service/provider'; +import type { CreateShardKeyData } from '../store/reducer'; + +type ZoneMapping = unknown; +export type ManagedNamespace = { + db: string; + collection: string; + customShardKey: string; + isCustomShardKeyHashed: boolean; + isShardKeyUnique: boolean; + numInitialChunks: number | null; + presplitHashedZones: boolean; +}; + +type GeoShardingData = { + customZoneMapping: Record; + managedNamespaces: ManagedNamespace[]; + selfManagedSharding: boolean; +}; + +type ClusterDetailsApiResponse = { + geoSharding: GeoShardingData; +}; + +type AtlasCluterInfo = { + projectId: string; + clusterName: string; +}; + +function assertDataIsClusterDetailsApiResponse( + data: any +): asserts data is ClusterDetailsApiResponse { + if (!Array.isArray(data?.geoSharding?.managedNamespaces)) { + throw new Error( + 'Invalid cluster details API response geoSharding.managedNamespaces' + ); + } + if (typeof data?.geoSharding?.customZoneMapping !== 'object') { + throw new Error( + 'Invalid cluster details API response geoSharding.customZoneMapping' + ); + } +} export class AtlasGlobalWritesService { constructor(private atlasService: AtlasService) {} + + private async fetchClusterDetails({ + clusterName, + projectId, + }: AtlasCluterInfo): Promise { + const uri = this.atlasService.cloudEndpoint( + `nds/clusters/${projectId}/${clusterName}` + ); + const response = await this.atlasService.authenticatedFetch(uri); + const clusterDetails = await response.json(); + assertDataIsClusterDetailsApiResponse(clusterDetails); + return clusterDetails; + } + + async isNamespaceManaged( + namespace: string, + atlasClusterInfo: AtlasCluterInfo + ) { + const clusterDetails = await this.fetchClusterDetails(atlasClusterInfo); + const { database, collection } = toNS(namespace); + return clusterDetails.geoSharding.managedNamespaces.some( + (managedNamespace) => { + return ( + managedNamespace.db === database && + managedNamespace.collection === collection + ); + } + ); + } + + async createShardKey( + namespace: string, + keyData: CreateShardKeyData, + atlasClusterInfo: AtlasCluterInfo + ) { + const clusterDetails = await this.fetchClusterDetails(atlasClusterInfo); + const { database, collection } = toNS(namespace); + const requestData: GeoShardingData = { + ...clusterDetails.geoSharding, + managedNamespaces: [ + ...clusterDetails.geoSharding.managedNamespaces, + { + db: database, + collection: collection, + ...keyData, + }, + ], + }; + + const uri = this.atlasService.cloudEndpoint( + `nds/clusters/${atlasClusterInfo.projectId}/${atlasClusterInfo.clusterName}/geoSharding` + ); + + await this.atlasService.authenticatedFetch(uri, { + method: 'PATCH', + body: JSON.stringify(requestData), + headers: { + 'Content-Type': 'application/json', + }, + }); + } } diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts new file mode 100644 index 00000000000..643869dc71b --- /dev/null +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -0,0 +1,144 @@ +import { expect } from 'chai'; +import { type GlobalWritesStore } from '.'; +import { setupStore } from '../../tests/create-store'; +import { + fetchClusterShardingData, + createShardKey, + type CreateShardKeyData, +} from './reducer'; +import sinon from 'sinon'; + +const DB = 'test'; +const COLL = 'coll'; +const NS = `${DB}.${COLL}`; + +function createJsonResponse(data: any) { + return { + json: () => Promise.resolve(data), + }; +} + +function createStore(atlasService: any = {}): GlobalWritesStore { + return setupStore( + { + namespace: NS, + }, + { + atlasService, + } + ); +} + +describe('GlobalWritesStore Store', function () { + it('sets the initial state', function () { + const store = createStore(); + expect(store.getState().namespace).to.equal(NS); + expect(store.getState().status).to.equal('NOT_READY'); + }); + + context('actions', function () { + context('fetchClusterShardingData', function () { + it('when the namespace is not managed', async function () { + const store = createStore({ + authenticatedFetch: () => + createJsonResponse({ + geoSharding: { customZoneMapping: {}, managedNamespaces: [] }, + }), + }); + await store.dispatch(fetchClusterShardingData()); + expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().isNamespaceSharded).to.equal(false); + }); + + // TODO (COMPASS-8277): Add more test for fetching shard key and process errors + }); + + context('createShardKey', function () { + const shardKeyData: CreateShardKeyData = { + customShardKey: 'test', + isCustomShardKeyHashed: true, + isShardKeyUnique: false, + numInitialChunks: 1, + presplitHashedZones: true, + }; + + it('sets SUBMITTING_FOR_SHARDING state when starting to create shard key and sets to SHARDING on success', async function () { + const store = createStore({ + authenticatedFetch: () => + createJsonResponse({ + geoSharding: { customZoneMapping: {}, managedNamespaces: [] }, + }), + }); + + const promise = store.dispatch(createShardKey(shardKeyData)); + expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + + await promise; + expect(store.getState().status).to.equal('SHARDING'); + }); + + it('sets SUBMITTING_FOR_SHARDING state when starting to create shard key and sets to UNSHARDED on failure', async function () { + const store = createStore({ + authenticatedFetch: () => Promise.reject(new Error('error')), + }); + + const promise = store.dispatch(createShardKey(shardKeyData)); + expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + + await promise; + expect(store.getState().status).to.equal('UNSHARDED'); + }); + + it('sends correct data to the server when creating a shard key', async function () { + const alreadyManagedNamespaces = [ + { + db: 'test', + collection: 'one', + customShardKey: 'test', + isCustomShardKeyHashed: true, + isShardKeyUnique: false, + numInitialChunks: 1, + presplitHashedZones: true, + }, + ]; + + const getClusterInfoApiResponse = createJsonResponse({ + geoSharding: { + customZoneMapping: {}, + managedNamespaces: alreadyManagedNamespaces, + }, + }); + + // We call cluster API when store is activated to get the initial state. + // When creating a shard key, we call the same API to fetch the latest list of + // managed namespaces & then send it to the server along with the shard key data. + // So, we mock first and second call with same data. And then third call + // should be to create the shard key. + const fetchStub = sinon + .stub() + .onFirstCall() + .returns(getClusterInfoApiResponse) + .onSecondCall() + .returns(getClusterInfoApiResponse) + .onThirdCall() + .resolves(); + + const store = createStore({ + authenticatedFetch: fetchStub, + }); + + await store.dispatch(createShardKey(shardKeyData)); + + const options = fetchStub.getCall(2).args[1]; + expect(options.method).to.equal('PATCH'); + expect(JSON.parse(options.body)).to.deep.equal({ + customZoneMapping: {}, + managedNamespaces: [ + ...alreadyManagedNamespaces, + { ...shardKeyData, db: DB, collection: COLL }, + ], + }); + }); + }); + }); +}); diff --git a/packages/compass-global-writes/src/store/index.ts b/packages/compass-global-writes/src/store/index.ts index 1ddb8a33263..334034a52a6 100644 --- a/packages/compass-global-writes/src/store/index.ts +++ b/packages/compass-global-writes/src/store/index.ts @@ -1,4 +1,4 @@ -import { createStore, applyMiddleware, type Action } from 'redux'; +import { createStore, applyMiddleware, type Action, type Store } from 'redux'; import thunk from 'redux-thunk'; import type { ActivateHelpers } from 'hadron-app-registry'; import type { Logger } from '@mongodb-js/compass-logging'; @@ -6,9 +6,13 @@ import type { TrackFunction } from '@mongodb-js/compass-telemetry'; import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; import type { CollectionTabPluginMetadata } from '@mongodb-js/compass-collection'; import type { AtlasService } from '@mongodb-js/atlas-service/provider'; -import type { ThunkAction } from 'redux-thunk'; +import type { ThunkAction, ThunkDispatch } from 'redux-thunk'; -import reducer, { ShardingStatuses, type RootState } from './reducer'; +import reducer, { + ShardingStatuses, + fetchClusterShardingData, + type RootState, +} from './reducer'; import { AtlasGlobalWritesService } from '../services/atlas-global-writes-service'; type GlobalWritesExtraArgs = { @@ -24,15 +28,24 @@ export type GlobalWritesThunkAction = ThunkAction< GlobalWritesExtraArgs, A >; +export type GlobalWritesThunkDispatch = + ThunkDispatch; -type GlobalWritesPluginOptions = CollectionTabPluginMetadata; -type GlobalWritesPluginServices = Pick< +export type GlobalWritesPluginOptions = Pick< + CollectionTabPluginMetadata, + 'namespace' +>; +export type GlobalWritesPluginServices = Pick< GlobalWritesExtraArgs, 'logger' | 'track' | 'connectionInfoRef' > & { atlasService: AtlasService; }; +export type GlobalWritesStore = Store & { + dispatch: GlobalWritesThunkDispatch; +}; + export function activateGlobalWritesPlugin( options: GlobalWritesPluginOptions, { @@ -44,7 +57,7 @@ export function activateGlobalWritesPlugin( { cleanup }: ActivateHelpers ) { const atlasGlobalWritesService = new AtlasGlobalWritesService(atlasService); - const store = createStore( + const store: GlobalWritesStore = createStore( reducer, { namespace: options.namespace, @@ -61,5 +74,7 @@ export function activateGlobalWritesPlugin( ) ); + void store.dispatch(fetchClusterShardingData()); + return { store, deactivate: () => cleanup() }; } diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index 5555f3ac410..17e1dba65db 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -1,16 +1,77 @@ import type { Action, Reducer } from 'redux'; +import type { GlobalWritesThunkAction } from '.'; +import { openToast } from '@mongodb-js/compass-components'; +import type { ManagedNamespace } from '../services/atlas-global-writes-service'; + +export function isAction( + action: Action, + type: A['type'] +): action is A { + return action.type === type; +} + +export type CreateShardKeyData = Pick< + ManagedNamespace, + | 'customShardKey' + | 'isCustomShardKeyHashed' + | 'isShardKeyUnique' + | 'numInitialChunks' + | 'presplitHashedZones' +>; + +enum GlobalWritesActionTypes { + IsManagedNamespaceFetched = 'global-writes/IsManagedNamespaceFetched', + SubmittingForShardingStarted = 'global-writes/SubmittingForShardingStarted', + SubmittingForShardingFinished = 'global-writes/SubmittingForShardingFinished', + SubmittingForShardingErrored = 'global-writes/SubmittingForShardingErrored', +} + +type IsManagedNamespaceFetchedAction = { + type: GlobalWritesActionTypes.IsManagedNamespaceFetched; + isNamespaceManaged: boolean; +}; + +type SubmittingForShardingStartedAction = { + type: GlobalWritesActionTypes.SubmittingForShardingStarted; +}; + +type SubmittingForShardingFinishedAction = { + type: GlobalWritesActionTypes.SubmittingForShardingFinished; +}; + +type SubmittingForShardingErroredAction = { + type: GlobalWritesActionTypes.SubmittingForShardingErrored; +}; export enum ShardingStatuses { /** * Initial status, no information available yet. */ NOT_READY = 'NOT_READY', + + /** + * Namespace is not geo-sharded. + */ + UNSHARDED = 'UNSHARDED', + + /** + * State when user submits namespace to be sharded and + * we are waiting for server to accept the request. + */ + SUBMITTING_FOR_SHARDING = 'SUBMITTING_FOR_SHARDING', + + /** + * Namespace is being sharded. + */ + SHARDING = 'SHARDING', } +export type ShardingStatus = keyof typeof ShardingStatuses; + export type RootState = { namespace: string; isNamespaceSharded: boolean; - status: keyof typeof ShardingStatuses; + status: ShardingStatus; }; const initialState: RootState = { @@ -19,8 +80,165 @@ const initialState: RootState = { status: ShardingStatuses.NOT_READY, }; -const reducer: Reducer = (state = initialState) => { +const reducer: Reducer = (state = initialState, action) => { + if ( + isAction( + action, + GlobalWritesActionTypes.IsManagedNamespaceFetched + ) + ) { + return { + ...state, + isNamespaceSharded: action.isNamespaceManaged, + status: !action.isNamespaceManaged + ? ShardingStatuses.UNSHARDED + : state.status, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingStarted + ) + ) { + return { + ...state, + status: ShardingStatuses.SUBMITTING_FOR_SHARDING, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingFinished + ) + ) { + return { + ...state, + isNamespaceSharded: true, + status: ShardingStatuses.SHARDING, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingErrored + ) + ) { + return { + ...state, + status: ShardingStatuses.UNSHARDED, + }; + } + return state; }; +export const fetchClusterShardingData = + (): GlobalWritesThunkAction, IsManagedNamespaceFetchedAction> => + async ( + dispatch, + getState, + { atlasGlobalWritesService, connectionInfoRef, logger } + ) => { + if (!connectionInfoRef.current.atlasMetadata) { + return; + } + + const { namespace } = getState(); + const { clusterName, projectId } = connectionInfoRef.current.atlasMetadata; + + try { + // Call the API to check if the namespace is managed. If the namespace is managed, + // we would want to fetch more data that is needed to figure out the state and + // accordingly show the UI to the user. + const isNamespaceManaged = + await atlasGlobalWritesService.isNamespaceManaged(namespace, { + projectId, + clusterName, + }); + + dispatch({ + type: GlobalWritesActionTypes.IsManagedNamespaceFetched, + isNamespaceManaged, + }); + if (!isNamespaceManaged) { + return; + } + // TODO (COMPASS-8277): Now fetch the sharding key and possible process error. + } catch (error) { + logger.log.error( + logger.mongoLogId(1_001_000_330), + 'AtlasFetchError', + 'Error fetching cluster sharding data', + (error as Error).message + ); + openToast('global-writes-fetch-shard-info-error', { + title: `Failed to fetch sharding information: ${ + (error as Error).message + }`, + dismissible: true, + timeout: 5000, + variant: 'important', + }); + } + }; + +export const createShardKey = + ( + data: CreateShardKeyData + ): GlobalWritesThunkAction< + Promise, + | SubmittingForShardingStartedAction + | SubmittingForShardingFinishedAction + | SubmittingForShardingErroredAction + > => + async ( + dispatch, + getState, + { connectionInfoRef, atlasGlobalWritesService, logger } + ) => { + if (!connectionInfoRef.current.atlasMetadata) { + return; + } + + const { namespace } = getState(); + const { clusterName, projectId } = connectionInfoRef.current.atlasMetadata; + + dispatch({ + type: GlobalWritesActionTypes.SubmittingForShardingStarted, + }); + + try { + await atlasGlobalWritesService.createShardKey(namespace, data, { + projectId, + clusterName, + }); + dispatch({ + type: GlobalWritesActionTypes.SubmittingForShardingFinished, + }); + } catch (error) { + logger.log.error( + logger.mongoLogId(1_001_000_331), + 'AtlasFetchError', + 'Error creating cluster shard key', + { + error: (error as Error).message, + data, + } + ); + openToast('global-writes-create-shard-key-error', { + title: `Failed to create shard key: ${(error as Error).message}`, + dismissible: true, + timeout: 5000, + variant: 'important', + }); + dispatch({ + type: GlobalWritesActionTypes.SubmittingForShardingErrored, + }); + } + }; + export default reducer; diff --git a/packages/compass-global-writes/tests/cluster-api-response.json b/packages/compass-global-writes/tests/cluster-api-response.json new file mode 100644 index 00000000000..1f8c12ab7ed --- /dev/null +++ b/packages/compass-global-writes/tests/cluster-api-response.json @@ -0,0 +1,17 @@ +{ + "geoSharding": { + "customZoneMapping": {}, + "managedNamespaces": [ + { + "collection": "listingsAndReviews", + "customShardKey": "address.country", + "db": "sample_airbnb", + "isCustomShardKeyHashed": false, + "isShardKeyUnique": false, + "numInitialChunks": null, + "presplitHashedZones": false + } + ], + "selfManagedSharding": false + } +} diff --git a/packages/compass-global-writes/tests/create-store.tsx b/packages/compass-global-writes/tests/create-store.tsx new file mode 100644 index 00000000000..0aad67f78dc --- /dev/null +++ b/packages/compass-global-writes/tests/create-store.tsx @@ -0,0 +1,79 @@ +import React from 'react'; +import type { + GlobalWritesPluginOptions, + GlobalWritesPluginServices, +} from '../src/store'; +import { activateGlobalWritesPlugin } from '../src/store'; +import { createActivateHelpers } from 'hadron-app-registry'; +import { createNoopLogger } from '@mongodb-js/compass-logging/provider'; +import { createNoopTrack } from '@mongodb-js/compass-telemetry/provider'; +import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; +import { Provider } from 'react-redux'; +import { render } from '@mongodb-js/testing-library-compass'; + +import clusterApiResponse from './cluster-api-response.json'; + +const atlasService = { + cloudEndpoint: (p: string) => { + return `https://example.com/${p}`; + }, + authenticatedFetch: (url: RequestInfo | URL) => { + if (url.toString().endsWith('nds/clusters/Project0/Cluster0')) { + return Promise.resolve({ + status: 200, + // eslint-disable-next-line @typescript-eslint/require-await + json: async () => clusterApiResponse, + } as Response); + } + return Promise.resolve({ + status: 200, + // eslint-disable-next-line @typescript-eslint/require-await + json: async () => ({}), + } as Response); + }, +} as unknown as AtlasService; + +export const setupStore = ( + options: Partial = {}, + services: Partial = {} +) => { + const connectionInfoRef = { + current: { + id: 'TEST', + atlasMetadata: { + clusterName: 'Cluster0', + clusterType: 'GEOSHARDED', + projectId: 'Project0', + }, + }, + } as ConnectionInfoRef; + + return activateGlobalWritesPlugin( + { + namespace: 'airbnb.listings', + ...options, + }, + { + logger: createNoopLogger('TEST'), + track: createNoopTrack(), + connectionInfoRef, + ...services, + atlasService: { + ...atlasService, + ...services.atlasService, + } as AtlasService, + }, + createActivateHelpers() + ).store; +}; + +export const renderWithStore = ( + component: JSX.Element, + services: Partial = {}, + options: Partial = {} +) => { + const store = setupStore(options, services); + render({component}); + return store; +}; From 1abec5d5b53d0e2803579ef3bc0729598beba7c8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:50:14 +0000 Subject: [PATCH 37/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6297) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0c42ec0c93d..5b4b77c60a1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Sep 27, 2024 at 01:02 PM +Generated on Fri, Sep 27, 2024 at 04:50 PM ## Table of Contents From 7e604db556a29e3c798a91e32a2fd71b3c5f08f4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 03:16:47 +0000 Subject: [PATCH 38/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6298) Update report Co-authored-by: mcasimir <334881+mcasimir@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index e06548e5b02..7f291606895 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Fri Sep 27 2024. +This document was automatically generated on Sun Sep 29 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 5b4b77c60a1..a00acc32f45 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Sep 27, 2024 at 04:50 PM +Generated on Sun, Sep 29, 2024 at 03:16 AM ## Table of Contents From 674b31ab1d5782ed34b33edd60840acd1d7ba999 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 05:04:51 +0000 Subject: [PATCH 39/97] v1.44.5-beta.1 --- package-lock.json | 2 +- packages/compass/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index df0406b55be..939e4b06d63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43760,7 +43760,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.5-beta.0", + "version": "1.44.5-beta.1", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 1cd158350c5..e4803c199c0 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.5-beta.0", + "version": "1.44.5-beta.1", "apiVersion": "3.0.0", "main": "build/main.js", "author": { From be3d5f97c142a1a62831cbb6b70edb79ac62ed02 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 30 Sep 2024 12:55:16 +0200 Subject: [PATCH 40/97] fix: remove compass-preferences from connection-form completely COMPASS-8098 (#6294) --- package-lock.json | 2 - .../components/legacy/favorite-indicator.tsx | 27 -- .../legacy/navigation-items.spec.tsx | 82 ---- .../components/legacy/navigation-items.tsx | 416 ----------------- .../legacy/sidebar-databases-navigation.tsx | 429 ------------------ .../src/components/legacy/sidebar-title.tsx | 174 ------- .../src/components/legacy/sidebar.tsx | 268 ----------- packages/compass-sidebar/src/plugin.tsx | 26 +- packages/connection-form/package.json | 1 - .../src/components/connection-form.spec.tsx | 15 +- .../src/components/favorite-color-picker.tsx | 163 ------- .../components/save-connection-modal.spec.tsx | 168 ------- .../src/components/save-connection-modal.tsx | 76 ---- .../src/hooks/use-connection-color.spec.tsx | 29 -- .../src/hooks/use-connection-color.ts | 62 +-- packages/connection-form/src/index.ts | 3 - 16 files changed, 11 insertions(+), 1930 deletions(-) delete mode 100644 packages/compass-sidebar/src/components/legacy/favorite-indicator.tsx delete mode 100644 packages/compass-sidebar/src/components/legacy/navigation-items.spec.tsx delete mode 100644 packages/compass-sidebar/src/components/legacy/navigation-items.tsx delete mode 100644 packages/compass-sidebar/src/components/legacy/sidebar-databases-navigation.tsx delete mode 100644 packages/compass-sidebar/src/components/legacy/sidebar-title.tsx delete mode 100644 packages/compass-sidebar/src/components/legacy/sidebar.tsx delete mode 100644 packages/connection-form/src/components/favorite-color-picker.tsx delete mode 100644 packages/connection-form/src/components/save-connection-modal.spec.tsx delete mode 100644 packages/connection-form/src/components/save-connection-modal.tsx diff --git a/package-lock.json b/package-lock.json index 5cbc368642d..df47bfba330 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47563,7 +47563,6 @@ "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/shell-bson-parser": "^1.1.2", - "compass-preferences-model": "^2.29.0", "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-build-info": "^1.7.2", @@ -59197,7 +59196,6 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.7.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", diff --git a/packages/compass-sidebar/src/components/legacy/favorite-indicator.tsx b/packages/compass-sidebar/src/components/legacy/favorite-indicator.tsx deleted file mode 100644 index cb504e8deae..00000000000 --- a/packages/compass-sidebar/src/components/legacy/favorite-indicator.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; - -import type { ConnectionFavoriteOptions } from '@mongodb-js/connection-info'; -import { useConnectionColor } from '@mongodb-js/connection-form'; - -import { css, spacing } from '@mongodb-js/compass-components'; - -const favoriteCSS = css({ - height: spacing[2], -}); - -export default function FavoriteIndicator({ - favoriteColor, -}: { - favoriteColor: ConnectionFavoriteOptions['color']; -}) { - const { connectionColorToHex } = useConnectionColor(); - - const favoriteColorHex = connectionColorToHex(favoriteColor) ?? 'transparent'; - - return ( -
- ); -} diff --git a/packages/compass-sidebar/src/components/legacy/navigation-items.spec.tsx b/packages/compass-sidebar/src/components/legacy/navigation-items.spec.tsx deleted file mode 100644 index c4691923791..00000000000 --- a/packages/compass-sidebar/src/components/legacy/navigation-items.spec.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { expect } from 'chai'; -import { render, screen, cleanup } from '@mongodb-js/testing-library-compass'; -import { Provider } from 'react-redux'; -import { createStore, applyMiddleware } from 'redux'; -import thunk from 'redux-thunk'; -import reducer from '../../modules'; - -import { NavigationItems } from './navigation-items'; -import { WorkspacesProvider } from '@mongodb-js/compass-workspaces'; - -const CONNECTION_ID = 'webscale'; - -function renderNavigationItems( - props?: Partial> -) { - const store = createStore(reducer, applyMiddleware(thunk)); - return render( - - null }, - { name: 'Performance', component: () => null }, - ]} - > - { - /* noop */ - }} - showCreateDatabaseAction={true} - isPerformanceTabSupported={true} - activeWorkspace={null} - {...props} - /> - - - ); -} - -const createDatabaseText = 'Create database'; -const refreshCTAText = 'Refresh databases'; - -// TODO(COMPASS-7906): remove -describe.skip('NavigationItems [Component]', function () { - afterEach(cleanup); - - describe('when rendered', function () { - it('renders the create database button', function () { - renderNavigationItems(); - expect(screen.getByLabelText(createDatabaseText)).to.be.visible; - }); - - it('renders the refresh databases button', function () { - renderNavigationItems(); - expect(screen.getByLabelText(refreshCTAText)).to.be.visible; - }); - }); - - describe('when rendered read only', function () { - it('does not render the create database button', function () { - renderNavigationItems({ - showCreateDatabaseAction: false, - }); - expect(screen.queryByLabelText(createDatabaseText)).to.not.exist; - }); - }); - - describe('when performance tab is not supported', function () { - it('renders disabled "Performance" navigation item', function () { - renderNavigationItems({ - isPerformanceTabSupported: false, - }); - - expect(screen.getByRole('button', { name: 'Performance' })).to.exist; - expect( - screen.getByRole('button', { name: 'Performance' }) - ).to.have.attribute('aria-disabled', 'true'); - }); - }); -}); diff --git a/packages/compass-sidebar/src/components/legacy/navigation-items.tsx b/packages/compass-sidebar/src/components/legacy/navigation-items.tsx deleted file mode 100644 index b6ee65ad57a..00000000000 --- a/packages/compass-sidebar/src/components/legacy/navigation-items.tsx +++ /dev/null @@ -1,416 +0,0 @@ -import React, { useCallback, useMemo, useState } from 'react'; -import { connect } from 'react-redux'; -import { - useHoverState, - css, - cx, - ItemActionControls, - spacing, - Icon, - useFocusRing, - mergeProps, - useDefaultAction, - SignalPopover, - PerformanceSignals, - Placeholder, - ContentWithFallback, - palette, - useDarkMode, - Tooltip, -} from '@mongodb-js/compass-components'; -import { - usePreference, - withPreferences, -} from 'compass-preferences-model/provider'; -import type { ItemAction } from '@mongodb-js/compass-components'; -import NavigationItemsFilter from '../navigation-items-filter'; -import SidebarDatabasesNavigation from './sidebar-databases-navigation'; -import type { RootState } from '../../modules'; -import { - useOpenWorkspace, - useWorkspacePlugins, -} from '@mongodb-js/compass-workspaces/provider'; -import type { ConnectionInfo } from '@mongodb-js/connection-info'; -import type { WorkspaceTab } from '@mongodb-js/compass-workspaces'; - -type DatabasesActions = 'open-create-database' | 'refresh-databases'; - -const navigationItem = css({ - cursor: 'pointer', - color: 'var(--item-color)', - border: 'none', - height: spacing[800], - position: 'relative', - - '& .item-action-controls': { - marginLeft: 'auto', - marginRight: spacing[100], - }, - - '&:hover .item-background': { - display: 'block', - backgroundColor: 'var(--item-bg-color-hover)', - }, - - '& .item-action-controls:hover + .item-background': { - display: 'none', - }, - - svg: { - flexShrink: 0, - }, -}); - -const activeNavigationItem = css({ - color: 'var(--item-color-active)', - fontWeight: 'bold', - - '.item-background, :hover .item-background': { - backgroundColor: 'var(--item-bg-color-active)', - }, - - // this is copied from leafygreen's own navigation, hence the pixel values - '::before': { - zIndex: 1, - backgroundColor: 'var(--item-color-active)', - content: '""', - position: 'absolute', - left: '0px', - top: '6px', - bottom: '6px', - width: '4px', - borderRadius: '0px 6px 6px 0px', - }, -}); - -const itemPlaceholderStyles = css({ - width: '100%', - display: 'flex', - alignItems: 'center', - paddingLeft: spacing[400], - height: spacing[800], -}); - -const itemWrapper = css({ - position: 'relative', - display: 'flex', - alignItems: 'center', - height: spacing[800], - gap: spacing[200], - zIndex: 1, -}); - -const itemBackground = css({ - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - zIndex: -1, -}); - -const itemButtonWrapper = css({ - display: 'flex', - alignItems: 'center', - minWidth: 0, - paddingLeft: spacing[400], -}); - -const signalContainerStyles = css({ - flex: 'none', -}); - -const navigationItemLabel = css({ - overflow: 'hidden', - whiteSpace: 'nowrap', - textOverflow: 'ellipsis', - marginLeft: spacing[200], -}); - -const navigationItemDisabledDarkModeStyles = css({ - '--item-color': palette.gray.dark1, - '--item-color-active': palette.gray.dark1, - '--item-bg-color-hover': 'var(--item-bg-color)', -}); - -const navigationItemDisabledLightModeStyles = css({ - '--item-color': palette.gray.base, - '--item-color-active': palette.gray.base, - '--item-bg-color-hover': 'var(--item-bg-color)', -}); - -const databaseCollectionsFilter = css({ - margin: `${spacing[100]}px ${spacing[400]}px`, -}); - -const navigationItemActionIcons = css({ color: 'inherit' }); - -export function NavigationItem({ - onAction, - onClick: onButtonClick, - glyph, - label, - actions, - isActive, - showTooManyCollectionsInsight, - disabled: isButtonDisabled = false, - disabledMessage: buttonDisabledMessage, -}: { - onAction(actionName: Actions, ...rest: any[]): void; - onClick(): void; - glyph: string; - label: string; - actions?: ItemAction[]; - isActive: boolean; - showTooManyCollectionsInsight?: boolean; - disabled?: boolean; - disabledMessage?: string; -}) { - const darkMode = useDarkMode(); - const showInsights = usePreference('showInsights'); - const onClick = useCallback(() => { - if (isButtonDisabled) { - return; - } - onButtonClick(); - }, [isButtonDisabled, onButtonClick]); - const [hoverProps] = useHoverState(); - const focusRingProps = useFocusRing(); - const defaultActionProps = useDefaultAction(onClick); - - const navigationItemProps = mergeProps( - { - className: cx( - navigationItem, - isActive && activeNavigationItem, - isButtonDisabled && - (darkMode - ? navigationItemDisabledDarkModeStyles - : navigationItemDisabledLightModeStyles) - ), - role: 'button', - ['aria-label']: label, - ['aria-current']: isActive, - ['aria-disabled']: isButtonDisabled, - tabIndex: 0, - }, - hoverProps, - defaultActionProps, - focusRingProps - ) as React.HTMLProps; - - return ( - -
-
- - {label} -
- {showInsights && showTooManyCollectionsInsight && ( -
- -
- )} - {!isButtonDisabled && actions && ( - - iconSize="small" - onAction={onAction} - data-testid="sidebar-navigation-item-actions" - actions={actions} - // This is what renders the "create database" action, - // the icons here should always be clearly visible, - // so we let the icon to inherit the foreground color of - // the text - isVisible={true} - iconClassName={navigationItemActionIcons} - collapseToMenuThreshold={3} - > - )} -
-
-
- } - > - {buttonDisabledMessage} -
- ); -} - -const PlaceholderItem = ({ forLabel }: { forLabel: string }) => { - return ( -
- -
- ); -}; - -export function NavigationItems({ - isReady, - connectionInfo, - showCreateDatabaseAction, - isPerformanceTabSupported, - onAction, - activeWorkspace, - showTooManyCollectionsInsight = false, -}: { - isReady?: boolean; - connectionInfo: ConnectionInfo; - showCreateDatabaseAction: boolean; - isPerformanceTabSupported: boolean; - onAction(actionName: string, ...rest: any[]): void; - activeWorkspace: WorkspaceTab | null; - showTooManyCollectionsInsight?: boolean; -}) { - const { - openMyQueriesWorkspace, - openPerformanceWorkspace, - openDatabasesWorkspace, - } = useOpenWorkspace(); - const { hasWorkspacePlugin } = useWorkspacePlugins(); - - const [databasesFilterRegex, setDatabasesFilterRegex] = - useState(null); - - const onDatabasesFilterChange = useCallback( - (filterRegex: RegExp | null) => setDatabasesFilterRegex(filterRegex), - [setDatabasesFilterRegex] - ); - - const databasesActions = useMemo(() => { - const actions: ItemAction[] = [ - { - action: 'refresh-databases', - label: 'Refresh databases', - icon: 'Refresh', - }, - ]; - - if (showCreateDatabaseAction) { - actions.push({ - action: 'open-create-database', - label: 'Create database', - icon: 'Plus', - }); - } - - return actions; - }, [showCreateDatabaseAction]); - - return ( - <> - { - return ( - shouldRender && ( - <> - {hasWorkspacePlugin('My Queries') && ( - - )} - {hasWorkspacePlugin('Performance') && ( - - )} - - - ) - ); - }} - content={(shouldRender) => { - return ( - shouldRender && ( - <> - {hasWorkspacePlugin('My Queries') && ( - - onAction={onAction} - onClick={openMyQueriesWorkspace} - glyph="CurlyBraces" - label="My Queries" - isActive={activeWorkspace?.type === 'My Queries'} - /> - )} - {hasWorkspacePlugin('Performance') && ( - - onAction={onAction} - onClick={() => openPerformanceWorkspace(connectionInfo.id)} - glyph="Gauge" - label="Performance" - isActive={activeWorkspace?.type === 'Performance'} - disabled={!isPerformanceTabSupported} - disabledMessage="Performance metrics are not available for your deployment or to your database user" - /> - )} - - onAction={onAction} - onClick={() => openDatabasesWorkspace(connectionInfo.id)} - glyph="Database" - label="Databases" - actions={databasesActions} - isActive={activeWorkspace?.type === 'Databases'} - showTooManyCollectionsInsight={showTooManyCollectionsInsight} - /> - - ) - ); - }} - > - - - - - ); -} - -const mapStateToProps = ( - state: RootState, - { - connectionInfo, - readOnly: preferencesReadOnly, - }: { connectionInfo: ConnectionInfo; readOnly: boolean } -) => { - const connectionId = connectionInfo.id; - const totalCollectionsCount = ( - state.databases[connectionId]?.databases ?? [] - ).reduce((acc: number, db: { collectionsLength: number }) => { - return acc + db.collectionsLength; - }, 0); - - const isReady = - ['ready', 'refreshing'].includes( - state.instance[connectionId]?.status ?? '' - ) && typeof state.isPerformanceTabSupported[connectionId] === 'boolean'; - - const isDataLake = state.instance[connectionId]?.dataLake.isDataLake ?? false; - const isWritable = state.instance[connectionId]?.isWritable ?? false; - - return { - isReady, - showPerformanceItem: !isDataLake, - showCreateDatabaseAction: !isDataLake && isWritable && !preferencesReadOnly, - showTooManyCollectionsInsight: totalCollectionsCount > 10_000, - isPerformanceTabSupported: - !isDataLake && !!state.isPerformanceTabSupported[connectionId], - }; -}; - -const MappedNavigationItems = withPreferences( - connect(mapStateToProps)(NavigationItems), - ['readOnly'] -); - -export default MappedNavigationItems; diff --git a/packages/compass-sidebar/src/components/legacy/sidebar-databases-navigation.tsx b/packages/compass-sidebar/src/components/legacy/sidebar-databases-navigation.tsx deleted file mode 100644 index 9f9282d5eed..00000000000 --- a/packages/compass-sidebar/src/components/legacy/sidebar-databases-navigation.tsx +++ /dev/null @@ -1,429 +0,0 @@ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { - type MapDispatchToProps, - type MapStateToProps, - connect, -} from 'react-redux'; -import { ConnectionsNavigationTree } from '@mongodb-js/compass-connections-navigation'; -import type { - Actions, - SidebarConnectedConnection, - SidebarItem, -} from '@mongodb-js/compass-connections-navigation'; -import toNS from 'mongodb-ns'; -import { - fetchAllCollections, - onDatabaseExpand, - type Database, -} from '../../modules/databases'; -import type { RootState, SidebarThunkAction } from '../../modules'; -import { useOpenWorkspace } from '@mongodb-js/compass-workspaces/provider'; -import type { ConnectionInfo } from '@mongodb-js/connection-info'; -import { findCollection } from '../../helpers/find-collection'; -import { ConnectionStatus } from '@mongodb-js/compass-connections/provider'; - -type ExpandedDatabases = Record< - Database['_id'], - 'expanded' | 'tempExpanded' | undefined ->; - -interface Match { - isMatch?: boolean; -} - -type Collection = Database['collections'][number]; - -type FilteredCollection = Collection & Match; -type FilteredDatabase = Omit & - Match & { - collections: FilteredCollection[]; - }; - -const filterDatabases = ( - databases: Database[], - regex: RegExp -): FilteredDatabase[] => { - const results: FilteredDatabase[] = []; - for (const db of databases) { - const isMatch = regex.test(db.name); - const childMatches = filterCollections(db.collections, regex); - - if (isMatch || childMatches.length) { - results.push({ - ...db, - isMatch, - collections: - !isMatch && childMatches.length ? childMatches : db.collections, - }); - } - } - return results; -}; - -const filterCollections = ( - collections: Collection[], - regex: RegExp -): FilteredCollection[] => { - return collections - .filter(({ name }) => regex.test(name)) - .map((collection) => ({ ...collection, isMatch: true })); -}; - -/** - * Take the starting expandedDatabase, and add 'tempExpanded' to collapsed items that: - * - are included in the filterResults - * - they either are a direct match, or their children are a direct match - */ -const applyTempExpanded = ( - expandedDatabases: ExpandedDatabases, - filterResults: FilteredDatabase[] -): ExpandedDatabases => { - const newExpanded = { ...expandedDatabases }; - - filterResults.forEach(({ _id: databaseId, isMatch, collections }) => { - const childrenCollsAreMatch = collections.length && collections[0].isMatch; - if ((isMatch || childrenCollsAreMatch) && !newExpanded[databaseId]) { - newExpanded[databaseId] = 'tempExpanded'; - } - }); - return newExpanded; -}; - -/** - * Reverts 'applyTempExpanded', bringing the items back to collapsed state - */ -const clearTempExpanded = ( - expandedDatabases: ExpandedDatabases -): ExpandedDatabases => { - const cleared: ExpandedDatabases = Object.fromEntries( - Object.entries(expandedDatabases || []).map(([dbId, dbState]) => [ - dbId, - dbState === 'tempExpanded' ? undefined : dbState, - ]) - ); - return cleared; -}; -type SidebarDatabasesNavigationComponentProps = Pick< - React.ComponentProps, - 'activeWorkspace' -> & { - connectionInfo: ConnectionInfo; - filterRegex: RegExp | null; -}; - -type MapStateProps = { - connections: SidebarConnectedConnection[]; -}; - -type MapDispatchProps = { - fetchAllCollections(connectionId: string): void; - onNamespaceAction( - connectionId: string, - namespace: string, - action: Actions - ): void; - onDatabaseExpand(connectionId: string, databaseId: string): void; -}; - -type SidebarDatabasesNavigationProps = - SidebarDatabasesNavigationComponentProps & MapStateProps & MapDispatchProps; - -function SidebarDatabasesNavigation({ - connections, - onNamespaceAction: _onNamespaceAction, - onDatabaseExpand: _onDatabaseExpand, - fetchAllCollections: _fetchAllCollections, - activeWorkspace, - filterRegex, -}: SidebarDatabasesNavigationProps) { - const { - openCollectionsWorkspace, - openCollectionWorkspace, - openEditViewWorkspace, - } = useOpenWorkspace(); - const connection = connections[0]; - const connectionId = connection.connectionInfo.id; - - const [expandedDatabases, setExpandedDatabases] = useState( - {} - ); - const [filteredDatabases, setFilteredDatabases] = useState< - Database[] | undefined - >(undefined); - - const handleDatabaseExpand = useCallback( - (actionConnectionId: string, namespace: string, isExpanded: boolean) => { - if (actionConnectionId !== connectionId) return; - const { database: databaseId } = toNS(namespace); - setExpandedDatabases((expandedDatabases) => { - return { - ...expandedDatabases, - [databaseId]: isExpanded ? 'expanded' : undefined, - }; - }); - _onDatabaseExpand(connectionId, databaseId); - }, - [setExpandedDatabases, _onDatabaseExpand, connectionId] - ); - - const connectionsButOnlyIfFilterIsActive = filteredDatabases && connections; - const filteredConnections: SidebarConnectedConnection[] | undefined = - useMemo(() => { - if (filteredDatabases && connectionsButOnlyIfFilterIsActive) { - return [ - { - ...connectionsButOnlyIfFilterIsActive[0], - databases: filteredDatabases, - }, - ]; - } - }, [filteredDatabases, connectionsButOnlyIfFilterIsActive]); - - const expandedMemo: Record> = useMemo( - () => ({ - [connectionId]: Object.fromEntries( - Object.entries(expandedDatabases || {}).map(([dbId, dbState]) => [ - dbId, - !!dbState, - ]) - ), - }), - [expandedDatabases, connectionId] - ); - - const temporarilyExpand = useCallback( - (filterResults: FilteredDatabase[]) => { - setExpandedDatabases((expandedDatabases: ExpandedDatabases) => { - const expandedStart = clearTempExpanded(expandedDatabases); - return applyTempExpanded(expandedStart, filterResults); - }); - }, - [setExpandedDatabases] - ); - - const collapseAllTemporarilyExpanded = useCallback(() => { - setExpandedDatabases(clearTempExpanded); - }, [setExpandedDatabases]); - - // filter updates - // databases change often, but the effect only uses databases if the filter is active - // so we use this conditional dependency to avoid too many calls - const databasesButOnlyIfFilterIsActive = - filterRegex && connections[0].databases; - useEffect(() => { - if (!filterRegex) { - setFilteredDatabases(undefined); - collapseAllTemporarilyExpanded(); - } else if (databasesButOnlyIfFilterIsActive) { - // the above check is extra just to please TS - - // When filtering, emit an event so that we can fetch all collections. This - // is required as a workaround for the synchronous nature of the current - // filtering feature - _fetchAllCollections(connectionId); - - const results = filterDatabases( - databasesButOnlyIfFilterIsActive, - filterRegex - ); - setFilteredDatabases(results); - temporarilyExpand(results); - } - }, [ - connectionId, - filterRegex, - databasesButOnlyIfFilterIsActive, - setFilteredDatabases, - temporarilyExpand, - collapseAllTemporarilyExpanded, - _fetchAllCollections, - ]); - - const onNamespaceAction = useCallback( - (connectionId: string, ns: string, action: Actions) => { - switch (action) { - case 'select-database': - openCollectionsWorkspace(connectionId, ns); - return; - case 'select-collection': - openCollectionWorkspace(connectionId, ns); - return; - case 'open-in-new-tab': - openCollectionWorkspace(connectionId, ns, { newTab: true }); - return; - case 'modify-view': { - const coll = findCollection(ns, connection.databases || []); - - if (coll && coll.sourceName && coll.pipeline) { - openEditViewWorkspace(connectionId, coll._id, { - sourceName: coll.sourceName, - sourcePipeline: coll.pipeline, - newTab: true, - }); - } - return; - } - default: - _onNamespaceAction(connectionId, ns, action); - return; - } - }, - [ - connection, - openCollectionsWorkspace, - openCollectionWorkspace, - openEditViewWorkspace, - _onNamespaceAction, - ] - ); - - // auto-expanding on a workspace change - useEffect(() => { - if ( - activeWorkspace && - (activeWorkspace.type === 'Collections' || - activeWorkspace.type === 'Collection') - ) { - const namespace: string = activeWorkspace.namespace; - handleDatabaseExpand(connectionId, namespace, true); - } - }, [activeWorkspace, handleDatabaseExpand, connectionId]); - - const onItemAction = useCallback( - (item: SidebarItem, action: Actions) => { - if (item.type !== 'connection') { - const ns = item.type === 'database' ? item.dbName : item.namespace; - onNamespaceAction(item.connectionId, ns, action); - } - }, - [onNamespaceAction] - ); - - const onItemExpand = useCallback( - (item: SidebarItem, isExpanded: boolean) => { - if (item.type === 'database') { - handleDatabaseExpand(item.connectionId, item.dbName, isExpanded); - } - }, - [handleDatabaseExpand] - ); - - return ( - - ); -} - -const mapStateToProps: MapStateToProps< - MapStateProps, - SidebarDatabasesNavigationComponentProps, - RootState -> = (state: RootState, { connectionInfo }) => { - const connectionId = connectionInfo.id; - const instance = state.instance[connectionId]; - const { databases } = state.databases[connectionId] || {}; - - const status = instance?.databasesStatus; - const isReady = - status !== undefined && !['initial', 'fetching'].includes(status); - - const isDataLake = instance?.dataLake?.isDataLake ?? false; - const isWritable = instance?.isWritable ?? false; - - return { - connections: [ - { - isReady, - isDataLake, - isWritable, - name: '', - connectionInfo, - databasesLength: databases?.length || 0, - databasesStatus: (status ?? - 'fetching') as SidebarConnectedConnection['databasesStatus'], - databases: databases ?? [], - connectionStatus: ConnectionStatus.Connected, - // TODO: this should be state formed in render, but alas, refactoring - // this is too much work and this code will go away soon anyway. This - // flag is only relevant for compass-web, so we'll just set it to always - // `true` here - isPerformanceTabAvailable: true, - isPerformanceTabSupported: - !isDataLake && !!state.isPerformanceTabSupported[connectionId], - isGenuineMongoDB: instance?.genuineMongoDB.isGenuine !== false, - csfleMode: instance?.csfleMode, - }, - ], - }; -}; - -const onNamespaceAction = ( - connectionId: ConnectionInfo['id'], - namespace: string, - action: Actions -): SidebarThunkAction => { - return (_dispatch, getState, { globalAppRegistry }) => { - // TODO: COMPASS-7719 to adapt modals to be multiple connection aware - const emit = (action: string, ...rest: any[]) => { - globalAppRegistry.emit(action, ...rest); - }; - const ns = toNS(namespace); - switch (action) { - case 'drop-database': - emit('open-drop-database', ns.database, { connectionId }); - return; - case 'rename-collection': - emit('open-rename-collection', ns, { connectionId }); - return; - case 'drop-collection': - emit('open-drop-collection', ns, { connectionId }); - return; - case 'create-collection': - emit('open-create-collection', ns, { - connectionId, - }); - return; - case 'duplicate-view': { - const coll = findCollection( - namespace, - getState().databases[connectionId].databases - ); - if (coll && coll.sourceName) { - emit( - 'open-create-view', - { - source: coll.sourceName, - pipeline: coll.pipeline, - duplicate: true, - }, - { - connectionId, - } - ); - } - return; - } - default: - // no-op - } - }; -}; - -const mapDispatchToProps: MapDispatchToProps< - MapDispatchProps, - SidebarDatabasesNavigationComponentProps -> = { - onNamespaceAction, - fetchAllCollections, - onDatabaseExpand, -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SidebarDatabasesNavigation); diff --git a/packages/compass-sidebar/src/components/legacy/sidebar-title.tsx b/packages/compass-sidebar/src/components/legacy/sidebar-title.tsx deleted file mode 100644 index ff7714a7455..00000000000 --- a/packages/compass-sidebar/src/components/legacy/sidebar-title.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import React, { useCallback, useMemo } from 'react'; - -import { - MongoDBLogoMark, - css, - cx, - palette, - spacing, - ItemActionControls, - useDarkMode, - useDefaultAction, -} from '@mongodb-js/compass-components'; - -import type { ItemAction } from '@mongodb-js/compass-components'; -import { useOpenWorkspace } from '@mongodb-js/compass-workspaces/provider'; -import FavoriteIndicator from './favorite-indicator'; - -type Action = - | 'copy-connection-string' - | 'edit-favorite' - | 'open-connection-info' - | 'expand-sidebar' - | 'refresh-data' - | 'open-compass-settings'; - -const titleLabel = css({ - overflow: 'hidden', - whiteSpace: 'nowrap', - textOverflow: 'ellipsis', - fontSize: '18px', - fontWeight: 600, // TODO: 500 once we have the new font - marginLeft: '2px', // hardcoded to try and match the design - paddingRight: spacing[2], -}); - -const TitleLabel: React.FunctionComponent> = ({ - children, - className, - ...props -}) => { - return ( - - {children} - - ); -}; - -const titleLogo = css({ - width: spacing[5], - marginTop: '6px', // hardcoded to try and match the design - flexShrink: 0, -}); - -function TitleLogo() { - const darkMode = useDarkMode(); - - return ( -
- -
- ); -} - -const sidebarTitle = css({ - display: 'flex', - alignItems: 'center', - cursor: 'pointer', - color: 'var(--title-color)', - backgroundColor: 'var(--title-bg-color)', - - height: spacing[6], - padding: spacing[3], -}); - -const iconButtonDark = css({ - color: palette.gray.dark3, - '&:hover': { - color: palette.white, - }, -}); - -const iconButtonLight = css({ - color: palette.white, - '&:hover': { - color: palette.gray.dark3, - }, -}); - -const iconButtonStyle = css({ - color: 'inherit', -}); - -function SidebarTitle({ - title, - isFavorite, - favoriteColor, - onAction, -}: { - title: string; - isFavorite: boolean; - favoriteColor?: string; - onAction(actionName: Action, ...rest: any[]): void; -}) { - const { openMyQueriesWorkspace } = useOpenWorkspace(); - - const actions = useMemo(() => { - const actions: ItemAction[] = []; - - actions.push({ - action: 'copy-connection-string', - label: 'Copy connection string', - icon: 'Copy', - }); - - actions.push({ - action: 'edit-favorite', - label: isFavorite ? 'Edit favorite' : 'Save favorite', - icon: 'Favorite', - }); - - actions.push({ - action: 'open-connection-info', - label: 'Connection info', - icon: 'Connect', - }); - - actions.push({ - action: 'open-compass-settings', - label: 'Compass Settings', - icon: 'Settings', - }); - - return actions; - }, [isFavorite]); - - const darkMode = useDarkMode(); - - const onClick = useCallback(() => { - openMyQueriesWorkspace(); - }, [openMyQueriesWorkspace]); - - const defaultActionProps = useDefaultAction(onClick); - - return ( - <> -
- - {title} - - onAction={onAction} - iconSize="small" - actions={actions} - data-testid="sidebar-title-actions" - iconClassName={cx( - iconButtonStyle, - darkMode ? iconButtonDark : iconButtonLight - )} - > -
- {isFavorite && favoriteColor && ( - - )} - - ); -} - -export default SidebarTitle; diff --git a/packages/compass-sidebar/src/components/legacy/sidebar.tsx b/packages/compass-sidebar/src/components/legacy/sidebar.tsx deleted file mode 100644 index 61bc871f409..00000000000 --- a/packages/compass-sidebar/src/components/legacy/sidebar.tsx +++ /dev/null @@ -1,268 +0,0 @@ -import React, { useCallback, useState } from 'react'; -import { cloneDeep } from 'lodash'; -import { connect } from 'react-redux'; -import { getConnectionTitle } from '@mongodb-js/connection-info'; -import type { ConnectionInfo } from '@mongodb-js/connection-info'; -import { - css, - spacing, - ResizableSidebar, - useToast, -} from '@mongodb-js/compass-components'; -import { SaveConnectionModal } from '@mongodb-js/connection-form'; -import { - useConnectionInfo, - useConnections, -} from '@mongodb-js/compass-connections/provider'; - -import SidebarTitle from './sidebar-title'; -import NavigationItems from './navigation-items'; -import ConnectionInfoModal from '../connection-info-modal'; -import CSFLEConnectionModal from '../csfle-connection-modal'; -import CSFLEMarker from '../csfle-marker'; -import NonGenuineMarker from '../non-genuine-marker'; - -import { setConnectionIsCSFLEEnabled } from '../../modules/data-service'; -import { useMaybeProtectConnectionString } from '@mongodb-js/compass-maybe-protect-connection-string'; -import type { RootState, SidebarThunkAction } from '../../modules'; -import type { WorkspaceTab } from '@mongodb-js/compass-workspaces'; - -const TOAST_TIMEOUT_MS = 5000; // 5 seconds. - -const sidebarStyles = css({ - // Sidebar internally has z-indexes higher than zero. We set zero on the - // container so that the sidebar doesn't stick out in the layout z ordering - // with other parts of the app - zIndex: 0, -}); - -const connectionBadgesContainerStyles = css({ - display: 'grid', - gridTemplateColumns: '100%', - gridTemplateRows: 'auto', - gap: spacing[2], - marginTop: spacing[3], - '&:empty': { - display: 'none', - }, -}); - -const navigationItemsContainerStyles = css({ - display: 'flex', - flexDirection: 'column', - flex: 1, - marginTop: spacing[2], - '&:first-child': { - marginTop: 2, - }, -}); - -// eslint-disable-next-line no-empty-pattern -export function Sidebar({ - showSidebarHeader = true, - activeWorkspace, - connectionInfo, - setConnectionIsCSFLEEnabled, - isGenuine, - csfleMode, - onSidebarAction, -}: { - showSidebarHeader?: boolean; - activeWorkspace: WorkspaceTab | null; - connectionInfo: ConnectionInfo; - setConnectionIsCSFLEEnabled: (connectionId: string, enabled: boolean) => void; - isGenuine?: boolean; - csfleMode?: 'enabled' | 'disabled' | 'unavailable'; - onSidebarAction(action: string, ...rest: any[]): void; -}) { - const { saveEditedConnection, showNonGenuineMongoDBWarningModal } = - useConnections(); - const [isFavoriteModalVisible, setIsFavoriteModalVisible] = useState(false); - const [isConnectionInfoModalVisible, setIsConnectionInfoModalVisible] = - useState(false); - - const onClickSaveFavorite = useCallback( - (newFavoriteInfo) => { - setIsFavoriteModalVisible(false); - - return saveEditedConnection({ - ...cloneDeep(connectionInfo), - favorite: newFavoriteInfo, - savedConnectionType: 'favorite', - }); - }, - [connectionInfo, saveEditedConnection] - ); - - const { openToast } = useToast('compass-connections'); - const maybeProtectConnectionString = useMaybeProtectConnectionString(); - - const onAction = useCallback( - (action: string, ...rest: any[]) => { - async function copyConnectionString(connectionString: string) { - try { - await navigator.clipboard.writeText(connectionString); - openToast('copy-to-clipboard', { - title: 'Success', - description: 'Copied to clipboard.', - variant: 'success', - timeout: TOAST_TIMEOUT_MS, - }); - } catch (err) { - openToast('copy-to-clipboard', { - title: 'Error', - description: - 'An error occurred when copying to clipboard. Please try again.', - variant: 'warning', - timeout: TOAST_TIMEOUT_MS, - }); - } - } - - if (action === 'copy-connection-string') { - void copyConnectionString( - maybeProtectConnectionString( - connectionInfo.connectionOptions.connectionString ?? '' - ) - ); - return; - } - - if (action === 'edit-favorite') { - setIsFavoriteModalVisible(true); - return; - } - - if (action === 'open-connection-info') { - setIsConnectionInfoModalVisible(true); - return; - } - - if (action === 'open-create-database') { - onSidebarAction(action, ...rest, { - connectionId: connectionInfo.id, - }); - return; - } - - if (action === 'refresh-databases') { - onSidebarAction(action, ...rest, { - connectionId: connectionInfo.id, - }); - return; - } - - onSidebarAction(action, ...rest); - }, - [ - connectionInfo.id, - onSidebarAction, - openToast, - maybeProtectConnectionString, - connectionInfo.connectionOptions.connectionString, - ] - ); - - const [isCSFLEModalVisible, setIsCSFLEModalVisible] = useState(false); - - const toggleCSFLEModalVisible = useCallback(() => { - setIsCSFLEModalVisible(!isCSFLEModalVisible); - }, [setIsCSFLEModalVisible, isCSFLEModalVisible]); - - return ( - - <> - {showSidebarHeader && ( -
- -
- { - showNonGenuineMongoDBWarningModal(connectionInfo.id); - }} - /> - -
-
- )} - -
- -
- - setIsFavoriteModalVisible(false)} - onSaveClicked={(favoriteInfo) => onClickSaveFavorite(favoriteInfo)} - /> - setIsCSFLEModalVisible(false)} - setConnectionIsCSFLEEnabled={(enabled) => - setConnectionIsCSFLEEnabled(connectionInfo.id, enabled) - } - /> - setIsConnectionInfoModalVisible(false)} - /> - -
- ); -} - -const mapStateToProps = ( - state: RootState, - { - connectionInfo, - }: { - connectionInfo: ConnectionInfo; - } -) => { - return { - isGenuine: state.instance[connectionInfo.id]?.genuineMongoDB.isGenuine, - csfleMode: state.instance[connectionInfo.id]?.csfleMode, - }; -}; - -const onSidebarAction = ( - action: string, - ...rest: any[] -): SidebarThunkAction => { - return (_dispatch, _getState, { globalAppRegistry }) => { - globalAppRegistry.emit(action, ...rest); - }; -}; - -const MappedSidebar = connect(mapStateToProps, { - setConnectionIsCSFLEEnabled, - onSidebarAction, -})(Sidebar); - -export default function SidebarWithConnectionInfo( - props: Omit, 'connectionInfo'> -) { - const connectionInfo = useConnectionInfo(); - return ( - - ); -} diff --git a/packages/compass-sidebar/src/plugin.tsx b/packages/compass-sidebar/src/plugin.tsx index 9b387b75806..4f5b2ae5540 100644 --- a/packages/compass-sidebar/src/plugin.tsx +++ b/packages/compass-sidebar/src/plugin.tsx @@ -6,11 +6,8 @@ import { defaultSidebarWidth, } from '@mongodb-js/compass-components'; import { useActiveWorkspace } from '@mongodb-js/compass-workspaces/provider'; -import Sidebar from './components/legacy/sidebar'; -import { usePreference } from 'compass-preferences-model/provider'; import MultipleConnectionSidebar from './components/multiple-connections/sidebar'; import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; -import { useSingleConnectionModeConnectionInfoStatus } from '@mongodb-js/compass-connections/provider'; const errorBoundaryStyles = css({ width: defaultSidebarWidth, @@ -27,11 +24,6 @@ const SidebarPlugin: React.FunctionComponent = ({ showSidebarHeader, onOpenConnectViaModal, }) => { - const isMultiConnectionEnabled = usePreference( - 'enableMultipleConnectionSystem' - ); - const { connectionInfo } = useSingleConnectionModeConnectionInfoStatus(); - const activeWorkspace = useActiveWorkspace(); const { log, mongoLogId } = useLogger('COMPASS-SIDEBAR-UI'); @@ -48,19 +40,11 @@ const SidebarPlugin: React.FunctionComponent = ({ ); }} > - {isMultiConnectionEnabled && ( - - )} - {!isMultiConnectionEnabled && connectionInfo && ( - - )} + ); }; diff --git a/packages/connection-form/package.json b/packages/connection-form/package.json index 410310a5bcb..9c511ef3e38 100644 --- a/packages/connection-form/package.json +++ b/packages/connection-form/package.json @@ -52,7 +52,6 @@ "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/shell-bson-parser": "^1.1.2", - "compass-preferences-model": "^2.29.0", "lodash": "^4.17.21", "mongodb": "^6.8.0", "mongodb-build-info": "^1.7.2", diff --git a/packages/connection-form/src/components/connection-form.spec.tsx b/packages/connection-form/src/components/connection-form.spec.tsx index 0620a892e00..46485aac68a 100644 --- a/packages/connection-form/src/components/connection-form.spec.tsx +++ b/packages/connection-form/src/components/connection-form.spec.tsx @@ -9,8 +9,6 @@ import { within, } from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; -import type { PreferencesAccess } from 'compass-preferences-model'; -import { createSandboxFromDefaultPreferences } from 'compass-preferences-model'; import ConnectionForm from './connection-form'; import type { ConnectionFormProps } from './connection-form'; import Sinon from 'sinon'; @@ -32,7 +30,6 @@ const saveAndConnectText = 'Save & Connect'; const favoriteText = 'FAVORITE'; describe('ConnectionForm Component', function () { - let preferences: PreferencesAccess; function renderForm(props: Partial = {}) { return render( void; - code: string; - hex: string; -}): React.ReactElement { - return ( - - ); -} - -export function FavoriteColorPicker({ - colorCode, - onChange, -}: { - colorCode?: string; - onChange: (newColor?: string) => void; -}): React.ReactElement { - const selectedColorCode = legacyColorsToColorCode(colorCode); - const { connectionColorToHex: colorCodeToHex } = useConnectionColor(); - const selectedColorHex = colorCodeToHex(selectedColorCode); - return ( - <> - -
- - {CONNECTION_COLOR_CODES.map((colorCode) => { - const hex = colorCodeToHex(colorCode) || ''; - return ( - { - onChange(colorCode); - }} - isSelected={colorCode === selectedColorCode} - hex={hex} - code={colorCode} - key={colorCode} - /> - ); - })} -
- - ); -} diff --git a/packages/connection-form/src/components/save-connection-modal.spec.tsx b/packages/connection-form/src/components/save-connection-modal.spec.tsx deleted file mode 100644 index 4399932522b..00000000000 --- a/packages/connection-form/src/components/save-connection-modal.spec.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React from 'react'; -import { - render, - screen, - cleanup, - fireEvent, -} from '@mongodb-js/testing-library-compass'; -import { expect } from 'chai'; -import sinon from 'sinon'; - -import SaveConnectionModal from './save-connection-modal'; - -describe('SaveConnectionModal Component', function () { - let onSaveSpy: sinon.SinonSpy; - let onCancelSpy: sinon.SinonSpy; - - beforeEach(function () { - onSaveSpy = sinon.spy(); - onCancelSpy = sinon.spy(); - }); - - afterEach(function () { - cleanup(); - }); - - describe('when the loaded connection is not a favorite', function () { - beforeEach(function () { - render( - - ); - }); - - it('should have the title "Save connection to favorites"', function () { - expect(screen.getByText('Save connection to favorites')).to.be.visible; - }); - - it('should have the no-color option already selected', function () { - expect(screen.getByTestId('color-pick-no-color-selected')).to.be.visible; - }); - - describe('when the color and name are changed and save is clicked', function () { - beforeEach(function () { - fireEvent.click(screen.getByTestId('color-pick-color3')); - - const textArea = screen.getByRole('textbox'); - - fireEvent.change(textArea, { - target: { value: 'delicious cuban sandwich' }, - }); - }); - - describe('when the cancel button is clicked', function () { - beforeEach(function () { - fireEvent.click(screen.getByText('Cancel')); - }); - - it('should not have called to save', function () { - expect(onSaveSpy.callCount).to.equal(0); - }); - - it('should have called the cancel spy', function () { - expect(onCancelSpy.callCount).to.equal(1); - }); - }); - - describe('when the save button is clicked', function () { - beforeEach(function () { - fireEvent.click(screen.getByText('Save')); - }); - - it('should have called to save with the new config', function () { - expect(onSaveSpy.callCount).to.equal(1); - expect(onSaveSpy.firstCall.args[0]).to.deep.equal({ - name: 'delicious cuban sandwich', - color: 'color3', - }); - }); - - it('should not have called the cancel spy', function () { - expect(onCancelSpy.callCount).to.equal(0); - }); - }); - }); - }); - - describe('when the connection does not have a name', function () { - beforeEach(function () { - render( - - ); - }); - - it('renders save disabled', function () { - const button = screen.getByText('Save').closest('button'); - expect(button?.getAttribute('aria-disabled')).to.equal('true'); - }); - }); - - describe('when the connection does have a name', function () { - beforeEach(function () { - render( - - ); - }); - - it('renders save as enabled', function () { - const button = screen.getByText('Save').closest('button'); - expect(button?.getAttribute('aria-disabled')).to.not.equal('true'); - }); - }); - - describe('when the loaded connection is already a favorite', function () { - beforeEach(function () { - render( - - ); - }); - - it('should have the title "Edit favorite"', function () { - expect(screen.getByText('Edit favorite')).to.be.visible; - }); - - it('should have the color already selected', function () { - expect(screen.queryByTestId('color-pick-no-color-selected')).to.not.exist; - expect(screen.getByTestId('color-pick-color3-selected')).to.be.visible; - }); - }); - - describe('when saveText is passed', function () { - beforeEach(function () { - render( - - ); - }); - - it('should set the button text accordingly', function () { - expect(screen.getByText('Save & Connect')).to.be.visible; - }); - }); -}); diff --git a/packages/connection-form/src/components/save-connection-modal.tsx b/packages/connection-form/src/components/save-connection-modal.tsx deleted file mode 100644 index 483720c938d..00000000000 --- a/packages/connection-form/src/components/save-connection-modal.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React, { useState } from 'react'; -import { - FormModal, - FormFieldContainer, - TextInput, -} from '@mongodb-js/compass-components'; -import type { ConnectionFavoriteOptions } from '@mongodb-js/connection-info'; - -import { FavoriteColorPicker } from './favorite-color-picker'; - -function SaveConnectionModal({ - initialFavoriteInfo, - onCancelClicked, - onSaveClicked, - open, - saveText = 'Save', -}: { - initialFavoriteInfo?: ConnectionFavoriteOptions; - onCancelClicked: () => void; - onSaveClicked: (favoriteInfo: ConnectionFavoriteOptions) => Promise; - open: boolean; - saveText?: string; -}): React.ReactElement { - const [editingFavorite, setEditingFavorite] = useState({ - name: '', - ...initialFavoriteInfo, - }); - - return ( - { - void onSaveClicked({ - ...editingFavorite, - }); - }} - submitDisabled={(editingFavorite.name || '').trim() ? false : true} - onCancel={onCancelClicked} - submitButtonText={saveText} - data-testid="favorite-modal" - > - - ) => { - setEditingFavorite({ - ...editingFavorite, - name: value, - }); - }} - label="Name" - value={editingFavorite.name} - /> - - - { - setEditingFavorite({ - ...editingFavorite, - color: newColor, - }); - }} - /> - - - ); -} - -export default SaveConnectionModal; diff --git a/packages/connection-form/src/hooks/use-connection-color.spec.tsx b/packages/connection-form/src/hooks/use-connection-color.spec.tsx index fcbdf223944..5c4e6dfa761 100644 --- a/packages/connection-form/src/hooks/use-connection-color.spec.tsx +++ b/packages/connection-form/src/hooks/use-connection-color.spec.tsx @@ -33,35 +33,6 @@ describe('useConnectionColor', function () { } }); - // TODO(COMPASS-7906): remove - it.skip('converts legacy colors', function () { - const legacyColors = { - '#5fc86e': 'color1', - '#326fde': 'color2', - '#deb342': 'color3', - '#d4366e': 'color4', - '#59c1e2': 'color5', - '#2c5f4a': 'color6', - '#d66531': 'color7', - '#773819': 'color8', - '#3b8196': 'color9', - '#ababab': 'color10', - }; - - for (const [legacyColor, colorCode] of Object.entries(legacyColors)) { - const { container: container1 } = render( - - ); - const { container: container2 } = render( - - ); - expect(container1.firstChild?.textContent).to.be.not.be.undefined; - expect(container1.firstChild?.textContent).to.equal( - container2.firstChild?.textContent - ); - } - }); - it('does not convert an unknown color code', function () { const { container } = render( diff --git a/packages/connection-form/src/hooks/use-connection-color.ts b/packages/connection-form/src/hooks/use-connection-color.ts index 7a5b232b291..0b84862f56c 100644 --- a/packages/connection-form/src/hooks/use-connection-color.ts +++ b/packages/connection-form/src/hooks/use-connection-color.ts @@ -1,5 +1,4 @@ import { useCallback } from 'react'; -import { usePreference } from 'compass-preferences-model/provider'; import { palette, useDarkMode } from '@mongodb-js/compass-components'; type ColorCode = `color${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10}`; @@ -86,19 +85,6 @@ export const COLOR_CODE_TO_NAME: Record = { color10: 'Gray', }; -const LEGACY_COLORS_TO_COLOR_CODE_MAP: Record = { - '#5fc86e': 'color1', - '#326fde': 'color2', - '#deb342': 'color3', - '#d4366e': 'color4', - '#59c1e2': 'color5', - '#2c5f4a': 'color6', - '#d66531': 'color7', - '#773819': 'color8', - '#3b8196': 'color9', - '#ababab': 'color10', -}; - export const CONNECTION_COLOR_CODES = Object.keys( COLOR_CODES_TO_UI_COLORS_DARK_THEME_MAP ) as ColorCode[]; @@ -109,20 +95,6 @@ function isColorCode( return CONNECTION_COLOR_CODES.includes(hexOrColorCode as ColorCode); } -export function legacyColorsToColorCode( - hexOrColorCode: string | undefined -): ColorCode | undefined { - if (!hexOrColorCode) { - return; - } - - if (isColorCode(hexOrColorCode)) { - return hexOrColorCode; - } - - return LEGACY_COLORS_TO_COLOR_CODE_MAP[hexOrColorCode]; -} - export function useConnectionColor(): { connectionColorCodes: () => ColorCode[]; connectionColorToHex: (colorCode: string | undefined) => string | undefined; @@ -133,7 +105,7 @@ export function useConnectionColor(): { } { const isDarkMode = useDarkMode(); - const newColorCodeToHex = useCallback( + const colorCodeToHex = useCallback( (colorCode: string | undefined): string | undefined => { if (!colorCode || !isColorCode(colorCode)) { return; @@ -161,22 +133,6 @@ export function useConnectionColor(): { [isDarkMode] ); - const colorCodeToHex = useCallback( - (colorCode: string | undefined): string | undefined => { - if (!colorCode) { - return; - } - - const migratedColor = legacyColorsToColorCode(colorCode); - if (!migratedColor) { - return; - } - - return COLOR_CODES_TO_UI_COLORS_DARK_THEME_MAP[migratedColor]; - }, - [] - ); - const colorToName = useCallback( (colorCode: string | undefined): string | undefined => { if (!colorCode || !isColorCode(colorCode)) { @@ -188,22 +144,10 @@ export function useConnectionColor(): { [] ); - const isMultiConnectionEnabled = usePreference( - 'enableMultipleConnectionSystem' - ); - - const connectionColorCodes = () => { - if (isMultiConnectionEnabled) { - return CONNECTION_COLOR_CODES.slice(0, 9); - } else { - return CONNECTION_COLOR_CODES; - } - }; + const connectionColorCodes = () => CONNECTION_COLOR_CODES.slice(0, 9); return { - connectionColorToHex: isMultiConnectionEnabled - ? newColorCodeToHex - : colorCodeToHex, + connectionColorToHex: colorCodeToHex, connectionColorToHexActive: connectionColorToHexActive, connectionColorToName: colorToName, connectionColorCodes, diff --git a/packages/connection-form/src/index.ts b/packages/connection-form/src/index.ts index ea1ff5de37b..1358163ec23 100644 --- a/packages/connection-form/src/index.ts +++ b/packages/connection-form/src/index.ts @@ -1,17 +1,14 @@ import ConnectionForm, { ColorCircleGlyph } from './components/connection-form'; import ConnectionFormModal from './components/connection-form-modal'; -import SaveConnectionModal from './components/save-connection-modal'; import { adjustConnectionOptionsBeforeConnect } from './hooks/use-connect-form'; export { - SaveConnectionModal, adjustConnectionOptionsBeforeConnect, ConnectionFormModal, ColorCircleGlyph, }; export { - legacyColorsToColorCode, useConnectionColor, DefaultColorCode, CONNECTION_COLOR_CODES, From e577bf1352998935a85b277b4e640ae8a3a10121 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:02:32 +0000 Subject: [PATCH 41/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6299) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 7f291606895..8dca8fe19cf 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Sun Sep 29 2024. +This document was automatically generated on Mon Sep 30 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index a00acc32f45..6d768c9f1f1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Sun, Sep 29, 2024 at 03:16 AM +Generated on Mon, Sep 30, 2024 at 11:02 AM ## Table of Contents From 93df62bccf3c6bb41f12d76a44e06d4f18221e86 Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:41:35 -0400 Subject: [PATCH 42/97] chore(release): bump package versions (#6296) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- package-lock.json | 500 +++++++++--------- packages/compass-aggregations/package.json | 14 +- packages/compass-app-stores/package.json | 4 +- packages/compass-collection/package.json | 8 +- .../package.json | 4 +- .../package.json | 8 +- packages/compass-connections/package.json | 4 +- packages/compass-crud/package.json | 14 +- packages/compass-explain-plan/package.json | 6 +- .../compass-export-to-language/package.json | 6 +- packages/compass-field-store/package.json | 4 +- packages/compass-global-writes/package.json | 8 +- packages/compass-import-export/package.json | 6 +- packages/compass-indexes/package.json | 10 +- packages/compass-query-bar/package.json | 10 +- .../package.json | 10 +- .../compass-schema-validation/package.json | 12 +- packages/compass-schema/package.json | 10 +- packages/compass-serverstats/package.json | 8 +- packages/compass-shell/package.json | 6 +- packages/compass-sidebar/package.json | 14 +- packages/compass-web/package.json | 36 +- packages/compass-welcome/package.json | 6 +- packages/compass-workspaces/package.json | 6 +- packages/compass/package.json | 44 +- packages/connection-form/package.json | 2 +- .../databases-collections-list/package.json | 6 +- packages/databases-collections/package.json | 10 +- 28 files changed, 388 insertions(+), 388 deletions(-) diff --git a/package-lock.json b/package-lock.json index df47bfba330..2baf4ff408c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43776,36 +43776,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-import-export": "^7.42.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-import-export": "^7.42.1", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-serverstats": "^16.42.1", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-shell": "^3.42.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", @@ -43865,7 +43865,7 @@ }, "packages/compass-aggregations": { "name": "@mongodb-js/compass-aggregations", - "version": "9.45.0", + "version": "9.45.1", "license": "SSPL", "dependencies": { "@babel/generator": "^7.19.5", @@ -43875,18 +43875,18 @@ "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.17.0", @@ -43966,11 +43966,11 @@ }, "packages/compass-app-stores": { "name": "@mongodb-js/compass-app-stores", - "version": "7.29.0", + "version": "7.29.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/connection-info": "^0.9.0", "hadron-app-registry": "^9.2.7", @@ -44030,15 +44030,15 @@ }, "packages/compass-collection": { "name": "@mongodb-js/compass-collection", - "version": "4.42.0", + "version": "4.42.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", "compass-preferences-model": "^2.29.0", @@ -44216,11 +44216,11 @@ }, "packages/compass-connection-import-export": { "name": "@mongodb-js/compass-connection-import-export", - "version": "0.39.0", + "version": "0.39.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/connection-storage": "^0.22.0", "compass-preferences-model": "^2.29.0", "hadron-ipc": "^3.2.23", @@ -44278,7 +44278,7 @@ }, "packages/compass-connections": { "name": "@mongodb-js/compass-connections", - "version": "1.43.0", + "version": "1.43.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", @@ -44286,7 +44286,7 @@ "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", @@ -44327,13 +44327,13 @@ }, "packages/compass-connections-navigation": { "name": "@mongodb-js/compass-connections-navigation", - "version": "1.42.0", + "version": "1.42.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "mongodb-build-info": "^1.7.2", @@ -44422,19 +44422,19 @@ }, "packages/compass-crud": { "name": "@mongodb-js/compass-crud", - "version": "13.43.0", + "version": "13.43.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -44896,12 +44896,12 @@ }, "packages/compass-explain-plan": { "name": "@mongodb-js/compass-explain-plan", - "version": "6.43.0", + "version": "6.43.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -44975,12 +44975,12 @@ }, "packages/compass-export-to-language": { "name": "@mongodb-js/compass-export-to-language", - "version": "9.19.0", + "version": "9.19.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -45038,10 +45038,10 @@ }, "packages/compass-field-store": { "name": "@mongodb-js/compass-field-store", - "version": "9.18.0", + "version": "9.18.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", @@ -45268,14 +45268,14 @@ }, "packages/compass-global-writes": { "name": "@mongodb-js/compass-global-writes", - "version": "1.1.0", + "version": "1.2.0", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", @@ -45461,17 +45461,17 @@ }, "packages/compass-import-export": { "name": "@mongodb-js/compass-import-export", - "version": "7.42.0", + "version": "7.42.1", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", @@ -45555,18 +45555,18 @@ }, "packages/compass-indexes": { "name": "@mongodb-js/compass-indexes", - "version": "5.42.0", + "version": "5.42.1", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", @@ -45969,16 +45969,16 @@ }, "packages/compass-query-bar": { "name": "@mongodb-js/compass-query-bar", - "version": "8.44.0", + "version": "8.44.1", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -46047,16 +46047,16 @@ }, "packages/compass-saved-aggregations-queries": { "name": "@mongodb-js/compass-saved-aggregations-queries", - "version": "1.43.0", + "version": "1.43.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", @@ -46123,15 +46123,15 @@ }, "packages/compass-schema": { "name": "@mongodb-js/compass-schema", - "version": "6.44.0", + "version": "6.44.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -46182,16 +46182,16 @@ }, "packages/compass-schema-validation": { "name": "@mongodb-js/compass-schema-validation", - "version": "6.43.0", + "version": "6.43.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "bson": "^6.7.0", @@ -46259,14 +46259,14 @@ }, "packages/compass-serverstats": { "name": "@mongodb-js/compass-serverstats", - "version": "16.42.0", + "version": "16.42.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", @@ -46377,16 +46377,16 @@ }, "packages/compass-shell": { "name": "@mongodb-js/compass-shell", - "version": "3.42.0", + "version": "3.42.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", @@ -46702,19 +46702,19 @@ }, "packages/compass-sidebar": { "name": "@mongodb-js/compass-sidebar", - "version": "5.43.0", + "version": "5.43.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-connections-navigation": "^1.42.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", @@ -47077,31 +47077,31 @@ }, "packages/compass-web": { "name": "@mongodb-js/compass-web", - "version": "0.8.0", + "version": "0.8.1", "license": "SSPL", "devDependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -47317,14 +47317,14 @@ }, "packages/compass-welcome": { "name": "@mongodb-js/compass-welcome", - "version": "0.41.0", + "version": "0.41.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", @@ -47383,12 +47383,12 @@ }, "packages/compass-workspaces": { "name": "@mongodb-js/compass-workspaces", - "version": "0.24.0", + "version": "0.24.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", @@ -47556,7 +47556,7 @@ }, "packages/connection-form": { "name": "@mongodb-js/connection-form", - "version": "1.41.0", + "version": "1.41.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", @@ -48072,17 +48072,17 @@ }, "packages/databases-collections": { "name": "@mongodb-js/compass-databases-collections", - "version": "1.42.0", + "version": "1.42.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/databases-collections-list": "^1.40.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/databases-collections-list": "^1.40.1", "@mongodb-js/my-queries-storage": "^0.17.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", @@ -48119,13 +48119,13 @@ }, "packages/databases-collections-list": { "name": "@mongodb-js/databases-collections-list", - "version": "1.40.0", + "version": "1.40.1", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", @@ -56001,18 +56001,18 @@ "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56087,7 +56087,7 @@ "version": "file:packages/compass-app-stores", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56141,12 +56141,12 @@ "@mongodb-js/compass-collection": { "version": "file:packages/compass-collection", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56312,7 +56312,7 @@ "version": "file:packages/compass-connection-import-export", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56371,7 +56371,7 @@ "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56436,9 +56436,9 @@ "version": "file:packages/compass-connections-navigation", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56496,17 +56496,17 @@ "@mongodb-js/compass-crud": { "version": "file:packages/compass-crud", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56560,14 +56560,14 @@ "@mongodb-js/compass-databases-collections": { "version": "file:packages/databases-collections", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/databases-collections-list": "^1.40.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/databases-collections-list": "^1.40.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/my-queries-storage": "^0.17.0", @@ -56684,9 +56684,9 @@ "@mongodb-js/compass-explain-plan": { "version": "file:packages/compass-explain-plan", "requires": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -56754,9 +56754,9 @@ "@mongodb-js/compass-export-to-language": { "version": "file:packages/compass-export-to-language", "requires": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -56810,7 +56810,7 @@ "@mongodb-js/compass-field-store": { "version": "file:packages/compass-field-store", "requires": { - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57004,10 +57004,10 @@ "version": "file:packages/compass-global-writes", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57121,13 +57121,13 @@ "requires": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57205,14 +57205,14 @@ "version": "file:packages/compass-indexes", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57484,12 +57484,12 @@ "version": "file:packages/compass-query-bar", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", @@ -57552,13 +57552,13 @@ "@mongodb-js/compass-saved-aggregations-queries": { "version": "file:packages/compass-saved-aggregations-queries", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57621,12 +57621,12 @@ "@mongodb-js/compass-schema": { "version": "file:packages/compass-schema", "requires": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57698,13 +57698,13 @@ "@mongodb-js/compass-schema-validation": { "version": "file:packages/compass-schema-validation", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -58087,11 +58087,11 @@ "@mongodb-js/compass-serverstats": { "version": "file:packages/compass-serverstats", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58197,12 +58197,12 @@ "version": "file:packages/compass-shell", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58431,16 +58431,16 @@ "@mongodb-js/compass-sidebar": { "version": "file:packages/compass-sidebar", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-connections-navigation": "^1.42.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -58762,27 +58762,27 @@ "version": "file:packages/compass-web", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -58980,10 +58980,10 @@ "version": "file:packages/compass-welcome", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -59038,9 +59038,9 @@ "@mongodb-js/compass-workspaces": { "version": "file:packages/compass-workspaces", "requires": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -59423,9 +59423,9 @@ "version": "file:packages/databases-collections-list", "requires": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -80055,36 +80055,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-import-export": "^7.42.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-import-export": "^7.42.1", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-serverstats": "^16.42.1", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-shell": "^3.42.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", diff --git a/packages/compass-aggregations/package.json b/packages/compass-aggregations/package.json index 7b8bedac027..942e5c44a1c 100644 --- a/packages/compass-aggregations/package.json +++ b/packages/compass-aggregations/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-aggregations", "description": "Compass Aggregation Pipeline Builder", "private": true, - "version": "9.45.0", + "version": "9.45.1", "main": "dist/index.js", "compass:main": "src/index.ts", "types": "dist/index.d.ts", @@ -62,18 +62,18 @@ "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.17.0", diff --git a/packages/compass-app-stores/package.json b/packages/compass-app-stores/package.json index 1c0f8c613fc..264955481ea 100644 --- a/packages/compass-app-stores/package.json +++ b/packages/compass-app-stores/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.29.0", + "version": "7.29.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -74,7 +74,7 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/connection-info": "^0.9.0", "hadron-app-registry": "^9.2.7", diff --git a/packages/compass-collection/package.json b/packages/compass-collection/package.json index 12da225d0b8..7dbaedf490b 100644 --- a/packages/compass-collection/package.json +++ b/packages/compass-collection/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "4.42.0", + "version": "4.42.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,12 +48,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass-connection-import-export/package.json b/packages/compass-connection-import-export/package.json index 42d690f47ae..65f9da8d486 100644 --- a/packages/compass-connection-import-export/package.json +++ b/packages/compass-connection-import-export/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.39.0", + "version": "0.39.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,7 +52,7 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/connection-storage": "^0.22.0", "compass-preferences-model": "^2.29.0", "hadron-ipc": "^3.2.23", diff --git a/packages/compass-connections-navigation/package.json b/packages/compass-connections-navigation/package.json index d96d133ba40..253bbcf0169 100644 --- a/packages/compass-connections-navigation/package.json +++ b/packages/compass-connections-navigation/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.42.0", + "version": "1.42.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,11 +49,11 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/connection-info": "^0.9.0", - "@mongodb-js/connection-form": "^1.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/connection-form": "^1.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "compass-preferences-model": "^2.29.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", diff --git a/packages/compass-connections/package.json b/packages/compass-connections/package.json index d44c2895c3a..26c64c2bfc8 100644 --- a/packages/compass-connections/package.json +++ b/packages/compass-connections/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.43.0", + "version": "1.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -56,7 +56,7 @@ "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 1467c8bb7e2..5e1de5ec2bf 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "13.43.0", + "version": "13.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -71,16 +71,16 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index a67cb924f0b..7173623df09 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.43.0", + "version": "6.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,9 +69,9 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", diff --git a/packages/compass-export-to-language/package.json b/packages/compass-export-to-language/package.json index 9bc7a271299..bece71d16f6 100644 --- a/packages/compass-export-to-language/package.json +++ b/packages/compass-export-to-language/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.19.0", + "version": "9.19.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,9 +48,9 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", diff --git a/packages/compass-field-store/package.json b/packages/compass-field-store/package.json index 15de2554167..a092100b9b1 100644 --- a/packages/compass-field-store/package.json +++ b/packages/compass-field-store/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.18.0", + "version": "9.18.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,7 +69,7 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index af67762fb58..b2594f351d5 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.1.0", + "version": "1.2.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,13 +50,13 @@ }, "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index d520739a5c4..a5c69e6ccdf 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.42.0", + "version": "7.42.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,12 +50,12 @@ "dependencies": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index 8d173ddd12b..79ce4fe69ef 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "5.42.0", + "version": "5.42.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -68,14 +68,14 @@ }, "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index cfafc7de36e..ec57ad2f178 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "8.44.0", + "version": "8.44.1", "homepage": "https://github.com/mongodb-js/compass", "license": "SSPL", "bugs": { @@ -67,12 +67,12 @@ }, "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", diff --git a/packages/compass-saved-aggregations-queries/package.json b/packages/compass-saved-aggregations-queries/package.json index 2872532c07c..c40664c63ac 100644 --- a/packages/compass-saved-aggregations-queries/package.json +++ b/packages/compass-saved-aggregations-queries/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.43.0", + "version": "1.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,13 +48,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/my-queries-storage": "^0.17.0", "bson": "^6.7.0", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index bb8da9d3bea..675e6d89eb3 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.43.0", + "version": "6.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,13 +69,13 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", "@mongodb-js/compass-editor": "^0.31.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "bson": "^6.7.0", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index 658f6d5993d..ff93ca59ee7 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.44.0", + "version": "6.44.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,13 +72,13 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-query-bar": "^8.44.0", + "@mongodb-js/compass-query-bar": "^8.44.1", "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass-serverstats/package.json b/packages/compass-serverstats/package.json index d843e95ffd0..fd813f21cbf 100644 --- a/packages/compass-serverstats/package.json +++ b/packages/compass-serverstats/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-serverstats", "description": "Compass Real Time", "private": true, - "version": "16.42.0", + "version": "16.42.1", "main": "dist/index.js", "compass:main": "src/index.ts", "exports": { @@ -30,11 +30,11 @@ }, "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index ad2c132fa5e..0b5df28e674 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "3.42.0", + "version": "3.42.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,12 +50,12 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", diff --git a/packages/compass-sidebar/package.json b/packages/compass-sidebar/package.json index d27751a2aa3..b29c313edac 100644 --- a/packages/compass-sidebar/package.json +++ b/packages/compass-sidebar/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "5.43.0", + "version": "5.43.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,16 +48,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-connections-navigation": "^1.42.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-connections-navigation": "^1.42.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/connection-form": "^1.41.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 1018ecbfa84..786b5a5e5c2 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.8.0", + "version": "0.8.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -63,27 +63,27 @@ }, "devDependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/compass-welcome/package.json b/packages/compass-welcome/package.json index 27ec568e488..042662abd1b 100644 --- a/packages/compass-welcome/package.json +++ b/packages/compass-welcome/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.41.0", + "version": "0.41.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,10 +50,10 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", diff --git a/packages/compass-workspaces/package.json b/packages/compass-workspaces/package.json index d389188ac4e..b7983d8e2ec 100644 --- a/packages/compass-workspaces/package.json +++ b/packages/compass-workspaces/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.24.0", + "version": "0.24.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,9 +51,9 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass/package.json b/packages/compass/package.json index 89055421783..4027ea3b23a 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -192,36 +192,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.0", - "@mongodb-js/compass-app-stores": "^7.29.0", - "@mongodb-js/compass-collection": "^4.42.0", + "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-app-stores": "^7.29.1", + "@mongodb-js/compass-collection": "^4.42.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connection-import-export": "^0.39.0", - "@mongodb-js/compass-connections": "^1.43.0", - "@mongodb-js/compass-crud": "^13.43.0", - "@mongodb-js/compass-databases-collections": "^1.42.0", - "@mongodb-js/compass-explain-plan": "^6.43.0", - "@mongodb-js/compass-export-to-language": "^9.19.0", - "@mongodb-js/compass-field-store": "^9.18.0", + "@mongodb-js/compass-connection-import-export": "^0.39.1", + "@mongodb-js/compass-connections": "^1.43.1", + "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-databases-collections": "^1.42.1", + "@mongodb-js/compass-explain-plan": "^6.43.1", + "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.1.0", - "@mongodb-js/compass-import-export": "^7.42.0", - "@mongodb-js/compass-indexes": "^5.42.0", + "@mongodb-js/compass-global-writes": "^1.2.0", + "@mongodb-js/compass-import-export": "^7.42.1", + "@mongodb-js/compass-indexes": "^5.42.1", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.0", - "@mongodb-js/compass-schema": "^6.44.0", - "@mongodb-js/compass-schema-validation": "^6.43.0", - "@mongodb-js/compass-serverstats": "^16.42.0", + "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", + "@mongodb-js/compass-schema": "^6.44.1", + "@mongodb-js/compass-schema-validation": "^6.43.1", + "@mongodb-js/compass-serverstats": "^16.42.1", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.0", - "@mongodb-js/compass-sidebar": "^5.43.0", + "@mongodb-js/compass-shell": "^3.42.1", + "@mongodb-js/compass-sidebar": "^5.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-welcome": "^0.41.1", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", diff --git a/packages/connection-form/package.json b/packages/connection-form/package.json index 9c511ef3e38..443c7b72f89 100644 --- a/packages/connection-form/package.json +++ b/packages/connection-form/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.41.0", + "version": "1.41.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/packages/databases-collections-list/package.json b/packages/databases-collections-list/package.json index 19533c42d1c..3ef13aa1e50 100644 --- a/packages/databases-collections-list/package.json +++ b/packages/databases-collections-list/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.40.0", + "version": "1.40.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,9 +49,9 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", + "@mongodb-js/compass-workspaces": "^0.24.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", diff --git a/packages/databases-collections/package.json b/packages/databases-collections/package.json index cc3f0e9bae8..48c4abc06a5 100644 --- a/packages/databases-collections/package.json +++ b/packages/databases-collections/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-databases-collections", "description": "Plugin for viewing the list of, creating, and dropping databases and collections", "private": true, - "version": "1.42.0", + "version": "1.42.1", "license": "SSPL", "homepage": "https://github.com/mongodb-js/compass", "bugs": { @@ -59,14 +59,14 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.29.0", + "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", - "@mongodb-js/compass-connections": "^1.43.0", + "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.0", - "@mongodb-js/databases-collections-list": "^1.40.0", + "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/databases-collections-list": "^1.40.1", "@mongodb-js/my-queries-storage": "^0.17.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", From 835a4c5026bc35cef5129a0cec6fc4e9c157249b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:48:49 +0000 Subject: [PATCH 43/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6301) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 6d768c9f1f1..cac9e707ac2 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Sep 30, 2024 at 11:02 AM +Generated on Mon, Sep 30, 2024 at 12:48 PM ## Table of Contents From a1d78d9e601c2fc65ad3577b2f299654745d5d09 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 30 Sep 2024 16:38:37 +0200 Subject: [PATCH 44/97] chore(compass-web): refactor sandbox to better handle cert issuing logic (#6295) * chore(compass-web): refactor sandbox to better handle cert issuing logic * chore(web): extend connection timeouts for web sandbox in atlas mode * chore(web): adjust the logic that waits for the compass web server to be ready * chore(web): fix typo * chore(web): electron.dock might be undefined * chore: restore accidentally removed else * chore: error logging and typos * chore: remove unnecessary eslint ignores --- configs/webpack-config-compass/src/index.ts | 1 + packages/compass-e2e-tests/index.ts | 40 ++- packages/compass-web/package.json | 2 +- packages/compass-web/sandbox/index.tsx | 7 + .../compass-web/scripts/electron-proxy.js | 330 +++++++++++++----- .../scripts/start-electron-proxy.js | 16 - packages/compass-web/scripts/ws-proxy.js | 6 +- .../compass-web/src/connection-storage.tsx | 48 ++- packages/compass-web/webpack.config.js | 10 +- .../src/components/workspaces.tsx | 2 +- 10 files changed, 328 insertions(+), 134 deletions(-) delete mode 100644 packages/compass-web/scripts/start-electron-proxy.js diff --git a/configs/webpack-config-compass/src/index.ts b/configs/webpack-config-compass/src/index.ts index 0992dcc88f2..2211b985f74 100644 --- a/configs/webpack-config-compass/src/index.ts +++ b/configs/webpack-config-compass/src/index.ts @@ -372,3 +372,4 @@ export { sharedExternals, pluginExternals }; export { webpackArgsWithDefaults, isServe } from './args'; export { default as webpack } from 'webpack'; export { merge } from 'webpack-merge'; +export { default as WebpackDevServer } from 'webpack-dev-server'; diff --git a/packages/compass-e2e-tests/index.ts b/packages/compass-e2e-tests/index.ts index cbbe284c16d..309767330a2 100644 --- a/packages/compass-e2e-tests/index.ts +++ b/packages/compass-e2e-tests/index.ts @@ -23,6 +23,11 @@ import ResultLogger from './helpers/result-logger'; const debug = Debug('compass-e2e-tests'); +const wait = (ms: number) => + new Promise((resolve) => { + setTimeout(resolve, ms); + }); + const allowedArgs = [ '--test-compass-web', '--no-compile', @@ -75,18 +80,27 @@ async function setup() { }, } ); - // wait for webpack to finish compiling - await new Promise((resolve) => { - let output = ''; - const listener = function (chunk: string) { - output += chunk; - if (/^webpack \d+\.\d+\.\d+ compiled/m.test(output)) { - compassWeb.stdout.off('data', listener); - resolve(); - } - }; - compassWeb.stdout.setEncoding('utf8').on('data', listener); - }); + + compassWeb.stdout.pipe(process.stdout); + compassWeb.stderr.pipe(process.stderr); + + let serverReady = false; + const start = Date.now(); + while (!serverReady) { + if (Date.now() - start >= 120_000) { + throw new Error( + 'The compass-web sandbox is still not running after 120000ms' + ); + } + try { + const res = await fetch('http://localhost:7777'); + serverReady = res.ok; + debug('Web server ready: %s', serverReady); + } catch (err) { + debug('Failed to connect to dev server: %s', (err as any).message); + } + await wait(1000); + } } else { debug('Writing electron-versions.json'); crossSpawn.sync('scripts/write-electron-versions.sh', [], { @@ -131,7 +145,7 @@ function cleanup() { try { if (compassWeb.pid) { debug(`killing compass-web [${compassWeb.pid}]`); - kill(compassWeb.pid); + kill(compassWeb.pid, 'SIGINT'); } else { debug('no pid for compass-web'); } diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 786b5a5e5c2..3257fcc935f 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -40,7 +40,7 @@ "webpack": "webpack-compass", "postcompile": "npm run typescript", "typescript": "tsc -p tsconfig-build.json --emitDeclarationOnly", - "start": "npm run webpack serve -- --mode development", + "start": "electron ./scripts/electron-proxy.js", "analyze": "npm run webpack -- --mode production --analyze", "watch": "npm run webpack -- --mode development --watch", "sync": "node scripts/sync-dist-to-mms.js", diff --git a/packages/compass-web/sandbox/index.tsx b/packages/compass-web/sandbox/index.tsx index ff03193f723..c539e9ad9f8 100644 --- a/packages/compass-web/sandbox/index.tsx +++ b/packages/compass-web/sandbox/index.tsx @@ -37,6 +37,13 @@ const App = () => { return ( } */ - async fetchProjectId() { - const cookie = (await this.#getCloudSessionCookies()).join('; '); - const res = await fetch(CLOUD_ORIGIN, { - method: 'HEAD', - redirect: 'manual', - headers: { cookie }, - }); - - const location = res.headers.get('location') ?? ''; - - return this.#isAuthenticatedUrl(location) - ? this.#getProjectIdFromUrl(location) - : null; + async getProjectId() { + const res = await this.#fetch('/user/shared'); + return res?.currentProject?.projectId ?? null; } /** @@ -162,13 +194,13 @@ class AtlasCloudAuthenticator { return (this.#authenticatePromise ??= (async () => { try { await electronApp.whenReady(); - const projectId = await this.fetchProjectId(); + const projectId = await this.getProjectId(); if (projectId) { return { projectId }; } const bw = new BrowserWindow({ - height: 800, width: 600, + height: 800, resizable: false, fullscreenable: false, }); @@ -196,7 +228,6 @@ class AtlasCloudAuthenticator { }).finally(() => { queueMicrotask(() => { abortController.abort(); - electronApp.dock.hide(); bw.close(); }); }), @@ -204,7 +235,7 @@ class AtlasCloudAuthenticator { throw new Error('Window closed before finished signing in'); }), ]); - electronApp.dock.show(); + void electronApp.dock?.show(); void bw.loadURL(`${CLOUD_ORIGIN}/account/login`); return authInfoPromise; } finally { @@ -213,67 +244,120 @@ class AtlasCloudAuthenticator { })()); } - async logout() { - await session.defaultSession.clearStorageData({ storages: ['cookies'] }); + async cleanupAndLogout() { + // When logging out, delete the test user too. If we don't do this now, we + // will lose a chance to do it later due to missing auth + try { + await atlasCloudAuthenticator.deleteTestDBUser(); + } catch (err) { + logger.err('[electron-proxy] failed to remove the test user:', err); + } + await session.defaultSession.clearStorageData({ + storages: ['cookies', 'localstorage'], + }); } - async #createTestDBUser(projectId) { - return await fetch( - `http://localhost:${PROXY_PORT}/cloud-mongodb-com/nds/${projectId}/users`, - { - method: 'POST', - headers: { - 'content-type': 'application/json', - }, - body: JSON.stringify({ - awsIAMType: 'NONE', - db: '$external', - deleteAfterDate: null, - hasScramSha256Auth: false, - hasUserToDNMapping: false, - isEditable: true, - labels: [], - ldapAuthType: 'NONE', - oidcAuthType: 'NONE', - roles: [{ collection: null, db: 'admin', role: 'atlasAdmin' }], - scopes: [], - user: `CN=${TEST_DB_USER}`, - x509Type: 'MANAGED', - }), - } - ).then(handleRes); + #createTestDBUser(projectId) { + return this.#fetch(`/nds/${projectId}/users`, { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify({ + awsIAMType: 'NONE', + db: '$external', + deleteAfterDate: null, + hasScramSha256Auth: false, + hasUserToDNMapping: false, + isEditable: true, + labels: [], + ldapAuthType: 'NONE', + oidcAuthType: 'NONE', + roles: [{ collection: null, db: 'admin', role: 'atlasAdmin' }], + scopes: [], + user: `CN=${TEST_DB_USER}`, + x509Type: 'MANAGED', + }), + }); } async #ensureTestDBUserExists(projectId) { - const users = await fetch( - `http://localhost:${PROXY_PORT}/cloud-mongodb-com/nds/${projectId}/users` - ).then(handleRes); + const users = await this.#fetch(`/nds/${projectId}/users`); const testCertUser = users.find((user) => { - return user.x509Type === 'MANAGED' && user.user === TEST_DB_USER; + return ( + user.x509Type === 'MANAGED' && + user.user.replace(/^cn=/i, '') === TEST_DB_USER + ); }); - return testCertUser ?? (await this.#createTestDBUser(projectId)); + const user = testCertUser ?? (await this.#createTestDBUser(projectId)); + let mongodbConfigurationInProgress = true; + let attempts = 0; + while (mongodbConfigurationInProgress && attempts <= 10) { + attempts++; + await new Promise((resolve) => { + setTimeout(resolve, 5_000); + }); + const project = await this.#fetch(`/nds/${projectId}`); + const configuringUserOrRoles = project?.plans?.some((plan) => { + return plan.moves?.some((move) => { + return move.name === 'ConfigureMongoDBForProject'; + }); + }); + mongodbConfigurationInProgress = + project?.state === 'UPDATING' && + (!project?.plans || configuringUserOrRoles); + } + return user; } - async getX509Cert() { - const projectId = await this.fetchProjectId(); - const testUser = await this.#ensureTestDBUserExists(projectId); + async deleteTestDBUser() { + const projectId = await this.getProjectId(); const certUsername = encodeURIComponent( - `CN=${testUser.user.replace(/^cn=/i, '')}` + `CN=${TEST_DB_USER.replace(/^cn=/i, '')}` ); - const certAuthDb = testUser.db ?? '$external'; - return fetch( - `http://localhost:${PROXY_PORT}/cloud-mongodb-com/nds/${projectId}/users/${certAuthDb}/${certUsername}/certs?monthsUntilExpiration=1` - ).then((res) => { - return res.text(); + return this.#fetch(`/nds/${projectId}/users/$external/${certUsername}`, { + method: 'DELETE', }); } + + /** + * + * @returns {Promise} + */ + async getX509Cert() { + const projectId = await this.getProjectId(); + if (TEST_X509_CERT_PROMISE.has(projectId)) { + return TEST_X509_CERT_PROMISE.get(projectId); + } + const promise = (async () => { + try { + const testUser = await this.#ensureTestDBUserExists(projectId); + const certUsername = encodeURIComponent( + `CN=${testUser.user.replace(/^cn=/i, '')}` + ); + const certAuthDb = testUser.db ?? '$external'; + return await this.#fetch( + `/nds/${projectId}/users/${certAuthDb}/${certUsername}/certs?monthsUntilExpiration=1` + ); + } catch (err) { + TEST_X509_CERT_PROMISE.delete(projectId, promise); + logger.error( + '[electron-proxy] failed to issue a cert for the test user', + err + ); + throw err; + } + })(); + TEST_X509_CERT_PROMISE.set(projectId, promise); + return promise; + } } const atlasCloudAuthenticator = new AtlasCloudAuthenticator(); // Proxy endpoint that triggers the sign in flow through configured cloud // environment -proxyWebServer.use('/authenticate', async (req, res) => { +expressProxy.use('/authenticate', async (req, res) => { if (req.method !== 'POST') { res.statusCode = 400; res.end(); @@ -282,6 +366,10 @@ proxyWebServer.use('/authenticate', async (req, res) => { try { const { projectId } = await atlasCloudAuthenticator.authenticate(); + // Start issuing the cert to save some time when signing in + void atlasCloudAuthenticator.getX509Cert().catch(() => { + // ignore errors + }); res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify({ projectId })); } catch (err) { @@ -291,19 +379,19 @@ proxyWebServer.use('/authenticate', async (req, res) => { res.end(); }); -proxyWebServer.use('/logout', async (req, res) => { +expressProxy.use('/logout', async (req, res) => { if (req.method !== 'GET') { res.statusCode = 400; res.end(); return; } - await atlasCloudAuthenticator.logout(); + await atlasCloudAuthenticator.cleanupAndLogout(); res.statusCode = 200; res.end(); }); -proxyWebServer.use('/x509', async (req, res) => { +expressProxy.use('/x509', async (req, res) => { if (req.method !== 'GET') { res.statusCode = 400; res.end(); @@ -322,7 +410,7 @@ proxyWebServer.use('/x509', async (req, res) => { res.end(); }); -proxyWebServer.use('/projectId', async (req, res) => { +expressProxy.use('/projectId', async (req, res) => { if (req.method !== 'GET') { res.statusCode = 400; res.end(); @@ -330,7 +418,7 @@ proxyWebServer.use('/projectId', async (req, res) => { } try { - const projectId = await atlasCloudAuthenticator.fetchProjectId(); + const projectId = await atlasCloudAuthenticator.getProjectId(); if (!projectId) { res.statusCode = 403; } else { @@ -344,7 +432,7 @@ proxyWebServer.use('/projectId', async (req, res) => { res.end(); }); -proxyWebServer.use('/create-cluster', async (req, res) => { +expressProxy.use('/create-cluster', async (req, res) => { if (req.method !== 'GET') { res.statusCode = 400; res.end(); @@ -353,14 +441,14 @@ proxyWebServer.use('/create-cluster', async (req, res) => { res.setHeader( 'Location', - `${CLOUD_ORIGIN}/v2/${await atlasCloudAuthenticator.fetchProjectId()}#/clusters/edit/` + `${CLOUD_ORIGIN}/v2/${await atlasCloudAuthenticator.getProjectId()}#/clusters/edit/` ); res.statusCode = 303; res.end(); }); // Prefixed proxy to the cloud backend -proxyWebServer.use( +expressProxy.use( '/cloud-mongodb-com', proxyMiddleware(CLOUD_ORIGIN, { async proxyReqOptDecorator(req) { @@ -387,23 +475,91 @@ proxyWebServer.use( ); // Everything else is proxied directly to webpack-dev-server -proxyWebServer.use( +expressProxy.use( proxyMiddleware(`http://localhost:${WEBPACK_DEV_SERVER_PORT}`) ); -proxyWebServer.listen(PROXY_PORT, 'localhost'); +void electronApp.dock?.hide(); -electronApp.dock.hide(); +logger.log('[electron-proxy] starting proxy server on port %s', PROXY_PORT); -electronApp.on('window-all-closed', () => { - // We want proxy to keep running even when all the windows are closed -}); +const proxyServer = expressProxy.listen(PROXY_PORT, 'localhost'); -electronApp.on('will-quit', () => { - atlasCloudAuthenticator.logout(); +const websocketProxyServer = createWebSocketProxy(); + +const webpackCompiler = webpack(webpackConfig); + +const webpackDevServer = new WebpackDevServer( + { ...webpackConfig.devServer, setupExitSignals: false }, + webpackCompiler +); + +let cleaningUp = false; + +// If stdio stream was already destroyed while we're cleaning up, these streams +// can throw causing Electron to pop up a modal with an error, so we catch and +// print the error ourselves +[process.stdout, process.stderr].forEach((stream) => { + stream.on('error', (err) => { + logger.error(err); + }); }); -electronApp.whenReady().then(() => { +function cleanupAndExit() { + if (cleaningUp) { + return; + } + cleaningUp = true; + logger.log('[electron-proxy] cleaning up before exit'); + void Promise.allSettled([ + // This will cleanup auth and remove the session test user + atlasCloudAuthenticator.cleanupAndLogout(), + + // close the http proxy server + proxyServer.closeAllConnections(), + new Promise((resolve) => { + proxyServer.close(resolve); + }), + + // close the driver websocket proxy server + Array.from(websocketProxyServer.clients.values()).map((ws) => { + return ws.terminate(); + }), + new Promise((resolve) => { + websocketProxyServer.close(resolve); + }), + + // cleanup everything webpack-server related + new Promise((resolve) => { + webpackDevServer.compiler?.close?.(resolve); + }), + webpackDevServer.stop(), + ]).finally(() => { + logger.log('[electron-proxy] done cleaning up'); + process.exitCode = 0; + process.exit(); + }); +} + +electronApp.whenReady().then(async () => { + electronApp.on('window-all-closed', () => { + // We want proxy to keep running even when all the windows are closed, but + // hide the dock icon because there are not windows associated with it + // anyway + electronApp.dock?.hide(); + }); + + electronApp.on('will-quit', (evt) => { + evt.preventDefault(); + void cleanupAndExit(); + }); + + for (const signal of ['SIGINT', 'SIGTERM']) { + process.on(signal, cleanupAndExit); + } + + await webpackDevServer.start(); + if (process.env.OPEN_BROWSER !== 'false') { shell.openExternal(`http://localhost:${PROXY_PORT}`); } diff --git a/packages/compass-web/scripts/start-electron-proxy.js b/packages/compass-web/scripts/start-electron-proxy.js deleted file mode 100644 index dbbc4e2f1f0..00000000000 --- a/packages/compass-web/scripts/start-electron-proxy.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; -const path = require('path'); -const child_process = require('child_process'); -const electronPath = require('electron'); - -function startElectronProxy() { - const child = child_process.execFile( - electronPath, - [path.resolve(__dirname, 'electron-proxy.js')], - { env: process.env } - ); - child.stdout.pipe(process.stdout); - child.stderr.pipe(process.stderr); -} - -module.exports = { startElectronProxy }; diff --git a/packages/compass-web/scripts/ws-proxy.js b/packages/compass-web/scripts/ws-proxy.js index 4efec52d86d..c3e2e6a2561 100644 --- a/packages/compass-web/scripts/ws-proxy.js +++ b/packages/compass-web/scripts/ws-proxy.js @@ -46,7 +46,7 @@ async function resolveX509Cert({ projectId, clusterName }) { * every follow-up message is directly written to the opened socket stream */ function createWebSocketProxy(port = 1337, logger = console) { - const wsServer = new WebSocketServer({ port }, () => { + const wsServer = new WebSocketServer({ host: 'localhost', port }, () => { logger.log('ws server listening at %s', wsServer.options.port); }); @@ -62,7 +62,6 @@ function createWebSocketProxy(port = 1337, logger = console) { }); ws.on('message', async (data) => { if (socket) { - logger.log('message from client'); socket.write(data, 'binary'); } else { // First message before socket is created is with connection info @@ -117,12 +116,13 @@ function createWebSocketProxy(port = 1337, logger = console) { ws.send(JSON.stringify({ evt: connectEvent })); }); socket.on('data', async (data) => { - logger.log('message from server'); ws.send(data); }); } }); }); + + return wsServer; } module.exports = { createWebSocketProxy }; diff --git a/packages/compass-web/src/connection-storage.tsx b/packages/compass-web/src/connection-storage.tsx index 213a22b919e..274fb2d2920 100644 --- a/packages/compass-web/src/connection-storage.tsx +++ b/packages/compass-web/src/connection-storage.tsx @@ -150,7 +150,8 @@ export function buildConnectionInfoFromClusterDescription( orgId: string, projectId: string, description: ClusterDescriptionWithDataProcessingRegion, - deployment: Deployment + deployment: Deployment, + extraConnectionOptions?: Record ) { const connectionString = new ConnectionString( `mongodb+srv://${description.srvAddress}` @@ -169,6 +170,10 @@ export function buildConnectionInfoFromClusterDescription( connectionString.searchParams.set('srvMaxHosts', '3'); } + for (const [key, value] of Object.entries(extraConnectionOptions ?? {})) { + connectionString.searchParams.set(key, String(value)); + } + const deploymentItem = findDeploymentItemByClusterName( description, deployment @@ -211,7 +216,8 @@ class AtlasCloudConnectionStorage constructor( private atlasService: AtlasService, private orgId: string, - private projectId: string + private projectId: string, + private extraConnectionOptions?: Record ) { super(); } @@ -276,7 +282,8 @@ class AtlasCloudConnectionStorage this.orgId, this.projectId, description, - deployment + deployment, + this.extraConnectionOptions ); }); } @@ -294,13 +301,34 @@ class AtlasCloudConnectionStorage const SandboxConnectionStorageContext = React.createContext(null); +const SandboxExtraConnectionOptionsContext = React.createContext< + Record | undefined +>(undefined); + /** * Only used in the sandbox to provide connection info when connecting to the * non-Atlas deployment * @internal */ -export const SandboxConnectionStorageProviver = - SandboxConnectionStorageContext.Provider; +export const SandboxConnectionStorageProviver = ({ + value, + extraConnectionOptions, + children, +}: { + value: ConnectionStorage | null; + extraConnectionOptions?: Record; + children: React.ReactNode; +}) => { + return ( + + + {children} + + + ); +}; export const AtlasCloudConnectionStorageProvider = createServiceProvider( function AtlasCloudConnectionStorageProvider({ @@ -312,9 +340,17 @@ export const AtlasCloudConnectionStorageProvider = createServiceProvider( projectId: string; children: React.ReactChild; }) { + const extraConnectionOptions = useContext( + SandboxExtraConnectionOptionsContext + ); const atlasService = atlasServiceLocator(); const storage = useRef( - new AtlasCloudConnectionStorage(atlasService, orgId, projectId) + new AtlasCloudConnectionStorage( + atlasService, + orgId, + projectId, + extraConnectionOptions + ) ); const sandboxConnectionStorage = useContext( SandboxConnectionStorageContext diff --git a/packages/compass-web/webpack.config.js b/packages/compass-web/webpack.config.js index d16c68303f5..5a614982eb7 100644 --- a/packages/compass-web/webpack.config.js +++ b/packages/compass-web/webpack.config.js @@ -6,8 +6,6 @@ const { isServe, merge, } = require('@mongodb-js/webpack-config-compass'); -const { startElectronProxy } = require('./scripts/start-electron-proxy'); -const { createWebSocketProxy } = require('./scripts/ws-proxy'); const { execFile } = require('child_process'); const { promisify } = require('util'); @@ -17,7 +15,7 @@ function localPolyfill(name) { return path.resolve(__dirname, 'polyfills', ...name.split('/'), 'index.ts'); } -module.exports = async (env, args) => { +module.exports = (env, args) => { const serve = isServe({ env }); let config = createWebConfig({ @@ -29,6 +27,8 @@ module.exports = async (env, args) => { delete config.externals; config = merge(config, { + context: __dirname, + resolve: { alias: { // Dependencies for the unsupported connection types in data-service @@ -143,10 +143,6 @@ module.exports = async (env, args) => { }); if (serve) { - startElectronProxy(); - // TODO: logs are pretty rough here, should make it better - createWebSocketProxy(); - config.output = { path: config.output.path, filename: config.output.filename, diff --git a/packages/compass-workspaces/src/components/workspaces.tsx b/packages/compass-workspaces/src/components/workspaces.tsx index dd8a902cc63..624b697911c 100644 --- a/packages/compass-workspaces/src/components/workspaces.tsx +++ b/packages/compass-workspaces/src/components/workspaces.tsx @@ -81,7 +81,7 @@ const ActiveTabCloseHandler: React.FunctionComponent = ({ children }) => { // Make sure we don't count clicking on buttons that actually cause the // workspace to change, like using breadcrumbs or clicking on an item in the // Databases / Collections list. There are certain corner-cases this doesn't - // handle, but it's good enough to prevent most cases where users can loose + // handle, but it's good enough to prevent most cases where users can lose // content by accident rafraf(() => { if (mountedRef.current) { From 3eaf6b6a6ae479eaa1d98ec064a3592d8492ae9f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:47:08 +0000 Subject: [PATCH 45/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6303) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index cac9e707ac2..5c50d0defaa 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Sep 30, 2024 at 12:48 PM +Generated on Mon, Sep 30, 2024 at 02:46 PM ## Table of Contents From c64c3eb80d5fc1c2d71c9794f9b35ec86d0ff181 Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:04:04 -0400 Subject: [PATCH 46/97] chore(release): bump package versions (#6302) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 290 +++++++++--------- packages/compass-aggregations/package.json | 8 +- packages/compass-collection/package.json | 4 +- .../package.json | 4 +- packages/compass-crud/package.json | 8 +- packages/compass-e2e-tests/package.json | 2 +- packages/compass-explain-plan/package.json | 4 +- .../compass-export-to-language/package.json | 4 +- packages/compass-global-writes/package.json | 4 +- packages/compass-import-export/package.json | 4 +- packages/compass-indexes/package.json | 4 +- packages/compass-query-bar/package.json | 4 +- .../package.json | 4 +- .../compass-schema-validation/package.json | 6 +- packages/compass-schema/package.json | 6 +- packages/compass-serverstats/package.json | 4 +- packages/compass-shell/package.json | 4 +- packages/compass-sidebar/package.json | 6 +- packages/compass-web/package.json | 32 +- packages/compass-welcome/package.json | 4 +- packages/compass-workspaces/package.json | 2 +- packages/compass/package.json | 38 +-- .../databases-collections-list/package.json | 4 +- packages/databases-collections/package.json | 6 +- 25 files changed, 229 insertions(+), 229 deletions(-) diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index b4f8955cc12..43ab0dcffa1 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.3", + "version": "1.4.4", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/package-lock.json b/package-lock.json index 2baf4ff408c..397cebf3545 100644 --- a/package-lock.json +++ b/package-lock.json @@ -497,7 +497,7 @@ }, "configs/webpack-config-compass": { "name": "@mongodb-js/webpack-config-compass", - "version": "1.4.3", + "version": "1.4.4", "license": "SSPL", "dependencies": { "@babel/core": "^7.21.4", @@ -43776,36 +43776,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-import-export": "^7.42.1", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-import-export": "^7.42.2", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-serverstats": "^16.42.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-serverstats": "^16.42.2", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-shell": "^3.42.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", @@ -43818,7 +43818,7 @@ "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", @@ -43865,7 +43865,7 @@ }, "packages/compass-aggregations": { "name": "@mongodb-js/compass-aggregations", - "version": "9.45.1", + "version": "9.45.2", "license": "SSPL", "dependencies": { "@babel/generator": "^7.19.5", @@ -43876,17 +43876,17 @@ "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.17.0", @@ -44030,7 +44030,7 @@ }, "packages/compass-collection": { "name": "@mongodb-js/compass-collection", - "version": "4.42.1", + "version": "4.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", @@ -44038,7 +44038,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", "compass-preferences-model": "^2.29.0", @@ -44327,12 +44327,12 @@ }, "packages/compass-connections-navigation": { "name": "@mongodb-js/compass-connections-navigation", - "version": "1.42.1", + "version": "1.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", @@ -44422,19 +44422,19 @@ }, "packages/compass-crud": { "name": "@mongodb-js/compass-crud", - "version": "13.43.1", + "version": "13.43.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -44526,7 +44526,7 @@ } }, "packages/compass-e2e-tests": { - "version": "1.27.1", + "version": "1.27.2", "devDependencies": { "@electron/rebuild": "^3.6.0", "@mongodb-js/compass-test-server": "^0.1.22", @@ -44896,10 +44896,10 @@ }, "packages/compass-explain-plan": { "name": "@mongodb-js/compass-explain-plan", - "version": "6.43.1", + "version": "6.43.2", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -44975,10 +44975,10 @@ }, "packages/compass-export-to-language": { "name": "@mongodb-js/compass-export-to-language", - "version": "9.19.1", + "version": "9.19.2", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -45268,11 +45268,11 @@ }, "packages/compass-global-writes": { "name": "@mongodb-js/compass-global-writes", - "version": "1.2.0", + "version": "1.2.1", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-field-store": "^9.18.1", @@ -45461,7 +45461,7 @@ }, "packages/compass-import-export": { "name": "@mongodb-js/compass-import-export", - "version": "7.42.1", + "version": "7.42.2", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", @@ -45471,7 +45471,7 @@ "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", @@ -45555,7 +45555,7 @@ }, "packages/compass-indexes": { "name": "@mongodb-js/compass-indexes", - "version": "5.42.1", + "version": "5.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", @@ -45566,7 +45566,7 @@ "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", @@ -45969,12 +45969,12 @@ }, "packages/compass-query-bar": { "name": "@mongodb-js/compass-query-bar", - "version": "8.44.1", + "version": "8.44.2", "license": "SSPL", "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -46047,7 +46047,7 @@ }, "packages/compass-saved-aggregations-queries": { "name": "@mongodb-js/compass-saved-aggregations-queries", - "version": "1.43.1", + "version": "1.43.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", @@ -46055,7 +46055,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/my-queries-storage": "^0.17.0", @@ -46123,15 +46123,15 @@ }, "packages/compass-schema": { "name": "@mongodb-js/compass-schema", - "version": "6.44.1", + "version": "6.44.2", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -46182,14 +46182,14 @@ }, "packages/compass-schema-validation": { "name": "@mongodb-js/compass-schema-validation", - "version": "6.43.1", + "version": "6.43.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", @@ -46259,14 +46259,14 @@ }, "packages/compass-serverstats": { "name": "@mongodb-js/compass-serverstats", - "version": "16.42.1", + "version": "16.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", @@ -46377,7 +46377,7 @@ }, "packages/compass-shell": { "name": "@mongodb-js/compass-shell", - "version": "3.42.1", + "version": "3.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", @@ -46386,7 +46386,7 @@ "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", @@ -46702,18 +46702,18 @@ }, "packages/compass-sidebar": { "name": "@mongodb-js/compass-sidebar", - "version": "5.43.1", + "version": "5.43.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-connections-navigation": "^1.42.1", + "@mongodb-js/compass-connections-navigation": "^1.42.2", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", @@ -47077,31 +47077,31 @@ }, "packages/compass-web": { "name": "@mongodb-js/compass-web", - "version": "0.8.1", + "version": "0.8.2", "license": "SSPL", "devDependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -47109,7 +47109,7 @@ "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -47317,14 +47317,14 @@ }, "packages/compass-welcome": { "name": "@mongodb-js/compass-welcome", - "version": "0.41.1", + "version": "0.41.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", @@ -47383,7 +47383,7 @@ }, "packages/compass-workspaces": { "name": "@mongodb-js/compass-workspaces", - "version": "0.24.1", + "version": "0.24.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", @@ -48072,7 +48072,7 @@ }, "packages/databases-collections": { "name": "@mongodb-js/compass-databases-collections", - "version": "1.42.1", + "version": "1.42.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", @@ -48081,8 +48081,8 @@ "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", - "@mongodb-js/databases-collections-list": "^1.40.1", + "@mongodb-js/compass-workspaces": "^0.24.2", + "@mongodb-js/databases-collections-list": "^1.40.2", "@mongodb-js/my-queries-storage": "^0.17.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", @@ -48119,13 +48119,13 @@ }, "packages/databases-collections-list": { "name": "@mongodb-js/databases-collections-list", - "version": "1.40.1", + "version": "1.40.2", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", @@ -56002,17 +56002,17 @@ "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56146,7 +56146,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56437,7 +56437,7 @@ "requires": { "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56497,16 +56497,16 @@ "version": "file:packages/compass-crud", "requires": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56566,8 +56566,8 @@ "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", - "@mongodb-js/databases-collections-list": "^1.40.1", + "@mongodb-js/compass-workspaces": "^0.24.2", + "@mongodb-js/databases-collections-list": "^1.40.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/my-queries-storage": "^0.17.0", @@ -56684,7 +56684,7 @@ "@mongodb-js/compass-explain-plan": { "version": "file:packages/compass-explain-plan", "requires": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -56754,7 +56754,7 @@ "@mongodb-js/compass-export-to-language": { "version": "file:packages/compass-export-to-language", "requires": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -57004,7 +57004,7 @@ "version": "file:packages/compass-global-writes", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-field-store": "^9.18.1", @@ -57127,7 +57127,7 @@ "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57212,7 +57212,7 @@ "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57485,7 +57485,7 @@ "requires": { "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", @@ -57557,7 +57557,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57621,12 +57621,12 @@ "@mongodb-js/compass-schema": { "version": "file:packages/compass-schema", "requires": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57699,10 +57699,10 @@ "version": "file:packages/compass-schema-validation", "requires": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", @@ -58091,7 +58091,7 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58202,7 +58202,7 @@ "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58435,11 +58435,11 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-connections-navigation": "^1.42.1", + "@mongodb-js/compass-connections-navigation": "^1.42.2", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -58762,27 +58762,27 @@ "version": "file:packages/compass-web", "requires": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -58790,7 +58790,7 @@ "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -58983,7 +58983,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -59425,7 +59425,7 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -80055,36 +80055,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-import-export": "^7.42.1", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-import-export": "^7.42.2", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-serverstats": "^16.42.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-serverstats": "^16.42.2", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-shell": "^3.42.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", @@ -80097,7 +80097,7 @@ "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@mongosh/node-runtime-worker-thread": "^2.3.1", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", diff --git a/packages/compass-aggregations/package.json b/packages/compass-aggregations/package.json index 942e5c44a1c..1cf42ff6fcd 100644 --- a/packages/compass-aggregations/package.json +++ b/packages/compass-aggregations/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-aggregations", "description": "Compass Aggregation Pipeline Builder", "private": true, - "version": "9.45.1", + "version": "9.45.2", "main": "dist/index.js", "compass:main": "src/index.ts", "types": "dist/index.d.ts", @@ -63,17 +63,17 @@ "@dnd-kit/utilities": "^3.2.1", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.17.0", diff --git a/packages/compass-collection/package.json b/packages/compass-collection/package.json index 7dbaedf490b..7000307b358 100644 --- a/packages/compass-collection/package.json +++ b/packages/compass-collection/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "4.42.1", + "version": "4.42.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/mongodb-constants": "^0.10.2", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass-connections-navigation/package.json b/packages/compass-connections-navigation/package.json index 253bbcf0169..419f4f67123 100644 --- a/packages/compass-connections-navigation/package.json +++ b/packages/compass-connections-navigation/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.42.1", + "version": "1.42.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-form": "^1.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "compass-preferences-model": "^2.29.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 5e1de5ec2bf..dec2f171c2f 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "13.43.1", + "version": "13.43.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,15 +72,15 @@ }, "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/explain-plan-helper": "^1.2.3", "@mongodb-js/my-queries-storage": "^0.17.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index fb6a7405e35..454074f362e 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "compass-e2e-tests", - "version": "1.27.1", + "version": "1.27.2", "private": true, "description": "E2E test suite for Compass app that follows smoke tests / feature testing matrix", "scripts": { diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index 7173623df09..e46411c6d7a 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.43.1", + "version": "6.43.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,7 +69,7 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", diff --git a/packages/compass-export-to-language/package.json b/packages/compass-export-to-language/package.json index bece71d16f6..f9d7f4ef167 100644 --- a/packages/compass-export-to-language/package.json +++ b/packages/compass-export-to-language/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.19.1", + "version": "9.19.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,7 +48,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index b2594f351d5..ab2f3f13335 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.2.0", + "version": "1.2.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,7 +50,7 @@ }, "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index a5c69e6ccdf..5c46f687ec1 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.42.1", + "version": "7.42.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -55,7 +55,7 @@ "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", "debug": "^4.3.4", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index 79ce4fe69ef..7cdc20a6075 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "5.42.1", + "version": "5.42.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -75,7 +75,7 @@ "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index ec57ad2f178..3855ba7aa8a 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "8.44.1", + "version": "8.44.2", "homepage": "https://github.com/mongodb-js/compass", "license": "SSPL", "bugs": { @@ -68,7 +68,7 @@ "dependencies": { "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-editor": "^0.31.0", diff --git a/packages/compass-saved-aggregations-queries/package.json b/packages/compass-saved-aggregations-queries/package.json index c40664c63ac..8f014bec958 100644 --- a/packages/compass-saved-aggregations-queries/package.json +++ b/packages/compass-saved-aggregations-queries/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.43.1", + "version": "1.43.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/my-queries-storage": "^0.17.0", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index 675e6d89eb3..60e0ee6cc7e 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.43.1", + "version": "6.43.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -70,10 +70,10 @@ }, "dependencies": { "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", + "@mongodb-js/compass-crud": "^13.43.2", "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index ff93ca59ee7..ff92b7e7689 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.44.1", + "version": "6.44.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,13 +72,13 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-query-bar": "^8.44.1", + "@mongodb-js/compass-query-bar": "^8.44.2", "@mongodb-js/connection-storage": "^0.22.0", "bson": "^6.7.0", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass-serverstats/package.json b/packages/compass-serverstats/package.json index fd813f21cbf..77bb6e773ec 100644 --- a/packages/compass-serverstats/package.json +++ b/packages/compass-serverstats/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-serverstats", "description": "Compass Real Time", "private": true, - "version": "16.42.1", + "version": "16.42.2", "main": "dist/index.js", "compass:main": "src/index.ts", "exports": { @@ -34,7 +34,7 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 0b5df28e674..908679cce68 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "3.42.1", + "version": "3.42.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -55,7 +55,7 @@ "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-user-data": "^0.3.8", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongosh/browser-repl": "^2.3.1", "@mongosh/logging": "^2.3.1", "@mongosh/node-runtime-worker-thread": "^2.3.1", diff --git a/packages/compass-sidebar/package.json b/packages/compass-sidebar/package.json index b29c313edac..735a9301b75 100644 --- a/packages/compass-sidebar/package.json +++ b/packages/compass-sidebar/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "5.43.1", + "version": "5.43.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,11 +52,11 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-connections-navigation": "^1.42.1", + "@mongodb-js/compass-connections-navigation": "^1.42.2", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.0", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-form": "^1.41.1", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 3257fcc935f..41030bbcc4c 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.8.1", + "version": "0.8.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -63,27 +63,27 @@ }, "devDependencies": { "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -91,7 +91,7 @@ "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", diff --git a/packages/compass-welcome/package.json b/packages/compass-welcome/package.json index 042662abd1b..e0c2ebfb3d6 100644 --- a/packages/compass-welcome/package.json +++ b/packages/compass-welcome/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.41.1", + "version": "0.41.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", diff --git a/packages/compass-workspaces/package.json b/packages/compass-workspaces/package.json index b7983d8e2ec..50d0ddea3f1 100644 --- a/packages/compass-workspaces/package.json +++ b/packages/compass-workspaces/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.24.1", + "version": "0.24.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/packages/compass/package.json b/packages/compass/package.json index 4027ea3b23a..bb934a8154f 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -192,36 +192,36 @@ "@electron/rebuild": "^3.6.0", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", - "@mongodb-js/compass-aggregations": "^9.45.1", + "@mongodb-js/compass-aggregations": "^9.45.2", "@mongodb-js/compass-app-stores": "^7.29.1", - "@mongodb-js/compass-collection": "^4.42.1", + "@mongodb-js/compass-collection": "^4.42.2", "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connection-import-export": "^0.39.1", "@mongodb-js/compass-connections": "^1.43.1", - "@mongodb-js/compass-crud": "^13.43.1", - "@mongodb-js/compass-databases-collections": "^1.42.1", - "@mongodb-js/compass-explain-plan": "^6.43.1", - "@mongodb-js/compass-export-to-language": "^9.19.1", + "@mongodb-js/compass-crud": "^13.43.2", + "@mongodb-js/compass-databases-collections": "^1.42.2", + "@mongodb-js/compass-explain-plan": "^6.43.2", + "@mongodb-js/compass-export-to-language": "^9.19.2", "@mongodb-js/compass-field-store": "^9.18.1", "@mongodb-js/compass-find-in-page": "^4.31.0", "@mongodb-js/compass-generative-ai": "^0.23.0", - "@mongodb-js/compass-global-writes": "^1.2.0", - "@mongodb-js/compass-import-export": "^7.42.1", - "@mongodb-js/compass-indexes": "^5.42.1", + "@mongodb-js/compass-global-writes": "^1.2.1", + "@mongodb-js/compass-import-export": "^7.42.2", + "@mongodb-js/compass-indexes": "^5.42.2", "@mongodb-js/compass-intercom": "^0.13.0", "@mongodb-js/compass-logging": "^1.4.8", - "@mongodb-js/compass-query-bar": "^8.44.1", - "@mongodb-js/compass-saved-aggregations-queries": "^1.43.1", - "@mongodb-js/compass-schema": "^6.44.1", - "@mongodb-js/compass-schema-validation": "^6.43.1", - "@mongodb-js/compass-serverstats": "^16.42.1", + "@mongodb-js/compass-query-bar": "^8.44.2", + "@mongodb-js/compass-saved-aggregations-queries": "^1.43.2", + "@mongodb-js/compass-schema": "^6.44.2", + "@mongodb-js/compass-schema-validation": "^6.43.2", + "@mongodb-js/compass-serverstats": "^16.42.2", "@mongodb-js/compass-settings": "^0.41.0", - "@mongodb-js/compass-shell": "^3.42.1", - "@mongodb-js/compass-sidebar": "^5.43.1", + "@mongodb-js/compass-shell": "^3.42.2", + "@mongodb-js/compass-sidebar": "^5.43.2", "@mongodb-js/compass-telemetry": "^1.2.0", "@mongodb-js/compass-utils": "^0.6.12", - "@mongodb-js/compass-welcome": "^0.41.1", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-welcome": "^0.41.2", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/connection-storage": "^0.22.0", "@mongodb-js/devtools-proxy-support": "^0.3.9", @@ -234,7 +234,7 @@ "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.3", + "@mongodb-js/webpack-config-compass": "^1.4.4", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", diff --git a/packages/databases-collections-list/package.json b/packages/databases-collections-list/package.json index 3ef13aa1e50..d4f8db40e1e 100644 --- a/packages/databases-collections-list/package.json +++ b/packages/databases-collections-list/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.40.1", + "version": "1.40.2", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,7 +51,7 @@ "@mongodb-js/compass-components": "^1.30.0", "@mongodb-js/compass-connections": "^1.43.1", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", + "@mongodb-js/compass-workspaces": "^0.24.2", "@mongodb-js/connection-info": "^0.9.0", "compass-preferences-model": "^2.29.0", "mongodb-ns": "^2.4.2", diff --git a/packages/databases-collections/package.json b/packages/databases-collections/package.json index 48c4abc06a5..fa378a64d14 100644 --- a/packages/databases-collections/package.json +++ b/packages/databases-collections/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-databases-collections", "description": "Plugin for viewing the list of, creating, and dropping databases and collections", "private": true, - "version": "1.42.1", + "version": "1.42.2", "license": "SSPL", "homepage": "https://github.com/mongodb-js/compass", "bugs": { @@ -65,8 +65,8 @@ "@mongodb-js/compass-editor": "^0.31.0", "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", - "@mongodb-js/compass-workspaces": "^0.24.1", - "@mongodb-js/databases-collections-list": "^1.40.1", + "@mongodb-js/compass-workspaces": "^0.24.2", + "@mongodb-js/databases-collections-list": "^1.40.2", "@mongodb-js/my-queries-storage": "^0.17.0", "compass-preferences-model": "^2.29.0", "hadron-app-registry": "^9.2.7", From 9279a7857cd0b8ed920b0a1e6536af84f14bb765 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 05:11:01 +0000 Subject: [PATCH 47/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6306) Update report Co-authored-by: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 8dca8fe19cf..616e9ade9e5 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Mon Sep 30 2024. +This document was automatically generated on Tue Oct 01 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 5c50d0defaa..4f972851018 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Sep 30, 2024 at 02:46 PM +Generated on Tue, Oct 1, 2024 at 05:10 AM ## Table of Contents From 42294867749aa34faf6b8e7c48d946d3f3cc2b5e Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 1 Oct 2024 09:27:22 +0200 Subject: [PATCH 48/97] chore(atlas-service, indexes): remove all the domain specific parts of automation agent request helper (#6305) * chore(atlas-service, indexes): remove all the domain specific parts of automation agent request helper * chore(indexes): add some tests --- packages/atlas-service/src/atlas-service.ts | 109 +++++++--- .../make-automation-agent-op-request.spec.ts | 124 ------------ .../src/make-automation-agent-op-request.ts | 186 ------------------ .../modules/rolling-indexes-service.spec.ts | 69 +++++++ .../src/modules/rolling-indexes-service.ts | 62 ++++-- 5 files changed, 199 insertions(+), 351 deletions(-) delete mode 100644 packages/atlas-service/src/make-automation-agent-op-request.spec.ts delete mode 100644 packages/atlas-service/src/make-automation-agent-op-request.ts create mode 100644 packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts diff --git a/packages/atlas-service/src/atlas-service.ts b/packages/atlas-service/src/atlas-service.ts index 8abe8f2c03b..c57a506b852 100644 --- a/packages/atlas-service/src/atlas-service.ts +++ b/packages/atlas-service/src/atlas-service.ts @@ -9,11 +9,6 @@ import { import type { Logger } from '@mongodb-js/compass-logging'; import type { PreferencesAccess } from 'compass-preferences-model'; import type { AtlasClusterMetadata } from '@mongodb-js/connection-info'; -import type { - AutomationAgentRequestTypes, - AutomationAgentResponse, -} from './make-automation-agent-op-request'; -import { makeAutomationAgentOpRequest } from './make-automation-agent-op-request'; export type AtlasServiceOptions = { defaultHeaders?: Record; @@ -104,34 +99,90 @@ export class AtlasService { }, }); } - automationAgentFetch( - atlasMetadata: Pick< - AtlasClusterMetadata, - | 'projectId' - | 'clusterUniqueId' - | 'regionalBaseUrl' - | 'metricsType' - | 'metricsId' - >, - opType: OpType, - opBody: Omit< - AutomationAgentRequestTypes[OpType], - 'clusterId' | 'serverlessId' - > - ): Promise> { + async automationAgentRequest( + atlasMetadata: AtlasClusterMetadata, + opType: string, + opBody: Record + ): Promise<{ _id: string; requestType: string } | undefined> { const opBodyClusterId = atlasMetadata.metricsType === 'serverless' ? { serverlessId: atlasMetadata.clusterUniqueId } : { clusterId: atlasMetadata.metricsId }; - return makeAutomationAgentOpRequest( - this.authenticatedFetch.bind(this), - this.regionalizedCloudEndpoint(atlasMetadata), - atlasMetadata.projectId, - opType, - Object.assign( - opBodyClusterId, - opBody - ) as AutomationAgentRequestTypes[OpType] + const requestUrl = this.regionalizedCloudEndpoint( + atlasMetadata, + `/explorer/v1/groups/${atlasMetadata.projectId}/requests/${opType}` ); + const json = await this.authenticatedFetch(requestUrl, { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify({ ...opBodyClusterId, ...opBody }), + }).then((res) => { + if ( + res.headers + .get('content-type') + ?.toLowerCase() + .includes('application/json') + ) { + return res.json(); + } + }); + assertAutomationAgentRequestResponse(json, opType); + return json; + } + async automationAgentAwait( + atlasMetadata: AtlasClusterMetadata, + opType: string, + requestId: string + ): Promise<{ + _id: string; + requestType: string; + response: T[]; + }> { + const requestUrl = this.regionalizedCloudEndpoint( + atlasMetadata, + `/explorer/v1/groups/${atlasMetadata.projectId}/requests/${requestId}/types/${opType}/await` + ); + const json = await this.authenticatedFetch(requestUrl, { + method: 'GET', + }).then((res) => { + return res.json(); + }); + assertAutomationAgentAwaitResponse(json, opType); + return json; + } +} + +function assertAutomationAgentRequestResponse( + json: any, + opType: string +): asserts json is { _id: string; requestType: string } { + if ( + Object.prototype.hasOwnProperty.call(json, '_id') && + Object.prototype.hasOwnProperty.call(json, 'requestType') && + json.requestType === opType + ) { + return; + } + throw new Error( + 'Got unexpected backend response for automation agent request' + ); +} + +function assertAutomationAgentAwaitResponse( + json: any, + opType: string +): asserts json is { _id: string; requestType: string; response: T[] } { + if ( + Object.prototype.hasOwnProperty.call(json, '_id') && + Object.prototype.hasOwnProperty.call(json, 'requestType') && + Object.prototype.hasOwnProperty.call(json, 'response') && + json.requestType === opType + ) { + return; } + throw new Error( + 'Got unexpected backend response for automation agent request await' + ); } diff --git a/packages/atlas-service/src/make-automation-agent-op-request.spec.ts b/packages/atlas-service/src/make-automation-agent-op-request.spec.ts deleted file mode 100644 index c989d62fca7..00000000000 --- a/packages/atlas-service/src/make-automation-agent-op-request.spec.ts +++ /dev/null @@ -1,124 +0,0 @@ -import Sinon from 'sinon'; -import { makeAutomationAgentOpRequest } from './make-automation-agent-op-request'; -import { expect } from 'chai'; - -describe('makeAutomationAgentOpRequest', function () { - const successSpecs = [ - [ - 'succeeds if backend returned requestId and response', - { _id: 'abc', requestType: 'listIndexStats' }, - { - _id: 'abc', - requestType: 'listIndexStats', - response: [{ indexName: 'test' }], - }, - ], - ] as const; - - const failSpecs = [ - [ - 'fails if initial request fails', - new Error('NetworkError'), - {}, - /NetworkError/, - ], - [ - 'fails if await response fails', - { _id: 'abc', requestType: 'listIndexStats' }, - new Error('NetworkError'), - /NetworkError/, - ], - [ - 'fails if backend did not return requestId', - {}, - {}, - /Got unexpected backend response/, - ], - [ - 'fails if backend returned requestId but no response', - { _id: 'abc', requestType: 'listIndexStats' }, - {}, - /Got unexpected backend response/, - ], - ] as const; - - function getMockFetch( - requestResponse: Record | Error, - awaitResponse: Record | Error - ) { - return Sinon.stub() - .onFirstCall() - .callsFake(() => { - return requestResponse instanceof Error - ? Promise.reject(requestResponse) - : Promise.resolve({ - ok: true, - staus: 200, - json() { - return Promise.resolve(requestResponse); - }, - }); - }) - .onSecondCall() - .callsFake(() => { - return awaitResponse instanceof Error - ? Promise.reject(awaitResponse) - : Promise.resolve({ - ok: true, - staus: 200, - json() { - return Promise.resolve(awaitResponse); - }, - }); - }); - } - - function getRequestBodyFromFnCall(call: Sinon.SinonSpyCall) { - return JSON.parse(call.args[1].body); - } - - for (const [ - successSpecName, - requestResponse, - awaitResponse, - ] of successSpecs) { - it(successSpecName, async function () { - const fetchFn = getMockFetch(requestResponse, awaitResponse); - const res = await makeAutomationAgentOpRequest( - fetchFn, - 'http://example.com', - 'abc', - 'listIndexStats', - { clusterId: 'abc', db: 'db', collection: 'coll' } - ); - expect(getRequestBodyFromFnCall(fetchFn.firstCall)).to.deep.eq({ - clusterId: 'abc', - collection: 'coll', - db: 'db', - }); - expect(res).to.deep.eq(awaitResponse.response); - }); - } - - for (const [ - failSpecName, - requestResponse, - awaitResponse, - errorMessage, - ] of failSpecs) { - it(failSpecName, async function () { - try { - await makeAutomationAgentOpRequest( - getMockFetch(requestResponse, awaitResponse), - 'http://example.com', - 'abc', - 'listIndexStats', - { clusterId: 'abc', db: 'db', collection: 'coll' } - ); - expect.fail('Expected makeAutomationAgentOpRequest call to fail'); - } catch (err) { - expect((err as any).message).to.match(errorMessage); - } - }); - } -}); diff --git a/packages/atlas-service/src/make-automation-agent-op-request.ts b/packages/atlas-service/src/make-automation-agent-op-request.ts deleted file mode 100644 index 1d0c5c0def1..00000000000 --- a/packages/atlas-service/src/make-automation-agent-op-request.ts +++ /dev/null @@ -1,186 +0,0 @@ -type ClusterOrServerlessId = - | { serverlessId?: never; clusterId: string } - | { serverlessId: string; clusterId?: never }; - -export type AutomationAgentRequestTypes = { - listIndexStats: ClusterOrServerlessId & { - db: string; - collection: string; - }; - index: ClusterOrServerlessId & { - db: string; - collection: string; - keys: string; - options: string; - collationOptions: string; - }; - dropIndex: ClusterOrServerlessId & { - db: string; - collection: string; - name: string; - }; -}; - -type AutomationAgentRequestOpTypes = keyof AutomationAgentRequestTypes; - -type AutomationAgentRequestResponse< - OpType extends AutomationAgentRequestOpTypes -> = { - _id: string; - requestType: OpType; -}; - -function assertAutomationAgentRequestResponse< - OpType extends AutomationAgentRequestOpTypes ->( - json: any, - opType: OpType -): asserts json is AutomationAgentRequestResponse { - if ( - Object.prototype.hasOwnProperty.call(json, '_id') && - Object.prototype.hasOwnProperty.call(json, 'requestType') && - json.requestType === opType - ) { - return; - } - throw new Error( - 'Got unexpected backend response for automation agent request' - ); -} - -export type AutomationAgentAwaitResponseTypes = { - listIndexStats: { - collName: string; - dbName: string; - indexName: string; - indexProperties: { label: string; properties: Record }[]; - indexType: { label: string }; - keys: { name: string; value: string | number }; - sizeBytes: number; - status: 'rolling build' | 'building' | 'exists'; - }[]; - dropIndex: never[]; -}; - -type AutomationAgentAwaitOpTypes = keyof AutomationAgentAwaitResponseTypes; - -type AutomationAgentAwaitResponse = - { - _id: string; - requestID: string; - requestType: OpType; - response: AutomationAgentAwaitResponseTypes[OpType]; - type: OpType; - }; - -function assertAutomationAgentAwaitResponse< - OpType extends AutomationAgentAwaitOpTypes ->( - json: any, - opType: OpType -): asserts json is AutomationAgentAwaitResponse { - if ( - Object.prototype.hasOwnProperty.call(json, '_id') && - Object.prototype.hasOwnProperty.call(json, 'requestType') && - Object.prototype.hasOwnProperty.call(json, 'response') && - json.requestType === opType - ) { - return; - } - throw new Error( - 'Got unexpected backend response for automation agent request await' - ); -} - -type PickAwaitResponse = - AutomationAgentAwaitResponse['response']; - -/** - * Helper type that maps whatever is returned by automation agent in response - * prop as follows: - * - * empty array -> undefined - * array with one item -> unwrapped item - * array of items -> array of items - */ -export type UnwrappedAutomationAgentAwaitResponse< - OpType extends AutomationAgentAwaitOpTypes -> = PickAwaitResponse extends never[] - ? undefined - : PickAwaitResponse extends [infer UnwrappedResponse] - ? UnwrappedResponse - : PickAwaitResponse extends Array - ? PickAwaitResponse - : never; - -function unwrapAutomationAgentAwaitResponse( - json: any, - opType: 'listIndexStats' -): UnwrappedAutomationAgentAwaitResponse<'listIndexStats'>; -function unwrapAutomationAgentAwaitResponse( - json: any, - opType: 'dropIndex' -): UnwrappedAutomationAgentAwaitResponse<'dropIndex'>; -function unwrapAutomationAgentAwaitResponse(json: any, opType: string): never; -function unwrapAutomationAgentAwaitResponse( - json: any, - opType: string -): unknown { - if (opType === 'dropIndex') { - assertAutomationAgentAwaitResponse(json, opType); - // `dropIndex` returns an empty array, so returning undefined here is just a - // bit more explicit than returning `json.response[0]` instead - return undefined; - } - if (opType === 'listIndexStats') { - assertAutomationAgentAwaitResponse(json, opType); - return json.response; - } - throw new Error(`Unsupported await response type: ${opType}`); -} - -export type AutomationAgentResponse< - OpType extends AutomationAgentRequestOpTypes -> = OpType extends AutomationAgentAwaitOpTypes - ? UnwrappedAutomationAgentAwaitResponse - : undefined; - -async function makeAutomationAgentOpRequest< - OpType extends AutomationAgentRequestOpTypes ->( - fetchFn: typeof fetch, - baseUrl: string, - projectId: string, - opType: OpType, - opBody: AutomationAgentRequestTypes[OpType] -): Promise> { - const requestUrl = - baseUrl + encodeURI(`/explorer/v1/groups/${projectId}/requests/${opType}`); - // Tell automation agent to run the op first, this will return the id that we - // can use to track the job result - const requestRes = await fetchFn(requestUrl, { - method: 'POST', - headers: { - 'content-type': 'application/json', - }, - body: JSON.stringify(opBody), - }); - // Rolling index creation request doesn't return anything that we can "await" - // on (a successful response is already an acknowledgement that request to - // create an index was registered), so we just end here - if (opType === 'index') { - return undefined as AutomationAgentResponse; - } - const requestJson = await requestRes.json(); - assertAutomationAgentRequestResponse(requestJson, opType); - const awaitUrl = - baseUrl + - encodeURI( - `/explorer/v1/groups/${projectId}/requests/${requestJson._id}/types/${opType}/await` - ); - const awaitRes = await fetchFn(awaitUrl, { method: 'GET' }); - const awaitJson = await awaitRes.json(); - return unwrapAutomationAgentAwaitResponse(awaitJson, opType); -} - -export { makeAutomationAgentOpRequest }; diff --git a/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts b/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts new file mode 100644 index 00000000000..6fd94829d5f --- /dev/null +++ b/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts @@ -0,0 +1,69 @@ +import Sinon from 'sinon'; +import { RollingIndexesService } from './rolling-indexes-service'; +import { expect } from 'chai'; + +describe('RollingIndexesService', function () { + const atlasServiceStub = { + automationAgentRequest: Sinon.stub(), + automationAgentAwait: Sinon.stub(), + }; + let service: RollingIndexesService; + + beforeEach(() => { + service = new RollingIndexesService(atlasServiceStub, { + current: { + atlasMetadata: { + projectId: 'abc', + metricsType: 'cluster', + metricsId: '123', + }, + } as any, + }); + }); + + afterEach(() => { + atlasServiceStub.automationAgentRequest.reset(); + atlasServiceStub.automationAgentAwait.reset(); + }); + + describe('listRollingIndexes', function () { + it('should succeed if automation agent reutrned all responses as expected and filter only the rolling indexes', async function () { + atlasServiceStub.automationAgentRequest.resolves({ + _id: '_id', + requestType: 'requestType', + }); + atlasServiceStub.automationAgentAwait.resolves({ + response: [ + { indexName: 'abc', status: 'rolling build' }, + { indexName: 'cba', status: 'exists' }, + ], + }); + const res = await service.listRollingIndexes('db.coll'); + expect(res).to.deep.eq([{ indexName: 'abc', status: 'rolling build' }]); + }); + + it('should fail if automation agent backend returned unexpected result', async function () { + atlasServiceStub.automationAgentRequest.resolves(undefined); + + try { + await service.listRollingIndexes('db.coll'); + expect.fail('expected listRollingIndexes to throw'); + } catch (err) { + expect(err).not.to.be.null; + } + }); + }); + + describe('createRollingIndex', function () { + it('should fail if automation agent returned unexpected result', async function () { + atlasServiceStub.automationAgentRequest.resolves({ _id: '_id' }); + + try { + await service.createRollingIndex('db.coll', {}, {}); + expect.fail('expected createRollingIndex to throw'); + } catch (err) { + expect(err).not.to.be.null; + } + }); + }); +}); diff --git a/packages/compass-indexes/src/modules/rolling-indexes-service.ts b/packages/compass-indexes/src/modules/rolling-indexes-service.ts index 78e7863fcd1..df89c246bed 100644 --- a/packages/compass-indexes/src/modules/rolling-indexes-service.ts +++ b/packages/compass-indexes/src/modules/rolling-indexes-service.ts @@ -3,12 +3,26 @@ import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider import type { CreateIndexesOptions } from 'mongodb'; import toNS from 'mongodb-ns'; +type AtlasIndexStats = { + collName: string; + dbName: string; + indexName: string; + indexProperties: { label: string; properties: Record }[]; + indexType: { label: string }; + keys: { name: string; value: string | number }; + sizeBytes: number; + status: 'rolling build' | 'building' | 'exists'; +}; + export class RollingIndexesService { constructor( - private atlasService: AtlasService, + private atlasService: Pick< + AtlasService, + 'automationAgentRequest' | 'automationAgentAwait' + >, private connectionInfo: ConnectionInfoRef ) {} - async listRollingIndexes(namespace: string) { + async listRollingIndexes(namespace: string): Promise { const { atlasMetadata } = this.connectionInfo.current; if (!atlasMetadata) { throw new Error( @@ -16,16 +30,26 @@ export class RollingIndexesService { ); } const { database: db, collection } = toNS(namespace); - const indexes = await this.atlasService.automationAgentFetch( + const req = await this.atlasService.automationAgentRequest( atlasMetadata, 'listIndexStats', { db, collection } ); - return indexes.filter((index) => { + if (!req) { + throw new Error( + 'Unexpected response from the automation agent backend: expected to get the request metadata, got undefined' + ); + } + const res = await this.atlasService.automationAgentAwait( + atlasMetadata, + req.requestType, + req._id + ); + return res.response.filter((index) => { return index.status === 'rolling build'; }); } - createRollingIndex( + async createRollingIndex( namespace: string, indexSpec: Record, { collation, ...options }: CreateIndexesOptions @@ -37,12 +61,26 @@ export class RollingIndexesService { ); } const { database: db, collection } = toNS(namespace); - return this.atlasService.automationAgentFetch(atlasMetadata, 'index', { - db, - collection, - keys: JSON.stringify(indexSpec), - options: Object.keys(options).length > 0 ? JSON.stringify(options) : '', - collationOptions: collation ? JSON.stringify(collation) : '', - }); + const res = await this.atlasService.automationAgentRequest( + atlasMetadata, + 'index', + { + db, + collection, + keys: JSON.stringify(indexSpec), + options: Object.keys(options).length > 0 ? JSON.stringify(options) : '', + collationOptions: collation ? JSON.stringify(collation) : '', + } + ); + // Creating a rolling index doesn't return an "awaitable" job from + // automation agent backend + if (res) { + throw new Error( + `Unexpected response from the server, expected undefined, but got ${JSON.stringify( + res + )}` + ); + } + return undefined; } } From 6a1457ddc0d7dc004b940b03cad4e31b4b0463d8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 07:34:03 +0000 Subject: [PATCH 49/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6308) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 4f972851018..64f7ecd0d6f 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 1, 2024 at 05:10 AM +Generated on Tue, Oct 1, 2024 at 07:33 AM ## Table of Contents From 7d5c91abeaa5d97f60748466e902d6285061e79f Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Tue, 1 Oct 2024 13:04:27 +0100 Subject: [PATCH 50/97] chore(compas-indexes): store real indexes and in-progress indexes as separate lists (#6300) * store real indexes and in-progress indexes as separate lists * fixes after reading through it * more comments * fix helper * move drop failed index to its own action creator * split index actions into two specialised components * nit * unnecessary assertions * function that asserts --- .../indexes-toolbar/indexes-toolbar.tsx | 4 +- .../src/components/indexes/indexes.spec.tsx | 38 +-- .../in-progress-index-actions.spec.tsx | 58 +++++ .../in-progress-index-actions.tsx | 55 ++++ .../index-actions.spec.tsx | 94 ------- .../property-field.spec.tsx | 10 +- .../regular-indexes-table/property-field.tsx | 62 +++-- .../regular-index-actions.spec.tsx | 119 +++++++++ ...-actions.tsx => regular-index-actions.tsx} | 26 +- .../regular-indexes-table.spec.tsx | 152 +++++++++-- .../regular-indexes-table.tsx | 245 ++++++++++++++---- .../regular-indexes-table/type-field.tsx | 11 +- .../index.spec.tsx | 2 +- .../search-indexes-table.spec.tsx | 10 +- .../search-indexes-table.tsx | 29 ++- .../src/modules/regular-indexes.spec.ts | 126 ++------- .../src/modules/regular-indexes.ts | 151 ++++------- .../src/utils/index-link-helper.ts | 2 +- .../test/fixtures/regular-indexes.ts | 25 +- packages/compass-indexes/test/helpers.ts | 3 + .../data-service/src/index-detail-helper.ts | 2 +- 21 files changed, 734 insertions(+), 490 deletions(-) create mode 100644 packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.spec.tsx create mode 100644 packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.tsx delete mode 100644 packages/compass-indexes/src/components/regular-indexes-table/index-actions.spec.tsx create mode 100644 packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.spec.tsx rename packages/compass-indexes/src/components/regular-indexes-table/{index-actions.tsx => regular-index-actions.tsx} (87%) diff --git a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx index 2b8632dc57f..c9287df0b04 100644 --- a/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx +++ b/packages/compass-indexes/src/components/indexes-toolbar/indexes-toolbar.tsx @@ -189,7 +189,9 @@ export const IndexesToolbar: React.FunctionComponent = ({ warnings={['Readonly views may not contain indexes.']} /> ) : ( - !!errorMessage && + !!errorMessage && ( + + ) )}
); diff --git a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx index d1ec4a6b5eb..4706d23a155 100644 --- a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx +++ b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx @@ -95,7 +95,9 @@ describe('Indexes Component', function () { }, }); expect(screen.getByTestId('indexes-toolbar')).to.exist; - // TODO: actually check for the error + expect(screen.getByTestId('indexes-error').textContent).to.equal( + 'Some random error' + ); }); it('renders indexes toolbar when there is a search indexes error', async function () { @@ -200,28 +202,20 @@ describe('Indexes Component', function () { ], usageCount: 20, }, + ], + inProgressIndexes: [ { - key: {}, - ns: 'db.coll', - cardinality: 'single', + id: 'test-inprogress-index', name: 'item', - size: 0, - relativeSize: 0, - type: 'hashed', - extra: { - status: 'inprogress', - }, - properties: [], fields: [ { field: 'item', value: 1, }, ], - usageCount: 0, + status: 'inprogress', }, ], - inProgressIndexes: [], error: undefined, status: 'READY', }, @@ -263,29 +257,21 @@ describe('Indexes Component', function () { ], usageCount: 20, }, + ], + inProgressIndexes: [ { - key: {}, - ns: 'db.coll', - cardinality: 'single', + id: 'test-inprogress-index', name: 'item', - size: 0, - relativeSize: 0, - type: 'hashed', - extra: { - status: 'failed', - regularError: 'regularError message', - }, - properties: [], fields: [ { field: 'item', value: 1, }, ], - usageCount: 0, + status: 'failed', + error: 'Error message', }, ], - inProgressIndexes: [], error: undefined, status: 'READY', }, diff --git a/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.spec.tsx new file mode 100644 index 00000000000..a9641c189de --- /dev/null +++ b/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.spec.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { + cleanup, + render, + screen, + userEvent, +} from '@mongodb-js/testing-library-compass'; +import { expect } from 'chai'; +import { spy } from 'sinon'; +import type { SinonSpy } from 'sinon'; + +import InProgressIndexActions from './in-progress-index-actions'; + +describe('IndexActions Component', function () { + let onDeleteSpy: SinonSpy; + + before(cleanup); + afterEach(cleanup); + beforeEach(function () { + onDeleteSpy = spy(); + }); + + it('does not render the delete button for an in progress index that is still in progress', function () { + render( + + ); + + const button = screen.queryByTestId('index-actions-delete-action'); + expect(button).to.not.exist; + }); + + it('renders delete button for an in progress index that has failed', function () { + render( + + ); + + const button = screen.getByTestId('index-actions-delete-action'); + expect(button).to.exist; + expect(button.getAttribute('aria-label')).to.equal( + 'Drop Index artist_id_index' + ); + expect(onDeleteSpy.callCount).to.equal(0); + userEvent.click(button); + expect(onDeleteSpy.callCount).to.equal(1); + }); +}); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.tsx b/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.tsx new file mode 100644 index 00000000000..1596a1e541c --- /dev/null +++ b/packages/compass-indexes/src/components/regular-indexes-table/in-progress-index-actions.tsx @@ -0,0 +1,55 @@ +import React, { useCallback, useMemo } from 'react'; +import type { GroupedItemAction } from '@mongodb-js/compass-components'; +import { ItemActionGroup } from '@mongodb-js/compass-components'; +import type { InProgressIndex } from '../../modules/regular-indexes'; + +type Index = { + name: string; + status: InProgressIndex['status']; +}; + +type IndexActionsProps = { + index: Index; + onDeleteFailedIndexClick: (name: string) => void; +}; + +type IndexAction = 'delete'; + +const IndexActions: React.FunctionComponent = ({ + index, + onDeleteFailedIndexClick, +}) => { + const indexActions: GroupedItemAction[] = useMemo(() => { + const actions: GroupedItemAction[] = []; + + // you can only drop regular indexes or failed inprogress indexes + if (index.status === 'failed') { + actions.push({ + action: 'delete', + label: `Drop Index ${index.name}`, + icon: 'Trash', + }); + } + + return actions; + }, [index]); + + const onAction = useCallback( + (action: IndexAction) => { + if (action === 'delete') { + onDeleteFailedIndexClick(index.name); + } + }, + [onDeleteFailedIndexClick, index] + ); + + return ( + + data-testid="index-actions" + actions={indexActions} + onAction={onAction} + > + ); +}; + +export default IndexActions; diff --git a/packages/compass-indexes/src/components/regular-indexes-table/index-actions.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/index-actions.spec.tsx deleted file mode 100644 index 12c9dd55a8c..00000000000 --- a/packages/compass-indexes/src/components/regular-indexes-table/index-actions.spec.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from 'react'; -import { - cleanup, - render, - screen, - userEvent, -} from '@mongodb-js/testing-library-compass'; -import { expect } from 'chai'; -import { spy } from 'sinon'; -import type { SinonSpy } from 'sinon'; - -import IndexActions from './index-actions'; - -describe('IndexActions Component', function () { - let onDeleteSpy: SinonSpy; - let onHideIndexSpy: SinonSpy; - let onUnhideIndexSpy: SinonSpy; - - before(cleanup); - afterEach(cleanup); - beforeEach(function () { - onDeleteSpy = spy(); - onHideIndexSpy = spy(); - onUnhideIndexSpy = spy(); - render( - - ); - }); - - it('renders delete button', function () { - const button = screen.getByTestId('index-actions-delete-action'); - expect(button).to.exist; - expect(button.getAttribute('aria-label')).to.equal( - 'Drop Index artist_id_index' - ); - expect(onDeleteSpy.callCount).to.equal(0); - userEvent.click(button); - expect(onDeleteSpy.callCount).to.equal(1); - }); - - context('when server version is >= 4.4.0', function () { - it('renders hide index button when index is not hidden', function () { - const button = screen.getByTestId('index-actions-hide-action'); - expect(button).to.exist; - expect(button.getAttribute('aria-label')).to.equal( - 'Hide Index artist_id_index' - ); - expect(onHideIndexSpy.callCount).to.equal(0); - userEvent.click(button); - expect(onHideIndexSpy.callCount).to.equal(1); - }); - - it('renders unhide index button when index is hidden', function () { - render( - - ); - const button = screen.getByTestId('index-actions-unhide-action'); - expect(button).to.exist; - expect(button.getAttribute('aria-label')).to.equal( - 'Unhide Index artist_id_index' - ); - expect(onUnhideIndexSpy.callCount).to.equal(0); - userEvent.click(button); - expect(onUnhideIndexSpy.callCount).to.equal(1); - }); - }); - - context('when server version is < 4.4.0', function () { - it('will not render hide index button', function () { - render( - - ); - expect(() => screen.getByTestId('index-actions-hide-action')).to.throw; - }); - }); -}); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/property-field.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/property-field.spec.tsx index 4bd91314221..a5fc8596218 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/property-field.spec.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/property-field.spec.tsx @@ -9,6 +9,7 @@ import { expect } from 'chai'; import PropertyField, { getPropertyTooltip } from './property-field'; import getIndexHelpLink from '../../utils/index-link-helper'; +import type { HELP_URL_KEY } from '../../utils/index-link-helper'; describe('PropertyField', function () { before(cleanup); @@ -26,7 +27,8 @@ describe('PropertyField', function () { /> ); - ['ttl', 'partial'].forEach((type) => { + const helpFields = ['ttl', 'partial']; + for (const type of helpFields) { const badge = screen.getByTestId(`${type}-badge`); expect(badge).to.exist; expect(badge.textContent).to.equal(type); @@ -35,9 +37,9 @@ describe('PropertyField', function () { }); expect(infoIcon).to.exist; expect(infoIcon.closest('a')?.href).to.equal( - getIndexHelpLink(type.toUpperCase() as any) + getIndexHelpLink(type.toUpperCase() as HELP_URL_KEY) ); - }); + } }); it('does not render cardinality badge when its single', function () { @@ -69,7 +71,7 @@ describe('PropertyField', function () { render( ); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx index fe29fa9197c..2c09340139e 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx @@ -10,7 +10,10 @@ import { BadgeVariant, useDarkMode, } from '@mongodb-js/compass-components'; -import type { RegularIndex } from '../../modules/regular-indexes'; +import type { + InProgressIndex, + RegularIndex, +} from '../../modules/regular-indexes'; import BadgeWithIconLink from '../indexes-table/badge-with-icon-link'; const containerStyles = css({ @@ -24,19 +27,23 @@ const partialTooltip = (partialFilterExpression: unknown) => { return `partialFilterExpression: ${JSON.stringify(partialFilterExpression)}`; }; -const ttlTooltip = (expireAfterSeconds: number) => { +const ttlTooltip = (expireAfterSeconds: string) => { return `expireAfterSeconds: ${expireAfterSeconds}`; }; export const getPropertyTooltip = ( - property: string | undefined, + property: string, extra: RegularIndex['extra'] ): string | null => { - return property === 'ttl' - ? ttlTooltip(extra.expireAfterSeconds as number) - : property === 'partial' - ? partialTooltip(extra.partialFilterExpression) - : null; + if (property === 'ttl' && extra.expireAfterSeconds !== undefined) { + return ttlTooltip(extra.expireAfterSeconds as unknown as string); + } + + if (property === 'partial' && extra.partialFilterExpression !== undefined) { + return partialTooltip(extra.partialFilterExpression); + } + + return null; }; const PropertyBadgeWithTooltip: React.FunctionComponent<{ @@ -70,52 +77,59 @@ const ErrorBadgeWithTooltip: React.FunctionComponent<{ }; type PropertyFieldProps = { - extra: RegularIndex['extra']; + cardinality?: RegularIndex['cardinality']; + extra?: RegularIndex['extra']; properties: RegularIndex['properties']; - cardinality: RegularIndex['cardinality']; + + // TODO(COMPASS-8329): these belong in their own column + status?: InProgressIndex['status']; + error?: InProgressIndex['error']; }; const HIDDEN_INDEX_TEXT = 'HIDDEN'; const PropertyField: React.FunctionComponent = ({ + status, extra, properties, cardinality, + error, }) => { const darkMode = useDarkMode(); return (
- {properties?.map((property) => { - return ( - - ); - })} + {extra && + properties?.map((property) => { + return ( + + ); + })} {cardinality === 'compound' && ( )} - {extra.hidden && ( + {extra?.hidden && ( )} - {extra.status === 'inprogress' && ( + {status === 'inprogress' && ( In Progress ... )} - {extra.status === 'failed' && ( + {status === 'failed' && ( )} diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.spec.tsx new file mode 100644 index 00000000000..f0606d5affa --- /dev/null +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.spec.tsx @@ -0,0 +1,119 @@ +import React from 'react'; +import { + cleanup, + render, + screen, + userEvent, +} from '@mongodb-js/testing-library-compass'; +import { expect } from 'chai'; +import { spy } from 'sinon'; +import type { SinonSpy } from 'sinon'; + +import RegularIndexActions from './regular-index-actions'; + +describe('IndexActions Component', function () { + let onDeleteSpy: SinonSpy; + let onHideIndexSpy: SinonSpy; + let onUnhideIndexSpy: SinonSpy; + + before(cleanup); + afterEach(cleanup); + beforeEach(function () { + onDeleteSpy = spy(); + onHideIndexSpy = spy(); + onUnhideIndexSpy = spy(); + }); + + it('renders delete button for a regular index', function () { + render( + + ); + + const button = screen.getByTestId('index-actions-delete-action'); + expect(button).to.exist; + expect(button.getAttribute('aria-label')).to.equal( + 'Drop Index artist_id_index' + ); + expect(onDeleteSpy.callCount).to.equal(0); + userEvent.click(button); + expect(onDeleteSpy.callCount).to.equal(1); + }); + + context( + 'when server version is >= 4.4.0 and the index is a regular index', + function () { + it('renders hide index button when index is not hidden', function () { + render( + + ); + + const button = screen.getByTestId('index-actions-hide-action'); + expect(button).to.exist; + expect(button.getAttribute('aria-label')).to.equal( + 'Hide Index artist_id_index' + ); + expect(onHideIndexSpy.callCount).to.equal(0); + userEvent.click(button); + expect(onHideIndexSpy.callCount).to.equal(1); + }); + + it('renders unhide index button when index is hidden', function () { + render( + + ); + const button = screen.getByTestId('index-actions-unhide-action'); + expect(button).to.exist; + expect(button.getAttribute('aria-label')).to.equal( + 'Unhide Index artist_id_index' + ); + expect(onUnhideIndexSpy.callCount).to.equal(0); + userEvent.click(button); + expect(onUnhideIndexSpy.callCount).to.equal(1); + }); + } + ); + + context( + 'when server version is < 4.4.0 and the index is a regular index', + function () { + it('will not render hide index button', function () { + render( + + ); + expect(() => screen.getByTestId('index-actions-hide-action')).to.throw; + }); + } + ); +}); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/index-actions.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.tsx similarity index 87% rename from packages/compass-indexes/src/components/regular-indexes-table/index-actions.tsx rename to packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.tsx index 93c73a7daa9..7de14ee4c59 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/index-actions.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-index-actions.tsx @@ -2,10 +2,16 @@ import semver from 'semver'; import React, { useCallback, useMemo } from 'react'; import type { GroupedItemAction } from '@mongodb-js/compass-components'; import { ItemActionGroup } from '@mongodb-js/compass-components'; -import type { RegularIndex } from '../../modules/regular-indexes'; + +type Index = { + name: string; + extra?: { + hidden?: boolean; + }; +}; type IndexActionsProps = { - index: RegularIndex; + index: Index; serverVersion: string; onDeleteIndexClick: (name: string) => void; onHideIndexClick: (name: string) => void; @@ -32,16 +38,10 @@ const IndexActions: React.FunctionComponent = ({ onUnhideIndexClick, }) => { const indexActions: GroupedItemAction[] = useMemo(() => { - const actions: GroupedItemAction[] = [ - { - action: 'delete', - label: `Drop Index ${index.name}`, - icon: 'Trash', - }, - ]; + const actions: GroupedItemAction[] = []; if (serverSupportsHideIndex(serverVersion)) { - actions.unshift( + actions.push( index.extra?.hidden ? { action: 'unhide', @@ -58,6 +58,12 @@ const IndexActions: React.FunctionComponent = ({ ); } + actions.push({ + action: 'delete', + label: `Drop Index ${index.name}`, + icon: 'Trash', + }); + return actions; }, [index, serverVersion]); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx index 4164b1e9e9a..48210c2ac1b 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx @@ -9,10 +9,13 @@ import { import { expect } from 'chai'; import { RegularIndexesTable } from './regular-indexes-table'; -import type { RegularIndex } from '../../modules/regular-indexes'; +import type { + RegularIndex, + InProgressIndex, +} from '../../modules/regular-indexes'; import { mockRegularIndex } from '../../../test/helpers'; -const indexes = [ +const indexes: RegularIndex[] = [ { ns: 'db.coll', cardinality: 'single', @@ -97,7 +100,37 @@ const indexes = [ ], usageCount: 25, }, -] as RegularIndex[]; +]; + +const inProgressIndexes: InProgressIndex[] = [ + { + id: 'in-progress-1', + name: 'AAAA', + fields: [ + { + field: 'a', + value: 1, + }, + { + field: 'b', + value: -1, + }, + ], + status: 'inprogress', + }, + { + id: 'in-progress-2', + name: 'z', + fields: [ + { + field: 'z', + value: 'text', + }, + ], + status: 'inprogress', + error: 'this is an error', + }, +]; const renderIndexList = ( props: Partial> = {} @@ -105,12 +138,14 @@ const renderIndexList = ( return render( {}} onUnhideIndexClick={() => {}} onDeleteIndexClick={() => {}} + onDeleteFailedIndexClick={() => {}} onRegularIndexesOpened={() => {}} onRegularIndexesClosed={() => {}} {...props} @@ -118,40 +153,113 @@ const renderIndexList = ( ); }; +const indexFields = [ + 'indexes-name-field', + 'indexes-type-field', + 'indexes-size-field', + 'indexes-usageCount-field', + 'indexes-properties-field', + 'indexes-actions-field', +]; + describe('RegularIndexesTable Component', function () { before(cleanup); afterEach(cleanup); - it('renders indexes list', function () { + it('renders regular indexes', function () { renderIndexList({ isWritable: true, readOnly: false, indexes: indexes }); const indexesList = screen.getByTestId('indexes-list'); expect(indexesList).to.exist; // Renders indexes list (table rows) - indexes.forEach((index) => { - const indexRow = screen.getByText(index.name).closest('tr')!; + for (const index of indexes) { + const indexRow = screen.getByTestId(`indexes-row-${index.name}`); expect(indexRow, 'it renders each index in a row').to.exist; // Renders index fields (table cells) - [ - 'indexes-name-field', - 'indexes-type-field', - 'indexes-size-field', - 'indexes-usage-field', - 'indexes-properties-field', - 'indexes-actions-field', - ].forEach((indexCell) => { - // For _id index we always hide drop index field - if (index.name !== '_id_' && indexCell !== 'indexes-actions-field') { + for (const indexCell of indexFields) { + let mustExist = true; + + // For _id index we always hide hide/drop index field buttons + if (index.name === '_id_' && indexCell === 'indexes-actions-field') { + mustExist = false; + } + + if (mustExist) { expect(within(indexRow).getByTestId(indexCell)).to.exist; } else { expect(() => { within(indexRow).getByTestId(indexCell); }).to.throw; } - }); + } + + if (index.name === '_id_') { + expect(() => { + within(indexRow).getByTestId('index-actions-hide-action'); + }).to.throw; + expect(() => { + within(indexRow).getByTestId('index-actions-delete-action'); + }).to.throw; + } else { + if (index.extra.hidden) { + expect(() => + within(indexRow).getByTestId('index-actions-hide-action') + ).to.throw; + expect(within(indexRow).getByTestId('index-actions-unhide-action')).to + .exist; + } else { + expect(within(indexRow).getByTestId('index-actions-hide-action')).to + .exist; + expect(() => + within(indexRow).getByTestId('index-actions-unhide-action') + ).to.throw; + } + expect(within(indexRow).getByTestId('index-actions-delete-action')).to + .exist; + } + + userEvent.click(within(indexRow).getByLabelText('Expand row')); + const detailsRow = indexRow.nextSibling as HTMLTableRowElement; + expect(detailsRow).to.exist; + + const details = within(detailsRow).getByTestId( + `indexes-details-${index.name}` + ); + expect(details).to.exist; + + for (const field of index.fields) { + expect(within(details).getByTestId(`${field.field}-key`)); + } + } + }); + + it('renders in-progress indexes', function () { + renderIndexList({ + isWritable: true, + readOnly: false, + inProgressIndexes: inProgressIndexes, }); + + for (const index of inProgressIndexes) { + const indexRow = screen.getByTestId(`indexes-row-${index.name}`); + + for (const indexCell of indexFields) { + expect(within(indexRow).getByTestId(indexCell)).to.exist; + } + + expect(() => within(indexRow).getByTestId('index-actions-hide-action')).to + .throw; + if (index.status === 'inprogress') { + expect(() => + within(indexRow).getByTestId('index-actions-delete-action') + ).to.throw; + } else { + expect(within(indexRow).getByTestId('index-actions-delete-action')).to + .exist; + } + } }); it('does not render the list if there is an error', function () { @@ -172,7 +280,7 @@ describe('RegularIndexesTable Component', function () { const indexesList = screen.getByTestId('indexes-list'); expect(indexesList).to.exist; indexes.forEach((index) => { - const indexRow = screen.getByText(index.name).closest('tr')!; + const indexRow = screen.getByTestId(`indexes-row-${index.name}`); expect(within(indexRow).getByTestId('indexes-actions-field')).to.exist; }); }); @@ -182,9 +290,9 @@ describe('RegularIndexesTable Component', function () { const indexesList = screen.getByTestId('indexes-list'); expect(indexesList).to.exist; indexes.forEach((index) => { - const indexRow = screen.getByText(index.name).closest('tr')!; + const indexRow = screen.getByTestId(`indexes-row-${index.name}`); expect(() => { - within(indexRow).getByTestId('indexes-actions-field'); + within(indexRow).queryByTestId('indexes-actions-field'); }).to.throw; }); }); @@ -194,7 +302,7 @@ describe('RegularIndexesTable Component', function () { const indexesList = screen.getByTestId('indexes-list'); expect(indexesList).to.exist; indexes.forEach((index) => { - const indexRow = screen.getByText(index.name).closest('tr')!; + const indexRow = screen.getByTestId(`indexes-row-${index.name}`); expect(() => { within(indexRow).getByTestId('indexes-actions-field'); }).to.throw; @@ -204,7 +312,7 @@ describe('RegularIndexesTable Component', function () { describe('sorting', function () { function getIndexNames() { return screen.getAllByTestId('indexes-name-field').map((el) => { - return el.textContent!.trim(); + return (el.textContent as string).trim(); }); } diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx index 4325f27c3ad..c30158e6fa4 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx @@ -15,26 +15,33 @@ import TypeField from './type-field'; import SizeField from './size-field'; import UsageField from './usage-field'; import PropertyField from './property-field'; -import IndexActions from './index-actions'; +import RegularIndexActions from './regular-index-actions'; +import InProgressIndexActions from './in-progress-index-actions'; import { IndexesTable } from '../indexes-table'; import { dropIndex, + dropFailedIndex, hideIndex, unhideIndex, startPollingRegularIndexes, stopPollingRegularIndexes, } from '../../modules/regular-indexes'; -import { type RegularIndex } from '../../modules/regular-indexes'; +import type { + RegularIndex, + InProgressIndex, +} from '../../modules/regular-indexes'; type RegularIndexesTableProps = { indexes: RegularIndex[]; + inProgressIndexes: InProgressIndex[]; serverVersion: string; isWritable?: boolean; onHideIndexClick: (name: string) => void; onUnhideIndexClick: (name: string) => void; onDeleteIndexClick: (name: string) => void; + onDeleteFailedIndexClick: (name: string) => void; readOnly?: boolean; error?: string | null; onRegularIndexesOpened: (tabId: string) => void; @@ -44,20 +51,30 @@ type RegularIndexesTableProps = { type IndexInfo = { id: string; name: string; - indexInfo: RegularIndex; + indexInfo: MergedIndex; type: React.ReactNode; size: React.ReactNode; - usage: React.ReactNode; + usageCount: React.ReactNode; properties: React.ReactNode; actions: undefined | React.ReactNode; renderExpandedContent: React.ReactNode; }; -function sortByProperties(a: RegularIndex, b: RegularIndex) { - const aValue = - a.cardinality === 'compound' ? 'compound' : a.properties?.[0] || ''; - const bValue = - b.cardinality === 'compound' ? 'compound' : b.properties?.[0] || ''; +function mergedIndexPropertyValue(index: MergedIndex): string { + // TODO(COMPASS-8335): right now only regular indexes have properties & + // cardinality + if (index.compassIndexType !== 'regular-index') { + return ''; + } + + return index.cardinality === 'compound' + ? 'compound' + : index.properties?.[0] || ''; +} + +function sortByProperties(a: MergedIndex, b: MergedIndex) { + const aValue = mergedIndexPropertyValue(a); + const bValue = mergedIndexPropertyValue(b); if (aValue > bValue) { return -1; } @@ -67,11 +84,41 @@ function sortByProperties(a: RegularIndex, b: RegularIndex) { return 0; } +type SortableField = 'name' | 'type' | 'size' | 'usageCount'; + +function mergedIndexFieldValue( + index: MergedIndex, + field: SortableField +): string | number | undefined { + if (index.compassIndexType === 'in-progress-index') { + if (field === 'type') { + // TODO(COMPASS-8335): type should be supported by in-progress-index + return 'unknown'; + } + if (field === 'size' || field === 'usageCount') { + return 0; + } + return index[field]; + } + + return index[field]; +} + +function isSupportedSortField( + field: string +): field is 'name' | 'type' | 'size' | 'usageCount' | 'properties' { + return ['name', 'type', 'size', 'usageCount', 'properties'].includes(field); +} + function sortFn( rowA: LeafyGreenTableRow, rowB: LeafyGreenTableRow, field: string ) { + if (!isSupportedSortField(field)) { + return 0; + } + if (field === 'properties') { const propSort = sortByProperties( rowA.original.indexInfo, @@ -80,12 +127,12 @@ function sortFn( return propSort; } - if (field === 'usage') { - field = 'usageCount'; - } + const fieldA = mergedIndexFieldValue(rowA.original.indexInfo, field); + const fieldB = mergedIndexFieldValue(rowB.original.indexInfo, field); - const fieldA = rowA.original.indexInfo[field as keyof RegularIndex]!; - const fieldB = rowB.original.indexInfo[field as keyof RegularIndex]!; + if (fieldA === undefined || fieldB === undefined) { + return 0; + } if (fieldA > fieldB) return -1; if (fieldB > fieldA) return 1; @@ -113,7 +160,7 @@ const COLUMNS: LGColumnDef[] = [ sortingFn: sortFn, }, { - accessorKey: 'usage', + accessorKey: 'usageCount', header: 'Usage', cell: (info) => info.getValue(), sortingFn: sortFn, @@ -140,16 +187,117 @@ const COLUMNS_WITH_ACTIONS: LGColumnDef[] = [ }, ]; +// compassIndexType because type is taken by RegularIndex. indexType is taken by AtlasIndexStats. +type MappedRegularIndex = RegularIndex & { compassIndexType: 'regular-index' }; +type MappedInProgressIndex = InProgressIndex & { + compassIndexType: 'in-progress-index'; +}; + +type MergedIndex = MappedRegularIndex | MappedInProgressIndex; + +function mergeIndexes( + indexes: RegularIndex[], + inProgressIndexes: InProgressIndex[] +): MergedIndex[] { + const mappedIndexes: MappedRegularIndex[] = indexes.map((index) => { + return { ...index, compassIndexType: 'regular-index' }; + }); + + const mappedInProgressIndexes: MappedInProgressIndex[] = + inProgressIndexes.map((index) => { + return { ...index, compassIndexType: 'in-progress-index' }; + }); + + return [...mappedIndexes, ...mappedInProgressIndexes]; +} + +type CommonIndexInfo = Omit; + +function getInProgressIndexInfo( + index: MappedInProgressIndex, + { + onDeleteFailedIndexClick, + }: { + onDeleteFailedIndexClick: (indexName: string) => void; + } +): CommonIndexInfo { + return { + id: index.id, + name: index.name, + indexInfo: index, + type: , + size: , + usageCount: , + properties: ( + + ), + actions: ( + + ), + }; +} + +function getRegularIndexInfo( + index: MappedRegularIndex, + { + serverVersion, + onHideIndexClick, + onUnhideIndexClick, + onDeleteIndexClick, + }: { + serverVersion: string; + onHideIndexClick: (indexName: string) => void; + onUnhideIndexClick: (indexName: string) => void; + onDeleteIndexClick: (indexName: string) => void; + } +): CommonIndexInfo { + return { + id: index.name, + name: index.name, + indexInfo: index, + type: , + size: , + usageCount: ( + + ), + properties: ( + + ), + actions: index.name !== '_id_' && ( + + ), + }; +} + export const RegularIndexesTable: React.FunctionComponent< RegularIndexesTableProps > = ({ isWritable, readOnly, indexes, + inProgressIndexes, serverVersion, onHideIndexClick, onUnhideIndexClick, onDeleteIndexClick, + onDeleteFailedIndexClick, onRegularIndexesOpened, onRegularIndexesClosed, error, @@ -163,44 +311,41 @@ export const RegularIndexesTable: React.FunctionComponent< }; }, [tabId, onRegularIndexesOpened, onRegularIndexesClosed]); + const allIndexes: MergedIndex[] = mergeIndexes(indexes, inProgressIndexes); + const data = useMemo[]>( () => - indexes.map((index) => ({ - id: index.name, - name: index.name, - indexInfo: index, - type: , - size: , - usage: , - properties: ( - - ), - actions: index.name !== '_id_' && - index.extra.status !== 'inprogress' && ( - - ), - - // eslint-disable-next-line react/display-name - renderExpandedContent: () => ( - - ), - })), + allIndexes.map((index) => { + let indexData: CommonIndexInfo; + if (index.compassIndexType === 'in-progress-index') { + indexData = getInProgressIndexInfo(index, { + onDeleteFailedIndexClick, + }); + } else { + indexData = getRegularIndexInfo(index, { + serverVersion, + onDeleteIndexClick, + onHideIndexClick, + onUnhideIndexClick, + }); + } + + return { + ...indexData, + renderExpandedContent() { + return ( + + ); + }, + }; + }), [ - indexes, + allIndexes, onDeleteIndexClick, + onDeleteFailedIndexClick, onHideIndexClick, onUnhideIndexClick, serverVersion, @@ -233,11 +378,13 @@ const mapState = ({ isWritable, serverVersion, indexes: regularIndexes.indexes, + inProgressIndexes: regularIndexes.inProgressIndexes, error: regularIndexes.error, }); const mapDispatch = { onDeleteIndexClick: dropIndex, + onDeleteFailedIndexClick: dropFailedIndex, onHideIndexClick: hideIndex, onUnhideIndexClick: unhideIndex, onRegularIndexesOpened: startPollingRegularIndexes, diff --git a/packages/compass-indexes/src/components/regular-indexes-table/type-field.tsx b/packages/compass-indexes/src/components/regular-indexes-table/type-field.tsx index 851aa92e7d5..b8fd4b81c89 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/type-field.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/type-field.tsx @@ -5,13 +5,16 @@ import { Tooltip, Body } from '@mongodb-js/compass-components'; import type { RegularIndex } from '../../modules/regular-indexes'; import BadgeWithIconLink from '../indexes-table/badge-with-icon-link'; -export const canRenderTooltip = (type: RegularIndex['type']) => { +export const canRenderTooltip = (type: string) => { return ['text', 'wildcard', 'columnstore'].indexOf(type ?? '') !== -1; }; type TypeFieldProps = { - type: RegularIndex['type']; - extra: RegularIndex['extra']; + // TODO(COMPASS-8335): we can remove unknown once we support type on + // in-progress indexes + type: RegularIndex['type'] | 'unknown'; + // in-progress and rolling indexes don't have extra + extra?: RegularIndex['extra']; }; export const IndexTypeTooltip: React.FunctionComponent<{ @@ -45,7 +48,7 @@ const TypeField: React.FunctionComponent = ({ } > - + {extra && } ); }; diff --git a/packages/compass-indexes/src/components/search-index-template-dropdown/index.spec.tsx b/packages/compass-indexes/src/components/search-index-template-dropdown/index.spec.tsx index f398cae55ec..c0498256616 100644 --- a/packages/compass-indexes/src/components/search-index-template-dropdown/index.spec.tsx +++ b/packages/compass-indexes/src/components/search-index-template-dropdown/index.spec.tsx @@ -39,7 +39,7 @@ describe('Search Index Template Dropdown', function () { it('notifies upwards with onTemplate when a new template is chosen', async function () { const dropDown = screen .getByText('Dynamic field mappings') - .closest('button')!; + .closest('button') as HTMLButtonElement; userEvent.click(dropDown); diff --git a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx index ebfd350b258..86cf6bcce31 100644 --- a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx +++ b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.spec.tsx @@ -52,7 +52,9 @@ describe('SearchIndexesTable Component', function () { // Renders indexes list (table rows) for (const index of indexes) { - const indexRow = screen.getByText(index.name).closest('tr')!; + const indexRow = screen + .getByText(index.name) + .closest('tr') as HTMLTableRowElement; expect(indexRow, 'it renders each index in a row').to.exist; // Renders index fields (table cells) @@ -160,7 +162,9 @@ describe('SearchIndexesTable Component', function () { indexes: vectorSearchIndexes, }); - const indexRow = screen.getByText('vectorSearching123').closest('tr')!; + const indexRow = screen + .getByText('vectorSearching123') + .closest('tr') as HTMLTableRowElement; const expandButton = within(indexRow).getByLabelText('Expand row'); expect(expandButton).to.exist; @@ -180,7 +184,7 @@ describe('SearchIndexesTable Component', function () { describe('sorting', function () { function getIndexNames() { return screen.getAllByTestId('search-indexes-name-field').map((el) => { - return el.textContent!.trim(); + return (el.textContent as string).trim(); }); } diff --git a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx index 6285951d677..ef369e8f207 100644 --- a/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx +++ b/packages/compass-indexes/src/components/search-indexes-table/search-indexes-table.tsx @@ -342,19 +342,22 @@ export const SearchIndexesTable: React.FunctionComponent< }} /> ), - // eslint-disable-next-line react/display-name - renderExpandedContent: () => ( -
- {isVectorSearchIndex ? ( - - ) : ( - - )} -
- ), + renderExpandedContent() { + return ( +
+ {isVectorSearchIndex ? ( + + ) : ( + + )} +
+ ); + }, }; }), [ diff --git a/packages/compass-indexes/src/modules/regular-indexes.spec.ts b/packages/compass-indexes/src/modules/regular-indexes.spec.ts index c138e14b411..6fa4cec9632 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.spec.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.spec.ts @@ -4,6 +4,7 @@ import { refreshRegularIndexes, pollRegularIndexes, dropIndex, + dropFailedIndex, hideIndex, unhideIndex, startPollingRegularIndexes, @@ -127,81 +128,6 @@ describe('regular-indexes module', function () { expect(state.status).to.equal('READY'); }); - it('merges with in progress indexes', async function () { - const store = await setupStoreAndWait( - {}, - { - indexes: () => Promise.resolve(indexesList), - } - ); - - Object.assign(store.getState(), { - regularIndexes: { - ...store.getState().regularIndexes, - inProgressIndexes: inProgressIndexes.slice(), - }, - }); - - await store.dispatch(refreshRegularIndexes()); - - const state = store.getState().regularIndexes; - - expect(state.indexes.length).to.equal( - defaultSortedIndexes.length + inProgressIndexes.length - ); - - const indexes = state.indexes.filter( - (index: any) => index.extra.status === 'inprogress' - ); - - expect(indexes).to.deep.equal([ - // NOTE: this one is a real index and an in-progress one - { - cardinality: 'single', - extra: { - status: 'inprogress', - }, - fields: [], - key: { - aaaa: -1, - }, - name: 'AAAA', - ns: 'foo', - properties: ['partial', 'ttl'], - relativeSize: 1, - size: 4096, - type: 'regular', - usageCount: 4, - usageHost: 'computername.local:27017', - usageSince: new Date('2019-02-08T14:39:56.285Z'), - version: 2, - }, - // NOTE: this one is only in progress, not also a real index - { - extra: { - status: 'inprogress', - }, - fields: [ - { - field: 'z', - value: 1, - }, - ], - key: { - z: 1, - }, - name: 'z', - ns: 'citibike.trips', - relativeSize: 0, - size: 0, - usageCount: 0, - }, - ]); - - expect(state.error).to.be.undefined; - expect(state.status).to.equal('READY'); - }); - it('sets status=FETCHING when indexes are being fetched and status is NOT_READY', async function () { let statusBeforeFetch: FetchStatus | undefined = undefined; @@ -359,10 +285,13 @@ describe('regular-indexes module', function () { describe('#dropIndex (thunk)', function () { it('removes a failed in-progress index', async function () { + const dropIndexSpy = sinon.spy(); + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), + dropIndex: dropIndexSpy, } ); @@ -374,33 +303,22 @@ describe('regular-indexes module', function () { ..._index, }; if (index.name === 'AAAA') { - index.extra.status = 'failed'; + index.status = 'failed'; } return index; }), }, }); - // fetch first so it merges the in-progress ones - await store.dispatch(refreshRegularIndexes()); - - // one of the real indexes is also in progress, so gets merged together - const numOverlapping = 1; - - // sanity check let state = store.getState().regularIndexes; - expect(state.indexes.length).to.equal( - indexesList.length + inProgressIndexes.length - numOverlapping - ); expect(state.inProgressIndexes.length).to.equal(inProgressIndexes.length); - await store.dispatch(dropIndex('AAAA')); + store.dispatch(dropFailedIndex('AAAA')); + + expect(dropIndexSpy.callCount).to.equal(0); state = store.getState().regularIndexes; - expect(state.indexes.length).to.equal( - indexesList.length + inProgressIndexes.length - 1 - ); expect(state.inProgressIndexes.length).to.equal( inProgressIndexes.length - 1 ); @@ -409,10 +327,13 @@ describe('regular-indexes module', function () { }); it('removes a real index', async function () { + const dropIndexSpy = sinon.spy(); + const store = await setupStoreAndWait( {}, { indexes: () => Promise.resolve(indexesList), + dropIndex: dropIndexSpy, } ); @@ -428,33 +349,15 @@ describe('regular-indexes module', function () { }, }); - // fetch first so it merges the in-progress ones - await store.dispatch(refreshRegularIndexes()); - - // one of the real indexes is also in progress, so gets merged together - const numOverlapping = 1; - - // sanity check - let state = store.getState().regularIndexes; - expect(state.indexes.length).to.equal( - indexesList.length + inProgressIndexes.length - numOverlapping - ); - expect(state.inProgressIndexes.length).to.equal(inProgressIndexes.length); - + expect(dropIndexSpy.callCount).to.equal(0); await store.dispatch(dropIndex('BBBB')); // a real regular index. not in progress - - state = store.getState().regularIndexes; - - expect(state.indexes.length).to.equal( - indexesList.length + inProgressIndexes.length - 1 - ); - expect(state.inProgressIndexes.length).to.equal(inProgressIndexes.length); + expect(dropIndexSpy.args).to.deep.equal([['citibike.trips', 'BBBB']]); }); }); describe('#hideIndex (thunk)', function () { it('hides an index', async function () { - const updateCollection = sinon.stub().resolves({}); + const updateCollection = sinon.spy(); const store = await setupStoreAndWait( {}, { @@ -466,6 +369,7 @@ describe('regular-indexes module', function () { // fetch indexes so there's something to hide await store.dispatch(refreshRegularIndexes()); + expect(updateCollection.callCount).to.equal(0); await store.dispatch(hideIndex('BBBB')); expect(updateCollection.args).to.deep.equal([ diff --git a/packages/compass-indexes/src/modules/regular-indexes.ts b/packages/compass-indexes/src/modules/regular-indexes.ts index 042dc2775a1..0b71b617b97 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.ts @@ -1,4 +1,4 @@ -import { cloneDeep, isEqual, pick } from 'lodash'; +import { isEqual, pick } from 'lodash'; import type { IndexDefinition } from 'mongodb-data-service'; import type { AnyAction } from 'redux'; import { @@ -20,35 +20,34 @@ import { import type { IndexSpecification, CreateIndexesOptions } from 'mongodb'; import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; -export type RegularIndex = Omit< - IndexDefinition, - 'type' | 'cardinality' | 'properties' | 'version' -> & - Partial; - -export type InProgressIndex = { +export type RegularIndex = Partial & + Pick< + IndexDefinition, + // These are the only ones we're treating as required because they are the + // ones we use. Everything else is treated as optional. + | 'name' + | 'type' + | 'cardinality' + | 'properties' + | 'fields' + | 'extra' + | 'size' + | 'relativeSize' + | 'usageCount' + >; + +export type InProgressIndex = Pick & { id: string; - key: CreateIndexSpec; - fields: { field: string; value: string | number }[]; - name: string; - ns: string; - size: number; - relativeSize: number; - usageCount: number; - extra: { - status: 'inprogress' | 'failed'; - error?: string; - }; + status: 'inprogress' | 'failed'; + error?: string; }; const prepareInProgressIndex = ( id: string, { - ns, name, spec, }: { - ns: string; name?: string; spec: CreateIndexSpec; } @@ -66,16 +65,13 @@ const prepareInProgressIndex = ( }, ''); return { id, - extra: { - status: 'inprogress', - }, - key: spec, + // TODO(COMPASS-8335): we need the type because it shows in the table + // TODO(COMPASS-8335): the table can also use cardinality + status: 'inprogress', fields: inProgressIndexFields, name: inProgressIndexName, - ns, - size: 0, - relativeSize: 0, - usageCount: 0, + // TODO(COMPASS-8335): we never mapped properties and the table does have + // room to display them }; }; @@ -142,8 +138,8 @@ type FailedIndexRemovedAction = { }; export type State = { - indexes: RegularIndex[]; status: FetchStatus; + indexes: RegularIndex[]; inProgressIndexes: InProgressIndex[]; error?: string; }; @@ -191,16 +187,9 @@ export default function reducer( ActionTypes.FetchIndexesSucceeded ) ) { - // Merge the newly fetched indexes and the existing in-progress ones. - const inProgressIndexes = state.inProgressIndexes; - const allIndexes = _mergeInProgressIndexes( - action.indexes, - cloneDeep(inProgressIndexes) - ); - return { ...state, - indexes: allIndexes, + indexes: action.indexes, status: FetchStatuses.READY, }; } @@ -234,16 +223,9 @@ export default function reducer( action.inProgressIndex, ]; - // Merge the in-progress indexes into the existing indexes. - const allIndexes = _mergeInProgressIndexes( - state.indexes, - cloneDeep(inProgressIndexes) - ); - return { ...state, inProgressIndexes, - indexes: allIndexes, }; } @@ -256,9 +238,6 @@ export default function reducer( ) { return { ...state, - // NOTE: the index is still in indexes because it would have been merged - // in there, so it will only be gone from the list once fetchIndexes() - // is dispatched and finishes. inProgressIndexes: state.inProgressIndexes.filter( (x) => x.id !== action.inProgressIndexId ), @@ -275,23 +254,13 @@ export default function reducer( const newInProgressIndexes = state.inProgressIndexes; newInProgressIndexes[idx] = { ...newInProgressIndexes[idx], - extra: { - ...newInProgressIndexes[idx].extra, - status: 'failed', - error: action.error, - }, + status: 'failed', + error: action.error, }; - // When an inprogress index fails to create, we also have to update it in - // the state.indexes list to correctly update the UI with error state. - const newIndexes = _mergeInProgressIndexes( - state.indexes, - newInProgressIndexes - ); return { ...state, inProgressIndexes: newInProgressIndexes, - indexes: newIndexes, }; } @@ -474,7 +443,6 @@ export function createRegularIndex( ) => { const ns = getState().namespace; const inProgressIndex = prepareInProgressIndex(inProgressIndexId, { - ns, name: options.name, spec, }); @@ -528,36 +496,37 @@ const failedIndexRemoved = ( // its value. This enables to test dropIndex action. export const showConfirmation = showConfirmationModal; +export const dropFailedIndex = ( + indexName: string +): IndexesThunkAction => { + return (dispatch, getState) => { + const { regularIndexes } = getState(); + const { inProgressIndexes } = regularIndexes; + + const inProgressIndex = inProgressIndexes.find((x) => x.name === indexName); + if (inProgressIndex && inProgressIndex.status === 'failed') { + // This really just removes the (failed) in-progress index + dispatch(failedIndexRemoved(String(inProgressIndex.id))); + } + }; +}; + export const dropIndex = ( indexName: string -): IndexesThunkAction< - Promise, - FailedIndexRemovedAction | FetchIndexesActions -> => { +): IndexesThunkAction, FetchIndexesActions> => { return async ( dispatch, getState, { connectionInfoRef, dataService, track } ) => { const { namespace, regularIndexes } = getState(); - const { indexes, inProgressIndexes } = regularIndexes; - const index = indexes.find((x) => x.name === indexName); + const { indexes } = regularIndexes; + const index = indexes.find((x) => x.name === indexName); if (!index) { return; } - const inProgressIndex = inProgressIndexes.find((x) => x.name === indexName); - if (inProgressIndex && inProgressIndex.extra.status === 'failed') { - // This really just removes the (failed) in-progress index - dispatch(failedIndexRemoved(String(inProgressIndex.id))); - - // By fetching the indexes again we make sure the merged list doesn't have - // it either. - await dispatch(fetchIndexes(FetchReasons.REFRESH)); - return; - } - try { const connectionInfo = connectionInfoRef.current; track('Screen', { name: 'drop_index_modal' }, connectionInfo); @@ -658,29 +627,3 @@ export const unhideIndex = ( } }; }; - -function _mergeInProgressIndexes( - _indexes: RegularIndex[], - inProgressIndexes: InProgressIndex[] -) { - const indexes = cloneDeep(_indexes); - - for (const inProgressIndex of inProgressIndexes) { - const index = indexes.find((index) => index.name === inProgressIndex.name); - - if (index) { - index.extra = index.extra ?? {}; - index.extra.status = inProgressIndex.extra.status; - if (inProgressIndex.extra.error) { - index.extra.error = inProgressIndex.extra.error; - } - } else { - // in-progress indexes also have ids which regular indexes don't - const index: RegularIndex = { ...inProgressIndex }; - delete (index as RegularIndex & { id?: any }).id; - indexes.push(index); - } - } - - return indexes; -} diff --git a/packages/compass-indexes/src/utils/index-link-helper.ts b/packages/compass-indexes/src/utils/index-link-helper.ts index 07f88f8f30f..50c896dce7c 100644 --- a/packages/compass-indexes/src/utils/index-link-helper.ts +++ b/packages/compass-indexes/src/utils/index-link-helper.ts @@ -25,7 +25,7 @@ const HELP_URLS = { UNKNOWN: null, }; -type HELP_URL_KEY = +export type HELP_URL_KEY = | Uppercase | Lowercase; diff --git a/packages/compass-indexes/test/fixtures/regular-indexes.ts b/packages/compass-indexes/test/fixtures/regular-indexes.ts index 7c663826ce1..e29bc223a7c 100644 --- a/packages/compass-indexes/test/fixtures/regular-indexes.ts +++ b/packages/compass-indexes/test/fixtures/regular-indexes.ts @@ -242,37 +242,18 @@ export const inProgressIndexes: InProgressIndex[] = [ id: 'in-progress-1', name: 'AAAA', //version: 2, - extra: { - status: 'inprogress', - }, - key: { - aaaa: -1, - }, - usageCount: 4, - size: 4096, - fields: [], - ns: 'foo', - relativeSize: 1, + status: 'inprogress', }, { id: 'in-progress-2', - extra: { - status: 'inprogress', - }, - key: { - z: 1, - }, + name: 'z', fields: [ { field: 'z', value: 1, }, ], - name: 'z', - ns: 'citibike.trips', - size: 0, - relativeSize: 0, - usageCount: 0, + status: 'inprogress', }, ]; diff --git a/packages/compass-indexes/test/helpers.ts b/packages/compass-indexes/test/helpers.ts index 2866bcbe7ba..4857ca8dbee 100644 --- a/packages/compass-indexes/test/helpers.ts +++ b/packages/compass-indexes/test/helpers.ts @@ -5,10 +5,13 @@ export function mockRegularIndex(info: Partial): RegularIndex { return { ns: 'test.test', name: '_id_1', + type: 'regular', key: {}, fields: [], size: 0, relativeSize: 0, + cardinality: 'single', + properties: [], ...info, extra: { ...info.extra, diff --git a/packages/data-service/src/index-detail-helper.ts b/packages/data-service/src/index-detail-helper.ts index 6674319c03d..3264e0b3a49 100644 --- a/packages/data-service/src/index-detail-helper.ts +++ b/packages/data-service/src/index-detail-helper.ts @@ -32,7 +32,7 @@ export type IndexDefinition = { | 'columnstore'; cardinality: 'single' | 'compound'; properties: ('unique' | 'sparse' | 'partial' | 'ttl' | 'collation')[]; - extra: Record>; + extra: Record>; size: IndexSize; relativeSize: number; } & IndexStats; From 220067a1e57d4116068ef0f3dae278e155125ca3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:12:58 +0000 Subject: [PATCH 51/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6310) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 49 ------------------------------------------ docs/tracking-plan.md | 2 +- 2 files changed, 1 insertion(+), 50 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 616e9ade9e5..7a573ab4c57 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -211,7 +211,6 @@ This document was automatically generated on Tue Oct 01 2024. | **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)** | 1.0.6 | MIT | | **[cookie](#c396652ff004385e7bdb8398e37493d5f4144e475282a413ec52f1d3fdaf25da)** | 0.6.0 | MIT | | **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)** | 3.17.3 | MIT | -| **[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)** | 0.0.9 | MIT | | **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)** | 1.0.5 | MIT | | **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)** | 3.1.8 | MIT | | **[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)** | 7.0.3 | MIT | @@ -18001,54 +18000,6 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -
- -### [cpu-features](https://www.npmjs.com/package/cpu-features) (version 0.0.9) - -License tags: MIT - -License files: - -- LICENSE: - - Copyright Brian White. All rights reserved. - - - - 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. - ### [crelt](https://www.npmjs.com/package/crelt) (version 1.0.5) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 64f7ecd0d6f..a2519af0160 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 1, 2024 at 07:33 AM +Generated on Tue, Oct 1, 2024 at 12:12 PM ## Table of Contents From 80f6ac0b3460eec09e5e7aa7f17b44a732ed5730 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Tue, 1 Oct 2024 14:47:45 +0100 Subject: [PATCH 52/97] chore(compass-connections): split out connectionSupports into a function that we can use outside of hooks (#6311) split out connectionSupports into a function that we can use outside of hooks --- .../src/hooks/use-connection-supports.ts | 47 +---- packages/compass-connections/src/index.tsx | 2 + .../src/utils/connection-supports.spec.ts | 199 ++++++++++++++++++ .../src/utils/connection-supports.ts | 49 +++++ 4 files changed, 253 insertions(+), 44 deletions(-) create mode 100644 packages/compass-connections/src/utils/connection-supports.spec.ts create mode 100644 packages/compass-connections/src/utils/connection-supports.ts diff --git a/packages/compass-connections/src/hooks/use-connection-supports.ts b/packages/compass-connections/src/hooks/use-connection-supports.ts index 7006c9c33eb..27ffd75809b 100644 --- a/packages/compass-connections/src/hooks/use-connection-supports.ts +++ b/packages/compass-connections/src/hooks/use-connection-supports.ts @@ -1,39 +1,6 @@ import { useSelector } from '../stores/store-context'; -import type { ConnectionState } from '../stores/connections-store-redux'; - -type ConnectionFeature = 'rollingIndexCreation' | 'globalWrites'; - -function isFreeOrSharedTierCluster(instanceSize: string | undefined): boolean { - if (!instanceSize) { - return false; - } - - return ['M0', 'M2', 'M5'].includes(instanceSize); -} - -function supportsRollingIndexCreation(connection: ConnectionState) { - const atlasMetadata = connection.info?.atlasMetadata; - - if (!atlasMetadata) { - return false; - } - - const { metricsType, instanceSize } = atlasMetadata; - return ( - !isFreeOrSharedTierCluster(instanceSize) && - (metricsType === 'cluster' || metricsType === 'replicaSet') - ); -} - -function supportsGlobalWrites(connection: ConnectionState) { - const atlasMetadata = connection.info?.atlasMetadata; - - if (!atlasMetadata) { - return false; - } - - return atlasMetadata.clusterType === 'GEOSHARDED'; -} +import type { ConnectionFeature } from '../utils/connection-supports'; +import { connectionSupports } from '../utils/connection-supports'; export function useConnectionSupports( connectionId: string, @@ -46,14 +13,6 @@ export function useConnectionSupports( return false; } - if (connectionFeature === 'rollingIndexCreation') { - return supportsRollingIndexCreation(connection); - } - - if (connectionFeature === 'globalWrites') { - return supportsGlobalWrites(connection); - } - - return false; + return connectionSupports(connection.info, connectionFeature); }); } diff --git a/packages/compass-connections/src/index.tsx b/packages/compass-connections/src/index.tsx index f24a5758529..daf8203eccb 100644 --- a/packages/compass-connections/src/index.tsx +++ b/packages/compass-connections/src/index.tsx @@ -22,6 +22,8 @@ export { LegacyConnectionsModal } from './components/legacy-connections-modal'; export { useConnectionFormPreferences } from './hooks/use-connection-form-preferences'; import type { connect as devtoolsConnect } from 'mongodb-data-service'; import type { ExtraConnectionData as ExtraConnectionDataForTelemetry } from '@mongodb-js/compass-telemetry'; +export type { ConnectionFeature } from './utils/connection-supports'; +export { connectionSupports } from './utils/connection-supports'; const ConnectionsComponent: React.FunctionComponent<{ appName: string; diff --git a/packages/compass-connections/src/utils/connection-supports.spec.ts b/packages/compass-connections/src/utils/connection-supports.spec.ts new file mode 100644 index 00000000000..de32f2abbcd --- /dev/null +++ b/packages/compass-connections/src/utils/connection-supports.spec.ts @@ -0,0 +1,199 @@ +import { connectionSupports } from './connection-supports'; +import { type ConnectionInfo } from '@mongodb-js/connection-storage/provider'; +import { expect } from 'chai'; + +const mockConnections: ConnectionInfo[] = [ + { + id: 'no-atlasMetadata', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + }, + { + id: 'host-cluster', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'host', + instanceSize: 'M10', + clusterType: 'REPLICASET', + clusterUniqueId: 'clusterUniqueId', + }, + }, + { + id: 'free-cluster', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'replicaSet', + instanceSize: 'M0', + clusterType: 'REPLICASET', + clusterUniqueId: 'clusterUniqueId', + }, + }, + { + id: 'serverless-cluster', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'serverless', + instanceSize: 'SERVERLESS_V2', + clusterType: 'REPLICASET', + clusterUniqueId: 'clusterUniqueId', + }, + }, + { + id: 'dedicated-replicaSet', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'replicaSet', + instanceSize: 'M10', + clusterType: 'REPLICASET', + clusterUniqueId: 'clusterUniqueId', + }, + }, + { + id: 'dedicated-sharded', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'cluster', + instanceSize: 'M10', + clusterType: 'SHARDED', + clusterUniqueId: 'clusterUniqueId', + }, + }, + { + id: 'dedicated-geo-sharded', + connectionOptions: { + connectionString: 'mongodb://foo', + }, + atlasMetadata: { + orgId: 'orgId', + projectId: 'projectId', + clusterName: 'clusterName', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'cluster', + instanceSize: 'M30', + clusterType: 'GEOSHARDED', + clusterUniqueId: 'clusterUniqueId', + }, + }, +]; + +function connectionInfoById(connectionId: string): ConnectionInfo { + const connectionInfo = mockConnections.find(({ id }) => id === connectionId); + if (!connectionInfo) { + throw new Error(`No connection for id "${connectionId}"`); + } + return connectionInfo; +} + +describe('connectionSupports', function () { + context('rollingIndexCreation', function () { + it('should return false if the connection has no atlasMetadata', function () { + expect( + connectionSupports( + connectionInfoById('no-atlasMetadata'), + 'rollingIndexCreation' + ) + ).to.be.false; + }); + + it('should return false for host cluster type', function () { + expect( + connectionSupports( + connectionInfoById('host-cluster'), + 'rollingIndexCreation' + ) + ).to.be.false; + }); + + it('should return false for serverless cluster type', function () { + expect( + connectionSupports( + connectionInfoById('serverless-cluster'), + 'rollingIndexCreation' + ) + ).to.be.false; + }); + + it('should return false for free/shared tier clusters', function () { + expect( + connectionSupports( + connectionInfoById('free-cluster'), + 'rollingIndexCreation' + ) + ).to.be.false; + }); + + it('should return true for dedicated replicaSet clusters', function () { + expect( + connectionSupports( + connectionInfoById('dedicated-replicaSet'), + 'rollingIndexCreation' + ) + ).to.be.true; + }); + + it('should return true for dedicated sharded clusters', function () { + expect( + connectionSupports( + connectionInfoById('dedicated-sharded'), + 'rollingIndexCreation' + ) + ).to.be.true; + }); + }); + context('globalWrites', function () { + it('should return false if the connection has no atlasMetadata', function () { + expect( + connectionSupports( + connectionInfoById('no-atlasMetadata'), + 'globalWrites' + ) + ).to.be.false; + }); + + it('should return true if the cluster type is geosharded', function () { + expect( + connectionSupports( + connectionInfoById('dedicated-geo-sharded'), + 'globalWrites' + ) + ).to.be.true; + }); + }); +}); diff --git a/packages/compass-connections/src/utils/connection-supports.ts b/packages/compass-connections/src/utils/connection-supports.ts new file mode 100644 index 00000000000..cec5c564462 --- /dev/null +++ b/packages/compass-connections/src/utils/connection-supports.ts @@ -0,0 +1,49 @@ +import type { ConnectionInfo } from '@mongodb-js/connection-info'; +export type ConnectionFeature = 'rollingIndexCreation' | 'globalWrites'; + +function isFreeOrSharedTierCluster(instanceSize: string | undefined): boolean { + if (!instanceSize) { + return false; + } + + return ['M0', 'M2', 'M5'].includes(instanceSize); +} + +function supportsRollingIndexCreation(connectionInfo: ConnectionInfo) { + const atlasMetadata = connectionInfo.atlasMetadata; + + if (!atlasMetadata) { + return false; + } + + const { metricsType, instanceSize } = atlasMetadata; + return ( + !isFreeOrSharedTierCluster(instanceSize) && + (metricsType === 'cluster' || metricsType === 'replicaSet') + ); +} + +function supportsGlobalWrites(connectionInfo: ConnectionInfo) { + const atlasMetadata = connectionInfo.atlasMetadata; + + if (!atlasMetadata) { + return false; + } + + return atlasMetadata.clusterType === 'GEOSHARDED'; +} + +export function connectionSupports( + connectionInfo: ConnectionInfo, + connectionFeature: ConnectionFeature +): boolean { + if (connectionFeature === 'rollingIndexCreation') { + return supportsRollingIndexCreation(connectionInfo); + } + + if (connectionFeature === 'globalWrites') { + return supportsGlobalWrites(connectionInfo); + } + + return false; +} From a646b088356d4361269be4fe40953eeb8c10a268 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:54:47 +0000 Subject: [PATCH 53/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6312) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 49 ++++++++++++++++++++++++++++++++++++++++++ docs/tracking-plan.md | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 7a573ab4c57..616e9ade9e5 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -211,6 +211,7 @@ This document was automatically generated on Tue Oct 01 2024. | **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)** | 1.0.6 | MIT | | **[cookie](#c396652ff004385e7bdb8398e37493d5f4144e475282a413ec52f1d3fdaf25da)** | 0.6.0 | MIT | | **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)** | 3.17.3 | MIT | +| **[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)** | 0.0.9 | MIT | | **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)** | 1.0.5 | MIT | | **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)** | 3.1.8 | MIT | | **[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)** | 7.0.3 | MIT | @@ -18000,6 +18001,54 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +### [cpu-features](https://www.npmjs.com/package/cpu-features) (version 0.0.9) + +License tags: MIT + +License files: + +- LICENSE: + + Copyright Brian White. All rights reserved. + + + + 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. + ### [crelt](https://www.npmjs.com/package/crelt) (version 1.0.5) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index a2519af0160..6f640c165fe 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 1, 2024 at 12:12 PM +Generated on Tue, Oct 1, 2024 at 01:54 PM ## Table of Contents From 12b727815261f60c51fddef800241a3d057e0593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 2 Oct 2024 10:40:56 +0200 Subject: [PATCH 54/97] chore: add missing `prettier` configs (#6280) * Add .prettierrc.json config files * Ran prettier --write in hadron-build * Ran prettier --write in hadron-type-checker * Ran prettier --write in mongodb-explain-compat * Ran prettier --write in bson-transpilers * Make "check" happy: Generated files * Make "check" happy: Common eslint config * Make "check" happy: Eslint fix --- package-lock.json | 729 +---- packages/bson-transpilers/.prettierignore | 12 + packages/bson-transpilers/.prettierrc.json | 1 + packages/bson-transpilers/CONTRIBUTING.md | 166 +- packages/bson-transpilers/README.md | 120 +- .../codegeneration/CodeGenerationVisitor.js | 1699 ++++++------ .../codegeneration/DeclarationStore.js | 8 +- .../codegeneration/ErrorListener.js | 7 +- .../codegeneration/csharp/Generator.js | 11 +- .../codegeneration/go/Generator.js | 9 +- .../codegeneration/java/Generator.js | 1661 ++++++------ .../codegeneration/javascript/Generator.js | 23 +- .../codegeneration/javascript/Visitor.js | 1298 ++++----- .../codegeneration/object/Generator.js | 429 +-- .../codegeneration/php/Generator.js | 15 +- .../codegeneration/php/PHPUtils.js | 5 +- .../codegeneration/python/Generator.js | 11 +- .../codegeneration/python/Visitor.js | 1345 +++++----- .../codegeneration/ruby/Generator.js | 11 +- .../codegeneration/rust/Generator.js | 11 +- .../codegeneration/shell/Generator.js | 11 +- .../codegeneration/shell/Visitor.js | 248 +- .../bson-transpilers/compile-symbol-table.js | 15 +- packages/bson-transpilers/config/error.json | 2 +- packages/bson-transpilers/download-antlr.js | 4 +- packages/bson-transpilers/helper/format.js | 18 +- packages/bson-transpilers/index.js | 85 +- .../printers/ECMAScriptListener.js | 8 +- .../symbols/csharp/templates.yaml | 1912 ++++++------- .../symbols/go/templates.yaml | 1881 ++++++------- .../symbols/java/templates.yaml | 2239 ++++++++-------- .../symbols/javascript/templates.yaml | 1259 ++++----- packages/bson-transpilers/symbols/main.yaml | 31 +- .../symbols/object/templates.yaml | 1145 ++++---- .../symbols/php/templates.yaml | 2385 +++++++++-------- .../symbols/python/templates.yaml | 2032 +++++++------- .../symbols/ruby/templates.yaml | 2150 +++++++-------- .../symbols/rust/templates.yaml | 1632 +++++------ .../symbols/sample_template.yaml | 694 ++--- .../bson-transpilers/test/casting.test.js | 33 +- .../test/declaration-store.test.js | 78 +- .../bson-transpilers/test/functions.test.js | 42 +- packages/bson-transpilers/test/index.test.js | 14 +- .../bson-transpilers/test/run-yaml.test.js | 76 +- .../test/yaml/bson-methods.yaml | 52 +- packages/bson-transpilers/test/yaml/bson.yaml | 58 +- .../bson-transpilers/test/yaml/builders.yaml | 18 +- .../test/yaml/driver-syntax.yaml | 4 +- .../test/yaml/edge-cases/casting.yaml | 4 +- .../test/yaml/error-builders.yaml | 86 +- .../bson-transpilers/test/yaml/imports.yaml | 10 +- .../bson-transpilers/test/yaml/native.yaml | 116 +- .../test/yaml/non-idiomatic.yaml | 12 +- .../bson-transpilers/test/yaml/partial.yaml | 20 +- packages/compass-e2e-tests/.prettierignore | 4 + packages/compass/.prettierignore | 3 + packages/hadron-build/.eslintrc | 4 +- packages/hadron-build/.prettierignore | 1 + packages/hadron-build/.prettierrc.json | 1 + packages/hadron-build/README.md | 11 +- packages/hadron-build/cli.js | 2 +- packages/hadron-build/commands/download.js | 10 +- packages/hadron-build/commands/info.js | 40 +- packages/hadron-build/commands/release.d.ts | 2 +- packages/hadron-build/commands/release.js | 251 +- packages/hadron-build/commands/upload.js | 47 +- packages/hadron-build/index.js | 2 +- packages/hadron-build/lib/download-center.js | 16 +- .../hadron-build/lib/mac-notary-service.js | 55 +- packages/hadron-build/lib/run.js | 36 +- packages/hadron-build/lib/signtool.js | 5 +- packages/hadron-build/lib/target.js | 174 +- .../hadron-build/lib/validate-build-config.js | 12 +- .../lib/windows-installer-version.js | 4 +- packages/hadron-build/lib/zip.js | 22 +- packages/hadron-build/signtool/install.js | 4 +- packages/hadron-build/test/config.test.js | 64 +- .../hadron-build/test/download-center.test.js | 22 +- .../test/fixtures/hadron-app/main.js | 18 +- .../test/fixtures/hadron-app/package.json | 8 +- packages/hadron-build/test/helpers.js | 2 +- packages/hadron-build/test/index.test.js | 38 +- packages/hadron-build/test/release.test.js | 54 +- packages/hadron-build/test/signtool.test.js | 101 +- packages/hadron-build/test/tar-gz.test.js | 10 +- packages/hadron-build/test/target.test.js | 2 +- packages/hadron-build/test/upload.test.js | 86 +- packages/hadron-build/test/zip.test.js | 30 +- packages/hadron-type-checker/.eslintrc | 14 +- packages/hadron-type-checker/.prettierrc.json | 1 + packages/hadron-type-checker/index.d.ts | 2 +- packages/hadron-type-checker/package.json | 2 +- .../hadron-type-checker/src/type-checker.js | 11 +- .../test/type-checker.test.js | 620 +++-- packages/mongodb-explain-compat/.eslintrc | 8 +- .../mongodb-explain-compat/.prettierrc.json | 1 + packages/mongodb-explain-compat/lib/index.js | 58 +- packages/mongodb-explain-compat/package.json | 7 +- .../test/fixtures/in1.json | 15 +- .../test/fixtures/in2.json | 5 +- .../test/fixtures/out1.json | 17 +- .../test/fixtures/out2.json | 5 +- .../test/fixtures/unsharded-find.sbe.in.json | 15 +- .../test/fixtures/unsharded-find.sbe.out.json | 17 +- packages/mongodb-explain-compat/test/index.js | 27 +- 105 files changed, 14078 insertions(+), 13833 deletions(-) create mode 100644 packages/bson-transpilers/.prettierignore create mode 100644 packages/bson-transpilers/.prettierrc.json create mode 100644 packages/hadron-build/.prettierignore create mode 100644 packages/hadron-build/.prettierrc.json create mode 100644 packages/hadron-type-checker/.prettierrc.json create mode 100644 packages/mongodb-explain-compat/.prettierrc.json diff --git a/package-lock.json b/package-lock.json index 397cebf3545..57cdb448135 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13312,12 +13312,6 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "node_modules/@types/keyv": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", @@ -22413,159 +22407,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-semistandard": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-15.0.1.tgz", - "integrity": "sha512-sfV+qNBWKOmF0kZJll1VH5XqOAdTmLlhbOl9WKI11d2eMEe+Kicxnpm24PQWHOqAfk5pAWU2An0LjNCXKa4Usg==", - "dev": true, - "peerDependencies": { - "eslint": ">=6.0.1", - "eslint-config-standard": ">=14.1.0", - "eslint-plugin-import": ">=2.18.0", - "eslint-plugin-node": ">=9.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0" - } - }, - "node_modules/eslint-config-standard": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", - "dev": true, - "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-import": ">=2.18.0", - "eslint-plugin-node": ">=9.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "dependencies": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/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/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-chai-friendly": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-0.4.1.tgz", @@ -22578,25 +22419,6 @@ "eslint": ">=3.0.0" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, "node_modules/eslint-plugin-filename-rules": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-filename-rules/-/eslint-plugin-filename-rules-1.2.0.tgz", @@ -22605,141 +22427,6 @@ "node": ">=6.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-import/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", @@ -22796,44 +22483,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/eslint-plugin-react": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", @@ -22893,29 +22542,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -40917,39 +40543,6 @@ "node": ">=0.3.1" } }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -49266,10 +48859,10 @@ "lodash": "^4.17.21" }, "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "chai": "^4.2.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "eslint-config-mongodb-js": "^5.0.3", "mocha": "^10.2.0" } }, @@ -49296,13 +48889,8 @@ "version": "3.1.0", "license": "SSPL", "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "eslint": "^7.25.0", - "eslint-config-semistandard": "^15.0.1", - "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1", "gen-esm-wrapper": "^1.1.0", "mocha": "^10.2.0", "nyc": "^15.1.0" @@ -64388,12 +63976,6 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/keyv": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", @@ -72023,252 +71605,17 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==" }, - "eslint-config-semistandard": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-15.0.1.tgz", - "integrity": "sha512-sfV+qNBWKOmF0kZJll1VH5XqOAdTmLlhbOl9WKI11d2eMEe+Kicxnpm24PQWHOqAfk5pAWU2An0LjNCXKa4Usg==", - "dev": true - }, - "eslint-config-standard": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "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 - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, "eslint-plugin-chai-friendly": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-0.4.1.tgz", "integrity": "sha512-hkpLN7VVoGGsofZjUhcQ+sufC3FgqMJwD0DvAcRfxY1tVRyQyVsqpaKnToPHJQOrRo0FQ0fSEDwW2gr4rsNdGA==", "dev": true }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, "eslint-plugin-filename-rules": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-filename-rules/-/eslint-plugin-filename-rules-1.2.0.tgz", "integrity": "sha512-iPVuHb+VZRt0k9r2ejBRSZM7n+LIJ1OWKiOj/E1ZQiII7AaKZ28JE0lVdxQ7LI2rBem7dqcmC/0QAnAyis0xTA==" }, - "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "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 - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, "eslint-plugin-jsx-a11y": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", @@ -72312,34 +71659,6 @@ "ramda": "^0.27.1" } }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true - }, "eslint-plugin-react": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", @@ -72383,12 +71702,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" }, - "eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -75133,11 +74446,11 @@ "hadron-type-checker": { "version": "file:packages/hadron-type-checker", "requires": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "bson": "^6.7.0", "chai": "^4.2.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "eslint-config-mongodb-js": "^5.0.3", "lodash": "^4.17.21", "mocha": "^10.2.0" } @@ -80367,13 +79680,8 @@ "mongodb-explain-compat": { "version": "file:packages/mongodb-explain-compat", "requires": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "eslint": "^7.25.0", - "eslint-config-semistandard": "^15.0.1", - "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1", "gen-esm-wrapper": "^1.1.0", "mocha": "^10.2.0", "nyc": "^15.1.0" @@ -87429,35 +86737,6 @@ } } }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/packages/bson-transpilers/.prettierignore b/packages/bson-transpilers/.prettierignore new file mode 100644 index 00000000000..e0b0e02777a --- /dev/null +++ b/packages/bson-transpilers/.prettierignore @@ -0,0 +1,12 @@ +# SyntaxError: Aliased anchor not found: ... +symbols/basic_types.yaml +symbols/import_templates.yaml +symbols/python/symbols.yaml +symbols/python/types.yaml +symbols/shell/symbols.yaml +symbols/shell/types.yaml +symbols/syntax_templates.yaml + +# Generated files +lib/antlr/ +lib/symbol-table/ diff --git a/packages/bson-transpilers/.prettierrc.json b/packages/bson-transpilers/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/bson-transpilers/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/bson-transpilers/CONTRIBUTING.md b/packages/bson-transpilers/CONTRIBUTING.md index 84f7d623b86..7e2d9db7e8c 100644 --- a/packages/bson-transpilers/CONTRIBUTING.md +++ b/packages/bson-transpilers/CONTRIBUTING.md @@ -1,36 +1,41 @@ # Contributing to bson-transpilers ## Setting up your environment + The `bson-transpilers` package uses [ANTLR4](https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md) to create a parse tree. As `ANTLR` is written in Java, you will need to set up a few tools before being able to compile this locally. Make sure you have Java installed: + ```shell $ brew cask install java ``` _I strongly suggest using an IDE that will help you visualize ANTLR trees (JetBrains has a good plugin). - Otherwise you can use the java version of the grammar and compile it with - `javac *.java && grun -gui`. - [This might be helpful](https://github.com/antlr/antlr4/blob/master/doc/getting-started.md)._ +Otherwise you can use the java version of the grammar and compile it with +`javac *.java && grun -gui`. +[This might be helpful](https://github.com/antlr/antlr4/blob/master/doc/getting-started.md)._ Make sure you have run the following from the root directory: + ```shell $ npm run bootstrap ``` Then compile and run tests locally with: + ```shell $ npm run compile && npm run test ``` You can provide a few environmental variables to help you test your specific output and input languages. If none are provided, everything will run. -- __INPUT=:__ comma-separated input languages you want to test -- __OUTPUT=:__ comma-separated output languages you want to test. Also called "target" language. -- __MODE=:__ comma-separated names of the test files (without .yaml) that you want to run + +- **INPUT=:** comma-separated input languages you want to test +- **OUTPUT=:** comma-separated output languages you want to test. Also called "target" language. +- **MODE=:** comma-separated names of the test files (without .yaml) that you want to run ```shell OUTPUT=csharp INPUT=shell MODE=native,bson npm run test @@ -39,12 +44,15 @@ OUTPUT=csharp INPUT=shell MODE=native,bson npm run test # How it works See also the original presentation: https://drive.google.com/file/d/1jvwtR3k9oBUzIjL4z_VtpHvdWahfcjTK/view + ## Compilation Stages + Similar to how many transpilers work, this package parses the input string into a tree and then generates code from the tree using the [Visitor pattern](https://en.wikipedia.org/wiki/Visitor_pattern). ### Step 1: Parsing + Parsing and tree generation is handled by ANTLR4. The grammar files are located in the `grammars` folder, and the javascript parser/lexer/etc. generated from the grammar are located in `lib/antlr`. To make @@ -60,8 +68,8 @@ ANTLR generates a "shell" visitor class for each tree in `lib/antlr/Visitor.js`. It contains an empty method for each node in the parse tree. - ### Step 2: Visitor + visiting-tree Because the project is designed to handle multiple input languages and multiple @@ -91,17 +99,18 @@ that provide a layer of indirection around the tree so that the generic visitor care about what tree it's visiting. The CodeGenerationVisitor also includes helper methods that every input language may use. - ### Step 3: Generator + The other half of the tree visitation stage. Each ouput language will have a Generator class defined in `codegeneration//Generator.js`. The Generator class generates code, so it is specific to the ouput language. The Generator class is a subclass of the input language's visitor class. So for example, translating between JS and Python, the order of inheritance will be: - 1. `lib/antlr/ECMAScriptVisitor.js` ["empty" superclass, specific to the tree built by ANTLR] - 2. `codegeneration/CodeGenerationVisitor.js` ["generic" visitor, shared between all languages] - 3. `codegeneration/javascript/Visitor.js` [specific to input language] - 4. `codegeneration/python/Generator.js` [specific to output language] + +1. `lib/antlr/ECMAScriptVisitor.js` ["empty" superclass, specific to the tree built by ANTLR] +2. `codegeneration/CodeGenerationVisitor.js` ["generic" visitor, shared between all languages] +3. `codegeneration/javascript/Visitor.js` [specific to input language] +4. `codegeneration/python/Generator.js` [specific to output language] For nodes that cannot be translated using templates, the Generator class will define a method called `emit` which @@ -115,6 +124,7 @@ When the visitor in [step #1](#step-1:-parsing) reaches a function call, variabl expression it needs a way of knowing what that symbol evaluates to in order to know if it is valid. ### Symbols + Each input language has it's own set of symbols that are part of the language. The majority of symbols supported in the input languages are BSON types (i.e. `Int32`, `ObjectId`, etc) but there are a few native types like `RegExp` and @@ -123,12 +133,12 @@ is undefined, we store symbol information in a [Symbol Table](https://en.wikipedia.org/wiki/Symbol_table). #### Symbol Metadata + The visitor uses the symbol table to determine if a symbol is undefined, but the symbol table also stores some metadata so the visitor can do type and other validity checks. The symbols are defined in [YAML](https://en.wikipedia.org/wiki/YAML) in the `symbols//symbols.yaml` file. A symbol definition looks like: - ```yml Decimal128: id: "Decimal128" @@ -149,27 +159,27 @@ are defined in [YAML](https://en.wikipedia.org/wiki/YAML) in the template: *Decimal128SymbolTemplate argsTemplate: *Decimal128SymbolArgsTemplate ``` -
-| Field | Data | -| ----------|:-------------| -| id | The name of the attribute. Mostly used for error reporting and the `emit` or `process` method names. | -| callable | Used for determining if the symbol can be part of a function call. There are three types of symbols:

`*func`: a function call. If the symbol is found as the "left-hand-side" of a function call, it is valid.

`*constructor`: also a function call, but may require a `new` keyword if the output language requires it.

`*var`: a variable. Indicates to the transpiler that the symbol cannot be invoked, i.e. `()` is invalid.| -| args | Used for type checking. If the symbol is callable, i.e. a `*func` or `*constructor`, then the expected arguments are defined here as an array. So for example, if the function takes in a string as the first arg, and an optional second arg that can be a object or array, args will look like
`[ [*StringType], [*ObjectType, *ArrayType, null] ]`. Null indicates optional.| -| type | The type that the symbol evaluates to. If it is a variable, it will be the type of the variable. If it is a function, it will be the return type. See the [Types](#types) section.| -| attr | Used for determining if attribute access is valid. This field is also a symbol table, but a namespace-prefixed one. So for the example above, `Decimal128.fromString` is a valid attribute, so we need to define the symbol `fromString` in the same way we defined the `Decimal128` symbol.| -| template | Used for code generation. See the [Templates](#templates) section.| -| argsTemplate | Used for code generation. See the [Templates](#templates) section.| +
+| Field | Data | +| ------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | The name of the attribute. Mostly used for error reporting and the `emit` or `process` method names. | +| callable | Used for determining if the symbol can be part of a function call. There are three types of symbols:

`*func`: a function call. If the symbol is found as the "left-hand-side" of a function call, it is valid.

`*constructor`: also a function call, but may require a `new` keyword if the output language requires it.

`*var`: a variable. Indicates to the transpiler that the symbol cannot be invoked, i.e. `()` is invalid. | +| args | Used for type checking. If the symbol is callable, i.e. a `*func` or `*constructor`, then the expected arguments are defined here as an array. So for example, if the function takes in a string as the first arg, and an optional second arg that can be a object or array, args will look like
`[ [*StringType], [*ObjectType, *ArrayType, null] ]`. Null indicates optional. | +| type | The type that the symbol evaluates to. If it is a variable, it will be the type of the variable. If it is a function, it will be the return type. See the [Types](#types) section. | +| attr | Used for determining if attribute access is valid. This field is also a symbol table, but a namespace-prefixed one. So for the example above, `Decimal128.fromString` is a valid attribute, so we need to define the symbol `fromString` in the same way we defined the `Decimal128` symbol. | +| template | Used for code generation. See the [Templates](#templates) section. | +| argsTemplate | Used for code generation. See the [Templates](#templates) section. | ### Types + Each input language also has a set of types that are part of the language. The set of types that are universal for all languages (i.e. "primitives", "literals", like `string`, `integer`, etc) are defined in the file `symbols/basic_types.yaml`. -Types that are specific to the input language are defined in `symbols//types.yaml`. These include BSON types, i.e. classes like `ObjectId`, and +Types that are specific to the input language are defined in `symbols//types.yaml`. These include BSON types, i.e. classes like `ObjectId`, and language-specific types like `RegExp` and `Date`. The types are defined in the same pattern as the symbols and contain the same metadata as the symbols. @@ -178,13 +188,14 @@ the same identifier and are basically the same thing but we have to make a disti because otherwise we will end up with invalid code. The **symbol** `ObjectId` has attributes like `ObjectId.fromString(...)` and is a constructor, so `ObjectId()` is valid. The **type** `ObjectId` has -attributes like `ObjectId().toString()` and is *a variable*, so `ObjectId()()` +attributes like `ObjectId().toString()` and is _a variable_, so `ObjectId()()` is not valid and will error with `ObjectId() is not callable` or similar error. You can kind of think of types as instantiated symbols, if that's helpful. So: `ObjectId.toString() and ObjectId().fromString('x')` are both invalid, while `ObjectId().toString() and ObjectId.fromString('x')` are both valid. ## Templates + The symbol table includes an additional piece of metadata, called a `template`. These are functions that accept strings and return strings, and are responsible for doing the string transformations from one language syntax to another language's syntax. @@ -197,6 +208,7 @@ calls, the `argsTemplate` is a function that gets applied to the arguments in ca need rearranging between languages. ## Project Structure + indexjs Entry point to the project is `index.js`. It currently exports [two @@ -205,36 +217,39 @@ given `inputLang` and `outputLang`, and accessing language's import statements you might need. To construct a transpiler, `index.js` needs 4 components: + - `lib/antlr//Visitor.js` The visitor for the specific input language. - `codegeneration//Generator.js` - The generator for the specific output language. - `lib/symbol-table/to.js` - The symbol table for -the input+output combination. + the input+output combination. #### TL;DR -- __CodeGenerationVisitor:__ place to store repeated code between all visitors. -- __Visitor:__ visits nodes; processes input language via - `processs` methods and sends information to either output language's template found in the `Symbol -Template` or an `emit` method in the Generator`. -- __Generator:__ processes output language via `emit` methods, which take in tree nodes and return strings. -- __Symbol Table:__ a directory of the defined symbols, types and their metadata, including templates. -- __Symbol Template:__ does string manipulation to provide output. + +- **CodeGenerationVisitor:** place to store repeated code between all visitors. +- **Visitor:** visits nodes; processes input language via + `processs` methods and sends information to either output language's template found in the `Symbol Template` or an `emit` method in the Generator`. +- **Generator:** processes output language via `emit` methods, which take in tree nodes and return strings. +- **Symbol Table:** a directory of the defined symbols, types and their metadata, including templates. +- **Symbol Template:** does string manipulation to provide output. The class hierarchy of any transpiler is ANTLRVisitor <-- CodeGenerationVisitor <-- [input-language-specific] Visitor <-- [output-language-specific] Generator. ## A primer on the different types of methods -| Method name | Summary | -|--------------|-----------| -| `visit<*>` | Always auto-generated by ANTLR, overridden by language-specific visitors. Controls the flow of the tree visitation. | -| `get<*>` | Wrapper methods around nodes, defined by language-specific visitors. They exist because different grammars call equivalent nodes different names. | -| `generate<*>` | Shared logic between all input languages. Defined in `CodeGenerationVisitor` and called from language-specific visitor methods. | -| `return<*>` | Separates string generation from object generation. Defined in `CodeGenerationVisitor` or `object/Generator`. | -| `process<*>` | Special case for entire input language. Defined in visitors, called programmatically within the visitor. | -| `emit<*>` | Special case for entire output language. Defined in generators, called programmatically by the visitors. | + +| Method name | Summary | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `visit<*>` | Always auto-generated by ANTLR, overridden by language-specific visitors. Controls the flow of the tree visitation. | +| `get<*>` | Wrapper methods around nodes, defined by language-specific visitors. They exist because different grammars call equivalent nodes different names. | +| `generate<*>` | Shared logic between all input languages. Defined in `CodeGenerationVisitor` and called from language-specific visitor methods. | +| `return<*>` | Separates string generation from object generation. Defined in `CodeGenerationVisitor` or `object/Generator`. | +| `process<*>` | Special case for entire input language. Defined in visitors, called programmatically within the visitor. | +| `emit<*>` | Special case for entire output language. Defined in generators, called programmatically by the visitors. | ### Tests + Tests are written in YAML. Each yaml file requires two keys, first 'runner' which is a function that runs each individual test. The function signature is always `(it, expect, input, output, transpiler, test)` where `test` is a copy of a single YAML test. The second key is 'tests' which is an array @@ -250,23 +265,37 @@ Although I doubt that will end up being needed. ## Adding an Output Language 1. Create a directory in `symbols` directory for your output language: + ```shell mkdir symbols/ ``` + 2. Create a `templates.yaml` file to store your language's templates. Inside you'll probably want to copy the contents from the `symbols/sample_templates.yaml` file. That file also includes comments on which template functions require unusual arguments. + ```shell cp symbols/sample_template.yaml symbols//templates.yaml ``` + 3. Add your new language to the `compile-symbol-table.js` file: + ```js -const outputLangs = ['java', 'shell', 'python', 'csharp', 'javascript', 'mylanguage']; +const outputLangs = [ + 'java', + 'shell', + 'python', + 'csharp', + 'javascript', + 'mylanguage', +]; ``` + 4. You should now run `npm run compile` to generate a complete symbol table. This will be generated in `lib/symbol-table/javascriptto` and -`lib/symbol-table/shellto`. + `lib/symbol-table/shellto`. 5. You will have to require the generated symbol tables in `index.js`: + ```js const javascriptsymbols = require('lib/symbol-table/javascriptto') const getGenerator = require('./codegeneration//Generator.js'); @@ -285,22 +314,28 @@ module.exports = { * specific visitor and the ANTLR visitor to match the input lang. */ } ``` + 6. We still don't have a `Generator.js` file required above, so that won't quite work yet. So next, create a new directory in `codegeneration` for your -output language: + output language: + ```shell mkidr codegeneration/ ``` + 7. And create a generator file: + ```shell touch codegeneration//Generator.js ``` + 8. Most of the Generators are empty nowadays because the work has been moved into -the templates. I would expect that 90% of the time, what you're trying to do can -be done in the templates without changing the template signature. However, if you -really can't do it in the templates, you can copy any of the generators that exist -and fill in any emit methods you require. The class should be created with a super -class that is passed to the function, like so: + the templates. I would expect that 90% of the time, what you're trying to do can + be done in the templates without changing the template signature. However, if you + really can't do it in the templates, you can copy any of the generators that exist + and fill in any emit methods you require. The class should be created with a super + class that is passed to the function, like so: + ```js /* * Class for handling edge cases for node code generation. Defines "emit" methods. @@ -315,23 +350,28 @@ module.exports = (Visitor) => class Generator extends Visitor { }; `` ``` + 9. Next thing is tests! You must go through each test file and add the results of -compiling each input into your output language under the `output` field. + compiling each input into your output language under the `output` field. + ```yaml - Document: - - input: - javascript: "{x: '1'}" - shell: "{x: '1'}" - python: "{'x': '1'}" - output: - javascript: "{\n 'x': '1'\n}" - python: "{\n 'x': '1'\n}" - java: "eq(\"x\", \"1\")" - csharp: "new BsonDocument(\"x\", \"1\")" - shell: "{\n 'x': '1'\n}" - : ... +Document: + - input: + javascript: "{x: '1'}" + shell: "{x: '1'}" + python: "{'x': '1'}" + output: + javascript: "{\n 'x': '1'\n}" + python: "{\n 'x': '1'\n}" + java: 'eq("x", "1")' + csharp: 'new BsonDocument("x", "1")' + shell: "{\n 'x': '1'\n}" + : ... ``` + Make sure to add your output language in the outputLanguages array at the beginning of `run-yaml.test.js`, and to the list near the end of `functions.test.js`. + ## Adding an Input Language + TODO! diff --git a/packages/bson-transpilers/README.md b/packages/bson-transpilers/README.md index 6ee0c270ca9..74dd8e097e0 100644 --- a/packages/bson-transpilers/README.md +++ b/packages/bson-transpilers/README.md @@ -1,4 +1,5 @@ # BSON-Transpilers + [![npm version][1]][2] [![build status][3]][4] [![downloads][5]][6] @@ -8,6 +9,7 @@ provided for `shell` as inputs. `java`, `c#`, `node`, `shell`, `python`, `ruby` See also the original presentation: https://drive.google.com/file/d/1jvwtR3k9oBUzIjL4z_VtpHvdWahfcjTK/view **NOTES:** + 1. A version of the code with support for `python` with corresponding test cases has been removed to avoid bundling and supporting unused code, however it can be still be found in https://github.com/mongodb-js/compass/tree/80cf701e44cd966207f956fac69e8233861b1cd5/packages/bson-transpilers. 2. The `shell` output is disabled as is essentially the only input in use and it produces code that is compatible only with legacy `mongo` shell not the new `mongosh` shell. See [COMPASS-4930](https://jira.mongodb.org/browse/COMPASS-4930) for some additional context. @@ -19,7 +21,7 @@ const transpiler = require('bson-transpilers'); const input = 'shell'; const output = 'java'; -const string =` +const string = ` { item: "book", qty: Int32(10), tags: ["red", "blank"], dim_cm: [14, Int32("81")] }`; try { @@ -34,95 +36,106 @@ try { ``` ## API + ### compiledString = transpiler\[inputLang\]\[outputLang\].compile(codeString) + Output a compiled string given input and output languages. -- __inputLang:__ Input language of the code string. `shell` and `javascript` + +- **inputLang:** Input language of the code string. `shell` and `javascript` are currently supported. -- __outputLang:__ The language you would like the output to be. `java`, +- **outputLang:** The language you would like the output to be. `java`, `python`, `shell`, `javascript`, and `csharp` are currently supported. -- __codeString:__ The code string you would like to be compiled to your +- **codeString:** The code string you would like to be compiled to your selected output language. ### importsString = transpiler\[inputLang\]\[outputLang\].getImports(mode, driverSyntax) + Output a string containing the set of import statements for the generated code to compile. These are all the packages that the compiled code could use so that the transpiler output will be runnable. -- __inputLang:__ Input language of the code string. `shell` and `javascript` + +- **inputLang:** Input language of the code string. `shell` and `javascript` are currently supported. -- __outputLang:__ The language you would like the output to be. `java`, +- **outputLang:** The language you would like the output to be. `java`, `python`, `shell`, `javascript`, and `csharp` are currently supported. -- __mode:__ Either 'Query' for the `.find()` method or 'Pipeline' for `.aggregate()`. -- __driverSyntax:__ Whether or not you want to include Driver Syntax into your output string. +- **mode:** Either 'Query' for the `.find()` method or 'Pipeline' for `.aggregate()`. +- **driverSyntax:** Whether or not you want to include Driver Syntax into your output string. ### catch (error) + Any transpiler errors that occur will be thrown. To catch them, wrap the `transpiler` in a `try/catch` block. -- __error.message:__ Message `bson-transpilers` will send back letting you know + +- **error.message:** Message `bson-transpilers` will send back letting you know the transpiler error. -- __error.stack:__ The usual error stacktrace. -- __error.code:__ [Error code]() that `bson-transpilers` adds to the error object to +- **error.stack:** The usual error stacktrace. +- **error.code:** [Error code]() that `bson-transpilers` adds to the error object to help you distinguish error types. -- __error.line:__ If it is a syntax error, will have the line. -- __error.column:__ If it is a syntax error, will have the column. -- __error.symbol:__ If it is a syntax error, will have the symbol associated with the error. - +- **error.line:** If it is a syntax error, will have the line. +- **error.column:** If it is a syntax error, will have the column. +- **error.symbol:** If it is a syntax error, will have the symbol associated with the error. ### State -The `CodeGenerationVisitor` class manages a global state which is bound to the `argsTemplate` functions. This state is intended to be used as a solution for the `argsTemplate` functions to communicate with the `DriverTemplate` function. For example: +The `CodeGenerationVisitor` class manages a global state which is bound to the `argsTemplate` functions. This state is intended to be used as a solution for the `argsTemplate` functions to communicate with the `DriverTemplate` function. For example: ```yaml -ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (_) => { - this.oneLineStatement = "Hello World"; - return ''; - } - -DriverTemplate: &DriverTemplate !!js/function > - (_spec) => { - return this.oneLineStatement; - } +ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (_) => { + this.oneLineStatement = "Hello World"; + return ''; + } + +DriverTemplate: !!js/function &DriverTemplate > + (_spec) => { + return this.oneLineStatement; + } ``` The output of the driver syntax for this language will be the one-line statement `Hello World`. #### DeclarationStore -A more practical use-case of state is to accumulate variable declarations throughout the `argsTemplate` to be rendered by the `DriverTemplate`. That is, the motivation for using `DeclarationStore` is to prepend the driver syntax with variable declarations rather than using non-idiomatic solutions such as closures. -The `DeclarationStore` class maintains an internal state concerning variable declarations. For example, +A more practical use-case of state is to accumulate variable declarations throughout the `argsTemplate` to be rendered by the `DriverTemplate`. That is, the motivation for using `DeclarationStore` is to prepend the driver syntax with variable declarations rather than using non-idiomatic solutions such as closures. + +The `DeclarationStore` class maintains an internal state concerning variable declarations. For example, ```javascript // within the args template (arg) => { - return this.declarations.add("Temp", "objectID", (varName) => { + return this.declarations.add('Temp', 'objectID', (varName) => { return [ `${varName}, err := primitive.ObjectIDFromHex(${arg})`, 'if err != nil {', ' log.Fatal(err)', - '}' - ].join('\n') - }) -} + '}', + ].join('\n'); + }); +}; ``` -Note that each use of the same variable name will result in an increment being added to the declaration statement. For example, if the variable name `objectIDForTemp` is used two times the resulting declaration statements will use `objectIDForTemp` for the first declaration and `objectID2ForTemp` for the second declaration. The `add` method returns the incremented variable name, and is therefore what would be expected as the right-hand side of the statement defined by the `argsTemplate` function. +Note that each use of the same variable name will result in an increment being added to the declaration statement. For example, if the variable name `objectIDForTemp` is used two times the resulting declaration statements will use `objectIDForTemp` for the first declaration and `objectID2ForTemp` for the second declaration. The `add` method returns the incremented variable name, and is therefore what would be expected as the right-hand side of the statement defined by the `argsTemplate` function. The instance of the `DeclarationStore` constructed by the transpiler class is passed into the driver, syntax via state, for use: ```javascript (spec) => { - const comment = '// some comment' - const client = 'client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(cs.String()))' - return "#{comment}\n\n#{client}\n\n${this.declarations.toString()}" -} + const comment = '// some comment'; + const client = + 'client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(cs.String()))'; + return '#{comment}\n\n#{client}\n\n${this.declarations.toString()}'; +}; ``` ### Errors + There are a few different error classes thrown by `bson-transpilers`, each with their own error code: #### BsonTranspilersArgumentError + ###### code: E_BSONTRANSPILERS_ARGUMENT + This will occur when you're using a method with a wrong number of arguments, or the arguments are of the wrong type. For example, `ObjectId().equals()` requires one argument and it will throw if @@ -145,21 +158,25 @@ ObjectId(); ``` #### BsonTranspilersAttributeError + ###### code: E_BSONTRANSPILERS_ATTRIBUTE + Will be thrown if an invalid method or property is used on a BSON object. For example, since `new DBRef()` doesn't have a method `.foo()`, transpiler will throw: ```javascript // ✘: method foo doesn't exist, so this will throw a BsonTranspilersAttributeError . -new DBRef('newCollection', new ObjectId()).foo() +new DBRef('newCollection', new ObjectId()).foo(); // ✔: this won't throw, since .toString() method exists -new DBRef('newCollection', new ObjectId()).toString(10) +new DBRef('newCollection', new ObjectId()).toString(10); ``` #### BsonTranspilersSyntaxError + ###### code: E_BSONTRANSPILERS_SYNTAX + This will throw if you have a syntax error. For example missing a colon in Object assignment, or forgetting a comma in array definition: @@ -176,57 +193,70 @@ Object assignment, or forgetting a comma in array definition: ``` #### BsonTranspilersTypeError + ###### code: E_BSONTRANSPILERS_TYPE + This error will occur if a symbol is treated as the wrong type. For example, if a non-function is called: ```javascript // ✘: MAX_VALUE is a constant, not a function -Long.MAX_VALUE() +Long.MAX_VALUE(); // ✔: MAX_VALUE without a call will not throw -Long.MAX_VALUE +Long.MAX_VALUE; ``` + #### BsonTranspilersUnimplementedError + ###### code: E_BSONTRANSPILERS_UNIMPLEMENTED + If there is a feature in the input code that is not currently supported by the transpiler. #### BsonTranspilersRuntimeError + ###### code: E_BSONTRANSPILERS_RUNTIME + A generic runtime error will be thrown for all errors that are not covered by the above list of errors. These are usually constructor requirements, for example when using a `RegExp()` an unsupported flag is given: ```javascript // ✘: these are not proper 'RegExp()' flags, a BsonTranspilersRuntimeError will be thrown. -new RegExp('ab+c', 'beep') +new RegExp('ab+c', 'beep'); // ✔: 'im' are proper 'RegExp()' flags -new RegExp('ab+c', 'im') +new RegExp('ab+c', 'im'); ``` #### BsonTranspilersInternalError + ###### code: E_BSONTRANSPILERS_INTERNAL + In the case where something has gone wrong within compilation, and an error has occured. If you see this error, please create [an issue](https://github.com/mongodb-js/bson-transpilers/issues) on Github! # Install + ```shell npm install -S bson-transpilers ``` ## Contributing + Head over to the readme [on contributing](./CONTRIBUTING.md) to find out more information on project structure and setting up your environment. # Authors + - [aherlihy](https://github.com/aherlihy) - Anna Herlihy - [alenakhineika](https://github.com/alenakhineika) - Alena Khineika - [lrlna](github.com/lrlna) - Irina Shestak # License -[Apache-2.0](https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)) + +[Apache-2.0]() [1]: https://img.shields.io/npm/v/bson-transpilers.svg?style=flat-square [2]: https://npmjs.org/package/bson-transpilers diff --git a/packages/bson-transpilers/codegeneration/CodeGenerationVisitor.js b/packages/bson-transpilers/codegeneration/CodeGenerationVisitor.js index 9b0618afe48..9ab796234f6 100644 --- a/packages/bson-transpilers/codegeneration/CodeGenerationVisitor.js +++ b/packages/bson-transpilers/codegeneration/CodeGenerationVisitor.js @@ -7,7 +7,7 @@ const { BsonTranspilersReferenceError, BsonTranspilersRuntimeError, BsonTranspilersTypeError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('../helper/error'); const { removeQuotes } = require('../helper/format'); @@ -21,859 +21,934 @@ const DeclarationStore = require('./DeclarationStore'); * @param {ANTLRVisitor} ANTLRVisitor - An ANTLR-generated visitor class * @returns {CodeGenerationVisitor} */ -module.exports = (ANTLRVisitor) => class CodeGenerationVisitor extends ANTLRVisitor { - constructor() { - super(); - this.idiomatic = true; // PUBLIC - this.clearImports(); - this.state = { declarations: new DeclarationStore() }; - } - - clearImports() { - this.requiredImports = {}; - [300, 301, 302, 303, 304, 305, 306].forEach( - (i) => (this.requiredImports[i] = []) - ); - } - - /** - * Start the compiler at this.startRule. - * - * "Return" methods are overridden only by the object generator. All - * generators or visitors that translate code to code should not need to - * override these methods. - * - * @param {ParserRuleContext} ctx - * @return {*} - */ - returnResult(ctx) { - const rule = `visit${this.startRule.replace(/^\w/, c => c.toUpperCase())}`; - if (!this.startRule || !(rule in this)) { - throw new BsonTranspilersInternalError( - 'Unimplemented Visitor: the entry rule for the compiler must be set' +module.exports = (ANTLRVisitor) => + class CodeGenerationVisitor extends ANTLRVisitor { + constructor() { + super(); + this.idiomatic = true; // PUBLIC + this.clearImports(); + this.state = { declarations: new DeclarationStore() }; + } + + clearImports() { + this.requiredImports = {}; + [300, 301, 302, 303, 304, 305, 306].forEach( + (i) => (this.requiredImports[i] = []) ); } - return this[rule](ctx); - } - - returnResultWithDeclarations(ctx) { - let result = this.returnResult(ctx); - if (this.getState().declarations.length() > 0) { - result = `${this.getState().declarations.toString() + '\n\n'}${result}`; - } - return result; - } - - /** - * PUBLIC: This is the entry point for the compiler. Each visitor must define - * an attribute called "startNode". - * - * @param {ParserRuleContext} ctx - * @param {Boolean} useDeclarations - prepend the result string with declarations - * @return {String} - */ - start(ctx, useDeclarations = false) { - return (useDeclarations ? this.returnResultWithDeclarations(ctx) : this.returnResult(ctx)).trim(); - } - - getState() { - return this.state; - } - - clearDeclarations() { - this.getState().declarations.clear(); - } - - /** - * PUBLIC: As code is generated, any classes that require imports are tracked - * in this.Imports. Each class has a "code" defined in the symbol table. - * The imports are then generated based on the output language templates. - * @param {String} mode - * @param {Boolean} driverSyntax (optional) - * @return {String} - The list of imports in the target language. - */ - getImports(mode, driverSyntax) { - const importTemplate = this.Imports.import.template ? - this.Imports.import.template : - (s) => ( - Object.values(s) - .filter((a, i) => (Object.values(s).indexOf(a) === i)) - .join('\n') - ); - // Remove empty arrays because js [] is not falsey :( - [300, 301, 302, 303, 304, 305, 306].forEach( - (i) => { + + /** + * Start the compiler at this.startRule. + * + * "Return" methods are overridden only by the object generator. All + * generators or visitors that translate code to code should not need to + * override these methods. + * + * @param {ParserRuleContext} ctx + * @return {*} + */ + returnResult(ctx) { + const rule = `visit${this.startRule.replace(/^\w/, (c) => + c.toUpperCase() + )}`; + if (!this.startRule || !(rule in this)) { + throw new BsonTranspilersInternalError( + 'Unimplemented Visitor: the entry rule for the compiler must be set' + ); + } + return this[rule](ctx); + } + + returnResultWithDeclarations(ctx) { + let result = this.returnResult(ctx); + if (this.getState().declarations.length() > 0) { + result = `${this.getState().declarations.toString() + '\n\n'}${result}`; + } + return result; + } + + /** + * PUBLIC: This is the entry point for the compiler. Each visitor must define + * an attribute called "startNode". + * + * @param {ParserRuleContext} ctx + * @param {Boolean} useDeclarations - prepend the result string with declarations + * @return {String} + */ + start(ctx, useDeclarations = false) { + return ( + useDeclarations + ? this.returnResultWithDeclarations(ctx) + : this.returnResult(ctx) + ).trim(); + } + + getState() { + return this.state; + } + + clearDeclarations() { + this.getState().declarations.clear(); + } + + /** + * PUBLIC: As code is generated, any classes that require imports are tracked + * in this.Imports. Each class has a "code" defined in the symbol table. + * The imports are then generated based on the output language templates. + * @param {String} mode + * @param {Boolean} driverSyntax (optional) + * @return {String} - The list of imports in the target language. + */ + getImports(mode, driverSyntax) { + const importTemplate = this.Imports.import.template + ? this.Imports.import.template + : (s) => + Object.values(s) + .filter((a, i) => Object.values(s).indexOf(a) === i) + .join('\n'); + // Remove empty arrays because js [] is not falsey :( + [300, 301, 302, 303, 304, 305, 306].forEach((i) => { if (i in this.requiredImports && this.requiredImports[i].length === 0) { this.requiredImports[i] = false; } }); - this.requiredImports.driver = !!driverSyntax; - const imports = {}; - for (const code of Object.keys(this.requiredImports)) { - if ( - this.requiredImports[code] && - this.Imports[code] && - this.Imports[code].template - ) { - imports[code] = this.Imports[code].template(this.requiredImports[code], mode); - } - } - return importTemplate(imports); - } - - /** - * Used by the generators. Makes a copy of the required imports so - * can be rolled back after a recursion if needed. - * - * @return {Object} - */ - deepCopyRequiredImports() { - const copy = Object.assign({}, this.requiredImports); - [300, 301, 302, 303, 304, 305, 306].forEach((i) => { - copy[i] = Array.from(this.requiredImports[i]); - }); - return copy; - } - - /** - * If the compiler reaches a expression in the input language - * that is not implemented yet. - * - * @param {ParserRuleContext} ctx - */ - unimplemented(ctx) { - const name = this.renameNode(ctx.constructor.name); - throw new BsonTranspilersUnimplementedError( - `'${name}' not yet implemented` - ); - } - - /** - * Some grammar definitions are written so that comparisons will chain and add - * nodes with a single child when the expression does *not* match. This is a - * helper method (right now used just by Python) that skips nodes downwards - * until a node with multiple children is found, or a node matches "goal". - * - * @param {ParserRuleContext} ctx - * @param {String} goal - Optional: the name of the child to find. - * @return {ParserRuleContext} - */ - skipFakeNodesDown(ctx, goal) { /* eslint no-unused-vars: 0 */ - return ctx; - } - - _getType(ctx) { - if (ctx.type !== undefined) { + this.requiredImports.driver = !!driverSyntax; + const imports = {}; + for (const code of Object.keys(this.requiredImports)) { + if ( + this.requiredImports[code] && + this.Imports[code] && + this.Imports[code].template + ) { + imports[code] = this.Imports[code].template( + this.requiredImports[code], + mode + ); + } + } + return importTemplate(imports); + } + + /** + * Used by the generators. Makes a copy of the required imports so + * can be rolled back after a recursion if needed. + * + * @return {Object} + */ + deepCopyRequiredImports() { + const copy = Object.assign({}, this.requiredImports); + [300, 301, 302, 303, 304, 305, 306].forEach((i) => { + copy[i] = Array.from(this.requiredImports[i]); + }); + return copy; + } + + /** + * If the compiler reaches a expression in the input language + * that is not implemented yet. + * + * @param {ParserRuleContext} ctx + */ + unimplemented(ctx) { + const name = this.renameNode(ctx.constructor.name); + throw new BsonTranspilersUnimplementedError( + `'${name}' not yet implemented` + ); + } + + /** + * Some grammar definitions are written so that comparisons will chain and add + * nodes with a single child when the expression does *not* match. This is a + * helper method (right now used just by Python) that skips nodes downwards + * until a node with multiple children is found, or a node matches "goal". + * + * @param {ParserRuleContext} ctx + * @param {String} goal - Optional: the name of the child to find. + * @return {ParserRuleContext} + */ + skipFakeNodesDown(ctx, goal) { + /* eslint no-unused-vars: 0 */ return ctx; } - if (!ctx.children) { + + _getType(ctx) { + if (ctx.type !== undefined) { + return ctx; + } + if (!ctx.children) { + return null; + } + for (const c of ctx.children) { + const typed = this._getType(c); + if (typed) { + return typed; + } + } return null; } - for (const c of ctx.children) { - const typed = this._getType(c); - if (typed) { - return typed; - } - } - return null; - } - - /** - * Recursively descend down the tree looking for a node with the type set. - * Returns the first child node with a type set. - * - * @param {ParserRuleContext} ctx - * @return {ParserRuleContext} - */ - findTypedNode(ctx) { - const typed = this._getType(ctx); - if (!typed) { - throw new BsonTranspilersInternalError('Type not set on any child nodes'); - } - return typed; - } - - /** - * Get the 'originalType' of ctx, of if it's undefined, keep checking parent - * nodes until an original type is found. Otherwise null. - * - * @param {ParserRuleContext} ctx - * @return {ParserRuleContext} - */ - getParentOriginalType(ctx) { - if (ctx.originalType !== undefined) { - return ctx.originalType; - } - if (ctx.parentCtx) { - return this.getParentOriginalType(ctx.parentCtx); - } - return null; - } - - compareTypes(expectedType, type, ctx, result) { - // If the types are exactly the same, just return. - if (expectedType.indexOf(type) !== -1 || - expectedType.indexOf(type.id) !== -1) { - return result; + + /** + * Recursively descend down the tree looking for a node with the type set. + * Returns the first child node with a type set. + * + * @param {ParserRuleContext} ctx + * @return {ParserRuleContext} + */ + findTypedNode(ctx) { + const typed = this._getType(ctx); + if (!typed) { + throw new BsonTranspilersInternalError( + 'Type not set on any child nodes' + ); + } + return typed; + } + + /** + * Get the 'originalType' of ctx, of if it's undefined, keep checking parent + * nodes until an original type is found. Otherwise null. + * + * @param {ParserRuleContext} ctx + * @return {ParserRuleContext} + */ + getParentOriginalType(ctx) { + if (ctx.originalType !== undefined) { + return ctx.originalType; + } + if (ctx.parentCtx) { + return this.getParentOriginalType(ctx.parentCtx); + } + return null; } - const numericTypes = [ - this.Types._integer, this.Types._decimal, this.Types._hex, - this.Types._octal, this.Types._long - ]; - // If both expected and node are numeric literals, cast + return - for (let i = 0; i < expectedType.length; i++) { - if (numericTypes.indexOf(type) !== -1 && - numericTypes.indexOf(expectedType[i]) !== -1) { - // Need to visit the octal node always - if (type.id === '_octal') { - return this.leafHelper( - expectedType[i], - { + compareTypes(expectedType, type, ctx, result) { + // If the types are exactly the same, just return. + if ( + expectedType.indexOf(type) !== -1 || + expectedType.indexOf(type.id) !== -1 + ) { + return result; + } + + const numericTypes = [ + this.Types._integer, + this.Types._decimal, + this.Types._hex, + this.Types._octal, + this.Types._long, + ]; + // If both expected and node are numeric literals, cast + return + for (let i = 0; i < expectedType.length; i++) { + if ( + numericTypes.indexOf(type) !== -1 && + numericTypes.indexOf(expectedType[i]) !== -1 + ) { + // Need to visit the octal node always + if (type.id === '_octal') { + return this.leafHelper(expectedType[i], { type: expectedType[i], originalType: type.id, - getText: () => ( this.visit(ctx) ) - } - ); + getText: () => this.visit(ctx), + }); + } + const child = this.skipFakeNodesDown(ctx); + child.originalType = type; + child.type = expectedType[i]; + return this.leafHelper(expectedType[i], child); } - const child = this.skipFakeNodesDown(ctx); - child.originalType = type; - child.type = expectedType[i]; - return this.leafHelper(expectedType[i], child); } - } - // If the expected type is "numeric", accept the number basic & bson types - if (expectedType.indexOf(this.Types._numeric) !== -1 && - (numericTypes.indexOf(type) !== -1 || (type.code === 106 || - type.code === 105 || type.code === 104))) { - return result; - } - // If the expected type is any number, accept float/int/_numeric - if ((numericTypes.some((t) => ( expectedType.indexOf(t) !== -1))) && - (type.code === 106 || type.code === 105 || type.code === 104 || - type === this.Types._numeric)) { - return result; - } - return null; - } - - /** - * Convert between numeric types. Required so that we don't end up with - * strange conversions like 'Int32(Double(2))', and can just generate '2'. - * - * @param {Array} expectedType - types to cast to. - * @param {ParserRuleContext} ctx - ctx to cast from, if valid. - * - * @returns {String} - visited result, or null on error. - */ - castType(expectedType, ctx) { - const result = this.visit(ctx); - const typedCtx = this.findTypedNode(ctx); - let type = typedCtx.type; - - let equal = this.compareTypes(expectedType, type, ctx, result); - while (equal === null) { - if (type.type === null) { - return null; + // If the expected type is "numeric", accept the number basic & bson types + if ( + expectedType.indexOf(this.Types._numeric) !== -1 && + (numericTypes.indexOf(type) !== -1 || + type.code === 106 || + type.code === 105 || + type.code === 104) + ) { + return result; } - type = type.type; - equal = this.compareTypes(expectedType, type, ctx, result); - } - return equal; - } - - /** - * Validate each argument against the expected argument types defined in the - * Symbol table. - * - * @param {Array} expected - An array of arrays where each subarray represents - * possible argument types for that index. - * @param {Array} args - empty if no args. - * @param {String} name - The name of the function for error reporting. - * @param {Object} namedArgs - Optional: if named arguments exist, this is the - * mapping of name to default value. - * - * @returns {Array} - Array containing the generated output for each argument. - */ - checkArguments(expected, args, name, namedArgs) { - const argStr = []; - if (args.length === 0) { - if (expected.length === 0 || expected[0].indexOf(null) !== -1) { - return argStr; - } - throw new BsonTranspilersArgumentError( - `Argument count mismatch: '${name}' requires least one argument` - ); - } - if (args.length > expected.length) { - throw new BsonTranspilersArgumentError( - `Argument count mismatch: '${name}' expects ${ - expected.length} args and got ${args.length}` - ); + // If the expected type is any number, accept float/int/_numeric + if ( + numericTypes.some((t) => expectedType.indexOf(t) !== -1) && + (type.code === 106 || + type.code === 105 || + type.code === 104 || + type === this.Types._numeric) + ) { + return result; + } + return null; } - for (let i = 0; i < expected.length; i++) { - if (args[i] === undefined) { - if (expected[i].indexOf(null) !== -1) { + + /** + * Convert between numeric types. Required so that we don't end up with + * strange conversions like 'Int32(Double(2))', and can just generate '2'. + * + * @param {Array} expectedType - types to cast to. + * @param {ParserRuleContext} ctx - ctx to cast from, if valid. + * + * @returns {String} - visited result, or null on error. + */ + castType(expectedType, ctx) { + const result = this.visit(ctx); + const typedCtx = this.findTypedNode(ctx); + let type = typedCtx.type; + + let equal = this.compareTypes(expectedType, type, ctx, result); + while (equal === null) { + if (type.type === null) { + return null; + } + type = type.type; + equal = this.compareTypes(expectedType, type, ctx, result); + } + return equal; + } + + /** + * Validate each argument against the expected argument types defined in the + * Symbol table. + * + * @param {Array} expected - An array of arrays where each subarray represents + * possible argument types for that index. + * @param {Array} args - empty if no args. + * @param {String} name - The name of the function for error reporting. + * @param {Object} namedArgs - Optional: if named arguments exist, this is the + * mapping of name to default value. + * + * @returns {Array} - Array containing the generated output for each argument. + */ + checkArguments(expected, args, name, namedArgs) { + const argStr = []; + if (args.length === 0) { + if (expected.length === 0 || expected[0].indexOf(null) !== -1) { return argStr; } throw new BsonTranspilersArgumentError( - `Argument count mismatch: too few arguments passed to '${name}'` + `Argument count mismatch: '${name}' requires least one argument` ); } - - const toCompare = this.checkNamedArgs(expected[i], args[i], namedArgs); - const result = this.castType(...toCompare); - if (result === null) { - const typeStr = expected[i].map((e) => { - const id = e && e.id ? e.id : e; - return e ? id : '[optional]'; - }).join(', '); - const message = `Argument type mismatch: '${name}' expects types ${ - typeStr} but got type ${this.findTypedNode(args[i]).type.id - } for argument at index ${i}`; - - throw new BsonTranspilersArgumentError(message); - } - argStr.push(result); - } - return argStr; - } - - /* - * Overriden only by the object generator. - */ - returnFunctionCallLhs(code, name) { - return name; - } - returnFunctionCallLhsRhs(lhs, rhs, lhsType, l) { - if (lhsType.argsTemplate) { - rhs = lhsType.argsTemplate.bind(this.getState())(l, ...rhs); - } else { - rhs = `(${rhs.join(', ')})`; - } - return `${lhs}${rhs}`; - } - - returnAttributeAccess(lhs, rhs, type) { - if (type && type.attr[rhs].template) { - return type.attr[rhs].template(lhs, rhs); - } - return `${lhs}.${rhs}`; - } - returnParenthesis(expr) { - return `(${expr})`; - } - returnSet(args, ctx) { - return this.visitChildren(ctx); - } - - /** - * Generate a function call, diverting to process or emit methods if they - * exist. - * @param {ParserRuleContext} ctx - * @return {*} - */ - generateFunctionCall(ctx) { - const funcNameNode = this.getFunctionCallName(ctx); - const lhs = this.visit(funcNameNode); - let l = lhs; - let lhsType = this.findTypedNode(funcNameNode).type; - if (typeof lhsType === 'string') { - lhsType = this.Types[lhsType]; - } - - // Special case - if (`process${lhsType.id}` in this) { - return this[`process${lhsType.id}`](ctx); - } - if (`emit${lhsType.id}` in this) { - return this[`emit${lhsType.id}`](ctx); - } - - // Check if left-hand-side is callable - ctx.type = lhsType.type; - if (!lhsType.callable) { - throw new BsonTranspilersTypeError(`${lhsType.id} is not callable`); - } - - // Check arguments - const expectedArgs = lhsType.args; - const rhs = this.checkArguments( - expectedArgs, this.getArguments(ctx), lhsType.id, lhsType.namedArgs - ); - - // Apply the arguments template - if (lhsType.argsTemplate) { - l = this.visit(this.getIfIdentifier(funcNameNode)); - } - const expr = this.returnFunctionCallLhsRhs(lhs, rhs, lhsType, l); - const constructor = lhsType.callable === this.SYMBOL_TYPE.CONSTRUCTOR; - - return this.Syntax.new.template - ? this.Syntax.new.template(expr, !constructor, lhsType.code) - : expr; - } - - /** - * Visit a symbol and error if undefined. Otherwise check symbol table and - * replace if template exists. - * - * @param {ParserRuleContext} ctx - * @return {*} - */ - generateIdentifier(ctx) { - const name = this.visitChildren(ctx); - ctx.type = this.Symbols[name]; - if (ctx.type === undefined) { - throw new BsonTranspilersReferenceError(`Symbol '${name}' is undefined`); - } - this.requiredImports[ctx.type.code] = true; - - if (ctx.type.template) { - return ctx.type.template(); - } - return this.returnFunctionCallLhs(ctx.type.code, name); - } - - /** - * Generate attribute access. Visitors are in charge of making sure that - * if lhs type attribute access is not supported, an error is thrown. - * - * NOTE: If the attribute isn't defined on the lhsType, then it will check the - * lhsType.type to see if defined. It will loop, checking the lhs type's type, - * until the attribute exists or the .type is null. If the type is null, - * and the class is a BSON class, then error. If it is a native type however, - * do not error and just return the original attribute. This is to not annoy - * people with attribute errors in languages where it wouldn't throw anyway. - * It feels better to be strict about BSON than the whole language, but it's - * up for debate. TODO: could set type checking to 'strict' or 'non-strict' in - * the visitor, and then only error if we are compiling from a strictly typed - * language. - * - * @param {ParserRuleContext} ctx - * @return {*} - */ - generateAttributeAccess(ctx) { - if ('emitAttributeAccess' in this) { - return this.emitAttributeAccess(ctx); - } - const lhsNode = this.getAttributeLHS(ctx); - const lhs = this.visit(lhsNode); - const rhs = this.getAttributeRHS(ctx).getText(); - - let type = this.findTypedNode(lhsNode).type; - if (typeof type === 'string') { - type = this.Types[type]; - } - while (type !== null) { - if (!(Object.prototype.hasOwnProperty.call(type.attr, rhs))) { - if (type.id in this.BsonTypes && this.BsonTypes[type.id].id !== null) { // TODO: tell symbols vs types - throw new BsonTranspilersAttributeError( - `'${rhs}' not an attribute of ${type.id}` + if (args.length > expected.length) { + throw new BsonTranspilersArgumentError( + `Argument count mismatch: '${name}' expects ${expected.length} args and got ${args.length}` + ); + } + for (let i = 0; i < expected.length; i++) { + if (args[i] === undefined) { + if (expected[i].indexOf(null) !== -1) { + return argStr; + } + throw new BsonTranspilersArgumentError( + `Argument count mismatch: too few arguments passed to '${name}'` ); } - type = type.type; - if (typeof type === 'string') { - type = this.Types[type]; + + const toCompare = this.checkNamedArgs(expected[i], args[i], namedArgs); + const result = this.castType(...toCompare); + if (result === null) { + const typeStr = expected[i] + .map((e) => { + const id = e && e.id ? e.id : e; + return e ? id : '[optional]'; + }) + .join(', '); + const message = `Argument type mismatch: '${name}' expects types ${typeStr} but got type ${ + this.findTypedNode(args[i]).type.id + } for argument at index ${i}`; + + throw new BsonTranspilersArgumentError(message); } + argStr.push(result); + } + return argStr; + } + + /* + * Overriden only by the object generator. + */ + returnFunctionCallLhs(code, name) { + return name; + } + returnFunctionCallLhsRhs(lhs, rhs, lhsType, l) { + if (lhsType.argsTemplate) { + rhs = lhsType.argsTemplate.bind(this.getState())(l, ...rhs); } else { - break; + rhs = `(${rhs.join(', ')})`; } + return `${lhs}${rhs}`; } - if (type === null) { - ctx.type = this.Types._undefined; - // TODO: how strict do we want to be? + + returnAttributeAccess(lhs, rhs, type) { + if (type && type.attr[rhs].template) { + return type.attr[rhs].template(lhs, rhs); + } + return `${lhs}.${rhs}`; + } + returnParenthesis(expr) { + return `(${expr})`; + } + returnSet(args, ctx) { + return this.visitChildren(ctx); + } + + /** + * Generate a function call, diverting to process or emit methods if they + * exist. + * @param {ParserRuleContext} ctx + * @return {*} + */ + generateFunctionCall(ctx) { + const funcNameNode = this.getFunctionCallName(ctx); + const lhs = this.visit(funcNameNode); + let l = lhs; + let lhsType = this.findTypedNode(funcNameNode).type; + if (typeof lhsType === 'string') { + lhsType = this.Types[lhsType]; + } + + // Special case + if (`process${lhsType.id}` in this) { + return this[`process${lhsType.id}`](ctx); + } + if (`emit${lhsType.id}` in this) { + return this[`emit${lhsType.id}`](ctx); + } + + // Check if left-hand-side is callable + ctx.type = lhsType.type; + if (!lhsType.callable) { + throw new BsonTranspilersTypeError(`${lhsType.id} is not callable`); + } + + // Check arguments + const expectedArgs = lhsType.args; + const rhs = this.checkArguments( + expectedArgs, + this.getArguments(ctx), + lhsType.id, + lhsType.namedArgs + ); + + // Apply the arguments template + if (lhsType.argsTemplate) { + l = this.visit(this.getIfIdentifier(funcNameNode)); + } + const expr = this.returnFunctionCallLhsRhs(lhs, rhs, lhsType, l); + const constructor = lhsType.callable === this.SYMBOL_TYPE.CONSTRUCTOR; + + return this.Syntax.new.template + ? this.Syntax.new.template(expr, !constructor, lhsType.code) + : expr; + } + + /** + * Visit a symbol and error if undefined. Otherwise check symbol table and + * replace if template exists. + * + * @param {ParserRuleContext} ctx + * @return {*} + */ + generateIdentifier(ctx) { + const name = this.visitChildren(ctx); + ctx.type = this.Symbols[name]; + if (ctx.type === undefined) { + throw new BsonTranspilersReferenceError( + `Symbol '${name}' is undefined` + ); + } + this.requiredImports[ctx.type.code] = true; + + if (ctx.type.template) { + return ctx.type.template(); + } + return this.returnFunctionCallLhs(ctx.type.code, name); + } + + /** + * Generate attribute access. Visitors are in charge of making sure that + * if lhs type attribute access is not supported, an error is thrown. + * + * NOTE: If the attribute isn't defined on the lhsType, then it will check the + * lhsType.type to see if defined. It will loop, checking the lhs type's type, + * until the attribute exists or the .type is null. If the type is null, + * and the class is a BSON class, then error. If it is a native type however, + * do not error and just return the original attribute. This is to not annoy + * people with attribute errors in languages where it wouldn't throw anyway. + * It feels better to be strict about BSON than the whole language, but it's + * up for debate. TODO: could set type checking to 'strict' or 'non-strict' in + * the visitor, and then only error if we are compiling from a strictly typed + * language. + * + * @param {ParserRuleContext} ctx + * @return {*} + */ + generateAttributeAccess(ctx) { + if ('emitAttributeAccess' in this) { + return this.emitAttributeAccess(ctx); + } + const lhsNode = this.getAttributeLHS(ctx); + const lhs = this.visit(lhsNode); + const rhs = this.getAttributeRHS(ctx).getText(); + + let type = this.findTypedNode(lhsNode).type; + if (typeof type === 'string') { + type = this.Types[type]; + } + while (type !== null) { + if (!Object.prototype.hasOwnProperty.call(type.attr, rhs)) { + if ( + type.id in this.BsonTypes && + this.BsonTypes[type.id].id !== null + ) { + // TODO: tell symbols vs types + throw new BsonTranspilersAttributeError( + `'${rhs}' not an attribute of ${type.id}` + ); + } + type = type.type; + if (typeof type === 'string') { + type = this.Types[type]; + } + } else { + break; + } + } + if (type === null) { + ctx.type = this.Types._undefined; + // TODO: how strict do we want to be? + return this.returnAttributeAccess(lhs, rhs, type); + } + ctx.type = type.attr[rhs]; return this.returnAttributeAccess(lhs, rhs, type); } - ctx.type = type.attr[rhs]; - return this.returnAttributeAccess(lhs, rhs, type); - } - - /** - * This helper function checks for an emit method then applies the templates - * if they exist for a function call node. Used primarily by process methods. - * - * @param {ParserRuleContext} ctx - The function call node - * @param {Object} lhsType - The type - * @param {Array} args - Arguments to the template - * @param {String} defaultT - The default name if no template exists. - * @param {String} defaultA - The default arguments if no argsTemplate exists. - * @param {Boolean} skipNew - Optional: If true, never add new. - * @param {Boolean} skipLhs - Optional: If true, don't add lhs to result. - * - * @return {*} - */ - generateCall(ctx, lhsType, args, defaultT, defaultA, skipNew, skipLhs) { - if (`emit${lhsType.id}` in this) { - return this[`emit${lhsType.id}`](ctx); - } - const lhsArg = lhsType.template - ? lhsType.template() - : defaultT; - const rhs = lhsType.argsTemplate - ? lhsType.argsTemplate.bind(this.getState())(lhsArg, ...args) - : defaultA; - const lhs = skipLhs ? '' : lhsArg; - return this.Syntax.new.template - ? this.Syntax.new.template(`${lhs}${rhs}`, skipNew, lhsType.code) - : `${lhs}${rhs}`; - } - - generateObjectLiteral(ctx) { - if (this.idiomatic && 'emitIdiomaticObjectLiteral' in this) { - return this.emitIdiomaticObjectLiteral(ctx); - } - const type = this.Types._object; - if (`emit${type.id}` in this) { - return this[`emit${type.id}`](ctx); - } - ctx.type = type; - this.requiredImports[10] = true; - ctx.indentDepth = this.findIndentDepth(ctx) + 1; - let args = ''; - const keysAndValues = this.getKeyValueList(ctx); - if (ctx.type.argsTemplate) { - args = ctx.type.argsTemplate.bind(this.getState())( - this.getKeyValueList(ctx).map((k) => { - return [this.getKeyStr(k), this.visit(this.getValue(k))]; - }), - ctx.indentDepth); - } else { - args = this.visit(keysAndValues); - } - ctx.indentDepth--; - if (ctx.type.template) { - return ctx.type.template.bind(this.getState())(args, ctx.indentDepth); - } - return this.visitChildren(ctx); - } - - generateArrayLiteral(ctx) { - const type = this.Types._array; - if (`emit${type.id}` in this) { - return this[`emit${type.id}`](ctx); - } - ctx.type = type; - ctx.indentDepth = this.findIndentDepth(ctx) + 1; - this.requiredImports[9] = true; - let args = ''; - const list = this.getList(ctx); - const visitedElements = list.map((child) => ( this.visit(child) )); - if (ctx.type.argsTemplate) { // NOTE: not currently being used anywhere. - args = visitedElements.map((arg, index) => { - const last = !visitedElements[index + 1]; - return ctx.type.argsTemplate.bind(this.getState())(arg, ctx.indentDepth, last); - }).join(''); - } else { - args = visitedElements.join(', '); - } - if (ctx.type.template) { - return ctx.type.template(args, ctx.indentDepth); - } - return this.visitChildren(ctx); - } - - /** - * Called from the process methods of numeric class constructors. - * We know there will be a single (sometimes optional) argument that is - * a number or string. - * - * Required because we want to pass the argument type to the template - * so that we can determine if the generated number needs to be parsed or - * casted. - * - * @param {ParserRuleContext} ctx - * @returns {String} - */ - generateNumericClass(ctx) { - const funcNameNode = this.getFunctionCallName(ctx); - const lhsStr = this.visit(funcNameNode); - let lhsType = this.findTypedNode(funcNameNode).type; - if (typeof lhsType === 'string') { - lhsType = this.Types[lhsType]; - } - ctx.type = lhsType.type; - if (`emit${lhsType.id}` in this) { - this[`emit${lhsType.id}`](ctx); - } - - // Get the original type of the argument - const expectedArgs = lhsType.args; - let args = this.checkArguments( - expectedArgs, this.getArguments(ctx), lhsType.id, lhsType.namedArgs - ); - let argType; - - if (args.length === 0) { - args = ['0']; - argType = this.Types._integer; - } else { - const argNode = this.getArgumentAt(ctx, 0); - const typed = this.findTypedNode(argNode); - argType = typed.originalType !== undefined ? - typed.originalType : - typed.type; - } - - return this.generateCall( - ctx, lhsType, [args[0], argType.id], lhsStr, `(${args.join(', ')})` - ); - } - - /** - * Same as generateCall but for type literals instead of function calls. - * - * @param {ParserRuleContext} ctx - The literal node - * @param {Object} lhsType - The type - * @param {Array} args - Arguments to the template - * @param {String} defaultT - The default if no template exists. - * @param {Boolean} skipNew - Optional: If true, never add new. - * - * @return {*} - */ - generateLiteral(ctx, lhsType, args, defaultT, skipNew) { - if (`emit${lhsType.id}` in this) { - return this[`emit${lhsType.id}`](ctx); - } - if (lhsType.template) { - const str = lhsType.template(...args); + + /** + * This helper function checks for an emit method then applies the templates + * if they exist for a function call node. Used primarily by process methods. + * + * @param {ParserRuleContext} ctx - The function call node + * @param {Object} lhsType - The type + * @param {Array} args - Arguments to the template + * @param {String} defaultT - The default name if no template exists. + * @param {String} defaultA - The default arguments if no argsTemplate exists. + * @param {Boolean} skipNew - Optional: If true, never add new. + * @param {Boolean} skipLhs - Optional: If true, don't add lhs to result. + * + * @return {*} + */ + generateCall(ctx, lhsType, args, defaultT, defaultA, skipNew, skipLhs) { + if (`emit${lhsType.id}` in this) { + return this[`emit${lhsType.id}`](ctx); + } + const lhsArg = lhsType.template ? lhsType.template() : defaultT; + const rhs = lhsType.argsTemplate + ? lhsType.argsTemplate.bind(this.getState())(lhsArg, ...args) + : defaultA; + const lhs = skipLhs ? '' : lhsArg; return this.Syntax.new.template - ? this.Syntax.new.template(str, skipNew, lhsType.code) - : str; - } - return defaultT; - } - - /** - * Helper method for generating literals. Called from the visit methods for - * literal nodes. - * - * @param {Object} setType - the type to set the literal to. - * @param {ParserRuleContext} ctx - the tree node. - * @return {*} - */ - leafHelper(setType, ctx) { - ctx.type = setType; - this.requiredImports[ctx.type.code] = true; - - // Pass the original argument type to the template, not the casted type. - const parentOriginalType = this.getParentOriginalType(ctx); - const type = parentOriginalType === null ? ctx.type : parentOriginalType; - - if (`process${ctx.type.id}` in this) { - return this[`process${ctx.type.id}`](ctx); - } - if (`emit${ctx.type.id}` in this) { - return this[`emit${ctx.type.id}`](ctx); - } - const children = ctx.getText(); - return this.generateLiteral(ctx, ctx.type, [children, type.id], children, true); - } - - findIndentDepth(ctx) { - while (ctx.indentDepth === undefined) { - ctx = ctx.parentCtx; - if (ctx === undefined || ctx === null) { - return -1; - } - } - return ctx.indentDepth; - } - - /** - * Process required for BSON regex types so we can validate the flags. - * - * @param {ParserRuleContext} ctx - * @param {Object} type - The type of the LHS - * @param {Object} symbolType - The type of the Symbol - * @return {*} - */ - generateBSONRegex(ctx, type, symbolType) { - if (`emit${type.id}` in this) { - return this[`emit${type.id}`](ctx); - } - ctx.type = type; - - const args = this.checkArguments( - symbolType.args, this.getArguments(ctx), type.id, symbolType.namedArgs - ); - - const expectedFlags = this.Syntax.bsonRegexFlags - ? this.Syntax.bsonRegexFlags - : { i: 'i', m: 'm', x: 'x', s: 's', l: 'l', u: 'u' }; - - let flags = null; - const pattern = args[0]; - if (args.length === 2) { - flags = args[1]; - for (let i = 1; i < flags.length - 1; i++) { - if (!(flags[i] in expectedFlags)) { - throw new BsonTranspilersRuntimeError( - `Invalid flag '${flags[i]}' passed to Regexp` - ); + ? this.Syntax.new.template(`${lhs}${rhs}`, skipNew, lhsType.code) + : `${lhs}${rhs}`; + } + + generateObjectLiteral(ctx) { + if (this.idiomatic && 'emitIdiomaticObjectLiteral' in this) { + return this.emitIdiomaticObjectLiteral(ctx); + } + const type = this.Types._object; + if (`emit${type.id}` in this) { + return this[`emit${type.id}`](ctx); + } + ctx.type = type; + this.requiredImports[10] = true; + ctx.indentDepth = this.findIndentDepth(ctx) + 1; + let args = ''; + const keysAndValues = this.getKeyValueList(ctx); + if (ctx.type.argsTemplate) { + args = ctx.type.argsTemplate.bind(this.getState())( + this.getKeyValueList(ctx).map((k) => { + return [this.getKeyStr(k), this.visit(this.getValue(k))]; + }), + ctx.indentDepth + ); + } else { + args = this.visit(keysAndValues); + } + ctx.indentDepth--; + if (ctx.type.template) { + return ctx.type.template.bind(this.getState())(args, ctx.indentDepth); + } + return this.visitChildren(ctx); + } + + generateArrayLiteral(ctx) { + const type = this.Types._array; + if (`emit${type.id}` in this) { + return this[`emit${type.id}`](ctx); + } + ctx.type = type; + ctx.indentDepth = this.findIndentDepth(ctx) + 1; + this.requiredImports[9] = true; + let args = ''; + const list = this.getList(ctx); + const visitedElements = list.map((child) => this.visit(child)); + if (ctx.type.argsTemplate) { + // NOTE: not currently being used anywhere. + args = visitedElements + .map((arg, index) => { + const last = !visitedElements[index + 1]; + return ctx.type.argsTemplate.bind(this.getState())( + arg, + ctx.indentDepth, + last + ); + }) + .join(''); + } else { + args = visitedElements.join(', '); + } + if (ctx.type.template) { + return ctx.type.template(args, ctx.indentDepth); + } + return this.visitChildren(ctx); + } + + /** + * Called from the process methods of numeric class constructors. + * We know there will be a single (sometimes optional) argument that is + * a number or string. + * + * Required because we want to pass the argument type to the template + * so that we can determine if the generated number needs to be parsed or + * casted. + * + * @param {ParserRuleContext} ctx + * @returns {String} + */ + generateNumericClass(ctx) { + const funcNameNode = this.getFunctionCallName(ctx); + const lhsStr = this.visit(funcNameNode); + let lhsType = this.findTypedNode(funcNameNode).type; + if (typeof lhsType === 'string') { + lhsType = this.Types[lhsType]; + } + ctx.type = lhsType.type; + if (`emit${lhsType.id}` in this) { + this[`emit${lhsType.id}`](ctx); + } + + // Get the original type of the argument + const expectedArgs = lhsType.args; + let args = this.checkArguments( + expectedArgs, + this.getArguments(ctx), + lhsType.id, + lhsType.namedArgs + ); + let argType; + + if (args.length === 0) { + args = ['0']; + argType = this.Types._integer; + } else { + const argNode = this.getArgumentAt(ctx, 0); + const typed = this.findTypedNode(argNode); + argType = + typed.originalType !== undefined ? typed.originalType : typed.type; + } + + return this.generateCall( + ctx, + lhsType, + [args[0], argType.id], + lhsStr, + `(${args.join(', ')})` + ); + } + + /** + * Same as generateCall but for type literals instead of function calls. + * + * @param {ParserRuleContext} ctx - The literal node + * @param {Object} lhsType - The type + * @param {Array} args - Arguments to the template + * @param {String} defaultT - The default if no template exists. + * @param {Boolean} skipNew - Optional: If true, never add new. + * + * @return {*} + */ + generateLiteral(ctx, lhsType, args, defaultT, skipNew) { + if (`emit${lhsType.id}` in this) { + return this[`emit${lhsType.id}`](ctx); + } + if (lhsType.template) { + const str = lhsType.template(...args); + return this.Syntax.new.template + ? this.Syntax.new.template(str, skipNew, lhsType.code) + : str; + } + return defaultT; + } + + /** + * Helper method for generating literals. Called from the visit methods for + * literal nodes. + * + * @param {Object} setType - the type to set the literal to. + * @param {ParserRuleContext} ctx - the tree node. + * @return {*} + */ + leafHelper(setType, ctx) { + ctx.type = setType; + this.requiredImports[ctx.type.code] = true; + + // Pass the original argument type to the template, not the casted type. + const parentOriginalType = this.getParentOriginalType(ctx); + const type = parentOriginalType === null ? ctx.type : parentOriginalType; + + if (`process${ctx.type.id}` in this) { + return this[`process${ctx.type.id}`](ctx); + } + if (`emit${ctx.type.id}` in this) { + return this[`emit${ctx.type.id}`](ctx); + } + const children = ctx.getText(); + return this.generateLiteral( + ctx, + ctx.type, + [children, type.id], + children, + true + ); + } + + findIndentDepth(ctx) { + while (ctx.indentDepth === undefined) { + ctx = ctx.parentCtx; + if (ctx === undefined || ctx === null) { + return -1; } } - flags = flags.replace(/[imxlsu]/g, m => expectedFlags[m]); - } - - return this.generateCall( - ctx, symbolType, [pattern, flags], 'Regex', - `(${pattern}${flags ? ', ' + flags : ''})` - ); - } - - /** - * Code is processed in every language because want to generate the scope as - * a non-idiomatic document. - * - * @param {ParserRuleContext} ctx - * @param {Object} type - The type of the LHS - * @param {Object} symbolType - The type of the Symbol - * @param {boolean} requireString - if the code argument must be a string. - * @return {*} - */ - generateBSONCode(ctx, type, symbolType, requireString) { - if (`emit${type.id}` in this) { - return this[`emit${type.id}`](ctx); - } - ctx.type = type; - const argList = this.getArguments(ctx); - if (!(argList.length === 1 || argList.length === 2)) { - throw new BsonTranspilersArgumentError( - 'Argument count mismatch: Code requires one or two arguments' + return ctx.indentDepth; + } + + /** + * Process required for BSON regex types so we can validate the flags. + * + * @param {ParserRuleContext} ctx + * @param {Object} type - The type of the LHS + * @param {Object} symbolType - The type of the Symbol + * @return {*} + */ + generateBSONRegex(ctx, type, symbolType) { + if (`emit${type.id}` in this) { + return this[`emit${type.id}`](ctx); + } + ctx.type = type; + + const args = this.checkArguments( + symbolType.args, + this.getArguments(ctx), + type.id, + symbolType.namedArgs + ); + + const expectedFlags = this.Syntax.bsonRegexFlags + ? this.Syntax.bsonRegexFlags + : { i: 'i', m: 'm', x: 'x', s: 's', l: 'l', u: 'u' }; + + let flags = null; + const pattern = args[0]; + if (args.length === 2) { + flags = args[1]; + for (let i = 1; i < flags.length - 1; i++) { + if (!(flags[i] in expectedFlags)) { + throw new BsonTranspilersRuntimeError( + `Invalid flag '${flags[i]}' passed to Regexp` + ); + } + } + flags = flags.replace(/[imxlsu]/g, (m) => expectedFlags[m]); + } + + return this.generateCall( + ctx, + symbolType, + [pattern, flags], + 'Regex', + `(${pattern}${flags ? ', ' + flags : ''})` ); } - let code = ''; - if (requireString) { - const arg = this.getArgumentAt(ctx, 0); - code = this.visit(arg); - if (this.findTypedNode(arg).type !== this.Types._string) { + + /** + * Code is processed in every language because want to generate the scope as + * a non-idiomatic document. + * + * @param {ParserRuleContext} ctx + * @param {Object} type - The type of the LHS + * @param {Object} symbolType - The type of the Symbol + * @param {boolean} requireString - if the code argument must be a string. + * @return {*} + */ + generateBSONCode(ctx, type, symbolType, requireString) { + if (`emit${type.id}` in this) { + return this[`emit${type.id}`](ctx); + } + ctx.type = type; + const argList = this.getArguments(ctx); + if (!(argList.length === 1 || argList.length === 2)) { throw new BsonTranspilersArgumentError( - 'Argument type mismatch: Code requires first argument to be a string' + 'Argument count mismatch: Code requires one or two arguments' + ); + } + let code = ''; + if (requireString) { + const arg = this.getArgumentAt(ctx, 0); + code = this.visit(arg); + if (this.findTypedNode(arg).type !== this.Types._string) { + throw new BsonTranspilersArgumentError( + 'Argument type mismatch: Code requires first argument to be a string' + ); + } + } else { + code = removeQuotes(this.getArgumentAt(ctx, 0).getText()); + } + let scope = undefined; + let scopestr = ''; + + if (argList.length === 2) { + const idiomatic = this.idiomatic; + this.idiomatic = false; + const compareTo = this.checkNamedArgs( + [this.Types._object], + this.getArgumentAt(ctx, 1), + symbolType.namedArgs ); + scope = this.castType(...compareTo); + if (scope === null) { + throw new BsonTranspilersArgumentError( + "Code expects argument 'scope' to be object" + ); + } + this.idiomatic = idiomatic; + scopestr = `, ${scope}`; + this.requiredImports[113] = true; + this.requiredImports[10] = true; } - } else { - code = removeQuotes(this.getArgumentAt(ctx, 0).getText()); + return this.generateCall( + ctx, + symbolType, + [code, scope], + 'Code', + `(${code}${scopestr})` + ); } - let scope = undefined; - let scopestr = ''; - if (argList.length === 2) { - const idiomatic = this.idiomatic; - this.idiomatic = false; - const compareTo = this.checkNamedArgs( - [this.Types._object], this.getArgumentAt(ctx, 1), symbolType.namedArgs + /** + * Gets a process method because need to tell the template if + * the argument is a number or a date. + * + * @param {ParserRuleContext} ctx + * @returns {String} - generated code + */ + generateObjectIdFromTime(ctx) { + const funcNameNode = this.getFunctionCallName(ctx); + const lhsStr = this.visit(funcNameNode); + let lhsType = this.findTypedNode(funcNameNode).type; + if (typeof lhsType === 'string') { + lhsType = this.Types[lhsType]; + } + + const args = this.checkArguments( + lhsType.args, + this.getArguments(ctx), + lhsType.id, + lhsType.namedArgs ); - scope = this.castType(...compareTo); - if (scope === null) { - throw new BsonTranspilersArgumentError( - 'Code expects argument \'scope\' to be object' - ); + const isNumber = + this.findTypedNode(this.getArgumentAt(ctx, 0)).type.code !== 200; + return this.generateCall( + ctx, + lhsType, + [args[0], isNumber], + lhsStr, + `(${args.join(', ')})`, + true + ); + } + + generateFuncDefExpression() { + throw new BsonTranspilersUnimplementedError( + 'Support for exporting functions to languages other than javascript is not yet available.' + ); + } + + /** + * Overrides the ANTLR visitChildren method so that options can be set. + * + * @param {ParserRuleContext} ctx + * @param {Object} options: + * start - child index to start iterating at. + * end - child index to end iterating after. + * step - how many children to increment each step, 1 visits all children. + * separator - a string separator to go between generated children. + * ignore - an array of child indexes to skip. + * children - the set of children to visit. + * @returns {String} + */ + visitChildren(ctx, options) { + const opts = { + start: 0, + step: 1, + separator: '', + ignore: [], + children: ctx.children, + }; + Object.assign(opts, options ? options : {}); + opts.end = 'end' in opts ? opts.end : opts.children.length - 1; + + let code = ''; + for (let i = opts.start; i <= opts.end; i += opts.step) { + if (opts.ignore.indexOf(i) === -1) { + code = `${code}${this.visit(opts.children[i])}${ + i === opts.end ? '' : opts.separator + }`; + } } - this.idiomatic = idiomatic; - scopestr = `, ${scope}`; - this.requiredImports[113] = true; - this.requiredImports[10] = true; + return code; + } + + /** + * Visit a end-of-file symbol. Universal for all grammars. + * * + * @returns {String} + */ + visitEof() { + if (this.Syntax.eof.template) { + return this.Syntax.eof.template(); + } + return ''; + } + + /** + * Visit a end-of-line symbol. Universal for all grammars. + * * + * @returns {String} + */ + visitEos() { + if (this.Syntax.eos.template) { + return this.Syntax.eos.template(); + } + return '\n'; + } + + /** + * Visit a leaf node and return a string. Universal for all grammars. + * * + * @param {ParserRuleContext} ctx + * @returns {String} + */ + visitTerminal(ctx) { + return ctx.getText(); } - return this.generateCall( - ctx, symbolType, [code, scope], 'Code', `(${code}${scopestr})` - ); - } - - /** - * Gets a process method because need to tell the template if - * the argument is a number or a date. - * - * @param {ParserRuleContext} ctx - * @returns {String} - generated code - */ - generateObjectIdFromTime(ctx) { - const funcNameNode = this.getFunctionCallName(ctx); - const lhsStr = this.visit(funcNameNode); - let lhsType = this.findTypedNode(funcNameNode).type; - if (typeof lhsType === 'string') { - lhsType = this.Types[lhsType]; - } - - const args = this.checkArguments( - lhsType.args, this.getArguments(ctx), lhsType.id, lhsType.namedArgs - ); - const isNumber = this.findTypedNode( - this.getArgumentAt(ctx, 0)).type.code !== 200; - return this.generateCall( - ctx, lhsType, [args[0], isNumber], lhsStr, `(${args.join(', ')})`, true - ); - } - - generateFuncDefExpression() { - throw new BsonTranspilersUnimplementedError( - 'Support for exporting functions to languages other than javascript is not yet available.' - ); - } - - /** - * Overrides the ANTLR visitChildren method so that options can be set. - * - * @param {ParserRuleContext} ctx - * @param {Object} options: - * start - child index to start iterating at. - * end - child index to end iterating after. - * step - how many children to increment each step, 1 visits all children. - * separator - a string separator to go between generated children. - * ignore - an array of child indexes to skip. - * children - the set of children to visit. - * @returns {String} - */ - visitChildren(ctx, options) { - const opts = { - start: 0, step: 1, separator: '', ignore: [], children: ctx.children - }; - Object.assign(opts, options ? options : {}); - opts.end = ('end' in opts) ? opts.end : opts.children.length - 1; - - let code = ''; - for (let i = opts.start; i <= opts.end; i += opts.step) { - if (opts.ignore.indexOf(i) === -1) { - code = `${code}${this.visit( - opts.children[i] - )}${(i === opts.end) ? '' : opts.separator}`; - } - } - return code; - } - - /** - * Visit a end-of-file symbol. Universal for all grammars. - * * - * @returns {String} - */ - visitEof() { - if (this.Syntax.eof.template) { - return this.Syntax.eof.template(); - } - return ''; - } - - /** - * Visit a end-of-line symbol. Universal for all grammars. - * * - * @returns {String} - */ - visitEos() { - if (this.Syntax.eos.template) { - return this.Syntax.eos.template(); - } - return '\n'; - } - - /** - * Visit a leaf node and return a string. Universal for all grammars. - * * - * @param {ParserRuleContext} ctx - * @returns {String} - */ - visitTerminal(ctx) { - return ctx.getText(); - } -}; + }; diff --git a/packages/bson-transpilers/codegeneration/DeclarationStore.js b/packages/bson-transpilers/codegeneration/DeclarationStore.js index 5d9b373ab83..e0782ea6c20 100644 --- a/packages/bson-transpilers/codegeneration/DeclarationStore.js +++ b/packages/bson-transpilers/codegeneration/DeclarationStore.js @@ -43,7 +43,9 @@ class DeclarationStore { alreadyDeclared(templateID, varRoot, declaration) { const existing = this.candidates(templateID, varRoot); for (var i = 0; i < existing.length; i++) { - const candidate = `${this.varTemplateRoot(templateID, varRoot)}${i > 0 ? i : ''}`; + const candidate = `${this.varTemplateRoot(templateID, varRoot)}${ + i > 0 ? i : '' + }`; const current = this.vars[declaration(candidate)]; if (current !== undefined) { return current; @@ -53,7 +55,9 @@ class DeclarationStore { candidates(templateID, varRoot) { const varTemplateRoot = this.varTemplateRoot(templateID, varRoot); - return Object.values(this.vars).filter(varName => varName.startsWith(varTemplateRoot)); + return Object.values(this.vars).filter((varName) => + varName.startsWith(varTemplateRoot) + ); } clear() { diff --git a/packages/bson-transpilers/codegeneration/ErrorListener.js b/packages/bson-transpilers/codegeneration/ErrorListener.js index cd1be0a1fc1..511ab8bf02a 100644 --- a/packages/bson-transpilers/codegeneration/ErrorListener.js +++ b/packages/bson-transpilers/codegeneration/ErrorListener.js @@ -20,7 +20,12 @@ class ErrorListener extends antlr4.error.ErrorListener { * @param {string} payload - Stack trace */ syntaxError(recognizer, symbol, line, column, message, payload) { - throw new BsonTranspilersSyntaxError(message, { symbol, line, column, payload }); + throw new BsonTranspilersSyntaxError(message, { + symbol, + line, + column, + payload, + }); } } diff --git a/packages/bson-transpilers/codegeneration/csharp/Generator.js b/packages/bson-transpilers/codegeneration/csharp/Generator.js index 3912173e440..fb7b8c510b1 100644 --- a/packages/bson-transpilers/codegeneration/csharp/Generator.js +++ b/packages/bson-transpilers/codegeneration/csharp/Generator.js @@ -2,8 +2,9 @@ /* * Class for handling edge cases for csharp code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/go/Generator.js b/packages/bson-transpilers/codegeneration/go/Generator.js index 50258b54754..01d6ebad10e 100644 --- a/packages/bson-transpilers/codegeneration/go/Generator.js +++ b/packages/bson-transpilers/codegeneration/go/Generator.js @@ -2,6 +2,9 @@ /* * Class for handling edge cases for Go code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { super(); } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/java/Generator.js b/packages/bson-transpilers/codegeneration/java/Generator.js index be2ad4b56fa..b6d66165bed 100644 --- a/packages/bson-transpilers/codegeneration/java/Generator.js +++ b/packages/bson-transpilers/codegeneration/java/Generator.js @@ -1,844 +1,983 @@ 'use strict'; /* eslint complexity: 0 */ -const {doubleQuoteStringify, removeQuotes} = require('../../helper/format'); +const { doubleQuoteStringify, removeQuotes } = require('../../helper/format'); const { BsonTranspilersRuntimeError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('../../helper/error'); /* * Class for handling edge cases for java code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - // Operations that take the field name as an argument - this.field_opts = [ - 'gt', 'lt', 'lte', 'gte', 'eq', 'ne', 'nin', 'in', 'not', 'exists', - 'type', 'all', 'size', 'elemMatch', 'mod', 'regex', - 'sum', 'avg', 'first', 'last', 'max', 'min', 'push', 'addToSet', - 'stdDevSamp', 'stdDevPop', - 'bitsAllSet', 'bitsAllClear', 'bitsAnySet', 'bitsAnyClear', - 'geoWithin', 'geoIntersects', 'near', 'nearSphere' - ]; - // Operations that convert by {$op: value} => op(value) - this.opts = [ - 'match', 'skip', 'limit', 'out', 'sortByCount', 'count', 'or', 'nor', - 'and' - ]; - // Operations split by their import class - this.builderImports = [ - // Filter ops - [ - 'all', 'and', 'bitsAllClear', 'bitsAllSet', 'bitsAnyClear', 'bitsAnySet', - 'elemMatch', 'eq', 'exists', 'expr', 'geoIntersects', 'geoWithin', - 'geoWithinBox', 'geoWithinCenter', 'geoWithinCenterSphere', 'geoWithinPolygon', - 'gt', 'gte', 'in', 'lt', 'lte', 'mod', 'ne', 'near', 'nearSphere', 'nin', - 'nor', 'not', 'or', 'regex', 'size', 'text', 'type', 'where', 'options' - ], - // Agg ops - [ - 'addFields', 'bucket', 'bucketAuto', 'count', 'facet', 'graphLookup', - 'group', 'limit', 'lookup', 'match', 'out', 'project', 'replaceRoot', - 'sample', 'skip', 'sort', 'sortByCount', 'unwind' - ], - // Accumulator ops - [ - 'addToSet', 'avg', 'first', 'last', 'max', 'min', 'push', - 'stdDevPop', 'stdDevSamp', 'sum' - ] - ].reduce((obj, list, index) => { - list.forEach((op) => { - obj[op] = index + 300; - }); - return obj; - }, {}); - } - - /** The rest of the functions in this file are for generating builders **/ - - /** - * Emit an "idiomatic" filter or aggregation, meaning use the builders - * instead of a regular object if possible. - * - * @param {ObjectLiteralContext} ctx - * @return {String} - */ - emitIdiomaticObjectLiteral(ctx) { - ctx.type = this.Types._object; - ctx.indentDepth = this.findIndentDepth(ctx) + 1; - let multiOps = false; - let args = ''; - const properties = this.getKeyValueList(ctx); - if (properties.length) { - args = properties.map((pair) => { - const field = this.getKeyStr(pair); - const value = this.getValue(pair); - if (field.startsWith('$')) { - const op = field.substr(1); - if (this.builderImports[op]) { - this.requiredImports[this.builderImports[op]].push(op); - } - if (op === 'regex') { - multiOps = true; - } - if (`handle${op}` in this) { - return this[`handle${op}`](this.getObjectChild(value), op, ctx); - } - if (this.field_opts.indexOf(op) !== -1) { - // Assert that this isn't the top-level object - if (!this.isSubObject(ctx)) { - throw new BsonTranspilersRuntimeError(`$${op} cannot be top-level`); +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + // Operations that take the field name as an argument + this.field_opts = [ + 'gt', + 'lt', + 'lte', + 'gte', + 'eq', + 'ne', + 'nin', + 'in', + 'not', + 'exists', + 'type', + 'all', + 'size', + 'elemMatch', + 'mod', + 'regex', + 'sum', + 'avg', + 'first', + 'last', + 'max', + 'min', + 'push', + 'addToSet', + 'stdDevSamp', + 'stdDevPop', + 'bitsAllSet', + 'bitsAllClear', + 'bitsAnySet', + 'bitsAnyClear', + 'geoWithin', + 'geoIntersects', + 'near', + 'nearSphere', + ]; + // Operations that convert by {$op: value} => op(value) + this.opts = [ + 'match', + 'skip', + 'limit', + 'out', + 'sortByCount', + 'count', + 'or', + 'nor', + 'and', + ]; + // Operations split by their import class + this.builderImports = [ + // Filter ops + [ + 'all', + 'and', + 'bitsAllClear', + 'bitsAllSet', + 'bitsAnyClear', + 'bitsAnySet', + 'elemMatch', + 'eq', + 'exists', + 'expr', + 'geoIntersects', + 'geoWithin', + 'geoWithinBox', + 'geoWithinCenter', + 'geoWithinCenterSphere', + 'geoWithinPolygon', + 'gt', + 'gte', + 'in', + 'lt', + 'lte', + 'mod', + 'ne', + 'near', + 'nearSphere', + 'nin', + 'nor', + 'not', + 'or', + 'regex', + 'size', + 'text', + 'type', + 'where', + 'options', + ], + // Agg ops + [ + 'addFields', + 'bucket', + 'bucketAuto', + 'count', + 'facet', + 'graphLookup', + 'group', + 'limit', + 'lookup', + 'match', + 'out', + 'project', + 'replaceRoot', + 'sample', + 'skip', + 'sort', + 'sortByCount', + 'unwind', + ], + // Accumulator ops + [ + 'addToSet', + 'avg', + 'first', + 'last', + 'max', + 'min', + 'push', + 'stdDevPop', + 'stdDevSamp', + 'sum', + ], + ].reduce((obj, list, index) => { + list.forEach((op) => { + obj[op] = index + 300; + }); + return obj; + }, {}); + } + + /** The rest of the functions in this file are for generating builders **/ + + /** + * Emit an "idiomatic" filter or aggregation, meaning use the builders + * instead of a regular object if possible. + * + * @param {ObjectLiteralContext} ctx + * @return {String} + */ + emitIdiomaticObjectLiteral(ctx) { + ctx.type = this.Types._object; + ctx.indentDepth = this.findIndentDepth(ctx) + 1; + let multiOps = false; + let args = ''; + const properties = this.getKeyValueList(ctx); + if (properties.length) { + args = properties.map((pair) => { + const field = this.getKeyStr(pair); + const value = this.getValue(pair); + if (field.startsWith('$')) { + const op = field.substr(1); + if (this.builderImports[op]) { + this.requiredImports[this.builderImports[op]].push(op); + } + if (op === 'regex') { + multiOps = true; + } + if (`handle${op}` in this) { + return this[`handle${op}`](this.getObjectChild(value), op, ctx); + } + if (this.field_opts.indexOf(op) !== -1) { + // Assert that this isn't the top-level object + if (!this.isSubObject(ctx)) { + throw new BsonTranspilersRuntimeError( + `$${op} cannot be top-level` + ); + } + return this.handleFieldOp(value, op, ctx); + } + if (this.opts.indexOf(op) !== -1) { + return `${field.substr(1)}(${this.visit(value)})`; } - return this.handleFieldOp(value, op, ctx); } - if (this.opts.indexOf(op) !== -1) { - return `${field.substr(1)}(${this.visit(value)})`; + const valueStr = this.visit(value); + // $-op filters need to rewind a level + const child = this.getObjectChild(value); + if (this.isFilter(child)) { + return valueStr; } + this.requiredImports[300].push('eq'); + return `eq(${doubleQuoteStringify(field)}, ${valueStr})`; + }); + if (args.length > 1 && !multiOps) { + this.requiredImports[300].push('and'); + return `and(${args.join(', ')})`; + } + return args[0]; + } + this.requiredImports[10] = true; + return 'new Document()'; + } + + /** + * Generates idiomatic java for a $-operator that takes the field name + * as the first argument. i.e. { field: { $op: value } } => op(field, value) + * + * @param {ObjectLiteralContext} ctx - The field of the $-op + * @param {String} op - The $-op + * @param {ObjectLiteralContext} parent - The parent object's ctx + * @returns {String} + */ + handleFieldOp(ctx, op, parent) { + const parentField = this.getParentKeyStr(parent); + return `${op}(${doubleQuoteStringify(parentField)}, ${this.visit(ctx)})`; + } + + /** + * Determines if an object has a subfield that is a $-op. + * + * @param {ObjectLiteralContext} ctx - The field of the $-op + * @return {Boolean} + */ + isFilter(ctx) { + const properties = this.getKeyValueList(ctx); + for (let i = 0; i < properties.length; i++) { + const pair = properties[i]; + const field = this.getKeyStr(pair); + if (this.field_opts.indexOf(field.substr(1)) !== -1) { + return true; } - const valueStr = this.visit(value); - // $-op filters need to rewind a level - const child = this.getObjectChild(value); - if (this.isFilter(child)) { - return valueStr; + } + return false; + } + + /** + * Generates idiomatic java for a $-operator that requires a document that has + * a single subfield whose value gets set to the builder argument. + * { $op: { $subfield: value } } => op(value) + * + * @param {ObjectLiteralContext} ctx - The field of the $-op + * @param {String} op - The name of the $-op. + * @param {String} subfield - The name of the subfield to require. + * @param {Boolean} idiomatic - If the value should be generated as idiomatic. + * @return {String} + */ + handleSingleSubfield(ctx, op, subfield, idiomatic) { + const properties = this.assertIsNonemptyObject(ctx, op); + let value = ''; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + if (field === subfield) { + this.idiomatic = idiomatic; + value = this.visit(this.getValue(pair)); + this.idiomatic = true; + } else { + throw new BsonTranspilersRuntimeError( + `Unrecognized option to $${op}: ${field}` + ); } - this.requiredImports[300].push('eq'); - return `eq(${doubleQuoteStringify(field)}, ${valueStr})`; }); - if (args.length > 1 && !multiOps) { - this.requiredImports[300].push('and'); - return `and(${args.join(', ')})`; + if (value === '') { + throw new BsonTranspilersRuntimeError( + `Missing option '${subfield}' in $${op}` + ); } - return args[0]; - } - this.requiredImports[10] = true; - return 'new Document()'; - } - - /** - * Generates idiomatic java for a $-operator that takes the field name - * as the first argument. i.e. { field: { $op: value } } => op(field, value) - * - * @param {ObjectLiteralContext} ctx - The field of the $-op - * @param {String} op - The $-op - * @param {ObjectLiteralContext} parent - The parent object's ctx - * @returns {String} - */ - handleFieldOp(ctx, op, parent) { - const parentField = this.getParentKeyStr(parent); - return `${op}(${doubleQuoteStringify(parentField)}, ${this.visit(ctx)})`; - } - - /** - * Determines if an object has a subfield that is a $-op. - * - * @param {ObjectLiteralContext} ctx - The field of the $-op - * @return {Boolean} - */ - isFilter(ctx) { - const properties = this.getKeyValueList(ctx); - for (let i = 0; i < properties.length; i++) { - const pair = properties[i]; - const field = this.getKeyStr(pair); - if (this.field_opts.indexOf(field.substr(1)) !== -1) { - return true; + return `${op}(${value})`; + } + + /** + * Generates idiomatic java for a $-operator that has some required options + * and some options that get rolled into an Options object. + * + * { $op: { required: reqVal, optional: optionalVal } => + * op(reqVal, new Options.optional()) + * + * @param {ObjectLiteralContext} ctx - The field of the $-op + * @param {String} op - The name of the $-op. + * @param {Array} reqOpts - The list of required options. + * @param {Array} optionalOpts - The list of optional options. + * @param {Object} transforms - An mapping of original name to transformed + * name. Includes both optional options and the Options object. + * @return {string} + */ + handleOptionsObject(ctx, op, reqOpts, optionalOpts, transforms) { + const properties = this.assertIsNonemptyObject(ctx, op); + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + if ( + reqOpts.indexOf(field) !== -1 || + optionalOpts.indexOf(field) !== -1 + ) { + fields[field] = this.visit(this.getValue(pair)); + } else { + throw new BsonTranspilersRuntimeError( + `Unrecognized option to $${op}: ${field}` + ); + } + }); + reqOpts.map((f) => { + if (!(f in fields)) { + throw new BsonTranspilersRuntimeError( + `Missing option '${f}' in $${op}` + ); + } + }); + + let options = ''; + if (Object.keys(fields).length > reqOpts.length) { + this.requiredImports[306].push(transforms[op]); + + options = `, new ${transforms[op]}()${Object.keys(fields) + .filter((f) => { + return optionalOpts.indexOf(f) !== -1; + }) + .map((k) => { + if (transforms !== undefined && k in transforms) { + return transforms[k](fields[k]); + } + return `.${k}(${fields[k]})`; + }) + .join('')}`; } + + return `${op}(${reqOpts + .map((f) => { + return fields[f]; + }) + .join(', ')}${options})`; } - return false; - } - - /** - * Generates idiomatic java for a $-operator that requires a document that has - * a single subfield whose value gets set to the builder argument. - * { $op: { $subfield: value } } => op(value) - * - * @param {ObjectLiteralContext} ctx - The field of the $-op - * @param {String} op - The name of the $-op. - * @param {String} subfield - The name of the subfield to require. - * @param {Boolean} idiomatic - If the value should be generated as idiomatic. - * @return {String} - */ - handleSingleSubfield(ctx, op, subfield, idiomatic) { - const properties = this.assertIsNonemptyObject(ctx, op); - let value = ''; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - if (field === subfield) { - this.idiomatic = idiomatic; - value = this.visit(this.getValue(pair)); - this.idiomatic = true; - } else { + + /** + * Generates idiomatic java for a $-operator that has some required options + * and then multiple arbitrary fields. + * + * { $op: { required: reqVal, opt1: v1, opt2: v2...} } => op(reqVal, v1, v2...) + * @param {ObjectLiteralContext} ctx - The field of the $-op + * @param {String} op - The name of the $-op. + * @param {Array} reqOpts - The list of required options. + * @param {Function} transform - A function that takes in the option name and + * the value, then returns a string with the correct formatting. + * @param {Boolean} idiomatic - If the value should be generated as idiomatic. + * @return {string} + */ + handleMultipleSubfields(ctx, op, reqOpts, transform, idiomatic) { + const properties = this.assertIsNonemptyObject(ctx, op); + const req = []; + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + if (reqOpts.indexOf(field) !== -1) { + req.push(this.visit(this.getValue(pair))); + } else { + this.idiomatic = idiomatic; + fields[field] = this.visit(this.getValue(pair)); + this.idiomatic = true; + } + }); + if (req.length !== reqOpts.length) { throw new BsonTranspilersRuntimeError( - `Unrecognized option to $${op}: ${field}` + `Required option missing from ${op}` ); } - }); - if (value === '') { - throw new BsonTranspilersRuntimeError( - `Missing option '${subfield}' in $${op}` + + const args = req.concat( + Object.keys(fields).map((f) => { + return transform(f, fields[f]); + }) ); + return `${op}(${args.join(', ')})`; } - return `${op}(${value})`; - } - - /** - * Generates idiomatic java for a $-operator that has some required options - * and some options that get rolled into an Options object. - * - * { $op: { required: reqVal, optional: optionalVal } => - * op(reqVal, new Options.optional()) - * - * @param {ObjectLiteralContext} ctx - The field of the $-op - * @param {String} op - The name of the $-op. - * @param {Array} reqOpts - The list of required options. - * @param {Array} optionalOpts - The list of optional options. - * @param {Object} transforms - An mapping of original name to transformed - * name. Includes both optional options and the Options object. - * @return {string} - */ - handleOptionsObject(ctx, op, reqOpts, optionalOpts, transforms) { - const properties = this.assertIsNonemptyObject(ctx, op); - const fields = {}; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - if (reqOpts.indexOf(field) !== -1 || optionalOpts.indexOf(field) !== -1) { - fields[field] = this.visit(this.getValue(pair)); + + /** + * Method for handling an idiomatic $project. + * ctx must be a non-empty document. + * + * @param {ObjectLiteralContext} ctx + * @return {String} + */ + handleproject(ctx) { + // Eventual todo: slice and elemMatch + const properties = this.assertIsNonemptyObject(ctx, 'project'); + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + const original = this.getValue(pair).getText(); + if (original.toLowerCase() === 'true' || original === '1') { + if (field !== '_id') { + // Skip because ID is included by default + fields.includes = !fields.includes + ? `include(${doubleQuoteStringify(field)}` + : `${fields.includes}, ${doubleQuoteStringify(field)}`; + this.requiredImports[303].push('include'); + } + } else if (original.toLowerCase() === 'false' || original === '0') { + if (field !== '_id') { + fields.excludes = !fields.excludes + ? `exclude(${doubleQuoteStringify(field)}` + : `${fields.excludes}, ${doubleQuoteStringify(field)}`; + this.requiredImports[303].push('exclude'); + } else { + fields.excludeId = 'excludeId()'; + this.requiredImports[303].push('excludeId'); + } + } else { + const value = this.visit(this.getValue(pair)); + fields.computed = !fields.computed + ? `computed(${doubleQuoteStringify(field)}, ${value})` + : `${fields.computed}, computed(${doubleQuoteStringify( + field + )}, ${value})`; + this.requiredImports[303].push('computed'); + } + }); + + if (fields.includes) { + fields.includes = `${fields.includes})`; + } + if (fields.excludes) { + fields.excludes = `${fields.excludes})`; + } + const elements = Object.values(fields); + let projectStr; + if (elements.length === 1) { + projectStr = elements[0]; } else { + projectStr = `fields(${elements.join(', ')})`; + this.requiredImports[303].push('fields'); + } + return `project(${projectStr})`; + } + + /** + * Method for handling an idiomatic $not. + * + * { field: { $not: {$op: value} } } => not(op(field, value)) + * + * ctx must be a non-empty document. + * + * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the + * $not field + * @param {String} op - the operation, which in this case is "not" + * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. + * @return {String} + */ + handlenot(ctx, op, parent) { + const properties = this.assertIsNonemptyObject(ctx, op); + const val = this.getValue(properties[0]); + const innerop = this.getKeyStr(properties[0]).substr(1); + this.requiredImports[300].push(innerop); + const inner = this.handleFieldOp(val, innerop, parent); + return `${op}(${inner})`; + } + + /** + * Method for handling an idiomatic $mod. + * + * { field: { $mod: [arr1, arr2] } } => mod(field, arr1, arr2) + * + * ctx must be an array of length 2. + * + * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the + * $mod field + * @param {String} op - the operation, which in this case is "mod" + * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. + * @return {String} + */ + handlemod(ctx, op, parent) { + const list = this.getList(ctx); + if (list.length !== 2) { throw new BsonTranspilersRuntimeError( - `Unrecognized option to $${op}: ${field}` + '$mod requires an array of 2-elements' ); } - }); - reqOpts.map((f) => { - if (!(f in fields)) { - throw new BsonTranspilersRuntimeError(`Missing option '${f}' in $${op}`); - } - }); - - let options = ''; - if (Object.keys(fields).length > reqOpts.length) { - this.requiredImports[306].push(transforms[op]); + const parentField = this.getParentKeyStr(parent); + const inner = list.map((f) => { + return this.visit(f); + }); + return `${op}(${doubleQuoteStringify(parentField)}, ${inner.join(', ')})`; + } - options = `, new ${transforms[op]}()${Object.keys(fields).filter((f) => { - return optionalOpts.indexOf(f) !== -1; - }).map((k) => { - if (transforms !== undefined && k in transforms) { - return transforms[k](fields[k]); + /** + * Method for handling an idiomatic $regex. + * + * { field: { $regex: regexstr, $options?: optsstr } } => + * regex(regexstr, optsstr?) + * + * ctx must be a string + * + * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the + * $regex field + * @param {String} op - the operation, which in this case is "regex" + * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. + * @return {String} + */ + handleregex(ctx, op, parent) { + const parentField = this.getParentKeyStr(parent); + const regex = { r: '', o: '' }; + + const properties = this.getKeyValueList(parent); + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + if (field === '$regex') { + regex.r = this.visit(this.getValue(pair)); + } + if (field === '$options') { + regex.o = `, ${this.visit(this.getValue(pair))}`; } - return `.${k}(${fields[k]})`; - }).join('')}`; - } - - return `${op}(${reqOpts.map((f) => { - return fields[f]; - }).join(', ')}${options})`; - } - - /** - * Generates idiomatic java for a $-operator that has some required options - * and then multiple arbitrary fields. - * - * { $op: { required: reqVal, opt1: v1, opt2: v2...} } => op(reqVal, v1, v2...) - * @param {ObjectLiteralContext} ctx - The field of the $-op - * @param {String} op - The name of the $-op. - * @param {Array} reqOpts - The list of required options. - * @param {Function} transform - A function that takes in the option name and - * the value, then returns a string with the correct formatting. - * @param {Boolean} idiomatic - If the value should be generated as idiomatic. - * @return {string} - */ - handleMultipleSubfields(ctx, op, reqOpts, transform, idiomatic) { - const properties = this.assertIsNonemptyObject(ctx, op); - const req = []; - const fields = {}; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - if (reqOpts.indexOf(field) !== -1) { - req.push(this.visit(this.getValue(pair))); + }); + return `${op}(${doubleQuoteStringify(parentField)}, ${regex.r}${ + regex.o + })`; + } + handleoptions() { + return ''; + } + + /** + * Method for handling an idiomatic $where. + * + * { $where: } => where() + * + * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the + * $where field + * @return {String} + */ + handlewhere(ctx) { + let text; + if (!('getParent' in ctx)) { + text = ctx.getText(); } else { - this.idiomatic = idiomatic; - fields[field] = this.visit(this.getValue(pair)); - this.idiomatic = true; + text = ctx.getParent().getText(); } - }); - if (req.length !== reqOpts.length) { - throw new BsonTranspilersRuntimeError( - `Required option missing from ${op}` - ); + return `where(${doubleQuoteStringify(text)})`; } - const args = req.concat(Object.keys(fields).map((f) => { - return transform(f, fields[f]); - })); - return `${op}(${args.join(', ')})`; - } - - /** - * Method for handling an idiomatic $project. - * ctx must be a non-empty document. - * - * @param {ObjectLiteralContext} ctx - * @return {String} - */ - handleproject(ctx) { - // Eventual todo: slice and elemMatch - const properties = this.assertIsNonemptyObject(ctx, 'project'); - const fields = {}; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - const original = this.getValue(pair).getText(); - if (original.toLowerCase() === 'true' || original === '1') { - if (field !== '_id') { - // Skip because ID is included by default - fields.includes = !fields.includes ? - `include(${doubleQuoteStringify(field)}` : - `${fields.includes}, ${doubleQuoteStringify(field)}`; - this.requiredImports[303].push('include'); - } - } else if (original.toLowerCase() === 'false' || original === '0') { - if (field !== '_id') { - fields.excludes = !fields.excludes ? - `exclude(${doubleQuoteStringify(field)}` : - `${fields.excludes}, ${doubleQuoteStringify(field)}`; - this.requiredImports[303].push('exclude'); + /** + * Method for handling an idiomatic $sort. + * + * { $sort: { f1: 1, f2: -1, f3: { $meta: 'textScore' } } } => + * sort(ascending(f1), descending(f2), metaTextScore(f3)) + * + * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the + * @return {string} + */ + handlesort(ctx) { + const properties = this.assertIsNonemptyObject(ctx, 'sort'); + const fields = []; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + const original = this.getValue(pair).getText(); + if (original === '1') { + fields.push(`ascending(${doubleQuoteStringify(field)})`); + this.requiredImports[304].push('ascending'); + } else if (original === '-1') { + fields.push(`descending(${doubleQuoteStringify(field)})`); + this.requiredImports[304].push('descending'); + } else if ( + original.match( + new RegExp(/{(?:'|")?\$meta(?:'|")?:(?:'|")textScore*(?:'|")}/) + ) + ) { + fields.push(`metaTextScore(${doubleQuoteStringify(field)})`); + this.requiredImports[304].push('metaTextScore'); } else { - fields.excludeId = 'excludeId()'; - this.requiredImports[303].push('excludeId'); + throw new BsonTranspilersRuntimeError( + '$sort key ordering must be specified using a number or ' + + "{$meta: 'textScore'}" + ); } + }); + let sortStr; + if (fields.length > 1) { + sortStr = `orderBy(${fields.join(', ')})`; + this.requiredImports[304].push('orderBy'); } else { - const value = this.visit(this.getValue(pair)); - fields.computed = !fields.computed ? - `computed(${doubleQuoteStringify(field)}, ${value})` : - `${fields.computed}, computed(${doubleQuoteStringify(field)}, ${value})`; - this.requiredImports[303].push('computed'); + sortStr = fields[0]; } - }); - - if (fields.includes) { - fields.includes = `${fields.includes})`; - } - if (fields.excludes) { - fields.excludes = `${fields.excludes})`; - } - const elements = Object.values(fields); - let projectStr; - if (elements.length === 1) { - projectStr = elements[0]; - } else { - projectStr = `fields(${elements.join(', ')})`; - this.requiredImports[303].push('fields'); - } - return `project(${projectStr})`; - } - - /** - * Method for handling an idiomatic $not. - * - * { field: { $not: {$op: value} } } => not(op(field, value)) - * - * ctx must be a non-empty document. - * - * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the - * $not field - * @param {String} op - the operation, which in this case is "not" - * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. - * @return {String} - */ - handlenot(ctx, op, parent) { - const properties = this.assertIsNonemptyObject(ctx, op); - const val = this.getValue(properties[0]); - const innerop = this.getKeyStr(properties[0]).substr(1); - this.requiredImports[300].push(innerop); - const inner = this.handleFieldOp(val, innerop, parent); - return `${op}(${inner})`; - } - - /** - * Method for handling an idiomatic $mod. - * - * { field: { $mod: [arr1, arr2] } } => mod(field, arr1, arr2) - * - * ctx must be an array of length 2. - * - * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the - * $mod field - * @param {String} op - the operation, which in this case is "mod" - * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. - * @return {String} - */ - handlemod(ctx, op, parent) { - const list = this.getList(ctx); - if (list.length !== 2) { - throw new BsonTranspilersRuntimeError( - '$mod requires an array of 2-elements' - ); + return `sort(${sortStr})`; } - const parentField = this.getParentKeyStr(parent); - const inner = list.map((f) => { - return this.visit(f); - }); - return `${op}(${doubleQuoteStringify(parentField)}, ${inner.join(', ')})`; - } - - /** - * Method for handling an idiomatic $regex. - * - * { field: { $regex: regexstr, $options?: optsstr } } => - * regex(regexstr, optsstr?) - * - * ctx must be a string - * - * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the - * $regex field - * @param {String} op - the operation, which in this case is "regex" - * @param {ObjectLiteralExpressionContext} parent - ctx of parent document. - * @return {String} - */ - handleregex(ctx, op, parent) { - const parentField = this.getParentKeyStr(parent); - const regex = {r: '', o: ''}; - - const properties = this.getKeyValueList(parent); - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - if (field === '$regex') { - regex.r = this.visit(this.getValue(pair)); - } - if (field === '$options') { - regex.o = `, ${this.visit(this.getValue(pair))}`; - } - }); - return `${op}(${doubleQuoteStringify(parentField)}, ${regex.r}${regex.o})`; - } - handleoptions() { - return ''; - } - - /** - * Method for handling an idiomatic $where. - * - * { $where: } => where() - * - * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the - * $where field - * @return {String} - */ - handlewhere(ctx) { - let text; - if (!('getParent' in ctx)) { - text = ctx.getText(); - } else { - text = ctx.getParent().getText(); - } - return `where(${doubleQuoteStringify(text)})`; - } - - /** - * Method for handling an idiomatic $sort. - * - * { $sort: { f1: 1, f2: -1, f3: { $meta: 'textScore' } } } => - * sort(ascending(f1), descending(f2), metaTextScore(f3)) - * - * @param {ObjectLiteralExpressionContext} ctx - the ctx of the value of the - * @return {string} - */ - handlesort(ctx) { - const properties = this.assertIsNonemptyObject(ctx, 'sort'); - const fields = []; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - const original = this.getValue(pair).getText(); - if (original === '1') { - fields.push(`ascending(${doubleQuoteStringify(field)})`); - this.requiredImports[304].push('ascending'); - } else if (original === '-1') { - fields.push(`descending(${doubleQuoteStringify(field)})`); - this.requiredImports[304].push('descending'); - } else if (original.match( - new RegExp(/{(?:'|")?\$meta(?:'|")?:(?:'|")textScore*(?:'|")}/) - )) { - fields.push(`metaTextScore(${doubleQuoteStringify(field)})`); - this.requiredImports[304].push('metaTextScore'); - } else { + + handlegeoWithin(ctx, op, parent) { + this.requiredImports[300].splice( + this.requiredImports[300].indexOf('geoWithin'), + 1 + ); + const properties = this.assertIsNonemptyObject(ctx, op); + const parentField = doubleQuoteStringify(this.getParentKeyStr(parent)); + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + fields[field] = this.getValue(pair); + }); + + if (Object.keys(fields).length !== 1) { throw new BsonTranspilersRuntimeError( - '$sort key ordering must be specified using a number or ' + - '{$meta: \'textScore\'}' + '$geoWithin takes an object with only 1 field' ); } - }); - let sortStr; - if (fields.length > 1) { - sortStr = `orderBy(${fields.join(', ')})`; - this.requiredImports[304].push('orderBy'); - } else { - sortStr = fields[0]; - } - return `sort(${sortStr})`; - } - - handlegeoWithin(ctx, op, parent) { - this.requiredImports[300].splice( - this.requiredImports[300].indexOf('geoWithin'), 1 - ); - const properties = this.assertIsNonemptyObject(ctx, op); - const parentField = doubleQuoteStringify( - this.getParentKeyStr(parent) - ); - const fields = {}; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - fields[field] = this.getValue(pair); - }); - - if (Object.keys(fields).length !== 1) { - throw new BsonTranspilersRuntimeError( - '$geoWithin takes an object with only 1 field' - ); - } - const key = Object.keys(fields)[0]; - switch (key) { - case ('$geometry'): { - this.requiredImports[300].push('geoWithin'); - return `geoWithin(${parentField}, ${this.handlegeometry(fields[key])})`; + const key = Object.keys(fields)[0]; + switch (key) { + case '$geometry': { + this.requiredImports[300].push('geoWithin'); + return `geoWithin(${parentField}, ${this.handlegeometry( + fields[key] + )})`; + } + case '$box': { + this.requiredImports[300].push('geoWithinBox'); + return `geoWithinBox(${parentField}, ${this.combineCoordinates( + fields[key], + 2, + '', + true, + (p) => { + return this.combineCoordinates(p, 2, '', true, (p2) => { + return this.visit(p2); + }); + } + )})`; + } + case '$polygon': { + this.requiredImports[300].push('geoWithinPolygon'); + return `geoWithinPolygon(${parentField}, ${this.visit(fields[key])})`; + } + case '$centerSphere': + case '$center': { + const array = this.assertIsNonemptyArray(fields[key]); + if (array.length !== 2) { + throw new BsonTranspilersRuntimeError( + `${key} takes array of length 2` + ); + } + const coordinates = this.combineCoordinates( + array[0], + 2, + '', + true, + (p) => { + return this.visit(p); + } + ); + const geoop = `geoWithin${key[1].toUpperCase()}${key.substr(2)}`; + this.requiredImports[300].push(geoop); + return `${geoop}(${parentField}, ${coordinates}, ${this.visit( + array[1] + )})`; + } + default: { + throw new BsonTranspilersRuntimeError( + `unrecognized option ${key} to $geoWithin` + ); + } } - case ('$box'): { - this.requiredImports[300].push('geoWithinBox'); - return `geoWithinBox(${parentField}, ${ - this.combineCoordinates(fields[key], 2, '', true, (p) => { - return this.combineCoordinates(p, 2, '', true, (p2) => { - return this.visit(p2); - }); - })})`; + } + + handlenear(ctx, op, parent) { + const properties = this.assertIsNonemptyObject(ctx, op); + const parentField = doubleQuoteStringify(this.getParentKeyStr(parent)); + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + fields[field] = this.getValue(pair); + }); + + ['$geometry', '$minDistance', '$maxDistance'].map((k) => { + if (!(k in fields)) { + throw new BsonTranspilersRuntimeError( + `Missing required field ${k} in $${op}` + ); + } + }); + if (Object.keys(fields).length !== 3) { + throw new BsonTranspilersRuntimeError(`Too many fields to $${op}`); } - case ('$polygon'): { - this.requiredImports[300].push('geoWithinPolygon'); - return `geoWithinPolygon(${parentField}, ${this.visit(fields[key])})`; + return `${op}(${parentField}, ${this.handlegeometry( + fields.$geometry + )}, ${this.visit(fields.$maxDistance)}, ${this.visit( + fields.$minDistance + )})`; + } + + handlenearSphere(ctx, op, parent) { + return this.handlenear(ctx, op, parent); + } + + generateposition(ctx) { + const coordinates = this.assertIsNonemptyArray(ctx, 'geometry'); + if (coordinates.length !== 2) { + throw new BsonTranspilersRuntimeError('Position must be 2 coordinates'); } - case ('$centerSphere'): - case ('$center'): { - const array = this.assertIsNonemptyArray(fields[key]); - if (array.length !== 2) { - throw new BsonTranspilersRuntimeError(`${key} takes array of length 2`); - } - const coordinates = this.combineCoordinates( - array[0], 2, '', true, (p) => { return this.visit(p); } + this.requiredImports[305].push('Position'); + return `new Position(${this.visit(coordinates[0])}, ${this.visit( + coordinates[1] + )})`; + } + + assertIsNonemptyArray(ctx, op) { + const array = this.getArray(ctx); + if (!array || this.getList(array).length === 0) { + throw new BsonTranspilersRuntimeError( + `$${op} requires a non-empty array` ); - const geoop = `geoWithin${key[1].toUpperCase()}${ - key.substr(2) - }`; - this.requiredImports[300].push(geoop); - return `${geoop}(${parentField}, ${coordinates}, ${this.visit(array[1])})`; } - default: { + return this.getList(array); + } + assertIsNonemptyObject(ctx, op) { + if (this.getObject(ctx)) { + ctx = this.getObject(ctx); + } + const kv = this.getKeyValueList(ctx); + if (kv.length === 0) { throw new BsonTranspilersRuntimeError( - `unrecognized option ${key} to $geoWithin` + `$${op} requires a non-empty document` ); } + return kv; } - } - - handlenear(ctx, op, parent) { - const properties = this.assertIsNonemptyObject(ctx, op); - const parentField = doubleQuoteStringify( - this.getParentKeyStr(parent) - ); - const fields = {}; - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - fields[field] = this.getValue(pair); - }); - - ['$geometry', '$minDistance', '$maxDistance'].map((k) => { - if (!(k in fields)) { + combineCoordinates(ctx, length, className, noArray, innerFunc) { + if (!noArray) { + this.requiredImports[9] = true; + } + const points = this.assertIsNonemptyArray(ctx, 'geometry'); + if (points.length < length) { throw new BsonTranspilersRuntimeError( - `Missing required field ${k} in $${op}` + `${ + className ? className : '$geometry inner array' + } must have at least ${length} elements (has ${points.length})` ); } - }); - if (Object.keys(fields).length !== 3) { - throw new BsonTranspilersRuntimeError( - `Too many fields to $${op}` - ); + let pointstr = points + .map((p) => { + if (!innerFunc) { + return this.generateposition(p); + } + return innerFunc(p); + }) + .join(', '); + pointstr = noArray ? pointstr : `Arrays.asList(${pointstr})`; + if (!className) { + return pointstr; + } + this.requiredImports[305].push(className); + return `new ${className}(${pointstr})`; } - return `${op}(${parentField}, ${ - this.handlegeometry(fields.$geometry) - }, ${this.visit(fields.$maxDistance)}, ${ - this.visit(fields.$minDistance) - })`; - } - handlenearSphere(ctx, op, parent) { - return this.handlenear(ctx, op, parent); - } - - generateposition(ctx) { - const coordinates = this.assertIsNonemptyArray(ctx, 'geometry'); - if (coordinates.length !== 2) { - throw new BsonTranspilersRuntimeError( - 'Position must be 2 coordinates' - ); + generatepoint(ctx) { + return `new Point(${this.generateposition(ctx)})`; } - this.requiredImports[305].push('Position'); - return `new Position(${ - this.visit(coordinates[0])}, ${this.visit(coordinates[1]) - })`; - } - assertIsNonemptyArray(ctx, op) { - const array = this.getArray(ctx); - if (!array || this.getList(array).length === 0) { - throw new BsonTranspilersRuntimeError( - `$${op} requires a non-empty array` - ); - } - return this.getList(array); - } - assertIsNonemptyObject(ctx, op) { - if (this.getObject(ctx)) { - ctx = this.getObject(ctx); + generatemultipoint(ctx) { + return this.combineCoordinates(ctx, 1, 'MultiPoint'); } - const kv = this.getKeyValueList(ctx); - if (kv.length === 0) { - throw new BsonTranspilersRuntimeError( - `$${op} requires a non-empty document` - ); + + generatelinestring(ctx) { + return this.combineCoordinates(ctx, 2, 'LineString'); } - return kv; - } - combineCoordinates(ctx, length, className, noArray, innerFunc) { - if (!noArray) { - this.requiredImports[9] = true; + generatemultilinestring(ctx) { + return this.combineCoordinates(ctx, 1, 'MultiLineString', false, (p) => { + return this.combineCoordinates(p, 2); + }); } - const points = this.assertIsNonemptyArray(ctx, 'geometry'); - if (points.length < length) { - throw new BsonTranspilersRuntimeError( - `${ - className ? className : '$geometry inner array' - } must have at least ${length} elements (has ${points.length})` + + generatepolygon(ctx) { + const polyCoords = this.combineCoordinates( + ctx, + 1, + 'PolygonCoordinates', + true, + (p) => { + return this.combineCoordinates(p, 4); + } ); + return `new Polygon(${polyCoords})`; } - let pointstr = points.map((p) => { - if (!innerFunc) { - return this.generateposition(p); - } - return innerFunc(p); - }).join(', '); - pointstr = noArray ? pointstr : `Arrays.asList(${pointstr})`; - if (!className) { - return pointstr; - } - this.requiredImports[305].push(className); - return `new ${className}(${pointstr})`; - } - - generatepoint(ctx) { - return `new Point(${this.generateposition(ctx)})`; - } - - generatemultipoint(ctx) { - return this.combineCoordinates(ctx, 1, 'MultiPoint'); - } - - generatelinestring(ctx) { - return this.combineCoordinates(ctx, 2, 'LineString'); - } - - generatemultilinestring(ctx) { - return this.combineCoordinates( - ctx, - 1, - 'MultiLineString', - false, - (p) => { return this.combineCoordinates(p, 2); } - ); - } - - generatepolygon(ctx) { - const polyCoords = this.combineCoordinates( - ctx, - 1, - 'PolygonCoordinates', - true, - (p) => { return this.combineCoordinates(p, 4); } - ); - return `new Polygon(${polyCoords})`; - } - - generatemultipolygon(ctx) { - return this.combineCoordinates( - ctx, - 1, - 'MultiPolygon', - false, - (p) => { + + generatemultipolygon(ctx) { + return this.combineCoordinates(ctx, 1, 'MultiPolygon', false, (p) => { return this.combineCoordinates( p, 1, 'PolygonCoordinates', true, - (p2) => { return this.combineCoordinates(p2, 4); } + (p2) => { + return this.combineCoordinates(p2, 4); + } ); - } - ); - } - - generategeometrycollection(ctx) { - const geometries = this.assertIsNonemptyArray(ctx, 'geometry'); - return `new GeometryCollection(Arrays.asList(${ - geometries.map((g) => { - const obj = this.getObject(g); - if (!obj) { + }); + } + + generategeometrycollection(ctx) { + const geometries = this.assertIsNonemptyArray(ctx, 'geometry'); + return `new GeometryCollection(Arrays.asList(${geometries + .map((g) => { + const obj = this.getObject(g); + if (!obj) { + throw new BsonTranspilersRuntimeError( + '$GeometryCollection requires objects' + ); + } + return this.handlegeometry(obj); + }) + .join(', ')}))`; + } + + handlegeometry(ctx) { + const properties = this.assertIsNonemptyObject(ctx, 'geometry'); + const fields = {}; + + properties.forEach((pair) => { + const field = this.getKeyStr(pair); + if (field === 'type') { + fields.type = removeQuotes(this.visit(this.getValue(pair))); + } else if (field === 'coordinates') { + fields.coordinates = this.getValue(pair); + } else if (field === 'crs') { + throw new BsonTranspilersUnimplementedError( + 'Coordinate reference systems not currently supported' + ); + } else { throw new BsonTranspilersRuntimeError( - '$GeometryCollection requires objects' + `Unrecognized option to $geometry: ${field}` ); } - return this.handlegeometry(obj); - }).join(', ') - }))`; - } - - handlegeometry(ctx) { - const properties = this.assertIsNonemptyObject(ctx, 'geometry'); - const fields = {}; - - properties.forEach((pair) => { - const field = this.getKeyStr(pair); - if (field === 'type') { - fields.type = removeQuotes(this.visit(this.getValue(pair))); - } else if (field === 'coordinates') { - fields.coordinates = this.getValue(pair); - } else if (field === 'crs') { - throw new BsonTranspilersUnimplementedError( - 'Coordinate reference systems not currently supported' - ); - } else { + }); + if (!fields.type || !fields.coordinates) { + throw new BsonTranspilersRuntimeError('Missing option to $geometry'); + } + if ( + !this.getArray(fields.coordinates) || + this.getList(this.getArray(fields.coordinates)).length === 0 + ) { throw new BsonTranspilersRuntimeError( - `Unrecognized option to $geometry: ${field}` + 'Invalid coordinates option for $geometry' ); } - }); - if (!fields.type || !fields.coordinates) { + if (`generate${fields.type.toLowerCase()}` in this) { + this.requiredImports[305].push(fields.type); + return this[`generate${fields.type.toLowerCase()}`](fields.coordinates); + } throw new BsonTranspilersRuntimeError( - 'Missing option to $geometry' + `Unrecognized GeoJSON type "${fields.type}"` ); } - if (!this.getArray(fields.coordinates) || - this.getList(this.getArray(fields.coordinates)).length === 0) { - throw new BsonTranspilersRuntimeError( - 'Invalid coordinates option for $geometry' + + handlesample(ctx) { + return this.handleSingleSubfield(ctx, 'sample', 'size', true); + } + handlereplaceRoot(ctx) { + return this.handleSingleSubfield(ctx, 'replaceRoot', 'newRoot', false); + } + handlegraphLookup(ctx) { + return this.handleOptionsObject( + ctx, + 'graphLookup', + ['from', 'startWith', 'connectFromField', 'connectToField', 'as'], + ['maxDepth', 'depthField', 'restrictSearchWithMatch'], + { graphLookup: 'GraphLookupOptions' } ); } - if (`generate${fields.type.toLowerCase()}` in this) { - this.requiredImports[305].push(fields.type); - return this[`generate${fields.type.toLowerCase()}`](fields.coordinates); - } - throw new BsonTranspilersRuntimeError( - `Unrecognized GeoJSON type "${fields.type}"` - ); - } - - handlesample(ctx) { - return this.handleSingleSubfield(ctx, 'sample', 'size', true); - } - handlereplaceRoot(ctx) { - return this.handleSingleSubfield(ctx, 'replaceRoot', 'newRoot', false); - } - handlegraphLookup(ctx) { - return this.handleOptionsObject( - ctx, - 'graphLookup', - ['from', 'startWith', 'connectFromField', 'connectToField', 'as'], - ['maxDepth', 'depthField', 'restrictSearchWithMatch'], - { graphLookup: 'GraphLookupOptions' } - ); - } - handlelookup(ctx) { - return this.handleOptionsObject( - ctx, - 'lookup', - ['from', 'localField', 'foreignField', 'as'], - [], - { lookup: 'LookupOptions' } - ); - } - handlebucket(ctx) { - return this.handleOptionsObject( - ctx, - 'bucket', - ['groupBy', 'boundaries'], - ['default', 'output'], - { - bucket: 'BucketOptions', - default: (k) => { return `.defaultBucket(${k})`; } - } - ); - } - handlebucketAuto(ctx) { - return this.handleOptionsObject( - ctx, - 'bucketAuto', - ['groupBy', 'buckets'], - ['granularity', 'output'], - { - bucketAuto: 'BucketAutoOptions', - granularity: (k) => { - return `.granularity(BucketGranularity.fromString(${k}))`; + handlelookup(ctx) { + return this.handleOptionsObject( + ctx, + 'lookup', + ['from', 'localField', 'foreignField', 'as'], + [], + { lookup: 'LookupOptions' } + ); + } + handlebucket(ctx) { + return this.handleOptionsObject( + ctx, + 'bucket', + ['groupBy', 'boundaries'], + ['default', 'output'], + { + bucket: 'BucketOptions', + default: (k) => { + return `.defaultBucket(${k})`; + }, } + ); + } + handlebucketAuto(ctx) { + return this.handleOptionsObject( + ctx, + 'bucketAuto', + ['groupBy', 'buckets'], + ['granularity', 'output'], + { + bucketAuto: 'BucketAutoOptions', + granularity: (k) => { + return `.granularity(BucketGranularity.fromString(${k}))`; + }, + } + ); + } + handletext(ctx) { + return this.handleOptionsObject( + ctx, + 'text', + ['$search'], + ['$language', '$caseSensitive', '$diacriticSensitive'], + { + text: 'TextSearchOptions', + $language: (k) => { + return `.language(${k})`; + }, + $caseSensitive: (k) => { + return `.caseSensitive(${k})`; + }, + $diacriticSensitive: (k) => { + return `.diacriticSensitive(${k})`; + }, + } + ); + } + handleunwind(ctx) { + const copy = this.deepCopyRequiredImports(); + const value = this.visit(ctx.parentCtx); + this.requiredImports = copy; + if (this.findTypedNode(ctx.parentCtx).type.id === '_string') { + return `unwind(${value})`; } - ); - } - handletext(ctx) { - return this.handleOptionsObject( - ctx, - 'text', - ['$search'], - ['$language', '$caseSensitive', '$diacriticSensitive'], - { - text: 'TextSearchOptions', - $language: (k) => { return `.language(${k})`; }, - $caseSensitive: (k) => { return `.caseSensitive(${k})`; }, - $diacriticSensitive: (k) => { return `.diacriticSensitive(${k})`; } - } - ); - } - handleunwind(ctx) { - const copy = this.deepCopyRequiredImports(); - const value = this.visit(ctx.parentCtx); - this.requiredImports = copy; - if (this.findTypedNode(ctx.parentCtx).type.id === '_string') { - return `unwind(${value})`; - } - return this.handleOptionsObject( - ctx, - 'unwind', - ['path'], - ['includeArrayIndex', 'preserveNullAndEmptyArrays'], - { unwind: 'UnwindOptions' } - ); - } - handlegroup(ctx) { - return this.handleMultipleSubfields(ctx, 'group', ['_id'], (f, v) => { - return v; - }, true); - } - handlefacet(ctx) { - this.requiredImports[306].push('Facet'); - return this.handleMultipleSubfields(ctx, 'facet', [], (f, v) => { - return `new Facet(${doubleQuoteStringify(f)}, ${v})`; - }, true); - } - handleaddFields(ctx) { - this.requiredImports[306].push('Field'); - return this.handleMultipleSubfields(ctx, 'addFields', [], (f, v) => { - return `new Field(${doubleQuoteStringify(f)}, ${v})`; - }, false); - } -}; + return this.handleOptionsObject( + ctx, + 'unwind', + ['path'], + ['includeArrayIndex', 'preserveNullAndEmptyArrays'], + { unwind: 'UnwindOptions' } + ); + } + handlegroup(ctx) { + return this.handleMultipleSubfields( + ctx, + 'group', + ['_id'], + (f, v) => { + return v; + }, + true + ); + } + handlefacet(ctx) { + this.requiredImports[306].push('Facet'); + return this.handleMultipleSubfields( + ctx, + 'facet', + [], + (f, v) => { + return `new Facet(${doubleQuoteStringify(f)}, ${v})`; + }, + true + ); + } + handleaddFields(ctx) { + this.requiredImports[306].push('Field'); + return this.handleMultipleSubfields( + ctx, + 'addFields', + [], + (f, v) => { + return `new Field(${doubleQuoteStringify(f)}, ${v})`; + }, + false + ); + } + }; diff --git a/packages/bson-transpilers/codegeneration/javascript/Generator.js b/packages/bson-transpilers/codegeneration/javascript/Generator.js index 90b6bb690f7..8fca35f1e64 100644 --- a/packages/bson-transpilers/codegeneration/javascript/Generator.js +++ b/packages/bson-transpilers/codegeneration/javascript/Generator.js @@ -2,15 +2,16 @@ /* * Class for handling edge cases for node code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } - generateFuncDefExpression(ctx) { - const source = ctx.start.source[1].strdata; - const startIndex = ctx.start.start; - const stopIndex = ctx.stop.stop; - return source.slice(startIndex, stopIndex + 1); - } -}; + generateFuncDefExpression(ctx) { + const source = ctx.start.source[1].strdata; + const startIndex = ctx.start.start; + const stopIndex = ctx.stop.stop; + return source.slice(startIndex, stopIndex + 1); + } + }; diff --git a/packages/bson-transpilers/codegeneration/javascript/Visitor.js b/packages/bson-transpilers/codegeneration/javascript/Visitor.js index e0403474d93..77ba8727e21 100644 --- a/packages/bson-transpilers/codegeneration/javascript/Visitor.js +++ b/packages/bson-transpilers/codegeneration/javascript/Visitor.js @@ -5,11 +5,10 @@ const bson = require('bson'); const { BsonTranspilersArgumentError, BsonTranspilersRuntimeError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('../../helper/error'); const { removeQuotes } = require('../../helper/format'); - /** * This is a Visitor that visits the tree generated by the ECMAScript.g4 grammar. * @@ -17,690 +16,735 @@ const { removeQuotes } = require('../../helper/format'); * all visitors. * @return {Visitor} - Input-language specific visitor. */ -module.exports = (CodeGenerationVisitor) => class Visitor extends CodeGenerationVisitor { - constructor() { - super(); - this.startRule = 'program'; // Name of the ANTLR rule to start - - // Throw UnimplementedError for nodes with expressions that we don't support - this.visitThisExpression = - this.visitDeleteExpression = - this.visitVoidExpression = - this.visitTypeofExpression = - this.visitInExpression = - this.visitInstanceofExpression = - this.visitAssignmentExpression = - this.visitAssignmentOperatorExpression = - this.visitMemberIndexExpression = - this.visitTernaryExpression = - this.visitFunctionDeclaration = - this.visitVariableStatement = - this.visitIfStatement = - this.visitDoWhileStatement = - this.visitWhileStatement = - this.visitForStatement = - this.visitForVarStatement = - this.visitForInStatement = - this.visitForVarInStatement = - this.visitContinueStatement = - this.visitBreakStatement = - this.visitReturnStatement = - this.visitWithStatement = - this.visitLabelledStatement = - this.visitSwitchStatement = - this.visitThrowStatement = - this.visitTryStatement = - this.visitDebuggerStatement = - this.unimplemented; - } - - /* - * - * Visit Methods - * - */ - - visitProgram(ctx) { - if (ctx.getChildCount() < 2) { +module.exports = (CodeGenerationVisitor) => + class Visitor extends CodeGenerationVisitor { + constructor() { + super(); + this.startRule = 'program'; // Name of the ANTLR rule to start + + // Throw UnimplementedError for nodes with expressions that we don't support + this.visitThisExpression = + this.visitDeleteExpression = + this.visitVoidExpression = + this.visitTypeofExpression = + this.visitInExpression = + this.visitInstanceofExpression = + this.visitAssignmentExpression = + this.visitAssignmentOperatorExpression = + this.visitMemberIndexExpression = + this.visitTernaryExpression = + this.visitFunctionDeclaration = + this.visitVariableStatement = + this.visitIfStatement = + this.visitDoWhileStatement = + this.visitWhileStatement = + this.visitForStatement = + this.visitForVarStatement = + this.visitForInStatement = + this.visitForVarInStatement = + this.visitContinueStatement = + this.visitBreakStatement = + this.visitReturnStatement = + this.visitWithStatement = + this.visitLabelledStatement = + this.visitSwitchStatement = + this.visitThrowStatement = + this.visitTryStatement = + this.visitDebuggerStatement = + this.unimplemented; + } + + /* + * + * Visit Methods + * + */ + + visitProgram(ctx) { + if (ctx.getChildCount() < 2) { + throw new BsonTranspilersRuntimeError( + 'Expression contains 0 statements. Input should be a single statement' + ); + } + return this.visitChildren(ctx); + } + + visitSourceElements(ctx) { + if (ctx.sourceElement().length !== 1) { + throw new BsonTranspilersRuntimeError( + `Expression contains ${ + ctx.sourceElement().length + } statements. Input should be a single statement` + ); + } + return this.visitChildren(ctx); + } + visitEmptyStatement() { throw new BsonTranspilersRuntimeError( 'Expression contains 0 statements. Input should be a single statement' ); } - return this.visitChildren(ctx); - } - - visitSourceElements(ctx) { - if (ctx.sourceElement().length !== 1) { - throw new BsonTranspilersRuntimeError(`Expression contains ${ - ctx.sourceElement().length} statements. Input should be a single statement`); - } - return this.visitChildren(ctx); - } - visitEmptyStatement() { - throw new BsonTranspilersRuntimeError( - 'Expression contains 0 statements. Input should be a single statement' - ); - } - - - visitFuncCallExpression(ctx) { - return this.generateFunctionCall(ctx); - } - - visitIdentifierExpression(ctx) { - return this.generateIdentifier(ctx); - } - - visitGetAttributeExpression(ctx) { - return this.generateAttributeAccess(ctx); - } - - visitObjectLiteral(ctx) { - return this.generateObjectLiteral(ctx); - } - - visitArrayLiteral(ctx) { - return this.generateArrayLiteral(ctx); - } - - visitNullLiteral(ctx) { - return this.leafHelper(this.Types._null, ctx); - } - - visitUndefinedLiteral(ctx) { - return this.leafHelper(this.Types._undefined, ctx); - } - - visitBooleanLiteral(ctx) { - return this.leafHelper(this.Types._bool, ctx); - } - - visitStringLiteral(ctx) { - return this.leafHelper(this.Types._string, ctx); - } - - visitRegularExpressionLiteral(ctx) { - return this.leafHelper(this.Types._regex, ctx); - } - - visitIntegerLiteral(ctx) { - return this.leafHelper(this.Types._long, ctx); - } - - visitDecimalLiteral(ctx) { - return this.leafHelper(this.Types._decimal, ctx); - } - - visitHexIntegerLiteral(ctx) { - return this.leafHelper(this.Types._hex, ctx); - } - - visitOctalIntegerLiteral(ctx) { - return this.leafHelper(this.Types._octal, ctx); - } - - visitElision(ctx) { - ctx.type = this.Types._undefined; - if (ctx.type.template) { - return ctx.type.template(); - } - return 'null'; - } - - visitNewExpression(ctx) { - // Skip new because already included in function calls for constructors. - ctx.singleExpression().wasNew = true; // for dates only - const res = this.visit(ctx.singleExpression()); - ctx.type = this.findTypedNode(ctx.singleExpression()).type; - return res; - } - - visitRelationalExpression(ctx) { - ctx.type = this.Types._boolean; - const lhs = this.visit(ctx.singleExpression()[0]); - const rhs = this.visit(ctx.singleExpression()[1]); - const op = this.visit(ctx.children[1]); - if (this.Syntax.equality) { - return this.Syntax.equality.template(lhs, op, rhs); - } - return this.visitChildren(ctx); - } - - visitEqualityExpression(ctx) { - ctx.type = this.Types._boolean; - const lhs = this.visit(ctx.singleExpression()[0]); - const rhs = this.visit(ctx.singleExpression()[1]); - const op = this.visit(ctx.children[1]); - if (this.Syntax.equality) { - return this.Syntax.equality.template(lhs, op, rhs); - } - return this.visitChildren(ctx); - } - - visitLogicalAndExpression(ctx) { - if (this.Syntax.and) { - return this.Syntax.and.template( - ctx.singleExpression().map((t) => (this.visit(t))) - ); + + visitFuncCallExpression(ctx) { + return this.generateFunctionCall(ctx); } - return this.visitChildren(ctx); - } - visitLogicalOrExpression(ctx) { - if (this.Syntax.or) { - return this.Syntax.or.template( - ctx.singleExpression().map((t) => ( this.visit(t) )) - ); + visitIdentifierExpression(ctx) { + return this.generateIdentifier(ctx); } - return this.visitChildren(ctx); - } - visitNotExpression(ctx) { - if (this.Syntax.not) { - return this.Syntax.not.template( - this.visit(ctx.singleExpression()) - ); + visitGetAttributeExpression(ctx) { + return this.generateAttributeAccess(ctx); } - return this.visitChildren(ctx); - } - visitBitAndExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); + visitObjectLiteral(ctx) { + return this.generateObjectLiteral(ctx); } - return this.visitChildren(ctx); - } - visitBitXOrExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); + visitArrayLiteral(ctx) { + return this.generateArrayLiteral(ctx); } - return this.visitChildren(ctx); - } - visitBitOrExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); + visitNullLiteral(ctx) { + return this.leafHelper(this.Types._null, ctx); } - return this.visitChildren(ctx); - } - visitBitNotExpression(ctx) { - if (this.Syntax.unary.template) { - return this.Syntax.unary.template( - '~', - this.visit(ctx.singleExpression()) - ); + visitUndefinedLiteral(ctx) { + return this.leafHelper(this.Types._undefined, ctx); } - return this.visitChildren(ctx); - } - visitUnaryPlusExpression(ctx) { - if (this.Syntax.unary.template) { - return this.Syntax.unary.template( - '+', - this.visit(ctx.singleExpression()) - ); + visitBooleanLiteral(ctx) { + return this.leafHelper(this.Types._bool, ctx); + } + + visitStringLiteral(ctx) { + return this.leafHelper(this.Types._string, ctx); + } + + visitRegularExpressionLiteral(ctx) { + return this.leafHelper(this.Types._regex, ctx); + } + + visitIntegerLiteral(ctx) { + return this.leafHelper(this.Types._long, ctx); + } + + visitDecimalLiteral(ctx) { + return this.leafHelper(this.Types._decimal, ctx); + } + + visitHexIntegerLiteral(ctx) { + return this.leafHelper(this.Types._hex, ctx); + } + + visitOctalIntegerLiteral(ctx) { + return this.leafHelper(this.Types._octal, ctx); + } + + visitElision(ctx) { + ctx.type = this.Types._undefined; + if (ctx.type.template) { + return ctx.type.template(); + } + return 'null'; + } + + visitNewExpression(ctx) { + // Skip new because already included in function calls for constructors. + ctx.singleExpression().wasNew = true; // for dates only + const res = this.visit(ctx.singleExpression()); + ctx.type = this.findTypedNode(ctx.singleExpression()).type; + return res; + } + + visitRelationalExpression(ctx) { + ctx.type = this.Types._boolean; + const lhs = this.visit(ctx.singleExpression()[0]); + const rhs = this.visit(ctx.singleExpression()[1]); + const op = this.visit(ctx.children[1]); + if (this.Syntax.equality) { + return this.Syntax.equality.template(lhs, op, rhs); + } + return this.visitChildren(ctx); + } + + visitEqualityExpression(ctx) { + ctx.type = this.Types._boolean; + const lhs = this.visit(ctx.singleExpression()[0]); + const rhs = this.visit(ctx.singleExpression()[1]); + const op = this.visit(ctx.children[1]); + if (this.Syntax.equality) { + return this.Syntax.equality.template(lhs, op, rhs); + } + return this.visitChildren(ctx); + } + + visitLogicalAndExpression(ctx) { + if (this.Syntax.and) { + return this.Syntax.and.template( + ctx.singleExpression().map((t) => this.visit(t)) + ); + } + return this.visitChildren(ctx); + } + + visitLogicalOrExpression(ctx) { + if (this.Syntax.or) { + return this.Syntax.or.template( + ctx.singleExpression().map((t) => this.visit(t)) + ); + } + return this.visitChildren(ctx); + } + + visitNotExpression(ctx) { + if (this.Syntax.not) { + return this.Syntax.not.template(this.visit(ctx.singleExpression())); + } + return this.visitChildren(ctx); + } + + visitBitAndExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + + visitBitXOrExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + + visitBitOrExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + + visitBitNotExpression(ctx) { + if (this.Syntax.unary.template) { + return this.Syntax.unary.template( + '~', + this.visit(ctx.singleExpression()) + ); + } + return this.visitChildren(ctx); + } + + visitUnaryPlusExpression(ctx) { + if (this.Syntax.unary.template) { + return this.Syntax.unary.template( + '+', + this.visit(ctx.singleExpression()) + ); + } + return this.visitChildren(ctx); + } + + visitUnaryMinusExpression(ctx) { + if (this.Syntax.unary.template) { + return this.Syntax.unary.template( + '-', + this.visit(ctx.singleExpression()) + ); + } + return this.visitChildren(ctx); + } + + visitAdditiveExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + visitMultiplicativeExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + visitBitShiftExpression(ctx) { + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } + return this.visitChildren(ctx); + } + + visitParenthesizedExpression(ctx) { + if (this.Syntax.parens.template) { + const kids = this.visit(ctx.expressionSequence()); + return this.Syntax.parens.template(kids); + } + return this.visitChildren(ctx); } - return this.visitChildren(ctx); - } - visitUnaryMinusExpression(ctx) { - if (this.Syntax.unary.template) { - return this.Syntax.unary.template( - '-', - this.visit(ctx.singleExpression()) + visitFuncDefExpression(ctx) { + return this.generateFuncDefExpression(ctx); + } + + /* + * + * Process Methods + * + */ + + /* Numerical process methods */ + processNumber(ctx) { + return this.generateNumericClass(ctx); + } + + processInt32(ctx) { + return this.generateNumericClass(ctx); + } + + processDouble(ctx) { + return this.generateNumericClass(ctx); + } + + /** + * Check arguments then execute in the same way as regex literals. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processRegExp(ctx) { + this.checkArguments( + this.Symbols.RegExp.args, + this.getArguments(ctx), + 'RegExp' + ); + return this.process_regex(ctx); + } + + /** + * This looks like non-camelcase because the name of the basic type is "_regex" + * and the process methods are constructed with "Process" + . + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + process_regex(ctx) { + // eslint-disable-line camelcase + ctx.type = this.Types._regex; + let pattern; + let flags; + + try { + const regexobj = this.executeJavascript(ctx.getText()); + pattern = regexobj.source; + flags = regexobj.flags; + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + + let targetflags = flags.replace( + /[imuyg]/g, + (m) => this.Syntax.regexFlags[m] + ); + targetflags = + targetflags === '' ? '' : `${targetflags.split('').sort().join('')}`; + + return this.generateLiteral( + ctx, + ctx.type, + [pattern, targetflags], + 'RegExp' ); } - return this.visitChildren(ctx); - } - - visitAdditiveExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); - } - return this.visitChildren(ctx); - } - visitMultiplicativeExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); - } - return this.visitChildren(ctx); - } - visitBitShiftExpression(ctx) { - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); - } - return this.visitChildren(ctx); - } - - visitParenthesizedExpression(ctx) { - if (this.Syntax.parens.template) { - const kids = this.visit(ctx.expressionSequence()); - return this.Syntax.parens.template(kids); - } - return this.visitChildren(ctx); - } - - visitFuncDefExpression(ctx) { - return this.generateFuncDefExpression(ctx); - } - - /* - * - * Process Methods - * - */ - - /* Numerical process methods */ - processNumber(ctx) { - return this.generateNumericClass(ctx); - } - - processInt32(ctx) { - return this.generateNumericClass(ctx); - } - - processDouble(ctx) { - return this.generateNumericClass(ctx); - } - - /** - * Check arguments then execute in the same way as regex literals. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processRegExp(ctx) { - this.checkArguments( - this.Symbols.RegExp.args, this.getArguments(ctx), 'RegExp' - ); - return this.process_regex(ctx); - } - - /** - * This looks like non-camelcase because the name of the basic type is "_regex" - * and the process methods are constructed with "Process" + . - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - process_regex(ctx) { // eslint-disable-line camelcase - ctx.type = this.Types._regex; - let pattern; - let flags; - - try { - const regexobj = this.executeJavascript(ctx.getText()); - pattern = regexobj.source; - flags = regexobj.flags; - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); - } - - let targetflags = flags.replace(/[imuyg]/g, m => this.Syntax.regexFlags[m]); - targetflags = targetflags === '' ? - '' : - `${targetflags.split('').sort().join('')}`; - - return this.generateLiteral(ctx, ctx.type, [pattern, targetflags], 'RegExp'); - } - - /** - * Process BSON regexps because we need to verify the flags are valid. - * - * @param {FuncCallExpressionContext} ctx - * @return {string} - */ - processBSONRegExp(ctx) { - return this.generateBSONRegex( - ctx, this.Types.BSONRegExpType, this.Symbols.BSONRegExp - ); - } - - /** - * The arguments to Code can be either a string or actual javascript code. - * Manually check arguments here because first argument can be any JS, and we - * don't want to ever visit that node. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processCodeFromJS(ctx) { - return this.generateBSONCode(ctx, this.Types.Code, this.Symbols.Code, false); - } - - /** - * ObjectId needs preprocessing because it needs to be executed. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processObjectId(ctx) { - ctx.type = this.Types.ObjectId; - const symbolType = this.Symbols.ObjectId; - const argsList = this.getArguments(ctx); - - this.checkArguments(symbolType.args, argsList, 'ObjectId'); - let hexstr; - try { - hexstr = this.executeJavascript(`new ${ctx.getText()}`).toHexString(); - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); - } - const args = argsList.length === 0 ? [] : [hexstr]; - - return this.generateCall( - ctx, symbolType, args, 'ObjectId', `(${hexstr})` - ); - } - - /** - * Long needs preprocessing because it needs to be executed. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processLong(ctx) { - ctx.type = this.Types.Long; - const symbolType = this.Symbols.Long; - let longstr; - this.checkArguments(symbolType.args, this.getArguments(ctx), 'Long'); - try { - longstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); - } - return this.generateCall( - ctx, symbolType, [longstr, '_long'], 'Long', `(${longstr})` - ); - } - - processLongfromBits(ctx) { - if ('emitLongfromBits' in this) { - return this.emitLongfromBits(ctx); - } - return this.processLong(ctx); - } - - /** - * Decimal128 needs preprocessing because it needs to be executed. Check - * argument length manually because 'Buffer' not supported. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processDecimal128(ctx) { - ctx.type = this.Types.Decimal128; - const symbolType = this.Symbols.Decimal128; - let decstr; - const argList = this.getArguments(ctx); - - if (argList.length !== 1) { - throw new BsonTranspilersArgumentError( - 'Argument count mismatch: Decimal128 requires one argument' + + /** + * Process BSON regexps because we need to verify the flags are valid. + * + * @param {FuncCallExpressionContext} ctx + * @return {string} + */ + processBSONRegExp(ctx) { + return this.generateBSONRegex( + ctx, + this.Types.BSONRegExpType, + this.Symbols.BSONRegExp ); } - try { - decstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); - } catch (error) { - // TODO: this isn't quite right because it catches all type errors. - if (error.name === 'TypeError' || error.code === 'ERR_INVALID_ARG_TYPE') { - throw new BsonTranspilersArgumentError(error.message); - } - - throw new BsonTranspilersRuntimeError(error.message); - } - return this.generateCall( - ctx, symbolType, [decstr], 'Decimal128', `(${decstr})` - ); - } - - /** - * This is a bit weird because we can just convert to string directly. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processLongtoString(ctx) { - ctx.type = this.Types._string; - const long = ctx.singleExpression().singleExpression(); - let longstr; - this.checkArguments( - [[this.Types._numeric, null]], this.getArguments(ctx), 'Long toString' - ); - - try { - longstr = this.executeJavascript(`new ${long.getText()}`).toString(); - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); - } - return ctx.type.template ? ctx.type.template(longstr) : `'${longstr}'`; - } - - /** - * Preprocessed because different target languages need different info out - * of the constructed date, so we want to execute it. Passes a constructed - * date object to the template or generator. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processDate(ctx) { - const isStr = !(ctx.getText().includes('ISODate') || ctx.wasNew); - const symbolType = this.Symbols.Date; - - ctx.type = this.Types.Date; - if (isStr) { - ctx.type = this.Types._string; - this.requiredImports[201] = true; + /** + * The arguments to Code can be either a string or actual javascript code. + * Manually check arguments here because first argument can be any JS, and we + * don't want to ever visit that node. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processCodeFromJS(ctx) { + return this.generateBSONCode( + ctx, + this.Types.Code, + this.Symbols.Code, + false + ); } - const argsList = this.getArguments(ctx); - let date = null; + /** + * ObjectId needs preprocessing because it needs to be executed. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processObjectId(ctx) { + ctx.type = this.Types.ObjectId; + const symbolType = this.Symbols.ObjectId; + const argsList = this.getArguments(ctx); - if (argsList.length !== 0) { + this.checkArguments(symbolType.args, argsList, 'ObjectId'); + let hexstr; try { - this.checkArguments(this.Symbols.Date.args, argsList, 'Date'); - } catch (e) { + hexstr = this.executeJavascript(`new ${ctx.getText()}`).toHexString(); + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + const args = argsList.length === 0 ? [] : [hexstr]; + + return this.generateCall( + ctx, + symbolType, + args, + 'ObjectId', + `(${hexstr})` + ); + } + + /** + * Long needs preprocessing because it needs to be executed. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processLong(ctx) { + ctx.type = this.Types.Long; + const symbolType = this.Symbols.Long; + let longstr; + this.checkArguments(symbolType.args, this.getArguments(ctx), 'Long'); + try { + longstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + return this.generateCall( + ctx, + symbolType, + [longstr, '_long'], + 'Long', + `(${longstr})` + ); + } + + processLongfromBits(ctx) { + if ('emitLongfromBits' in this) { + return this.emitLongfromBits(ctx); + } + return this.processLong(ctx); + } + + /** + * Decimal128 needs preprocessing because it needs to be executed. Check + * argument length manually because 'Buffer' not supported. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processDecimal128(ctx) { + ctx.type = this.Types.Decimal128; + const symbolType = this.Symbols.Decimal128; + let decstr; + const argList = this.getArguments(ctx); + + if (argList.length !== 1) { throw new BsonTranspilersArgumentError( - 'Invalid argument to Date: requires no args, one string/number, or up to 7 numbers' + 'Argument count mismatch: Decimal128 requires one argument' ); } - let text = ctx.getText(); - text = text.startsWith('new ') ? text : `new ${text}`; try { - date = this.executeJavascript(text); + decstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); } catch (error) { + // TODO: this isn't quite right because it catches all type errors. + if ( + error.name === 'TypeError' || + error.code === 'ERR_INVALID_ARG_TYPE' + ) { + throw new BsonTranspilersArgumentError(error.message); + } + throw new BsonTranspilersRuntimeError(error.message); } + return this.generateCall( + ctx, + symbolType, + [decstr], + 'Decimal128', + `(${decstr})` + ); } - const dargs = `Date(${date - ? this.Types._string.template(date.toUTCString()) - : ''})`; - return this.generateCall( - ctx, symbolType, [date, isStr], '', dargs, isStr, true - ); - } - - processObjectIdCreateFromTime(ctx) { - return this.generateObjectIdFromTime(ctx); - } - - processBinary() { - throw new BsonTranspilersUnimplementedError('Binary type not supported'); - } - - /* - * - * Helper Methods - * - */ - - /** - * Takes in the constructor name of a node and returns a human-readable - * node name. Used for error reporting, must be defined by all visitors. - * - * @param {String} name - * @return {String} - */ - renameNode(name) { - return name ? name.replace('_stmt', '') : 'Expression'; - } - - /** - * There are no named arguments in javascript, so we can just return directly. - * @param {Array} expected - * @param {ParserRuleContext} node - * @return {Array} - */ - checkNamedArgs(expected, node) { - return [expected, node]; - } - - /** - * Execute javascript in a sandbox. - * - * @param {String} input - * @return {*} result of execution - */ - executeJavascript(input) { - const sandbox = { - RegExp: RegExp, - BSONRegExp: bson.BSONRegExp, - // Binary: bson.Binary, - DBRef: bson.DBRef, - Decimal128: bson.Decimal128, - Double: bson.Double, - Int32: bson.Int32, - Long: bson.Long, - Int64: bson.Long, - Map: bson.Map, - MaxKey: bson.MaxKey, - MinKey: bson.MinKey, - ObjectID: bson.ObjectId, - ObjectId: bson.ObjectId, - BSONSymbol: bson.BSONSymbol, - Timestamp: bson.Timestamp, - Code: function(c, s) { - return new bson.Code(c, s); - }, - Date: function(s) { - const args = Array.from(arguments); - - if (args.length === 1) { - return new Date(s); + + /** + * This is a bit weird because we can just convert to string directly. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processLongtoString(ctx) { + ctx.type = this.Types._string; + const long = ctx.singleExpression().singleExpression(); + let longstr; + this.checkArguments( + [[this.Types._numeric, null]], + this.getArguments(ctx), + 'Long toString' + ); + + try { + longstr = this.executeJavascript(`new ${long.getText()}`).toString(); + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + return ctx.type.template ? ctx.type.template(longstr) : `'${longstr}'`; + } + + /** + * Preprocessed because different target languages need different info out + * of the constructed date, so we want to execute it. Passes a constructed + * date object to the template or generator. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processDate(ctx) { + const isStr = !(ctx.getText().includes('ISODate') || ctx.wasNew); + const symbolType = this.Symbols.Date; + + ctx.type = this.Types.Date; + if (isStr) { + ctx.type = this.Types._string; + this.requiredImports[201] = true; + } + + const argsList = this.getArguments(ctx); + let date = null; + + if (argsList.length !== 0) { + try { + this.checkArguments(this.Symbols.Date.args, argsList, 'Date'); + } catch (e) { + throw new BsonTranspilersArgumentError( + 'Invalid argument to Date: requires no args, one string/number, or up to 7 numbers' + ); } - return new Date(Date.UTC(...args)); - }, - Buffer: Buffer, - __result: {} - }; - const res = vm.runInContext('__result = ' + input, vm.createContext(sandbox)); - return res; - } - - /* - * Accessor Functions. - * - * These MUST be defined by every visitor. Each function is a wrapper around - * a tree node. They are required so that the CodeGenerationVisitor and the - * Generators can access tree elements without needing to know which tree they - * are visiting or the ANTLR name of the node. - */ - - getArguments(ctx) { - if (!('arguments' in ctx) || - !('argumentList' in ctx.arguments()) || - !ctx.arguments().argumentList()) { - return []; + let text = ctx.getText(); + text = text.startsWith('new ') ? text : `new ${text}`; + try { + date = this.executeJavascript(text); + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + } + const dargs = `Date(${ + date ? this.Types._string.template(date.toUTCString()) : '' + })`; + return this.generateCall( + ctx, + symbolType, + [date, isStr], + '', + dargs, + isStr, + true + ); + } + + processObjectIdCreateFromTime(ctx) { + return this.generateObjectIdFromTime(ctx); + } + + processBinary() { + throw new BsonTranspilersUnimplementedError('Binary type not supported'); + } + + /* + * + * Helper Methods + * + */ + + /** + * Takes in the constructor name of a node and returns a human-readable + * node name. Used for error reporting, must be defined by all visitors. + * + * @param {String} name + * @return {String} + */ + renameNode(name) { + return name ? name.replace('_stmt', '') : 'Expression'; + } + + /** + * There are no named arguments in javascript, so we can just return directly. + * @param {Array} expected + * @param {ParserRuleContext} node + * @return {Array} + */ + checkNamedArgs(expected, node) { + return [expected, node]; + } + + /** + * Execute javascript in a sandbox. + * + * @param {String} input + * @return {*} result of execution + */ + executeJavascript(input) { + const sandbox = { + RegExp: RegExp, + BSONRegExp: bson.BSONRegExp, + // Binary: bson.Binary, + DBRef: bson.DBRef, + Decimal128: bson.Decimal128, + Double: bson.Double, + Int32: bson.Int32, + Long: bson.Long, + Int64: bson.Long, + Map: bson.Map, + MaxKey: bson.MaxKey, + MinKey: bson.MinKey, + ObjectID: bson.ObjectId, + ObjectId: bson.ObjectId, + BSONSymbol: bson.BSONSymbol, + Timestamp: bson.Timestamp, + Code: function (c, s) { + return new bson.Code(c, s); + }, + Date: function (s) { + const args = Array.from(arguments); + + if (args.length === 1) { + return new Date(s); + } + + return new Date(Date.UTC(...args)); + }, + Buffer: Buffer, + __result: {}, + }; + const res = vm.runInContext( + '__result = ' + input, + vm.createContext(sandbox) + ); + return res; } - return ctx.arguments().argumentList().singleExpression(); - } - getArgumentAt(ctx, i) { - return this.getArguments(ctx)[i]; - } + /* + * Accessor Functions. + * + * These MUST be defined by every visitor. Each function is a wrapper around + * a tree node. They are required so that the CodeGenerationVisitor and the + * Generators can access tree elements without needing to know which tree they + * are visiting or the ANTLR name of the node. + */ - getFunctionCallName(ctx) { - return ctx.singleExpression(); - } + getArguments(ctx) { + if ( + !('arguments' in ctx) || + !('argumentList' in ctx.arguments()) || + !ctx.arguments().argumentList() + ) { + return []; + } + return ctx.arguments().argumentList().singleExpression(); + } - getIfIdentifier(ctx) { - if ('identifierName' in ctx) { + getArgumentAt(ctx, i) { + return this.getArguments(ctx)[i]; + } + + getFunctionCallName(ctx) { return ctx.singleExpression(); } - return ctx; - } - getAttributeLHS(ctx) { - return ctx.singleExpression(); - } + getIfIdentifier(ctx) { + if ('identifierName' in ctx) { + return ctx.singleExpression(); + } + return ctx; + } - getAttributeRHS(ctx) { - return ctx.identifierName(); - } + getAttributeLHS(ctx) { + return ctx.singleExpression(); + } - getList(ctx) { - if (!('elementList' in ctx) || !ctx.elementList()) { - return []; + getAttributeRHS(ctx) { + return ctx.identifierName(); } - const elisions = ctx.elementList().elision(); - const elements = ctx.elementList().singleExpression(); - return ctx.elementList().children.filter((c) => { - return elisions.indexOf(c) !== -1 || elements.indexOf(c) !== -1; - }); - } - getArray(ctx) { - if (!('arrayLiteral' in ctx)) { - return false; + getList(ctx) { + if (!('elementList' in ctx) || !ctx.elementList()) { + return []; + } + const elisions = ctx.elementList().elision(); + const elements = ctx.elementList().singleExpression(); + return ctx.elementList().children.filter((c) => { + return elisions.indexOf(c) !== -1 || elements.indexOf(c) !== -1; + }); } - return ctx.arrayLiteral(); - } - getObject(ctx) { - if (!('objectLiteral' in ctx)) { - return false; + getArray(ctx) { + if (!('arrayLiteral' in ctx)) { + return false; + } + return ctx.arrayLiteral(); } - return ctx.objectLiteral(); - } - getKeyValueList(ctx) { - if ('propertyNameAndValueList' in ctx && ctx.propertyNameAndValueList()) { - return ctx.propertyNameAndValueList().propertyAssignment(); + getObject(ctx) { + if (!('objectLiteral' in ctx)) { + return false; + } + return ctx.objectLiteral(); } - return []; - } - getKeyStr(ctx) { - return removeQuotes(this.visit(ctx.propertyName())); - } + getKeyValueList(ctx) { + if ('propertyNameAndValueList' in ctx && ctx.propertyNameAndValueList()) { + return ctx.propertyNameAndValueList().propertyAssignment(); + } + return []; + } - getValue(ctx) { - return ctx.singleExpression(); - } + getKeyStr(ctx) { + return removeQuotes(this.visit(ctx.propertyName())); + } - isSubObject(ctx) { - return 'propertyName' in ctx.parentCtx.parentCtx; - } + getValue(ctx) { + return ctx.singleExpression(); + } - getParentKeyStr(ctx) { - // For a given sub document, get its key. - return this.getKeyStr(ctx.parentCtx.parentCtx); - } + isSubObject(ctx) { + return 'propertyName' in ctx.parentCtx.parentCtx; + } - getObjectChild(ctx) { - return ctx.getChild(0); - } -}; + getParentKeyStr(ctx) { + // For a given sub document, get its key. + return this.getKeyStr(ctx.parentCtx.parentCtx); + } + getObjectChild(ctx) { + return ctx.getChild(0); + } + }; diff --git a/packages/bson-transpilers/codegeneration/object/Generator.js b/packages/bson-transpilers/codegeneration/object/Generator.js index 82d72ab4f55..ea398528f19 100644 --- a/packages/bson-transpilers/codegeneration/object/Generator.js +++ b/packages/bson-transpilers/codegeneration/object/Generator.js @@ -4,234 +4,265 @@ const bson = require('bson'); const { BsonTranspilersReferenceError, BsonTranspilersTypeError, - BsonTranspilersRuntimeError + BsonTranspilersRuntimeError, } = require('../../helper/error'); const { removeQuotes } = require('../../helper/format'); /* * Class for handling edge cases for shell code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - this.IGNORE = 'a unique thing'; - } - - start(ctx) { - return this.returnResult(ctx); - } - - /** - * Overrides the helper function to instantiate the object instead of - * concatenating the strings. - * - * @param {ParserRuleContext} ctx - The function call node - * @param {Object} lhsType - The type - * @param {Array} args - Arguments to the template - * - * @return {String} - */ - generateCall(ctx, lhsType, args) { - if (`emit${lhsType.id}` in this) { - return this[`emit${lhsType.id}`](ctx, ...args); - } - const lhs = this.visit(this.getFunctionCallName(ctx)); - return this.returnFunctionCallLhsRhs(lhs, args, lhsType); - } - - /** - * Don't concatenate child nodes, return them as array. - * - * @param {ParserRuleContext} ctx - * @param {Object} options - * @return {Array} - */ - visitChildren(ctx, options) { - const opts = { - start: 0, step: 1, separator: '', ignore: [], children: ctx.children - }; - Object.assign(opts, options ? options : {}); - opts.end = ('end' in opts) ? opts.end : opts.children.length - 1; - - const code = []; - for (let i = opts.start; i <= opts.end; i += opts.step) { - if (opts.ignore.indexOf(i) === -1) { - code.push(this.visit( - opts.children[i] - )); - } +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + this.IGNORE = 'a unique thing'; } - const result = code.filter((c) => c !== this.IGNORE); - if (result.length === 1) { - return result[0]; + + start(ctx) { + return this.returnResult(ctx); } - return result; - } - returnFunctionCallRhs(rhs) { - return rhs; - } + /** + * Overrides the helper function to instantiate the object instead of + * concatenating the strings. + * + * @param {ParserRuleContext} ctx - The function call node + * @param {Object} lhsType - The type + * @param {Array} args - Arguments to the template + * + * @return {String} + */ + generateCall(ctx, lhsType, args) { + if (`emit${lhsType.id}` in this) { + return this[`emit${lhsType.id}`](ctx, ...args); + } + const lhs = this.visit(this.getFunctionCallName(ctx)); + return this.returnFunctionCallLhsRhs(lhs, args, lhsType); + } - returnFunctionCallLhs(code, name) { - const types = { - 100: bson.Code, 101: bson.ObjectId, 102: bson.Binary, 103: bson.DBRef, - 104: bson.Double, 105: bson.Int32, 106: bson.Long, 107: bson.MinKey, - 108: bson.MaxKey, 109: bson.BSONRegExp, 110: bson.Timestamp, - 111: bson.BSONSymbol, 112: bson.Decimal128, 200: Date, 8: RegExp, 2: Number, - 10: Object - }; - const result = types[code]; - if (result === undefined) { - throw new BsonTranspilersReferenceError(`Cannot instantiate ${name} with code=${code}`); + /** + * Don't concatenate child nodes, return them as array. + * + * @param {ParserRuleContext} ctx + * @param {Object} options + * @return {Array} + */ + visitChildren(ctx, options) { + const opts = { + start: 0, + step: 1, + separator: '', + ignore: [], + children: ctx.children, + }; + Object.assign(opts, options ? options : {}); + opts.end = 'end' in opts ? opts.end : opts.children.length - 1; + + const code = []; + for (let i = opts.start; i <= opts.end; i += opts.step) { + if (opts.ignore.indexOf(i) === -1) { + code.push(this.visit(opts.children[i])); + } + } + const result = code.filter((c) => c !== this.IGNORE); + if (result.length === 1) { + return result[0]; + } + return result; } - return result; - } - returnFunctionCallLhsRhs(lhs, args, lhsType) { - if (args.length === 1 && args[0] === undefined) { - args = []; + returnFunctionCallRhs(rhs) { + return rhs; } - if (lhsType && lhsType.argsTemplate) { - return lhsType.argsTemplate.bind(this.getState())(lhs, ...args); + returnFunctionCallLhs(code, name) { + const types = { + 100: bson.Code, + 101: bson.ObjectId, + 102: bson.Binary, + 103: bson.DBRef, + 104: bson.Double, + 105: bson.Int32, + 106: bson.Long, + 107: bson.MinKey, + 108: bson.MaxKey, + 109: bson.BSONRegExp, + 110: bson.Timestamp, + 111: bson.BSONSymbol, + 112: bson.Decimal128, + 200: Date, + 8: RegExp, + 2: Number, + 10: Object, + }; + const result = types[code]; + if (result === undefined) { + throw new BsonTranspilersReferenceError( + `Cannot instantiate ${name} with code=${code}` + ); + } + return result; } - let expr; - try { - if (lhsType.callable === this.SYMBOL_TYPE.CONSTRUCTOR) { - expr = new lhs(...args); - } else { - expr = lhs(...args); + returnFunctionCallLhsRhs(lhs, args, lhsType) { + if (args.length === 1 && args[0] === undefined) { + args = []; + } + + if (lhsType && lhsType.argsTemplate) { + return lhsType.argsTemplate.bind(this.getState())(lhs, ...args); } - } catch (e) { - if (e.message.includes('constructor')) { - try { + + let expr; + try { + if (lhsType.callable === this.SYMBOL_TYPE.CONSTRUCTOR) { + expr = new lhs(...args); + } else { expr = lhs(...args); - } catch (e2) { - e2.message = `Error constructing type: ${e2.message}`; - throw e2; } - } else { - e.message = `Error constructing type: ${e.message}`; - throw e; + } catch (e) { + if (e.message.includes('constructor')) { + try { + expr = lhs(...args); + } catch (e2) { + e2.message = `Error constructing type: ${e2.message}`; + throw e2; + } + } else { + e.message = `Error constructing type: ${e.message}`; + throw e; + } } + return expr; } - return expr; - } - returnAttributeAccess(lhs, rhs, type) { - if (type === null) { - throw new BsonTranspilersTypeError(`Error: ${rhs} is undefined and cannot be called`); - } - let expr = lhs[rhs]; - if (type.attr[rhs].template) { - expr = type.attr[rhs].template(lhs, rhs); + returnAttributeAccess(lhs, rhs, type) { + if (type === null) { + throw new BsonTranspilersTypeError( + `Error: ${rhs} is undefined and cannot be called` + ); + } + let expr = lhs[rhs]; + if (type.attr[rhs].template) { + expr = type.attr[rhs].template(lhs, rhs); + if (typeof expr === 'function') { + return function () { + return expr(...arguments); + }; + } + } if (typeof expr === 'function') { - return function() { - return expr(...arguments); + return function () { + return lhs[rhs](...arguments); }; } + return expr; } - if (typeof expr === 'function') { - return function() { - return lhs[rhs](...arguments); - }; + + returnParenthesis(expr) { + return expr; + } + + returnSet(args) { + return args; + } + + returnComparison(ctx) { + return ctx.children.reduce((s, node, i, arr) => { + if (i === arr.length - 1) { + // Always visit the last element + return s; + } + if (i % 2 === 0) { + // Only ops + return s; + } + const op = this.visit(node); + if ( + typeof op === 'object' && + op.length === 2 && + op.every((k) => ['in', 'is', 'not'].indexOf(k) !== -1) + ) { + return this.Syntax.equality.template(s, '!=', this.visit(arr[i + 1])); + } + if (['>', '<', '<=', '>=', '<>', '==', '!=', 'is'].indexOf(op) !== -1) { + return this.Syntax.equality.template(s, op, this.visit(arr[i + 1])); + } + if (op === 'in' || op === 'notin') { + return this.Syntax.in.template.bind(this.state)( + s, + op, + this.visit(arr[i + 1]) + ); + } + throw new BsonTranspilersRuntimeError(`Unrecognized operation ${op}`); + }, this.visit(ctx.children[0])); } - return expr; - } - returnParenthesis(expr) { - return expr; - } + emitLongfromBits(ctx) { + ctx.type = this.Types.Long; + const symbolType = this.Symbols.Long.attr.fromBits; + const rhs = this.checkArguments( + symbolType.args, + this.getArguments(ctx), + 'Long.fromBits' + ); + return bson.Long.fromBits(...rhs); + } - returnSet(args) { - return args; - } + emitRegex(ctx, pattern, flags) { + return new bson.BSONRegExp(pattern, flags); + } - returnComparison(ctx) { - return ctx.children.reduce((s, node, i, arr) => { - if (i === arr.length - 1) { // Always visit the last element - return s; - } - if (i % 2 === 0) { // Only ops - return s; - } - const op = this.visit(node); - if (typeof op === 'object' && op.length === 2 && op.every((k) => (['in', 'is', 'not'].indexOf(k) !== -1))) { - return this.Syntax.equality.template(s, '!=', this.visit(arr[i + 1])); - } - if (['>', '<', '<=', '>=', '<>', '==', '!=', 'is'].indexOf(op) !== -1) { - return this.Syntax.equality.template(s, op, this.visit(arr[i + 1])); - } - if (op === 'in' || op === 'notin') { - return this.Syntax.in.template.bind(this.state)(s, op, this.visit(arr[i + 1])); + emit_array(ctx) { + ctx.type = this.Types._array; + this.requiredImports[9] = true; + return this.getList(ctx).map((child) => this.visit(child)); + } + + emit_object(ctx) { + ctx.type = this.Types._object; + this.requiredImports[10] = true; + const object = {}; + this.getKeyValueList(ctx).map((k) => { + const key = this.getKeyStr(k); + if (key === '$where') { + object[key] = removeQuotes(this.getValue(k).getText()); + } else { + object[key] = this.visit(this.getValue(k)); + } + }); + return object; + } + + emitdatetime(ctx, date, isString) { + if (date === null && isString) { + return Date(); + } else if (date === null) { + return new Date(); } - throw new BsonTranspilersRuntimeError(`Unrecognized operation ${op}`); - }, this.visit(ctx.children[0])); - } - - emitLongfromBits(ctx) { - ctx.type = this.Types.Long; - const symbolType = this.Symbols.Long.attr.fromBits; - const rhs = this.checkArguments( - symbolType.args, this.getArguments(ctx), 'Long.fromBits' - ); - return bson.Long.fromBits(...rhs); - } - - emitRegex(ctx, pattern, flags) { - return new bson.BSONRegExp(pattern, flags); - } - - emit_array(ctx) { - ctx.type = this.Types._array; - this.requiredImports[9] = true; - return this.getList(ctx).map((child) => ( this.visit(child) )); - } - - emit_object(ctx) { - ctx.type = this.Types._object; - this.requiredImports[10] = true; - const object = {}; - this.getKeyValueList(ctx).map((k) => { - const key = this.getKeyStr(k); - if (key === '$where') { - object[key] = removeQuotes(this.getValue(k).getText()); - } else { - object[key] = this.visit(this.getValue(k)); + return date; + } + emitDate(ctx, date, isString) { + if (date === null && isString) { + return Date(); + } else if (date === null) { + return new Date(); } - }); - return object; - } - - emitdatetime(ctx, date, isString) { - if (date === null && isString) { - return Date(); - } else if (date === null) { - return new Date(); - } - return date; - } - emitDate(ctx, date, isString) { - if (date === null && isString) { - return Date(); - } else if (date === null) { - return new Date(); - } - return date; - } - - /* Numbers need emit methods because they also take type args */ - - emitNumber(ctx, arg) { - return Number(arg); - } - - emitint(ctx, arg) { - return new bson.Int32(arg); - } - - emitfloat(ctx, arg) { - return new bson.Double(arg); - } -}; + return date; + } + + /* Numbers need emit methods because they also take type args */ + + emitNumber(ctx, arg) { + return Number(arg); + } + + emitint(ctx, arg) { + return new bson.Int32(arg); + } + + emitfloat(ctx, arg) { + return new bson.Double(arg); + } + }; diff --git a/packages/bson-transpilers/codegeneration/php/Generator.js b/packages/bson-transpilers/codegeneration/php/Generator.js index 595e27138e7..6fbd38f8c64 100644 --- a/packages/bson-transpilers/codegeneration/php/Generator.js +++ b/packages/bson-transpilers/codegeneration/php/Generator.js @@ -3,11 +3,12 @@ * Class for handling edge cases for php code generation. Defines "emit" methods. */ const PHPUtils = require('./PHPUtils'); -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); - // Common functions used by templates - this.state.utils = new PHPUtils(); - } -}; + // Common functions used by templates + this.state.utils = new PHPUtils(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/php/PHPUtils.js b/packages/bson-transpilers/codegeneration/php/PHPUtils.js index 50d7cf7aee1..e01682e2999 100644 --- a/packages/bson-transpilers/codegeneration/php/PHPUtils.js +++ b/packages/bson-transpilers/codegeneration/php/PHPUtils.js @@ -5,8 +5,7 @@ * @returns {object} */ class PHPUtils { - constructor() { - } + constructor() {} /** * Common string checker to be sure we work with string @@ -54,7 +53,7 @@ class PHPUtils { removeStringQuotes(str) { str = this.convertToString(str); if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === "'" && str.charAt(str.length - 1) === "'") || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"') ) { str = str.substr(1, str.length - 2); diff --git a/packages/bson-transpilers/codegeneration/python/Generator.js b/packages/bson-transpilers/codegeneration/python/Generator.js index 7e87864aa1a..a176c791be8 100644 --- a/packages/bson-transpilers/codegeneration/python/Generator.js +++ b/packages/bson-transpilers/codegeneration/python/Generator.js @@ -2,8 +2,9 @@ /* * Class for handling edge cases for python code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/python/Visitor.js b/packages/bson-transpilers/codegeneration/python/Visitor.js index 5594af4262f..6db87c644b9 100644 --- a/packages/bson-transpilers/codegeneration/python/Visitor.js +++ b/packages/bson-transpilers/codegeneration/python/Visitor.js @@ -5,7 +5,7 @@ const { BsonTranspilersArgumentError, BsonTranspilersRuntimeError, BsonTranspilersInternalError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('../../helper/error'); const { removeQuotes } = require('../../helper/format'); @@ -16,736 +16,807 @@ const { removeQuotes } = require('../../helper/format'); * all visitors. * @return {Visitor} - Input-language specific visitor. */ -module.exports = (CodeGenerationVisitor) => class Visitor extends CodeGenerationVisitor { - constructor() { - super(); - this.startRule = 'file_input'; // Name of the ANTLR rule to start - - - // Throw UnimplementedError for nodes with expressions that we don't support - this.visitDel_stmt = - this.visitPass_stmt = - this.visitFlow_stmt = - this.visitImport_stmt = - this.visitGlobal_stmt = - this.visitNonlocal_stmt = - this.visitAssert_stmt = - this.visitIf_stmt = - this.visitWhile_stmt = - this.visitFor_stmt = - this.visitTry_stmt = - this.visitWith_stmt = - this.visitFuncdef = - this.visitClassdef = - this.visitDecorated = - this.visitAsync_stmt = - this.visitComp_iter = - this.visitStar_expr = - this.visitInline_if = - this.visitAssign_stmt = - this.visitEllipsesAtom = - this.visitAugassign = - this.visitImag_literal = - this.unimplemented; - } - - /* - * - * Visit Methods - * - */ - - visitFile_input(ctx) { - if (ctx.stmt().length !== 1) { - throw new BsonTranspilersRuntimeError(`Expression contains ${ - ctx.stmt().length} statements. Input should be a single statement`); - } - return this.visitChildren(ctx); - } - - visitFunctionCall(ctx) { - if (ctx.getChildCount() === 1) { +module.exports = (CodeGenerationVisitor) => + class Visitor extends CodeGenerationVisitor { + constructor() { + super(); + this.startRule = 'file_input'; // Name of the ANTLR rule to start + + // Throw UnimplementedError for nodes with expressions that we don't support + this.visitDel_stmt = + this.visitPass_stmt = + this.visitFlow_stmt = + this.visitImport_stmt = + this.visitGlobal_stmt = + this.visitNonlocal_stmt = + this.visitAssert_stmt = + this.visitIf_stmt = + this.visitWhile_stmt = + this.visitFor_stmt = + this.visitTry_stmt = + this.visitWith_stmt = + this.visitFuncdef = + this.visitClassdef = + this.visitDecorated = + this.visitAsync_stmt = + this.visitComp_iter = + this.visitStar_expr = + this.visitInline_if = + this.visitAssign_stmt = + this.visitEllipsesAtom = + this.visitAugassign = + this.visitImag_literal = + this.unimplemented; + } + + /* + * + * Visit Methods + * + */ + + visitFile_input(ctx) { + if (ctx.stmt().length !== 1) { + throw new BsonTranspilersRuntimeError( + `Expression contains ${ + ctx.stmt().length + } statements. Input should be a single statement` + ); + } return this.visitChildren(ctx); } - return this.generateFunctionCall(ctx); - } - - visitIdentifier(ctx) { - return this.generateIdentifier(ctx); - } - visitAttributeAccess(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitFunctionCall(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + return this.generateFunctionCall(ctx); } - return this.generateAttributeAccess(ctx); - } - visitObject_literal(ctx) { - this.testForComprehension(ctx.dictorsetmaker()); - return this.generateObjectLiteral(ctx); - } + visitIdentifier(ctx) { + return this.generateIdentifier(ctx); + } - visitArray_literal(ctx) { - this.testForComprehension(ctx.testlist_comp()); - return this.generateArrayLiteral(ctx); - } + visitAttributeAccess(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + return this.generateAttributeAccess(ctx); + } - visitExpr(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitObject_literal(ctx) { + this.testForComprehension(ctx.dictorsetmaker()); + return this.generateObjectLiteral(ctx); } - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); + + visitArray_literal(ctx) { + this.testForComprehension(ctx.testlist_comp()); + return this.generateArrayLiteral(ctx); } - return this.visitChildren(ctx); - } - visitXor_expr(ctx) { - if (ctx.getChildCount() === 1) { + visitExpr(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } return this.visitChildren(ctx); } - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); - } - return this.visitChildren(ctx); - } - visitAnd_expr(ctx) { - if (ctx.getChildCount() === 1) { + visitXor_expr(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } return this.visitChildren(ctx); } - if (this.Syntax.binary.template) { - const kids = ctx.children.map(m => this.visit(m)); - return this.Syntax.binary.template(kids); - } - return this.visitChildren(ctx); - } - - visitShift_expr(ctx) { - if (ctx.getChildCount() === 1) { + visitAnd_expr(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + if (this.Syntax.binary.template) { + const kids = ctx.children.map((m) => this.visit(m)); + return this.Syntax.binary.template(kids); + } return this.visitChildren(ctx); } - const args = ctx.children.map((n) => this.visit(n)); - if (this.Syntax.binary.template) { - return this.Syntax.binary.template(args); + + visitShift_expr(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + const args = ctx.children.map((n) => this.visit(n)); + if (this.Syntax.binary.template) { + return this.Syntax.binary.template(args); + } + return this.visitChildren(ctx); } - return this.visitChildren(ctx); - } - visitArith_expr(ctx) { - if (ctx.getChildCount() === 1) { + visitArith_expr(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + const args = ctx.children.map((n) => this.visit(n)); + if (this.Syntax.binary.template) { + return this.Syntax.binary.template(args); + } return this.visitChildren(ctx); } - const args = ctx.children.map((n) => this.visit(n)); - if (this.Syntax.binary.template) { - return this.Syntax.binary.template(args); - } - return this.visitChildren(ctx); - } - - /* So far, this only exists in Python so it hasn't been moved to - * CodeGenerationVisitor. However, if another input or output language has a - * set implementation, should move this to the shared visitor. */ - visitSet_literal(ctx) { - ctx.type = this.Types._array; - ctx.indentDepth = this.findIndentDepth(ctx) + 1; - this.requiredImports[9] = true; - let args = []; - const list = ctx.testlist_comp(); - this.testForComprehension(list); - let join; - if (list) { - // Sets of 1 item is the same as the item itself, but keep parens for math - if (list.children.length === 1) { - return this.returnParenthesis(this.visit(list.children[0])); - } - const visitedChildren = list.children.map((child) => { - return this.visit(child); - }); - const visitedElements = visitedChildren.filter((arg) => { - return arg !== ','; - }); - if (ctx.type.argsTemplate) { // NOTE: not currently being used anywhere. - args = visitedElements.map((arg, index) => { - const last = !visitedElements[index + 1]; - return ctx.type.argsTemplate.bind(this.getState())(arg, ctx.indentDepth, last); + + /* So far, this only exists in Python so it hasn't been moved to + * CodeGenerationVisitor. However, if another input or output language has a + * set implementation, should move this to the shared visitor. */ + visitSet_literal(ctx) { + ctx.type = this.Types._array; + ctx.indentDepth = this.findIndentDepth(ctx) + 1; + this.requiredImports[9] = true; + let args = []; + const list = ctx.testlist_comp(); + this.testForComprehension(list); + let join; + if (list) { + // Sets of 1 item is the same as the item itself, but keep parens for math + if (list.children.length === 1) { + return this.returnParenthesis(this.visit(list.children[0])); + } + const visitedChildren = list.children.map((child) => { + return this.visit(child); }); - join = ''; - } else { - args = visitedElements; - join = ', '; - } - } - if (ctx.type.template) { - return ctx.type.template(args.join(join), ctx.indentDepth); - } - return this.returnSet(args, ctx); - } - - visitStringAtom(ctx) { - ctx.type = this.Types._string; - this.requiredImports[ctx.type.code] = true; - // Pass the original argument type to the template, not the casted type. - const type = ctx.originalType === undefined ? ctx.type : ctx.originalType; - - let result = this.visitChildren(ctx); - result = result.replace(/^([rubf]?[rubf]["']|'''|"""|'|")/gi, ''); - result = result.replace(/(["]{3}|["]|[']{3}|['])$/, ''); - return this.generateLiteral( - ctx, ctx.type, [result, type.id], `'${result}'`, true - ); - } - - visitInteger_literal(ctx) { - return this.leafHelper(this.Types._long, ctx); - } - - visitOct_literal(ctx) { - return this.leafHelper(this.Types._octal, ctx); - } - - visitHex_literal(ctx) { - return this.leafHelper(this.Types._hex, ctx); - } - - visitBin_literal(ctx) { - return this.leafHelper(this.Types._bin, ctx); - } - - visitFloat_literal(ctx) { - return this.leafHelper(this.Types._decimal, ctx); - } - - visitBoolean_literal(ctx) { - return this.leafHelper(this.Types._bool, ctx); - } - - visitNone_literal(ctx) { - return this.leafHelper(this.Types._null, ctx); - } - - visitExpr_stmt(ctx) { - if ( - ('assign_stmt' in ctx && ctx.assign_stmt() !== null) || - ('augassign' in ctx && ctx.augassign() !== null) || - ('annassign' in ctx && ctx.annassign() !== null) - ) { - throw new BsonTranspilersUnimplementedError( - 'Assignment not yet implemented' + const visitedElements = visitedChildren.filter((arg) => { + return arg !== ','; + }); + if (ctx.type.argsTemplate) { + // NOTE: not currently being used anywhere. + args = visitedElements.map((arg, index) => { + const last = !visitedElements[index + 1]; + return ctx.type.argsTemplate.bind(this.getState())( + arg, + ctx.indentDepth, + last + ); + }); + join = ''; + } else { + args = visitedElements; + join = ', '; + } + } + if (ctx.type.template) { + return ctx.type.template(args.join(join), ctx.indentDepth); + } + return this.returnSet(args, ctx); + } + + visitStringAtom(ctx) { + ctx.type = this.Types._string; + this.requiredImports[ctx.type.code] = true; + // Pass the original argument type to the template, not the casted type. + const type = ctx.originalType === undefined ? ctx.type : ctx.originalType; + + let result = this.visitChildren(ctx); + result = result.replace(/^([rubf]?[rubf]["']|'''|"""|'|")/gi, ''); + result = result.replace(/(["]{3}|["]|[']{3}|['])$/, ''); + return this.generateLiteral( + ctx, + ctx.type, + [result, type.id], + `'${result}'`, + true ); } - return this.visitChildren(ctx); - } - visitFactor(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitInteger_literal(ctx) { + return this.leafHelper(this.Types._long, ctx); } - // For the expression "+1", set the type to the child's type. - const op = this.visit(ctx.children[0]); - const factor = this.visit(ctx.factor()); - ctx.type = this.findTypedNode(ctx.factor()).type; - if (this.Syntax.unary.template) { - return this.Syntax.unary.template( - op, - factor - ); + visitOct_literal(ctx) { + return this.leafHelper(this.Types._octal, ctx); } - return `${op}${factor}`; - } - visitTerm(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitHex_literal(ctx) { + return this.leafHelper(this.Types._hex, ctx); } - const args = ctx.children.map((n) => this.visit(n)); - if (this.Syntax.binary.template) { - return this.Syntax.binary.template(args); - } - return this.visitChildren(ctx); - } - visitPower(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitBin_literal(ctx) { + return this.leafHelper(this.Types._bin, ctx); } - const lhs = this.visit(ctx.atom()); - const rhs = this.visit(ctx.factor()); - if (this.Syntax.binary.template) { - return this.Syntax.binary.template([lhs, '**', rhs]); + + visitFloat_literal(ctx) { + return this.leafHelper(this.Types._decimal, ctx); } - return `${lhs} ** ${rhs}`; - } - visitAnd_test(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitBoolean_literal(ctx) { + return this.leafHelper(this.Types._bool, ctx); } - const children = ctx.not_test().map((t) => ( this.visit(t) )); - if (this.Syntax.and) { - return this.Syntax.and.template(children); + + visitNone_literal(ctx) { + return this.leafHelper(this.Types._null, ctx); } - return children.join(' and '); - } - visitOr_test(ctx) { - if (ctx.getChildCount() === 1) { + visitExpr_stmt(ctx) { + if ( + ('assign_stmt' in ctx && ctx.assign_stmt() !== null) || + ('augassign' in ctx && ctx.augassign() !== null) || + ('annassign' in ctx && ctx.annassign() !== null) + ) { + throw new BsonTranspilersUnimplementedError( + 'Assignment not yet implemented' + ); + } return this.visitChildren(ctx); } - const children = ctx.and_test().map((t) => (this.visit(t))); - if (this.Syntax.or) { - return this.Syntax.or.template(children); + + visitFactor(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + // For the expression "+1", set the type to the child's type. + const op = this.visit(ctx.children[0]); + const factor = this.visit(ctx.factor()); + + ctx.type = this.findTypedNode(ctx.factor()).type; + if (this.Syntax.unary.template) { + return this.Syntax.unary.template(op, factor); + } + return `${op}${factor}`; } - return children.join(' or '); - } - visitNot_test(ctx) { - if (ctx.getChildCount() === 1) { + visitTerm(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + const args = ctx.children.map((n) => this.visit(n)); + if (this.Syntax.binary.template) { + return this.Syntax.binary.template(args); + } return this.visitChildren(ctx); } - const child = this.visit(ctx.children[1]); - if (this.Syntax.not) { - return this.Syntax.not.template(child); + + visitPower(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + const lhs = this.visit(ctx.atom()); + const rhs = this.visit(ctx.factor()); + if (this.Syntax.binary.template) { + return this.Syntax.binary.template([lhs, '**', rhs]); + } + return `${lhs} ** ${rhs}`; } - } - returnComparison(ctx) { - let skip = false; - return ctx.children.reduce((str, e, i, arr) => { - if (skip) { // Skip for 'in' statements because swallows rhs - skip = false; - return str; + visitAnd_test(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); } - if (i === arr.length - 1) { // Always visit the last element - return `${str}${this.visit(e)}`; + const children = ctx.not_test().map((t) => this.visit(t)); + if (this.Syntax.and) { + return this.Syntax.and.template(children); } - if (i % 2 === 0) { // Only ops - return str; + return children.join(' and '); + } + + visitOr_test(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); } - const op = this.visit(e); - if (op === '==' || op === '!=' || op === 'is' || op === 'isnot') { - skip = true; - if (this.Syntax.equality) { - return `${str}${this.Syntax.equality.template( - this.visit(arr[i - 1]), op, this.visit(arr[i + 1]))}`; - } - return `${str} === ${this.visit(arr[i - 1])} ${op} ${this.visit(arr[i + 1])}`; + const children = ctx.and_test().map((t) => this.visit(t)); + if (this.Syntax.or) { + return this.Syntax.or.template(children); } - if (op === 'in' || op === 'notin') { - skip = true; - if (this.Syntax.in) { - return `${str}${this.Syntax.in.template.bind(this.state)( - this.visit(arr[i - 1]), op, this.visit(arr[i + 1]))}`; - } - return `${str} ${this.visit(arr[i - 1])} ${op} ${this.visit(arr[i + 1])}`; + return children.join(' or '); + } + + visitNot_test(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); } - return `${str}${this.visit(arr[i - 1])} ${op} `; - }, ''); - } + const child = this.visit(ctx.children[1]); + if (this.Syntax.not) { + return this.Syntax.not.template(child); + } + } - visitComparison(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + returnComparison(ctx) { + let skip = false; + return ctx.children.reduce((str, e, i, arr) => { + if (skip) { + // Skip for 'in' statements because swallows rhs + skip = false; + return str; + } + if (i === arr.length - 1) { + // Always visit the last element + return `${str}${this.visit(e)}`; + } + if (i % 2 === 0) { + // Only ops + return str; + } + const op = this.visit(e); + if (op === '==' || op === '!=' || op === 'is' || op === 'isnot') { + skip = true; + if (this.Syntax.equality) { + return `${str}${this.Syntax.equality.template( + this.visit(arr[i - 1]), + op, + this.visit(arr[i + 1]) + )}`; + } + return `${str} === ${this.visit(arr[i - 1])} ${op} ${this.visit( + arr[i + 1] + )}`; + } + if (op === 'in' || op === 'notin') { + skip = true; + if (this.Syntax.in) { + return `${str}${this.Syntax.in.template.bind(this.state)( + this.visit(arr[i - 1]), + op, + this.visit(arr[i + 1]) + )}`; + } + return `${str} ${this.visit(arr[i - 1])} ${op} ${this.visit( + arr[i + 1] + )}`; + } + return `${str}${this.visit(arr[i - 1])} ${op} `; + }, ''); } - return this.returnComparison(ctx); - } - visitIndexAccess(ctx) { - if (ctx.getChildCount() === 1) { - return this.visitChildren(ctx); + visitComparison(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); + } + return this.returnComparison(ctx); } - throw new BsonTranspilersUnimplementedError('Indexing not currently supported'); - } - - /* - * - * Process Methods - * - */ - - processint(ctx) { - return this.generateNumericClass(ctx); - } - - processfloat(ctx) { - return this.generateNumericClass(ctx); - } - - processInt64(ctx) { - return this.generateNumericClass(ctx); - } - - processfrom_native(ctx) { - ctx.type = this.Types.BSONRegExp; - const symbolType = this.Symbols.Regex; - - const argList = this.getArguments(ctx); - if (argList.length !== 1) { - throw new BsonTranspilersArgumentError('RegExp.from_native requires one argument'); - } - const pythonFlags = { - 256: '', 2: 'i', 128: '', 4: 'l', 8: 'm', 16: 's', 64: 'x' - }; - const native = this.skipFakeNodesDown(this.getArgumentAt(ctx, 0)); - const args = this.findPatternAndFlags(native, pythonFlags, this.Syntax.bsonRegexFlags); - - return this.generateCall( - ctx, symbolType, args, 'Regex', - `(${args[0]}${args[1] ? ', ' + args[1] : ''})` - ); - } - - processcompile(ctx) { - ctx.type = this.Types._regex; - const pythonFlags = { - 256: '', 2: 'i', 128: '', 4: '', 8: 'm', 16: '', 64: '' - }; - const args = this.findPatternAndFlags(ctx, pythonFlags, this.Syntax.regexFlags); - return this.generateLiteral(ctx, ctx.type, args, 'RegExp'); - } - - processRegex(ctx) { - return this.generateBSONRegex(ctx, this.Types.Regex, this.Symbols.Regex); - } - - processCode(ctx) { - return this.generateBSONCode(ctx, this.Types.Code, this.Symbols.Code, true); - } - - processdatetime(ctx) { - ctx.type = this.Types.Date; - ctx.wasNew = true; // Always true for non-js - const symbolType = this.Symbols.datetime; - let date = null; - - const argsList = this.getArguments(ctx); - if (argsList.length !== 0) { - if (argsList.length < 3) { - throw new BsonTranspilersArgumentError( - `Wrong number of arguments to datetime: needs at at least 3, got ${ - argsList.length}` - ); + + visitIndexAccess(ctx) { + if (ctx.getChildCount() === 1) { + return this.visitChildren(ctx); } + throw new BsonTranspilersUnimplementedError( + 'Indexing not currently supported' + ); + } - try { - this.checkArguments(symbolType.args, argsList, 'datetime'); - } catch (e) { + /* + * + * Process Methods + * + */ + + processint(ctx) { + return this.generateNumericClass(ctx); + } + + processfloat(ctx) { + return this.generateNumericClass(ctx); + } + + processInt64(ctx) { + return this.generateNumericClass(ctx); + } + + processfrom_native(ctx) { + ctx.type = this.Types.BSONRegExp; + const symbolType = this.Symbols.Regex; + + const argList = this.getArguments(ctx); + if (argList.length !== 1) { throw new BsonTranspilersArgumentError( - `Invalid argument to datetime: requires no args or up to 7 numbers. ${ - e.message}` + 'RegExp.from_native requires one argument' ); } + const pythonFlags = { + 256: '', + 2: 'i', + 128: '', + 4: 'l', + 8: 'm', + 16: 's', + 64: 'x', + }; + const native = this.skipFakeNodesDown(this.getArgumentAt(ctx, 0)); + const args = this.findPatternAndFlags( + native, + pythonFlags, + this.Syntax.bsonRegexFlags + ); + + return this.generateCall( + ctx, + symbolType, + args, + 'Regex', + `(${args[0]}${args[1] ? ', ' + args[1] : ''})` + ); + } + + processcompile(ctx) { + ctx.type = this.Types._regex; + const pythonFlags = { + 256: '', + 2: 'i', + 128: '', + 4: '', + 8: 'm', + 16: '', + 64: '', + }; + const args = this.findPatternAndFlags( + ctx, + pythonFlags, + this.Syntax.regexFlags + ); + return this.generateLiteral(ctx, ctx.type, args, 'RegExp'); + } + + processRegex(ctx) { + return this.generateBSONRegex(ctx, this.Types.Regex, this.Symbols.Regex); + } + + processCode(ctx) { + return this.generateBSONCode( + ctx, + this.Types.Code, + this.Symbols.Code, + true + ); + } + + processdatetime(ctx) { + ctx.type = this.Types.Date; + ctx.wasNew = true; // Always true for non-js + const symbolType = this.Symbols.datetime; + let date = null; + + const argsList = this.getArguments(ctx); + if (argsList.length !== 0) { + if (argsList.length < 3) { + throw new BsonTranspilersArgumentError( + `Wrong number of arguments to datetime: needs at at least 3, got ${argsList.length}` + ); + } - const argvals = argsList.map((k) => { - let v; try { - v = parseInt(k.getText(), 10); + this.checkArguments(symbolType.args, argsList, 'datetime'); } catch (e) { - throw new BsonTranspilersRuntimeError( - `Unable to convert datetime argument to integer: ${k.getText()}` + throw new BsonTranspilersArgumentError( + `Invalid argument to datetime: requires no args or up to 7 numbers. ${e.message}` ); } - if (isNaN(v)) { - throw new BsonTranspilersRuntimeError( - `Unable to convert datetime argument to integer: ${k.getText()}` + + const argvals = argsList.map((k) => { + let v; + try { + v = parseInt(k.getText(), 10); + } catch (e) { + throw new BsonTranspilersRuntimeError( + `Unable to convert datetime argument to integer: ${k.getText()}` + ); + } + if (isNaN(v)) { + throw new BsonTranspilersRuntimeError( + `Unable to convert datetime argument to integer: ${k.getText()}` + ); + } + return v; + }); + /* month is 0-based in JS, 1-based in everything else (afaict) */ + argvals[1]--; + /* date is 1900-based in JS, 0-based in python */ + argvals[0] -= 1900; + try { + date = new Date(Date.UTC(...argvals)); + } catch (e) { + throw new BsonTranspilersInternalError( + `Unable to construct date from arguments: ${e.message}` ); } - return v; - }); - /* month is 0-based in JS, 1-based in everything else (afaict) */ - argvals[1]--; - /* date is 1900-based in JS, 0-based in python */ - argvals[0] -= 1900; - try { - date = new Date(Date.UTC(...argvals)); - } catch (e) { - throw new BsonTranspilersInternalError( - `Unable to construct date from arguments: ${e.message}` - ); } - } - const dargs = `Date(${date - ? this.Types._string.template(date.toUTCString()) - : ''})`; - return this.generateCall( - ctx, symbolType, [date, false], '', dargs, false, true - ); - } - - processObjectIdfrom_datetime(ctx) { - return this.generateObjectIdFromTime(ctx); - } - - processBinary() { - throw new BsonTranspilersUnimplementedError('Binary type not supported'); - } - - /* - * - * Helper Methods - * - */ - - findPatternAndFlags(ctx, pythonFlags, targetFlags) { - let pattern; - - const symbolType = this.Symbols.re.attr.compile; - const argList = this.getArguments(ctx); - const args = this.checkArguments(symbolType.args, argList, symbolType.id, symbolType.namedArgs); - - // Compile regex without flags - const raw = this.getArgumentAt(ctx, 0).getText(); - let str = raw.replace(/^([rubf]?[rubf]["']|'''|"""|'|")/gi, ''); - str = str.replace(/(["]{3}|["]|[']{3}|['])$/, ''); - const input = `new RegExp(${raw.substr(-1)}${str}${raw.substr(-1)})`; - try { - const sandbox = { - RegExp: RegExp - }; - const regexobj = vm.runInContext('__result = ' + input, vm.createContext(sandbox)); - pattern = regexobj.source; - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); + const dargs = `Date(${ + date ? this.Types._string.template(date.toUTCString()) : '' + })`; + return this.generateCall( + ctx, + symbolType, + [date, false], + '', + dargs, + false, + true + ); } - // Convert flags - if (args.length === 1) { - return [pattern, targetFlags.u]; + processObjectIdfrom_datetime(ctx) { + return this.generateObjectIdFromTime(ctx); } - let flagsArg = argList[1]; - flagsArg = this.skipFakeNodesDown(this.checkNamedArgs( - [this.Types._integer], flagsArg, symbolType.namedArgs - )[1]); - let visited; - if ('expr' in flagsArg.parentCtx) { // combine bitwise flags - visited = flagsArg.xor_expr().map(f => this.visit(f)); - } else { - visited = [this.visit(flagsArg)]; + processBinary() { + throw new BsonTranspilersUnimplementedError('Binary type not supported'); } - const translated = visited - .map(f => pythonFlags[f]) - .filter(f => f !== undefined); + /* + * + * Helper Methods + * + */ - if (visited.indexOf('256') === -1) { // default is unicode without re.A - translated.push('u'); - } + findPatternAndFlags(ctx, pythonFlags, targetFlags) { + let pattern; - const target = translated - .map(m => targetFlags[m]) - .filter(f => f !== undefined); + const symbolType = this.Symbols.re.attr.compile; + const argList = this.getArguments(ctx); + const args = this.checkArguments( + symbolType.args, + argList, + symbolType.id, + symbolType.namedArgs + ); - const flags = target.sort().join(''); - return [pattern, flags]; - } + // Compile regex without flags + const raw = this.getArgumentAt(ctx, 0).getText(); + let str = raw.replace(/^([rubf]?[rubf]["']|'''|"""|'|")/gi, ''); + str = str.replace(/(["]{3}|["]|[']{3}|['])$/, ''); + const input = `new RegExp(${raw.substr(-1)}${str}${raw.substr(-1)})`; + try { + const sandbox = { + RegExp: RegExp, + }; + const regexobj = vm.runInContext( + '__result = ' + input, + vm.createContext(sandbox) + ); + pattern = regexobj.source; + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + // Convert flags + if (args.length === 1) { + return [pattern, targetFlags.u]; + } - /** - * Want to throw unimplemented for comprehensions instead of reference errors. - * @param {ParserRuleContext} ctx - */ - testForComprehension(ctx) { - if (ctx === null || ctx === undefined) { - return; + let flagsArg = argList[1]; + flagsArg = this.skipFakeNodesDown( + this.checkNamedArgs( + [this.Types._integer], + flagsArg, + symbolType.namedArgs + )[1] + ); + let visited; + if ('expr' in flagsArg.parentCtx) { + // combine bitwise flags + visited = flagsArg.xor_expr().map((f) => this.visit(f)); + } else { + visited = [this.visit(flagsArg)]; + } + + const translated = visited + .map((f) => pythonFlags[f]) + .filter((f) => f !== undefined); + + if (visited.indexOf('256') === -1) { + // default is unicode without re.A + translated.push('u'); + } + + const target = translated + .map((m) => targetFlags[m]) + .filter((f) => f !== undefined); + + const flags = target.sort().join(''); + return [pattern, flags]; } - if ( - ('comp_for' in ctx && ctx.comp_for() !== null) || + + /** + * Want to throw unimplemented for comprehensions instead of reference errors. + * @param {ParserRuleContext} ctx + */ + testForComprehension(ctx) { + if (ctx === null || ctx === undefined) { + return; + } + if ( + ('comp_for' in ctx && ctx.comp_for() !== null) || ('comp_if' in ctx && ctx.comp_if() !== null) - ) { - throw new BsonTranspilersUnimplementedError( - 'Comprehensions not yet implemented' - ); + ) { + throw new BsonTranspilersUnimplementedError( + 'Comprehensions not yet implemented' + ); + } } - } - - getParentUntil(ctx, name, steps) { - steps = steps === undefined ? 0 : steps; - let res = ctx; - let found = false; - const stack = []; - while (res !== undefined && res !== null && !found) { - if (name in res) { - const goal = res[name](); - if (goal === stack[stack.length - 1]) { - found = true; + + getParentUntil(ctx, name, steps) { + steps = steps === undefined ? 0 : steps; + let res = ctx; + let found = false; + const stack = []; + while (res !== undefined && res !== null && !found) { + if (name in res) { + const goal = res[name](); + if (goal === stack[stack.length - 1]) { + found = true; + break; + } + } + stack.push(res); + res = res.parentCtx; + } + return found ? stack[stack.length - 1 - steps] : false; + } + + skipFakeNodesDown(ctx, goal) { + let res = ctx; + while (res.children !== undefined && res.children.length === 1) { + res = res.children[0]; + if (goal && goal in res) { + res = res[goal](); break; } } - stack.push(res); - res = res.parentCtx; - } - return found ? stack[stack.length - 1 - steps] : false; - } - - skipFakeNodesDown(ctx, goal) { - let res = ctx; - while (res.children !== undefined && res.children.length === 1) { - res = res.children[0]; - if (goal && goal in res) { - res = res[goal](); - break; - } - } - if (res.children === undefined) { - return res.parentCtx; - } - return res; - } - - skipFakeNodesUp(ctx, goal) { - let res = ctx.parentCtx; - while (res !== undefined && res !== null && res.children !== undefined && - res.children.length === 1) { - if (goal && goal in res) { - res = res[goal](); - break; - } - res = res.parentCtx; - } - return res; - } - - /** - * Takes in the constructor name of a node and returns a human-readable - * node name. Used for error reporting, must be defined by all visitors. - * - * @param {String} name - * @return {String} - */ - renameNode(name) { - return name ? name.replace('_stmt', '') : 'Expression'; - } - - /** - * If a named argument is passed in, then check against the 'namedArgs' array - * instead of positionally. - * - * @param {Array} expected - * @param {ParserRuleContext} node - * @param {Object} namedArgs - * @return {Array} - */ - checkNamedArgs(expected, node, namedArgs) { - const child = this.skipFakeNodesDown(node); - if (namedArgs && 'test' in child && child.test().length > 1) { - const name = child.test()[0].getText(); - const value = child.test()[1]; - const expectedType = namedArgs[name]; - if (expectedType === undefined) { - throw new BsonTranspilersArgumentError( - `Unknown named argument '${name}'` - ); + if (res.children === undefined) { + return res.parentCtx; } - return [expectedType.type, value]; - } - return [expected, node]; - } - - /* - * - * Accessor Functions. - * - * These MUST be defined by every visitor. Each function is a wrapper around - * a tree node. They are required so that the CodeGenerationVisitor and the - * Generators can access tree elements without needing to know which tree they - * are visiting or the ANTLR name of the node. - * - */ - - getArguments(ctx) { - const trailer = ctx.paren_trailer(); - if (!('arglist' in trailer) || trailer.arglist() === null) { - return []; + return res; + } + + skipFakeNodesUp(ctx, goal) { + let res = ctx.parentCtx; + while ( + res !== undefined && + res !== null && + res.children !== undefined && + res.children.length === 1 + ) { + if (goal && goal in res) { + res = res[goal](); + break; + } + res = res.parentCtx; + } + return res; + } + + /** + * Takes in the constructor name of a node and returns a human-readable + * node name. Used for error reporting, must be defined by all visitors. + * + * @param {String} name + * @return {String} + */ + renameNode(name) { + return name ? name.replace('_stmt', '') : 'Expression'; + } + + /** + * If a named argument is passed in, then check against the 'namedArgs' array + * instead of positionally. + * + * @param {Array} expected + * @param {ParserRuleContext} node + * @param {Object} namedArgs + * @return {Array} + */ + checkNamedArgs(expected, node, namedArgs) { + const child = this.skipFakeNodesDown(node); + if (namedArgs && 'test' in child && child.test().length > 1) { + const name = child.test()[0].getText(); + const value = child.test()[1]; + const expectedType = namedArgs[name]; + if (expectedType === undefined) { + throw new BsonTranspilersArgumentError( + `Unknown named argument '${name}'` + ); + } + return [expectedType.type, value]; + } + return [expected, node]; + } + + /* + * + * Accessor Functions. + * + * These MUST be defined by every visitor. Each function is a wrapper around + * a tree node. They are required so that the CodeGenerationVisitor and the + * Generators can access tree elements without needing to know which tree they + * are visiting or the ANTLR name of the node. + * + */ + + getArguments(ctx) { + const trailer = ctx.paren_trailer(); + if (!('arglist' in trailer) || trailer.arglist() === null) { + return []; + } + return trailer.arglist().argument(); } - return trailer.arglist().argument(); - } - getArgumentAt(ctx, i) { - return this.getArguments(ctx)[i]; - } + getArgumentAt(ctx, i) { + return this.getArguments(ctx)[i]; + } - getFunctionCallName(ctx) { - return ctx.atom(); - } + getFunctionCallName(ctx) { + return ctx.atom(); + } - getIfIdentifier(ctx) { - if ('identifier' in ctx) { - return ctx.identifier(); + getIfIdentifier(ctx) { + if ('identifier' in ctx) { + return ctx.identifier(); + } + return ctx; + } + + getAttributeLHS(ctx) { + return ctx.atom(); } - return ctx; - } - getAttributeLHS(ctx) { - return ctx.atom(); - } + getAttributeRHS(ctx) { + return ctx.dot_trailer().identifier(); + } - getAttributeRHS(ctx) { - return ctx.dot_trailer().identifier(); - } + getList(ctx) { + if (!('testlist_comp' in ctx) || !ctx.testlist_comp()) { + return []; + } + return ctx.testlist_comp().test(); + } - getList(ctx) { - if (!('testlist_comp' in ctx) || !ctx.testlist_comp()) { + getArray(ctx) { + return this.skipFakeNodesDown(ctx, 'array_literal'); + } + + getObject(ctx) { + return this.skipFakeNodesDown(ctx, 'object_literal'); + } + + getKeyValueList(ctx) { + if ('dictorsetmaker' in ctx && ctx.dictorsetmaker()) { + const properties = ctx.dictorsetmaker().test(); + return properties + .map((key, i) => { + if (i % 2 === 0) { + return [key, properties[i + 1]]; + } + return null; + }) + .filter((k) => k !== null); + } return []; } - return ctx.testlist_comp().test(); - } - - getArray(ctx) { - return this.skipFakeNodesDown(ctx, 'array_literal'); - } - - getObject(ctx) { - return this.skipFakeNodesDown(ctx, 'object_literal'); - } - - getKeyValueList(ctx) { - if ('dictorsetmaker' in ctx && ctx.dictorsetmaker()) { - const properties = ctx.dictorsetmaker().test(); - return properties - .map((key, i) => { - if (i % 2 === 0) { - return [ - key, - properties[i + 1] - ]; - } - return null; - }) - .filter((k) => (k !== null)); - } - return []; - } - - getKeyStr(k) { - return removeQuotes(this.visit(k[0])); - } - - getValue(k) { - return k[1]; - } - - isSubObject(ctx) { - return this.getParentUntil(ctx.parentCtx, 'dictorsetmaker', 1); - } - - getParentKeyStr(ctx) { // TODO: fix for long list - // For a given sub document, get its key. - const topNode = this.getParentUntil(ctx.parentCtx, 'dictorsetmaker', 1); - const objNode = topNode.parentCtx; - const index = objNode.test().indexOf(topNode); - const keyNode = objNode.test()[index - 1]; - const key = this.visit(keyNode); - return removeQuotes(key); - } - - getObjectChild(ctx) { - return this.skipFakeNodesDown(ctx); - } -}; + getKeyStr(k) { + return removeQuotes(this.visit(k[0])); + } + + getValue(k) { + return k[1]; + } + + isSubObject(ctx) { + return this.getParentUntil(ctx.parentCtx, 'dictorsetmaker', 1); + } + + getParentKeyStr(ctx) { + // TODO: fix for long list + // For a given sub document, get its key. + const topNode = this.getParentUntil(ctx.parentCtx, 'dictorsetmaker', 1); + const objNode = topNode.parentCtx; + const index = objNode.test().indexOf(topNode); + const keyNode = objNode.test()[index - 1]; + const key = this.visit(keyNode); + return removeQuotes(key); + } + + getObjectChild(ctx) { + return this.skipFakeNodesDown(ctx); + } + }; diff --git a/packages/bson-transpilers/codegeneration/ruby/Generator.js b/packages/bson-transpilers/codegeneration/ruby/Generator.js index f4765399bf2..6da035c02b8 100644 --- a/packages/bson-transpilers/codegeneration/ruby/Generator.js +++ b/packages/bson-transpilers/codegeneration/ruby/Generator.js @@ -2,8 +2,9 @@ /* * Class for handling edge cases for ruby code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/rust/Generator.js b/packages/bson-transpilers/codegeneration/rust/Generator.js index 7904a87117b..b6657b036ac 100644 --- a/packages/bson-transpilers/codegeneration/rust/Generator.js +++ b/packages/bson-transpilers/codegeneration/rust/Generator.js @@ -2,8 +2,9 @@ /* * Class for handling edge cases for rust code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/shell/Generator.js b/packages/bson-transpilers/codegeneration/shell/Generator.js index 7784cc713b0..7296aa84393 100644 --- a/packages/bson-transpilers/codegeneration/shell/Generator.js +++ b/packages/bson-transpilers/codegeneration/shell/Generator.js @@ -2,8 +2,9 @@ /* * Class for handling edge cases for shell code generation. Defines "emit" methods. */ -module.exports = (Visitor) => class Generator extends Visitor { - constructor() { - super(); - } -}; +module.exports = (Visitor) => + class Generator extends Visitor { + constructor() { + super(); + } + }; diff --git a/packages/bson-transpilers/codegeneration/shell/Visitor.js b/packages/bson-transpilers/codegeneration/shell/Visitor.js index 9ba45dd6b10..57656a3afea 100644 --- a/packages/bson-transpilers/codegeneration/shell/Visitor.js +++ b/packages/bson-transpilers/codegeneration/shell/Visitor.js @@ -4,7 +4,7 @@ const vm = require('vm'); const bson = require('bson'); const { BsonTranspilersRuntimeError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('../../helper/error'); /** @@ -15,136 +15,140 @@ const { * specific visitor. * @return {Visitor} - Input-language specific visitor. */ -module.exports = (JavascriptVisitor) => class Visitor extends JavascriptVisitor { - constructor() { - super(); - } - - processNumberLong(ctx) { - return this.generateNumericClass(ctx); - } - executeJavascript(input) { - const sandbox = { - RegExp: RegExp, - DBRef: bson.DBRef, - Map: bson.Map, - MaxKey: bson.MaxKey, - MinKey: bson.MinKey, - ObjectId: bson.ObjectId, - BSONSymbol: bson.BSONSymbol, - Timestamp: bson.Timestamp, - Decimal128: bson.Decimal128, - Long: bson.Long, - Int32: bson.Int32, - Double: bson.Double, - Code: function(c, s) { - return new bson.Code(c, s); - }, - NumberDecimal: function(s) { - if (s === undefined) { - s = '0'; - } - return bson.Decimal128.fromString(s.toString()); - }, - NumberInt: function(s) { - return parseInt(s, 10); - }, - NumberLong: function(v) { - if (v === undefined) { - v = 0; - } - return bson.Long.fromNumber(v); - }, - ISODate: function(s) { - return new Date(s); - }, - Date: function(s) { - const args = Array.from(arguments); +module.exports = (JavascriptVisitor) => + class Visitor extends JavascriptVisitor { + constructor() { + super(); + } - if (args.length === 1) { + processNumberLong(ctx) { + return this.generateNumericClass(ctx); + } + executeJavascript(input) { + const sandbox = { + RegExp: RegExp, + DBRef: bson.DBRef, + Map: bson.Map, + MaxKey: bson.MaxKey, + MinKey: bson.MinKey, + ObjectId: bson.ObjectId, + BSONSymbol: bson.BSONSymbol, + Timestamp: bson.Timestamp, + Decimal128: bson.Decimal128, + Long: bson.Long, + Int32: bson.Int32, + Double: bson.Double, + Code: function (c, s) { + return new bson.Code(c, s); + }, + NumberDecimal: function (s) { + if (s === undefined) { + s = '0'; + } + return bson.Decimal128.fromString(s.toString()); + }, + NumberInt: function (s) { + return parseInt(s, 10); + }, + NumberLong: function (v) { + if (v === undefined) { + v = 0; + } + return bson.Long.fromNumber(v); + }, + ISODate: function (s) { return new Date(s); - } + }, + Date: function (s) { + const args = Array.from(arguments); - return new Date(Date.UTC(...args)); - }, - Buffer: Buffer, - __result: {} - }; - const res = vm.runInContext('__result = ' + input, vm.createContext(sandbox)); - return res; - } + if (args.length === 1) { + return new Date(s); + } - /** - * BinData needs extra processing because we need to check that the arg is - * valid base64. - * - * TODO: figure out if it ever makes sense to support Binary. - */ - processBinData() { - throw new BsonTranspilersUnimplementedError('BinData type not supported'); - } - - /** - * Needs preprocessing because must be executed in javascript. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processNumberDecimal(ctx) { - ctx.type = this.Types.NumberDecimal; - const symbolType = this.Symbols.NumberDecimal; - let decstr; - try { - decstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); - } catch (error) { - throw new BsonTranspilersRuntimeError(error.message); - } - if ('emitNumberDecimal' in this) { - return this.emitNumberDecimal(ctx, decstr); + return new Date(Date.UTC(...args)); + }, + Buffer: Buffer, + __result: {}, + }; + const res = vm.runInContext( + '__result = ' + input, + vm.createContext(sandbox) + ); + return res; } - const lhs = symbolType.template - ? symbolType.template() - : this.returnFunctionCallLhs(symbolType.code, 'NumberDecimal'); - - const res = this.returnFunctionCallLhsRhs(lhs, [decstr], symbolType, lhs); - return this.Syntax.new.template - ? this.Syntax.new.template(res, false, ctx.type.code) - : this.returnFunctionCallLhsRhs(lhs, [decstr], symbolType, lhs); - } + /** + * BinData needs extra processing because we need to check that the arg is + * valid base64. + * + * TODO: figure out if it ever makes sense to support Binary. + */ + processBinData() { + throw new BsonTranspilersUnimplementedError('BinData type not supported'); + } - /** - * Needs preprocessing because ISODate is treated exactly like Date, but always - * is invoked as an object. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processISODate(ctx) { - ctx.wasNew = true; - return this.processDate(ctx); - } + /** + * Needs preprocessing because must be executed in javascript. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processNumberDecimal(ctx) { + ctx.type = this.Types.NumberDecimal; + const symbolType = this.Symbols.NumberDecimal; + let decstr; + try { + decstr = this.executeJavascript(`new ${ctx.getText()}`).toString(); + } catch (error) { + throw new BsonTranspilersRuntimeError(error.message); + } + if ('emitNumberDecimal' in this) { + return this.emitNumberDecimal(ctx, decstr); + } + const lhs = symbolType.template + ? symbolType.template() + : this.returnFunctionCallLhs(symbolType.code, 'NumberDecimal'); - /** - * Also accepts no arguments. - * - * @param {FuncCallExpressionContext} ctx - * @return {String} - */ - processCode(ctx) { - ctx.type = this.Types.Code; - const symbolType = this.Symbols.Code; - const lhs = symbolType.template - ? symbolType.template() - : this.returnFunctionCallLhs(symbolType.code, 'Code'); + const res = this.returnFunctionCallLhsRhs(lhs, [decstr], symbolType, lhs); - if (this.getArguments(ctx).length === 0) { - const code = this.returnFunctionCallLhsRhs(lhs, [], symbolType, lhs); return this.Syntax.new.template - ? this.Syntax.new.template(code, false, ctx.type.code) - : code; + ? this.Syntax.new.template(res, false, ctx.type.code) + : this.returnFunctionCallLhsRhs(lhs, [decstr], symbolType, lhs); + } + + /** + * Needs preprocessing because ISODate is treated exactly like Date, but always + * is invoked as an object. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processISODate(ctx) { + ctx.wasNew = true; + return this.processDate(ctx); } - return this.generateBSONCode(ctx, ctx.type, symbolType, true); - } -}; + /** + * Also accepts no arguments. + * + * @param {FuncCallExpressionContext} ctx + * @return {String} + */ + processCode(ctx) { + ctx.type = this.Types.Code; + const symbolType = this.Symbols.Code; + const lhs = symbolType.template + ? symbolType.template() + : this.returnFunctionCallLhs(symbolType.code, 'Code'); + + if (this.getArguments(ctx).length === 0) { + const code = this.returnFunctionCallLhsRhs(lhs, [], symbolType, lhs); + return this.Syntax.new.template + ? this.Syntax.new.template(code, false, ctx.type.code) + : code; + } + + return this.generateBSONCode(ctx, ctx.type, symbolType, true); + } + }; diff --git a/packages/bson-transpilers/compile-symbol-table.js b/packages/bson-transpilers/compile-symbol-table.js index bb957bd5183..99d67c67ec0 100644 --- a/packages/bson-transpilers/compile-symbol-table.js +++ b/packages/bson-transpilers/compile-symbol-table.js @@ -45,7 +45,7 @@ const loadSymbolTable = (dir, inputLang, outputLang) => { 'syntax_templates.yaml', 'import_templates.yaml', path.join(inputLang, 'types.yaml'), - path.join(inputLang, 'symbols.yaml') + path.join(inputLang, 'symbols.yaml'), ]; const contents = files.reduce((str, file) => { if (!fs.existsSync(path.join('symbols', file))) { @@ -60,7 +60,18 @@ const loadSymbolTable = (dir, inputLang, outputLang) => { const loadAll = () => { const dir = path.join(__dirname, 'lib', 'symbol-table'); const inputLangs = ['shell']; - const outputLangs = ['java', 'shell', 'python', 'csharp', 'javascript', 'object', 'ruby', 'go', 'rust', 'php']; + const outputLangs = [ + 'java', + 'shell', + 'python', + 'csharp', + 'javascript', + 'object', + 'ruby', + 'go', + 'rust', + 'php', + ]; if (!fs.existsSync(dir)) { fs.mkdirSync(dir); } diff --git a/packages/bson-transpilers/config/error.json b/packages/bson-transpilers/config/error.json index 21bbf0e22d1..7f4224edcfa 100644 --- a/packages/bson-transpilers/config/error.json +++ b/packages/bson-transpilers/config/error.json @@ -26,4 +26,4 @@ "Range": { "message": "Value is out of range" } -} \ No newline at end of file +} diff --git a/packages/bson-transpilers/download-antlr.js b/packages/bson-transpilers/download-antlr.js index 9f35302b77e..e01c21b5c09 100644 --- a/packages/bson-transpilers/download-antlr.js +++ b/packages/bson-transpilers/download-antlr.js @@ -16,4 +16,6 @@ if (fs.existsSync(outputFile)) { console.info('downloading antlr'); -https.get(downloadUrl, (response) => response.pipe(fs.createWriteStream(outputFile))); +https.get(downloadUrl, (response) => + response.pipe(fs.createWriteStream(outputFile)) +); diff --git a/packages/bson-transpilers/helper/format.js b/packages/bson-transpilers/helper/format.js index 09793cfb6d8..c71bd8cf4ec 100644 --- a/packages/bson-transpilers/helper/format.js +++ b/packages/bson-transpilers/helper/format.js @@ -5,13 +5,11 @@ * @param {String} str * @returns {String} */ -const doubleQuoteStringify = function(str) { +const doubleQuoteStringify = function (str) { let newStr = str.toString(); if ( - ( - newStr.charAt(0) === '\'' && newStr.charAt(newStr.length - 1) === '\'' - ) || + (newStr.charAt(0) === "'" && newStr.charAt(newStr.length - 1) === "'") || (newStr.charAt(0) === '"' && newStr.charAt(newStr.length - 1) === '"') ) { newStr = newStr.substr(1, newStr.length - 2); @@ -26,13 +24,11 @@ const doubleQuoteStringify = function(str) { * @param {String} str * @returns {String} */ -const singleQuoteStringify = function(str) { +const singleQuoteStringify = function (str) { let newStr = str.toString(); if ( - ( - newStr.charAt(0) === '\'' && newStr.charAt(newStr.length - 1) === '\'' - ) || + (newStr.charAt(0) === "'" && newStr.charAt(newStr.length - 1) === "'") || (newStr.charAt(0) === '"' && newStr.charAt(newStr.length - 1) === '"') ) { newStr = str.substr(1, newStr.length - 2); @@ -47,12 +43,12 @@ const singleQuoteStringify = function(str) { * @param {String} str * @returns {String} */ -const removeQuotes = function(str) { +const removeQuotes = function (str) { let newStr = str.toString(); if ( (newStr.charAt(0) === '"' && newStr.charAt(newStr.length - 1) === '"') || - (newStr.charAt(0) === '\'' && newStr.charAt(newStr.length - 1) === '\'') + (newStr.charAt(0) === "'" && newStr.charAt(newStr.length - 1) === "'") ) { newStr = newStr.substr(1, newStr.length - 2); } @@ -63,5 +59,5 @@ const removeQuotes = function(str) { module.exports = { doubleQuoteStringify, singleQuoteStringify, - removeQuotes + removeQuotes, }; diff --git a/packages/bson-transpilers/index.js b/packages/bson-transpilers/index.js index 800963245c4..53473321636 100644 --- a/packages/bson-transpilers/index.js +++ b/packages/bson-transpilers/index.js @@ -3,12 +3,13 @@ const antlr4 = require('antlr4'); const ECMAScriptLexer = require('./lib/antlr/ECMAScriptLexer.js'); const ECMAScriptParser = require('./lib/antlr/ECMAScriptParser.js'); -const JavascriptANTLRVisitor = require('./lib/antlr/ECMAScriptVisitor').ECMAScriptVisitor; +const JavascriptANTLRVisitor = + require('./lib/antlr/ECMAScriptVisitor').ECMAScriptVisitor; const ErrorListener = require('./codegeneration/ErrorListener.js'); const { BsonTranspilersInternalError, - BsonTranspilersUnimplementedError + BsonTranspilersUnimplementedError, } = require('./helper/error'); const yaml = require('js-yaml'); @@ -68,8 +69,16 @@ const getTranspiler = (loadTree, visitor, generator, symbols) => { /* Object validation. If the symbol table is missing any of these elements, * then an error should be thrown. Can be empty, but must exist. */ - ['BasicTypes', 'BsonTypes', 'NativeTypes', 'SymbolTypes', 'BsonTypes', - 'BsonSymbols', 'NativeSymbols', 'SymbolTypes'].map((k) => { + [ + 'BasicTypes', + 'BsonTypes', + 'NativeTypes', + 'SymbolTypes', + 'BsonTypes', + 'BsonSymbols', + 'NativeSymbols', + 'SymbolTypes', + ].map((k) => { if (!(k in doc)) { throw new BsonTranspilersInternalError( `Invalid Symbol Table: missing ${k}` @@ -82,15 +91,14 @@ const getTranspiler = (loadTree, visitor, generator, symbols) => { Symbols: Object.assign({}, doc.BsonSymbols, doc.NativeSymbols), Types: Object.assign({}, doc.BasicTypes, doc.BsonTypes, doc.NativeTypes), Syntax: doc.Syntax, - Imports: doc.Imports + Imports: doc.Imports, }); const compile = (input, idiomatic, driverSyntax) => { try { const tree = loadTree(input, transpiler.startRule); - transpiler.idiomatic = idiomatic === undefined ? - transpiler.idiomatic : - idiomatic; + transpiler.idiomatic = + idiomatic === undefined ? transpiler.idiomatic : idiomatic; if (!driverSyntax) { transpiler.clearImports(); transpiler.clearDeclarations(); @@ -113,19 +121,24 @@ const getTranspiler = (loadTree, visitor, generator, symbols) => { const result = {}; Object.keys(input).map((k) => { - result[k] = (k === 'options' || k === 'exportMode') ? input[k] : compile(input[k], idiomatic, true); + result[k] = + k === 'options' || k === 'exportMode' + ? input[k] + : compile(input[k], idiomatic, true); }); - if (!('options' in result) || - !('uri' in result.options) || - !('database' in result.options) || - !('collection' in result.options)) { + if ( + !('options' in result) || + !('uri' in result.options) || + !('database' in result.options) || + !('collection' in result.options) + ) { throw new BsonTranspilersInternalError( 'Missing required metadata to generate drivers syntax' ); } if (!('aggregation' in result) && !('filter' in result)) { throw new BsonTranspilersInternalError( - 'Need to pass \'aggregation\' or \'filter\' when compiling with driver syntax' + "Need to pass 'aggregation' or 'filter' when compiling with driver syntax" ); } if (!transpiler.Syntax.driver) { @@ -138,7 +151,7 @@ const getTranspiler = (loadTree, visitor, generator, symbols) => { compile: compile, getImports: (mode, driverSyntax) => { return transpiler.getImports(mode, driverSyntax); - } + }, }; }; @@ -146,60 +159,78 @@ module.exports = { shell: { java: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getJavaGenerator, shelljavasymbols ), python: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getPythonGenerator, shellpythonsymbols ), csharp: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getCsharpGenerator, shellcsharpsymbols ), javascript: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getJavascriptGenerator, shelljavascriptsymbols ), object: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getObjectGenerator, shellobjectsymbols ), ruby: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getRubyGenerator, shellrubysymbols ), go: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getGoGenerator, shellgosymbols ), rust: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getRustGenerator, shellrustsymbols ), php: getTranspiler( loadJSTree, - getShellVisitor(getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor))), + getShellVisitor( + getJavascriptVisitor(getCodeGenerationVisitor(JavascriptANTLRVisitor)) + ), getPhpGenerator, shellphpsymbols - ) + ), }, getTree: { - shell: loadJSTree - } + shell: loadJSTree, + }, }; diff --git a/packages/bson-transpilers/printers/ECMAScriptListener.js b/packages/bson-transpilers/printers/ECMAScriptListener.js index 6acec5be5d1..357603bc6ab 100644 --- a/packages/bson-transpilers/printers/ECMAScriptListener.js +++ b/packages/bson-transpilers/printers/ECMAScriptListener.js @@ -11,10 +11,12 @@ function Listener() { return this; } -Listener.prototype = Object.create(ECMAScriptListener.ECMAScriptListener.prototype); +Listener.prototype = Object.create( + ECMAScriptListener.ECMAScriptListener.prototype +); Listener.prototype.constructor = Listener; -Listener.prototype.buildAST = function(tree, ruleNames) { +Listener.prototype.buildAST = function (tree, ruleNames) { ruleNames = ruleNames || null; let s = antlr4.tree.Trees.getNodeText(tree, ruleNames); @@ -27,7 +29,7 @@ Listener.prototype.buildAST = function(tree, ruleNames) { return s; } - const res = {type: s, node: tree.constructor.name}; + const res = { type: s, node: tree.constructor.name }; if (c > 0) { s = this.buildAST(tree.getChild(0), ruleNames); diff --git a/packages/bson-transpilers/symbols/csharp/templates.yaml b/packages/bson-transpilers/symbols/csharp/templates.yaml index f050db2c781..a9619aaac4e 100644 --- a/packages/bson-transpilers/symbols/csharp/templates.yaml +++ b/packages/bson-transpilers/symbols/csharp/templates.yaml @@ -1,983 +1,1011 @@ # C# Templates Templates: - # Misc - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: '' - y: '' - g: '' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: '' - u: '' - # Syntax - DriverTemplate: &DriverTemplate null - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; + # Misc + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: '' + y: '' + g: '' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: '' + u: '' + # Syntax + DriverTemplate: &DriverTemplate null + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; + } + else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} == ${rhs}`; + } + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let str = '!='; + if (op.includes('!') || op.includes('not')) { + str = '=='; + } + return `${rhs}.indexOf(${lhs}) ${str} -1` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `!${arg}`; + } + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; } - else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} == ${rhs}`; + const rhs = arr[i + 1]; + switch(op) { + case '//': + return `Math.floor(${s}, ${rhs})`; + case '**': + return `Math.pow(${s}, ${rhs})`; + default: + return `${s} ${op} ${rhs}`; } - return `${lhs} ${op} ${rhs}`; - } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let str = '!='; - if (op.includes('!') || op.includes('not')) { - str = '=='; - } - return `${rhs}.indexOf(${lhs}) ${str} -1` - } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `!${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `Math.floor(${s}, ${rhs})`; - case '**': - return `Math.pow(${s}, ${rhs})`; - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosSyntaxTemplate: &EosSyntaxTemplate null + EofSyntaxTemplate: &EofSyntaxTemplate null + NewTemplate: !!js/function &NewSyntaxTemplate > + (expr, skip, code) => { + // Add classes that don't use "new" to array + // So far: [Symbol, Decimal128/NumberDecimal, Long/NumberLong, MinKey, MaxKey, Date.now, Double, Int32, Number, Date] + noNew = [111, 112, 106, 107, 108, 200.1, 104, 105, 2, 200]; + if (skip || (code && noNew.indexOf(code) !== -1)) { + return expr; + } + return `new ${expr}`; + } + # BSON Object Type templates + CodeTypeTemplate: &CodeTypeTemplate null + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + flags = flags === '' ? '' : `(?${flags})`; + // Double-quote stringify + const str = flags + pattern; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosSyntaxTemplate: &EosSyntaxTemplate null - EofSyntaxTemplate: &EofSyntaxTemplate null - NewTemplate: &NewSyntaxTemplate !!js/function > - (expr, skip, code) => { - // Add classes that don't use "new" to array - // So far: [Symbol, Decimal128/NumberDecimal, Long/NumberLong, MinKey, MaxKey, Date.now, Double, Int32, Number, Date] - noNew = [111, 112, 106, 107, 108, 200.1, 104, 105, 2, 200]; - if (skip || (code && noNew.indexOf(code) !== -1)) { - return expr; - } - return `new ${expr}`; + return `Regex("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null + DecimalTypeTemplate: &DecimalTypeTemplate null + LongBasicTypeTemplate: &LongBasicTypeTemplate null + HexTypeTemplate: &HexTypeTemplate null + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal) => { + literal = literal.replace(/[oO]+/g, '0') + return parseInt(literal, 8).toString() + } + NumericTypeTemplate: &NumericTypeTemplate null + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + const indent = '\n' + ' '.repeat(depth); + const initialIndent = '\n' + ' '.repeat(depth-1); + if (literal === '') { + return 'new BsonArray()' } - # BSON Object Type templates - CodeTypeTemplate: &CodeTypeTemplate null - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { + + return `new BsonArray${initialIndent}{${literal}${initialIndent}}`; + } + ArrayTypeArgsTemplate: !!js/function &ArrayTypeArgsTemplate > + (arg, depth, last) => { + depth++; + const indent = '\n' + ' '.repeat(depth); + const arr = arg.split(', new').join(`, ${indent}new`) + + return last ? `${indent}${arr}` : `${indent}${arr},`; + } + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'BsonNull.Value'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'BsonUndefined.Value'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => { + if (literal === '') { + return `new BsonDocument()`; + } + return literal; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return 'new BsonDocument()'; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const initialIndent = '\n' + ' '.repeat(depth-1); + const doubleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); + newStr = str.substr(1, str.length - 2); } return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - flags = flags === '' ? '' : `(?${flags})`; - // Double-quote stringify - const str = flags + pattern; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `Regex("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null - DecimalTypeTemplate: &DecimalTypeTemplate null - LongBasicTypeTemplate: &LongBasicTypeTemplate null - HexTypeTemplate: &HexTypeTemplate null - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal) => { - literal = literal.replace(/[oO]+/g, '0') - return parseInt(literal, 8).toString() - } - NumericTypeTemplate: &NumericTypeTemplate null - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - const indent = '\n' + ' '.repeat(depth); - const initialIndent = '\n' + ' '.repeat(depth-1); - if (literal === '') { - return 'new BsonArray()' - } - return `new BsonArray${initialIndent}{${literal}${initialIndent}}`; + if (args.length === 1) { + return `new BsonDocument(${doubleStringify(args[0][0])}, ${args[0][1]})`; } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate !!js/function > - (arg, depth, last) => { - depth++; - const indent = '\n' + ' '.repeat(depth); - const arr = arg.split(', new').join(`, ${indent}new`) - return last ? `${indent}${arr}` : `${indent}${arr},`; - } - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'BsonNull.Value'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'BsonUndefined.Value'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => { - if (literal === '') { - return `new BsonDocument()`; - } - return literal; - } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return 'new BsonDocument()'; - } - depth++; - const indent = '\n' + ' '.repeat(depth); - const initialIndent = '\n' + ' '.repeat(depth-1); - const doubleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } + const pairs = args.map((pair) => { + return `${indent}{ ${doubleStringify(pair[0])}, ${pair[1]} }`; + }).join(', '); - if (args.length === 1) { - return `new BsonDocument(${doubleStringify(args[0][0])}, ${args[0][1]})`; - } + return `new BsonDocument${initialIndent}{${pairs}${initialIndent}}` + } + # BSON Object Method templates + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => { + return `${lhs}.Code`; + } + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => { + return `${lhs}.Scope`; + } + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + # Since in python, generated from attr access instead of func call, add () in template. + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => { + return `${lhs}.ToString()`; + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => { + return ''; + } + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => { + return `${lhs}.Equals`; + } + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (lhs, arg) => { + if (arg.indexOf('new') === 0) { + arg = arg.replace(/new /g, '') + } + return `(new ${arg})`; + } - const pairs = args.map((pair) => { - return `${indent}{ ${doubleStringify(pair[0])}, ${pair[1]} }`; - }).join(', '); + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => { + return `${lhs}.Timestamp`; + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + (lhs) => { + return ''; + } + BinaryValueTemplate: !!js/function &BinaryValueTemplate > + (lhs) => { + return `${lhs}.ToString`; + } + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: !!js/function &BinaryLengthTemplate > + () => { + return ''; + } + BinaryLengthArgsTemplate: !!js/function &BinaryLengthArgsTemplate > + (lhs) => { + return `${lhs}.Bytes.Length`; + } + BinaryToStringTemplate: !!js/function &BinaryToStringTemplate > + (lhs) => { + return `${lhs}.ToString`; + } + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (lhs) => { + return `${lhs}.SubType`; + } + BinarySubtypeArgsTemplate: !!js/function &BinarySubtypeArgsTemplate > + () => { + return ''; + } + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}.DatabaseName`; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + () => { + return ''; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}.CollectionName`; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + () => { + return ''; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}.Id`; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + () => { + return ''; + } + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => { + return `${lhs} == `; + } + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `(int) ${lhs}`; + } + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => { + return ''; + } + LongToStringTemplate: !!js/function &LongToStringTemplate > + (lhs) => { + return lhs; + } + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => { + return `(double) ${lhs}`; + } + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => { + return ''; + } + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => { + return `${lhs} +`; + } + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (lhs) => { + return `${lhs} -`; + } + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (lhs) => { + return `${lhs} *`; + } + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => { + return `${lhs} /`; + } + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => { + return `${lhs} %`; + } + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => { + return `${lhs} &`; + } + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => { + return `${lhs} |`; + } + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => { + return `${lhs} ^`; + } + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => { + return `${lhs} <<`; + } + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => { + return `${lhs} >>`; + } + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => { + return `${lhs} - `; + } + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (lhs, arg) => { + return arg; + } + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (lhs) => { + return `${lhs}`; + } + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => { + return ' % 2 == 1'; + } + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (lhs) => { + return `${lhs} == 0`; + } + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => { + return ''; + } + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (lhs) => { + return `${lhs} < 0`; + } + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => { + return ''; + } + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => { + return '-'; + } + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => { + return `${lhs}`; + } + LongNotTemplate: !!js/function &LongNotTemplate > + () => { + return '~'; + } + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => { + return `${lhs}`; + } + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `(float) ${lhs}`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs} >> 32`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs} & 0x0000ffff`; + } + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + (lhs) => { + return `${lhs}.ToString`; + } + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => { + return `${lhs}.Equals`; + } + TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `${lhs}.ToUniversalTime`; + } + TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `${lhs}.Increment`; + } + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + (lhs) => { + return ''; + } + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `${lhs}.ToUniversalTime()`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `${lhs}.Increment`; + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => { + return `new DateTime(1970, 1, 1).AddSeconds(${lhs}.Timestamp)`; + } + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => { + return ''; + } + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (lhs) => { + return `${lhs}.CompareTo`; + } + TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => { + return `${lhs} != `; + } + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => { + return `${lhs} > `; + } + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >= `; + } + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => { + return `${lhs} < `; + } + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <= `; + } + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (lhs) => { + return `${lhs}`; + } + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + () => { + return ''; + } + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (lhs) => { + return `${lhs}`; + } + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + () => { + return ''; + } + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (lhs) => { + return `${lhs}`; + } + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + () => { + return ''; + } + # Symbol Templates + CodeSymbolTemplate: + !!js/function &CodeSymbolTemplate > # Also has process method + () => { + return 'BsonJavaScript'; + } + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (lhs, code, scope) => { + // Double quote stringify + let newStr = code === undefined ? '' : code; + const str = newStr; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + return (scope === undefined) ? `(${code})` : `WithScope(${code}, ${scope})`; + } + ObjectIdSymbolTemplate: !!js/function &ObjectIdSymbolTemplate > + () => { + return 'ObjectId'; + } + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, str) => { + if (!str || str.length === 0) { + return '()'; + } + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + BinarySymbolTemplate: !!js/function &BinarySymbolTemplate > + () => { + return 'BsonBinaryData'; + } + BinarySymbolArgsTemplate: !!js/function &BinarySymbolArgsTemplate > + (lhs, bytes, type) => { + const str = bytes; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + bytes = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - return `new BsonDocument${initialIndent}{${pairs}${initialIndent}}` - } - # BSON Object Method templates - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => { - return `${lhs}.Code`; - } - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => { - return `${lhs}.Scope`; - } - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - # Since in python, generated from attr access instead of func call, add () in template. - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.ToString()`; - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => { - return `${lhs}.Equals`; - } - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (lhs, arg) => { - if (arg.indexOf('new') === 0) { - arg = arg.replace(/new /g, '') - } - return `(new ${arg})`; - } + if (type === null) { + return `(System.Text.Encoding.ASCII.GetBytes(${bytes}))`; + } + return `(System.Text.Encoding.ASCII.GetBytes(${bytes}), ${type})`; + } + BinarySymbolSubtypeDefaultTemplate: + !!js/function &BinarySymbolSubtypeDefaultTemplate > + () => { + return 'BsonBinarySubType.Binary'; + } + BinarySymbolSubtypeFunctionTemplate: + !!js/function &BinarySymbolSubtypeFunctionTemplate > + () => { + return 'BsonBinarySubType.Function'; + } + BinarySymbolSubtypeByteArrayTemplate: + !!js/function &BinarySymbolSubtypeByteArrayTemplate > + () => { + return 'BsonBinarySubType.OldBinary'; + } + BinarySymbolSubtypeUuidOldTemplate: + !!js/function &BinarySymbolSubtypeUuidOldTemplate > + () => { + return 'BsonBinarySubType.UuidLegacy'; + } + BinarySymbolSubtypeUuidTemplate: + !!js/function &BinarySymbolSubtypeUuidTemplate > + () => { + return 'BsonBinarySubType.UuidStandard'; + } + BinarySymbolSubtypeMd5Template: + !!js/function &BinarySymbolSubtypeMd5Template > + () => { + return 'BsonBinarySubType.MD5'; + } + BinarySymbolSubtypeUserDefinedTemplate: + !!js/function &BinarySymbolSubtypeUserDefinedTemplate > + () => { + return 'BsonBinarySubType.UserDefined'; + } + DBRefSymbolTemplate: !!js/function &DBRefSymbolTemplate > + () => { + return 'MongoDBRef'; + } + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return ''; + } + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => { - return `${lhs}.Timestamp`; - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - (lhs) => { - return ''; - } - BinaryValueTemplate: &BinaryValueTemplate !!js/function > - (lhs) => { - return `${lhs}.ToString`; - } - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate !!js/function > - () => { - return ''; - } - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate !!js/function > - (lhs) => { - return `${lhs}.Bytes.Length`; - } - BinaryToStringTemplate: &BinaryToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.ToString`; - } - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (lhs) => { - return `${lhs}.SubType`; - } - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}.DatabaseName`; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}.CollectionName`; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}.Id`; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - () => { - return ''; - } - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} == `; - } - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `(int) ${lhs}`; - } - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => { - return ''; - } - LongToStringTemplate: &LongToStringTemplate !!js/function > - (lhs) => { - return lhs; - } - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => { - return `(double) ${lhs}`; - } - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => { - return ''; - } - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => { - return `${lhs} +`; - } - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (lhs) => { - return `${lhs} -`; - } - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (lhs) => { - return `${lhs} *`; - } - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => { - return `${lhs} /`; - } - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => { - return `${lhs} %`; - } - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => { - return `${lhs} &`; - } - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => { - return `${lhs} |`; - } - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => { - return `${lhs} ^`; - } - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => { - return `${lhs} <<`; - } - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => { - return `${lhs} >>`; - } - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => { - return `${lhs} - `; - } - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (lhs, arg) => { - return arg; - } - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => { - return ' % 2 == 1'; - } - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (lhs) => { - return `${lhs} == 0`; - } - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => { - return ''; - } - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (lhs) => { - return `${lhs} < 0`; - } - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => { - return ''; - } - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => { - return '-'; - } - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - LongNotTemplate: &LongNotTemplate !!js/function > - () => { - return '~'; - } - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `(float) ${lhs}`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs} >> 32`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs} & 0x0000ffff`; - } - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.ToString`; - } - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => { - return `${lhs}.Equals`; - } - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.ToUniversalTime`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.Increment`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - (lhs) => { - return ''; - } - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `${lhs}.ToUniversalTime()`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `${lhs}.Increment`; + if (type === '_hex') { + return `Convert.ToDouble(${arg})`; } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => { - return `new DateTime(1970, 1, 1).AddSeconds(${lhs}.Timestamp)`; + if (type === '_string') { + return `Convert.ToDouble(${arg})`; } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => { - return ''; - } - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (lhs) => { - return `${lhs}.CompareTo`; - } - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} != `; - } - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} > `; - } - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >= `; - } - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} < `; - } - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <= `; - } - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - () => { - return ''; - } - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - () => { - return ''; - } - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - () => { - return ''; - } - # Symbol Templates - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > # Also has process method - () => { - return 'BsonJavaScript'; - } - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (lhs, code, scope) => { - // Double quote stringify - let newStr = code === undefined ? '' : code; - const str = newStr; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - return (scope === undefined) ? `(${code})` : `WithScope(${code}, ${scope})`; - } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function > - () => { - return 'ObjectId'; - } - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, str) => { - if (!str || str.length === 0) { - return '()'; - } - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - } - BinarySymbolTemplate: &BinarySymbolTemplate !!js/function > - () => { - return 'BsonBinaryData'; - } - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate !!js/function > - (lhs, bytes, type) => { - const str = bytes; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - bytes = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - if (type === null) { - return `(System.Text.Encoding.ASCII.GetBytes(${bytes}))`; - } - return `(System.Text.Encoding.ASCII.GetBytes(${bytes}), ${type})`; - } - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate !!js/function > - () => { - return 'BsonBinarySubType.Binary'; - } - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate !!js/function > - () => { - return 'BsonBinarySubType.Function'; + if (type === '_decimal') { + return arg; } - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate !!js/function > - () => { - return 'BsonBinarySubType.OldBinary'; - } - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate !!js/function > - () => { - return 'BsonBinarySubType.UuidLegacy'; - } - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate !!js/function > - () => { - return 'BsonBinarySubType.UuidStandard'; - } - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template !!js/function > - () => { - return 'BsonBinarySubType.MD5'; - } - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate !!js/function > - () => { - return 'BsonBinarySubType.UserDefined'; - } - DBRefSymbolTemplate: &DBRefSymbolTemplate !!js/function > - () => { - return 'MongoDBRef'; - } - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return ''; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_hex') { - return `Convert.ToDouble(${arg})`; - } - if (type === '_string') { - return `Convert.ToDouble(${arg})`; - } - - if (type === '_decimal') { - return arg; - } + return `${Math.round(arg).toFixed(1)}`; + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return ''; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; - return `${Math.round(arg).toFixed(1)}`; - } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return ''; + if (type === '_hex' || type === '_decimal' || type === '_string') { + return `Convert.ToInt32(${arg})`; } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - - if (type === '_hex' || type === '_decimal' || type === '_string') { - return `Convert.ToInt32(${arg})`; - } - return arg; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return ''; - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg) => { - if (!arg || arg.length === 0) { - arg = '0'; - } - if (arg.indexOf('\'') === 0 || arg.indexOf('"') === 0) { - return `Convert.ToInt64(${arg})`; - } - return `${arg}L`; - } - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => { - return 'Int64.MaxValue'; - } - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => { - return 'Int64.MinValue'; - } - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - (lhs) => { - return '0L'; - } - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - (lhs) => { - return '1L'; - } - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - (lhs) => { - return '-1L'; - } - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > # Also has process method - () => { - return ''; - } - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}L`; - } - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - () => { - return 'Convert.ToInt64'; - } - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - if (arg2) { - return `(${arg1}, ${arg2})` - } - return `(${arg1}, 10)` - } - MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > - () => { - return 'BsonMinKey'; - } - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > - () => { - return '.Value'; - } - MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > - () => { - return 'BsonMaxKey'; - } - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > - () => { - return '.Value'; - } - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => { - return 'BsonTimestamp'; - } - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - if (typeof arg1 === 'undefined') { - return '(0, 0)' - } - return `(${arg1}, ${arg2})`; - } - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return ''; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate !!js/function > - (_, arg) => { - return arg; // no parens because generates as a string - } - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return 'BsonRegularExpression'; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - const doubleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - return `(${doubleStringify(pattern)}${flags ? ', ' + doubleStringify(flags) : ''})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (_, str) => { // just stringify + return arg; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return ''; + } + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg) => { + if (!arg || arg.length === 0) { + arg = '0'; + } + if (arg.indexOf('\'') === 0 || arg.indexOf('"') === 0) { + return `Convert.ToInt64(${arg})`; + } + return `${arg}L`; + } + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => { + return 'Int64.MaxValue'; + } + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => { + return 'Int64.MinValue'; + } + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + (lhs) => { + return '0L'; + } + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + (lhs) => { + return '1L'; + } + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + (lhs) => { + return '-1L'; + } + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: + !!js/function &LongSymbolFromBitsTemplate > # Also has process method + () => { + return ''; + } + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => { + return ''; + } + LongSymbolFromIntArgsTemplate: !!js/function &LongSymbolFromIntArgsTemplate > + (lhs, arg) => { + return `${arg}L`; + } + LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + () => { + return 'Convert.ToInt64'; + } + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (lhs, arg1, arg2) => { + if (arg2) { + return `(${arg1}, ${arg2})` + } + return `(${arg1}, 10)` + } + MinKeySymbolTemplate: !!js/function &MinKeySymbolTemplate > + () => { + return 'BsonMinKey'; + } + MinKeySymbolArgsTemplate: !!js/function &MinKeySymbolArgsTemplate > + () => { + return '.Value'; + } + MaxKeySymbolTemplate: !!js/function &MaxKeySymbolTemplate > + () => { + return 'BsonMaxKey'; + } + MaxKeySymbolArgsTemplate: !!js/function &MaxKeySymbolArgsTemplate > + () => { + return '.Value'; + } + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => { + return 'BsonTimestamp'; + } + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + if (typeof arg1 === 'undefined') { + return '(0, 0)' + } + return `(${arg1}, ${arg2})`; + } + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return ''; + } + SymbolSymbolArgsTemplate: !!js/function &SymbolSymbolArgsTemplate > + (_, arg) => { + return arg; // no parens because generates as a string + } + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return 'BsonRegularExpression'; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + const doubleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); } - return `.Parse("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - (lhs) => { - return `${lhs}.Parse`; - } - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.ToString`; - } - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # BSON Util Templates - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - (lhs) => { - return `new ${lhs}`; - } - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return `new ObjectId.GenerateNewId`; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (isNumber) { - return `(Convert.ToInt32(${arg}))`; - } - return `(${arg})`; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs) => { - return `new ${lhs}`; + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - # JS Symbol Templates - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return ''; + return `(${doubleStringify(pattern)}${flags ? ', ' + doubleStringify(flags) : ''})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (_, str) => { // just stringify + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `.Parse("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + (lhs) => { + return `${lhs}.Parse`; + } + Decimal128SymbolFromStringArgsTemplate: + !!js/function &Decimal128SymbolFromStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + Decimal128ToStringTemplate: !!js/function &Decimal128ToStringTemplate > + (lhs) => { + return `${lhs}.ToString`; + } + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # BSON Util Templates + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + (lhs) => { + return `new ${lhs}`; + } + ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return `new ObjectId.GenerateNewId`; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (isNumber) { + return `(Convert.ToInt32(${arg}))`; + } + return `(${arg})`; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs) => { + return `new ${lhs}`; + } + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + # JS Symbol Templates + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return ''; + } + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + + if (type === '_string') { + if (arg.indexOf('.') !== -1) { + return `float.Parse(${arg})` + } + return `int.Parse(${arg})`; } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - if (arg.indexOf('.') !== -1) { - return `float.Parse(${arg})` - } - return `int.Parse(${arg})`; - } + if (arg.indexOf('.') !== -1) { + return `(float) ${arg}` + } + return `(int) ${arg}`; + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'DateTime'; + } + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + let toStr = isString? '.ToString("ddd MMM dd yyyy HH\':\'mm\':\'ss UTC")' : ''; - if (arg.indexOf('.') !== -1) { - return `(float) ${arg}` - } - return `(int) ${arg}`; - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'DateTime'; + if (date === null) { + return `${lhs}.Now${toStr}`; } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - let toStr = isString? '.ToString("ddd MMM dd yyyy HH\':\'mm\':\'ss UTC")' : ''; - if (date === null) { - return `${lhs}.Now${toStr}`; - } - - const dateStr = [ - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds() - ].join(', '); + const dateStr = [ + date.getUTCFullYear(), + date.getUTCMonth() + 1, + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds() + ].join(', '); - return `new ${lhs}(${dateStr})${toStr}`; - } - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return 'DateTime.Now'; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - () => { - return ''; - } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > # Also has process method - () => { - return 'Regex'; - } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - const universal = ['using MongoDB.Bson;', 'using MongoDB.Driver;']; - const all = universal.concat(Object.values(args)); - return all.join('\n'); - } - DriverImportTemplate: &DriverImportTemplate null - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate !!js/function > - () => { - return 'using System.Text.RegularExpressions;'; - } - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate null - 101ImportTemplate: &101ImportTemplate null - 102ImportTemplate: &102ImportTemplate null - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - 107ImportTemplate: &107ImportTemplate null - 108ImportTemplate: &108ImportTemplate null - 109ImportTemplate: &109ImportTemplate null - 110ImportTemplate: &110ImportTemplate null - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate null - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate !!js/function > - () => { - return 'using System;'; - } - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + return `new ${lhs}(${dateStr})${toStr}`; + } + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return 'DateTime.Now'; + } + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + () => { + return ''; + } + RegExpSymbolTemplate: + !!js/function &RegExpSymbolTemplate > # Also has process method + () => { + return 'Regex'; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + const universal = ['using MongoDB.Bson;', 'using MongoDB.Driver;']; + const all = universal.concat(Object.values(args)); + return all.join('\n'); + } + DriverImportTemplate: &DriverImportTemplate null + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: !!js/function &8ImportTemplate > + () => { + return 'using System.Text.RegularExpressions;'; + } + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: &100ImportTemplate null + 101ImportTemplate: &101ImportTemplate null + 102ImportTemplate: &102ImportTemplate null + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + 107ImportTemplate: &107ImportTemplate null + 108ImportTemplate: &108ImportTemplate null + 109ImportTemplate: &109ImportTemplate null + 110ImportTemplate: &110ImportTemplate null + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: &112ImportTemplate null + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: !!js/function &200ImportTemplate > + () => { + return 'using System;'; + } + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/go/templates.yaml b/packages/bson-transpilers/symbols/go/templates.yaml index 1b19e613662..1422bb58263 100644 --- a/packages/bson-transpilers/symbols/go/templates.yaml +++ b/packages/bson-transpilers/symbols/go/templates.yaml @@ -18,393 +18,529 @@ # # ############################################# Templates: - ######## - # Misc # - ######## - - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: 'y' - g: 'g' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' - - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# - - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - const options = spec.options; - const uri = spec.options.uri - const filter = spec.filter || {}; - const exportMode = spec.exportMode; - delete spec.options; - delete spec.filter; - delete spec.exportMode; - - const indent = (depth) => ' '.repeat(depth) - - let driverMethod; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'DeleteMany'; - break; - case 'Update Query': - driverMethod = 'UpdateMany'; - break; - default: - driverMethod = 'Find'; - } + ######## + # Misc # + ######## - const comment = [] - .concat('// Requires the MongoDB Go Driver') - .concat('// https://go.mongodb.org/mongo-driver') - .join('\n'); + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: 'y' + g: 'g' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' - const connect = [] - .concat('ctx := context.TODO()') - .concat(this.declarations.length() > 0 ? `\n${this.declarations.toString()}\n` : '') - .concat('// Set client options') - .concat(`clientOptions := options.Client().ApplyURI("${uri}")`) - .concat('') - .concat('// Connect to MongoDB') - .concat('client, err := mongo.Connect(ctx, clientOptions)') - .concat('if err != nil {') - .concat(' log.Fatal(err)') - .concat('}') - .concat('defer func() {') - .concat(' if err := client.Disconnect(ctx); err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat('}()') - .join('\n'); + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - const coll = [] - .concat(`coll := client.Database("${options.database}").Collection("${options.collection}")`) - .join('\n'); + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + const options = spec.options; + const uri = spec.options.uri + const filter = spec.filter || {}; + const exportMode = spec.exportMode; + delete spec.options; + delete spec.filter; + delete spec.exportMode; - if ('aggregation' in spec) { - return [] - .concat(comment) - .concat(connect) - .concat('') - .concat('// Open an aggregation cursor') - .concat(`${coll}`) - .concat(`_, err = coll.Aggregate(ctx, ${spec.aggregation})`) - .concat('if err != nil {') - .concat(' log.Fatal(err)') - .concat('}') - .join('\n'); - } + const indent = (depth) => ' '.repeat(depth) + + let driverMethod; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'DeleteMany'; + break; + case 'Update Query': + driverMethod = 'UpdateMany'; + break; + default: + driverMethod = 'Find'; + } - const findOptions = [] - if (spec.project) - findOptions.push(`options.Find().SetProjection(${spec.project})`); - if (spec.sort) - findOptions.push(`options.Find().SetSort(${spec.sort})`); + const comment = [] + .concat('// Requires the MongoDB Go Driver') + .concat('// https://go.mongodb.org/mongo-driver') + .join('\n'); - const optsStr = findOptions.length > 0 ? `,\n${indent(1)}${findOptions.join(`,\n${indent(1)}`)}` : '' + const connect = [] + .concat('ctx := context.TODO()') + .concat(this.declarations.length() > 0 ? `\n${this.declarations.toString()}\n` : '') + .concat('// Set client options') + .concat(`clientOptions := options.Client().ApplyURI("${uri}")`) + .concat('') + .concat('// Connect to MongoDB') + .concat('client, err := mongo.Connect(ctx, clientOptions)') + .concat('if err != nil {') + .concat(' log.Fatal(err)') + .concat('}') + .concat('defer func() {') + .concat(' if err := client.Disconnect(ctx); err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat('}()') + .join('\n'); + const coll = [] + .concat(`coll := client.Database("${options.database}").Collection("${options.collection}")`) + .join('\n'); + + if ('aggregation' in spec) { return [] .concat(comment) .concat(connect) .concat('') + .concat('// Open an aggregation cursor') .concat(`${coll}`) - .concat(`_, err = coll.${driverMethod}(ctx, ${filter}${optsStr})`) + .concat(`_, err = coll.Aggregate(ctx, ${spec.aggregation})`) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .join('\n'); } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; - } - else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} == ${rhs}`; - } - return `${lhs} ${op} ${rhs}`; + + const findOptions = [] + if (spec.project) + findOptions.push(`options.Find().SetProjection(${spec.project})`); + if (spec.sort) + findOptions.push(`options.Find().SetSort(${spec.sort})`); + + const optsStr = findOptions.length > 0 ? `,\n${indent(1)}${findOptions.join(`,\n${indent(1)}`)}` : '' + + return [] + .concat(comment) + .concat(connect) + .concat('') + .concat(`${coll}`) + .concat(`_, err = coll.${driverMethod}(ctx, ${filter}${optsStr})`) + .concat('if err != nil {') + .concat(' log.Fatal(err)') + .concat('}') + .join('\n'); + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - this.declarations.addFunc([] - .concat(`var contains = func(elems bson.A, v interface{}) bool {`) - .concat(' for _, s := range elems {') - .concat(' if v == s {') - .concat(' return true') - .concat(' }') - .concat(' }') - .concat(' return false') - .concat('}') - .join('\n')); - let prefix = ''; - if (op.includes('!') || op.includes('not')) - prefix = '!'; - return `${prefix}contains(${rhs}, ${lhs})`; + else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} == ${rhs}`; } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => args.join(' && ') - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => args.join(' || ') - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => `!${arg}` - UnarySyntaxTemplate: &UnarySyntaxTemplate !!js/function > - (op, val) => { + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + this.declarations.addFunc([] + .concat(`var contains = func(elems bson.A, v interface{}) bool {`) + .concat(' for _, s := range elems {') + .concat(' if v == s {') + .concat(' return true') + .concat(' }') + .concat(' }') + .concat(' return false') + .concat('}') + .join('\n')); + let prefix = ''; + if (op.includes('!') || op.includes('not')) + prefix = '!'; + return `${prefix}contains(${rhs}, ${lhs})`; + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => args.join(' && ') + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => args.join(' || ') + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => `!${arg}` + UnarySyntaxTemplate: !!js/function &UnarySyntaxTemplate > + (op, val) => { + switch(op) { + case '+': + return val; + case '~': + return `!${val}`; + default: + return `${op}${val}`; + } + return `${op}${val}`; + } + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; + } + const rhs = arr[i + 1]; switch(op) { - case '+': - return val; - case '~': - return `!${val}`; + case '//': + return `${s} / ${rhs}` + case '**': + return `math.Pow(${s}, ${rhs})` default: - return `${op}${val}`; + return `${s} ${op} ${rhs}`; } - return `${op}${val}`; + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosTemplate: &EosSyntaxTemplate null # No args. End-of-line + EofTemplate: &EofSyntaxTemplate null # No args. End-of-file + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + // Double quote stringify + const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; + const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; + if (singleQuoted || doubleQuoted) + str = str.substr(1, str.length - 2); + return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + // Wrap string in double quotes + const doubleStringify = (str) => { + const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; + const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; + if (singleQuoted || doubleQuoted) + str = str.substr(1, str.length - 2); + return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `${s} / ${rhs}` - case '**': - return `math.Pow(${s}, ${rhs})` - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); + + const structParts = []; + structParts.push(`Pattern: ${doubleStringify(pattern)}`); + if (flags) + structParts.push(`Options: ${doubleStringify(flags)}`); + return `primitive.Regex{${structParts.join(", ")}}`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => literal.toLowerCase() + IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) + DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType + LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType + HexTypeTemplate: &HexTypeTemplate null # args: literal, argType + OctalTypeTemplate: &OctalTypeTemplate null # args: literal, argType + NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + if (literal === '') + return 'bson.A{}'; + return `bson.A{${literal}${closingIndent}}`; + } + ArrayTypeArgsTemplate: !!js/function &ArrayTypeArgsTemplate > + (arg, depth, last) => { + depth++; + const indent = '\n' + ' '.repeat(depth); + return `${indent}${arg},`; + } + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => 'primitive.Null{}' + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => 'primitive.Undefined{}' + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => `bson.D{${literal}}` + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + // If there are no args, then there is nothing for us to format + if (args.length === 0) + return ''; + + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + + // Indent every line of a string + const indentBlock = (string, count = 1, options = {}) => { + const { + indent = ' ', + includeEmptyLines = false + } = options; + + const regex = includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + return string.replace(regex, indent.repeat(count)); } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosTemplate: &EosSyntaxTemplate null # No args. End-of-line - EofTemplate: &EofSyntaxTemplate null # No args. End-of-file - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - // Double quote stringify + + // Wrap string in double quotes + const doubleStringify = (str) => { const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; if (singleQuoted || doubleQuoted) str = str.substr(1, str.length - 2); return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - // Wrap string in double quotes - const doubleStringify = (str) => { - const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; - const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; - if (singleQuoted || doubleQuoted) - str = str.substr(1, str.length - 2); - return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - const structParts = []; - structParts.push(`Pattern: ${doubleStringify(pattern)}`); - if (flags) - structParts.push(`Options: ${doubleStringify(flags)}`); - return `primitive.Regex{${structParts.join(", ")}}`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => literal.toLowerCase() - IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) - DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType - LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType - HexTypeTemplate: &HexTypeTemplate null # args: literal, argType - OctalTypeTemplate: &OctalTypeTemplate null # args: literal, argType - NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - if (literal === '') - return 'bson.A{}'; - return `bson.A{${literal}${closingIndent}}`; + // Check if a string is multiple lines i.e. has a break point + const isMultiline = (element) => /\r|\n/.exec(element) + + // Format element by go type + const fmt = (element) => { + const hash = { multiline: isMultiline(element) }; + const typeFormatters = { + 'bson.A': (el, hash) => isMultiline(el) ? indentBlock(`${indent}${el},${indent}`) : ` ${el}`, + 'bson.D': (el, hash) => isMultiline(el) ? indentBlock(`${indent}${el},${indent}`) : ` ${el}`, + default: (el, hash) => isMultiline(el) ? el : ` ${el}` + }; + hash.el = typeFormatters.default(element); + for (const type in typeFormatters) + if (element.startsWith(type)) { + hash.el = typeFormatters[type](element); + break; + } + return hash; } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate !!js/function > - (arg, depth, last) => { - depth++; - const indent = '\n' + ' '.repeat(depth); - return `${indent}${arg},`; + + // Get the {key, value} pair for the bson.D object + const getPairs = (args, sep = `,${indent}`) => { + const hash = { multiline: false } + hash.el = args.map((pair) => { + const fmtPair = fmt(pair[1]) + if (!hash.multiline && fmtPair.multiline) + hash.multiline = true + return `{${doubleStringify(pair[0])},${fmtPair.el}}` + }).join(sep) + return hash } - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => 'primitive.Null{}' - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => 'primitive.Undefined{}' - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => `bson.D{${literal}}` - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - // If there are no args, then there is nothing for us to format - if (args.length === 0) - return ''; - - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - - // Indent every line of a string - const indentBlock = (string, count = 1, options = {}) => { - const { - indent = ' ', - includeEmptyLines = false - } = options; - - const regex = includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; - return string.replace(regex, indent.repeat(count)); - } - // Wrap string in double quotes - const doubleStringify = (str) => { - const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; - const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; - if (singleQuoted || doubleQuoted) - str = str.substr(1, str.length - 2); - return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } + const pairs = getPairs(args); + const singleLine = args.length <= 1 && !pairs.multiline; + const prefix = singleLine ? '' : indent; + const suffix = singleLine ? '' : ',' + closingIndent; + return `${prefix}${pairs.el}${suffix}`; + } - // Check if a string is multiple lines i.e. has a break point - const isMultiline = (element) => /\r|\n/.exec(element) - - // Format element by go type - const fmt = (element) => { - const hash = { multiline: isMultiline(element) }; - const typeFormatters = { - 'bson.A': (el, hash) => isMultiline(el) ? indentBlock(`${indent}${el},${indent}`) : ` ${el}`, - 'bson.D': (el, hash) => isMultiline(el) ? indentBlock(`${indent}${el},${indent}`) : ` ${el}`, - default: (el, hash) => isMultiline(el) ? el : ` ${el}` - }; - hash.el = typeFormatters.default(element); - for (const type in typeFormatters) - if (element.startsWith(type)) { - hash.el = typeFormatters[type](element); - break; - } - return hash; - } + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: !!js/function &CodeSymbolTemplate > + () => 'primitive.CodeWithScope' + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (_, code, scope) => { + if (code === undefined) + return `{}`; - // Get the {key, value} pair for the bson.D object - const getPairs = (args, sep = `,${indent}`) => { - const hash = { multiline: false } - hash.el = args.map((pair) => { - const fmtPair = fmt(pair[1]) - if (!hash.multiline && fmtPair.multiline) - hash.multiline = true - return `{${doubleStringify(pair[0])},${fmtPair.el}}` - }).join(sep) - return hash - } + if (scope !== undefined) + scope = `Scope: ${scope}`; - const pairs = getPairs(args); - const singleLine = args.length <= 1 && !pairs.multiline; - const prefix = singleLine ? '' : indent; - const suffix = singleLine ? '' : ',' + closingIndent; - return `${prefix}${pairs.el}${suffix}`; - } + const singleQuoted = code.charAt(0) === '\'' && code.charAt(code.length - 1) === '\''; + const doubleQuoted = code.charAt(0) === '"' && code.charAt(code.length - 1) === '"'; + if (singleQuoted || doubleQuoted) + code = code.substr(1, code.length - 2); - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > - () => 'primitive.CodeWithScope' - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (_, code, scope) => { - if (code === undefined) - return `{}`; - - if (scope !== undefined) - scope = `Scope: ${scope}`; - - const singleQuoted = code.charAt(0) === '\'' && code.charAt(code.length - 1) === '\''; - const doubleQuoted = code.charAt(0) === '"' && code.charAt(code.length - 1) === '"'; - if (singleQuoted || doubleQuoted) - code = code.substr(1, code.length - 2); + code = `Code: primitive.JavaScript("${code.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + return (scope === undefined) ? `{${code}}` : `{${code}, ${scope}}`; + } + ObjectIdSymbolTemplate: !!js/function &ObjectIdSymbolTemplate > + () => '' + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (_, arg) => { + if (arg === undefined || arg === '') + return 'primitive.NewObjectID()'; - code = `Code: primitive.JavaScript("${code.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - return (scope === undefined) ? `{${code}}` : `{${code}, ${scope}}`; + // Double quote stringify + const singleQuoted = arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\''; + const doubleQuoted = arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"'; + if (singleQuoted || doubleQuoted) + arg = arg.substr(1, arg.length - 2); + arg = `"${arg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + this.declarations.addFunc([] + .concat('var objectIDFromHex = func(hex string) primitive.ObjectID {') + .concat(` objectID, err := primitive.ObjectIDFromHex(hex)`) + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return objectID') + .concat('}') + .join('\n')); + return `objectIDFromHex(${arg})` + } + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null + BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null + BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null + BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null + BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null + BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null + BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null + BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null + DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => '' + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + if (!arg) + arg = 0; + switch(type) { + case '_string': + this.declarations.addFunc([] + .concat('var parseFloat64 = func(str string) float64 {') + .concat(' f64, err := strconv.ParseFloat(str, 64)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return f64') + .concat('}') + .join('\n')); + return `parseFloat64(${arg})` + default: + return `float64(${arg})`; + } + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => '' + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + if (!arg) + arg = 0 + switch(type) { + case '_string': + this.declarations.addFunc([] + .concat('var parseInt32 = func(str string) int32 {') + .concat('i64, err := strconv.ParseInt(str, 10, 32)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return int32(i64)') + .concat('}') + .join('\n')); + return `parseInt32(${arg})`; + default: + return `int32(${arg})`; + } + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => '' + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + if (!arg) + arg = 0 + switch(type) { + case '_string': + this.declarations.addFunc([] + .concat('var parseInt = func(str string) int64 {') + .concat(' i64, err := strconv.ParseInt(str, 10, 64)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return i64') + .concat('}') + .join('\n')); + return `parseInt64(${arg})`; + default: + return `int64(${arg})`; } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function > - () => '' - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (_, arg) => { - if (arg === undefined || arg === '') - return 'primitive.NewObjectID()'; - - // Double quote stringify - const singleQuoted = arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\''; - const doubleQuoted = arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"'; + } + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => 'regex' + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => 'primitive.Symbol' + SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => 'primitive.Regex' + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (_, pattern, flags) => { + // Wrap string in double quotes + const doubleStringify = (str) => { + const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; + const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; if (singleQuoted || doubleQuoted) - arg = arg.substr(1, arg.length - 2); - arg = `"${arg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - this.declarations.addFunc([] - .concat('var objectIDFromHex = func(hex string) primitive.ObjectID {') - .concat(` objectID, err := primitive.ObjectIDFromHex(hex)`) - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return objectID') - .concat('}') - .join('\n')); - return `objectIDFromHex(${arg})` + str = str.substr(1, str.length - 2); + return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + + const structParts = []; + structParts.push(`Pattern: ${doubleStringify(pattern)}`); + if (flags) + structParts.push(`Options: ${doubleStringify(flags)}`); + return `(${structParts.join(", ")})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => '' + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (_, arg) => { + if (!arg) + arg = '"0"'; + + // Double quote stringify + const singleQuoted = arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\''; + const doubleQuoted = arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"'; + if (singleQuoted || doubleQuoted) + arg = arg.substr(1, arg.length - 2); + arg = `"${arg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + + this.declarations.addFunc([] + .concat('var parseDecimal128 = func(str string) primitive.Decimal128 {') + .concat(' d128, err := primitive.ParseDecimal128(str)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return d128') + .concat('}') + .join('\n')); + return `parseDecimal128(${arg})`; + } + MinKeySymbolTemplate: !!js/function &MinKeySymbolTemplate > + () => 'primitive.MinKey' + MinKeySymbolArgsTemplate: !!js/function &MinKeySymbolArgsTemplate > + () => '{}' + MaxKeySymbolTemplate: !!js/function &MaxKeySymbolTemplate > + () => 'primitive.MaxKey' + MaxKeySymbolArgsTemplate: !!js/function &MaxKeySymbolArgsTemplate > + () => '{}' + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => 'primitive.Timestamp' + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, low, high) => { + if (low === undefined) { + low = 0; + high = 0; } - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null - DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => '' - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - if (!arg) - arg = 0; - switch(type) { - case '_string': + return `{T: ${low}, I: ${high}}` + } + # non bson-specific + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => '' + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + + switch(type) { + case '_string': + if (arg.indexOf('.') !== -1) { this.declarations.addFunc([] .concat('var parseFloat64 = func(str string) float64 {') .concat(' f64, err := strconv.ParseFloat(str, 64)') @@ -415,592 +551,475 @@ Templates: .concat('}') .join('\n')); return `parseFloat64(${arg})` - default: - return `float64(${arg})`; - } - } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => '' - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - if (!arg) - arg = 0 - switch(type) { - case '_string': - this.declarations.addFunc([] - .concat('var parseInt32 = func(str string) int32 {') - .concat('i64, err := strconv.ParseInt(str, 10, 32)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return int32(i64)') - .concat('}') - .join('\n')); - return `parseInt32(${arg})`; - default: - return `int32(${arg})`; - } - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => '' - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - if (!arg) - arg = 0 - switch(type) { - case '_string': - this.declarations.addFunc([] - .concat('var parseInt = func(str string) int64 {') - .concat(' i64, err := strconv.ParseInt(str, 10, 64)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return i64') - .concat('}') - .join('\n')); - return `parseInt64(${arg})`; - default: - return `int64(${arg})`; - } + } + this.declarations.addFunc([] + .concat('var parseInt = func(str string) int64 {') + .concat(' i64, err := strconv.ParseInt(str, 10, 64)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return i64') + .concat('}') + .join('\n')); + return `parseInt64(${arg})`; + default: + return `${arg}` } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => 'regex' - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => 'primitive.Symbol' - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => 'primitive.Regex' - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (_, pattern, flags) => { - // Wrap string in double quotes - const doubleStringify = (str) => { - const singleQuoted = str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\''; - const doubleQuoted = str.charAt(0) === '"' && str.charAt(str.length - 1) === '"'; - if (singleQuoted || doubleQuoted) - str = str.substr(1, str.length - 2); - return `"${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => 'time.Date' + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + if (date === null) + return `time.Now()`; - const structParts = []; - structParts.push(`Pattern: ${doubleStringify(pattern)}`); - if (flags) - structParts.push(`Options: ${doubleStringify(flags)}`); - return `(${structParts.join(", ")})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => '' - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (_, arg) => { - if (!arg) - arg = '"0"'; - - // Double quote stringify - const singleQuoted = arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\''; - const doubleQuoted = arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"'; - if (singleQuoted || doubleQuoted) - arg = arg.substr(1, arg.length - 2); - arg = `"${arg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - - this.declarations.addFunc([] - .concat('var parseDecimal128 = func(str string) primitive.Decimal128 {') - .concat(' d128, err := primitive.ParseDecimal128(str)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return d128') - .concat('}') - .join('\n')); - return `parseDecimal128(${arg})`; - } - MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > - () => 'primitive.MinKey' - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > - () => '{}' - MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > - () => 'primitive.MaxKey' - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > - () => '{}' - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => 'primitive.Timestamp' - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, low, high) => { - if (low === undefined) { - low = 0; - high = 0; - } - return `{T: ${low}, I: ${high}}` - } - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => '' - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - - switch(type) { - case '_string': - if (arg.indexOf('.') !== -1) { - this.declarations.addFunc([] - .concat('var parseFloat64 = func(str string) float64 {') - .concat(' f64, err := strconv.ParseFloat(str, 64)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return f64') - .concat('}') - .join('\n')); - return `parseFloat64(${arg})` - } - this.declarations.addFunc([] - .concat('var parseInt = func(str string) int64 {') - .concat(' i64, err := strconv.ParseInt(str, 10, 64)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return i64') - .concat('}') - .join('\n')); - return `parseInt64(${arg})`; - default: - return `${arg}` - } - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => 'time.Date' - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - if (date === null) - return `time.Now()`; - - const dateStr = [ - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds(), - '0', - 'time.UTC' - ].join(', '); - - return `${lhs}(${dateStr})` - } + const dateStr = [ + date.getUTCFullYear(), + date.getUTCMonth() + 1, + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds(), + '0', + 'time.UTC' + ].join(', '); - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => `${lhs}.Code` - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => lhs - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => `${lhs}.String()` - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => '' - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - () => '' - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (arg1, arg2) => `${arg1} == ${arg2}` - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => `${lhs}.Timestamp()` - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => '' - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - () => `primitive.IsValidObjectID` - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate null - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate null - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null - DBRefGetDBTemplate: &DBRefGetDBTemplate null - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null - DBRefGetIdTemplate: &DBRefGetIdTemplate null - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null - DBRefToStringTemplate: &DBRefToStringTemplate null - DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null - DoubleValueOfTemplate: &DoubleValueOfTemplate null - DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null - Int32ValueOfTemplate: &Int32ValueOfTemplate null - Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null - Int32ToStringTemplate: &Int32ToStringTemplate null - Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => `${lhs} == ` - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (_, arg) => arg - LongToStringTemplate: &LongToStringTemplate !!js/function > - (lhs) => `strconv.Itoa(${lhs})` - LongToStringArgsTemplate: &LongToStringArgsTemplate !!js/function > - () => '' - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => `int(${lhs})` - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => '' - LongValueOfTemplate: &LongValueOfTemplate null - LongValueOfArgsTemplate: &LongValueOfArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => `float64(${lhs})` - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - (arg) => '' - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => `${lhs} + ` - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (_, args) => args - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (lhs) => `${lhs} - ` - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (_, arg) => arg - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (lhs) => `${lhs} * ` - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (_, arg) => arg - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => `${lhs} / ` - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (_, arg) => arg - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => `${lhs} % ` - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (_, arg) => arg - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => `${lhs} & ` - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (_, arg) => arg - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => `${lhs} | ` - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (_, arg) => arg - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => `${lhs} ^ ` - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (_, arg) => arg - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => `${lhs} << ` - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (_, rhs) => rhs - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => `${lhs} >> ` - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (_, rhs) => rhs - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => `${lhs} - ` - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (_, rhs) => rhs - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (arg) => `${arg} % 2 == 1` - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => '' - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (arg) => `${arg} == int64(0)` - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => '' - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (arg) => `${arg} < int64(0)` - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => '' - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => '-' - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => lhs - LongNotTemplate: &LongNotTemplate !!js/function > - () => '^' - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => lhs - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => `${lhs} != ` - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (_, rhs) => rhs - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => `${lhs} > ` - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (_, rhs) => rhs - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} >= ` - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => `${lhs} < ` - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (_, rhs) => rhs - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} <= ` - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (arg) => `float64(${arg})` - LongTopTemplate: &LongTopTemplate !!js/function > - (arg) => `${arg} >> 32` - LongBottomTemplate: &LongBottomTemplate !!js/function > - (arg) => `${arg} & 0x0000ffff` - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - (lhs) => `time.Unix(${lhs}.T, 0).String` - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - () => '()' - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => `${lhs}.Equal` - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate !!js/function > - (_, rhs) => `(${rhs})` - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => `${lhs}.T` - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - () => '' - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => `${lhs}.I` - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - () => '' - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => `${lhs}.T` - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => `${lhs}.I` - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => `time.Unix(${lhs}.T, 0)` - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => '' - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - () => 'primitive.CompareTimestamp' - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate !!js/function > - (lhs, rhs) => `(${lhs}, ${rhs})` - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => `!${lhs}.Equal` - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (_, rhs) => `(${rhs})` - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - () => '' - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, rhs) => `primitive.CompareTimestamp(${lhs}, ${rhs}) == 1` - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - () => '' - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (arg1, arg2) => `primitive.CompareTimestamp(${arg1}, ${arg2}) >= 0` - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => '' - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, rhs) => `primitive.CompareTimestamp(${lhs}, ${rhs}) == -1` - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - () => '' - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (arg1, arg2) => `primitive.CompareTimestamp(${arg1}, ${arg2}) <= 0` - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - () => '' - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - (arg) => arg - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - () => '' - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - (arg) => arg - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - () => '' - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - (lhs) => `string(${lhs})` - Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function > - (lhs) => `${lhs}.String()` - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate !!js/function > - () => '' - # non bson-specific - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => 'time.Now()' - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - () => '' - - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => 'int(^uint(0) >> 1)' - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => '-(1+int(^uint(0) >> 1))' - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => 'int64(0)' - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => 'int64(1)' - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => 'int64(-1)' - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > - () => 'int64' - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => 'int64' - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate !!js/function > - () => 'int64' - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - () => '' - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (_, arg) => { - this.declarations.addFunc([] - .concat('var int64FromString = func(str string) int64 {') - .concat(' f64, err := strconv.Atoi(str)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return f64') - .concat('}') - .join('\n')); - return `int64FromString(${arg})`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - () => '' - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function > - (_, arg) => { - this.declarations.addFunc([] - .concat('var parseDecimal128 = func(str string) primitive.Decimal128 {') - .concat(' d128, err := primitive.ParseDecimal128(str)') - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return d128') - .concat('}') - .join('\n')); - return `parseDecimal128(${arg})`; - } - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - () => '' - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (_, arg) => { - this.declarations.addFunc([] - .concat('var objectIDFromHex = func(hex string) primitive.ObjectID {') - .concat(` objectID, err := primitive.ObjectIDFromHex(hex)`) - .concat(' if err != nil {') - .concat(' log.Fatal(err)') - .concat(' }') - .concat(' return objectID') - .concat('}') - .join('\n')); - return `objectIDFromHex(${arg})` - } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => 'primitive.NewObjectIDFromTimestamp' - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (_, arg, isNumber) => isNumber ? `(time.Unix(${arg}, int64(0)))` : `(${arg})` - # non bson-specific would go here, but there aren't any atm. - - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - const imports = Object.values(args).flat() - const driverImports = args.driver || []; - delete args['driver']; - - const flattenedArgs = Array.from(new Set([...driverImports, ...imports])).sort(); - const universal = []; - const all = universal - .concat(flattenedArgs) - .map((i) => ` "${i}"`); - return [] - .concat('import (') - .concat(all.join('\n')) - .concat(')') - .join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => { - return [ - "go.mongodb.org/mongo-driver/mongo", - "go.mongodb.org/mongo-driver/mongo/options", - "context", - "log" - ] - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate !!js/function > - () => ['go.mongodb.org/mongo-driver/bson'] - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 101ImportTemplate: &101ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive', 'log'] - 102ImportTemplate: &102ImportTemplate null - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate !!js/function > - (args) => ['log', 'strconv'] - 105ImportTemplate: &105ImportTemplate !!js/function > - (args) => ['log', 'strconv'] - 106ImportTemplate: &106ImportTemplate !!js/function > - (args) => ['log', 'strconv'] - 107ImportTemplate: &107ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 108ImportTemplate: &108ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 109ImportTemplate: &109ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 110ImportTemplate: &110ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 111ImportTemplate: &111ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] - 112ImportTemplate: &112ImportTemplate !!js/function > - (args) => ['go.mongodb.org/mongo-driver/bson/primitive', 'log'] - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate !!js/function > - (args) => ['time.Time'] - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + return `${lhs}(${dateStr})` + } + + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => `${lhs}.Code` + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => lhs + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => `${lhs}.String()` + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => '' + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + () => '' + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (arg1, arg2) => `${arg1} == ${arg2}` + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => `${lhs}.Timestamp()` + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => '' + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + () => `primitive.IsValidObjectID` + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + BinaryValueTemplate: &BinaryValueTemplate null + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: &BinarySubtypeTemplate null + BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null + DBRefGetDBTemplate: &DBRefGetDBTemplate null + DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null + DBRefGetIdTemplate: &DBRefGetIdTemplate null + DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null + DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null + DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null + DBRefToStringTemplate: &DBRefToStringTemplate null + DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null + DoubleValueOfTemplate: &DoubleValueOfTemplate null + DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null + Int32ValueOfTemplate: &Int32ValueOfTemplate null + Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null + Int32ToStringTemplate: &Int32ToStringTemplate null + Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => `${lhs} == ` + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (_, arg) => arg + LongToStringTemplate: !!js/function &LongToStringTemplate > + (lhs) => `strconv.Itoa(${lhs})` + LongToStringArgsTemplate: !!js/function &LongToStringArgsTemplate > + () => '' + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => `int(${lhs})` + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => '' + LongValueOfTemplate: &LongValueOfTemplate null + LongValueOfArgsTemplate: &LongValueOfArgsTemplate null + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => `float64(${lhs})` + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + (arg) => '' + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => `${lhs} + ` + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (_, args) => args + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (lhs) => `${lhs} - ` + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (_, arg) => arg + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (lhs) => `${lhs} * ` + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (_, arg) => arg + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => `${lhs} / ` + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (_, arg) => arg + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => `${lhs} % ` + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (_, arg) => arg + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => `${lhs} & ` + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (_, arg) => arg + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => `${lhs} | ` + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (_, arg) => arg + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => `${lhs} ^ ` + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (_, arg) => arg + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => `${lhs} << ` + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (_, rhs) => rhs + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => `${lhs} >> ` + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (_, rhs) => rhs + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => `${lhs} - ` + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (_, rhs) => rhs + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (arg) => `${arg} % 2 == 1` + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => '' + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (arg) => `${arg} == int64(0)` + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => '' + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (arg) => `${arg} < int64(0)` + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => '' + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => '-' + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => lhs + LongNotTemplate: !!js/function &LongNotTemplate > + () => '^' + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => lhs + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => `${lhs} != ` + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (_, rhs) => rhs + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => `${lhs} > ` + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (_, rhs) => rhs + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => `${lhs} >= ` + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (_, rhs) => rhs + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => `${lhs} < ` + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (_, rhs) => rhs + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => `${lhs} <= ` + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (_, rhs) => rhs + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (arg) => `float64(${arg})` + LongTopTemplate: !!js/function &LongTopTemplate > + (arg) => `${arg} >> 32` + LongBottomTemplate: !!js/function &LongBottomTemplate > + (arg) => `${arg} & 0x0000ffff` + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + (lhs) => `time.Unix(${lhs}.T, 0).String` + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + () => '()' + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => `${lhs}.Equal` + TimestampEqualsArgsTemplate: !!js/function &TimestampEqualsArgsTemplate > + (_, rhs) => `(${rhs})` + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => `${lhs}.T` + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + () => '' + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => `${lhs}.I` + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + () => '' + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => `${lhs}.T` + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => `${lhs}.I` + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => `time.Unix(${lhs}.T, 0)` + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => '' + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + () => 'primitive.CompareTimestamp' + TimestampCompareArgsTemplate: !!js/function &TimestampCompareArgsTemplate > + (lhs, rhs) => `(${lhs}, ${rhs})` + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => `!${lhs}.Equal` + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (_, rhs) => `(${rhs})` + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + () => '' + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, rhs) => `primitive.CompareTimestamp(${lhs}, ${rhs}) == 1` + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + () => '' + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (arg1, arg2) => `primitive.CompareTimestamp(${arg1}, ${arg2}) >= 0` + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => '' + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, rhs) => `primitive.CompareTimestamp(${lhs}, ${rhs}) == -1` + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + () => '' + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (arg1, arg2) => `primitive.CompareTimestamp(${arg1}, ${arg2}) <= 0` + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + () => '' + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + (arg) => arg + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + () => '' + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + (arg) => arg + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + () => '' + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + (lhs) => `string(${lhs})` + Decimal128ToStringTemplate: !!js/function &Decimal128ToStringTemplate > + (lhs) => `${lhs}.String()` + Decimal128ToStringArgsTemplate: + !!js/function &Decimal128ToStringArgsTemplate > + () => '' + # non bson-specific + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => 'time.Now()' + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + () => '' + + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => 'int(^uint(0) >> 1)' + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => '-(1+int(^uint(0) >> 1))' + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => 'int64(0)' + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => 'int64(1)' + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => 'int64(-1)' + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: !!js/function &LongSymbolFromBitsTemplate > + () => 'int64' + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => 'int64' + LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null + LongSymbolFromNumberTemplate: !!js/function &LongSymbolFromNumberTemplate > + () => 'int64' + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + () => '' + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (_, arg) => { + this.declarations.addFunc([] + .concat('var int64FromString = func(str string) int64 {') + .concat(' f64, err := strconv.Atoi(str)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return f64') + .concat('}') + .join('\n')); + return `int64FromString(${arg})`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + () => '' + Decimal128SymbolFromStringArgsTemplate: + !!js/function &Decimal128SymbolFromStringArgsTemplate > + (_, arg) => { + this.declarations.addFunc([] + .concat('var parseDecimal128 = func(str string) primitive.Decimal128 {') + .concat(' d128, err := primitive.ParseDecimal128(str)') + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return d128') + .concat('}') + .join('\n')); + return `parseDecimal128(${arg})`; + } + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + () => '' + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (_, arg) => { + this.declarations.addFunc([] + .concat('var objectIDFromHex = func(hex string) primitive.ObjectID {') + .concat(` objectID, err := primitive.ObjectIDFromHex(hex)`) + .concat(' if err != nil {') + .concat(' log.Fatal(err)') + .concat(' }') + .concat(' return objectID') + .concat('}') + .join('\n')); + return `objectIDFromHex(${arg})` + } + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => 'primitive.NewObjectIDFromTimestamp' + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (_, arg, isNumber) => isNumber ? `(time.Unix(${arg}, int64(0)))` : `(${arg})` + # non bson-specific would go here, but there aren't any atm. + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + const imports = Object.values(args).flat() + const driverImports = args.driver || []; + delete args['driver']; + + const flattenedArgs = Array.from(new Set([...driverImports, ...imports])).sort(); + const universal = []; + const all = universal + .concat(flattenedArgs) + .map((i) => ` "${i}"`); + return [] + .concat('import (') + .concat(all.join('\n')) + .concat(')') + .join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => { + return [ + "go.mongodb.org/mongo-driver/mongo", + "go.mongodb.org/mongo-driver/mongo/options", + "context", + "log" + ] + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: !!js/function &8ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: !!js/function &10ImportTemplate > + () => ['go.mongodb.org/mongo-driver/bson'] + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: !!js/function &100ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 101ImportTemplate: !!js/function &101ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive', 'log'] + 102ImportTemplate: &102ImportTemplate null + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: !!js/function &104ImportTemplate > + (args) => ['log', 'strconv'] + 105ImportTemplate: !!js/function &105ImportTemplate > + (args) => ['log', 'strconv'] + 106ImportTemplate: !!js/function &106ImportTemplate > + (args) => ['log', 'strconv'] + 107ImportTemplate: !!js/function &107ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 108ImportTemplate: !!js/function &108ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 109ImportTemplate: !!js/function &109ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 110ImportTemplate: !!js/function &110ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 111ImportTemplate: !!js/function &111ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive'] + 112ImportTemplate: !!js/function &112ImportTemplate > + (args) => ['go.mongodb.org/mongo-driver/bson/primitive', 'log'] + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: !!js/function &200ImportTemplate > + (args) => ['time.Time'] + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/java/templates.yaml b/packages/bson-transpilers/symbols/java/templates.yaml index 17b31ac48c3..80ea93241bb 100644 --- a/packages/bson-transpilers/symbols/java/templates.yaml +++ b/packages/bson-transpilers/symbols/java/templates.yaml @@ -1,1148 +1,1175 @@ # Java Templates Templates: - # Misc - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: '' - g: '' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' - # Syntax - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - const comment = `/* - * Requires the MongoDB Java Driver. - * https://mongodb.github.io/mongo-java-driver`; + # Misc + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: '' + g: '' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' + # Syntax + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + const comment = `/* + * Requires the MongoDB Java Driver. + * https://mongodb.github.io/mongo-java-driver`; - const str = spec.options.uri; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - const uri = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - const exportMode = spec.exportMode; - delete spec.exportMode; - - const connection = `MongoClient mongoClient = new MongoClient( - new MongoClientURI( - ${uri} - ) - ); - - MongoDatabase database = mongoClient.getDatabase("${spec.options.database}"); - - MongoCollection collection = database.getCollection("${spec.options.collection}");`; - - let driverMethod; - let driverResult; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'deleteMany'; - driverResult = 'DeleteResult'; - break; - case 'Update Query': - driverMethod = 'updateMany'; - driverResult = 'UpdateResult'; - break; - default: - driverMethod = 'find'; - driverResult = 'FindIterable'; + const str = spec.options.uri; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - if ('aggregation' in spec) { - return `${comment}\n */\n\n${connection} + const uri = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + const exportMode = spec.exportMode; + delete spec.exportMode; - AggregateIterable result = collection.aggregate(${spec.aggregation});`; - } + const connection = `MongoClient mongoClient = new MongoClient( + new MongoClientURI( + ${uri} + ) + ); - let warning = ''; - const defs = Object.keys(spec).reduce((s, k) => { - if (!spec[k]) return s; - if (k === 'options' || k === 'maxTimeMS' || k === 'skip' || k === 'limit' || k === 'collation') return s; - if (s === '') return `Bson ${k} = ${spec[k]};`; - return `${s} - Bson ${k} = ${spec[k]};`; - }, ''); + MongoDatabase database = mongoClient.getDatabase("${spec.options.database}"); - const result = Object.keys(spec).reduce((s, k) => { - switch (k) { - case 'options': - case 'filter': - return s; - case 'maxTimeMS': - return `${s} - .maxTime(${spec[k]}, TimeUnit.MICROSECONDS)`; - case 'skip': - case 'limit': - return `${s} - .${k}((int)${spec[k]})`; - case 'project': - return `${s} - .projection(project)`; - case 'collation': - warning = '\n *\n * Warning: translating collation to Java not yet supported, so will be ignored'; - return s; - case 'exportMode': - return s; - default: - if (!spec[k]) return s; - return `${s} - .${k}(${k})`; - } - }, `${driverResult} result = collection.${driverMethod}(filter)`); + MongoCollection collection = database.getCollection("${spec.options.collection}");`; - return `${comment}${warning}\n */\n\n${defs} + let driverMethod; + let driverResult; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'deleteMany'; + driverResult = 'DeleteResult'; + break; + case 'Update Query': + driverMethod = 'updateMany'; + driverResult = 'UpdateResult'; + break; + default: + driverMethod = 'find'; + driverResult = 'FindIterable'; + } + if ('aggregation' in spec) { + return `${comment}\n */\n\n${connection} - ${connection} - - ${result};`; - } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; - } else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} == ${rhs}`; - } - return `${lhs} ${op} ${rhs}`; + AggregateIterable result = collection.aggregate(${spec.aggregation});`; } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let str = ''; - if (op.includes('!') || op.includes('not')) { - str = '!'; - } - return `${str}${rhs}.contains(${lhs})` - } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `!${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { + + let warning = ''; + const defs = Object.keys(spec).reduce((s, k) => { + if (!spec[k]) return s; + if (k === 'options' || k === 'maxTimeMS' || k === 'skip' || k === 'limit' || k === 'collation') return s; + if (s === '') return `Bson ${k} = ${spec[k]};`; + return `${s} + Bson ${k} = ${spec[k]};`; + }, ''); + + const result = Object.keys(spec).reduce((s, k) => { + switch (k) { + case 'options': + case 'filter': return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `floor(${s})`; - case '**': - return `pow(${s}, ${rhs})`; - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosSyntaxTemplate: &EosSyntaxTemplate null - EofSyntaxTemplate: &EofSyntaxTemplate null - NewTemplate: &NewSyntaxTemplate !!js/function > - (expr, skip, code) => { - // Add codes of classes that don't need new. - // Currently: Decimal128/NumberDecimal, Long/NumberLong, Double, Int32, Number, regex, Date - noNew = [112, 106, 104, 105, 2, 8, 200]; - if (skip || (code && noNew.indexOf(code) !== -1)) { - return expr; + case 'maxTimeMS': + return `${s} + .maxTime(${spec[k]}, TimeUnit.MICROSECONDS)`; + case 'skip': + case 'limit': + return `${s} + .${k}((int)${spec[k]})`; + case 'project': + return `${s} + .projection(project)`; + case 'collation': + warning = '\n *\n * Warning: translating collation to Java not yet supported, so will be ignored'; + return s; + case 'exportMode': + return s; + default: + if (!spec[k]) return s; + return `${s} + .${k}(${k})`; } - return `new ${expr}`; - } - # BSON Object Type templates - CodeTypeTemplate: &CodeTypeTemplate null - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - flags = flags === '' ? '' : `(?${flags})`; - // Double escape characters except for slashes - const escaped = pattern.replace(/\\/, '\\\\'); + }, `${driverResult} result = collection.${driverMethod}(filter)`); - // Double-quote stringify - const str = escaped + flags; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `Pattern.compile("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null - DecimalTypeTemplate: &DecimalTypeTemplate !!js/function > - (literal, type) => { - if (type === '_integer' || type === '_long' || type === '_decimal') { - return `${literal}d`; - } - return `(double) ${literal}`; - } - LongBasicTypeTemplate: &LongBasicTypeTemplate !!js/function > - (literal, type) => { - if (type === '_integer' || type === '_long') { - return `${literal}L`; - } - return `new Long(${literal})`; - } - HexTypeTemplate: &HexTypeTemplate null # TODO - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal, type) => { - if ((literal.charAt(0) === '0' && literal.charAt(1) === '0') || - (literal.charAt(0) === '0' && (literal.charAt(1) === 'o' || literal.charAt(1) === 'O'))) { - return `0${literal.substr(2, literal.length - 1)}`; - } - return literal; - } - NumericTypeTemplate: &NumericTypeTemplate null - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - // TODO: figure out how to best do depth in an array and where to - // insert and indent - const indent = '\n' + ' '.repeat(depth); - // have an indent on every ', new Document' in an array not - // entirely perfect, but at least makes this more readable/also - // compiles - const arr = literal.split(', new').join(`, ${indent}new`) + return `${comment}${warning}\n */\n\n${defs} - return `Arrays.asList(${arr})`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'new BsonNull()'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'new BsonUndefined()'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal, depth) => { + ${connection} - if (literal === '') { - return `new Document()`; + ${result};`; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; + } else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} == ${rhs}`; + } + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let str = ''; + if (op.includes('!') || op.includes('not')) { + str = '!'; + } + return `${str}${rhs}.contains(${lhs})` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `!${arg}`; + } + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; } - return literal; - } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return 'new Document()'; + const rhs = arr[i + 1]; + switch(op) { + case '//': + return `floor(${s})`; + case '**': + return `pow(${s}, ${rhs})`; + default: + return `${s} ${op} ${rhs}`; } - depth++; - const indent = '\n' + ' '.repeat(depth); - const doubleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - const start = `new Document(${doubleStringify(args[0][0])}, ${args[0][1]})`; - - args = args.slice(1); - const result = args.reduce((str, pair) => { - return `${str}${indent}.append(${doubleStringify(pair[0])}, ${pair[1]})`; - }, start); + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosSyntaxTemplate: &EosSyntaxTemplate null + EofSyntaxTemplate: &EofSyntaxTemplate null + NewTemplate: !!js/function &NewSyntaxTemplate > + (expr, skip, code) => { + // Add codes of classes that don't need new. + // Currently: Decimal128/NumberDecimal, Long/NumberLong, Double, Int32, Number, regex, Date + noNew = [112, 106, 104, 105, 2, 8, 200]; + if (skip || (code && noNew.indexOf(code) !== -1)) { + return expr; + } + return `new ${expr}`; + } + # BSON Object Type templates + CodeTypeTemplate: &CodeTypeTemplate null + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + flags = flags === '' ? '' : `(?${flags})`; + // Double escape characters except for slashes + const escaped = pattern.replace(/\\/, '\\\\'); - return `${result}`; - } - DoubleTypeTemplate: &DoubleTypeTemplate !!js/function > - (literal, type) => { - if (type === '_integer' || type === '_long' || type === '_decimal') { - return `${literal}d`; - } - return `(double) ${literal}`; - } - DoubleTypeArgsTemplate: &DoubleTypeArgsTemplate !!js/function > - () => { - return ''; - } - LongTypeTemplate: &LongTemplate !!js/function > - () => { - return ''; - } - LongTypeArgsTemplate: &LongSymbolArgsTemplate null - # BSON Object Method templates - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.toHexString()`; - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => { - return `${lhs}.getTimestamp()`; - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => { - return ''; - } - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => { - return `${lhs}.getCode()`; - } - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => { - return `${lhs}.getScope()`; - } - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate !!js/function > - (lhs) => { - return `${lhs}.getData`; - } - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (lhs) => { - return `${lhs}.getType()`; - } - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}.getDatabaseName()`; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}.getCollectionName()`; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}.getId()`; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - () => { - return ''; - } - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongToStringTemplate: &LongToStringTemplate !!js/function > - (lhs) => { - return lhs; - } - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `(int) ${lhs}`; - } - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => { - return ''; - } - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => { - return `(double) ${lhs}`; - } - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => { - return ''; - } - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => { - return `${lhs} +`; - } - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (arg) => { - return `${arg} -`; - } - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (arg) => { - return `${arg} *`; - } - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => { - return `${lhs} /`; - } - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => { - return `${lhs} %`; - } - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => { - return `${lhs} &`; - } - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => { - return `${lhs} |`; - } - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => { - return `${lhs} ^`; - } - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - () => { - return 'Long.rotateLeft'; - } - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (lhs, arg) => { - return `(${lhs}, ${arg})`; - } - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - () => { - return 'Long.rotateRight'; - } - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (lhs, arg) => { - return `(${lhs}, ${arg})`; - } - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => { - return `${lhs} -`; - } - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (lhs) => { - return `(${lhs} % 2) == 1`; - } - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => { - return ''; - } - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (lhs) => { - return `${lhs} == 0`; - } - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => { - return ''; - } - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (lhs) => { - return `${lhs} < 0`; - } - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => { - return ''; - } - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => { - return '-'; - } - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotTemplate: &LongNotTemplate !!js/function > - () => { - return '~'; - } - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `(float) ${lhs}`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs} >> 32`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs} & 0x0000ffff`; - } - TimestampToStringTemplate: &TimestampToStringTemplate null - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - TimestampEqualsTemplate: &TimestampEqualsTemplate null - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.getTime`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.getInc`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `${lhs}.getTime()`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `${lhs}.getInc()`; - } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => { - return `new java.util.Date(${lhs}.getTime())`; - } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => { - return ''; - } - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg}) != 0`; - } - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg}) > 0`; - } - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg}) >= 0`; - } - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg}) < 0`; - } - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs}.compareTo`; - } - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg}) <= 0`; - } - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (lhs) => { - return `${lhs}.getSymbol`; - } - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (lhs) => { - return `${lhs}.getSymbol`; - } - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.toString`; - } - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null - # Symbol Templates - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > # Also has process method - () => { - return 'Code'; - } - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > # Also has process method - (lhs, code, scope) => { - // Double quote stringify - let newStr = code === undefined ? '' : code; - const str = newStr; - if ( + // Double-quote stringify + const str = escaped + flags; + let newStr = str; + if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - return (scope === undefined) ? `(${code})` : `WithScope(${code}, ${scope})`; - } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, str) => { - if (!str || str.length === 0) { - return '()'; - } - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + newStr = str.substr(1, str.length - 2); } - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate !!js/function > - (lhs, bytes, type) => { - const str = bytes; + return `Pattern.compile("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null + DecimalTypeTemplate: !!js/function &DecimalTypeTemplate > + (literal, type) => { + if (type === '_integer' || type === '_long' || type === '_decimal') { + return `${literal}d`; + } + return `(double) ${literal}`; + } + LongBasicTypeTemplate: !!js/function &LongBasicTypeTemplate > + (literal, type) => { + if (type === '_integer' || type === '_long') { + return `${literal}L`; + } + return `new Long(${literal})`; + } + HexTypeTemplate: &HexTypeTemplate null # TODO + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal, type) => { + if ((literal.charAt(0) === '0' && literal.charAt(1) === '0') || + (literal.charAt(0) === '0' && (literal.charAt(1) === 'o' || literal.charAt(1) === 'O'))) { + return `0${literal.substr(2, literal.length - 1)}`; + } + return literal; + } + NumericTypeTemplate: &NumericTypeTemplate null + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + // TODO: figure out how to best do depth in an array and where to + // insert and indent + const indent = '\n' + ' '.repeat(depth); + // have an indent on every ', new Document' in an array not + // entirely perfect, but at least makes this more readable/also + // compiles + const arr = literal.split(', new').join(`, ${indent}new`) + + return `Arrays.asList(${arr})`; + } + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'new BsonNull()'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'new BsonUndefined()'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal, depth) => { + + if (literal === '') { + return `new Document()`; + } + return literal; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return 'new Document()'; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const doubleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); } - bytes = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - - if (type === null) { - return `(${bytes}.getBytes("UTF-8"))`; - } - return `(${type}, ${bytes}.getBytes("UTF-8"))`; - } - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate !!js/function > - () => { - return 'BsonBinarySubType.BINARY'; - } - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate !!js/function > - () => { - return 'BsonBinarySubType.FUNCTION'; - } - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate !!js/function > - () => { - return 'BsonBinarySubType.BINARY'; - } - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate !!js/function > - () => { - return 'BsonBinarySubType.UUID_LEGACY'; - } - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate !!js/function > - () => { - return 'BsonBinarySubType.UUID_STANDARD'; - } - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template !!js/function > - () => { - return 'BsonBinarySubType.MD5'; - } - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate !!js/function > - () => { - return 'BsonBinarySubType.USER_DEFINED'; - } - DBRefSymbolTemplate: &DBRefSymbolTemplate null - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate !!js/function > - (lhs, coll, id, db) => { - const dbstr = db === undefined ? '' : `${db}, `; - return `(${dbstr}${coll}, ${id})`; - } - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return ''; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - return `Double.parseDouble(${arg})`; - } - if (type === '_integer' || type === '_long' || type === '_double' || type === '_decimal') { - if (arg.includes('L') || arg.includes('d')) { - return `${arg.substr(0, arg.length - 1)}d`; - } - return `${arg}d`; - } - return `(double) ${arg}`; + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return ''; + const start = `new Document(${doubleStringify(args[0][0])}, ${args[0][1]})`; + + args = args.slice(1); + const result = args.reduce((str, pair) => { + return `${str}${indent}.append(${doubleStringify(pair[0])}, ${pair[1]})`; + }, start); + + return `${result}`; + } + DoubleTypeTemplate: !!js/function &DoubleTypeTemplate > + (literal, type) => { + if (type === '_integer' || type === '_long' || type === '_decimal') { + return `${literal}d`; + } + return `(double) ${literal}`; + } + DoubleTypeArgsTemplate: !!js/function &DoubleTypeArgsTemplate > + () => { + return ''; + } + LongTypeTemplate: !!js/function &LongTemplate > + () => { + return ''; + } + LongTypeArgsTemplate: &LongSymbolArgsTemplate null + # BSON Object Method templates + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => { + return `${lhs}.toHexString()`; + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => { + return ''; + } + ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null + ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => { + return `${lhs}.getTimestamp()`; + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => { + return ''; + } + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => { + return `${lhs}.getCode()`; + } + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => { + return `${lhs}.getScope()`; + } + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + BinaryValueTemplate: !!js/function &BinaryValueTemplate > + (lhs) => { + return `${lhs}.getData`; + } + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (lhs) => { + return `${lhs}.getType()`; + } + BinarySubtypeArgsTemplate: !!js/function &BinarySubtypeArgsTemplate > + () => { + return ''; + } + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}.getDatabaseName()`; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + () => { + return ''; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}.getCollectionName()`; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + () => { + return ''; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}.getId()`; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + () => { + return ''; + } + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongToStringTemplate: !!js/function &LongToStringTemplate > + (lhs) => { + return lhs; + } + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `(int) ${lhs}`; + } + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => { + return ''; + } + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => { + return `(double) ${lhs}`; + } + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => { + return ''; + } + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => { + return `${lhs} +`; + } + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (arg) => { + return `${arg} -`; + } + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (arg) => { + return `${arg} *`; + } + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => { + return `${lhs} /`; + } + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => { + return `${lhs} %`; + } + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => { + return `${lhs} &`; + } + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => { + return `${lhs} |`; + } + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => { + return `${lhs} ^`; + } + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + () => { + return 'Long.rotateLeft'; + } + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (lhs, arg) => { + return `(${lhs}, ${arg})`; + } + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + () => { + return 'Long.rotateRight'; + } + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (lhs, arg) => { + return `(${lhs}, ${arg})`; + } + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => { + return `${lhs} -`; + } + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (lhs) => { + return `(${lhs} % 2) == 1`; + } + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => { + return ''; + } + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (lhs) => { + return `${lhs} == 0`; + } + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => { + return ''; + } + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (lhs) => { + return `${lhs} < 0`; + } + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => { + return ''; + } + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => { + return '-'; + } + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => { + return lhs; + } + LongNotTemplate: !!js/function &LongNotTemplate > + () => { + return '~'; + } + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => { + return lhs; + } + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `(float) ${lhs}`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs} >> 32`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs} & 0x0000ffff`; + } + TimestampToStringTemplate: &TimestampToStringTemplate null + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + TimestampEqualsTemplate: &TimestampEqualsTemplate null + TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `${lhs}.getTime`; + } + TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `${lhs}.getInc`; + } + TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `${lhs}.getTime()`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `${lhs}.getInc()`; + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => { + return `new java.util.Date(${lhs}.getTime())`; + } + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => { + return ''; + } + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (lhs, arg) => { + return `(${arg}) != 0`; + } + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, arg) => { + return `(${arg}) > 0`; + } + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return `(${arg}) >= 0`; + } + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, arg) => { + return `(${arg}) < 0`; + } + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => { + return `${lhs}.compareTo`; + } + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return `(${arg}) <= 0`; + } + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (lhs) => { + return `${lhs}.getSymbol`; + } + SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (lhs) => { + return `${lhs}.getSymbol`; + } + SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (lhs) => { + return `${lhs}.toString`; + } + SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null + # Symbol Templates + CodeSymbolTemplate: + !!js/function &CodeSymbolTemplate > # Also has process method + () => { + return 'Code'; + } + CodeSymbolArgsTemplate: + !!js/function &CodeSymbolArgsTemplate > # Also has process method + (lhs, code, scope) => { + // Double quote stringify + let newStr = code === undefined ? '' : code; + const str = newStr; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + return (scope === undefined) ? `(${code})` : `WithScope(${code}, ${scope})`; + } + ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, str) => { + if (!str || str.length === 0) { + return '()'; + } + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: !!js/function &BinarySymbolArgsTemplate > + (lhs, bytes, type) => { + const str = bytes; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - return `Integer.parseInt(${arg})`; - } - if (type === '_integer' || type === '_long') { - if (arg.includes('L') || arg.includes('d')) { - return arg.substr(0, arg.length - 1); - } - return arg; + bytes = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + + if (type === null) { + return `(${bytes}.getBytes("UTF-8"))`; + } + return `(${type}, ${bytes}.getBytes("UTF-8"))`; + } + BinarySymbolSubtypeDefaultTemplate: + !!js/function &BinarySymbolSubtypeDefaultTemplate > + () => { + return 'BsonBinarySubType.BINARY'; + } + BinarySymbolSubtypeFunctionTemplate: + !!js/function &BinarySymbolSubtypeFunctionTemplate > + () => { + return 'BsonBinarySubType.FUNCTION'; + } + BinarySymbolSubtypeByteArrayTemplate: + !!js/function &BinarySymbolSubtypeByteArrayTemplate > + () => { + return 'BsonBinarySubType.BINARY'; + } + BinarySymbolSubtypeUuidOldTemplate: + !!js/function &BinarySymbolSubtypeUuidOldTemplate > + () => { + return 'BsonBinarySubType.UUID_LEGACY'; + } + BinarySymbolSubtypeUuidTemplate: + !!js/function &BinarySymbolSubtypeUuidTemplate > + () => { + return 'BsonBinarySubType.UUID_STANDARD'; + } + BinarySymbolSubtypeMd5Template: + !!js/function &BinarySymbolSubtypeMd5Template > + () => { + return 'BsonBinarySubType.MD5'; + } + BinarySymbolSubtypeUserDefinedTemplate: + !!js/function &BinarySymbolSubtypeUserDefinedTemplate > + () => { + return 'BsonBinarySubType.USER_DEFINED'; + } + DBRefSymbolTemplate: &DBRefSymbolTemplate null + DBRefSymbolArgsTemplate: !!js/function &DBRefSymbolArgsTemplate > + (lhs, coll, id, db) => { + const dbstr = db === undefined ? '' : `${db}, `; + return `(${dbstr}${coll}, ${id})`; + } + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return ''; + } + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_string') { + return `Double.parseDouble(${arg})`; + } + if (type === '_integer' || type === '_long' || type === '_double' || type === '_decimal') { + if (arg.includes('L') || arg.includes('d')) { + return `${arg.substr(0, arg.length - 1)}d`; } - return `(int) ${arg}`; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return ''; - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - return `Long.parseLong(${arg})`; + return `${arg}d`; + } + return `(double) ${arg}`; + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return ''; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_string') { + return `Integer.parseInt(${arg})`; + } + if (type === '_integer' || type === '_long') { + if (arg.includes('L') || arg.includes('d')) { + return arg.substr(0, arg.length - 1); } - if (type === '_integer' || type === '_long') { - if (arg.includes('d') || arg.includes('L')) { - return `${arg.substr(0, arg.length - 1)}L`; - } - return `${arg}L`; + return arg; + } + return `(int) ${arg}`; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return ''; + } + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_string') { + return `Long.parseLong(${arg})`; + } + if (type === '_integer' || type === '_long') { + if (arg.includes('d') || arg.includes('L')) { + return `${arg.substr(0, arg.length - 1)}L`; } - return `new Long(${arg})`; - } - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => { - return 'Long.MAX_VALUE'; - } - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => { - return 'Long.MIN_VALUE'; - } - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => { - return '0L'; - } - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => { - return '1L'; - } - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => { - return '-1L'; - } - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > # Also has process method - () => { - return ''; - } - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}L`; - } - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate !!js/function > - (lhs, arg) => { return `${arg}L`; } - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - (lhs) => { - return `Long.parseLong`; - } - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null - MinKeySymbolTemplate: &MinKeySymbolTemplate null - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null - MaxKeySymbolTemplate: &MaxKeySymbolTemplate null - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => { - return 'BSONTimestamp'; - } - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; - } - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return 'Symbol'; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return 'BsonRegularExpression'; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - const doubleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - return `(${doubleStringify(pattern)}${flags ? ', ' + doubleStringify(flags) : ''})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (_, str) => { // just stringify + return `new Long(${arg})`; + } + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => { + return 'Long.MAX_VALUE'; + } + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => { + return 'Long.MIN_VALUE'; + } + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => { + return '0L'; + } + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => { + return '1L'; + } + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => { + return '-1L'; + } + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: + !!js/function &LongSymbolFromBitsTemplate > # Also has process method + () => { + return ''; + } + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => { + return ''; + } + LongSymbolFromIntArgsTemplate: !!js/function &LongSymbolFromIntArgsTemplate > + (lhs, arg) => { + return `${arg}L`; + } + LongSymbolFromNumberTemplate: !!js/function &LongSymbolFromNumberTemplate > + () => { + return ''; + } + LongSymbolFromNumberArgsTemplate: + !!js/function &LongSymbolFromNumberArgsTemplate > + (lhs, arg) => { + return `${arg}L`; + } + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + (lhs) => { + return `Long.parseLong`; + } + LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null + MinKeySymbolTemplate: &MinKeySymbolTemplate null + MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null + MaxKeySymbolTemplate: &MaxKeySymbolTemplate null + MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => { + return 'BSONTimestamp'; + } + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; + } + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return 'Symbol'; + } + SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return 'BsonRegularExpression'; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + const doubleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); } - return `.parse("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - (lhs) => { - return `${lhs}.parse`; - } - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null - Decimal128ToStringTemplate: &Decimal128ToStringTemplate null - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # BSON Util Templates - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - () => { - return 'new ObjectId'; - } - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return 'new ObjectId'; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (isNumber) { - return `(new java.util.Date(${arg.replace(/L$/, '000L')}))`; - } - return `(${arg})`; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - () => { - return 'ObjectId.isValid'; - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - # JS Symbol Templates - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return ''; - } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - return `Double.parseDouble(${arg})`; - } - if (type === '_integer' || type === '_long' || type === '_decimal') { - if (arg.includes('L') || arg.includes('d')) { - return `${arg.substr(0, arg.length - 1)}d`; - } - return `${arg}d`; - } - return `(double) ${arg}`; - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'java.util.Date'; - } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - let toStr = (d) => d; - if (isString) { - toStr = (d) => `new SimpleDateFormat("EEE MMMMM dd yyyy HH:mm:ss").format(${d})`; - } - if (date === null) { - return toStr(`new ${lhs}()`); - } - return toStr(`new ${lhs}(${date.getTime()}L)`); - } - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return ''; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - () => { - return 'new java.util.Date().getTime()'; - } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => { - return 'Pattern'; + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + return `(${doubleStringify(pattern)}${flags ? ', ' + doubleStringify(flags) : ''})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (_, str) => { // just stringify + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null - ImportTemplate: &ImportTemplate null - DriverImportTemplate: &DriverImportTemplate !!js/function > - (_, mode) => { - let imports = 'import com.mongodb.MongoClient;\n' + - 'import com.mongodb.MongoClientURI;\n' + - 'import com.mongodb.client.MongoCollection;\n' + - 'import com.mongodb.client.MongoDatabase;\n' + - 'import org.bson.conversions.Bson;\n' + - 'import java.util.concurrent.TimeUnit;\n' + - 'import org.bson.Document;\n'; - if (mode === 'Query') { - imports += 'import com.mongodb.client.FindIterable;'; - } else if (mode === 'Pipeline') { - imports += 'import com.mongodb.client.AggregateIterable;'; - } else if (mode === 'Delete Query') { - imports += 'import com.mongodb.client.result.DeleteResult;'; + return `.parse("${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + (lhs) => { + return `${lhs}.parse`; + } + Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null + Decimal128ToStringTemplate: &Decimal128ToStringTemplate null + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # BSON Util Templates + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + () => { + return 'new ObjectId'; + } + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return 'new ObjectId'; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (isNumber) { + return `(new java.util.Date(${arg.replace(/L$/, '000L')}))`; + } + return `(${arg})`; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + () => { + return 'ObjectId.isValid'; + } + ObjectIdIsValidArgsTemplate: !!js/function &ObjectIdIsValidArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + # JS Symbol Templates + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return ''; + } + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_string') { + return `Double.parseDouble(${arg})`; + } + if (type === '_integer' || type === '_long' || type === '_decimal') { + if (arg.includes('L') || arg.includes('d')) { + return `${arg.substr(0, arg.length - 1)}d`; } - return imports; - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate !!js/function > - () => { - return 'import java.util.regex.Pattern;'; - } - 9ImportTemplate: &9ImportTemplate !!js/function > - () => { - return 'import java.util.Arrays;'; - } - 10ImportTemplate: &10ImportTemplate !!js/function > - () => { - return 'import org.bson.Document;'; - } - 11ImportTemplate: &11ImportTemplate !!js/function > - () => { - return 'import org.bson.BsonNull;'; - } - 12ImportTemplate: &12ImportTemplate !!js/function > - () => { - return 'import org.bson.BsonUndefined;'; - } - 100ImportTemplate: &100ImportTemplate !!js/function > - () => { - return 'import org.bson.types.Code;'; - } - 113ImportTemplate: &113ImportTemplate !!js/function > - () => { - return 'import org.bson.types.CodeWithScope;'; - } - 101ImportTemplate: &101ImportTemplate !!js/function > - () => { - return 'import org.bson.types.ObjectId;'; - } - 102ImportTemplate: &102ImportTemplate !!js/function > - () => { - return 'import org.bson.types.Binary;'; - } - 103ImportTemplate: &103ImportTemplate !!js/function > - () => { - return 'import com.mongodb.DBRef;'; - } - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - 107ImportTemplate: &107ImportTemplate !!js/function > - () => { - return 'import org.bson.types.MinKey;'; - } - 108ImportTemplate: &108ImportTemplate !!js/function > - () => { - return 'import org.bson.types.MaxKey;'; - } - 109ImportTemplate: &109ImportTemplate !!js/function > - () => { - return 'import org.bson.BsonRegularExpression;'; - } - 110ImportTemplate: &110ImportTemplate !!js/function > - () => { - return 'import org.bson.types.BSONTimestamp;'; - } - 111ImportTemplate: &111ImportTemplate !!js/function > - () => { - return 'import org.bson.types.Symbol;'; - } - 112ImportTemplate: &112ImportTemplate !!js/function > - () => { - return 'import org.bson.types.Decimal128;'; - } - 114ImportTemplate: &114ImportTemplate !!js/function > - () => { - return 'import org.bson.BsonBinarySubType;'; - } - 200ImportTemplate: &200ImportTemplate null - 201ImportTemplate: &201ImportTemplate !!js/function > - () => { - return 'import java.text.SimpleDateFormat;'; - } - 300ImportTemplate: &300ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i && f !== 'options')) - .sort() - .map((c) => { - return `import static com.mongodb.client.model.Filters.${c};`; - }).join('\n'); - } - 301ImportTemplate: &301ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import static com.mongodb.client.model.Aggregates.${c};`; - }).join('\n'); - } - 302ImportTemplate: &302ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import static com.mongodb.client.model.Accumulators.${c};`; - }).join('\n'); - } - 303ImportTemplate: &303ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import static com.mongodb.client.model.Projections.${c};`; - }).join('\n'); - } - 304ImportTemplate: &304ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import static com.mongodb.client.model.Sorts.${c};`; - }).join('\n'); - } - 305ImportTemplate: &305ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import com.mongodb.client.model.geojson.${c};`; - }).join('\n'); - } - 306ImportTemplate: &306ImportTemplate !!js/function > - (classes) => { - return classes - .filter((f, i) => (classes.indexOf(f) === i)) - .sort() - .map((c) => { - return `import com.mongodb.client.model.${c};`; - }).join('\n'); - } + return `${arg}d`; + } + return `(double) ${arg}`; + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'java.util.Date'; + } + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + let toStr = (d) => d; + if (isString) { + toStr = (d) => `new SimpleDateFormat("EEE MMMMM dd yyyy HH:mm:ss").format(${d})`; + } + if (date === null) { + return toStr(`new ${lhs}()`); + } + return toStr(`new ${lhs}(${date.getTime()}L)`); + } + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return ''; + } + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + () => { + return 'new java.util.Date().getTime()'; + } + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => { + return 'Pattern'; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null + ImportTemplate: &ImportTemplate null + DriverImportTemplate: !!js/function &DriverImportTemplate > + (_, mode) => { + let imports = 'import com.mongodb.MongoClient;\n' + + 'import com.mongodb.MongoClientURI;\n' + + 'import com.mongodb.client.MongoCollection;\n' + + 'import com.mongodb.client.MongoDatabase;\n' + + 'import org.bson.conversions.Bson;\n' + + 'import java.util.concurrent.TimeUnit;\n' + + 'import org.bson.Document;\n'; + if (mode === 'Query') { + imports += 'import com.mongodb.client.FindIterable;'; + } else if (mode === 'Pipeline') { + imports += 'import com.mongodb.client.AggregateIterable;'; + } else if (mode === 'Delete Query') { + imports += 'import com.mongodb.client.result.DeleteResult;'; + } + return imports; + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: !!js/function &8ImportTemplate > + () => { + return 'import java.util.regex.Pattern;'; + } + 9ImportTemplate: !!js/function &9ImportTemplate > + () => { + return 'import java.util.Arrays;'; + } + 10ImportTemplate: !!js/function &10ImportTemplate > + () => { + return 'import org.bson.Document;'; + } + 11ImportTemplate: !!js/function &11ImportTemplate > + () => { + return 'import org.bson.BsonNull;'; + } + 12ImportTemplate: !!js/function &12ImportTemplate > + () => { + return 'import org.bson.BsonUndefined;'; + } + 100ImportTemplate: !!js/function &100ImportTemplate > + () => { + return 'import org.bson.types.Code;'; + } + 113ImportTemplate: !!js/function &113ImportTemplate > + () => { + return 'import org.bson.types.CodeWithScope;'; + } + 101ImportTemplate: !!js/function &101ImportTemplate > + () => { + return 'import org.bson.types.ObjectId;'; + } + 102ImportTemplate: !!js/function &102ImportTemplate > + () => { + return 'import org.bson.types.Binary;'; + } + 103ImportTemplate: !!js/function &103ImportTemplate > + () => { + return 'import com.mongodb.DBRef;'; + } + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + 107ImportTemplate: !!js/function &107ImportTemplate > + () => { + return 'import org.bson.types.MinKey;'; + } + 108ImportTemplate: !!js/function &108ImportTemplate > + () => { + return 'import org.bson.types.MaxKey;'; + } + 109ImportTemplate: !!js/function &109ImportTemplate > + () => { + return 'import org.bson.BsonRegularExpression;'; + } + 110ImportTemplate: !!js/function &110ImportTemplate > + () => { + return 'import org.bson.types.BSONTimestamp;'; + } + 111ImportTemplate: !!js/function &111ImportTemplate > + () => { + return 'import org.bson.types.Symbol;'; + } + 112ImportTemplate: !!js/function &112ImportTemplate > + () => { + return 'import org.bson.types.Decimal128;'; + } + 114ImportTemplate: !!js/function &114ImportTemplate > + () => { + return 'import org.bson.BsonBinarySubType;'; + } + 200ImportTemplate: &200ImportTemplate null + 201ImportTemplate: !!js/function &201ImportTemplate > + () => { + return 'import java.text.SimpleDateFormat;'; + } + 300ImportTemplate: !!js/function &300ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i && f !== 'options')) + .sort() + .map((c) => { + return `import static com.mongodb.client.model.Filters.${c};`; + }).join('\n'); + } + 301ImportTemplate: !!js/function &301ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import static com.mongodb.client.model.Aggregates.${c};`; + }).join('\n'); + } + 302ImportTemplate: !!js/function &302ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import static com.mongodb.client.model.Accumulators.${c};`; + }).join('\n'); + } + 303ImportTemplate: !!js/function &303ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import static com.mongodb.client.model.Projections.${c};`; + }).join('\n'); + } + 304ImportTemplate: !!js/function &304ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import static com.mongodb.client.model.Sorts.${c};`; + }).join('\n'); + } + 305ImportTemplate: !!js/function &305ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import com.mongodb.client.model.geojson.${c};`; + }).join('\n'); + } + 306ImportTemplate: !!js/function &306ImportTemplate > + (classes) => { + return classes + .filter((f, i) => (classes.indexOf(f) === i)) + .sort() + .map((c) => { + return `import com.mongodb.client.model.${c};`; + }).join('\n'); + } diff --git a/packages/bson-transpilers/symbols/javascript/templates.yaml b/packages/bson-transpilers/symbols/javascript/templates.yaml index 7ef8f788f47..02941d551f3 100644 --- a/packages/bson-transpilers/symbols/javascript/templates.yaml +++ b/packages/bson-transpilers/symbols/javascript/templates.yaml @@ -1,651 +1,654 @@ # Javascript Templates Templates: - # Misc - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: 'y' - g: 'g' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' - # Syntax - DriverTemplate: &DriverTemplate !!js/function | - (spec) => { - const comment = `/* - * Requires the MongoDB Node.js Driver - * https://mongodb.github.io/node-mongodb-native - */`; - const translateKey = { - project: 'projection' - }; + # Misc + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: 'y' + g: 'g' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' + # Syntax + DriverTemplate: !!js/function &DriverTemplate | + (spec) => { + const comment = `/* + * Requires the MongoDB Node.js Driver + * https://mongodb.github.io/node-mongodb-native + */`; + const translateKey = { + project: 'projection' + }; - const exportMode = spec.exportMode; - delete spec.exportMode; + const exportMode = spec.exportMode; + delete spec.exportMode; - const args = {}; - Object.keys(spec).forEach((k) => { - if (k !== 'options') { - args[k in translateKey ? translateKey[k] : k] = spec[k]; - } - }); - - let cmd; - let defs; - if (exportMode == 'Delete Query') { - defs = `const filter = ${args.filter};\n`; - cmd = `const result = coll.deleteMany(filter);`; + const args = {}; + Object.keys(spec).forEach((k) => { + if (k !== 'options') { + args[k in translateKey ? translateKey[k] : k] = spec[k]; } - if ('aggregation' in spec) { - const agg = spec.aggregation; - cmd = `const cursor = coll.aggregate(agg);\nconst result = await cursor.toArray();`; - defs = `const agg = ${agg};\n`; - } else if (!cmd) { - let opts = ''; + }); + + let cmd; + let defs; + if (exportMode == 'Delete Query') { + defs = `const filter = ${args.filter};\n`; + cmd = `const result = coll.deleteMany(filter);`; + } + if ('aggregation' in spec) { + const agg = spec.aggregation; + cmd = `const cursor = coll.aggregate(agg);\nconst result = await cursor.toArray();`; + defs = `const agg = ${agg};\n`; + } else if (!cmd) { + let opts = ''; - if (Object.keys(args).length > 0) { - defs = Object.keys(args).reduce((s, k) => { - if (k !== 'filter') { - if (opts === '') { - opts = `${k}`; - } else { - opts = `${opts}, ${k}`; - } + if (Object.keys(args).length > 0) { + defs = Object.keys(args).reduce((s, k) => { + if (k !== 'filter') { + if (opts === '') { + opts = `${k}`; + } else { + opts = `${opts}, ${k}`; } - return `${s}const ${k} = ${args[k]};\n`; - }, ''); - opts = opts === '' ? '' : `, { ${opts} }`; - } - cmd = `const cursor = coll.find(filter${opts});\nconst result = await cursor.toArray();`; - } - return `${comment}\n\n${defs} - const client = await MongoClient.connect( - '${spec.options.uri}' - ); - const coll = client.db('${spec.options.database}').collection('${spec.options.collection}'); - ${cmd} - await client.close();`; - } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return `${lhs} !== ${rhs}`; - } else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} === ${rhs}`; + } + return `${s}const ${k} = ${args[k]};\n`; + }, ''); + opts = opts === '' ? '' : `, { ${opts} }`; } - return `${lhs} ${op} ${rhs}`; - } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let str = '!=='; - if (op.includes('!') || op.includes('not')) { - str = '==='; + cmd = `const cursor = coll.find(filter${opts});\nconst result = await cursor.toArray();`; + } + return `${comment}\n\n${defs} + const client = await MongoClient.connect( + '${spec.options.uri}' + ); + const coll = client.db('${spec.options.database}').collection('${spec.options.collection}'); + ${cmd} + await client.close();`; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return `${lhs} !== ${rhs}`; + } else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} === ${rhs}`; + } + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let str = '!=='; + if (op.includes('!') || op.includes('not')) { + str = '==='; + } + return `${rhs}.indexOf(${lhs}) ${str} -1` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `!${arg}`; + } + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; } - return `${rhs}.indexOf(${lhs}) ${str} -1` - } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `!${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `Math.floor(${s}, ${rhs})`; - case '**': - return `Math.pow(${s}, ${rhs})`; - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosSyntaxTemplate: &EosSyntaxTemplate null - EofSyntaxTemplate: &EofSyntaxTemplate null - NewTemplate: &NewSyntaxTemplate !!js/function > - (expr, skip, code) => { - // Add classes that don't use "new" to array. - // So far: [Date.now, Decimal128/NumberDecimal, Long/NumberLong] - noNew = [200.1, 112, 106]; - if (skip || (code && noNew.indexOf(code) !== -1)) { - return expr; + const rhs = arr[i + 1]; + switch(op) { + case '//': + return `Math.floor(${s}, ${rhs})`; + case '**': + return `Math.pow(${s}, ${rhs})`; + default: + return `${s} ${op} ${rhs}`; } - return `new ${expr}`; - } - # BSON Object Type templates - CodeTypeTemplate: &CodeTypeTemplate null - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosSyntaxTemplate: &EosSyntaxTemplate null + EofSyntaxTemplate: &EofSyntaxTemplate null + NewTemplate: !!js/function &NewSyntaxTemplate > + (expr, skip, code) => { + // Add classes that don't use "new" to array. + // So far: [Date.now, Decimal128/NumberDecimal, Long/NumberLong] + noNew = [200.1, 112, 106]; + if (skip || (code && noNew.indexOf(code) !== -1)) { + return expr; + } + return `new ${expr}`; + } + # BSON Object Type templates + CodeTypeTemplate: &CodeTypeTemplate null + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + const str = pattern; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - const str = pattern; + pattern = `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + return `RegExp(${pattern}${flags ? ', ' + '\'' + flags + '\'': ''})`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null + DecimalTypeTemplate: &DecimalTypeTemplate null + LongBasicTypeTemplate: &LongBasicTypeTemplate null + HexTypeTemplate: &HexTypeTemplate null + OctalTypeTemplate: &OctalTypeTemplate null + NumericTypeTemplate: &NumericTypeTemplate null + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + if (literal === '') { + return '[]' + } + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + + return `[${indent}${literal}${closingIndent}]`; + } + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'null'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'undefined'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => { + if (literal === '') { + return '{}'; + } + return literal; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return '{}'; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + const singleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); } - pattern = `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - return `RegExp(${pattern}${flags ? ', ' + '\'' + flags + '\'': ''})`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null - DecimalTypeTemplate: &DecimalTypeTemplate null - LongBasicTypeTemplate: &LongBasicTypeTemplate null - HexTypeTemplate: &HexTypeTemplate null - OctalTypeTemplate: &OctalTypeTemplate null - NumericTypeTemplate: &NumericTypeTemplate null - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - if (literal === '') { - return '[]' - } - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - - return `[${indent}${literal}${closingIndent}]`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'null'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'undefined'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => { - if (literal === '') { - return '{}'; - } - return literal; + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return '{}'; - } - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - } - const pairs = args.map((arg) => { - return `${indent}${singleStringify(arg[0])}: ${arg[1]}`; - }).join(', '); + const pairs = args.map((arg) => { + return `${indent}${singleStringify(arg[0])}: ${arg[1]}`; + }).join(', '); - return `{${pairs}${closingIndent}}` - } - # BSON Object Method templates - CodeCodeTemplate: &CodeCodeTemplate null - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate null - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate null - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate null - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate null - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate null - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (lhs) => { - return `${lhs}.sub_type`; - } - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}.db`; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}.namespace`; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}.oid`; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - () => { - return ''; - } - LongEqualsTemplate: &LongEqualsTemplate null - LongEqualsArgsTemplate: &LongEqualsArgsTemplate null - LongToStringTemplate: &LongToStringTemplate null - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `${lhs}.toInt`; - } - LongToIntArgsTemplate: &LongToIntArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate null - LongToNumberArgsTemplate: &LongToNumberArgsTemplate null - LongAddTemplate: &LongAddTemplate null - LongAddArgsTemplate: &LongAddArgsTemplate null - LongSubtractTemplate: &LongSubtractTemplate null - LongSubtractArgsTemplate: &LongSubtractArgsTemplate null - LongMultiplyTemplate: &LongMultiplyTemplate null - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null - LongDivTemplate: &LongDivTemplate null - LongDivArgsTemplate: &LongDivArgsTemplate null - LongModuloTemplate: &LongModuloTemplate null - LongModuloArgsTemplate: &LongModuloArgsTemplate null - LongAndTemplate: &LongAndTemplate null - LongAndArgsTemplate: &LongAndArgsTemplate null - LongOrTemplate: &LongOrTemplate null - LongOrArgsTemplate: &LongOrArgsTemplate null - LongXorTemplate: &LongXorTemplate null - LongXorArgsTemplate: &LongXorArgsTemplate null - LongShiftLeftTemplate: &LongShiftLeftTemplate null - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null - LongShiftRightTemplate: &LongShiftRightTemplate null - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null - LongCompareTemplate: &LongCompareTemplate null - LongCompareArgsTemplate: &LongCompareArgsTemplate null - LongIsOddTemplate: &LongIsOddTemplate null - LongIsOddArgsTemplate: &LongIsOddArgsTemplate null - LongIsZeroTemplate: &LongIsZeroTemplate null - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null - LongIsNegativeTemplate: &LongIsNegativeTemplate null - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null - LongNegateTemplate: &LongNegateTemplate null - LongNegateArgsTemplate: &LongNegateArgsTemplate null - LongNotTemplate: &LongNotTemplate null - LongNotArgsTemplate: &LongNotArgsTemplate null - LongNotEqualsTemplate: &LongNotEqualsTemplate null - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null - LongGreaterThanTemplate: &LongGreaterThanTemplate null - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null - LongLessThanTemplate: &LongLessThanTemplate null - LongLessThanArgsTemplate: &LongLessThanArgsTemplate null - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `${lhs}.toNumber()`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs}.getHighBits()`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs}.getLowBits()`; - } - TimestampToStringTemplate: &TimestampToStringTemplate null - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - TimestampEqualsTemplate: &TimestampEqualsTemplate null - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.getLowBits`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.getHighBits`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `${lhs}.getLowBits()`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `${lhs}.getHighBits()`; - } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => { - return `new Date(${lhs}.getHighBits() * 1000)`; - } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => { - return ''; - } - TimestampCompareTemplate: &TimestampCompareTemplate null - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null - TimestampLessThanTemplate: &TimestampLessThanTemplate null - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null - SymbolValueOfTemplate: &SymbolValueOfTemplate null - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null - SymbolInspectTemplate: &SymbolInspectTemplate null - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null - SymbolToStringTemplate: &SymbolToStringTemplate null - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null - # Symbol Templates - CodeSymbolTemplate: &CodeSymbolTemplate null - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (lhs, code, scope) => { - code = code === undefined ? '\'\'' : code; - scope = scope === undefined ? '' : `, ${scope}`; - return `(${code}${scope})`; - } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, str) => { - if (!str || str.length === 0) { - return '()'; - } - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; - } - BinarySymbolTemplate: &BinarySymbolTemplate !!js/function > - () => { - return 'Binary'; - } - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate !!js/function > - (lhs, buffer, subtype) => { - return `(${buffer.toString('base64')}, '${subtype}')`; - } - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null - DBRefSymbolTemplate: &DBRefSymbolTemplate null - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return 'Double'; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return 'Int32'; - } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? 0 : arg; - return `(${arg})`; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return ''; - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_string') { - return `Long.fromString(${arg})`; - } - return `Long.fromNumber(${arg})`; - } - LongSymbolMaxTemplate: &LongSymbolMaxTemplate null - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate null - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate null - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate null - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null - MinKeySymbolTemplate: &MinKeySymbolTemplate null - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null - MaxKeySymbolTemplate: &MaxKeySymbolTemplate null - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null - TimestampSymbolTemplate: &TimestampSymbolTemplate null - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; - } - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return 'BSONSymbol'; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return 'BSONRegExp'; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; - } - return `(${singleStringify(pattern)}${flags ? ', ' + singleStringify(flags) : ''})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? '0' : arg.toString(); - if (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') { - return `.fromString(${arg})`; - } - return `.fromString('${arg}')`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null - Decimal128ToStringTemplate: &Decimal128ToStringTemplate null - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # BSON Util Templates - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return `ObjectId.createFromTime`; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (!isNumber) { - return `(${arg}.getTime() / 1000)`; + return `{${pairs}${closingIndent}}` + } + # BSON Object Method templates + CodeCodeTemplate: &CodeCodeTemplate null + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: &CodeScopeTemplate null + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: &ObjectIdToStringTemplate null + ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate null + ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null + ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null + ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate null + ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate null + BinaryValueTemplate: &BinaryValueTemplate null + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (lhs) => { + return `${lhs}.sub_type`; + } + BinarySubtypeArgsTemplate: !!js/function &BinarySubtypeArgsTemplate > + () => { + return ''; + } + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}.db`; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}.namespace`; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}.oid`; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + () => { + return ''; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + () => { + return ''; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + () => { + return ''; + } + LongEqualsTemplate: &LongEqualsTemplate null + LongEqualsArgsTemplate: &LongEqualsArgsTemplate null + LongToStringTemplate: &LongToStringTemplate null + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `${lhs}.toInt`; + } + LongToIntArgsTemplate: &LongToIntArgsTemplate null + LongToNumberTemplate: &LongToNumberTemplate null + LongToNumberArgsTemplate: &LongToNumberArgsTemplate null + LongAddTemplate: &LongAddTemplate null + LongAddArgsTemplate: &LongAddArgsTemplate null + LongSubtractTemplate: &LongSubtractTemplate null + LongSubtractArgsTemplate: &LongSubtractArgsTemplate null + LongMultiplyTemplate: &LongMultiplyTemplate null + LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null + LongDivTemplate: &LongDivTemplate null + LongDivArgsTemplate: &LongDivArgsTemplate null + LongModuloTemplate: &LongModuloTemplate null + LongModuloArgsTemplate: &LongModuloArgsTemplate null + LongAndTemplate: &LongAndTemplate null + LongAndArgsTemplate: &LongAndArgsTemplate null + LongOrTemplate: &LongOrTemplate null + LongOrArgsTemplate: &LongOrArgsTemplate null + LongXorTemplate: &LongXorTemplate null + LongXorArgsTemplate: &LongXorArgsTemplate null + LongShiftLeftTemplate: &LongShiftLeftTemplate null + LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null + LongShiftRightTemplate: &LongShiftRightTemplate null + LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null + LongCompareTemplate: &LongCompareTemplate null + LongCompareArgsTemplate: &LongCompareArgsTemplate null + LongIsOddTemplate: &LongIsOddTemplate null + LongIsOddArgsTemplate: &LongIsOddArgsTemplate null + LongIsZeroTemplate: &LongIsZeroTemplate null + LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null + LongIsNegativeTemplate: &LongIsNegativeTemplate null + LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null + LongNegateTemplate: &LongNegateTemplate null + LongNegateArgsTemplate: &LongNegateArgsTemplate null + LongNotTemplate: &LongNotTemplate null + LongNotArgsTemplate: &LongNotArgsTemplate null + LongNotEqualsTemplate: &LongNotEqualsTemplate null + LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null + LongGreaterThanTemplate: &LongGreaterThanTemplate null + LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null + LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null + LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null + LongLessThanTemplate: &LongLessThanTemplate null + LongLessThanArgsTemplate: &LongLessThanArgsTemplate null + LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null + LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `${lhs}.toNumber()`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs}.getHighBits()`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs}.getLowBits()`; + } + TimestampToStringTemplate: &TimestampToStringTemplate null + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + TimestampEqualsTemplate: &TimestampEqualsTemplate null + TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `${lhs}.getLowBits`; + } + TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `${lhs}.getHighBits`; + } + TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `${lhs}.getLowBits()`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `${lhs}.getHighBits()`; + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => { + return `new Date(${lhs}.getHighBits() * 1000)`; + } + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => { + return ''; + } + TimestampCompareTemplate: &TimestampCompareTemplate null + TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null + TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null + TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null + TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null + TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null + TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null + TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null + TimestampLessThanTemplate: &TimestampLessThanTemplate null + TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null + TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null + TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null + SymbolValueOfTemplate: &SymbolValueOfTemplate null + SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null + SymbolInspectTemplate: &SymbolInspectTemplate null + SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null + SymbolToStringTemplate: &SymbolToStringTemplate null + SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null + # Symbol Templates + CodeSymbolTemplate: &CodeSymbolTemplate null + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (lhs, code, scope) => { + code = code === undefined ? '\'\'' : code; + scope = scope === undefined ? '' : `, ${scope}`; + return `(${code}${scope})`; + } + ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, str) => { + if (!str || str.length === 0) { + return '()'; + } + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; + } + BinarySymbolTemplate: !!js/function &BinarySymbolTemplate > + () => { + return 'Binary'; + } + BinarySymbolArgsTemplate: !!js/function &BinarySymbolArgsTemplate > + (lhs, buffer, subtype) => { + return `(${buffer.toString('base64')}, '${subtype}')`; + } + BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null + BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null + BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null + BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null + BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null + BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null + BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null + DBRefSymbolTemplate: &DBRefSymbolTemplate null + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return 'Double'; + } + DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return 'Int32'; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? 0 : arg; + return `(${arg})`; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return ''; + } + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_string') { + return `Long.fromString(${arg})`; + } + return `Long.fromNumber(${arg})`; + } + LongSymbolMaxTemplate: &LongSymbolMaxTemplate null + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: &LongSymbolMinTemplate null + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: &LongSymbolZeroTemplate null + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: &LongSymbolOneTemplate null + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null + LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null + LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null + LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null + MinKeySymbolTemplate: &MinKeySymbolTemplate null + MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null + MaxKeySymbolTemplate: &MaxKeySymbolTemplate null + MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null + TimestampSymbolTemplate: &TimestampSymbolTemplate null + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; + } + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return 'BSONSymbol'; + } + SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return 'BSONRegExp'; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + const singleStringify = (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - return `(${arg})`; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs) => { - return `${lhs}.isValid`; - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - # JS Symbol Templates - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return 'Number'; - } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? '0' : arg; - return `(${arg})`; - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'Date'; - } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate null - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return 'Date.now'; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => { - return 'RegExp'; - } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - const bson = []; - const other = []; - Object.keys(args).map( - (m) => { - if (m > 99 && m < 200) { - bson.push(args[m]); - } else { - other.push(args[m]); - } + return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; + } + return `(${singleStringify(pattern)}${flags ? ', ' + singleStringify(flags) : ''})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? '0' : arg.toString(); + if (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') { + return `.fromString(${arg})`; + } + return `.fromString('${arg}')`; + } + Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null + Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null + Decimal128ToStringTemplate: &Decimal128ToStringTemplate null + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # BSON Util Templates + ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null + ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return `ObjectId.createFromTime`; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (!isNumber) { + return `(${arg}.getTime() / 1000)`; + } + return `(${arg})`; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs) => { + return `${lhs}.isValid`; + } + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + # JS Symbol Templates + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return 'Number'; + } + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? '0' : arg; + return `(${arg})`; + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'Date'; + } + DateSymbolArgsTemplate: &DateSymbolArgsTemplate null + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return 'Date.now'; + } + DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => { + return 'RegExp'; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + const bson = []; + const other = []; + Object.keys(args).map( + (m) => { + if (m > 99 && m < 200) { + bson.push(args[m]); + } else { + other.push(args[m]); } - ); - if (bson.length) { - other.push(`import {\n ${bson.join(',\n ')}\n} from 'mongodb';`); } - return other.join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => { - return `import { MongoClient } from 'mongodb';`; - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate null - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate !!js/function > - () => { - return 'Code'; - } - 101ImportTemplate: &101ImportTemplate !!js/function > - () => { - return 'ObjectId'; - } - 102ImportTemplate: &102ImportTemplate !!js/function > - () => { - return 'Binary'; - } - 103ImportTemplate: &103ImportTemplate !!js/function > - () => { - return 'DBRef'; - } - 104ImportTemplate: &104ImportTemplate !!js/function > - () => { - return 'Double'; - } - 105ImportTemplate: &105ImportTemplate !!js/function > - () => { - return 'Int32'; - } - 106ImportTemplate: &106ImportTemplate !!js/function > - () => { - return 'Long'; - } - 107ImportTemplate: &107ImportTemplate !!js/function > - () => { - return 'MinKey'; - } - 108ImportTemplate: &108ImportTemplate !!js/function > - () => { - return 'MaxKey'; - } - 109ImportTemplate: &109ImportTemplate !!js/function > - () => { - return 'BSONRegExp'; - } - 110ImportTemplate: &110ImportTemplate !!js/function > - () => { - return 'Timestamp'; - } - 111ImportTemplate: &111ImportTemplate !!js/function > - () => { - return 'BSONSymbol'; - } - 112ImportTemplate: &112ImportTemplate !!js/function > - () => { - return 'Decimal128'; - } - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate null - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + ); + if (bson.length) { + other.push(`import {\n ${bson.join(',\n ')}\n} from 'mongodb';`); + } + return other.join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => { + return `import { MongoClient } from 'mongodb';`; + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: &8ImportTemplate null + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: !!js/function &100ImportTemplate > + () => { + return 'Code'; + } + 101ImportTemplate: !!js/function &101ImportTemplate > + () => { + return 'ObjectId'; + } + 102ImportTemplate: !!js/function &102ImportTemplate > + () => { + return 'Binary'; + } + 103ImportTemplate: !!js/function &103ImportTemplate > + () => { + return 'DBRef'; + } + 104ImportTemplate: !!js/function &104ImportTemplate > + () => { + return 'Double'; + } + 105ImportTemplate: !!js/function &105ImportTemplate > + () => { + return 'Int32'; + } + 106ImportTemplate: !!js/function &106ImportTemplate > + () => { + return 'Long'; + } + 107ImportTemplate: !!js/function &107ImportTemplate > + () => { + return 'MinKey'; + } + 108ImportTemplate: !!js/function &108ImportTemplate > + () => { + return 'MaxKey'; + } + 109ImportTemplate: !!js/function &109ImportTemplate > + () => { + return 'BSONRegExp'; + } + 110ImportTemplate: !!js/function &110ImportTemplate > + () => { + return 'Timestamp'; + } + 111ImportTemplate: !!js/function &111ImportTemplate > + () => { + return 'BSONSymbol'; + } + 112ImportTemplate: !!js/function &112ImportTemplate > + () => { + return 'Decimal128'; + } + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: &200ImportTemplate null + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/main.yaml b/packages/bson-transpilers/symbols/main.yaml index 2dd97c5543e..3804b55086a 100644 --- a/packages/bson-transpilers/symbols/main.yaml +++ b/packages/bson-transpilers/symbols/main.yaml @@ -1,20 +1,19 @@ SymbolTypes: - VAR: &var 0 - CONSTRUCTOR: &constructor 1 - FUNC: &func 2 + VAR: &var 0 + CONSTRUCTOR: &constructor 1 + FUNC: &func 2 # Internal patterns to save typing __type: &__type - id: null - callable: *var - args: null - type: null - attr: {} - template: null - argsTemplate: null + id: null + callable: *var + args: null + type: null + attr: {} + template: null + argsTemplate: null __func: &__func - callable: *func - args: [] - attr: {} - template: null - argsTemplate: null - + callable: *func + args: [] + attr: {} + template: null + argsTemplate: null diff --git a/packages/bson-transpilers/symbols/object/templates.yaml b/packages/bson-transpilers/symbols/object/templates.yaml index 96cc7a2af3a..b045860c0d6 100644 --- a/packages/bson-transpilers/symbols/object/templates.yaml +++ b/packages/bson-transpilers/symbols/object/templates.yaml @@ -18,596 +18,601 @@ # # ############################################# Templates: - ######## - # Misc # - ######## + ######## + # Misc # + ######## - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: 'y' - g: 'g' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: 'y' + g: 'g' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - DriverTemplate: &DriverTemplate null - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return lhs !== rhs; + DriverTemplate: &DriverTemplate null + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return lhs !== rhs; + } + if (op === '==' || op === '===' || op === 'is') { + if (typeof(lhs) === 'object' && 'equals' in lhs) { + // Use '.equals' for objects, if it exists. + return lhs.equals(rhs); } - if (op === '==' || op === '===' || op === 'is') { - if (typeof(lhs) === 'object' && 'equals' in lhs) { - // Use '.equals' for objects, if it exists. - return lhs.equals(rhs); - } - return lhs === rhs; - } - if (op === '>') { - return lhs > rhs; - } - if (op === '<') { - return lhs < rhs; - } - if (op === '>=') { - return lhs >= rhs; - } - if (op === '<=') { - return lhs <= rhs; - } - throw new Error(`unrecognized operation: ${op}`); + return lhs === rhs; } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - if (typeof rhs === 'array') { - return rhs.indexOf(lhs) === -1; - } - return !(lhs in rhs); - } - if (typeof rhs === 'array') { - return rhs.indexOf(lhs) !== -1; - } - return lhs in rhs; + if (op === '>') { + return lhs > rhs; } - - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.reduce((t, k, i) => { - return t && k; - }); + if (op === '<') { + return lhs < rhs; + } + if (op === '>=') { + return lhs >= rhs; } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.reduce((t, k, i) => { - return t || k; - }); + if (op === '<=') { + return lhs <= rhs; + } + throw new Error(`unrecognized operation: ${op}`); + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + if (typeof rhs === 'array') { + return rhs.indexOf(lhs) === -1; + } + return !(lhs in rhs); } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return !arg; + if (typeof rhs === 'array') { + return rhs.indexOf(lhs) !== -1; } - UnarySyntaxTemplate: &UnarySyntaxTemplate !!js/function > - (op, arg) => { + return lhs in rhs; + } + + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.reduce((t, k, i) => { + return t && k; + }); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.reduce((t, k, i) => { + return t || k; + }); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return !arg; + } + UnarySyntaxTemplate: !!js/function &UnarySyntaxTemplate > + (op, arg) => { + switch(op) { + case '+': + return +arg; + case '-': + return -arg; + case '~': + return ~arg; + default: + throw new Error(`unrecognized operation: ${op}`); + } + } + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; + } + const rhs = arr[i + 1]; switch(op) { case '+': - return +arg; + return s + rhs; case '-': - return -arg; - case '~': - return ~arg; + return s - rhs; + case '*': + return s * rhs; + case '/': + return s / rhs; + case '**': + return Math.pow(s, rhs); + case '//': + return Math.floor(s, rhs); + case '%': + return s % rhs; + case '>>': + return s >> rhs; + case '<<': + return s << rhs; + case '|': + return s | rhs; + case '&': + return s & rhs; + case '^': + return s ^ rhs; default: throw new Error(`unrecognized operation: ${op}`); } - } - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '+': - return s + rhs; - case '-': - return s - rhs; - case '*': - return s * rhs; - case '/': - return s / rhs; - case '**': - return Math.pow(s, rhs); - case '//': - return Math.floor(s, rhs); - case '%': - return s % rhs; - case '>>': - return s >> rhs; - case '<<': - return s << rhs; - case '|': - return s | rhs; - case '&': - return s & rhs; - case '^': - return s ^ rhs; - default: - throw new Error(`unrecognized operation: ${op}`); - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate !!js/function > - (arg) => { - return arg; - } - EosSyntaxTemplate: &EosSyntaxTemplate !!js/function > - () => { - return 'a unique thing'; - } - EofSyntaxTemplate: &EofSyntaxTemplate !!js/function > - () => { - return 'a unique thing'; - } - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + }, args[0]); + } + ParensSyntaxTemplate: !!js/function &ParensSyntaxTemplate > + (arg) => { + return arg; + } + EosSyntaxTemplate: !!js/function &EosSyntaxTemplate > + () => { + return 'a unique thing'; + } + EofSyntaxTemplate: !!js/function &EofSyntaxTemplate > + () => { + return 'a unique thing'; + } + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str.toString(); - if ( - (newStr.charAt(0) === '"' && newStr.charAt(newStr.length - 1) === '"') || - (newStr.charAt(0) === '\'' && newStr.charAt(newStr.length - 1) === '\'') - ) { - newStr = newStr.substr(1, newStr.length - 2); - } - return newStr; - } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - return new RegExp(pattern, flags); - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (str) => { - return str.toLowerCase() === 'true'; - } - IntegerTypeTemplate: &IntegerTypeTemplate !!js/function > - (arg) => { - return parseInt(arg, 10); - } - DecimalTypeTemplate: &DecimalTypeTemplate !!js/function > - (arg) => { - return parseFloat(arg); - } - LongBasicTypeTemplate: &LongBasicTypeTemplate !!js/function > - (arg) => { - return parseInt(arg, 10); - } - HexTypeTemplate: &HexTypeTemplate !!js/function > - (arg) => { + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str.toString(); + if ( + (newStr.charAt(0) === '"' && newStr.charAt(newStr.length - 1) === '"') || + (newStr.charAt(0) === '\'' && newStr.charAt(newStr.length - 1) === '\'') + ) { + newStr = newStr.substr(1, newStr.length - 2); + } + return newStr; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + return new RegExp(pattern, flags); + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (str) => { + return str.toLowerCase() === 'true'; + } + IntegerTypeTemplate: !!js/function &IntegerTypeTemplate > + (arg) => { + return parseInt(arg, 10); + } + DecimalTypeTemplate: !!js/function &DecimalTypeTemplate > + (arg) => { + return parseFloat(arg); + } + LongBasicTypeTemplate: !!js/function &LongBasicTypeTemplate > + (arg) => { + return parseInt(arg, 10); + } + HexTypeTemplate: !!js/function &HexTypeTemplate > + (arg) => { + return parseInt(arg, 16); + } + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (arg) => { + arg = arg.replace(/[oO]/g, '') + return parseInt(arg, 8); + } + NumericTypeTemplate: !!js/function &NumericTypeTemplate > + (arg) => { + if (arg.contains('x')) { return parseInt(arg, 16); } - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (arg) => { - arg = arg.replace(/[oO]/g, '') + if (arg.contains('o') || arg.startsWith('0')) { + arg = arg.replace(/o/g, '') return parseInt(arg, 8); } - NumericTypeTemplate: &NumericTypeTemplate !!js/function > - (arg) => { - if (arg.contains('x')) { - return parseInt(arg, 16); - } - if (arg.contains('o') || arg.startsWith('0')) { - arg = arg.replace(/o/g, '') - return parseInt(arg, 8); - } - return parseFloat(arg); - } - ArrayTypeTemplate: &ArrayTypeTemplate null - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return null; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return undefined; - } - ObjectTypeTemplate: &ObjectTypeTemplate null # Args: literal (for empty array, is empty string. Otherwise all set) - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate null # Args: single object element [2] (i.e. array with [key, value]), nestedness# + return parseFloat(arg); + } + ArrayTypeTemplate: &ArrayTypeTemplate null + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return null; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return undefined; + } + ObjectTypeTemplate: &ObjectTypeTemplate null # Args: literal (for empty array, is empty string. Otherwise all set) + ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate null # Args: single object element [2] (i.e. array with [key, value]), nestedness# - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate null # No args - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate null # Args: code, scope - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null # No args - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate null # Args: lhs, string (can be empty or null for no arg) - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null - DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db - DoubleSymbolTemplate: &DoubleSymbolTemplate null # No args - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null # Args: lhs, arg, argType (i.e. '_string', '_double') - Int32SymbolTemplate: &Int32SymbolTemplate null # No args - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate null # Args: lhs, arg, argType - LongSymbolTemplate: &LongSymbolTemplate null # No args - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > # Args: lhs, arg, argType - (lhs, arg) => { - return lhs.fromNumber(arg); - } - RegExpSymbolTemplate: &RegExpSymbolTemplate null # No args - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate null # No args - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null # Args: lhs, arg - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate null # No args - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg - MinKeySymbolTemplate: &MinKeySymbolTemplate null # No args - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null # No args - MaxKeySymbolTemplate: &MaxKeySymbolTemplate null # No args - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null # No args - TimestampSymbolTemplate: &TimestampSymbolTemplate null # No args - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate null # Args: lhs, low, high - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return Number; - } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate null # Args: lhs, arg, argType - DateSymbolTemplate: &DateSymbolTemplate null # No args - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - if (isString) { - return date.toString(); - } - return date; - } + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: &CodeSymbolTemplate null # No args + CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate null # Args: code, scope + ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null # No args + ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate null # Args: lhs, string (can be empty or null for no arg) + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null + BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null + BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null + BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null + BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null + BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null + BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null + BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null + DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db + DoubleSymbolTemplate: &DoubleSymbolTemplate null # No args + DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null # Args: lhs, arg, argType (i.e. '_string', '_double') + Int32SymbolTemplate: &Int32SymbolTemplate null # No args + Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate null # Args: lhs, arg, argType + LongSymbolTemplate: &LongSymbolTemplate null # No args + LongSymbolArgsTemplate: + !!js/function &LongSymbolArgsTemplate > # Args: lhs, arg, argType + (lhs, arg) => { + return lhs.fromNumber(arg); + } + RegExpSymbolTemplate: &RegExpSymbolTemplate null # No args + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: &SymbolSymbolTemplate null # No args + SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null # Args: lhs, arg + BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate null # No args + BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args + Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg + MinKeySymbolTemplate: &MinKeySymbolTemplate null # No args + MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null # No args + MaxKeySymbolTemplate: &MaxKeySymbolTemplate null # No args + MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null # No args + TimestampSymbolTemplate: &TimestampSymbolTemplate null # No args + TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate null # Args: lhs, low, high + # non bson-specific + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return Number; + } + NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate null # Args: lhs, arg, argType + DateSymbolTemplate: &DateSymbolTemplate null # No args + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + if (isString) { + return date.toString(); + } + return date; + } - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate null - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate null - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs, rhs) => { - return lhs.toString(); - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => { - return lhs; - } - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs.equals(rhs); - } - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs, rhs) => { - return lhs.getTimestamp(); - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs, rhs) => { - return lhs.isValid; - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate null - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate null - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs, rhs) => { - return lhs.db; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs, rhs) => { - return lhs.collection; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs, rhs) => { - return lhs.oid; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - LongEqualsTemplate: &LongEqualsTemplate null - LongEqualsArgsTemplate: &LongEqualsArgsTemplate null - LongToStringTemplate: &LongToStringTemplate null - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToIntTemplate: &LongToIntTemplate null - LongToIntArgsTemplate: &LongToIntArgsTemplate null - LongValueOfTemplate: &LongValueOfTemplate null - LongValueOfArgsTemplate: &LongValueOfArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate null - LongToNumberArgsTemplate: &LongToNumberArgsTemplate null - LongAddTemplate: &LongAddTemplate null - LongAddArgsTemplate: &LongAddArgsTemplate null - LongSubtractTemplate: &LongSubtractTemplate null - LongSubtractArgsTemplate: &LongSubtractArgsTemplate null - LongMultiplyTemplate: &LongMultiplyTemplate null - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null - LongDivTemplate: &LongDivTemplate null - LongDivArgsTemplate: &LongDivArgsTemplate null - LongModuloTemplate: &LongModuloTemplate null - LongModuloArgsTemplate: &LongModuloArgsTemplate null - LongAndTemplate: &LongAndTemplate null - LongAndArgsTemplate: &LongAndArgsTemplate null - LongOrTemplate: &LongOrTemplate null - LongOrArgsTemplate: &LongOrArgsTemplate null - LongXorTemplate: &LongXorTemplate null - LongXorArgsTemplate: &LongXorArgsTemplate null - LongShiftLeftTemplate: &LongShiftLeftTemplate null - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null - LongShiftRightTemplate: &LongShiftRightTemplate null - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null - LongCompareTemplate: &LongCompareTemplate null - LongCompareArgsTemplate: &LongCompareArgsTemplate null - LongIsOddTemplate: &LongIsOddTemplate null - LongIsOddArgsTemplate: &LongIsOddArgsTemplate null - LongIsZeroTemplate: &LongIsZeroTemplate null - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null - LongIsNegativeTemplate: &LongIsNegativeTemplate null - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null - LongNegateTemplate: &LongNegateTemplate null - LongNegateArgsTemplate: &LongNegateArgsTemplate null - LongNotTemplate: &LongNotTemplate null - LongNotArgsTemplate: &LongNotArgsTemplate null - LongNotEqualsTemplate: &LongNotEqualsTemplate null - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null - LongGreaterThanTemplate: &LongGreaterThanTemplate null - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null - LongLessThanTemplate: &LongLessThanTemplate null - LongLessThanArgsTemplate: &LongLessThanArgsTemplate null - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs, rhs) => { - return lhs.toNumber(); - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs, rhs) => { - return lhs.high; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs, rhs) => { - return lhs.low; - } - TimestampToStringTemplate: &TimestampToStringTemplate null - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - TimestampEqualsTemplate: &TimestampEqualsTemplate null - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs, rhs) => { - return lhs.getLowBits(); - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs, rhs) => { - return lhs.getHighBits(); - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs, rhs) => { - return lhs.getLowBits(); - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs, rhs) => { - return lhs.getHighBits(); - } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs, rhs) => { - return new Date(lhs.getHighBits() * 1000); - } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - (lhs, rhs) => { - return lhs; - } - TimestampCompareTemplate: &TimestampCompareTemplate null - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null - TimestampLessThanTemplate: &TimestampLessThanTemplate null - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null - SymbolValueOfTemplate: &SymbolValueOfTemplate null - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null - SymbolInspectTemplate: &SymbolInspectTemplate null - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null - SymbolToStringTemplate: &SymbolToStringTemplate null - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null - Decimal128ToStringTemplate: &Decimal128ToStringTemplate null - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # non bson-specific - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return Date.now; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null - - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate null - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate null - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate null - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate null - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - (lhs, rhs) => { - return lhs.createFromTime; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null - # non bson-specific would go here, but there aren't any atm. + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: &CodeCodeTemplate null + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: &CodeScopeTemplate null + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs, rhs) => { + return lhs.toString(); + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + (lhs) => { + return lhs; + } + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => { + return lhs; + } + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (lhs, rhs) => { + return lhs.equals(rhs); + } + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs, rhs) => { + return lhs.getTimestamp(); + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + (lhs) => { + return lhs; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs, rhs) => { + return lhs.isValid; + } + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + BinaryValueTemplate: &BinaryValueTemplate null + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: &BinarySubtypeTemplate null + BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs, rhs) => { + return lhs.db; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs, rhs) => { + return lhs.collection; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs, rhs) => { + return lhs.oid; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + (lhs, rhs) => { + return lhs; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + (lhs, rhs) => { + return lhs; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + (lhs, rhs) => { + return lhs; + } + LongEqualsTemplate: &LongEqualsTemplate null + LongEqualsArgsTemplate: &LongEqualsArgsTemplate null + LongToStringTemplate: &LongToStringTemplate null + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToIntTemplate: &LongToIntTemplate null + LongToIntArgsTemplate: &LongToIntArgsTemplate null + LongValueOfTemplate: &LongValueOfTemplate null + LongValueOfArgsTemplate: &LongValueOfArgsTemplate null + LongToNumberTemplate: &LongToNumberTemplate null + LongToNumberArgsTemplate: &LongToNumberArgsTemplate null + LongAddTemplate: &LongAddTemplate null + LongAddArgsTemplate: &LongAddArgsTemplate null + LongSubtractTemplate: &LongSubtractTemplate null + LongSubtractArgsTemplate: &LongSubtractArgsTemplate null + LongMultiplyTemplate: &LongMultiplyTemplate null + LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null + LongDivTemplate: &LongDivTemplate null + LongDivArgsTemplate: &LongDivArgsTemplate null + LongModuloTemplate: &LongModuloTemplate null + LongModuloArgsTemplate: &LongModuloArgsTemplate null + LongAndTemplate: &LongAndTemplate null + LongAndArgsTemplate: &LongAndArgsTemplate null + LongOrTemplate: &LongOrTemplate null + LongOrArgsTemplate: &LongOrArgsTemplate null + LongXorTemplate: &LongXorTemplate null + LongXorArgsTemplate: &LongXorArgsTemplate null + LongShiftLeftTemplate: &LongShiftLeftTemplate null + LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null + LongShiftRightTemplate: &LongShiftRightTemplate null + LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null + LongCompareTemplate: &LongCompareTemplate null + LongCompareArgsTemplate: &LongCompareArgsTemplate null + LongIsOddTemplate: &LongIsOddTemplate null + LongIsOddArgsTemplate: &LongIsOddArgsTemplate null + LongIsZeroTemplate: &LongIsZeroTemplate null + LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null + LongIsNegativeTemplate: &LongIsNegativeTemplate null + LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null + LongNegateTemplate: &LongNegateTemplate null + LongNegateArgsTemplate: &LongNegateArgsTemplate null + LongNotTemplate: &LongNotTemplate null + LongNotArgsTemplate: &LongNotArgsTemplate null + LongNotEqualsTemplate: &LongNotEqualsTemplate null + LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null + LongGreaterThanTemplate: &LongGreaterThanTemplate null + LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null + LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null + LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null + LongLessThanTemplate: &LongLessThanTemplate null + LongLessThanArgsTemplate: &LongLessThanArgsTemplate null + LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null + LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs, rhs) => { + return lhs.toNumber(); + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs, rhs) => { + return lhs.high; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs, rhs) => { + return lhs.low; + } + TimestampToStringTemplate: &TimestampToStringTemplate null + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + TimestampEqualsTemplate: &TimestampEqualsTemplate null + TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs, rhs) => { + return lhs.getLowBits(); + } + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + (lhs, rhs) => { + return lhs; + } + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs, rhs) => { + return lhs.getHighBits(); + } + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + (lhs, rhs) => { + return lhs; + } + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs, rhs) => { + return lhs.getLowBits(); + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs, rhs) => { + return lhs.getHighBits(); + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs, rhs) => { + return new Date(lhs.getHighBits() * 1000); + } + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + (lhs, rhs) => { + return lhs; + } + TimestampCompareTemplate: &TimestampCompareTemplate null + TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null + TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null + TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null + TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null + TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null + TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null + TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null + TimestampLessThanTemplate: &TimestampLessThanTemplate null + TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null + TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null + TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null + SymbolValueOfTemplate: &SymbolValueOfTemplate null + SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null + SymbolInspectTemplate: &SymbolInspectTemplate null + SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null + SymbolToStringTemplate: &SymbolToStringTemplate null + SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null + Decimal128ToStringTemplate: &Decimal128ToStringTemplate null + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # non bson-specific + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return Date.now; + } + DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: &LongSymbolMaxTemplate null + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: &LongSymbolMinTemplate null + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: &LongSymbolZeroTemplate null + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: &LongSymbolOneTemplate null + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null + LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null + LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null + LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null + Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null + Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null + ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null + ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + (lhs, rhs) => { + return lhs.createFromTime; + } + ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null + # non bson-specific would go here, but there aren't any atm. - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate null - DriverImportTemplate: &DriverImportTemplate null - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate null - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate null - 101ImportTemplate: &101ImportTemplate null - 102ImportTemplate: &102ImportTemplate null - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - 107ImportTemplate: &107ImportTemplate null - 108ImportTemplate: &108ImportTemplate null - 109ImportTemplate: &109ImportTemplate null - 110ImportTemplate: &110ImportTemplate null - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate null - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate null - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: &ImportTemplate null + DriverImportTemplate: &DriverImportTemplate null + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: &8ImportTemplate null + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: &100ImportTemplate null + 101ImportTemplate: &101ImportTemplate null + 102ImportTemplate: &102ImportTemplate null + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + 107ImportTemplate: &107ImportTemplate null + 108ImportTemplate: &108ImportTemplate null + 109ImportTemplate: &109ImportTemplate null + 110ImportTemplate: &110ImportTemplate null + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: &112ImportTemplate null + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: &200ImportTemplate null + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/php/templates.yaml b/packages/bson-transpilers/symbols/php/templates.yaml index aa34155f9dc..e90af063cab 100644 --- a/packages/bson-transpilers/symbols/php/templates.yaml +++ b/packages/bson-transpilers/symbols/php/templates.yaml @@ -18,1234 +18,1263 @@ # # ############################################# Templates: - ######## - # Misc # - ######## + ######## + # Misc # + ######## - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: '' - y: '' - g: '' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: '' - u: '' + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: '' + y: '' + g: '' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: '' + u: '' - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - const getKey = k => { - let translateKey = { - project: 'projection', - } - return k in translateKey ? translateKey[k] : k - }; - const options = spec.options; - const filter = spec.filter || {}; - const exportMode = spec.exportMode; - delete spec.options; - delete spec.filter; - delete spec.exportMode; - - comment = [] - .concat('// Requires the MongoDB PHP Driver') - .concat('// https://www.mongodb.com/docs/drivers/php/') - .join('\n') - ; - const client = `$client = new Client('${options.uri}');`; - const collection = `$collection = $client->selectCollection('${options.database}', '${options.collection}');`; - - if ('aggregation' in spec) { - // Note: toPHPArray() may not be required here as Compass should always provide an array for spec.aggregation - return [] - .concat(comment) - .concat('') - .concat(client) - .concat(collection) - .concat(`$cursor = $collection->aggregate(${this.utils.toPHPArray(spec.aggregation)});`) - .join('\n') - ; - } - - let driverMethod; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'delete_many'; - break; - case 'Update Query': - driverMethod = 'update_many'; - break; - default: - driverMethod = 'find'; + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + const getKey = k => { + let translateKey = { + project: 'projection', } + return k in translateKey ? translateKey[k] : k + }; + const options = spec.options; + const filter = spec.filter || {}; + const exportMode = spec.exportMode; + delete spec.options; + delete spec.filter; + delete spec.exportMode; - let args = Object.keys(spec).reduce( - (result, k) => { - let val = this.utils.removePHPObject(spec[k]); - const divider = result === '' ? '' : ',\n'; - return `${result}${divider} '${getKey(k)}' => ${val}`; - }, - '' - ); - args = args ? `, [\n${args}\n]` : ''; + comment = [] + .concat('// Requires the MongoDB PHP Driver') + .concat('// https://www.mongodb.com/docs/drivers/php/') + .join('\n') + ; + const client = `$client = new Client('${options.uri}');`; + const collection = `$collection = $client->selectCollection('${options.database}', '${options.collection}');`; + if ('aggregation' in spec) { + // Note: toPHPArray() may not be required here as Compass should always provide an array for spec.aggregation return [] .concat(comment) .concat('') .concat(client) .concat(collection) - .concat(`$cursor = $collection->${driverMethod}(${this.utils.removePHPObject(filter)}${args});`) + .concat(`$cursor = $collection->aggregate(${this.utils.toPHPArray(spec.aggregation)});`) .join('\n') ; } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - // Identity comparison - if (op.includes('is')) { - if (op.includes('not')) { - return `${lhs} !== ${rhs}`; - } else { - return `${lhs} === ${rhs}`; - } + + let driverMethod; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'delete_many'; + break; + case 'Update Query': + driverMethod = 'update_many'; + break; + default: + driverMethod = 'find'; + } + + let args = Object.keys(spec).reduce( + (result, k) => { + let val = this.utils.removePHPObject(spec[k]); + const divider = result === '' ? '' : ',\n'; + return `${result}${divider} '${getKey(k)}' => ${val}`; + }, + '' + ); + args = args ? `, [\n${args}\n]` : ''; + + return [] + .concat(comment) + .concat('') + .concat(client) + .concat(collection) + .concat(`$cursor = $collection->${driverMethod}(${this.utils.removePHPObject(filter)}${args});`) + .join('\n') + ; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + // Identity comparison + if (op.includes('is')) { + if (op.includes('not')) { + return `${lhs} !== ${rhs}`; + } else { + return `${lhs} === ${rhs}`; } - // Not equal + } + // Not equal + if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; + } + // Equal + if (op === '==' || op === '===') { + return `${lhs} == ${rhs}`; + } + // All other cases + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + // array + if (rhs.charAt(0) === '[' && rhs.charAt(rhs.length - 1) === ']') { + let not = ''; if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; + not = '! '; } - // Equal - if (op === '==' || op === '===') { - return `${lhs} == ${rhs}`; - } - // All other cases - return `${lhs} ${op} ${rhs}`; + return `${not}\\in_array(${lhs}, ${rhs})`; } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - // array - if (rhs.charAt(0) === '[' && rhs.charAt(rhs.length - 1) === ']') { - let not = ''; - if (op.includes('!') || op.includes('not')) { - not = '! '; - } - return `${not}\\in_array(${lhs}, ${rhs})`; - } - - //object - if (rhs.indexOf('(object) ') === 0) { - let not = ''; - if (op.includes('!') || op.includes('not')) { - not = '! '; - } - return `${not}\\property_exists(${rhs}, ${lhs})`; - } - - // string - all other cases - let targop = '!=='; + + //object + if (rhs.indexOf('(object) ') === 0) { + let not = ''; if (op.includes('!') || op.includes('not')) { - targop = '==='; + not = '! '; } - return `\\strpos(${rhs}, ${lhs}) ${targop} false`; + return `${not}\\property_exists(${rhs}, ${lhs})`; } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `! ${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate !!js/function > - (op, arg) => { + + // string - all other cases + let targop = '!=='; + if (op.includes('!') || op.includes('not')) { + targop = '==='; + } + return `\\strpos(${rhs}, ${lhs}) ${targop} false`; + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `! ${arg}`; + } + UnarySyntaxTemplate: !!js/function &UnarySyntaxTemplate > + (op, arg) => { + switch(op) { + case '+': + return `+${arg}`; + case '-': + return `-${arg}`; + case '~': + return `~${arg}`; + default: + throw new Error(`unrecognized operation: ${op}`); + } + } + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; + } + const rhs = arr[i + 1]; switch(op) { case '+': - return `+${arg}`; + return `${s} + ${rhs}`; case '-': - return `-${arg}`; - case '~': - return `~${arg}`; + return `${s} - ${rhs}`; + case '*': + return `${s} * ${rhs}`; + case '/': + return `${s} / ${rhs}`; + case '**': + return `${s} ** ${rhs}`; + case '//': + return `\\intdiv(${s}, ${rhs})`; + case '%': + return `${s} % ${rhs}`; + case '>>': + return `${s} >> ${rhs}`; + case '<<': + return `${s} << ${rhs}`; + case '|': + return `${s} | ${rhs}`; + case '&': + return `${s} & ${rhs}`; + case '^': + return `${s} ^ ${rhs}`; default: throw new Error(`unrecognized operation: ${op}`); } - } - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '+': - return `${s} + ${rhs}`; - case '-': - return `${s} - ${rhs}`; - case '*': - return `${s} * ${rhs}`; - case '/': - return `${s} / ${rhs}`; - case '**': - return `${s} ** ${rhs}`; - case '//': - return `\\intdiv(${s}, ${rhs})`; - case '%': - return `${s} % ${rhs}`; - case '>>': - return `${s} >> ${rhs}`; - case '<<': - return `${s} << ${rhs}`; - case '|': - return `${s} | ${rhs}`; - case '&': - return `${s} & ${rhs}`; - case '^': - return `${s} ^ ${rhs}`; - default: - throw new Error(`unrecognized operation: ${op}`); - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosTemplate: &EosSyntaxTemplate null # No args. End-of-line - EofTemplate: &EofSyntaxTemplate null # No args. End-of-file - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosTemplate: &EosSyntaxTemplate null # No args. End-of-line + EofTemplate: &EofSyntaxTemplate null # No args. End-of-file + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - // This is some standalone object context, which is generated to parse - // node and doesn't have access to main Generator object. Thus we can't - // use utility function call. All ~Template calls use this type of - // context. All ~ArgsTemplate have access to utility functions. - - stringifyWithSingleQuotes = (str) => { - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"') - ) { - str = str.substr(1, str.length - 2); - } - return `'${str.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - }; + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + // This is some standalone object context, which is generated to parse + // node and doesn't have access to main Generator object. Thus we can't + // use utility function call. All ~Template calls use this type of + // context. All ~ArgsTemplate have access to utility functions. - return `${stringifyWithSingleQuotes(str)}`; - } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - // This is some standalone object context, which is generated to parse - // node and doesn't have access to main Generator object. Thus we can't - // use utility function call. All ~Template calls use this type of - // context. All ~ArgsTemplate have access to utility functions. - - stringifyWithDoubleQuotes = (str) => { - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"') - ) { - str = str.substr(1, str.length - 2); - } - return `${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}`; - }; - - pattern = `"${stringifyWithDoubleQuotes(pattern)}"`; - flags = flags ? `, "${flags}"` : ''; + stringifyWithSingleQuotes = (str) => { + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"') + ) { + str = str.substr(1, str.length - 2); + } + return `'${str.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + }; - return `new Regex(${pattern}${flags})`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) - DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType - LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType - HexTypeTemplate: &HexTypeTemplate null # args: literal, argType - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal) => { - let offset = 0; + return `${stringifyWithSingleQuotes(str)}`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + // This is some standalone object context, which is generated to parse + // node and doesn't have access to main Generator object. Thus we can't + // use utility function call. All ~Template calls use this type of + // context. All ~ArgsTemplate have access to utility functions. + stringifyWithDoubleQuotes = (str) => { if ( - literal.charAt(0) === '0' && - (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"') ) { - offset = 2; - } else if (literal.charAt(0) === '0') { - offset = 1; + str = str.substr(1, str.length - 2); } + return `${str.replace(/\\([\s\S])|(")/g, '\\$1$2')}`; + }; - literal = `0${literal.substr(offset, literal.length - 1)}`; + pattern = `"${stringifyWithDoubleQuotes(pattern)}"`; + flags = flags ? `, "${flags}"` : ''; - return literal; - } - NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - if (literal === '') { - return '[]' - } - return `[${literal}]`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'null'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'null'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => { - return `${literal}`; + return `new Regex(${pattern}${flags})`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) + DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType + LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType + HexTypeTemplate: &HexTypeTemplate null # args: literal, argType + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal) => { + let offset = 0; + + if ( + literal.charAt(0) === '0' && + (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') + ) { + offset = 2; + } else if (literal.charAt(0) === '0') { + offset = 1; } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - let isObjectCastRequired = true; - - if (args.length === 0) { - return `(object) []`; - } - const isExpectedIndex = (actualIndex, expectedIndex) => { - return '' + actualIndex === '' + expectedIndex; - } - - let indexTest = 0; - let pairs = args.map((arg) => { - if (isObjectCastRequired && !isExpectedIndex(arg[0], indexTest)) { - isObjectCastRequired = false; - } - indexTest++; - return `${this.utils.stringifyWithSingleQuotes(arg[0])} => ${arg[1]}`; - }).join(', '); + literal = `0${literal.substr(offset, literal.length - 1)}`; - // Rebuilding pairs for numeric sequential indexes without quotes - if (isObjectCastRequired) { - pairs = args.map((arg) => { - return `${arg[0]} => ${arg[1]}`; - }).join(', '); - } + return literal; + } + NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + if (literal === '') { + return '[]' + } + return `[${literal}]`; + } + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'null'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'null'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => { + return `${literal}`; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + let isObjectCastRequired = true; - return `${isObjectCastRequired ? '(object) ' : ''}[${pairs}]`; + if (args.length === 0) { + return `(object) []`; } - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > - () => { - return 'new Javascript'; - } - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (lhs, code, scope) => { - return !scope - ? `(${this.utils.stringifyWithSingleQuotes(code)})` - : `(${this.utils.stringifyWithSingleQuotes(code)}, ${scope})` - ; - } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function > - () => { - return 'new ObjectId'; - } - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, id) => { - return !id - ? `()` - : `(${this.utils.stringifyWithSingleQuotes(id)})` - ; - } - BinarySymbolTemplate: &BinarySymbolTemplate !!js/function > - () => { - return 'new Binary'; - } - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate !!js/function > - (lhs, bytes, type) => { - if (type === null) { - type = 'Binary::TYPE_GENERIC'; - } - return `(${this.utils.stringifyWithSingleQuotes(bytes)}, ${type})`; - } - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate !!js/function > - () => { - return 'Binary::TYPE_GENERIC'; - } - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate !!js/function > - () => { - return 'Binary::TYPE_FUNCTION'; + const isExpectedIndex = (actualIndex, expectedIndex) => { + return '' + actualIndex === '' + expectedIndex; } - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate !!js/function > - () => { - return 'Binary::TYPE_OLD_BINARY'; - } - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate !!js/function > - () => { - return 'Binary::TYPE_OLD_UUID'; - } - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate !!js/function > - () => { - return 'Binary::TYPE_UUID'; - } - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template !!js/function > - () => { - return 'Binary::TYPE_MD5'; - } - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate !!js/function > - () => { - return 'Binary::TYPE_USER_DEFINED'; - } - DBRefSymbolTemplate: &DBRefSymbolTemplate !!js/function > - () => { - return '' - } - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate !!js/function > - (lhs, coll, id, db) => { - let coll_string = `'$ref' => ${this.utils.stringifyWithSingleQuotes(coll)}`; - let id_string = `, '$id' => ${id}`; - let db_string = db ? `, '$db' => ${this.utils.stringifyWithSingleQuotes(db)}` : `, '$db' => null`; - return `[${coll_string}${id_string}${db_string}]`; - } - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return ''; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_decimal' || type === '_double') { - return arg; - } - if (type === '_integer' || type === '_long') { - return `${arg}.0`; - } - return `(float) ${arg}`; - } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return ''; - } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { - return arg; - } - return `(int) ${arg}`; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return '' - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { - return arg; - } - return `(int) ${arg}`; - } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => { - return 'new Regex'; - } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return ''; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate !!js/function > - (lhs, arg) => { - return arg; - } - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return 'new Regex'; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - return `(${this.utils.stringifyWithDoubleQuotes(pattern)}${flags ? ', ' + this.utils.stringifyWithDoubleQuotes(flags) : ''})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'new Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? '0' : arg.toString(); - return `('${this.utils.removeStringQuotes(arg)}')`; - } - MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > - () => { - return 'new MinKey'; - } - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > - () => { - return `()`; - } - MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > - () => { - return 'new MaxKey'; - } - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > - () => { - return `()`; - } - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => { - return 'new Timestamp'; - } - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - // PHP orders increment and timestamp args differently (see: PHPC-845) - return `(${arg2 === undefined ? 0 : arg2}, ${arg1 === undefined ? 0 : arg1})`; - } - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => '' - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - switch(type) { - case '_string': - if ((arg.indexOf('.') !== -1) && (arg.indexOf('.') !== arg.length - 2)) { - return `(float) ${arg}` - } - return `(int) ${arg}` - default: - return `${arg}` - } - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'UTCDateTime'; - } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - if (date === null) { - return `new ${lhs}()`; + let indexTest = 0; + let pairs = args.map((arg) => { + if (isObjectCastRequired && !isExpectedIndex(arg[0], indexTest)) { + isObjectCastRequired = false; } - return isString - ? `(new ${lhs}(${date.getTime()}))->toDateTime()->format(\\DateTimeInterface::RFC3339_EXTENDED)` - : `new ${lhs}(${date.getTime()})` - ; - } - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return `new UTCDateTime()`; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - (args) => { - return ''; - } + indexTest++; + return `${this.utils.stringifyWithSingleQuotes(arg[0])} => ${arg[1]}`; + }).join(', '); - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => { - return `(${lhs})->getCode()`; - } - CodeCodeArgsTemplate: &CodeCodeArgsTemplate !!js/function > - () => { - return ''; - } - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => { - return `(${lhs})->getScope()`; - } - CodeScopeArgsTemplate: &CodeScopeArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => { - return `(string) ${lhs}`; - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} == `; - } - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (arg) => { - return `${arg}`; - } - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => { - return `(${lhs})->getTimestamp()`; - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs) => { - return ``; - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate !!js/function > - (lhs, arg) => { - return `(\\ctype_xdigit(${this.utils.stringifyWithSingleQuotes(arg)}) && \\strlen(${this.utils.stringifyWithSingleQuotes(arg)}) == 24)`; - } - BinaryValueTemplate: &BinaryValueTemplate !!js/function > - (lhs) => { - return `(${lhs})->getData()`; - } - BinaryValueArgsTemplate: &BinaryValueArgsTemplate !!js/function > - () => { - return ''; - } - BinaryLengthTemplate: &BinaryLengthTemplate !!js/function > - (lhs) => { - return `\\strlen((${lhs})->getData())`; - } - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate !!js/function > - () => { - return ''; - } - BinaryToStringTemplate: &BinaryToStringTemplate !!js/function > - (lhs) => { - return `(${lhs})->getData()`; - } - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate !!js/function > - () => { - return ''; - } - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (lhs) => { - return `(${lhs})->getType()`; - } - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}['$db']`; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}['$ref']`; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}['$id']`; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefToStringTemplate: &DBRefToStringTemplate null - DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null - DoubleValueOfTemplate: &DoubleValueOfTemplate null - DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null - Int32ValueOfTemplate: &Int32ValueOfTemplate null - Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null - Int32ToStringTemplate: &Int32ToStringTemplate !!js/function > - (lhs) => { - return `(string) ${lhs}`; - } - Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate !!js/function > - () => { - return ''; - } - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongToStringTemplate: &LongToStringTemplate !!js/function > - (lhs) => { - return `(string) ${lhs}`; - } - LongToStringArgsTemplate: &LongToStringArgsTemplate !!js/function > - () => { - return ''; - } - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `${lhs}`; - } - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => { - return ''; - } - LongValueOfTemplate: &LongValueOfTemplate null - LongValueOfArgsTemplate: &LongValueOfArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => { - return `(float) ${lhs}`; - } - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => { - return ''; - } - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => { - return `${lhs} +`; - } - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (arg) => { - return `${arg} -`; - } - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (arg) => { - return `${arg} *`; - } - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => { - return `${lhs} /`; - } - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => { - return `${lhs} %`; - } - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => { - return `${lhs} &`; - } - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => { - return `${lhs} |`; - } - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => { - return `${lhs} ^`; - } - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => { - return `${lhs} <<`; - } - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => { - return `${lhs} >>`; - } - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => { - return `${lhs} <=>`; - } - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (lhs) => { - return `(${lhs} % 2) === 1`; - } - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => { - return ''; - } - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (lhs) => { - return `${lhs} === 0`; - } - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => { - return ''; - } - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (lhs) => { - return `${lhs} < 0`; - } - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => { - return ''; - } - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => { - return '-'; - } - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotTemplate: &LongNotTemplate !!js/function > - () => { - return '~'; - } - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `(float) ${lhs}`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs} >> 32`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs} & 0x00000000ffffffff`; - } - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - (lhs) => { - return `(string) ${lhs}`; - } - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate !!js/function > - () => { - return ''; - } - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} == `; - } - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `(${lhs})->getTimestamp()`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - () => { - return '' - } - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `(${lhs})->getIncrement()`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - () => { - return '' - } - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `(${lhs})->getTimestamp()`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `(${lhs})->getIncrement()`; - } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => { - return `new UTCDateTime((${lhs})->getTimestamp() * 1000)`; - } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (lhs) => { - return `${lhs} <=> `; - } - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} != `; - } - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} > `; - } - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >= `; - } - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} < `; - } - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <= `; - } - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - () => { - return ''; - } - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - () => { - return ''; - } - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - (lhs) => { - return ''; - } - Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function > - (lhs) => { - return `(string) ${lhs}`; - } - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate !!js/function > - (lhs) => { - return ''; + // Rebuilding pairs for numeric sequential indexes without quotes + if (isObjectCastRequired) { + pairs = args.map((arg) => { + return `${arg[0]} => ${arg[1]}`; + }).join(', '); } - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => { - return '\\PHP_INT_MAX'; - } - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => { - return '\\PHP_INT_MIN'; - } - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => { - return '0'; - } - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => { - return '1'; - } - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => { - return '-1'; - } - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate !!js/function > - (lhs, arg) => { - return `(int) ${arg}`; - } - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate !!js/function > - (lhs, arg) => { + return `${isObjectCastRequired ? '(object) ' : ''}[${pairs}]`; + } + + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: !!js/function &CodeSymbolTemplate > + () => { + return 'new Javascript'; + } + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (lhs, code, scope) => { + return !scope + ? `(${this.utils.stringifyWithSingleQuotes(code)})` + : `(${this.utils.stringifyWithSingleQuotes(code)}, ${scope})` + ; + } + ObjectIdSymbolTemplate: !!js/function &ObjectIdSymbolTemplate > + () => { + return 'new ObjectId'; + } + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, id) => { + return !id + ? `()` + : `(${this.utils.stringifyWithSingleQuotes(id)})` + ; + } + BinarySymbolTemplate: !!js/function &BinarySymbolTemplate > + () => { + return 'new Binary'; + } + BinarySymbolArgsTemplate: !!js/function &BinarySymbolArgsTemplate > + (lhs, bytes, type) => { + if (type === null) { + type = 'Binary::TYPE_GENERIC'; + } + return `(${this.utils.stringifyWithSingleQuotes(bytes)}, ${type})`; + } + BinarySymbolSubtypeDefaultTemplate: + !!js/function &BinarySymbolSubtypeDefaultTemplate > + () => { + return 'Binary::TYPE_GENERIC'; + } + BinarySymbolSubtypeFunctionTemplate: + !!js/function &BinarySymbolSubtypeFunctionTemplate > + () => { + return 'Binary::TYPE_FUNCTION'; + } + BinarySymbolSubtypeByteArrayTemplate: + !!js/function &BinarySymbolSubtypeByteArrayTemplate > + () => { + return 'Binary::TYPE_OLD_BINARY'; + } + BinarySymbolSubtypeUuidOldTemplate: + !!js/function &BinarySymbolSubtypeUuidOldTemplate > + () => { + return 'Binary::TYPE_OLD_UUID'; + } + BinarySymbolSubtypeUuidTemplate: + !!js/function &BinarySymbolSubtypeUuidTemplate > + () => { + return 'Binary::TYPE_UUID'; + } + BinarySymbolSubtypeMd5Template: + !!js/function &BinarySymbolSubtypeMd5Template > + () => { + return 'Binary::TYPE_MD5'; + } + BinarySymbolSubtypeUserDefinedTemplate: + !!js/function &BinarySymbolSubtypeUserDefinedTemplate > + () => { + return 'Binary::TYPE_USER_DEFINED'; + } + DBRefSymbolTemplate: !!js/function &DBRefSymbolTemplate > + () => { + return '' + } + DBRefSymbolArgsTemplate: !!js/function &DBRefSymbolArgsTemplate > + (lhs, coll, id, db) => { + let coll_string = `'$ref' => ${this.utils.stringifyWithSingleQuotes(coll)}`; + let id_string = `, '$id' => ${id}`; + let db_string = db ? `, '$db' => ${this.utils.stringifyWithSingleQuotes(db)}` : `, '$db' => null`; + return `[${coll_string}${id_string}${db_string}]`; + } + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return ''; + } + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_decimal' || type === '_double') { return arg; } - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate !!js/function > - (lhs, arg) => { - return `(int) ${arg}`; - } - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(int) ${arg}`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - () => { - return 'new Decimal128'; - } - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - () => { - return 'new ObjectId'; - } - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return 'new ObjectId'; + if (type === '_integer' || type === '_long') { + return `${arg}.0`; + } + return `(float) ${arg}`; + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return ''; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { + return arg; } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (!isNumber) { - return `(\\str_pad(\\bin2hex(\\pack('N', (${arg})->toDateTime()->getTimestamp())), 24, '0'))`; - } - return `(\\str_pad(\\bin2hex(\\pack('N', ${arg})), 24, '0'))`; + return `(int) ${arg}`; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return '' + } + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { + return arg; } - # non bson-specific would go here, but there aren't any atm. + return `(int) ${arg}`; + } + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => { + return 'new Regex'; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return ''; + } + SymbolSymbolArgsTemplate: !!js/function &SymbolSymbolArgsTemplate > + (lhs, arg) => { + return arg; + } + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return 'new Regex'; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + return `(${this.utils.stringifyWithDoubleQuotes(pattern)}${flags ? ', ' + this.utils.stringifyWithDoubleQuotes(flags) : ''})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'new Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? '0' : arg.toString(); + return `('${this.utils.removeStringQuotes(arg)}')`; + } + MinKeySymbolTemplate: !!js/function &MinKeySymbolTemplate > + () => { + return 'new MinKey'; + } + MinKeySymbolArgsTemplate: !!js/function &MinKeySymbolArgsTemplate > + () => { + return `()`; + } + MaxKeySymbolTemplate: !!js/function &MaxKeySymbolTemplate > + () => { + return 'new MaxKey'; + } + MaxKeySymbolArgsTemplate: !!js/function &MaxKeySymbolArgsTemplate > + () => { + return `()`; + } + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => { + return 'new Timestamp'; + } + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + // PHP orders increment and timestamp args differently (see: PHPC-845) + return `(${arg2 === undefined ? 0 : arg2}, ${arg1 === undefined ? 0 : arg1})`; + } + # non bson-specific + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => '' + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - let set = new Set(Object.values(args)); - return [...set].sort().join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => { - return `use MongoDB\\Client;`; - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - # Common internal Regexp - 8ImportTemplate: &8ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Regex;`; - } - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - # Code - 100ImportTemplate: &100ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Javascript;`; - } - # ObjectId - 101ImportTemplate: &101ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\ObjectId;`; - } - # Binary - 102ImportTemplate: &102ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Binary;`; - } - # DBRef - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - # Int64 - 106ImportTemplate: &106ImportTemplate null - # MinKey - 107ImportTemplate: &107ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\MinKey;`; - } - # MaxKey - 108ImportTemplate: &108ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\MaxKey;`; - } - # Regex - 109ImportTemplate: &109ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Regex;`; - } - # Timestamp - 110ImportTemplate: &110ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Timestamp;`; - } - 111ImportTemplate: &111ImportTemplate null - # Decimal128 - 112ImportTemplate: &112ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\Decimal128;`; - } - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate !!js/function > - () => { - return `use MongoDB\\BSON\\UTCDateTime;`; - } - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + switch(type) { + case '_string': + if ((arg.indexOf('.') !== -1) && (arg.indexOf('.') !== arg.length - 2)) { + return `(float) ${arg}` + } + return `(int) ${arg}` + default: + return `${arg}` + } + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'UTCDateTime'; + } + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + if (date === null) { + return `new ${lhs}()`; + } + return isString + ? `(new ${lhs}(${date.getTime()}))->toDateTime()->format(\\DateTimeInterface::RFC3339_EXTENDED)` + : `new ${lhs}(${date.getTime()})` + ; + } + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return `new UTCDateTime()`; + } + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + (args) => { + return ''; + } + + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => { + return `(${lhs})->getCode()`; + } + CodeCodeArgsTemplate: !!js/function &CodeCodeArgsTemplate > + () => { + return ''; + } + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => { + return `(${lhs})->getScope()`; + } + CodeScopeArgsTemplate: !!js/function &CodeScopeArgsTemplate > + () => { + return ''; + } + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => { + return `(string) ${lhs}`; + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => { + return ''; + } + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => { + return `${lhs} == `; + } + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (arg) => { + return `${arg}`; + } + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => { + return `(${lhs})->getTimestamp()`; + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => { + return ''; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs) => { + return ``; + } + ObjectIdIsValidArgsTemplate: !!js/function &ObjectIdIsValidArgsTemplate > + (lhs, arg) => { + return `(\\ctype_xdigit(${this.utils.stringifyWithSingleQuotes(arg)}) && \\strlen(${this.utils.stringifyWithSingleQuotes(arg)}) == 24)`; + } + BinaryValueTemplate: !!js/function &BinaryValueTemplate > + (lhs) => { + return `(${lhs})->getData()`; + } + BinaryValueArgsTemplate: !!js/function &BinaryValueArgsTemplate > + () => { + return ''; + } + BinaryLengthTemplate: !!js/function &BinaryLengthTemplate > + (lhs) => { + return `\\strlen((${lhs})->getData())`; + } + BinaryLengthArgsTemplate: !!js/function &BinaryLengthArgsTemplate > + () => { + return ''; + } + BinaryToStringTemplate: !!js/function &BinaryToStringTemplate > + (lhs) => { + return `(${lhs})->getData()`; + } + BinaryToStringArgsTemplate: !!js/function &BinaryToStringArgsTemplate > + () => { + return ''; + } + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (lhs) => { + return `(${lhs})->getType()`; + } + BinarySubtypeArgsTemplate: !!js/function &BinarySubtypeArgsTemplate > + () => { + return ''; + } + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}['$db']`; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}['$ref']`; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}['$id']`; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + (lhs) => { + return ''; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + (lhs) => { + return ''; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + (lhs) => { + return ''; + } + DBRefToStringTemplate: &DBRefToStringTemplate null + DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null + DoubleValueOfTemplate: &DoubleValueOfTemplate null + DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null + Int32ValueOfTemplate: &Int32ValueOfTemplate null + Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null + Int32ToStringTemplate: !!js/function &Int32ToStringTemplate > + (lhs) => { + return `(string) ${lhs}`; + } + Int32ToStringArgsTemplate: !!js/function &Int32ToStringArgsTemplate > + () => { + return ''; + } + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongToStringTemplate: !!js/function &LongToStringTemplate > + (lhs) => { + return `(string) ${lhs}`; + } + LongToStringArgsTemplate: !!js/function &LongToStringArgsTemplate > + () => { + return ''; + } + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `${lhs}`; + } + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => { + return ''; + } + LongValueOfTemplate: &LongValueOfTemplate null + LongValueOfArgsTemplate: &LongValueOfArgsTemplate null + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => { + return `(float) ${lhs}`; + } + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => { + return ''; + } + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => { + return `${lhs} +`; + } + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (arg) => { + return `${arg} -`; + } + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (arg) => { + return `${arg} *`; + } + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => { + return `${lhs} /`; + } + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => { + return `${lhs} %`; + } + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => { + return `${lhs} &`; + } + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => { + return `${lhs} |`; + } + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => { + return `${lhs} ^`; + } + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => { + return `${lhs} <<`; + } + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => { + return `${lhs} >>`; + } + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => { + return `${lhs} <=>`; + } + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (lhs) => { + return `(${lhs} % 2) === 1`; + } + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => { + return ''; + } + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (lhs) => { + return `${lhs} === 0`; + } + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => { + return ''; + } + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (lhs) => { + return `${lhs} < 0`; + } + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => { + return ''; + } + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => { + return '-'; + } + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => { + return lhs; + } + LongNotTemplate: !!js/function &LongNotTemplate > + () => { + return '~'; + } + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => { + return lhs; + } + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `(float) ${lhs}`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs} >> 32`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs} & 0x00000000ffffffff`; + } + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + (lhs) => { + return `(string) ${lhs}`; + } + TimestampToStringArgsTemplate: !!js/function &TimestampToStringArgsTemplate > + () => { + return ''; + } + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => { + return `${lhs} == `; + } + TimestampEqualsArgsTemplate: !!js/function &TimestampEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `(${lhs})->getTimestamp()`; + } + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + () => { + return '' + } + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `(${lhs})->getIncrement()`; + } + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + () => { + return '' + } + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `(${lhs})->getTimestamp()`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `(${lhs})->getIncrement()`; + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => { + return `new UTCDateTime((${lhs})->getTimestamp() * 1000)`; + } + TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (lhs) => { + return `${lhs} <=> `; + } + TimestampCompareArgsTemplate: !!js/function &TimestampCompareArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => { + return `${lhs} != `; + } + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => { + return `${lhs} > `; + } + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >= `; + } + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => { + return `${lhs} < `; + } + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <= `; + } + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (lhs) => { + return lhs; + } + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + () => { + return ''; + } + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (lhs) => { + return lhs; + } + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + () => { + return ''; + } + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (lhs) => { + return lhs; + } + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + (lhs) => { + return ''; + } + Decimal128ToStringTemplate: !!js/function &Decimal128ToStringTemplate > + (lhs) => { + return `(string) ${lhs}`; + } + Decimal128ToStringArgsTemplate: + !!js/function &Decimal128ToStringArgsTemplate > + (lhs) => { + return ''; + } + + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => { + return '\\PHP_INT_MAX'; + } + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => { + return '\\PHP_INT_MIN'; + } + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => { + return '0'; + } + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => { + return '1'; + } + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => { + return '-1'; + } + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: !!js/function &LongSymbolFromBitsTemplate > + () => { + return ''; + } + LongSymbolFromBitsArgsTemplate: + !!js/function &LongSymbolFromBitsArgsTemplate > + (lhs, arg) => { + return `(int) ${arg}`; + } + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => { + return ''; + } + LongSymbolFromIntArgsTemplate: !!js/function &LongSymbolFromIntArgsTemplate > + (lhs, arg) => { + return arg; + } + LongSymbolFromNumberTemplate: !!js/function &LongSymbolFromNumberTemplate > + () => { + return ''; + } + LongSymbolFromNumberArgsTemplate: + !!js/function &LongSymbolFromNumberArgsTemplate > + (lhs, arg) => { + return `(int) ${arg}`; + } + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + () => { + return ''; + } + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (lhs, arg) => { + return `(int) ${arg}`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + () => { + return 'new Decimal128'; + } + Decimal128SymbolFromStringArgsTemplate: + !!js/function &Decimal128SymbolFromStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + () => { + return 'new ObjectId'; + } + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return 'new ObjectId'; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (!isNumber) { + return `(\\str_pad(\\bin2hex(\\pack('N', (${arg})->toDateTime()->getTimestamp())), 24, '0'))`; + } + return `(\\str_pad(\\bin2hex(\\pack('N', ${arg})), 24, '0'))`; + } + # non bson-specific would go here, but there aren't any atm. + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + let set = new Set(Object.values(args)); + return [...set].sort().join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => { + return `use MongoDB\\Client;`; + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + # Common internal Regexp + 8ImportTemplate: !!js/function &8ImportTemplate > + () => { + return `use MongoDB\\BSON\\Regex;`; + } + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + # Code + 100ImportTemplate: !!js/function &100ImportTemplate > + () => { + return `use MongoDB\\BSON\\Javascript;`; + } + # ObjectId + 101ImportTemplate: !!js/function &101ImportTemplate > + () => { + return `use MongoDB\\BSON\\ObjectId;`; + } + # Binary + 102ImportTemplate: !!js/function &102ImportTemplate > + () => { + return `use MongoDB\\BSON\\Binary;`; + } + # DBRef + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + # Int64 + 106ImportTemplate: &106ImportTemplate null + # MinKey + 107ImportTemplate: !!js/function &107ImportTemplate > + () => { + return `use MongoDB\\BSON\\MinKey;`; + } + # MaxKey + 108ImportTemplate: !!js/function &108ImportTemplate > + () => { + return `use MongoDB\\BSON\\MaxKey;`; + } + # Regex + 109ImportTemplate: !!js/function &109ImportTemplate > + () => { + return `use MongoDB\\BSON\\Regex;`; + } + # Timestamp + 110ImportTemplate: !!js/function &110ImportTemplate > + () => { + return `use MongoDB\\BSON\\Timestamp;`; + } + 111ImportTemplate: &111ImportTemplate null + # Decimal128 + 112ImportTemplate: !!js/function &112ImportTemplate > + () => { + return `use MongoDB\\BSON\\Decimal128;`; + } + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: !!js/function &200ImportTemplate > + () => { + return `use MongoDB\\BSON\\UTCDateTime;`; + } + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/python/templates.yaml b/packages/bson-transpilers/symbols/python/templates.yaml index 5eced8c2ffa..c1828b20fea 100644 --- a/packages/bson-transpilers/symbols/python/templates.yaml +++ b/packages/bson-transpilers/symbols/python/templates.yaml @@ -1,1043 +1,1073 @@ # Python Templates Templates: - # Misc - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'a' - y: '' - g: 's' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' - # Syntax + # Misc + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'a' + y: '' + g: 's' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' + # Syntax - # filter, project, sort, collation, skip, limit, maxTimeMS - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - const comment = `# Requires the PyMongo package. - # https://api.mongodb.com/python/current`; - const translateKey = { - filter: 'filter', - project: 'projection', - sort: 'sort', - collation: 'collation', - skip: 'skip', - limit: 'limit', - maxTimeMS: 'max_time_ms' - }; - const options = spec.options; - const exportMode = spec.exportMode; - delete spec.options; - delete spec.exportMode; + # filter, project, sort, collation, skip, limit, maxTimeMS + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + const comment = `# Requires the PyMongo package. + # https://api.mongodb.com/python/current`; + const translateKey = { + filter: 'filter', + project: 'projection', + sort: 'sort', + collation: 'collation', + skip: 'skip', + limit: 'limit', + maxTimeMS: 'max_time_ms' + }; + const options = spec.options; + const exportMode = spec.exportMode; + delete spec.options; + delete spec.exportMode; - const connect = `client = MongoClient('${options.uri}')`; - const coll = `client['${options.database}']['${options.collection}']`; + const connect = `client = MongoClient('${options.uri}')`; + const coll = `client['${options.database}']['${options.collection}']`; - let driverMethod; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'delete_many'; - break; - case 'Update Query': - driverMethod = 'update_many'; - break; - default: - driverMethod = 'find'; - } + let driverMethod; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'delete_many'; + break; + case 'Update Query': + driverMethod = 'update_many'; + break; + default: + driverMethod = 'find'; + } - if ('aggregation' in spec) { - return `${comment}\n\n${connect}\nresult = ${coll}.aggregate(${spec.aggregation})`; - } + if ('aggregation' in spec) { + return `${comment}\n\n${connect}\nresult = ${coll}.aggregate(${spec.aggregation})`; + } - const vars = Object.keys(spec).reduce( - (result, k) => { - if (k === 'sort') { - return `${result}\n${k}=list(${spec[k]}.items())`; - } - return `${result}\n${k}=${spec[k]}`; - }, - connect - ); + const vars = Object.keys(spec).reduce( + (result, k) => { + if (k === 'sort') { + return `${result}\n${k}=list(${spec[k]}.items())`; + } + return `${result}\n${k}=${spec[k]}`; + }, + connect + ); - const args = Object.keys(spec).reduce( - (result, k) => { - const divider = result === '' ? '' : ',\n'; - return `${result}${divider} ${ - k in translateKey ? translateKey[k] : k - }=${k}`; - }, - '' - ); - const cmd = `result = ${coll}.${driverMethod}(\n${args}\n)`; + const args = Object.keys(spec).reduce( + (result, k) => { + const divider = result === '' ? '' : ',\n'; + return `${result}${divider} ${ + k in translateKey ? translateKey[k] : k + }=${k}`; + }, + '' + ); + const cmd = `result = ${coll}.${driverMethod}(\n${args}\n)`; - return `${comment}\n\n${vars}\n\n${cmd}`; - } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!')) { - return `${lhs} != ${rhs}`; + return `${comment}\n\n${vars}\n\n${cmd}`; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!')) { + return `${lhs} != ${rhs}`; + } + else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} == ${rhs}`; + } + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let str = 'in'; + if (op.includes('!') || op.includes('not')) { + str = 'not in'; + } + return `${lhs} ${str} ${rhs}` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' and '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' or '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `not ${arg}`; + } + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; } - else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} == ${rhs}`; - } - return `${lhs} ${op} ${rhs}`; - } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let str = 'in'; - if (op.includes('!') || op.includes('not')) { - str = 'not in'; + const rhs = arr[i + 1]; + switch(op) { + case '//': + return `${s} // ${rhs}`; + case '**': + return `${s} ** ${rhs}`; + default: + return `${s} ${op} ${rhs}`; } - return `${lhs} ${str} ${rhs}` - } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' and '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' or '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `not ${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `${s} // ${rhs}`; - case '**': - return `${s} ** ${rhs}`; - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosSyntaxTemplate: &EosSyntaxTemplate null - EofSyntaxTemplate: &EofSyntaxTemplate null - NewTemplate: &NewSyntaxTemplate null - # BSON Object Type templates - CodeTypeTemplate: &CodeTypeTemplate null - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str; - if ( + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosSyntaxTemplate: &EosSyntaxTemplate null + EofSyntaxTemplate: &EofSyntaxTemplate null + NewTemplate: &NewSyntaxTemplate null + # BSON Object Type templates + CodeTypeTemplate: &CodeTypeTemplate null + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + flags = flags === '' ? '' : `(?${flags})`; + + // Double-quote stringify + const str = pattern + flags; + let newStr = str; + if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; + newStr = str.substr(1, str.length - 2); } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - flags = flags === '' ? '' : `(?${flags})`; + return `re.compile(r"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (str) => { + return `${str.charAt(0).toUpperCase()}${str.slice(1)}`; + } + IntegerTypeTemplate: &IntegerTypeTemplate null + DecimalTypeTemplate: &DecimalTypeTemplate null + LongBasicTypeTemplate: &LongBasicTypeTemplate null + HexTypeTemplate: &HexTypeTemplate null + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal) => { + let offset = 0; - // Double-quote stringify - const str = pattern + flags; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `re.compile(r"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}")`; + if ( + literal.charAt(0) === '0' && + (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') + ) { + offset = 2; + } else if (literal.charAt(0) === '0') { + offset = 1; } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (str) => { - return `${str.charAt(0).toUpperCase()}${str.slice(1)}`; - } - IntegerTypeTemplate: &IntegerTypeTemplate null - DecimalTypeTemplate: &DecimalTypeTemplate null - LongBasicTypeTemplate: &LongBasicTypeTemplate null - HexTypeTemplate: &HexTypeTemplate null - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal) => { - let offset = 0; - if ( - literal.charAt(0) === '0' && - (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') - ) { - offset = 2; - } else if (literal.charAt(0) === '0') { - offset = 1; - } - - literal = `0o${literal.substr(offset, literal.length - 1)}`; + literal = `0o${literal.substr(offset, literal.length - 1)}`; - return literal; - } - NumericTypeTemplate: &NumericTypeTemplate null - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - if (literal === '') { - return '[]' - } - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); + return literal; + } + NumericTypeTemplate: &NumericTypeTemplate null + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + if (literal === '') { + return '[]' + } + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); - return `[${indent}${literal}${closingIndent}]`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'None'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'None'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal, depth) => { - if (literal === '') { - return '{}'; + return `[${indent}${literal}${closingIndent}]`; + } + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'None'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'None'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal, depth) => { + if (literal === '') { + return '{}'; + } + return literal; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return '{}'; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + const singleStringify = (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - return literal; + return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return '{}'; - } - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; - } - const pairs = args.map((arg) => { - return `${indent}${singleStringify(arg[0])}: ${arg[1]}`; - }).join(', '); + const pairs = args.map((arg) => { + return `${indent}${singleStringify(arg[0])}: ${arg[1]}`; + }).join(', '); - return `{${pairs}${closingIndent}}`; - } - # BSON Object Method templates - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => { - return `str(${lhs})`; - } - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate null - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => { - return `str(${lhs})`; - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - (lhs) => { - return ''; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => { - return `${lhs}.generation_time`; - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => { - return ''; - } - BinaryValueTemplate: &BinaryValueTemplate !!js/function > - () => { - return ''; - } - BinaryValueArgsTemplate: &BinaryValueArgsTemplate !!js/function > - (lhs) => { - return `str(${lhs})`; - } - BinaryLengthTemplate: &BinaryLengthTemplate !!js/function > - () => { - return ''; - } - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate !!js/function > - (lhs) => { - return `len(${lhs})`; - } - BinaryToStringTemplate: &BinaryToStringTemplate !!js/function > - () => { - return ''; - } - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate !!js/function > - (lhs) => { - return `str(${lhs})`; - } - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (lhs) => { - return `${lhs}.subtype`; - } - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}.database`; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}.collection`; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}.id`; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function - () => { - return ''; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - () => { - return ''; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function - () => { - return ''; - } - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `int(${lhs})`; - } - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => { - return ''; - } - LongToStringTemplate: &LongToStringTemplate !!js/function > - () => { - return 'str'; - } - LongToStringArgsTemplate: &LongToStringArgsTemplate !!js/function > - (lhs) => { - return `(${lhs})`; - } - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => { - return `float(${lhs})`; - } - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => { - return ''; - } - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => { - return `${lhs} +`; - } - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (arg) => { - return `${arg} -`; - } - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (arg) => { - return `${arg} *`; - } - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => { - return `${lhs} /`; - } - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => { - return `${lhs} %`; - } - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => { - return `${lhs} &`; - } - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => { - return `${lhs} |`; - } - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => { - return `${lhs} ^`; - } - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => { - return `${lhs} <<`; - } - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => { - return `${lhs} >>`; - } - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => { - return `${lhs} -`; - } - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (lhs) => { - return `(${lhs} % 2) == 1`; - } - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => { - return ''; - } - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (lhs) => { - return `${lhs} == 0`; - } - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => { - return ''; - } - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (lhs) => { - return `${lhs} < 0`; - } - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => { - return ''; - } - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => { - return '-'; - } - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotTemplate: &LongNotTemplate !!js/function > - () => { - return '~'; - } - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `float(${lhs})`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs} >> 32`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs} & 0x0000ffff`; - } - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - () => { - return 'str'; - } - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate !!js/function > - (lhs) => { - return `(${lhs})`; - } - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.time`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - () => { - return ''; - } - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.inc`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - () => { - return ''; - } - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `${lhs}.time`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `${lhs}.inc`; - } - TimestampAsDateTemplate: &TimestampAsDateTemplate null - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => { - return '.as_datetime()'; - } - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (lhs) => { - return `(${lhs}.as_datetime() - `; - } - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}.as_datetime()).total_seconds()`; - } - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - () => { - return ''; - } - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - () => { - return ''; - } - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - () => { - return ''; - } - # Symbol Templates - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > # Also has process method - () => { - return 'Code'; - } - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > # Also has process method - (lhs, code, scope) => { - // Single quote stringify - const scopestr = scope === undefined ? '' : `, ${scope}`; - let newStr = code === undefined ? '' : code; - const str = newStr; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + return `{${pairs}${closingIndent}}`; + } + # BSON Object Method templates + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => { + return `str(${lhs})`; + } + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: &CodeScopeTemplate null + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => { + return `str(${lhs})`; + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + (lhs) => { + return ''; + } + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => { + return `${lhs}.generation_time`; + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => { + return ''; + } + BinaryValueTemplate: !!js/function &BinaryValueTemplate > + () => { + return ''; + } + BinaryValueArgsTemplate: !!js/function &BinaryValueArgsTemplate > + (lhs) => { + return `str(${lhs})`; + } + BinaryLengthTemplate: !!js/function &BinaryLengthTemplate > + () => { + return ''; + } + BinaryLengthArgsTemplate: !!js/function &BinaryLengthArgsTemplate > + (lhs) => { + return `len(${lhs})`; + } + BinaryToStringTemplate: !!js/function &BinaryToStringTemplate > + () => { + return ''; + } + BinaryToStringArgsTemplate: !!js/function &BinaryToStringArgsTemplate > + (lhs) => { + return `str(${lhs})`; + } + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (lhs) => { + return `${lhs}.subtype`; + } + BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}.database`; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}.collection`; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}.id`; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate () => { + return ''; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + () => { + return ''; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate () => { + return ''; + } + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `int(${lhs})`; + } + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => { + return ''; + } + LongToStringTemplate: !!js/function &LongToStringTemplate > + () => { + return 'str'; + } + LongToStringArgsTemplate: !!js/function &LongToStringArgsTemplate > + (lhs) => { + return `(${lhs})`; + } + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => { + return `float(${lhs})`; + } + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => { + return ''; + } + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => { + return `${lhs} +`; + } + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (arg) => { + return `${arg} -`; + } + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (arg) => { + return `${arg} *`; + } + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => { + return `${lhs} /`; + } + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => { + return `${lhs} %`; + } + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => { + return `${lhs} &`; + } + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => { + return `${lhs} |`; + } + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => { + return `${lhs} ^`; + } + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => { + return `${lhs} <<`; + } + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => { + return `${lhs} >>`; + } + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => { + return `${lhs} -`; + } + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (lhs) => { + return `(${lhs} % 2) == 1`; + } + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => { + return ''; + } + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (lhs) => { + return `${lhs} == 0`; + } + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => { + return ''; + } + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (lhs) => { + return `${lhs} < 0`; + } + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => { + return ''; + } + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => { + return '-'; + } + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => { + return lhs; + } + LongNotTemplate: !!js/function &LongNotTemplate > + () => { + return '~'; + } + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => { + return lhs; + } + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `float(${lhs})`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs} >> 32`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs} & 0x0000ffff`; + } + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + () => { + return 'str'; + } + TimestampToStringArgsTemplate: !!js/function &TimestampToStringArgsTemplate > + (lhs) => { + return `(${lhs})`; + } + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + TimestampEqualsArgsTemplate: !!js/function &TimestampEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `${lhs}.time`; + } + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + () => { + return ''; + } + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `${lhs}.inc`; + } + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + () => { + return ''; + } + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `${lhs}.time`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `${lhs}.inc`; + } + TimestampAsDateTemplate: &TimestampAsDateTemplate null + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => { + return '.as_datetime()'; + } + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (lhs) => { + return `(${lhs}.as_datetime() - `; + } + TimestampCompareArgsTemplate: !!js/function &TimestampCompareArgsTemplate > + (lhs, arg) => { + return `${arg}.as_datetime()).total_seconds()`; + } + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (lhs) => { + return lhs; + } + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + () => { + return ''; + } + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (lhs) => { + return lhs; + } + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + () => { + return ''; + } + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (lhs) => { + return lhs; + } + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + () => { + return ''; + } + # Symbol Templates + CodeSymbolTemplate: + !!js/function &CodeSymbolTemplate > # Also has process method + () => { + return 'Code'; + } + CodeSymbolArgsTemplate: + !!js/function &CodeSymbolArgsTemplate > # Also has process method + (lhs, code, scope) => { + // Single quote stringify + const scopestr = scope === undefined ? '' : `, ${scope}`; + let newStr = code === undefined ? '' : code; + const str = newStr; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + code = `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; + return `(${code}${scopestr})`; + } + ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, str) => { + if (!str || str.length === 0) { + return '()'; + } + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; + } + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: !!js/function &BinarySymbolArgsTemplate > + (lhs, bytes, type) => { + const str = bytes; + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - } - code = `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; - return `(${code}${scopestr})`; } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, str) => { - if (!str || str.length === 0) { - return '()'; - } - let newStr = str; - if ( + bytes = `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + + if (type === null) { + return `(b${bytes})`; + } + return `(b${bytes}, ${type})`; + } + BinarySymbolSubtypeDefaultTemplate: + !!js/function &BinarySymbolSubtypeDefaultTemplate > + () => { + return 'binary.BINARY_SUBTYPE'; + } + BinarySymbolSubtypeFunctionTemplate: + !!js/function &BinarySymbolSubtypeFunctionTemplate > + () => { + return 'binary.FUNCTION_SUBTYPE'; + } + BinarySymbolSubtypeByteArrayTemplate: + !!js/function &BinarySymbolSubtypeByteArrayTemplate > + () => { + return 'binary.BINARY_SUBTYPE'; + } + BinarySymbolSubtypeUuidOldTemplate: + !!js/function &BinarySymbolSubtypeUuidOldTemplate > + () => { + return 'binary.OLD_UUID_SUBTYPE'; + } + BinarySymbolSubtypeUuidTemplate: + !!js/function &BinarySymbolSubtypeUuidTemplate > + () => { + return 'binary.UUID_SUBTYPE'; + } + BinarySymbolSubtypeMd5Template: + !!js/function &BinarySymbolSubtypeMd5Template > + () => { + return 'binary.MD5_SUBTYPE'; + } + BinarySymbolSubtypeUserDefinedTemplate: + !!js/function &BinarySymbolSubtypeUserDefinedTemplate > + () => { + return 'binary.USER_DEFINED_SUBTYPE'; + } + DBRefSymbolTemplate: &DBRefSymbolTemplate null + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return 'float'; + } + DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return 'int'; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? 0 : arg; + const str = arg.toString(); + let newStr = str; + if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - } - return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; - } - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate !!js/function > - (lhs, bytes, type) => { - const str = bytes; + return `('${newStr}')`; + } else { + return `(${newStr})`; + } + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return 'Int64'; + } + LongSymbolArgsTemplate: &LongSymbolArgsTemplate null + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => { + return 'sys.maxsize'; + } + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => { + return '-sys.maxsize -1'; + } + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => { + return 'Int64(0)'; + } + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => { + return 'Int64(1)'; + } + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => { + return 'Int64(-1)'; + } + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: + !!js/function &LongSymbolFromBitsTemplate > # Also has process method + () => { + return 'Int64'; + } + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => { + return 'Int64'; + } + LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null + LongSymbolFromNumberTemplate: !!js/function &LongSymbolFromNumberTemplate > + () => { + return 'Int64'; + } + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + (lhs, arg) => { + return 'Int64'; + } + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (lhs, arg) => { + return `(int(${arg}))`; + } + MinKeySymbolTemplate: &MinKeySymbolTemplate null + MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null + MaxKeySymbolTemplate: &MaxKeySymbolTemplate null + MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => { + return 'Timestamp'; + } + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; + } + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return ''; + } + SymbolSymbolArgsTemplate: !!js/function &SymbolSymbolArgsTemplate > + (lhs, arg) => { + return arg; + } + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return 'Regex'; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + const singleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); } - bytes = `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - - if (type === null) { - return `(b${bytes})`; - } - return `(b${bytes}, ${type})`; - } - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate !!js/function > - () => { - return 'binary.BINARY_SUBTYPE'; - } - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate !!js/function > - () => { - return 'binary.FUNCTION_SUBTYPE'; - } - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate !!js/function > - () => { - return 'binary.BINARY_SUBTYPE'; - } - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate !!js/function > - () => { - return 'binary.OLD_UUID_SUBTYPE'; - } - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate !!js/function > - () => { - return 'binary.UUID_SUBTYPE'; - } - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template !!js/function > - () => { - return 'binary.MD5_SUBTYPE'; - } - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate !!js/function > - () => { - return 'binary.USER_DEFINED_SUBTYPE'; - } - DBRefSymbolTemplate: &DBRefSymbolTemplate null - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return 'float'; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return 'int'; - } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? 0 : arg; - const str = arg.toString(); - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - return `('${newStr}')`; - } else { - return `(${newStr})`; - } - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return 'Int64'; - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate null - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => { - return 'sys.maxsize'; - } - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => { - return '-sys.maxsize -1'; - } - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => { - return 'Int64(0)'; - } - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => { - return 'Int64(1)'; - } - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => { - return 'Int64(-1)'; - } - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > # Also has process method - () => { - return 'Int64'; - } - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => { - return 'Int64'; - } - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate !!js/function > - () => { - return 'Int64'; - } - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - (lhs, arg) => { - return 'Int64'; - } - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(int(${arg}))`; - } - MinKeySymbolTemplate: &MinKeySymbolTemplate null - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null - MaxKeySymbolTemplate: &MaxKeySymbolTemplate null - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => { - return 'Timestamp'; - } - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - return `(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; - } - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return ''; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate !!js/function > - (lhs, arg) => { - return arg; - } - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return 'Regex'; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; - } - return `(${singleStringify(pattern)}${flags ? ', ' + singleStringify(flags) : ''})`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (lhs, str) => { - let newStr = str; - if ( + return `'${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}'`; + } + return `(${singleStringify(pattern)}${flags ? ', ' + singleStringify(flags) : ''})`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (lhs, str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + () => { + return 'Decimal128'; + } + Decimal128SymbolFromStringArgsTemplate: + !!js/function &Decimal128SymbolFromStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + Decimal128ToStringTemplate: !!js/function &Decimal128ToStringTemplate > + () => { + return 'str'; + } + Decimal128ToStringArgsTemplate: + !!js/function &Decimal128ToStringArgsTemplate > + (lhs) => { + return `(${lhs})`; + } + # BSON Util Templates + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + () => { + return 'ObjectId'; + } + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return `ObjectId.from_datetime`; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (isNumber) { + return `(datetime.fromtimestamp(${arg}))`; + } + return `(${arg})`; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs) => { + return `${lhs}.is_valid`; + } + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + # JS Symbol Templates + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return ''; + } + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? 0 : arg; + const str = arg.toString(); + let newStr = str; + if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - } - return `('${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}')`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - () => { - return 'Decimal128'; - } - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function > - () => { - return 'str'; - } - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate !!js/function > - (lhs) => { - return `(${lhs})`; - } - # BSON Util Templates - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - () => { - return 'ObjectId'; - } - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (lhs, arg) => { - return `(${arg})`; - } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return `ObjectId.from_datetime`; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (isNumber) { - return `(datetime.fromtimestamp(${arg}))`; - } - return `(${arg})`; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs) => { - return `${lhs}.is_valid`; - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - # JS Symbol Templates - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return ''; - } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? 0 : arg; - const str = arg.toString(); - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - return `float('${newStr}')`; - } else { - return `${newStr}`; - } - } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'datetime'; - } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - const toStr = isString ? '.strftime(\'%a %b %d %Y %H:%M:%S %Z\')' : ''; + return `float('${newStr}')`; + } else { + return `${newStr}`; + } + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'datetime'; + } + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + const toStr = isString ? '.strftime(\'%a %b %d %Y %H:%M:%S %Z\')' : ''; - if (date === null) { - return `${lhs}.utcnow()${toStr}`; - } + if (date === null) { + return `${lhs}.utcnow()${toStr}`; + } - const dateStr = [ - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds() - ].join(', '); + const dateStr = [ + date.getUTCFullYear(), + date.getUTCMonth() + 1, + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds() + ].join(', '); - return `${lhs}(${dateStr}, tzinfo=timezone.utc)${toStr}`; - } - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return 'datetime.utcnow'; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > # Also has process method - () => { - return 're'; - } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - const bson = []; - const other = []; - Object.keys(args).map( - (m) => { - if (m > 99 && m < 200) { - bson.push(args[m]); - } else { - other.push(args[m]); - } + return `${lhs}(${dateStr}, tzinfo=timezone.utc)${toStr}`; + } + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return 'datetime.utcnow'; + } + DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null + RegExpSymbolTemplate: + !!js/function &RegExpSymbolTemplate > # Also has process method + () => { + return 're'; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + const bson = []; + const other = []; + Object.keys(args).map( + (m) => { + if (m > 99 && m < 200) { + bson.push(args[m]); + } else { + other.push(args[m]); } - ); - if (bson.length) { - other.push(`from bson import ${bson.join(', ')}`); } - return other.join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => { - return 'from pymongo import MongoClient'; - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate !!js/function > - () => { - return 'import re'; - } - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate !!js/function > - () => { - return 'Code'; - } - 101ImportTemplate: &101ImportTemplate !!js/function > - () => { - return 'ObjectId'; - } - 102ImportTemplate: &102ImportTemplate !!js/function > - () => { - return 'Binary'; - } - 103ImportTemplate: &103ImportTemplate !!js/function > - () => { - return 'DBRef'; - } - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate !!js/function > - () => { - return 'Int64'; - } - 107ImportTemplate: &107ImportTemplate !!js/function > - () => { - return 'MinKey'; - } - 108ImportTemplate: &108ImportTemplate !!js/function > - () => { - return 'MaxKey'; - } - 109ImportTemplate: &109ImportTemplate !!js/function > - () => { - return 'Regex'; - } - 110ImportTemplate: &110ImportTemplate !!js/function > - () => { - return 'Timestamp'; - } - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate !!js/function > - () => { - return 'Decimal128'; - } - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate !!js/function > - () => { - return 'from datetime import datetime, tzinfo, timezone'; - } - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + ); + if (bson.length) { + other.push(`from bson import ${bson.join(', ')}`); + } + return other.join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => { + return 'from pymongo import MongoClient'; + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: !!js/function &8ImportTemplate > + () => { + return 'import re'; + } + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: !!js/function &100ImportTemplate > + () => { + return 'Code'; + } + 101ImportTemplate: !!js/function &101ImportTemplate > + () => { + return 'ObjectId'; + } + 102ImportTemplate: !!js/function &102ImportTemplate > + () => { + return 'Binary'; + } + 103ImportTemplate: !!js/function &103ImportTemplate > + () => { + return 'DBRef'; + } + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: !!js/function &106ImportTemplate > + () => { + return 'Int64'; + } + 107ImportTemplate: !!js/function &107ImportTemplate > + () => { + return 'MinKey'; + } + 108ImportTemplate: !!js/function &108ImportTemplate > + () => { + return 'MaxKey'; + } + 109ImportTemplate: !!js/function &109ImportTemplate > + () => { + return 'Regex'; + } + 110ImportTemplate: !!js/function &110ImportTemplate > + () => { + return 'Timestamp'; + } + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: !!js/function &112ImportTemplate > + () => { + return 'Decimal128'; + } + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: !!js/function &200ImportTemplate > + () => { + return 'from datetime import datetime, tzinfo, timezone'; + } + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/ruby/templates.yaml b/packages/bson-transpilers/symbols/ruby/templates.yaml index 65ee4987335..54fd0394c1b 100644 --- a/packages/bson-transpilers/symbols/ruby/templates.yaml +++ b/packages/bson-transpilers/symbols/ruby/templates.yaml @@ -18,1124 +18,1144 @@ # # ############################################# Templates: - ######## - # Misc # - ######## + ######## + # Misc # + ######## - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: '' - y: '' - g: '' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: '' - l: '' - u: '' + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: '' + y: '' + g: '' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: '' + l: '' + u: '' - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - comment = '# Requires the MongoDB Ruby Driver\n# https://docs.mongodb.com/ruby-driver/master/'; + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + comment = '# Requires the MongoDB Ruby Driver\n# https://docs.mongodb.com/ruby-driver/master/'; - const getKey = k => { - let translateKey = { - project: 'projection', - maxTimeMS: 'max_time_ms' - } - return k in translateKey ? translateKey[k] : k - }; - const options = spec.options; - const filter = spec.filter || {} - const exportMode = spec.exportMode; + const getKey = k => { + let translateKey = { + project: 'projection', + maxTimeMS: 'max_time_ms' + } + return k in translateKey ? translateKey[k] : k + }; + const options = spec.options; + const filter = spec.filter || {} + const exportMode = spec.exportMode; - delete spec.options; - delete spec.filter - delete spec.exportMode; + delete spec.options; + delete spec.filter + delete spec.exportMode; - const connect = `client = Mongo::Client.new('${options.uri}', :database => '${options.database}')`; - const coll = `client.database['${options.collection}']`; + const connect = `client = Mongo::Client.new('${options.uri}', :database => '${options.database}')`; + const coll = `client.database['${options.collection}']`; - let driverMethod; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'delete_many'; - break; - case 'Update Query': - driverMethod = 'update_many'; - break; - default: - driverMethod = 'find'; - } + let driverMethod; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'delete_many'; + break; + case 'Update Query': + driverMethod = 'update_many'; + break; + default: + driverMethod = 'find'; + } - if ('aggregation' in spec) { - return `${comment}\n\n${connect}\nresult = ${coll}.aggregate(${spec.aggregation})`; - } + if ('aggregation' in spec) { + return `${comment}\n\n${connect}\nresult = ${coll}.aggregate(${spec.aggregation})`; + } - const vars = Object.keys(spec).reduce( - (result, k) => { - return `${result}\n${getKey(k)} = ${spec[k]}`; - }, - connect - ); + const vars = Object.keys(spec).reduce( + (result, k) => { + return `${result}\n${getKey(k)} = ${spec[k]}`; + }, + connect + ); - const args = Object.keys(spec).reduce( - (result, k) => { - const divider = result === '' ? '' : ',\n'; - return `${result}${divider} ${getKey(k)}: ${getKey(k)}`; - }, - '' - ); + const args = Object.keys(spec).reduce( + (result, k) => { + const divider = result === '' ? '' : ',\n'; + return `${result}${divider} ${getKey(k)}: ${getKey(k)}`; + }, + '' + ); - const cmd = `result = ${coll}.${driverMethod}(${filter}${args ? `, {\n${args}\n}` : ''})`; + const cmd = `result = ${coll}.${driverMethod}(${filter}${args ? `, {\n${args}\n}` : ''})`; - return `${comment}\n\n${vars}\n\n${cmd}`; - } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('is')) { - let not = op.includes('not') ? '!' : '' - return `${not}${lhs}.equal?(${rhs})` - } else if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; - } else if (op === '==' || op === '===') { - return `${lhs} == ${rhs}`; + return `${comment}\n\n${vars}\n\n${cmd}`; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('is')) { + let not = op.includes('not') ? '!' : '' + return `${not}${lhs}.equal?(${rhs})` + } else if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; + } else if (op === '==' || op === '===') { + return `${lhs} == ${rhs}`; + } + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let str = ''; + if (op.includes('!') || op.includes('not')) { + str = '!'; + } + return `${str}${rhs}.include?(${lhs})` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `!${arg}`; + } + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; } - return `${lhs} ${op} ${rhs}`; - } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let str = ''; - if (op.includes('!') || op.includes('not')) { - str = '!'; + const rhs = arr[i + 1]; + switch(op) { + case '//': + return `${s}.div(${rhs})`; + case '**': + return `${s} ** ${rhs}`; + default: + return `${s} ${op} ${rhs}`; } - return `${str}${rhs}.include?(${lhs})` - } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); - } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); - } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `!${arg}`; - } - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `${s}.div(${rhs})`; - case '**': - return `${s} ** ${rhs}`; - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosTemplate: &EosSyntaxTemplate null # No args. End-of-line - EofTemplate: &EofSyntaxTemplate null # No args. End-of-file - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosTemplate: &EosSyntaxTemplate null # No args. End-of-line + EofTemplate: &EofSyntaxTemplate null # No args. End-of-file + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str; - if ( + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + const str = pattern; + let newStr = str; + if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - const str = pattern; - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - pattern = `${newStr.replace(/\\([\s\S])/g, '\\$1')}`; - return `/${pattern}/${flags ? flags : ''}`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) - DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType - LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType - HexTypeTemplate: &HexTypeTemplate null # args: literal, argType - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal) => { - let offset = 0; + pattern = `${newStr.replace(/\\([\s\S])/g, '\\$1')}`; + return `/${pattern}/${flags ? flags : ''}`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) + DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType + LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType + HexTypeTemplate: &HexTypeTemplate null # args: literal, argType + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal) => { + let offset = 0; - if ( - literal.charAt(0) === '0' && - (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') - ) { - offset = 2; - } else if (literal.charAt(0) === '0') { - offset = 1; - } - - literal = `0o${literal.substr(offset, literal.length - 1)}`; - - return literal; + if ( + literal.charAt(0) === '0' && + (literal.charAt(1) === '0' || literal.charAt(1) === 'o' || literal.charAt(1) === 'O') + ) { + offset = 2; + } else if (literal.charAt(0) === '0') { + offset = 1; } - NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - depth++; - if (literal === '') { - return '[]' - } - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - return `[${indent}${literal}${closingIndent}]`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => { - return 'nil'; - } - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => { - return 'nil'; - } - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => { - if (literal === '') { - return '{}'; - } - return literal; - } - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return '{}'; - } - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - } - const pairs = args.map((arg) => { - return `${indent}${singleStringify(arg[0])} => ${arg[1]}`; - }).join(','); + literal = `0o${literal.substr(offset, literal.length - 1)}`; - return `{${pairs}${closingIndent}}` - } + return literal; + } + NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + depth++; + if (literal === '') { + return '[]' + } + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > - () => { - return 'BSON::Code' - } - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (lhs, code, scope) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - } - if (code === undefined) { - return '.new' - } - return !scope ? `.new(${singleStringify(code)})` : `WithScope.new(${singleStringify(code)}, ${scope})` - } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function > - () => { - return 'BSON::ObjectId'; - } - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, id) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + return `[${indent}${literal}${closingIndent}]`; + } + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => { + return 'nil'; + } + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => { + return 'nil'; + } + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => { + if (literal === '') { + return '{}'; + } + return literal; + } + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return '{}'; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + const singleStringify = (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - return !id ? '.new' : `(${singleStringify(id)})`; + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; } - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null - DBRefSymbolTemplate: &DBRefSymbolTemplate !!js/function > - () => { - return 'BSON::DBRef' - } - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate !!js/function > - (lhs, coll, id, db) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; - } + const pairs = args.map((arg) => { + return `${indent}${singleStringify(arg[0])} => ${arg[1]}`; + }).join(','); - let db_string = db ? `,\n '$db' => ${singleStringify(db)}` : '' - return `.new(\n '$ref' => ${singleStringify(coll)},\n '$id' => ${id}${db_string}\n)` - } - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => { - return ''; - } - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_decimal' || type === '_double') { - return arg; - } - return `${arg}.to_f`; - } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => { - return ''; - } - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long') { - return arg; - } - return `${arg}.to_i`; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => { - return '' - } - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long') { - return arg; - } - return `${arg}.to_i`; - } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => { - return ''; - } - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => { - return ''; - } - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? '' : arg; - const str = arg.toString(); + return `{${pairs}${closingIndent}}` + } + + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: !!js/function &CodeSymbolTemplate > + () => { + return 'BSON::Code' + } + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (lhs, code, scope) => { + const singleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - return `:'${newStr}'`; - } else { - return `${newStr}.to_sym`; } - } - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => { - return ''; - } - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (lhs, pattern, flags) => { - const singleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `${newStr.replace(/\\([\s\S])/g, '\\$1')}`; + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + } + if (code === undefined) { + return '.new' + } + return !scope ? `.new(${singleStringify(code)})` : `WithScope.new(${singleStringify(code)}, ${scope})` + } + ObjectIdSymbolTemplate: !!js/function &ObjectIdSymbolTemplate > + () => { + return 'BSON::ObjectId'; + } + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, id) => { + const singleStringify = (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - return `/${singleStringify(pattern)}/${flags ? singleStringify(flags) : ''}`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate !!js/function > - () => { - return 'BSON::Decimal128'; - } - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate !!js/function > - (lhs, arg) => { - arg = arg === undefined ? '0' : arg.toString(); - if (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') { - return `.new(${arg})`; + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; + } + return !id ? '.new' : `(${singleStringify(id)})`; + } + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null + BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null + BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null + BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null + BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null + BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null + BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null + BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null + DBRefSymbolTemplate: !!js/function &DBRefSymbolTemplate > + () => { + return 'BSON::DBRef' + } + DBRefSymbolArgsTemplate: !!js/function &DBRefSymbolArgsTemplate > + (lhs, coll, id, db) => { + const singleStringify = (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - return `.new('${arg}')`; - } - MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > - () => { - return 'BSON::MinKey'; - } - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > - () => { - return '.new'; - } - MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > - () => { - return 'BSON::MaxKey'; + return `'${newStr.replace(/\\([\s\S])|(')/g, '\\$1$2')}'`; } - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > - () => { - return '.new'; - } - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => { - return 'BSON::Timestamp'; + + let db_string = db ? `,\n '$db' => ${singleStringify(db)}` : '' + return `.new(\n '$ref' => ${singleStringify(coll)},\n '$id' => ${id}${db_string}\n)` + } + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => { + return ''; + } + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_decimal' || type === '_double') { + return arg; } - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, arg1, arg2) => { - return `.new(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; + return `${arg}.to_f`; + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => { + return ''; + } + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long') { + return arg; } - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => { - return ''; + return `${arg}.to_i`; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => { + return '' + } + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long') { + return arg; } - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - const str = arg.toString(); + return `${arg}.to_i`; + } + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => { + return ''; + } + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => { + return ''; + } + SymbolSymbolArgsTemplate: !!js/function &SymbolSymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? '' : arg; + const str = arg.toString(); + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + return `:'${newStr}'`; + } else { + return `${newStr}.to_sym`; + } + } + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => { + return ''; + } + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (lhs, pattern, flags) => { + const singleStringify = (str) => { let newStr = str; if ( (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { newStr = str.substr(1, str.length - 2); - return `'${newStr}'.to_f`; - } else if (type === '_decimal' || type === '_double') { - return newStr; - } else { - return `${newStr}.to_f`; } + return `${newStr.replace(/\\([\s\S])/g, '\\$1')}`; + } + return `/${singleStringify(pattern)}/${flags ? singleStringify(flags) : ''}`; + } + Decimal128SymbolTemplate: !!js/function &Decimal128SymbolTemplate > + () => { + return 'BSON::Decimal128'; + } + Decimal128SymbolArgsTemplate: !!js/function &Decimal128SymbolArgsTemplate > + (lhs, arg) => { + arg = arg === undefined ? '0' : arg.toString(); + if (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') { + return `.new(${arg})`; } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => { - return 'Time'; + return `.new('${arg}')`; + } + MinKeySymbolTemplate: !!js/function &MinKeySymbolTemplate > + () => { + return 'BSON::MinKey'; + } + MinKeySymbolArgsTemplate: !!js/function &MinKeySymbolArgsTemplate > + () => { + return '.new'; + } + MaxKeySymbolTemplate: !!js/function &MaxKeySymbolTemplate > + () => { + return 'BSON::MaxKey'; + } + MaxKeySymbolArgsTemplate: !!js/function &MaxKeySymbolArgsTemplate > + () => { + return '.new'; + } + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => { + return 'BSON::Timestamp'; + } + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, arg1, arg2) => { + return `.new(${arg1 === undefined ? 0 : arg1}, ${arg2 === undefined ? 0 : arg2})`; + } + # non bson-specific + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => { + return ''; + } + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + const str = arg.toString(); + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + return `'${newStr}'.to_f`; + } else if (type === '_decimal' || type === '_double') { + return newStr; + } else { + return `${newStr}.to_f`; + } + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => { + return 'Time'; + } + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + const toStr = isString ? '.strftime(\'%a %b %d %Y %H:%M:%S %Z\')' : ''; + + if (date === null) { + return `${lhs}.new.utc${toStr}`; } - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - const toStr = isString ? '.strftime(\'%a %b %d %Y %H:%M:%S %Z\')' : ''; - if (date === null) { - return `${lhs}.new.utc${toStr}`; - } + const dateStr = [ + date.getUTCFullYear(), + date.getUTCMonth() + 1, + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds() + ].join(', '); - const dateStr = [ - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds() - ].join(', '); + return `${lhs}.utc(${dateStr})${toStr}`; + } - return `${lhs}.utc(${dateStr})${toStr}`; - } + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => { + return 'Time.now.utc'; + } + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + (args) => { + return ''; + } - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => { - return 'Time.now.utc'; - } - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - (args) => { - return ''; - } + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: !!js/function &CodeCodeTemplate > + (lhs) => { + return `${lhs}.javascript`; + } + CodeCodeArgsTemplate: !!js/function &CodeCodeArgsTemplate > + () => { + return ''; + } + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => { + return `${lhs}.scope`; + } + CodeScopeArgsTemplate: !!js/function &CodeScopeArgsTemplate > + () => { + return ''; + } + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => { + return `${lhs}.to_s`; + } + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => { + return ''; + } + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => { + return `${lhs} == `; + } + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (arg) => { + return `${arg}`; + } + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => { + return `${lhs}.to_time`; + } + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => { + return ''; + } + ObjectIdIsValidTemplate: !!js/function &ObjectIdIsValidTemplate > + (lhs) => { + return `${lhs}.legal?` + } + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + BinaryValueTemplate: &BinaryValueTemplate null + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: &BinarySubtypeTemplate null + BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null + DBRefGetDBTemplate: !!js/function &DBRefGetDBTemplate > + (lhs) => { + return `${lhs}.database`; + } + DBRefGetCollectionTemplate: !!js/function &DBRefGetCollectionTemplate > + (lhs) => { + return `${lhs}.collection`; + } + DBRefGetIdTemplate: !!js/function &DBRefGetIdTemplate > + (lhs) => { + return `${lhs}.id`; + } + DBRefGetDBArgsTemplate: !!js/function &DBRefGetDBArgsTemplate > + (lhs) => { + return ''; + } + DBRefGetCollectionArgsTemplate: + !!js/function &DBRefGetCollectionArgsTemplate > + (lhs) => { + return ''; + } + DBRefGetIdArgsTemplate: !!js/function &DBRefGetIdArgsTemplate > + (lhs) => { + return ''; + } + DBRefToStringTemplate: !!js/function &DBRefToStringTemplate > + (lhs) => { + return '${lhs}.to_s'; + } + DBRefToStringArgsTemplate: !!js/function &DBRefToStringArgsTemplate > + () => { + return ''; + } + DoubleValueOfTemplate: &DoubleValueOfTemplate null + DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null + Int32ValueOfTemplate: &Int32ValueOfTemplate null + Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null + Int32ToStringTemplate: &Int32ToStringTemplate null + Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => { + return `${lhs} ==`; + } + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongToIntTemplate: !!js/function &LongToIntTemplate > + (lhs) => { + return `${lhs}`; + } + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => { + return ''; + } + LongToStringTemplate: !!js/function &LongToStringTemplate > + (lhs) => { + return `${lhs}.to_s`; + } + LongToStringArgsTemplate: !!js/function &LongToStringArgsTemplate > + () => { + return ''; + } + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (lhs) => { + return `${lhs}.to_f`; + } + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => { + return ''; + } + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => { + return `${lhs} +`; + } + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (arg) => { + return `${arg} -`; + } + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (arg) => { + return `${arg} *`; + } + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => { + return `${lhs} /`; + } + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => { + return `${lhs} %`; + } + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => { + return `${lhs} &`; + } + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => { + return `${lhs} |`; + } + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => { + return `${lhs} ^`; + } + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => { + return `${lhs} <<`; + } + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => { + return `${lhs} >>`; + } + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => { + return `${lhs} -`; + } + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (lhs) => { + return `(${lhs} % 2) == 1`; + } + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => { + return ''; + } + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (lhs) => { + return `${lhs} == 0`; + } + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => { + return ''; + } + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (lhs) => { + return `${lhs} < 0`; + } + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => { + return ''; + } + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => { + return '-'; + } + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (lhs) => { + return lhs; + } + LongNotTemplate: !!js/function &LongNotTemplate > + () => { + return '~'; + } + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (lhs) => { + return lhs; + } + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => { + return `${lhs} !=`; + } + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => { + return `${lhs} >`; + } + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >=`; + } + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => { + return `${lhs} <`; + } + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <=`; + } + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return ` ${arg}`; + } + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (lhs) => { + return `${lhs}.to_f`; + } + LongTopTemplate: !!js/function &LongTopTemplate > + (lhs) => { + return `${lhs} >> 32`; + } + LongBottomTemplate: !!js/function &LongBottomTemplate > + (lhs) => { + return `${lhs} & 0x0000ffff`; + } + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + (lhs) => { + return `${lhs}.to_s`; + } + TimestampToStringArgsTemplate: !!js/function &TimestampToStringArgsTemplate > + () => { + return ''; + } + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => { + return `${lhs} == `; + } + TimestampEqualsArgsTemplate: !!js/function &TimestampEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (lhs) => { + return `${lhs}.seconds`; + } + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + () => { + return '' + } + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (lhs) => { + return `${lhs}.increment`; + } + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + () => { + return '' + } + TimestampTTemplate: !!js/function &TimestampTTemplate > + (lhs) => { + return `${lhs}.seconds`; + } + TimestampITemplate: !!js/function &TimestampITemplate > + (lhs) => { + return `${lhs}.increment`; + } + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (lhs) => { + return `Time.at(${lhs}.increment).utc`; + } + TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (lhs) => { + return `${lhs} <=> `; + } + TimestampCompareArgsTemplate: !!js/function &TimestampCompareArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => { + return `${lhs} != `; + } + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => { + return `${lhs} > `; + } + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => { + return `${lhs} >= `; + } + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => { + return `${lhs} < `; + } + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => { + return `${lhs} <= `; + } + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (lhs, arg) => { + return `${arg}`; + } + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (lhs) => { + return lhs; + } + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + () => { + return ''; + } + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (lhs) => { + return `${lhs}.inspect`; + } + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + () => { + return ''; + } + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (lhs) => { + let extractRegex = (lhs) => { + let r = /^:'(.*)'$/; + let arr = r.exec(lhs); + return arr ? arr[1] : '' - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate !!js/function > - (lhs) => { - return `${lhs}.javascript`; - } - CodeCodeArgsTemplate: &CodeCodeArgsTemplate !!js/function > - () => { - return ''; - } - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => { - return `${lhs}.scope`; - } - CodeScopeArgsTemplate: &CodeScopeArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.to_s`; - } - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} == `; - } - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (arg) => { - return `${arg}`; - } - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => { - return `${lhs}.to_time`; - } - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => { - return ''; - } - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function > - (lhs) => { - return `${lhs}.legal?` - } - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate null - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate null - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null - DBRefGetDBTemplate: &DBRefGetDBTemplate !!js/function > - (lhs) => { - return `${lhs}.database`; - } - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate !!js/function > - (lhs) => { - return `${lhs}.collection`; - } - DBRefGetIdTemplate: &DBRefGetIdTemplate !!js/function > - (lhs) => { - return `${lhs}.id`; - } - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate !!js/function > - (lhs) => { - return ''; - } - DBRefToStringTemplate: &DBRefToStringTemplate !!js/function > - (lhs) => { - return '${lhs}.to_s'; - } - DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate !!js/function > - () => { - return ''; - } - DoubleValueOfTemplate: &DoubleValueOfTemplate null - DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null - Int32ValueOfTemplate: &Int32ValueOfTemplate null - Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null - Int32ToStringTemplate: &Int32ToStringTemplate null - Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} ==`; - } - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongToIntTemplate: &LongToIntTemplate !!js/function > - (lhs) => { - return `${lhs}`; } - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => { - return ''; - } - LongToStringTemplate: &LongToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.to_s`; - } - LongToStringArgsTemplate: &LongToStringArgsTemplate !!js/function > - () => { - return ''; - } - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (lhs) => { - return `${lhs}.to_f`; - } - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => { - return ''; - } - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => { - return `${lhs} +`; - } - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (arg) => { - return `${arg} -`; - } - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (arg) => { - return `${arg} *`; - } - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => { - return `${lhs} /`; - } - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => { - return `${lhs} %`; - } - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => { - return `${lhs} &`; - } - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => { - return `${lhs} |`; - } - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => { - return `${lhs} ^`; - } - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => { - return `${lhs} <<`; - } - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => { - return `${lhs} >>`; - } - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => { - return `${lhs} -`; - } - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (lhs) => { - return `(${lhs} % 2) == 1`; - } - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => { - return ''; - } - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (lhs) => { - return `${lhs} == 0`; - } - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => { - return ''; - } - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (lhs) => { - return `${lhs} < 0`; - } - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => { - return ''; - } - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => { - return '-'; - } - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotTemplate: &LongNotTemplate !!js/function > - () => { - return '~'; - } - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (lhs) => { - return lhs; - } - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} !=`; - } - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} >`; - } - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >=`; - } - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} <`; - } - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <=`; - } - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return ` ${arg}`; - } - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (lhs) => { - return `${lhs}.to_f`; - } - LongTopTemplate: &LongTopTemplate !!js/function > - (lhs) => { - return `${lhs} >> 32`; - } - LongBottomTemplate: &LongBottomTemplate !!js/function > - (lhs) => { - return `${lhs} & 0x0000ffff`; - } - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.to_s`; - } - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate !!js/function > - () => { - return ''; - } - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} == `; - } - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.seconds`; - } - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - () => { - return '' - } - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (lhs) => { - return `${lhs}.increment`; - } - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - () => { - return '' - } - TimestampTTemplate: &TimestampTTemplate !!js/function > - (lhs) => { - return `${lhs}.seconds`; - } - TimestampITemplate: &TimestampITemplate !!js/function > - (lhs) => { - return `${lhs}.increment`; - } - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (lhs) => { - return `Time.at(${lhs}.increment).utc`; - } - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (lhs) => { - return `${lhs} <=> `; - } - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => { - return `${lhs} != `; - } - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => { - return `${lhs} > `; - } - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} >= `; - } - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => { - return `${lhs} < `; - } - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => { - return `${lhs} <= `; - } - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}`; - } - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (lhs) => { - return lhs; - } - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - () => { - return ''; - } - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (lhs) => { - return `${lhs}.inspect`; - } - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - () => { - return ''; - } - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (lhs) => { - let extractRegex = (lhs) => { - let r = /^:'(.*)'$/; - let arr = r.exec(lhs); - return arr ? arr[1] : '' + let res = extractRegex(lhs) + return res ? `'${res}'` : `${lhs}.to_s`; + } + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + (lhs) => { + return ''; + } + Decimal128ToStringTemplate: !!js/function &Decimal128ToStringTemplate > + (lhs) => { + return `${lhs}.to_s`; + } + Decimal128ToStringArgsTemplate: + !!js/function &Decimal128ToStringArgsTemplate > + (lhs) => { + return ''; + } - } - let res = extractRegex(lhs) - return res ? `'${res}'` : `${lhs}.to_s`; - } - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - (lhs) => { - return ''; - } - Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function > - (lhs) => { - return `${lhs}.to_s`; - } - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate !!js/function > - (lhs) => { - return ''; - } - - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => { - return '9223372036854775807'; - } - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => { - return '-9223372036854775808'; - } - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => { - return '0'; - } - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => { - return '1'; - } - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => { - return '-1'; - } - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate !!js/function > - (lhs, arg) => { - return arg; - } - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - () => { - return ''; - } - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `${arg}.to_i`; - } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function > - () => { - return 'BSON::Decimal128'; - } - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function > - (lhs, arg) => { - return `.new(${arg})`; - } - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - () => { - return 'BSON::ObjectId'; - } - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (lhs, arg) => { + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => { + return '9223372036854775807'; + } + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => { + return '-9223372036854775808'; + } + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => { + return '0'; + } + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => { + return '1'; + } + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => { + return '-1'; + } + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: !!js/function &LongSymbolFromBitsTemplate > + () => { + return ''; + } + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => { + return ''; + } + LongSymbolFromIntArgsTemplate: !!js/function &LongSymbolFromIntArgsTemplate > + (lhs, arg) => { + return arg; + } + LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + () => { + return ''; + } + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (lhs, arg) => { + return `${arg}.to_i`; + } + Decimal128SymbolFromStringTemplate: + !!js/function &Decimal128SymbolFromStringTemplate > + () => { + return 'BSON::Decimal128'; + } + Decimal128SymbolFromStringArgsTemplate: + !!js/function &Decimal128SymbolFromStringArgsTemplate > + (lhs, arg) => { + return `.new(${arg})`; + } + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + () => { + return 'BSON::ObjectId'; + } + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (lhs, arg) => { + return `(${arg})`; + } + ObjectIdCreateFromTimeTemplate: + !!js/function &ObjectIdCreateFromTimeTemplate > + () => { + return 'BSON::ObjectId.from_time'; + } + ObjectIdCreateFromTimeArgsTemplate: + !!js/function &ObjectIdCreateFromTimeArgsTemplate > + (lhs, arg, isNumber) => { + if (!isNumber) { return `(${arg})`; } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > - () => { - return 'BSON::ObjectId.from_time'; - } - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function > - (lhs, arg, isNumber) => { - if (!isNumber) { - return `(${arg})`; - } - return `(Time.at(${arg}))`; - } - # non bson-specific would go here, but there aren't any atm. - - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - let set = new Set(Object.values(args)) - if (set.has(`require 'mongo'`)) return `require 'mongo'` - return [...set].sort().join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => { - return `require 'mongo'` - } - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate null - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 101ImportTemplate: &101ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 102ImportTemplate: &102ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 103ImportTemplate: &103ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - 107ImportTemplate: &107ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 108ImportTemplate: &108ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 109ImportTemplate: &109ImportTemplate null - 110ImportTemplate: &110ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate !!js/function > - () => { - return `require 'bson'` - } - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate null - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + return `(Time.at(${arg}))`; + } + # non bson-specific would go here, but there aren't any atm. + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + let set = new Set(Object.values(args)) + if (set.has(`require 'mongo'`)) return `require 'mongo'` + return [...set].sort().join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => { + return `require 'mongo'` + } + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: &8ImportTemplate null + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: !!js/function &100ImportTemplate > + () => { + return `require 'bson'` + } + 101ImportTemplate: !!js/function &101ImportTemplate > + () => { + return `require 'bson'` + } + 102ImportTemplate: !!js/function &102ImportTemplate > + () => { + return `require 'bson'` + } + 103ImportTemplate: !!js/function &103ImportTemplate > + () => { + return `require 'bson'` + } + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + 107ImportTemplate: !!js/function &107ImportTemplate > + () => { + return `require 'bson'` + } + 108ImportTemplate: !!js/function &108ImportTemplate > + () => { + return `require 'bson'` + } + 109ImportTemplate: &109ImportTemplate null + 110ImportTemplate: !!js/function &110ImportTemplate > + () => { + return `require 'bson'` + } + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: !!js/function &112ImportTemplate > + () => { + return `require 'bson'` + } + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: &200ImportTemplate null + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/rust/templates.yaml b/packages/bson-transpilers/symbols/rust/templates.yaml index 8aaa18f0f2f..20face66663 100644 --- a/packages/bson-transpilers/symbols/rust/templates.yaml +++ b/packages/bson-transpilers/symbols/rust/templates.yaml @@ -18,843 +18,867 @@ # # ############################################# Templates: - ######## - # Misc # - ######## + ######## + # Misc # + ######## - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: '' - g: '' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: '' + g: '' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - DriverTemplate: &DriverTemplate !!js/function > - (spec) => { - const comment = `// Requires the MongoDB crate.\n// https://crates.io/crates/mongodb`; - - const options = spec.options; - const filter = spec.filter || 'None'; - const exportMode = spec.exportMode; - delete spec.options; - delete spec.filter; - delete spec.exportMode; + DriverTemplate: !!js/function &DriverTemplate > + (spec) => { + const comment = `// Requires the MongoDB crate.\n// https://crates.io/crates/mongodb`; + + const options = spec.options; + const filter = spec.filter || 'None'; + const exportMode = spec.exportMode; + delete spec.options; + delete spec.filter; + delete spec.exportMode; - const connect = `let client = Client::with_uri_str("${options.uri}").await?;` - const coll = `client.database("${options.database}").collection::("${options.collection}")`; + const connect = `let client = Client::with_uri_str("${options.uri}").await?;` + const coll = `client.database("${options.database}").collection::("${options.collection}")`; - if ('aggregation' in spec) { - let agg = spec.aggregation; - if (agg.charAt(0) != '[') { - agg = `[${agg}]`; - } - return `${comment}\n\n${connect}\nlet result = ${coll}.aggregate(${agg}, None).await?;`; + if ('aggregation' in spec) { + let agg = spec.aggregation; + if (agg.charAt(0) != '[') { + agg = `[${agg}]`; } + return `${comment}\n\n${connect}\nlet result = ${coll}.aggregate(${agg}, None).await?;`; + } - let driverMethod; - let optionsName; - switch (exportMode) { - case 'Delete Query': - driverMethod = 'delete_many'; - optionsName = 'DeleteOptions'; - break; - case 'Update Query': - driverMethod = 'update_many'; - optionsName = 'UpdateOptions'; + let driverMethod; + let optionsName; + switch (exportMode) { + case 'Delete Query': + driverMethod = 'delete_many'; + optionsName = 'DeleteOptions'; + break; + case 'Update Query': + driverMethod = 'update_many'; + optionsName = 'UpdateOptions'; + break; + default: + driverMethod = 'find'; + optionsName = 'FindOptions'; + break; + } + + const findOpts = []; + for (const k in spec) { + let optName = k; + let optValue = spec[k]; + switch(k) { + case 'project': + optName = 'projection'; break; - default: - driverMethod = 'find'; - optionsName = 'FindOptions'; + case 'maxTimeMS': + optName = 'max_time'; + optValue = `std::time::Duration::from_millis(${optValue})`; break; } - - const findOpts = []; - for (const k in spec) { - let optName = k; - let optValue = spec[k]; - switch(k) { - case 'project': - optName = 'projection'; - break; - case 'maxTimeMS': - optName = 'max_time'; - optValue = `std::time::Duration::from_millis(${optValue})`; - break; - } - findOpts.push(` .${optName}(${optValue})`); - } - let optStr = ''; - if (findOpts.length > 0) { - optStr = `let options = mongodb::options::${optionsName}::builder()\n${findOpts.join('\n')}\n .build();\n`; - } - let optRef = optStr ? 'options' : 'None'; - const cmd = `let result = ${coll}.${driverMethod}(${filter}, ${optRef}).await?;`; - - return `${comment}\n\n${connect}\n${optStr}${cmd}`; + findOpts.push(` .${optName}(${optValue})`); } - EqualitySyntaxTemplate: &EqualitySyntaxTemplate !!js/function > - (lhs, op, rhs) => { - if (op.includes('!') || op.includes('not')) { - return `${lhs} != ${rhs}`; - } - else if (op === '==' || op === '===' || op === 'is') { - return `${lhs} == ${rhs}`; - } - return `${lhs} ${op} ${rhs}`; + let optStr = ''; + if (findOpts.length > 0) { + optStr = `let options = mongodb::options::${optionsName}::builder()\n${findOpts.join('\n')}\n .build();\n`; } - InSyntaxTemplate: &InSyntaxTemplate !!js/function > - (lhs, op, rhs) => { - let prefix = ''; - if (op.includes('!') || op.includes('not')) { - prefix = '!'; - } - return `${prefix}${rhs}.contains(&${lhs})` + let optRef = optStr ? 'options' : 'None'; + const cmd = `let result = ${coll}.${driverMethod}(${filter}, ${optRef}).await?;`; + + return `${comment}\n\n${connect}\n${optStr}${cmd}`; + } + EqualitySyntaxTemplate: !!js/function &EqualitySyntaxTemplate > + (lhs, op, rhs) => { + if (op.includes('!') || op.includes('not')) { + return `${lhs} != ${rhs}`; } - AndSyntaxTemplate: &AndSyntaxTemplate !!js/function > - (args) => { - return args.join(' && '); + else if (op === '==' || op === '===' || op === 'is') { + return `${lhs} == ${rhs}`; } - OrSyntaxTemplate: &OrSyntaxTemplate !!js/function > - (args) => { - return args.join(' || '); + return `${lhs} ${op} ${rhs}`; + } + InSyntaxTemplate: !!js/function &InSyntaxTemplate > + (lhs, op, rhs) => { + let prefix = ''; + if (op.includes('!') || op.includes('not')) { + prefix = '!'; } - NotSyntaxTemplate: &NotSyntaxTemplate !!js/function > - (arg) => { - return `!${arg}`; + return `${prefix}${rhs}.contains(&${lhs})` + } + AndSyntaxTemplate: !!js/function &AndSyntaxTemplate > + (args) => { + return args.join(' && '); + } + OrSyntaxTemplate: !!js/function &OrSyntaxTemplate > + (args) => { + return args.join(' || '); + } + NotSyntaxTemplate: !!js/function &NotSyntaxTemplate > + (arg) => { + return `!${arg}`; + } + UnarySyntaxTemplate: !!js/function &UnarySyntaxTemplate > + (op, val) => { + switch(op) { + case '+': + return val; + case '~': + return `!${val}`; + default: + return `${op}${val}`; } - UnarySyntaxTemplate: &UnarySyntaxTemplate !!js/function > - (op, val) => { + return `${op}${val}`; + } + BinarySyntaxTemplate: !!js/function &BinarySyntaxTemplate > + (args) => { + return args.reduce((s, op, i, arr) => { + if (i % 2 === 0) { + return s; + } + const rhs = arr[i + 1]; switch(op) { - case '+': - return val; - case '~': - return `!${val}`; + case '//': + return `${s} / ${rhs}` + case '**': + return `${s}.pow(${rhs})` default: - return `${op}${val}`; - } - return `${op}${val}`; - } - BinarySyntaxTemplate: &BinarySyntaxTemplate !!js/function > - (args) => { - return args.reduce((s, op, i, arr) => { - if (i % 2 === 0) { - return s; - } - const rhs = arr[i + 1]; - switch(op) { - case '//': - return `${s} / ${rhs}` - case '**': - return `${s}.pow(${rhs})` - default: - return `${s} ${op} ${rhs}`; - } - }, args[0]); - } - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosTemplate: &EosSyntaxTemplate null # No args. End-of-line - EofTemplate: &EofSyntaxTemplate null # No args. End-of-file - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + return `${s} ${op} ${rhs}`; + } + }, args[0]); + } + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosTemplate: &EosSyntaxTemplate null # No args. End-of-line + EofTemplate: &EofSyntaxTemplate null # No args. End-of-file + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate !!js/function > - (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: !!js/function &StringTypeTemplate > + (str) => { + let newStr = str; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); + } + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + } + RegexTypeTemplate: !!js/function &RegexTypeTemplate > + (pattern, flags) => { + // Double-quote stringify + let newPat = pattern; + if ( + (pattern.charAt(0) === '\'' && pattern.charAt(pattern.length - 1) === '\'') || + (pattern.charAt(0) === '"' && pattern.charAt(pattern.length - 1) === '"')) { + newPat = pattern.substr(1, pattern.length - 2); + } + return `Regex { pattern: "${newPat.replace(/\\([\s\S])|(")/g, '\\$1$2')}".to_string(), options: "${flags}".to_string() }`; + } + BoolTypeTemplate: !!js/function &BoolTypeTemplate > + (literal) => { + return literal.toLowerCase(); + } + IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) + DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType + LongBasicTypeTemplate: &LongBasicTypeTemplate null + HexTypeTemplate: !!js/function &HexTypeTemplate > + (literal, type) => { + if (literal.charAt(1) === 'X') { + return literal.charAt(0) + 'x' + literal.substring(2); + } + return literal; + } + OctalTypeTemplate: !!js/function &OctalTypeTemplate > + (literal, type) => { + switch(literal.charAt(1)) { + case 'o': + return literal; + case 'O': + case '0': + return literal.charAt(0) + 'o' + literal.substring(2); + default: + return literal.charAt(0) + 'o' + literal.substring(1); } - RegexTypeTemplate: &RegexTypeTemplate !!js/function > - (pattern, flags) => { - // Double-quote stringify - let newPat = pattern; + } + NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType + ArrayTypeTemplate: !!js/function &ArrayTypeTemplate > + (literal, depth) => { + if (literal === '') { + return '[]' + } + return `[${literal}]`; + } + ArrayTypeArgsTemplate: !!js/function &ArrayTypeArgsTemplate > + (element, depth, isLast) => { + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = isLast ? '\n' + ' '.repeat(depth - 1) : ','; + return `${indent}${element}${closingIndent}`; + } + NullTypeTemplate: !!js/function &NullTypeTemplate > + () => 'Bson::Null' + UndefinedTypeTemplate: !!js/function &UndefinedTypeTemplate > + () => 'Bson::Undefined' + ObjectTypeTemplate: !!js/function &ObjectTypeTemplate > + (literal) => `doc! {${literal}}` + ObjectTypeArgsTemplate: !!js/function &ObjectTypeArgsTemplate > + (args, depth) => { + if (args.length === 0) { + return ''; + } + depth++; + const indent = '\n' + ' '.repeat(depth); + const closingIndent = '\n' + ' '.repeat(depth - 1); + const doubleStringify = (str) => { + let newStr = str; if ( - (pattern.charAt(0) === '\'' && pattern.charAt(pattern.length - 1) === '\'') || - (pattern.charAt(0) === '"' && pattern.charAt(pattern.length - 1) === '"')) { - newPat = pattern.substr(1, pattern.length - 2); - } - return `Regex { pattern: "${newPat.replace(/\\([\s\S])|(")/g, '\\$1$2')}".to_string(), options: "${flags}".to_string() }`; - } - BoolTypeTemplate: &BoolTypeTemplate !!js/function > - (literal) => { - return literal.toLowerCase(); - } - IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) - DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType - LongBasicTypeTemplate: &LongBasicTypeTemplate null - HexTypeTemplate: &HexTypeTemplate !!js/function > - (literal, type) => { - if (literal.charAt(1) === 'X') { - return literal.charAt(0) + 'x' + literal.substring(2); - } - return literal; - } - OctalTypeTemplate: &OctalTypeTemplate !!js/function > - (literal, type) => { - switch(literal.charAt(1)) { - case 'o': - return literal; - case 'O': - case '0': - return literal.charAt(0) + 'o' + literal.substring(2); - default: - return literal.charAt(0) + 'o' + literal.substring(1); + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } + return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; } - NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType - ArrayTypeTemplate: &ArrayTypeTemplate !!js/function > - (literal, depth) => { - if (literal === '') { - return '[]' - } - return `[${literal}]`; - } - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate !!js/function > - (element, depth, isLast) => { - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = isLast ? '\n' + ' '.repeat(depth - 1) : ','; - return `${indent}${element}${closingIndent}`; - } - NullTypeTemplate: &NullTypeTemplate !!js/function > - () => 'Bson::Null' - UndefinedTypeTemplate: &UndefinedTypeTemplate !!js/function > - () => 'Bson::Undefined' - ObjectTypeTemplate: &ObjectTypeTemplate !!js/function > - (literal) => `doc! {${literal}}` - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate !!js/function > - (args, depth) => { - if (args.length === 0) { - return ''; - } - depth++; - const indent = '\n' + ' '.repeat(depth); - const closingIndent = '\n' + ' '.repeat(depth - 1); - const doubleStringify = (str) => { - let newStr = str; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - return `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - } - const pairs = args.map((pair) => { - return `${indent}${doubleStringify(pair[0])}: ${pair[1]}`; - }).join(','); + const pairs = args.map((pair) => { + return `${indent}${doubleStringify(pair[0])}: ${pair[1]}`; + }).join(','); - return `${pairs}${closingIndent}`; + return `${pairs}${closingIndent}`; - } + } - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > - () => '' - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function > - (lhs, code, scope) => { - // Double quote stringify - let newStr = code === undefined ? '' : code; - const str = newStr; - if ( - (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || - (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { - newStr = str.substr(1, str.length - 2); - } - code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}".to_string()`; - if (scope === undefined) { - return `Bson::JavaScriptCode(${code})`; - } else { - return `JavaScriptCodeWithScope { code: ${code}, scope: ${scope} }`; - } + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: !!js/function &CodeSymbolTemplate > + () => '' + CodeSymbolArgsTemplate: !!js/function &CodeSymbolArgsTemplate > + (lhs, code, scope) => { + // Double quote stringify + let newStr = code === undefined ? '' : code; + const str = newStr; + if ( + (str.charAt(0) === '\'' && str.charAt(str.length - 1) === '\'') || + (str.charAt(0) === '"' && str.charAt(str.length - 1) === '"')) { + newStr = str.substr(1, str.length - 2); } - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function > - () => 'ObjectId' - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate !!js/function > - (lhs, arg) => { - if (arg === undefined || arg === '') { - return '::new()'; - } - // Double quote stringify - let newArg = arg; - if ( - (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') || - (arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"')) { - newArg = arg.substr(1, arg.length - 2); - } - newArg = `"${newArg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - return `::parse_str(${newArg})?`; - } - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate !!js/function > - () => 'BinarySubtype::Generic' - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate !!js/function > - () => 'BinarySubtype::Function' - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate !!js/function > - () => 'BinarySubtype::BinaryOld' - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate !!js/function > - () => 'BinarySubtype::UuidOld' - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate !!js/function > - () => 'BinarySubtype::Uuid' - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template !!js/function > - () => 'BinarySubtype::Md5' - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate !!js/function > - (arg) => `BinarySubtype::UserDefined(${arg})` - DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db - DoubleSymbolTemplate: &DoubleSymbolTemplate !!js/function > - () => '' - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_decimal' || type === '_double') { - return arg; - } - if (type === '_integer' || type === '_long') { - return `${arg}.0`; - } - if (type === '_string') { - return `${arg}.parse::()?`; - } - return `f32::try_from(${arg})?`; - } - Int32SymbolTemplate: &Int32SymbolTemplate !!js/function > - () => '' - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { - return arg; - } - if (type === '_string') { - return `${arg}.parse::()?`; - } - return `i32::try_from(${arg})?`; - } - LongSymbolTemplate: &LongSymbolTemplate !!js/function > - () => '' - LongSymbolArgsTemplate: &LongSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; - if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { - return `${arg}i64`; - } - if (type === '_string') { - return `${arg}.parse::()?`; - } - return `i64::try_from(${arg})?`; - } - RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > - () => 'Regex' - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate !!js/function > - () => 'Bson::Symbol' - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate !!js/function > - (_, arg) => `(${arg})` - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate !!js/function > - () => 'Regex' - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate !!js/function > - (_, pattern, flags) => { - if (flags === null || flags === undefined) { - flags = ''; - } - if ( - (flags.charAt(0) === '\'' && flags.charAt(flags.length - 1) === '\'') || - (flags.charAt(0) === '"' && flags.charAt(flags.length - 1) === '"')) { - flags = flags.substr(1, flags.length - 2); - } - // Double-quote stringify - let newPat = pattern; - if ( - (pattern.charAt(0) === '\'' && pattern.charAt(pattern.length - 1) === '\'') || - (pattern.charAt(0) === '"' && pattern.charAt(pattern.length - 1) === '"')) { - newPat = pattern.substr(1, pattern.length - 2); - } - return ` { pattern: "${newPat.replace(/\\([\s\S])|(")/g, '\\$1$2')}", flags: "${flags}" }`; - } - Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg - MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > - () => 'Bson::MinKey' - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > - () => '' - MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > - () => 'Bson::MaxKey' - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > - () => '' - TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function > - () => 'Timestamp' - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate !!js/function > - (lhs, low, high) => { - if (low === undefined) { - low = 0; - high = 0; - } - return ` { time: ${low}, increment: ${high} }` - } - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate !!js/function > - () => '' - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate !!js/function > - (lhs, arg, type) => { - arg = arg === undefined ? 0 : arg; + code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}".to_string()`; + if (scope === undefined) { + return `Bson::JavaScriptCode(${code})`; + } else { + return `JavaScriptCodeWithScope { code: ${code}, scope: ${scope} }`; + } + } + ObjectIdSymbolTemplate: !!js/function &ObjectIdSymbolTemplate > + () => 'ObjectId' + ObjectIdSymbolArgsTemplate: !!js/function &ObjectIdSymbolArgsTemplate > + (lhs, arg) => { + if (arg === undefined || arg === '') { + return '::new()'; + } + // Double quote stringify + let newArg = arg; + if ( + (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') || + (arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"')) { + newArg = arg.substr(1, arg.length - 2); + } + newArg = `"${newArg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + return `::parse_str(${newArg})?`; + } + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null + BinarySymbolSubtypeDefaultTemplate: + !!js/function &BinarySymbolSubtypeDefaultTemplate > + () => 'BinarySubtype::Generic' + BinarySymbolSubtypeFunctionTemplate: + !!js/function &BinarySymbolSubtypeFunctionTemplate > + () => 'BinarySubtype::Function' + BinarySymbolSubtypeByteArrayTemplate: + !!js/function &BinarySymbolSubtypeByteArrayTemplate > + () => 'BinarySubtype::BinaryOld' + BinarySymbolSubtypeUuidOldTemplate: + !!js/function &BinarySymbolSubtypeUuidOldTemplate > + () => 'BinarySubtype::UuidOld' + BinarySymbolSubtypeUuidTemplate: + !!js/function &BinarySymbolSubtypeUuidTemplate > + () => 'BinarySubtype::Uuid' + BinarySymbolSubtypeMd5Template: + !!js/function &BinarySymbolSubtypeMd5Template > + () => 'BinarySubtype::Md5' + BinarySymbolSubtypeUserDefinedTemplate: + !!js/function &BinarySymbolSubtypeUserDefinedTemplate > + (arg) => `BinarySubtype::UserDefined(${arg})` + DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db + DoubleSymbolTemplate: !!js/function &DoubleSymbolTemplate > + () => '' + DoubleSymbolArgsTemplate: !!js/function &DoubleSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_decimal' || type === '_double') { + return arg; + } + if (type === '_integer' || type === '_long') { + return `${arg}.0`; + } + if (type === '_string') { + return `${arg}.parse::()?`; + } + return `f32::try_from(${arg})?`; + } + Int32SymbolTemplate: !!js/function &Int32SymbolTemplate > + () => '' + Int32SymbolArgsTemplate: !!js/function &Int32SymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { + return arg; + } + if (type === '_string') { + return `${arg}.parse::()?`; + } + return `i32::try_from(${arg})?`; + } + LongSymbolTemplate: !!js/function &LongSymbolTemplate > + () => '' + LongSymbolArgsTemplate: !!js/function &LongSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; + if (type === '_integer' || type === '_long' || type === '_hex' || type === '_octal') { + return `${arg}i64`; + } + if (type === '_string') { + return `${arg}.parse::()?`; + } + return `i64::try_from(${arg})?`; + } + RegExpSymbolTemplate: !!js/function &RegExpSymbolTemplate > + () => 'Regex' + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: !!js/function &SymbolSymbolTemplate > + () => 'Bson::Symbol' + SymbolSymbolArgsTemplate: !!js/function &SymbolSymbolArgsTemplate > + (_, arg) => `(${arg})` + BSONRegExpSymbolTemplate: !!js/function &BSONRegExpSymbolTemplate > + () => 'Regex' + BSONRegExpSymbolArgsTemplate: !!js/function &BSONRegExpSymbolArgsTemplate > + (_, pattern, flags) => { + if (flags === null || flags === undefined) { + flags = ''; + } + if ( + (flags.charAt(0) === '\'' && flags.charAt(flags.length - 1) === '\'') || + (flags.charAt(0) === '"' && flags.charAt(flags.length - 1) === '"')) { + flags = flags.substr(1, flags.length - 2); + } + // Double-quote stringify + let newPat = pattern; + if ( + (pattern.charAt(0) === '\'' && pattern.charAt(pattern.length - 1) === '\'') || + (pattern.charAt(0) === '"' && pattern.charAt(pattern.length - 1) === '"')) { + newPat = pattern.substr(1, pattern.length - 2); + } + return ` { pattern: "${newPat.replace(/\\([\s\S])|(")/g, '\\$1$2')}", flags: "${flags}" }`; + } + Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args + Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg + MinKeySymbolTemplate: !!js/function &MinKeySymbolTemplate > + () => 'Bson::MinKey' + MinKeySymbolArgsTemplate: !!js/function &MinKeySymbolArgsTemplate > + () => '' + MaxKeySymbolTemplate: !!js/function &MaxKeySymbolTemplate > + () => 'Bson::MaxKey' + MaxKeySymbolArgsTemplate: !!js/function &MaxKeySymbolArgsTemplate > + () => '' + TimestampSymbolTemplate: !!js/function &TimestampSymbolTemplate > + () => 'Timestamp' + TimestampSymbolArgsTemplate: !!js/function &TimestampSymbolArgsTemplate > + (lhs, low, high) => { + if (low === undefined) { + low = 0; + high = 0; + } + return ` { time: ${low}, increment: ${high} }` + } + # non bson-specific + NumberSymbolTemplate: !!js/function &NumberSymbolTemplate > + () => '' + NumberSymbolArgsTemplate: !!js/function &NumberSymbolArgsTemplate > + (lhs, arg, type) => { + arg = arg === undefined ? 0 : arg; - switch(type) { - case '_string': - if (arg.indexOf('.') !== -1) { - return `${arg}.parse::()?`; - } - return `${arg}.parse::()?`; - case '_integer': - case '_long': - case '_decimal': - return `${arg}`; - default: - return `f32::try_from(${arg})?`; - } + switch(type) { + case '_string': + if (arg.indexOf('.') !== -1) { + return `${arg}.parse::()?`; + } + return `${arg}.parse::()?`; + case '_integer': + case '_long': + case '_decimal': + return `${arg}`; + default: + return `f32::try_from(${arg})?`; } - DateSymbolTemplate: &DateSymbolTemplate !!js/function > - () => 'DateTime' - DateSymbolArgsTemplate: &DateSymbolArgsTemplate !!js/function > - (lhs, date, isString) => { - let toStr = isString ? '.to_rfc3339_string()' : ''; - if (date === null) { - return `${lhs}::now()${toStr}`; - } - return `${lhs}::parse_rfc3339_str("${date.toISOString()}")?${toStr}`; + } + DateSymbolTemplate: !!js/function &DateSymbolTemplate > + () => 'DateTime' + DateSymbolArgsTemplate: !!js/function &DateSymbolArgsTemplate > + (lhs, date, isString) => { + let toStr = isString ? '.to_rfc3339_string()' : ''; + if (date === null) { + return `${lhs}::now()${toStr}`; } + return `${lhs}::parse_rfc3339_str("${date.toISOString()}")?${toStr}`; + } - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate null - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate !!js/function > - (lhs) => `${lhs}.scope` - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate !!js/function > - (lhs) => `${lhs}.to_hex()` - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate !!js/function > - () => '' - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function > - (lhs) => `${lhs} == ` - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function > - (_, arg) => arg - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function > - (lhs) => `${lhs}.timestamp()` - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate !!js/function > - () => '' - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate null - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate !!js/function > - (arg) => `${arg}.bytes` - BinaryValueArgsTemplate: &BinaryValueArgsTemplate !!js/function > - () => '' - BinaryLengthTemplate: &BinaryLengthTemplate !!js/function > - (arg) => `${arg}.bytes.len()` - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate !!js/function > - () => '' - BinaryToStringTemplate: &BinaryToStringTemplate !!js/function > - (arg) => `format!("{}", ${arg})` - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate !!js/function > - () => '' - BinarySubtypeTemplate: &BinarySubtypeTemplate !!js/function > - (arg) => `${arg}.subtype` - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate !!js/function > - () => '' - DBRefGetDBTemplate: &DBRefGetDBTemplate null - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null - DBRefGetIdTemplate: &DBRefGetIdTemplate null - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null - DBRefToStringTemplate: &DBRefToStringTemplate null - DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null - DoubleValueOfTemplate: &DoubleValueOfTemplate null - DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null - Int32ValueOfTemplate: &Int32ValueOfTemplate null - Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null - Int32ToStringTemplate: &Int32ToStringTemplate null - Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null - LongEqualsTemplate: &LongEqualsTemplate !!js/function > - (lhs) => `${lhs} == ` - LongEqualsArgsTemplate: &LongEqualsArgsTemplate !!js/function > - (_, rhs) => rhs - LongToStringTemplate: &LongToStringTemplate !!js/function > - (arg) => arg - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToIntTemplate: &LongToIntTemplate !!js/function > - (arg) => `${arg} as i32` - LongToIntArgsTemplate: &LongToIntArgsTemplate !!js/function > - () => '' - LongValueOfTemplate: &LongValueOfTemplate null - LongValueOfArgsTemplate: &LongValueOfArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate !!js/function > - (arg) => `${arg} as f64` - LongToNumberArgsTemplate: &LongToNumberArgsTemplate !!js/function > - () => '' - LongAddTemplate: &LongAddTemplate !!js/function > - (lhs) => `${lhs} + ` - LongAddArgsTemplate: &LongAddArgsTemplate !!js/function > - (_, rhs) => rhs - LongSubtractTemplate: &LongSubtractTemplate !!js/function > - (lhs) => `${lhs} - ` - LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function > - (_, rhs) => rhs - LongMultiplyTemplate: &LongMultiplyTemplate !!js/function > - (lhs) => `${lhs} * ` - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function > - (_, rhs) => rhs - LongDivTemplate: &LongDivTemplate !!js/function > - (lhs) => `${lhs} / ` - LongDivArgsTemplate: &LongDivArgsTemplate !!js/function > - (_, rhs) => rhs - LongModuloTemplate: &LongModuloTemplate !!js/function > - (lhs) => `${lhs} % ` - LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function > - (_, rhs) => rhs - LongAndTemplate: &LongAndTemplate !!js/function > - (lhs) => `${lhs} & ` - LongAndArgsTemplate: &LongAndArgsTemplate !!js/function > - (_, rhs) => rhs - LongOrTemplate: &LongOrTemplate !!js/function > - (lhs) => `${lhs} | ` - LongOrArgsTemplate: &LongOrArgsTemplate !!js/function > - (_, rhs) => rhs - LongXorTemplate: &LongXorTemplate !!js/function > - (lhs) => `${lhs} ^ ` - LongXorArgsTemplate: &LongXorArgsTemplate !!js/function > - (_, rhs) => rhs - LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function > - (lhs) => `${lhs} << ` - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function > - (_, rhs) => rhs - LongShiftRightTemplate: &LongShiftRightTemplate !!js/function > - (lhs) => `${lhs} >> ` - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function > - (_, rhs) => rhs - LongCompareTemplate: &LongCompareTemplate !!js/function > - (lhs) => `${lhs} - ` - LongCompareArgsTemplate: &LongCompareArgsTemplate !!js/function > - (_, rhs) => rhs - LongIsOddTemplate: &LongIsOddTemplate !!js/function > - (arg) => `${arg} % 2 == 1` - LongIsOddArgsTemplate: &LongIsOddArgsTemplate !!js/function > - () => '' - LongIsZeroTemplate: &LongIsZeroTemplate !!js/function > - (arg) => `${arg} == 0` - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate !!js/function > - () => '' - LongIsNegativeTemplate: &LongIsNegativeTemplate !!js/function > - (arg) => `${arg} < 0` - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate !!js/function > - () => '' - LongNegateTemplate: &LongNegateTemplate !!js/function > - () => '-' - LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function > - (arg) => arg - LongNotTemplate: &LongNotTemplate !!js/function > - () => '~' - LongNotArgsTemplate: &LongNotArgsTemplate !!js/function > - (arg) => arg - LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function > - (lhs) => `${lhs} != ` - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate !!js/function > - (_, rhs) => rhs - LongGreaterThanTemplate: &LongGreaterThanTemplate !!js/function > - (lhs) => `${lhs} > ` - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate !!js/function > - (_, rhs) => rhs - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} >= ` - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - LongLessThanTemplate: &LongLessThanTemplate !!js/function > - (lhs) => `${lhs} < ` - LongLessThanArgsTemplate: &LongLessThanArgsTemplate !!js/function > - (_, rhs) => rhs - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} <= ` - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - LongFloatApproxTemplate: &LongFloatApproxTemplate !!js/function > - (arg) => `${arg} as f32` - LongTopTemplate: &LongTopTemplate !!js/function > - (arg) => `${arg} >> 32` - LongBottomTemplate: &LongBottomTemplate !!js/function > - (arg) => `${arg} & 0x0000ffff` - TimestampToStringTemplate: &TimestampToStringTemplate !!js/function > - (arg) => `${arg}.to_string()` - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate !!js/function > - () => '' - TimestampEqualsTemplate: &TimestampEqualsTemplate !!js/function > - (lhs) => `${lhs} == ` - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate !!js/function > - (_, rhs) => rhs - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate !!js/function > - (arg) => `${arg}.time` - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate !!js/function > - () => '' - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function > - (arg) => `${arg}.increment` - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function > - () => '' - TimestampTTemplate: &TimestampTTemplate !!js/function > - (arg) => `${arg}.time` - TimestampITemplate: &TimestampITemplate !!js/function > - (arg) => `${arg}.increment` - TimestampAsDateTemplate: &TimestampAsDateTemplate !!js/function > - (arg) => `DateTime::from_millis(${arg}.time)` - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate !!js/function > - () => '' - TimestampCompareTemplate: &TimestampCompareTemplate !!js/function > - (arg) => `${arg}.cmp` - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate !!js/function > - (_, rhs) => `(${rhs})` - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate !!js/function > - (lhs) => `${lhs} != ` - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate !!js/function > - (_, rhs) => rhs - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate !!js/function > - (lhs) => `${lhs} > ` - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate !!js/function > - (_, rhs) => rhs - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} >= ` - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - TimestampLessThanTemplate: &TimestampLessThanTemplate !!js/function > - (lhs) => `${lhs} < ` - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate !!js/function > - (_, rhs) => rhs - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate !!js/function > - (lhs) => `${lhs} <= ` - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate !!js/function > - (_, rhs) => rhs - SymbolValueOfTemplate: &SymbolValueOfTemplate !!js/function > - (arg) => `${arg}.as_symbol().unwrap()` - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate !!js/function > - () => '' - SymbolInspectTemplate: &SymbolInspectTemplate !!js/function > - (arg) => `format!("{:?}", ${arg})` - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate !!js/function > - () => '' - SymbolToStringTemplate: &SymbolToStringTemplate !!js/function > - (arg) => `${arg}.as_symbol().unwrap()` - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate !!js/function > - () => '' - Decimal128ToStringTemplate: &Decimal128ToStringTemplate null - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # non bson-specific - DateSymbolNowTemplate: &DateSymbolNowTemplate !!js/function > - () => 'DateTime::now()' - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate !!js/function > - () => '' + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: &CodeCodeTemplate null + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: !!js/function &CodeScopeTemplate > + (lhs) => `${lhs}.scope` + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: !!js/function &ObjectIdToStringTemplate > + (lhs) => `${lhs}.to_hex()` + ObjectIdToStringArgsTemplate: !!js/function &ObjectIdToStringArgsTemplate > + () => '' + ObjectIdEqualsTemplate: !!js/function &ObjectIdEqualsTemplate > + (lhs) => `${lhs} == ` + ObjectIdEqualsArgsTemplate: !!js/function &ObjectIdEqualsArgsTemplate > + (_, arg) => arg + ObjectIdGetTimestampTemplate: !!js/function &ObjectIdGetTimestampTemplate > + (lhs) => `${lhs}.timestamp()` + ObjectIdGetTimestampArgsTemplate: + !!js/function &ObjectIdGetTimestampArgsTemplate > + () => '' + ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate null + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + BinaryValueTemplate: !!js/function &BinaryValueTemplate > + (arg) => `${arg}.bytes` + BinaryValueArgsTemplate: !!js/function &BinaryValueArgsTemplate > + () => '' + BinaryLengthTemplate: !!js/function &BinaryLengthTemplate > + (arg) => `${arg}.bytes.len()` + BinaryLengthArgsTemplate: !!js/function &BinaryLengthArgsTemplate > + () => '' + BinaryToStringTemplate: !!js/function &BinaryToStringTemplate > + (arg) => `format!("{}", ${arg})` + BinaryToStringArgsTemplate: !!js/function &BinaryToStringArgsTemplate > + () => '' + BinarySubtypeTemplate: !!js/function &BinarySubtypeTemplate > + (arg) => `${arg}.subtype` + BinarySubtypeArgsTemplate: !!js/function &BinarySubtypeArgsTemplate > + () => '' + DBRefGetDBTemplate: &DBRefGetDBTemplate null + DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null + DBRefGetIdTemplate: &DBRefGetIdTemplate null + DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null + DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null + DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null + DBRefToStringTemplate: &DBRefToStringTemplate null + DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null + DoubleValueOfTemplate: &DoubleValueOfTemplate null + DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null + Int32ValueOfTemplate: &Int32ValueOfTemplate null + Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null + Int32ToStringTemplate: &Int32ToStringTemplate null + Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null + LongEqualsTemplate: !!js/function &LongEqualsTemplate > + (lhs) => `${lhs} == ` + LongEqualsArgsTemplate: !!js/function &LongEqualsArgsTemplate > + (_, rhs) => rhs + LongToStringTemplate: !!js/function &LongToStringTemplate > + (arg) => arg + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToIntTemplate: !!js/function &LongToIntTemplate > + (arg) => `${arg} as i32` + LongToIntArgsTemplate: !!js/function &LongToIntArgsTemplate > + () => '' + LongValueOfTemplate: &LongValueOfTemplate null + LongValueOfArgsTemplate: &LongValueOfArgsTemplate null + LongToNumberTemplate: !!js/function &LongToNumberTemplate > + (arg) => `${arg} as f64` + LongToNumberArgsTemplate: !!js/function &LongToNumberArgsTemplate > + () => '' + LongAddTemplate: !!js/function &LongAddTemplate > + (lhs) => `${lhs} + ` + LongAddArgsTemplate: !!js/function &LongAddArgsTemplate > + (_, rhs) => rhs + LongSubtractTemplate: !!js/function &LongSubtractTemplate > + (lhs) => `${lhs} - ` + LongSubtractArgsTemplate: !!js/function &LongSubtractArgsTemplate > + (_, rhs) => rhs + LongMultiplyTemplate: !!js/function &LongMultiplyTemplate > + (lhs) => `${lhs} * ` + LongMultiplyArgsTemplate: !!js/function &LongMultiplyArgsTemplate > + (_, rhs) => rhs + LongDivTemplate: !!js/function &LongDivTemplate > + (lhs) => `${lhs} / ` + LongDivArgsTemplate: !!js/function &LongDivArgsTemplate > + (_, rhs) => rhs + LongModuloTemplate: !!js/function &LongModuloTemplate > + (lhs) => `${lhs} % ` + LongModuloArgsTemplate: !!js/function &LongModuloArgsTemplate > + (_, rhs) => rhs + LongAndTemplate: !!js/function &LongAndTemplate > + (lhs) => `${lhs} & ` + LongAndArgsTemplate: !!js/function &LongAndArgsTemplate > + (_, rhs) => rhs + LongOrTemplate: !!js/function &LongOrTemplate > + (lhs) => `${lhs} | ` + LongOrArgsTemplate: !!js/function &LongOrArgsTemplate > + (_, rhs) => rhs + LongXorTemplate: !!js/function &LongXorTemplate > + (lhs) => `${lhs} ^ ` + LongXorArgsTemplate: !!js/function &LongXorArgsTemplate > + (_, rhs) => rhs + LongShiftLeftTemplate: !!js/function &LongShiftLeftTemplate > + (lhs) => `${lhs} << ` + LongShiftLeftArgsTemplate: !!js/function &LongShiftLeftArgsTemplate > + (_, rhs) => rhs + LongShiftRightTemplate: !!js/function &LongShiftRightTemplate > + (lhs) => `${lhs} >> ` + LongShiftRightArgsTemplate: !!js/function &LongShiftRightArgsTemplate > + (_, rhs) => rhs + LongCompareTemplate: !!js/function &LongCompareTemplate > + (lhs) => `${lhs} - ` + LongCompareArgsTemplate: !!js/function &LongCompareArgsTemplate > + (_, rhs) => rhs + LongIsOddTemplate: !!js/function &LongIsOddTemplate > + (arg) => `${arg} % 2 == 1` + LongIsOddArgsTemplate: !!js/function &LongIsOddArgsTemplate > + () => '' + LongIsZeroTemplate: !!js/function &LongIsZeroTemplate > + (arg) => `${arg} == 0` + LongIsZeroArgsTemplate: !!js/function &LongIsZeroArgsTemplate > + () => '' + LongIsNegativeTemplate: !!js/function &LongIsNegativeTemplate > + (arg) => `${arg} < 0` + LongIsNegativeArgsTemplate: !!js/function &LongIsNegativeArgsTemplate > + () => '' + LongNegateTemplate: !!js/function &LongNegateTemplate > + () => '-' + LongNegateArgsTemplate: !!js/function &LongNegateArgsTemplate > + (arg) => arg + LongNotTemplate: !!js/function &LongNotTemplate > + () => '~' + LongNotArgsTemplate: !!js/function &LongNotArgsTemplate > + (arg) => arg + LongNotEqualsTemplate: !!js/function &LongNotEqualsTemplate > + (lhs) => `${lhs} != ` + LongNotEqualsArgsTemplate: !!js/function &LongNotEqualsArgsTemplate > + (_, rhs) => rhs + LongGreaterThanTemplate: !!js/function &LongGreaterThanTemplate > + (lhs) => `${lhs} > ` + LongGreaterThanArgsTemplate: !!js/function &LongGreaterThanArgsTemplate > + (_, rhs) => rhs + LongGreaterThanOrEqualTemplate: + !!js/function &LongGreaterThanOrEqualTemplate > + (lhs) => `${lhs} >= ` + LongGreaterThanOrEqualArgsTemplate: + !!js/function &LongGreaterThanOrEqualArgsTemplate > + (_, rhs) => rhs + LongLessThanTemplate: !!js/function &LongLessThanTemplate > + (lhs) => `${lhs} < ` + LongLessThanArgsTemplate: !!js/function &LongLessThanArgsTemplate > + (_, rhs) => rhs + LongLessThanOrEqualTemplate: !!js/function &LongLessThanOrEqualTemplate > + (lhs) => `${lhs} <= ` + LongLessThanOrEqualArgsTemplate: + !!js/function &LongLessThanOrEqualArgsTemplate > + (_, rhs) => rhs + LongFloatApproxTemplate: !!js/function &LongFloatApproxTemplate > + (arg) => `${arg} as f32` + LongTopTemplate: !!js/function &LongTopTemplate > + (arg) => `${arg} >> 32` + LongBottomTemplate: !!js/function &LongBottomTemplate > + (arg) => `${arg} & 0x0000ffff` + TimestampToStringTemplate: !!js/function &TimestampToStringTemplate > + (arg) => `${arg}.to_string()` + TimestampToStringArgsTemplate: !!js/function &TimestampToStringArgsTemplate > + () => '' + TimestampEqualsTemplate: !!js/function &TimestampEqualsTemplate > + (lhs) => `${lhs} == ` + TimestampEqualsArgsTemplate: !!js/function &TimestampEqualsArgsTemplate > + (_, rhs) => rhs + TimestampGetLowBitsTemplate: !!js/function &TimestampGetLowBitsTemplate > + (arg) => `${arg}.time` + TimestampGetLowBitsArgsTemplate: + !!js/function &TimestampGetLowBitsArgsTemplate > + () => '' + TimestampGetHighBitsTemplate: !!js/function &TimestampGetHighBitsTemplate > + (arg) => `${arg}.increment` + TimestampGetHighBitsArgsTemplate: + !!js/function &TimestampGetHighBitsArgsTemplate > + () => '' + TimestampTTemplate: !!js/function &TimestampTTemplate > + (arg) => `${arg}.time` + TimestampITemplate: !!js/function &TimestampITemplate > + (arg) => `${arg}.increment` + TimestampAsDateTemplate: !!js/function &TimestampAsDateTemplate > + (arg) => `DateTime::from_millis(${arg}.time)` + TimestampAsDateArgsTemplate: !!js/function &TimestampAsDateArgsTemplate > + () => '' + TimestampCompareTemplate: !!js/function &TimestampCompareTemplate > + (arg) => `${arg}.cmp` + TimestampCompareArgsTemplate: !!js/function &TimestampCompareArgsTemplate > + (_, rhs) => `(${rhs})` + TimestampNotEqualsTemplate: !!js/function &TimestampNotEqualsTemplate > + (lhs) => `${lhs} != ` + TimestampNotEqualsArgsTemplate: + !!js/function &TimestampNotEqualsArgsTemplate > + (_, rhs) => rhs + TimestampGreaterThanTemplate: !!js/function &TimestampGreaterThanTemplate > + (lhs) => `${lhs} > ` + TimestampGreaterThanArgsTemplate: + !!js/function &TimestampGreaterThanArgsTemplate > + (_, rhs) => rhs + TimestampGreaterThanOrEqualTemplate: + !!js/function &TimestampGreaterThanOrEqualTemplate > + (lhs) => `${lhs} >= ` + TimestampGreaterThanOrEqualArgsTemplate: + !!js/function &TimestampGreaterThanOrEqualArgsTemplate > + (_, rhs) => rhs + TimestampLessThanTemplate: !!js/function &TimestampLessThanTemplate > + (lhs) => `${lhs} < ` + TimestampLessThanArgsTemplate: !!js/function &TimestampLessThanArgsTemplate > + (_, rhs) => rhs + TimestampLessThanOrEqualTemplate: + !!js/function &TimestampLessThanOrEqualTemplate > + (lhs) => `${lhs} <= ` + TimestampLessThanOrEqualArgsTemplate: + !!js/function &TimestampLessThanOrEqualArgsTemplate > + (_, rhs) => rhs + SymbolValueOfTemplate: !!js/function &SymbolValueOfTemplate > + (arg) => `${arg}.as_symbol().unwrap()` + SymbolValueOfArgsTemplate: !!js/function &SymbolValueOfArgsTemplate > + () => '' + SymbolInspectTemplate: !!js/function &SymbolInspectTemplate > + (arg) => `format!("{:?}", ${arg})` + SymbolInspectArgsTemplate: !!js/function &SymbolInspectArgsTemplate > + () => '' + SymbolToStringTemplate: !!js/function &SymbolToStringTemplate > + (arg) => `${arg}.as_symbol().unwrap()` + SymbolToStringArgsTemplate: !!js/function &SymbolToStringArgsTemplate > + () => '' + Decimal128ToStringTemplate: &Decimal128ToStringTemplate null + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # non bson-specific + DateSymbolNowTemplate: !!js/function &DateSymbolNowTemplate > + () => 'DateTime::now()' + DateSymbolNowArgsTemplate: !!js/function &DateSymbolNowArgsTemplate > + () => '' - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate !!js/function > - () => 'i64::MAX' - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate !!js/function > - () => '' - LongSymbolMinTemplate: &LongSymbolMinTemplate !!js/function > - () => 'i64::MIN' - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate !!js/function > - () => '' - LongSymbolZeroTemplate: &LongSymbolZeroTemplate !!js/function > - () => '0i64' - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate !!js/function > - () => '' - LongSymbolOneTemplate: &LongSymbolOneTemplate !!js/function > - () => '1i64' - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate !!js/function > - () => '' - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate !!js/function > - () => '-1i64' - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate !!js/function > - () => '' - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > - () => '' - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate !!js/function > - (_, arg) => `${arg}i64` - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function > - () => '' - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate !!js/function > - (_, arg) => `${arg}i64` - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate !!js/function > - () => '' - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate !!js/function > - (_, arg) => `${arg} as i64` - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function > - () => '' - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function > - (_, arg, radix) => { - if (radix) { - return `i64::from_str_radix(${arg}, ${radix})?`; - } - return `${arg}.parse::()?`; + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: !!js/function &LongSymbolMaxTemplate > + () => 'i64::MAX' + LongSymbolMaxArgsTemplate: !!js/function &LongSymbolMaxArgsTemplate > + () => '' + LongSymbolMinTemplate: !!js/function &LongSymbolMinTemplate > + () => 'i64::MIN' + LongSymbolMinArgsTemplate: !!js/function &LongSymbolMinArgsTemplate > + () => '' + LongSymbolZeroTemplate: !!js/function &LongSymbolZeroTemplate > + () => '0i64' + LongSymbolZeroArgsTemplate: !!js/function &LongSymbolZeroArgsTemplate > + () => '' + LongSymbolOneTemplate: !!js/function &LongSymbolOneTemplate > + () => '1i64' + LongSymbolOneArgsTemplate: !!js/function &LongSymbolOneArgsTemplate > + () => '' + LongSymbolNegOneTemplate: !!js/function &LongSymbolNegOneTemplate > + () => '-1i64' + LongSymbolNegOneArgsTemplate: !!js/function &LongSymbolNegOneArgsTemplate > + () => '' + LongSymbolFromBitsTemplate: !!js/function &LongSymbolFromBitsTemplate > + () => '' + LongSymbolFromBitsArgsTemplate: + !!js/function &LongSymbolFromBitsArgsTemplate > + (_, arg) => `${arg}i64` + LongSymbolFromIntTemplate: !!js/function &LongSymbolFromIntTemplate > + () => '' + LongSymbolFromIntArgsTemplate: !!js/function &LongSymbolFromIntArgsTemplate > + (_, arg) => `${arg}i64` + LongSymbolFromNumberTemplate: !!js/function &LongSymbolFromNumberTemplate > + () => '' + LongSymbolFromNumberArgsTemplate: + !!js/function &LongSymbolFromNumberArgsTemplate > + (_, arg) => `${arg} as i64` + LongSymbolFromStringTemplate: !!js/function &LongSymbolFromStringTemplate > + () => '' + LongSymbolFromStringArgsTemplate: + !!js/function &LongSymbolFromStringArgsTemplate > + (_, arg, radix) => { + if (radix) { + return `i64::from_str_radix(${arg}, ${radix})?`; } - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate !!js/function > - (lhs) => lhs - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate !!js/function > - (lhs, arg) => { - // Double quote stringify - let newArg = arg; - if ( - (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') || - (arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"')) { - newArg = arg.substr(1, arg.length - 2); - } - newArg = `"${newArg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; - return `::parse_str(${newArg})?`; + return `${arg}.parse::()?`; + } + Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null + Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null + ObjectIdCreateFromHexStringTemplate: + !!js/function &ObjectIdCreateFromHexStringTemplate > + (lhs) => lhs + ObjectIdCreateFromHexStringArgsTemplate: + !!js/function &ObjectIdCreateFromHexStringArgsTemplate > + (lhs, arg) => { + // Double quote stringify + let newArg = arg; + if ( + (arg.charAt(0) === '\'' && arg.charAt(arg.length - 1) === '\'') || + (arg.charAt(0) === '"' && arg.charAt(arg.length - 1) === '"')) { + newArg = arg.substr(1, arg.length - 2); } - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate null - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null - # non bson-specific would go here, but there aren't any atm. + newArg = `"${newArg.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`; + return `::parse_str(${newArg})?`; + } + ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate null + ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null + # non bson-specific would go here, but there aren't any atm. - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate !!js/function > - (args) => { - let merged = new Set(Object.values(args)); - return [...merged].sort().join('\n'); - } - DriverImportTemplate: &DriverImportTemplate !!js/function > - () => 'use mongodb::Client;' - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate !!js/function > - () => 'use mongodb::bson::Regex;' - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate !!js/function > - () => 'use mongodb::bson::doc;' - # Null - 11ImportTemplate: &11ImportTemplate !!js/function > - () => 'use mongodb::bson::Bson;' - # Undefined - 12ImportTemplate: &12ImportTemplate !!js/function > - () => 'use mongodb::bson::Bson;' - # Code - 100ImportTemplate: &100ImportTemplate !!js/function > - () => 'use mongodb::bson::Bson;' - 101ImportTemplate: &101ImportTemplate !!js/function > - () => 'use mongodb::bson::oid::ObjectId;' - 102ImportTemplate: &102ImportTemplate !!js/function > - () => 'use mongodb::bson::Binary;' - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - # MinKey - 107ImportTemplate: &107ImportTemplate !!js/function > - () => 'use mongodb::bson::Bson;' - # MaxKey - 108ImportTemplate: &108ImportTemplate !!js/function > - () => 'use mongodb::bson::Bson;' - 109ImportTemplate: &109ImportTemplate !!js/function > - () => 'use mongodb::bson::Regex;' - 110ImportTemplate: &110ImportTemplate !!js/function > - () => 'use mongodb::bson::Timestamp;' - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate null - 113ImportTemplate: &113ImportTemplate !!js/function > - () => 'use mongodb::bson::JavaScriptCodeWithScope;' - 114ImportTemplate: &114ImportTemplate !!js/function > - () => 'use mongodb::bson::spec::BinarySubtype;' - 200ImportTemplate: &200ImportTemplate !!js/function > - () => 'use mongodb::bson::DateTime;' - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: !!js/function &ImportTemplate > + (args) => { + let merged = new Set(Object.values(args)); + return [...merged].sort().join('\n'); + } + DriverImportTemplate: !!js/function &DriverImportTemplate > + () => 'use mongodb::Client;' + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: !!js/function &8ImportTemplate > + () => 'use mongodb::bson::Regex;' + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: !!js/function &10ImportTemplate > + () => 'use mongodb::bson::doc;' + # Null + 11ImportTemplate: !!js/function &11ImportTemplate > + () => 'use mongodb::bson::Bson;' + # Undefined + 12ImportTemplate: !!js/function &12ImportTemplate > + () => 'use mongodb::bson::Bson;' + # Code + 100ImportTemplate: !!js/function &100ImportTemplate > + () => 'use mongodb::bson::Bson;' + 101ImportTemplate: !!js/function &101ImportTemplate > + () => 'use mongodb::bson::oid::ObjectId;' + 102ImportTemplate: !!js/function &102ImportTemplate > + () => 'use mongodb::bson::Binary;' + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + # MinKey + 107ImportTemplate: !!js/function &107ImportTemplate > + () => 'use mongodb::bson::Bson;' + # MaxKey + 108ImportTemplate: !!js/function &108ImportTemplate > + () => 'use mongodb::bson::Bson;' + 109ImportTemplate: !!js/function &109ImportTemplate > + () => 'use mongodb::bson::Regex;' + 110ImportTemplate: !!js/function &110ImportTemplate > + () => 'use mongodb::bson::Timestamp;' + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: &112ImportTemplate null + 113ImportTemplate: !!js/function &113ImportTemplate > + () => 'use mongodb::bson::JavaScriptCodeWithScope;' + 114ImportTemplate: !!js/function &114ImportTemplate > + () => 'use mongodb::bson::spec::BinarySubtype;' + 200ImportTemplate: !!js/function &200ImportTemplate > + () => 'use mongodb::bson::DateTime;' + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/symbols/sample_template.yaml b/packages/bson-transpilers/symbols/sample_template.yaml index e5cfa1ca2ce..45d3d0d3eea 100644 --- a/packages/bson-transpilers/symbols/sample_template.yaml +++ b/packages/bson-transpilers/symbols/sample_template.yaml @@ -18,358 +18,358 @@ # # ############################################# Templates: - ######## - # Misc # - ######## + ######## + # Misc # + ######## - # Filter out regex flags that have translations or are unsupported. - RegexFlags: &RegexFlags - i: 'i' - m: 'm' - u: 'u' - y: 'y' - g: 'g' - BSONRegexFlags: &BSONRegexFlags - i: 'i' - m: 'm' - x: 'x' - s: 's' - l: 'l' - u: 'u' + # Filter out regex flags that have translations or are unsupported. + RegexFlags: &RegexFlags + i: 'i' + m: 'm' + u: 'u' + y: 'y' + g: 'g' + BSONRegexFlags: &BSONRegexFlags + i: 'i' + m: 'm' + x: 'x' + s: 's' + l: 'l' + u: 'u' - ############################################# - # Syntax # - # # - # Templates for language syntax expressions # - # # - ############################################# + ############################################# + # Syntax # + # # + # Templates for language syntax expressions # + # # + ############################################# - DriverTemplate: &DriverTemplate null - EqualitySyntaxTemplate: &EqualitySyntaxTemplate null # Args: lhs, operation, rhs - InSyntaxTemplate: &InSyntaxTemplate null # Args: lhs, operation, rhs - AndSyntaxTemplate: &AndSyntaxTemplate null # Args: items to compare as an array - OrSyntaxTemplate: &OrSyntaxTemplate null # Args: items to compare as an array - NotSyntaxTemplate: &NotSyntaxTemplate null # Args: item to negate - UnarySyntaxTemplate: &UnarySyntaxTemplate null - BinarySyntaxTemplate: &BinarySyntaxTemplate null - ParensSyntaxTemplate: &ParensSyntaxTemplate null - EosTemplate: &EosSyntaxTemplate null # No args. End-of-line - EofTemplate: &EofSyntaxTemplate null # No args. End-of-file - FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs - PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs - NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] + DriverTemplate: &DriverTemplate null + EqualitySyntaxTemplate: &EqualitySyntaxTemplate null # Args: lhs, operation, rhs + InSyntaxTemplate: &InSyntaxTemplate null # Args: lhs, operation, rhs + AndSyntaxTemplate: &AndSyntaxTemplate null # Args: items to compare as an array + OrSyntaxTemplate: &OrSyntaxTemplate null # Args: items to compare as an array + NotSyntaxTemplate: &NotSyntaxTemplate null # Args: item to negate + UnarySyntaxTemplate: &UnarySyntaxTemplate null + BinarySyntaxTemplate: &BinarySyntaxTemplate null + ParensSyntaxTemplate: &ParensSyntaxTemplate null + EosTemplate: &EosSyntaxTemplate null # No args. End-of-line + EofTemplate: &EofSyntaxTemplate null # No args. End-of-file + FloorDivTemplate: &FloorDivSyntaxTemplate null # Args: lhs, rhs + PowerTemplate: &PowerSyntaxTemplate null # Args: lhs, rhs + NewTemplate: &NewSyntaxTemplate null # Args: expression, skip?, code# [to check if meant to be skipped] - ############################################# - # Literal Types # - # # - # Templates for literal type instance. Most # - # get passed the literal itself as an arg. # - # # - ############################################# - StringTypeTemplate: &StringTypeTemplate null # Args: literal (can be w/w/out quotes and unescaped interior quotes.) - RegexTypeTemplate: &RegexTypeTemplate null # Args: pattern, flag - BoolTypeTemplate: &BoolTypeTemplate null # Args: literal - IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) - DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType - LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType - HexTypeTemplate: &HexTypeTemplate null # args: literal, argType - OctalTypeTemplate: &OctalTypeTemplate null # args: literal, argType - NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType - ArrayTypeTemplate: &ArrayTypeTemplate null # Args: the interior of the array (i.e. '1, 2'), nestedness# - ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) - NullTypeTemplate: &NullTypeTemplate null # No args - UndefinedTypeTemplate: &UndefinedTypeTemplate null # No args: - ObjectTypeTemplate: &ObjectTypeTemplate null # Args: literal (for empty array, is empty string. Otherwise all set) - ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate null # Args: single object element [2] (i.e. array with [key, value]), nestedness# + ############################################# + # Literal Types # + # # + # Templates for literal type instance. Most # + # get passed the literal itself as an arg. # + # # + ############################################# + StringTypeTemplate: &StringTypeTemplate null # Args: literal (can be w/w/out quotes and unescaped interior quotes.) + RegexTypeTemplate: &RegexTypeTemplate null # Args: pattern, flag + BoolTypeTemplate: &BoolTypeTemplate null # Args: literal + IntegerTypeTemplate: &IntegerTypeTemplate null # args: literal, argType (i.e. '_string', '_decimal' etc) + DecimalTypeTemplate: &DecimalTypeTemplate null # args: literal, argType + LongBasicTypeTemplate: &LongBasicTypeTemplate null # args: literal, argType + HexTypeTemplate: &HexTypeTemplate null # args: literal, argType + OctalTypeTemplate: &OctalTypeTemplate null # args: literal, argType + NumericTypeTemplate: &NumericTypeTemplate null # args: literal, argType + ArrayTypeTemplate: &ArrayTypeTemplate null # Args: the interior of the array (i.e. '1, 2'), nestedness# + ArrayTypeArgsTemplate: &ArrayTypeArgsTemplate null # Args: single array element, nestedness, lastElement? (note: not being used atm) + NullTypeTemplate: &NullTypeTemplate null # No args + UndefinedTypeTemplate: &UndefinedTypeTemplate null # No args: + ObjectTypeTemplate: &ObjectTypeTemplate null # Args: literal (for empty array, is empty string. Otherwise all set) + ObjectTypeArgsTemplate: &ObjectTypeArgsTemplate null # Args: single object element [2] (i.e. array with [key, value]), nestedness# - ############################################# - # Symbols # - # # - # Templates for symbols, can be either # - # functions or variables. # - # # - # The *SymbolTemplates return names and # - # usually don't take any arguments. The # - # *SymbolArgsTemplates are invoked for func # - # calls. The first argument is always the # - # lhs, i.e. the symbol returned from the # - # corresponding SymbolTemplate. The rest of # - # the arguments are the processed arguments # - # passed to the original function. # - # # - ############################################# - CodeSymbolTemplate: &CodeSymbolTemplate null # No args - CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate null # Args: code, scope - ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null # No args - ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate null # Args: lhs, string (can be empty or null for no arg) - BinarySymbolTemplate: &BinarySymbolTemplate null - BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null - BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null - BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null - BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null - BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null - BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null - BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null - BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null - DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args - DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db - DoubleSymbolTemplate: &DoubleSymbolTemplate null # No args - DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null # Args: lhs, arg, argType (i.e. '_string', '_double') - Int32SymbolTemplate: &Int32SymbolTemplate null # No args - Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate null # Args: lhs, arg, argType - LongSymbolTemplate: &LongSymbolTemplate null # No args - LongSymbolArgsTemplate: &LongSymbolArgsTemplate null # Args: lhs, arg, argType - RegExpSymbolTemplate: &RegExpSymbolTemplate null # No args - RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - SymbolSymbolTemplate: &SymbolSymbolTemplate null # No args - SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null # Args: lhs, arg - BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate null # No args - BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate null # Args: lhs, pattern, flags - Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args - Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg - MinKeySymbolTemplate: &MinKeySymbolTemplate null # No args - MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null # No args - MaxKeySymbolTemplate: &MaxKeySymbolTemplate null # No args - MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null # No args - TimestampSymbolTemplate: &TimestampSymbolTemplate null # No args - TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate null # Args: lhs, low, high - # non bson-specific - NumberSymbolTemplate: &NumberSymbolTemplate null # No args - NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate null # Args: lhs, arg, argType - DateSymbolTemplate: &DateSymbolTemplate null # No args - DateSymbolArgsTemplate: &DateSymbolArgsTemplate null # Args: lhs, date (Date object), isString? (if the result needs to be a date string instead of a date instance) + ############################################# + # Symbols # + # # + # Templates for symbols, can be either # + # functions or variables. # + # # + # The *SymbolTemplates return names and # + # usually don't take any arguments. The # + # *SymbolArgsTemplates are invoked for func # + # calls. The first argument is always the # + # lhs, i.e. the symbol returned from the # + # corresponding SymbolTemplate. The rest of # + # the arguments are the processed arguments # + # passed to the original function. # + # # + ############################################# + CodeSymbolTemplate: &CodeSymbolTemplate null # No args + CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate null # Args: code, scope + ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate null # No args + ObjectIdSymbolArgsTemplate: &ObjectIdSymbolArgsTemplate null # Args: lhs, string (can be empty or null for no arg) + BinarySymbolTemplate: &BinarySymbolTemplate null + BinarySymbolArgsTemplate: &BinarySymbolArgsTemplate null + BinarySymbolSubtypeDefaultTemplate: &BinarySymbolSubtypeDefaultTemplate null + BinarySymbolSubtypeFunctionTemplate: &BinarySymbolSubtypeFunctionTemplate null + BinarySymbolSubtypeByteArrayTemplate: &BinarySymbolSubtypeByteArrayTemplate null + BinarySymbolSubtypeUuidOldTemplate: &BinarySymbolSubtypeUuidOldTemplate null + BinarySymbolSubtypeUuidTemplate: &BinarySymbolSubtypeUuidTemplate null + BinarySymbolSubtypeMd5Template: &BinarySymbolSubtypeMd5Template null + BinarySymbolSubtypeUserDefinedTemplate: &BinarySymbolSubtypeUserDefinedTemplate null + DBRefSymbolTemplate: &DBRefSymbolTemplate null # No args + DBRefSymbolArgsTemplate: &DBRefSymbolArgsTemplate null # Args: lhs, coll, id, db + DoubleSymbolTemplate: &DoubleSymbolTemplate null # No args + DoubleSymbolArgsTemplate: &DoubleSymbolArgsTemplate null # Args: lhs, arg, argType (i.e. '_string', '_double') + Int32SymbolTemplate: &Int32SymbolTemplate null # No args + Int32SymbolArgsTemplate: &Int32SymbolArgsTemplate null # Args: lhs, arg, argType + LongSymbolTemplate: &LongSymbolTemplate null # No args + LongSymbolArgsTemplate: &LongSymbolArgsTemplate null # Args: lhs, arg, argType + RegExpSymbolTemplate: &RegExpSymbolTemplate null # No args + RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + SymbolSymbolTemplate: &SymbolSymbolTemplate null # No args + SymbolSymbolArgsTemplate: &SymbolSymbolArgsTemplate null # Args: lhs, arg + BSONRegExpSymbolTemplate: &BSONRegExpSymbolTemplate null # No args + BSONRegExpSymbolArgsTemplate: &BSONRegExpSymbolArgsTemplate null # Args: lhs, pattern, flags + Decimal128SymbolTemplate: &Decimal128SymbolTemplate null # No args + Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null # Args: lhs, arg + MinKeySymbolTemplate: &MinKeySymbolTemplate null # No args + MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null # No args + MaxKeySymbolTemplate: &MaxKeySymbolTemplate null # No args + MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null # No args + TimestampSymbolTemplate: &TimestampSymbolTemplate null # No args + TimestampSymbolArgsTemplate: &TimestampSymbolArgsTemplate null # Args: lhs, low, high + # non bson-specific + NumberSymbolTemplate: &NumberSymbolTemplate null # No args + NumberSymbolArgsTemplate: &NumberSymbolArgsTemplate null # Args: lhs, arg, argType + DateSymbolTemplate: &DateSymbolTemplate null # No args + DateSymbolArgsTemplate: &DateSymbolArgsTemplate null # Args: lhs, date (Date object), isString? (if the result needs to be a date string instead of a date instance) - ############################################# - # Object Attributes/Methods # - # # - # These're variables or functions called on # - # instantiated objects. For example, # - # ObjectId().isValid() or Timestamp().t # - # # - # They follow the same pattern with the - # *Template/*ArgsTemplates: usually no args # - # to the Template and lhs plus any original # - # arguments to the ArgsTemplate. # - # # - ############################################# - CodeCodeTemplate: &CodeCodeTemplate null - CodeCodeArgsTemplate: &CodeCodeArgsTemplate null - CodeScopeTemplate: &CodeScopeTemplate null - CodeScopeArgsTemplate: &CodeScopeArgsTemplate null - ObjectIdToStringTemplate: &ObjectIdToStringTemplate null - ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate null - ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null - ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null - ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate null - ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate null - ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate null - ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null - BinaryValueTemplate: &BinaryValueTemplate null - BinaryValueArgsTemplate: &BinaryValueArgsTemplate null - BinaryLengthTemplate: &BinaryLengthTemplate null - BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null - BinaryToStringTemplate: &BinaryToStringTemplate null - BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null - BinarySubtypeTemplate: &BinarySubtypeTemplate null - BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null - DBRefGetDBTemplate: &DBRefGetDBTemplate null - DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null - DBRefGetIdTemplate: &DBRefGetIdTemplate null - DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null - DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null - DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null - DBRefToStringTemplate: &DBRefToStringTemplate null - DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null - DoubleValueOfTemplate: &DoubleValueOfTemplate null - DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null - Int32ValueOfTemplate: &Int32ValueOfTemplate null - Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null - Int32ToStringTemplate: &Int32ToStringTemplate null - Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null - LongEqualsTemplate: &LongEqualsTemplate null - LongEqualsArgsTemplate: &LongEqualsArgsTemplate null - LongToStringTemplate: &LongToStringTemplate null - LongToStringArgsTemplate: &LongToStringArgsTemplate null - LongToIntTemplate: &LongToIntTemplate null - LongToIntArgsTemplate: &LongToIntArgsTemplate null - LongValueOfTemplate: &LongValueOfTemplate null - LongValueOfArgsTemplate: &LongValueOfArgsTemplate null - LongToNumberTemplate: &LongToNumberTemplate null - LongToNumberArgsTemplate: &LongToNumberArgsTemplate null - LongAddTemplate: &LongAddTemplate null - LongAddArgsTemplate: &LongAddArgsTemplate null - LongSubtractTemplate: &LongSubtractTemplate null - LongSubtractArgsTemplate: &LongSubtractArgsTemplate null - LongMultiplyTemplate: &LongMultiplyTemplate null - LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null - LongDivTemplate: &LongDivTemplate null - LongDivArgsTemplate: &LongDivArgsTemplate null - LongModuloTemplate: &LongModuloTemplate null - LongModuloArgsTemplate: &LongModuloArgsTemplate null - LongAndTemplate: &LongAndTemplate null - LongAndArgsTemplate: &LongAndArgsTemplate null - LongOrTemplate: &LongOrTemplate null - LongOrArgsTemplate: &LongOrArgsTemplate null - LongXorTemplate: &LongXorTemplate null - LongXorArgsTemplate: &LongXorArgsTemplate null - LongShiftLeftTemplate: &LongShiftLeftTemplate null - LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null - LongShiftRightTemplate: &LongShiftRightTemplate null - LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null - LongCompareTemplate: &LongCompareTemplate null - LongCompareArgsTemplate: &LongCompareArgsTemplate null - LongIsOddTemplate: &LongIsOddTemplate null - LongIsOddArgsTemplate: &LongIsOddArgsTemplate null - LongIsZeroTemplate: &LongIsZeroTemplate null - LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null - LongIsNegativeTemplate: &LongIsNegativeTemplate null - LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null - LongNegateTemplate: &LongNegateTemplate null - LongNegateArgsTemplate: &LongNegateArgsTemplate null - LongNotTemplate: &LongNotTemplate null - LongNotArgsTemplate: &LongNotArgsTemplate null - LongNotEqualsTemplate: &LongNotEqualsTemplate null - LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null - LongGreaterThanTemplate: &LongGreaterThanTemplate null - LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null - LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null - LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null - LongLessThanTemplate: &LongLessThanTemplate null - LongLessThanArgsTemplate: &LongLessThanArgsTemplate null - LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null - LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null - LongFloatApproxTemplate: &LongFloatApproxTemplate null - LongTopTemplate: &LongTopTemplate null - LongBottomTemplate: &LongBottomTemplate null - TimestampToStringTemplate: &TimestampToStringTemplate null - TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null - TimestampEqualsTemplate: &TimestampEqualsTemplate null - TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null - TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate null - TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null - TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate null - TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null - TimestampTTemplate: &TimestampTTemplate null - TimestampITemplate: &TimestampITemplate null - TimestampAsDateTemplate: &TimestampAsDateTemplate null - TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null - TimestampCompareTemplate: &TimestampCompareTemplate null - TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null - TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null - TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null - TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null - TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null - TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null - TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null - TimestampLessThanTemplate: &TimestampLessThanTemplate null - TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null - TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null - TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null - SymbolValueOfTemplate: &SymbolValueOfTemplate null - SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null - SymbolInspectTemplate: &SymbolInspectTemplate null - SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null - SymbolToStringTemplate: &SymbolToStringTemplate null - SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null - Decimal128ToStringTemplate: &Decimal128ToStringTemplate null - Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null - # non bson-specific - DateSymbolNowTemplate: &DateSymbolNowTemplate null - DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null + ############################################# + # Object Attributes/Methods # + # # + # These're variables or functions called on # + # instantiated objects. For example, # + # ObjectId().isValid() or Timestamp().t # + # # + # They follow the same pattern with the + # *Template/*ArgsTemplates: usually no args # + # to the Template and lhs plus any original # + # arguments to the ArgsTemplate. # + # # + ############################################# + CodeCodeTemplate: &CodeCodeTemplate null + CodeCodeArgsTemplate: &CodeCodeArgsTemplate null + CodeScopeTemplate: &CodeScopeTemplate null + CodeScopeArgsTemplate: &CodeScopeArgsTemplate null + ObjectIdToStringTemplate: &ObjectIdToStringTemplate null + ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate null + ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate null + ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate null + ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate null + ObjectIdGetTimestampArgsTemplate: &ObjectIdGetTimestampArgsTemplate null + ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate null + ObjectIdIsValidArgsTemplate: &ObjectIdIsValidArgsTemplate null + BinaryValueTemplate: &BinaryValueTemplate null + BinaryValueArgsTemplate: &BinaryValueArgsTemplate null + BinaryLengthTemplate: &BinaryLengthTemplate null + BinaryLengthArgsTemplate: &BinaryLengthArgsTemplate null + BinaryToStringTemplate: &BinaryToStringTemplate null + BinaryToStringArgsTemplate: &BinaryToStringArgsTemplate null + BinarySubtypeTemplate: &BinarySubtypeTemplate null + BinarySubtypeArgsTemplate: &BinarySubtypeArgsTemplate null + DBRefGetDBTemplate: &DBRefGetDBTemplate null + DBRefGetCollectionTemplate: &DBRefGetCollectionTemplate null + DBRefGetIdTemplate: &DBRefGetIdTemplate null + DBRefGetDBArgsTemplate: &DBRefGetDBArgsTemplate null + DBRefGetCollectionArgsTemplate: &DBRefGetCollectionArgsTemplate null + DBRefGetIdArgsTemplate: &DBRefGetIdArgsTemplate null + DBRefToStringTemplate: &DBRefToStringTemplate null + DBRefToStringArgsTemplate: &DBRefToStringArgsTemplate null + DoubleValueOfTemplate: &DoubleValueOfTemplate null + DoubleValueOfArgsTemplate: &DoubleValueOfArgsTemplate null + Int32ValueOfTemplate: &Int32ValueOfTemplate null + Int32ValueOfArgsTemplate: &Int32ValueOfArgsTemplate null + Int32ToStringTemplate: &Int32ToStringTemplate null + Int32ToStringArgsTemplate: &Int32ToStringArgsTemplate null + LongEqualsTemplate: &LongEqualsTemplate null + LongEqualsArgsTemplate: &LongEqualsArgsTemplate null + LongToStringTemplate: &LongToStringTemplate null + LongToStringArgsTemplate: &LongToStringArgsTemplate null + LongToIntTemplate: &LongToIntTemplate null + LongToIntArgsTemplate: &LongToIntArgsTemplate null + LongValueOfTemplate: &LongValueOfTemplate null + LongValueOfArgsTemplate: &LongValueOfArgsTemplate null + LongToNumberTemplate: &LongToNumberTemplate null + LongToNumberArgsTemplate: &LongToNumberArgsTemplate null + LongAddTemplate: &LongAddTemplate null + LongAddArgsTemplate: &LongAddArgsTemplate null + LongSubtractTemplate: &LongSubtractTemplate null + LongSubtractArgsTemplate: &LongSubtractArgsTemplate null + LongMultiplyTemplate: &LongMultiplyTemplate null + LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate null + LongDivTemplate: &LongDivTemplate null + LongDivArgsTemplate: &LongDivArgsTemplate null + LongModuloTemplate: &LongModuloTemplate null + LongModuloArgsTemplate: &LongModuloArgsTemplate null + LongAndTemplate: &LongAndTemplate null + LongAndArgsTemplate: &LongAndArgsTemplate null + LongOrTemplate: &LongOrTemplate null + LongOrArgsTemplate: &LongOrArgsTemplate null + LongXorTemplate: &LongXorTemplate null + LongXorArgsTemplate: &LongXorArgsTemplate null + LongShiftLeftTemplate: &LongShiftLeftTemplate null + LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate null + LongShiftRightTemplate: &LongShiftRightTemplate null + LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate null + LongCompareTemplate: &LongCompareTemplate null + LongCompareArgsTemplate: &LongCompareArgsTemplate null + LongIsOddTemplate: &LongIsOddTemplate null + LongIsOddArgsTemplate: &LongIsOddArgsTemplate null + LongIsZeroTemplate: &LongIsZeroTemplate null + LongIsZeroArgsTemplate: &LongIsZeroArgsTemplate null + LongIsNegativeTemplate: &LongIsNegativeTemplate null + LongIsNegativeArgsTemplate: &LongIsNegativeArgsTemplate null + LongNegateTemplate: &LongNegateTemplate null + LongNegateArgsTemplate: &LongNegateArgsTemplate null + LongNotTemplate: &LongNotTemplate null + LongNotArgsTemplate: &LongNotArgsTemplate null + LongNotEqualsTemplate: &LongNotEqualsTemplate null + LongNotEqualsArgsTemplate: &LongNotEqualsArgsTemplate null + LongGreaterThanTemplate: &LongGreaterThanTemplate null + LongGreaterThanArgsTemplate: &LongGreaterThanArgsTemplate null + LongGreaterThanOrEqualTemplate: &LongGreaterThanOrEqualTemplate null + LongGreaterThanOrEqualArgsTemplate: &LongGreaterThanOrEqualArgsTemplate null + LongLessThanTemplate: &LongLessThanTemplate null + LongLessThanArgsTemplate: &LongLessThanArgsTemplate null + LongLessThanOrEqualTemplate: &LongLessThanOrEqualTemplate null + LongLessThanOrEqualArgsTemplate: &LongLessThanOrEqualArgsTemplate null + LongFloatApproxTemplate: &LongFloatApproxTemplate null + LongTopTemplate: &LongTopTemplate null + LongBottomTemplate: &LongBottomTemplate null + TimestampToStringTemplate: &TimestampToStringTemplate null + TimestampToStringArgsTemplate: &TimestampToStringArgsTemplate null + TimestampEqualsTemplate: &TimestampEqualsTemplate null + TimestampEqualsArgsTemplate: &TimestampEqualsArgsTemplate null + TimestampGetLowBitsTemplate: &TimestampGetLowBitsTemplate null + TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null + TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate null + TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate null + TimestampTTemplate: &TimestampTTemplate null + TimestampITemplate: &TimestampITemplate null + TimestampAsDateTemplate: &TimestampAsDateTemplate null + TimestampAsDateArgsTemplate: &TimestampAsDateArgsTemplate null + TimestampCompareTemplate: &TimestampCompareTemplate null + TimestampCompareArgsTemplate: &TimestampCompareArgsTemplate null + TimestampNotEqualsTemplate: &TimestampNotEqualsTemplate null + TimestampNotEqualsArgsTemplate: &TimestampNotEqualsArgsTemplate null + TimestampGreaterThanTemplate: &TimestampGreaterThanTemplate null + TimestampGreaterThanArgsTemplate: &TimestampGreaterThanArgsTemplate null + TimestampGreaterThanOrEqualTemplate: &TimestampGreaterThanOrEqualTemplate null + TimestampGreaterThanOrEqualArgsTemplate: &TimestampGreaterThanOrEqualArgsTemplate null + TimestampLessThanTemplate: &TimestampLessThanTemplate null + TimestampLessThanArgsTemplate: &TimestampLessThanArgsTemplate null + TimestampLessThanOrEqualTemplate: &TimestampLessThanOrEqualTemplate null + TimestampLessThanOrEqualArgsTemplate: &TimestampLessThanOrEqualArgsTemplate null + SymbolValueOfTemplate: &SymbolValueOfTemplate null + SymbolValueOfArgsTemplate: &SymbolValueOfArgsTemplate null + SymbolInspectTemplate: &SymbolInspectTemplate null + SymbolInspectArgsTemplate: &SymbolInspectArgsTemplate null + SymbolToStringTemplate: &SymbolToStringTemplate null + SymbolToStringArgsTemplate: &SymbolToStringArgsTemplate null + Decimal128ToStringTemplate: &Decimal128ToStringTemplate null + Decimal128ToStringArgsTemplate: &Decimal128ToStringArgsTemplate null + # non bson-specific + DateSymbolNowTemplate: &DateSymbolNowTemplate null + DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null - ############################################# - # Symbol Attributes/Methods # - # # - # These're variables or functions called on # - # symbols. Also called bson-utils. # - # # - # They are basically the same thing as # - # object attributes/methods, but need to be # - # distinguished since they are separate # - # namespaces that happen to have the same # - # name which is v confusing. # - # # - # For example, ObjectId().toString() is an # - # object method, while ObjectId.fromString # - # is a symbol attribute. These are two # - # separate ObjectId related namespaces that # - # don't overlap. # - # # - ############################################# - LongSymbolMaxTemplate: &LongSymbolMaxTemplate null - LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null - LongSymbolMinTemplate: &LongSymbolMinTemplate null - LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null - LongSymbolZeroTemplate: &LongSymbolZeroTemplate null - LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null - LongSymbolOneTemplate: &LongSymbolOneTemplate null - LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null - LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null - LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null - LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null - LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null - LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null - LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null - LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null - LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null - LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null - LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null - Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null - Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null - ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null - ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null - ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate null - ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null - # non bson-specific would go here, but there aren't any atm. + ############################################# + # Symbol Attributes/Methods # + # # + # These're variables or functions called on # + # symbols. Also called bson-utils. # + # # + # They are basically the same thing as # + # object attributes/methods, but need to be # + # distinguished since they are separate # + # namespaces that happen to have the same # + # name which is v confusing. # + # # + # For example, ObjectId().toString() is an # + # object method, while ObjectId.fromString # + # is a symbol attribute. These are two # + # separate ObjectId related namespaces that # + # don't overlap. # + # # + ############################################# + LongSymbolMaxTemplate: &LongSymbolMaxTemplate null + LongSymbolMaxArgsTemplate: &LongSymbolMaxArgsTemplate null + LongSymbolMinTemplate: &LongSymbolMinTemplate null + LongSymbolMinArgsTemplate: &LongSymbolMinArgsTemplate null + LongSymbolZeroTemplate: &LongSymbolZeroTemplate null + LongSymbolZeroArgsTemplate: &LongSymbolZeroArgsTemplate null + LongSymbolOneTemplate: &LongSymbolOneTemplate null + LongSymbolOneArgsTemplate: &LongSymbolOneArgsTemplate null + LongSymbolNegOneTemplate: &LongSymbolNegOneTemplate null + LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null + LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null + LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null + LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate null + LongSymbolFromIntArgsTemplate: &LongSymbolFromIntArgsTemplate null + LongSymbolFromNumberTemplate: &LongSymbolFromNumberTemplate null + LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null + LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate null + LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate null + Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate null + Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate null + ObjectIdCreateFromHexStringTemplate: &ObjectIdCreateFromHexStringTemplate null + ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null + ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate null + ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate null + # non bson-specific would go here, but there aren't any atm. - ############################################# - # Imports # - # # - # Each type has a 'code' that is consistent # - # between languages. The import templates # - # for each code generate the required # - # statement for each type. No args. # - # # - # The ImportTemplate collects everything # - # into one statement. # - # # - ############################################# - ImportTemplate: &ImportTemplate null - DriverImportTemplate: &DriverImportTemplate null - 0ImportTemplate: &0ImportTemplate null - 1ImportTemplate: &1ImportTemplate null - 2ImportTemplate: &2ImportTemplate null - 3ImportTemplate: &3ImportTemplate null - 4ImportTemplate: &4ImportTemplate null - 5ImportTemplate: &5ImportTemplate null - 6ImportTemplate: &6ImportTemplate null - 7ImportTemplate: &7ImportTemplate null - 8ImportTemplate: &8ImportTemplate null - 9ImportTemplate: &9ImportTemplate null - 10ImportTemplate: &10ImportTemplate null - 11ImportTemplate: &11ImportTemplate null - 12ImportTemplate: &12ImportTemplate null - 100ImportTemplate: &100ImportTemplate null - 101ImportTemplate: &101ImportTemplate null - 102ImportTemplate: &102ImportTemplate null - 103ImportTemplate: &103ImportTemplate null - 104ImportTemplate: &104ImportTemplate null - 105ImportTemplate: &105ImportTemplate null - 106ImportTemplate: &106ImportTemplate null - 107ImportTemplate: &107ImportTemplate null - 108ImportTemplate: &108ImportTemplate null - 109ImportTemplate: &109ImportTemplate null - 110ImportTemplate: &110ImportTemplate null - 111ImportTemplate: &111ImportTemplate null - 112ImportTemplate: &112ImportTemplate null - 113ImportTemplate: &113ImportTemplate null - 114ImportTemplate: &114ImportTemplate null - 200ImportTemplate: &200ImportTemplate null - 201ImportTemplate: &201ImportTemplate null - 300ImportTemplate: &300ImportTemplate null - 301ImportTemplate: &301ImportTemplate null - 302ImportTemplate: &302ImportTemplate null - 303ImportTemplate: &303ImportTemplate null - 304ImportTemplate: &304ImportTemplate null - 305ImportTemplate: &305ImportTemplate null - 306ImportTemplate: &306ImportTemplate null + ############################################# + # Imports # + # # + # Each type has a 'code' that is consistent # + # between languages. The import templates # + # for each code generate the required # + # statement for each type. No args. # + # # + # The ImportTemplate collects everything # + # into one statement. # + # # + ############################################# + ImportTemplate: &ImportTemplate null + DriverImportTemplate: &DriverImportTemplate null + 0ImportTemplate: &0ImportTemplate null + 1ImportTemplate: &1ImportTemplate null + 2ImportTemplate: &2ImportTemplate null + 3ImportTemplate: &3ImportTemplate null + 4ImportTemplate: &4ImportTemplate null + 5ImportTemplate: &5ImportTemplate null + 6ImportTemplate: &6ImportTemplate null + 7ImportTemplate: &7ImportTemplate null + 8ImportTemplate: &8ImportTemplate null + 9ImportTemplate: &9ImportTemplate null + 10ImportTemplate: &10ImportTemplate null + 11ImportTemplate: &11ImportTemplate null + 12ImportTemplate: &12ImportTemplate null + 100ImportTemplate: &100ImportTemplate null + 101ImportTemplate: &101ImportTemplate null + 102ImportTemplate: &102ImportTemplate null + 103ImportTemplate: &103ImportTemplate null + 104ImportTemplate: &104ImportTemplate null + 105ImportTemplate: &105ImportTemplate null + 106ImportTemplate: &106ImportTemplate null + 107ImportTemplate: &107ImportTemplate null + 108ImportTemplate: &108ImportTemplate null + 109ImportTemplate: &109ImportTemplate null + 110ImportTemplate: &110ImportTemplate null + 111ImportTemplate: &111ImportTemplate null + 112ImportTemplate: &112ImportTemplate null + 113ImportTemplate: &113ImportTemplate null + 114ImportTemplate: &114ImportTemplate null + 200ImportTemplate: &200ImportTemplate null + 201ImportTemplate: &201ImportTemplate null + 300ImportTemplate: &300ImportTemplate null + 301ImportTemplate: &301ImportTemplate null + 302ImportTemplate: &302ImportTemplate null + 303ImportTemplate: &303ImportTemplate null + 304ImportTemplate: &304ImportTemplate null + 305ImportTemplate: &305ImportTemplate null + 306ImportTemplate: &306ImportTemplate null diff --git a/packages/bson-transpilers/test/casting.test.js b/packages/bson-transpilers/test/casting.test.js index 95bdecd6d30..1dbc97e401c 100644 --- a/packages/bson-transpilers/test/casting.test.js +++ b/packages/bson-transpilers/test/casting.test.js @@ -10,13 +10,13 @@ const yaml = require('js-yaml'); const modes = process.env.MODE ? process.env.MODE.split(',') : []; -const JavascriptANTLRVisitor = require('../lib/antlr/ECMAScriptVisitor').ECMAScriptVisitor; +const JavascriptANTLRVisitor = + require('../lib/antlr/ECMAScriptVisitor').ECMAScriptVisitor; const getCodeGenerationVisitor = require('../codegeneration/CodeGenerationVisitor'); const getJavascriptVisitor = require('../codegeneration/javascript/Visitor'); - const getANTLRVisitor = { - shell: () => ( getJavascriptVisitor(JavascriptANTLRVisitor) ) + shell: () => getJavascriptVisitor(JavascriptANTLRVisitor), }; const readYAML = (filename) => { @@ -30,7 +30,7 @@ const readYAML = (filename) => { return parseResult; }; -describe('Casting tests', function() { +describe('Casting tests', function () { if (modes.length > 0 && modes.indexOf('casting') === -1) { return; } @@ -58,20 +58,27 @@ describe('Casting tests', function() { template: null, argsTemplate: null, id: 'TestFunc', - type: null - } + type: null, + }, }, - doc.BsonSymbols, doc.NativeSymbols); + doc.BsonSymbols, + doc.NativeSymbols + ); transpiler.Syntax = doc.Syntax; transpiler.SYMBOL_TYPE = doc.SymbolTypes; - describe(`from ${input} to ${output}`, function() { - it(test.description, function() { + describe(`from ${input} to ${output}`, function () { + it(test.description, function () { if (test.input[input].args) { - transpiler.Symbols.TestFunc.args = test.input[input].args.map((t) => { - return t.map((k) => ( k !== null ? transpiler.Types[k] : k )); - }); + transpiler.Symbols.TestFunc.args = test.input[input].args.map( + (t) => { + return t.map((k) => (k !== null ? transpiler.Types[k] : k)); + } + ); } - const str = getTree[input](test.input[input].code, transpiler.startRule); + const str = getTree[input]( + test.input[input].code, + transpiler.startRule + ); expect(transpiler.start(str)).to.equal(test.output[output]); }); }); diff --git a/packages/bson-transpilers/test/declaration-store.test.js b/packages/bson-transpilers/test/declaration-store.test.js index c888a555ea6..fb520d84f2d 100644 --- a/packages/bson-transpilers/test/declaration-store.test.js +++ b/packages/bson-transpilers/test/declaration-store.test.js @@ -2,26 +2,34 @@ const assert = require('assert'); const DeclarationStore = require('../codegeneration/DeclarationStore'); -describe('DeclarationStore', function() { - it('adds data using #add', function() { +describe('DeclarationStore', function () { + it('adds data using #add', function () { const ds = new DeclarationStore(); - ds.addVar('Temp', 'objectID', (varName) => { return `objectId${varName}`; }); + ds.addVar('Temp', 'objectID', (varName) => { + return `objectId${varName}`; + }); assert.strictEqual(ds.length(), 1); }); - it('returns incremented variable names given the pre-incremented variable root-name', function() { + it('returns incremented variable names given the pre-incremented variable root-name', function () { const ds = new DeclarationStore(); - ds.addVar('ForTemp', 'objectID', () => { return 1; }); + ds.addVar('ForTemp', 'objectID', () => { + return 1; + }); assert.strictEqual(ds.next('ForTemp', 'objectID'), 'objectIDForTemp1'); - ds.addVar('ForTemp', 'objectID', () => { return 2; }); + ds.addVar('ForTemp', 'objectID', () => { + return 2; + }); assert.strictEqual(ds.next('ForTemp', 'objectID'), 'objectIDForTemp2'); - ds.addVar('ForTemp', 'objectID', () => { return 3; }); + ds.addVar('ForTemp', 'objectID', () => { + return 3; + }); assert.strictEqual(ds.next('ForTemp', 'objectID'), 'objectIDForTemp3'); }); - it('stringifies multiple variables declarations', function() { + it('stringifies multiple variables declarations', function () { const ds = new DeclarationStore(); const declaration1 = (varName) => { return [] @@ -34,7 +42,9 @@ describe('DeclarationStore', function() { const declaration2 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -49,14 +59,16 @@ describe('DeclarationStore', function() { .concat(' log.Fatal(err)') .concat('}') .concat('') - .concat('objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")') + .concat( + 'objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")' + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .join('\n'); assert.strictEqual(ds.toString(), expected); }); - it('skips defining declarations for multiple of the exact same declaration (1)', function() { + it('skips defining declarations for multiple of the exact same declaration (1)', function () { const ds = new DeclarationStore(); const declaration1 = (varName) => { return [] @@ -69,7 +81,9 @@ describe('DeclarationStore', function() { const declaration2 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -95,14 +109,16 @@ describe('DeclarationStore', function() { .concat(' log.Fatal(err)') .concat('}') .concat('') - .concat('objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")') + .concat( + 'objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")' + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .join('\n'); assert.strictEqual(ds.toString(), expected); }); - it('skips defining declarations for multiple of the exact same declaration (2)', function() { + it('skips defining declarations for multiple of the exact same declaration (2)', function () { const ds = new DeclarationStore(); const declaration1 = (varName) => { return [] @@ -115,7 +131,9 @@ describe('DeclarationStore', function() { const declaration2 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -124,7 +142,9 @@ describe('DeclarationStore', function() { const declaration3 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -141,14 +161,16 @@ describe('DeclarationStore', function() { .concat(' log.Fatal(err)') .concat('}') .concat('') - .concat('objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")') + .concat( + 'objectIDForTemp1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")' + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .join('\n'); assert.strictEqual(ds.toString(), expected); }); - it('ignores duplications over different variables', function() { + it('ignores duplications over different variables', function () { const ds = new DeclarationStore(); const declaration1 = (varName) => { return [] @@ -161,7 +183,9 @@ describe('DeclarationStore', function() { const declaration2 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -170,7 +194,9 @@ describe('DeclarationStore', function() { const declaration3 = (varName) => { return [] - .concat(`${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")`) + .concat( + `${varName}, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")` + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') @@ -187,19 +213,23 @@ describe('DeclarationStore', function() { .concat(' log.Fatal(err)') .concat('}') .concat('') - .concat('objectIDForTempA1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")') + .concat( + 'objectIDForTempA1, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")' + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .concat('') - .concat('objectIDForTempB, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")') + .concat( + 'objectIDForTempB, err := primitive.ObjectIDFromHex("5ab901c29ee65f5c8550c5b9")' + ) .concat('if err != nil {') .concat(' log.Fatal(err)') .concat('}') .join('\n'); assert.strictEqual(ds.toString(), expected); }); - it('ignores duplications over different functions', function() { + it('ignores duplications over different functions', function () { const ds = new DeclarationStore(); const declaration1 = 'var x := func() {}'; const declaration2 = 'var x := func() {}'; @@ -216,7 +246,7 @@ describe('DeclarationStore', function() { .join('\n'); assert.strictEqual(ds.toString(), expected); }); - it('get length of sets', function() { + it('get length of sets', function () { const ds = new DeclarationStore(); const declaration1 = 'var x := func() {}'; const declaration2 = 'var x := func() {}'; diff --git a/packages/bson-transpilers/test/functions.test.js b/packages/bson-transpilers/test/functions.test.js index fdeda3f98cc..f5792811626 100644 --- a/packages/bson-transpilers/test/functions.test.js +++ b/packages/bson-transpilers/test/functions.test.js @@ -2,26 +2,28 @@ const bsonTranspilers = require('..'); const assert = require('assert'); -const { - BsonTranspilersUnimplementedError -} = require('../helper/error'); +const { BsonTranspilersUnimplementedError } = require('../helper/error'); -describe('function expressions (shell)', function() { - it('compiles functions to javascript', function() { +describe('function expressions (shell)', function () { + it('compiles functions to javascript', function () { assert.strictEqual( - bsonTranspilers.shell.javascript.compile('function(){ return this.x === 1 }'), + bsonTranspilers.shell.javascript.compile( + 'function(){ return this.x === 1 }' + ), 'function(){ return this.x === 1 }' ); }); - it('compiles functions to javascript (takes the right source range)', function() { + it('compiles functions to javascript (takes the right source range)', function () { assert.strictEqual( - bsonTranspilers.shell.javascript.compile('1 + function(){ return this.x === 1 }'), + bsonTranspilers.shell.javascript.compile( + '1 + function(){ return this.x === 1 }' + ), '1 + function(){ return this.x === 1 }' ); }); - it('compiles functions to javascript (preserve new lines)', function() { + it('compiles functions to javascript (preserve new lines)', function () { assert.strictEqual( bsonTranspilers.shell.javascript.compile(`function(){ return this.x === 1 @@ -32,7 +34,7 @@ describe('function expressions (shell)', function() { ); }); - it('allows functions in pipeline stages', function() { + it('allows functions in pipeline stages', function () { assert.strictEqual( bsonTranspilers.shell.javascript.compile(`{ $match: { @@ -47,17 +49,13 @@ describe('function expressions (shell)', function() { ); }); - ['object', 'csharp', 'java', 'python', 'ruby', 'rust', 'php'].forEach((language) => { - it(`throws an unsupported error compiling functions to ${language}`, function() { - assert.throws( - () => { + ['object', 'csharp', 'java', 'python', 'ruby', 'rust', 'php'].forEach( + (language) => { + it(`throws an unsupported error compiling functions to ${language}`, function () { + assert.throws(() => { bsonTranspilers.shell[language].compile('function(){}'); - }, - new BsonTranspilersUnimplementedError( - 'Support for exporting functions to languages other than javascript is not yet available.' - ) - ); - }); - }); + }, new BsonTranspilersUnimplementedError('Support for exporting functions to languages other than javascript is not yet available.')); + }); + } + ); }); - diff --git a/packages/bson-transpilers/test/index.test.js b/packages/bson-transpilers/test/index.test.js index 8013ef43802..d650bb6b4bf 100644 --- a/packages/bson-transpilers/test/index.test.js +++ b/packages/bson-transpilers/test/index.test.js @@ -7,27 +7,27 @@ const SAMPLE = transpilers.shell.java; const VALID_OPTIONS = { uri: 'mongodb://localhost', database: 'test', - collection: 'webscale' + collection: 'webscale', }; const INVALID_JS = '{ ... }'; const VALID_JS = '({ a : 1 })'; -describe('bson transpiler', function() { - describe('#compileWithDriver', function() { - it('does not compile internal options like "options"', function() { +describe('bson transpiler', function () { + describe('#compileWithDriver', function () { + it('does not compile internal options like "options"', function () { const result = SAMPLE.compileWithDriver({ options: VALID_OPTIONS, - filter: VALID_JS + filter: VALID_JS, }); assert.ok(result.includes('webscale')); }); - it('does not compile internal options like "exportMode"', function() { + it('does not compile internal options like "exportMode"', function () { const result = SAMPLE.compileWithDriver({ options: VALID_OPTIONS, exportMode: INVALID_JS, - filter: VALID_JS + filter: VALID_JS, }); assert.ok(result.includes('webscale')); }); diff --git a/packages/bson-transpilers/test/run-yaml.test.js b/packages/bson-transpilers/test/run-yaml.test.js index b48422a6e9c..a6fd85d237d 100644 --- a/packages/bson-transpilers/test/run-yaml.test.js +++ b/packages/bson-transpilers/test/run-yaml.test.js @@ -10,8 +10,23 @@ const bson = require('bson'); const transpiler = require('../index'); -const outputLanguages = process.env.OUTPUT ? process.env.OUTPUT.split(',') : [ 'csharp', 'python', 'java', 'javascript', 'shell', 'object', 'ruby', 'go', 'rust', 'php']; -const inputLanguages = process.env.INPUT ? process.env.INPUT.split(',') : [ 'shell' ]; +const outputLanguages = process.env.OUTPUT + ? process.env.OUTPUT.split(',') + : [ + 'csharp', + 'python', + 'java', + 'javascript', + 'shell', + 'object', + 'ruby', + 'go', + 'rust', + 'php', + ]; +const inputLanguages = process.env.INPUT + ? process.env.INPUT.split(',') + : ['shell']; const modes = process.env.MODE ? process.env.MODE.split(',') : []; const skipType = []; @@ -45,10 +60,10 @@ const executeJavascript = (input) => { ObjectId: bson.ObjectId, BSONSymbol: bson.BSONSymbol, Timestamp: bson.Timestamp, - Code: function(c, s) { + Code: function (c, s) { return new bson.Code(c, s); }, - Date: function(s) { + Date: function (s) { const args = Array.from(arguments); if (args.length === 1) { @@ -58,7 +73,7 @@ const executeJavascript = (input) => { return new Date(Date.UTC(...args)); }, Buffer: Buffer, - __result: {} + __result: {}, }; const res = vm.runInContext('__result = ' + input, vm.createContext(sandbox)); return res; @@ -73,46 +88,71 @@ fs.readdirSync(testpath).map((file) => { if (modes.length > 0 && modes.indexOf(mode) === -1) { return; } - describe(mode, function() { + describe(mode, function () { const tests = readYAML(path.join(testpath, file)); for (const type of Object.keys(tests.tests)) { if (skipType.indexOf(type) !== -1) { continue; } - describe(`${type}`, function() { + describe(`${type}`, function () { for (const test of tests.tests[type]) { const description = test.description ? (d) => { - describe(`${test.description}`, function() { return d(); }); - } - : (d) => (d()); + describe(`${test.description}`, function () { + return d(); + }); + } + : (d) => d(); description(() => { for (const input of Object.keys(test.input)) { if (inputLanguages.indexOf(input) === -1) { continue; } - const outputLang = test.output ? Object.keys(test.output) : outputLanguages; + const outputLang = test.output + ? Object.keys(test.output) + : outputLanguages; for (const output of outputLang) { if (outputLanguages.indexOf(output) === -1) { continue; } - if (test.output && output === 'object') { // Can't import libraries from YAML, so un-stringify it first - it(`${input}: ${test.input[input]} => runnable object`, function() { + if (test.output && output === 'object') { + // Can't import libraries from YAML, so un-stringify it first + it(`${input}: ${test.input[input]} => runnable object`, function () { const expected = executeJavascript(test.output.object); - const actual = transpiler[input].object.compile(test.input[input]); - if (expected && typeof expected === 'object' && '_bsontype' in expected) { + const actual = transpiler[input].object.compile( + test.input[input] + ); + if ( + expected && + typeof expected === 'object' && + '_bsontype' in expected + ) { expect(actual._bsontype).to.equal(expected._bsontype); expect(actual.value).to.equal(expected.value); - } else if (test.description && test.description.includes('now date')) { + } else if ( + test.description && + test.description.includes('now date') + ) { expect(actual instanceof Date).to.equal(true); - } else if (test.description && test.description.includes('date.now')) { + } else if ( + test.description && + test.description.includes('date.now') + ) { expect(typeof actual).to.equal('number'); } else { expect(actual).to.deep.equal(expected); } }); } else if (input !== output) { - tests.runner(it, type, expect, input, output, transpiler, test); + tests.runner( + it, + type, + expect, + input, + output, + transpiler, + test + ); } } } diff --git a/packages/bson-transpilers/test/yaml/bson-methods.yaml b/packages/bson-transpilers/test/yaml/bson-methods.yaml index a550f95b7c8..2629b075a5f 100644 --- a/packages/bson-transpilers/test/yaml/bson-methods.yaml +++ b/packages/bson-transpilers/test/yaml/bson-methods.yaml @@ -12,7 +12,7 @@ runner: ! |- tests: Code-methods: - input: - shell: 'Code(''test code'', {x: 1}).scope' + shell: "Code('test code', {x: 1}).scope" output: javascript: |- new Code('test code', { @@ -26,7 +26,7 @@ tests: csharp: >- new BsonJavaScriptWithScope("test code", new BsonDocument("x", 1)).Scope - php: '(new Javascript(''test code'', [''x'' => 1]))->getScope()' + php: "(new Javascript('test code', ['x' => 1]))->getScope()" ruby: |- BSON::CodeWithScope.new('test code', { 'x' => 1 @@ -46,7 +46,7 @@ tests: java: new Code("test code").getCode() csharp: new BsonJavaScript("test code").Code php: (new Javascript('test code'))->getCode() - ruby: 'BSON::Code.new(''test code'').javascript' + ruby: "BSON::Code.new('test code').javascript" go: 'primitive.CodeWithScope{Code: primitive.JavaScript("test code")}.Code' - input: shell: ObjectId('5ab901c29ee65f5c8550c5b9').toString() @@ -56,7 +56,7 @@ tests: java: new ObjectId("5ab901c29ee65f5c8550c5b9").toHexString() csharp: new ObjectId("5ab901c29ee65f5c8550c5b9").ToString() php: (string) new ObjectId('5ab901c29ee65f5c8550c5b9') - ruby: 'BSON::ObjectId(''5ab901c29ee65f5c8550c5b9'').to_s' + ruby: "BSON::ObjectId('5ab901c29ee65f5c8550c5b9').to_s" go: |- var objectIDFromHex = func(hex string) primitive.ObjectID { objectID, err := primitive.ObjectIDFromHex(hex) @@ -75,7 +75,7 @@ tests: java: new ObjectId("5ab901c29ee65f5c8550c5b9").getTimestamp() csharp: new ObjectId("5ab901c29ee65f5c8550c5b9").Timestamp php: (new ObjectId('5ab901c29ee65f5c8550c5b9'))->getTimestamp() - ruby: 'BSON::ObjectId(''5ab901c29ee65f5c8550c5b9'').to_time' + ruby: "BSON::ObjectId('5ab901c29ee65f5c8550c5b9').to_time" go: |- var objectIDFromHex = func(hex string) primitive.ObjectID { objectID, err := primitive.ObjectIDFromHex(hex) @@ -139,12 +139,12 @@ tests: ObjectId::parse_str("5ab901c29ee65f5c8550c5b9")? DBRef-methods: - input: - shell: 'new DBRef(''coll'', new ObjectId(), ''db'').$db' + shell: "new DBRef('coll', new ObjectId(), 'db').$db" output: - python: 'DBRef(''coll'', ObjectId(), ''db'').database' + python: "DBRef('coll', ObjectId(), 'db').database" java: 'new DBRef("db", "coll", new ObjectId()).getDatabaseName()' csharp: 'new MongoDBRef("coll", new ObjectId(), "db").DatabaseName' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => ''db''][''$db'']' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => 'db']['$db']" ruby: |- BSON::DBRef.new( '$ref' => 'coll', @@ -152,12 +152,12 @@ tests: '$db' => 'db' ).database - input: - shell: 'new DBRef(''coll'', new ObjectId(), ''db'').getDb()' + shell: "new DBRef('coll', new ObjectId(), 'db').getDb()" output: - python: 'DBRef(''coll'', ObjectId(), ''db'').database' + python: "DBRef('coll', ObjectId(), 'db').database" java: 'new DBRef("db", "coll", new ObjectId()).getDatabaseName()' csharp: 'new MongoDBRef("coll", new ObjectId(), "db").DatabaseName' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => ''db''][''$db'']' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => 'db']['$db']" ruby: |- BSON::DBRef.new( '$ref' => 'coll', @@ -165,9 +165,9 @@ tests: '$db' => 'db' ).database - input: - shell: 'new DBRef(''coll'', new ObjectId(''5bfeee5ffa63a31985db9e5e'')).getRef()' + shell: "new DBRef('coll', new ObjectId('5bfeee5ffa63a31985db9e5e')).getRef()" output: - python: 'DBRef(''coll'', ObjectId(''5bfeee5ffa63a31985db9e5e'')).collection' + python: "DBRef('coll', ObjectId('5bfeee5ffa63a31985db9e5e')).collection" java: >- new DBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).getCollectionName() @@ -178,9 +178,9 @@ tests: ['$ref' => 'coll', '$id' => new ObjectId('5bfeee5ffa63a31985db9e5e'), '$db' => null]['$ref'] - input: - shell: 'new DBRef(''coll'', new ObjectId(''5bfeee5ffa63a31985db9e5e'')).$ref' + shell: "new DBRef('coll', new ObjectId('5bfeee5ffa63a31985db9e5e')).$ref" output: - python: 'DBRef(''coll'', ObjectId(''5bfeee5ffa63a31985db9e5e'')).collection' + python: "DBRef('coll', ObjectId('5bfeee5ffa63a31985db9e5e')).collection" java: >- new DBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).getCollectionName() @@ -196,21 +196,21 @@ tests: '$id' => BSON::ObjectId('5bfeee5ffa63a31985db9e5e') ).collection - input: - shell: 'new DBRef(''coll'', new ObjectId()).getCollection()' + shell: "new DBRef('coll', new ObjectId()).getCollection()" output: - python: 'DBRef(''coll'', ObjectId()).collection' + python: "DBRef('coll', ObjectId()).collection" java: 'new DBRef("coll", new ObjectId()).getCollectionName()' csharp: 'new MongoDBRef("coll", new ObjectId()).CollectionName' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => null][''$ref'']' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => null]['$ref']" ruby: |- BSON::DBRef.new( '$ref' => 'coll', '$id' => BSON::ObjectId.new ).collection - input: - shell: 'new DBRef(''coll'', new ObjectId(''5bfeee5ffa63a31985db9e5e'')).$id' + shell: "new DBRef('coll', new ObjectId('5bfeee5ffa63a31985db9e5e')).$id" output: - python: 'DBRef(''coll'', ObjectId(''5bfeee5ffa63a31985db9e5e'')).id' + python: "DBRef('coll', ObjectId('5bfeee5ffa63a31985db9e5e')).id" java: 'new DBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).getId()' csharp: 'new MongoDBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).Id' php: >- @@ -222,9 +222,9 @@ tests: '$id' => BSON::ObjectId('5bfeee5ffa63a31985db9e5e') ).id - input: - shell: 'new DBRef(''coll'', new ObjectId(''5bfeee5ffa63a31985db9e5e'')).getId()' + shell: "new DBRef('coll', new ObjectId('5bfeee5ffa63a31985db9e5e')).getId()" output: - python: 'DBRef(''coll'', ObjectId(''5bfeee5ffa63a31985db9e5e'')).id' + python: "DBRef('coll', ObjectId('5bfeee5ffa63a31985db9e5e')).id" java: 'new DBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).getId()' csharp: 'new MongoDBRef("coll", new ObjectId("5bfeee5ffa63a31985db9e5e")).Id' php: >- @@ -239,11 +239,11 @@ tests: - input: shell: NumberLong(429496729601).toString() output: - python: '''429496729601''' + python: "'429496729601'" java: '"429496729601"' csharp: '"429496729601"' - php: '''429496729601''' - ruby: '''429496729601''' + php: "'429496729601'" + ruby: "'429496729601'" go: '"429496729601"' rust: '"429496729601"' Decimal128-methods: [] @@ -260,7 +260,7 @@ tests: Symbol-methods: [] ObjectId-utils: - input: - shell: 'ObjectId.createFromTime(new Date(''Thu, 03 Feb 1972 00:00:00 GMT''))' + shell: "ObjectId.createFromTime(new Date('Thu, 03 Feb 1972 00:00:00 GMT'))" output: javascript: >- ObjectId.createFromTime(new Date('Thu, 03 Feb 1972 00:00:00 diff --git a/packages/bson-transpilers/test/yaml/bson.yaml b/packages/bson-transpilers/test/yaml/bson.yaml index c6cfc447a1b..e308851c862 100644 --- a/packages/bson-transpilers/test/yaml/bson.yaml +++ b/packages/bson-transpilers/test/yaml/bson.yaml @@ -20,7 +20,7 @@ tests: java: new Code("some code") csharp: new BsonJavaScript("some code") php: new Javascript('some code') - ruby: 'BSON::Code.new(''some code'')' + ruby: "BSON::Code.new('some code')" go: 'primitive.CodeWithScope{Code: primitive.JavaScript("some code")}' rust: 'Bson::JavaScriptCode("some code".to_string())' - description: string code @@ -32,12 +32,12 @@ tests: java: new Code("some code") csharp: new BsonJavaScript("some code") php: new Javascript('some code') - ruby: 'BSON::Code.new(''some code'')' + ruby: "BSON::Code.new('some code')" go: 'primitive.CodeWithScope{Code: primitive.JavaScript("some code")}' rust: 'Bson::JavaScriptCode("some code".to_string())' - description: string code and object scope input: - shell: 'Code(''string'', {x: ''1''})' + shell: "Code('string', {x: '1'})" output: javascript: |- new Code('string', { @@ -49,7 +49,7 @@ tests: }) java: 'new CodeWithScope("string", new Document("x", "1"))' csharp: 'new BsonJavaScriptWithScope("string", new BsonDocument("x", "1"))' - php: 'new Javascript(''string'', [''x'' => ''1''])' + php: "new Javascript('string', ['x' => '1'])" ruby: |- BSON::CodeWithScope.new('string', { 'x' => '1' @@ -107,7 +107,7 @@ tests: java: new ObjectId("5a7382114ec1f67ae445f778") csharp: new ObjectId("5a7382114ec1f67ae445f778") php: new ObjectId('5a7382114ec1f67ae445f778') - ruby: 'BSON::ObjectId(''5a7382114ec1f67ae445f778'')' + ruby: "BSON::ObjectId('5a7382114ec1f67ae445f778')" go: |- var objectIDFromHex = func(hex string) primitive.ObjectID { objectID, err := primitive.ObjectIDFromHex(hex) @@ -122,13 +122,13 @@ tests: DBRef: - description: 'NEW (string, ObjectID) args' input: - shell: 'new DBRef(''coll'', new ObjectId())' + shell: "new DBRef('coll', new ObjectId())" output: - javascript: 'new DBRef(''coll'', new ObjectId())' - python: 'DBRef(''coll'', ObjectId())' + javascript: "new DBRef('coll', new ObjectId())" + python: "DBRef('coll', ObjectId())" java: 'new DBRef("coll", new ObjectId())' csharp: 'new MongoDBRef("coll", new ObjectId())' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => null]' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => null]" ruby: |- BSON::DBRef.new( '$ref' => 'coll', @@ -136,13 +136,13 @@ tests: ) - description: '(string, ObjectID) args' input: - shell: 'DBRef(''coll'', new ObjectId())' + shell: "DBRef('coll', new ObjectId())" output: - javascript: 'new DBRef(''coll'', new ObjectId())' - python: 'DBRef(''coll'', ObjectId())' + javascript: "new DBRef('coll', new ObjectId())" + python: "DBRef('coll', ObjectId())" java: 'new DBRef("coll", new ObjectId())' csharp: 'new MongoDBRef("coll", new ObjectId())' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => null]' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => null]" ruby: |- BSON::DBRef.new( '$ref' => 'coll', @@ -150,13 +150,13 @@ tests: ) - description: '(string, ObjectId, string) args' input: - shell: 'new DBRef(''coll'', new ObjectId(), ''db'')' + shell: "new DBRef('coll', new ObjectId(), 'db')" output: - javascript: 'new DBRef(''coll'', new ObjectId(), ''db'')' - python: 'DBRef(''coll'', ObjectId(), ''db'')' + javascript: "new DBRef('coll', new ObjectId(), 'db')" + python: "DBRef('coll', ObjectId(), 'db')" java: 'new DBRef("db", "coll", new ObjectId())' csharp: 'new MongoDBRef("coll", new ObjectId(), "db")' - php: '[''$ref'' => ''coll'', ''$id'' => new ObjectId(), ''$db'' => ''db'']' + php: "['$ref' => 'coll', '$id' => new ObjectId(), '$db' => 'db']" ruby: |- BSON::DBRef.new( '$ref' => 'coll', @@ -197,7 +197,7 @@ tests: java: Integer.parseInt("3") csharp: Convert.ToInt32("3") php: (int) '3' - ruby: '''3''.to_i' + ruby: "'3'.to_i" go: |- var parseInt32 = func(str string) int32 { i64, err := strconv.ParseInt(str, 10, 32) @@ -304,7 +304,7 @@ tests: java: Long.parseLong("9223372036854775807") csharp: Convert.ToInt64("9223372036854775807") php: (int) '9223372036854775807' - ruby: '''9223372036854775807''.to_i' + ruby: "'9223372036854775807'.to_i" go: |- var parseInt = func(str string) int64 { i64, err := strconv.ParseInt(str, 10, 64) @@ -326,7 +326,7 @@ tests: java: Decimal128.parse("5") csharp: Decimal128.Parse("5") php: new Decimal128('5') - ruby: 'BSON::Decimal128.new(''5'')' + ruby: "BSON::Decimal128.new('5')" - description: NEW input: shell: new NumberDecimal('5.3E-6175') @@ -335,7 +335,7 @@ tests: java: Decimal128.parse("5.3E-6175") csharp: Decimal128.Parse("5.3E-6175") php: new Decimal128('5.3E-6175') - ruby: 'BSON::Decimal128.new(''5.3E-6175'')' + ruby: "BSON::Decimal128.new('5.3E-6175')" - description: number arg input: shell: NumberDecimal(5) @@ -345,7 +345,7 @@ tests: java: Decimal128.parse("5") csharp: Decimal128.Parse("5") php: new Decimal128('5') - ruby: 'BSON::Decimal128.new(''5'')' + ruby: "BSON::Decimal128.new('5')" - description: no arg input: shell: NumberDecimal() @@ -355,7 +355,7 @@ tests: java: Decimal128.parse("0") csharp: Decimal128.Parse("0") php: new Decimal128('0') - ruby: 'BSON::Decimal128.new(''0'')' + ruby: "BSON::Decimal128.new('0')" MinKey/MaxKey: - description: MinKey input: @@ -437,11 +437,11 @@ tests: shell: Symbol('abc') output: javascript: new BSONSymbol('abc') - python: '''abc''' + python: "'abc'" java: new Symbol("abc") csharp: '"abc"' - php: '''abc''' - ruby: ':''abc''' + php: "'abc'" + ruby: ":'abc'" go: primitive.Symbol("abc") rust: 'Bson::Symbol("abc")' - description: from shell symbol @@ -449,10 +449,10 @@ tests: shell: Symbol('abc') output: javascript: new BSONSymbol('abc') - python: '''abc''' + python: "'abc'" java: new Symbol("abc") csharp: '"abc"' - php: '''abc''' - ruby: ':''abc''' + php: "'abc'" + ruby: ":'abc'" go: primitive.Symbol("abc") rust: 'Bson::Symbol("abc")' diff --git a/packages/bson-transpilers/test/yaml/builders.yaml b/packages/bson-transpilers/test/yaml/builders.yaml index 08dead32cb7..07db3b15360 100644 --- a/packages/bson-transpilers/test/yaml/builders.yaml +++ b/packages/bson-transpilers/test/yaml/builders.yaml @@ -278,13 +278,13 @@ tests: java: 'where("function(){$x===true}")' imports: import static com.mongodb.client.model.Filters.where; - input: - shell: '{''$where'': ''function() { $x===true }''}' + shell: "{'$where': 'function() { $x===true }'}" output: java: 'where("function() { $x===true }")' imports: import static com.mongodb.client.model.Filters.where; geometry: - input: - shell: '{$geometry: {type: ''Point'', coordinates: [1, 2]}}' + shell: "{$geometry: {type: 'Point', coordinates: [1, 2]}}" output: java: 'new Point(new Position(1L, 2L))' imports: |- @@ -657,7 +657,7 @@ tests: import static com.mongodb.client.model.Sorts.metaTextScore; import static com.mongodb.client.model.Sorts.orderBy; - input: - shell: '{ $sort: { x: 1, y: -1, z: { ''$meta'': ''textScore'' } } }' + shell: "{ $sort: { x: 1, y: -1, z: { '$meta': 'textScore' } } }" output: java: 'sort(orderBy(ascending("x"), descending("y"), metaTextScore("z")))' imports: |- @@ -677,7 +677,7 @@ tests: import static com.mongodb.client.model.Sorts.metaTextScore; import static com.mongodb.client.model.Sorts.orderBy; - input: - shell: '{ $sort: { x: 1, y: -1, z: { $meta: ''textScore'' } } }' + shell: "{ $sort: { x: 1, y: -1, z: { $meta: 'textScore' } } }" output: java: 'sort(orderBy(ascending("x"), descending("y"), metaTextScore("z")))' imports: |- @@ -782,12 +782,12 @@ tests: import com.mongodb.client.model.GraphLookupOptions; sortByCount: - input: - shell: '{ $sortByCount: ''$expr'' }' + shell: "{ $sortByCount: '$expr' }" output: java: sortByCount("$expr") imports: import static com.mongodb.client.model.Aggregates.sortByCount; - input: - shell: '{ $sortByCount: { ''$floor'': ''$x'' } }' + shell: "{ $sortByCount: { '$floor': '$x' } }" output: java: 'sortByCount(eq("$floor", "$x"))' imports: |- @@ -795,7 +795,7 @@ tests: import static com.mongodb.client.model.Aggregates.sortByCount; replaceRoot: - input: - shell: '{ $replaceRoot: { newRoot: { x: ''newDoc'' } } }' + shell: "{ $replaceRoot: { newRoot: { x: 'newDoc' } } }" output: java: 'replaceRoot(new Document("x", "newDoc"))' imports: |- @@ -812,13 +812,13 @@ tests: import com.mongodb.client.model.Field; count: - input: - shell: '{ $count: ''field'' }' + shell: "{ $count: 'field' }" output: java: count("field") imports: import static com.mongodb.client.model.Aggregates.count; bucket: - input: - shell: '{$bucket: { groupBy: ''$expr'', boundaries: [ 0, 10, 20 ],} }' + shell: "{$bucket: { groupBy: '$expr', boundaries: [ 0, 10, 20 ],} }" output: java: 'bucket("$expr", Arrays.asList(0L, 10L, 20L))' imports: |- diff --git a/packages/bson-transpilers/test/yaml/driver-syntax.yaml b/packages/bson-transpilers/test/yaml/driver-syntax.yaml index 027c55fc0d7..1d6f707406b 100644 --- a/packages/bson-transpilers/test/yaml/driver-syntax.yaml +++ b/packages/bson-transpilers/test/yaml/driver-syntax.yaml @@ -373,7 +373,7 @@ tests: skip: '5' limit: '10' maxTimeMS: '100' - collation: '{ locale: ''zh'' }' + collation: "{ locale: 'zh' }" output: python: |- # Requires the PyMongo package. @@ -800,7 +800,7 @@ tests: - description: generate driver syntax with declarations input: shell: - aggregation: '{x: ObjectId(''5a7382114ec1f67ae445f778'')}' + aggregation: "{x: ObjectId('5a7382114ec1f67ae445f778')}" options: uri: 'mongodb://localhost:27017' database: db diff --git a/packages/bson-transpilers/test/yaml/edge-cases/casting.yaml b/packages/bson-transpilers/test/yaml/edge-cases/casting.yaml index 4870620813d..9b56efa0e75 100644 --- a/packages/bson-transpilers/test/yaml/edge-cases/casting.yaml +++ b/packages/bson-transpilers/test/yaml/edge-cases/casting.yaml @@ -34,7 +34,7 @@ tests: - description: does not cast numeric input: shell: - code: 'TestFunc(10, 10.01, 0x6, 0o5, Number(10), Number(''10''), -10)' + code: "TestFunc(10, 10.01, 0x6, 0o5, Number(10), Number('10'), -10)" args: - - _numeric - - _numeric @@ -48,7 +48,7 @@ tests: - description: does not cast Number class input: shell: - code: 'TestFunc(Number(10), Number(''10''), Number(10), Number(''10''))' + code: "TestFunc(Number(10), Number('10'), Number(10), Number('10'))" args: - - _numeric - - _long diff --git a/packages/bson-transpilers/test/yaml/error-builders.yaml b/packages/bson-transpilers/test/yaml/error-builders.yaml index 8485ea4bc2a..7fa4a1d6e63 100644 --- a/packages/bson-transpilers/test/yaml/error-builders.yaml +++ b/packages/bson-transpilers/test/yaml/error-builders.yaml @@ -27,112 +27,112 @@ runner: ! |- tests: wrong type: - input: - shell: '{''$project'': ''invalid''}' + shell: "{'$project': 'invalid'}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$project'': {}}' + shell: "{'$project': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$not'': ''1''}}' + shell: "{'x': {'$not': '1'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$mod'': 1}}' + shell: "{'x': {'$mod': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$mod'': [1]}}' + shell: "{'x': {'$mod': [1]}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$mod'': {}}}' + shell: "{'x': {'$mod': {}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$sort'': {}}' + shell: "{'$sort': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$sort'': 1}' + shell: "{'$sort': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$sort'': {''x'': 1, ''y'': ''not 1/-1''}}' + shell: "{'$sort': {'x': 1, 'y': 'not 1/-1'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$sort'': {''x'': 1, ''y'': {}}}' + shell: "{'$sort': {'x': 1, 'y': {}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$sort'': {''x'': 1, ''y'': {''$meta'': 1}}}' + shell: "{'$sort': {'x': 1, 'y': {'$meta': 1}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$project'': {}}' + shell: "{'$project': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$project'': 1}' + shell: "{'$project': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$sample'': {}}}' + shell: "{'x': {'$sample': {}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$sample'': {''notSize'': 1}}}' + shell: "{'x': {'$sample': {'notSize': 1}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$sample'': {''size'': 10, ''other'': 1}}}' + shell: "{'x': {'$sample': {'size': 10, 'other': 1}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$replaceRoot'': {}}}' + shell: "{'x': {'$replaceRoot': {}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$replaceRoot'': {''notNewRoot'': 1}}}' + shell: "{'x': {'$replaceRoot': {'notNewRoot': 1}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''x'': {''$replaceRoot'': {''newRoot'': 10, ''other'': 1}}}' + shell: "{'x': {'$replaceRoot': {'newRoot': 10, 'other': 1}}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$graphLookup'': {}}' + shell: "{'$graphLookup': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$graphLookup'': 1}' + shell: "{'$graphLookup': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$graphLookup'': {''from'': ''x''}}' + shell: "{'$graphLookup': {'from': 'x'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME @@ -145,12 +145,12 @@ tests: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$lookup'': {}}' + shell: "{'$lookup': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$lookup'': {''from'': ''x''}}' + shell: "{'$lookup': {'from': 'x'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME @@ -162,98 +162,98 @@ tests: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucket'': {}}' + shell: "{'$bucket': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucket'': {''groupBy'': ''x''}}' + shell: "{'$bucket': {'groupBy': 'x'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucket'': {''groupBy'': ''x'', ''boundaries'': 1, ''extra'': 1}}' + shell: "{'$bucket': {'groupBy': 'x', 'boundaries': 1, 'extra': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucketAuto'': {}}' + shell: "{'$bucketAuto': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucketAuto'': {''groupBy'': ''x''}}' + shell: "{'$bucketAuto': {'groupBy': 'x'}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$bucketAuto'': {''groupBy'': ''x'', ''buckets'': 1, ''extra'': 1}}' + shell: "{'$bucketAuto': {'groupBy': 'x', 'buckets': 1, 'extra': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$text'': {}}' + shell: "{'$text': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$text'': {''$search'': ''x'', ''extra'': 1}}' + shell: "{'$text': {'$search': 'x', 'extra': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$unwind'': {}}' + shell: "{'$unwind': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$unwind'': 1}' + shell: "{'$unwind': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$unwind'': {''path'': ''x'', ''extra'': 1}}' + shell: "{'$unwind': {'path': 'x', 'extra': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$group'': {''x'': 1}}' + shell: "{'$group': {'x': 1}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$group'': {}}' + shell: "{'$group': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$group'': 1}' + shell: "{'$group': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$facet'': {}}' + shell: "{'$facet': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$facet'': 1}' + shell: "{'$facet': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$addFields'': {}}' + shell: "{'$addFields': {}}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME - input: - shell: '{''$addFields'': 1}' + shell: "{'$addFields': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME wrong shape: - input: - shell: '{''$sum'': 1}' + shell: "{'$sum': 1}" output: java: true errorCode: E_BSONTRANSPILERS_RUNTIME diff --git a/packages/bson-transpilers/test/yaml/imports.yaml b/packages/bson-transpilers/test/yaml/imports.yaml index 31477cd926e..81dd20a6d23 100644 --- a/packages/bson-transpilers/test/yaml/imports.yaml +++ b/packages/bson-transpilers/test/yaml/imports.yaml @@ -25,7 +25,7 @@ tests: all: - description: Single import Code input: - shell: '{x: Code(''code'')}' + shell: "{x: Code('code')}" output: java: |- import org.bson.types.Code; @@ -50,7 +50,7 @@ tests: use mongodb::bson::doc; - description: Single import Code with scope input: - shell: '{x: Code(''code'', {x: 1})}' + shell: "{x: Code('code', {x: 1})}" output: java: |- import org.bson.Document; @@ -128,7 +128,7 @@ tests: use mongodb::bson::doc; - description: Single import DBRef input: - shell: '{x: DBRef(''db'', ObjectId())}' + shell: "{x: DBRef('db', ObjectId())}" output: java: |- import org.bson.types.ObjectId; @@ -263,7 +263,7 @@ tests: use mongodb::bson::doc; - description: Single import RegExp input: - shell: '{x: RegExp(''abc'')}' + shell: "{x: RegExp('abc')}" output: java: |- import java.util.regex.Pattern; @@ -334,7 +334,7 @@ tests: use mongodb::bson::doc; - description: Single import Symbol input: - shell: '{x: Symbol(''a'')}' + shell: "{x: Symbol('a')}" output: java: |- import org.bson.types.Symbol; diff --git a/packages/bson-transpilers/test/yaml/native.yaml b/packages/bson-transpilers/test/yaml/native.yaml index ecbfb30d34a..955d0529985 100644 --- a/packages/bson-transpilers/test/yaml/native.yaml +++ b/packages/bson-transpilers/test/yaml/native.yaml @@ -12,7 +12,7 @@ runner: ! |- tests: Document: - input: - shell: '{x: ''1''}' + shell: "{x: '1'}" output: javascript: |- { @@ -24,7 +24,7 @@ tests: } java: 'eq("x", "1")' csharp: 'new BsonDocument("x", "1")' - php: '[''x'' => ''1'']' + php: "['x' => '1']" ruby: |- { 'x' => '1' @@ -35,7 +35,7 @@ tests: } go: 'bson.D{{"x", "1"}}' - input: - shell: '{x: ''1'',}' + shell: "{x: '1',}" output: javascript: |- { @@ -47,7 +47,7 @@ tests: } java: 'eq("x", "1")' csharp: 'new BsonDocument("x", "1")' - php: '[''x'' => ''1'']' + php: "['x' => '1']" ruby: |- { 'x' => '1' @@ -58,7 +58,7 @@ tests: } go: 'bson.D{{"x", "1"}}' - input: - shell: '{x: [''1'', ''2'']}' + shell: "{x: ['1', '2']}" output: javascript: |- { @@ -79,7 +79,7 @@ tests: "1", "2" }) - php: '[''x'' => [''1'', ''2'']]' + php: "['x' => ['1', '2']]" ruby: |- { 'x' => [ @@ -119,7 +119,7 @@ tests: } java: 'eq("x", eq("y", 2L))' csharp: 'new BsonDocument("x", new BsonDocument("y", 2))' - php: '[''x'' => [''y'' => 2]]' + php: "['x' => ['y' => 2]]" ruby: |- { 'x' => { @@ -145,7 +145,7 @@ tests: rust: 'doc! {}' go: 'bson.D{}' - input: - shell: '{x: ''1'', n: ''4''}' + shell: "{x: '1', n: '4'}" output: javascript: |- { @@ -164,7 +164,7 @@ tests: { "x", "1" }, { "n", "4" } } - php: '[''x'' => ''1'', ''n'' => ''4'']' + php: "['x' => '1', 'n' => '4']" ruby: |- { 'x' => '1', @@ -181,9 +181,9 @@ tests: {"n", "4"}, } - input: - shell: '{0: ''1'', 1: ''2'', 2: ''3''}' + shell: "{0: '1', 1: '2', 2: '3'}" output: - php: '(object) [0 => ''1'', 1 => ''2'', 2 => ''3'']' + php: "(object) [0 => '1', 1 => '2', 2 => '3']" - input: shell: >- { graphLookup : { "from" : "raw_data", "startWith" : "$_id", @@ -355,7 +355,7 @@ tests: } Array: - input: - shell: '[''1'', ''2'']' + shell: "['1', '2']" output: javascript: |- [ @@ -372,7 +372,7 @@ tests: [ '1', '2' ] - php: '[''1'', ''2'']' + php: "['1', '2']" ruby: |- [ '1', '2' @@ -388,7 +388,7 @@ tests: "2", } - input: - shell: '[''1'', ''2'',]' + shell: "['1', '2',]" output: javascript: |- [ @@ -405,7 +405,7 @@ tests: [ '1', '2' ] - php: '[''1'', ''2'']' + php: "['1', '2']" ruby: |- [ '1', '2' @@ -421,7 +421,7 @@ tests: "2", } - input: - shell: '[''1'', { settings: ''http2'' }]' + shell: "['1', { settings: 'http2' }]" output: javascript: |- [ @@ -442,7 +442,7 @@ tests: 'settings': 'http2' } ] - php: '[''1'', [''settings'' => ''http2'']]' + php: "['1', ['settings' => 'http2']]" ruby: |- [ '1', { @@ -630,7 +630,7 @@ tests: }, } - input: - shell: '[''1'', [''2'', ''3'']]' + shell: "['1', ['2', '3']]" output: javascript: |- [ @@ -655,7 +655,7 @@ tests: '2', '3' ] ] - php: '[''1'', [''2'', ''3'']]' + php: "['1', ['2', '3']]" ruby: |- [ '1', [ @@ -691,7 +691,7 @@ tests: go: 'bson.A{}' ArrayElision: - input: - shell: '[,''1'', ''2'',]' + shell: "[,'1', '2',]" output: python: |- [ @@ -709,7 +709,7 @@ tests: [ undefined, '1', '2' ] - php: '[null, ''1'', ''2'']' + php: "[null, '1', '2']" ruby: |- [ nil, '1', '2' @@ -792,7 +792,7 @@ tests: primitive.Undefined{}, } - input: - shell: '[''1'',,,,''2'']' + shell: "['1',,,,'2']" output: python: |- [ @@ -816,7 +816,7 @@ tests: [ '1', undefined, undefined, undefined, '2' ] - php: '[''1'', null, null, null, ''2'']' + php: "['1', null, null, null, '2']" ruby: |- [ '1', nil, nil, nil, '2' @@ -947,7 +947,7 @@ tests: java: Double.parseDouble("2") csharp: int.Parse("2") php: (int) '2' - ruby: '''2''.to_f' + ruby: "'2'.to_f" rust: '"2".parse::()?' go: |- var parseInt = func(str string) int64 { @@ -1116,25 +1116,25 @@ tests: go: 'primitive.Undefined{}' string_literals: - input: - shell: '''string''' + shell: "'string'" output: - javascript: '''string''' - python: '''string''' + javascript: "'string'" + python: "'string'" java: '"string"' csharp: '"string"' - php: '''string''' - ruby: '''string''' + php: "'string'" + ruby: "'string'" rust: '"string"' go: '"string"' - input: shell: '"string"' output: - javascript: '''string''' - python: '''string''' + javascript: "'string'" + python: "'string'" java: '"string"' csharp: '"string"' - php: '''string''' - ruby: '''string''' + php: "'string'" + ruby: "'string'" rust: '"string"' go: '"string"' python_strings: [] @@ -1167,7 +1167,7 @@ tests: - input: shell: 'new Date(1995, 11, 17)' output: - javascript: 'new Date(''Sun, 17 Dec 1995 00:00:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 00:00:00 GMT')" python: 'datetime(1995, 12, 17, 0, 0, 0, tzinfo=timezone.utc)' java: new java.util.Date(819158400000L) csharp: 'new DateTime(1995, 12, 17, 0, 0, 0)' @@ -1178,7 +1178,7 @@ tests: - input: shell: 'new Date(1995, 11, 17, 3, 24)' output: - javascript: 'new Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 03:24:00 GMT')" python: 'datetime(1995, 12, 17, 3, 24, 0, tzinfo=timezone.utc)' java: new java.util.Date(819170640000L) csharp: 'new DateTime(1995, 12, 17, 3, 24, 0)' @@ -1189,7 +1189,7 @@ tests: - input: shell: 'new Date(1995, 11, 17, 3, 24, 55)' output: - javascript: 'new Date(''Sun, 17 Dec 1995 03:24:55 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 03:24:55 GMT')" python: 'datetime(1995, 12, 17, 3, 24, 55, tzinfo=timezone.utc)' java: new java.util.Date(819170695000L) csharp: 'new DateTime(1995, 12, 17, 3, 24, 55)' @@ -1198,12 +1198,12 @@ tests: rust: 'DateTime::parse_rfc3339_str("1995-12-17T03:24:55.000Z")?' go: 'time.Date(1995, 12, 17, 3, 24, 55, 0, time.UTC)' - input: - shell: 'new Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + shell: "new Date('Sun, 17 Dec 1995 03:24:00 GMT')" output: python: 'datetime(1995, 12, 17, 3, 24, 0, tzinfo=timezone.utc)' java: new java.util.Date(819170640000L) csharp: 'new DateTime(1995, 12, 17, 3, 24, 0)' - javascript: 'new Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 03:24:00 GMT')" php: new UTCDateTime(819170640000) ruby: 'Time.utc(1995, 12, 17, 3, 24, 0)' rust: 'DateTime::parse_rfc3339_str("1995-12-17T03:24:00.000Z")?' @@ -1211,7 +1211,7 @@ tests: - input: shell: new Date(819167040000) output: - javascript: 'new Date(''Sun, 17 Dec 1995 02:24:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 02:24:00 GMT')" python: 'datetime(1995, 12, 17, 2, 24, 0, tzinfo=timezone.utc)' java: new java.util.Date(819167040000L) csharp: 'new DateTime(1995, 12, 17, 2, 24, 0)' @@ -1221,7 +1221,7 @@ tests: go: 'time.Date(1995, 12, 17, 2, 24, 0, 0, time.UTC)' date_string: - input: - shell: 'Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + shell: "Date('Sun, 17 Dec 1995 03:24:00 GMT')" output: python: >- datetime(1995, 12, 17, 3, 24, 0, tzinfo=timezone.utc).strftime('%a %b @@ -1232,18 +1232,18 @@ tests: csharp: >- new DateTime(1995, 12, 17, 3, 24, 0).ToString("ddd MMM dd yyyy HH':'mm':'ss UTC") - javascript: 'Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + javascript: "Date('Sun, 17 Dec 1995 03:24:00 GMT')" php: >- (new UTCDateTime(819170640000))->toDateTime()->format(\DateTimeInterface::RFC3339_EXTENDED) - ruby: 'Time.utc(1995, 12, 17, 3, 24, 0).strftime(''%a %b %d %Y %H:%M:%S %Z'')' + ruby: "Time.utc(1995, 12, 17, 3, 24, 0).strftime('%a %b %d %Y %H:%M:%S %Z')" rust: >- DateTime::parse_rfc3339_str("1995-12-17T03:24:00.000Z")?.to_rfc3339_string() go: 'time.Date(1995, 12, 17, 3, 24, 0, 0, time.UTC)' - input: shell: Date(819167040000) output: - javascript: 'Date(''Sun, 17 Dec 1995 02:24:00 GMT'')' + javascript: "Date('Sun, 17 Dec 1995 02:24:00 GMT')" python: >- datetime(1995, 12, 17, 2, 24, 0, tzinfo=timezone.utc).strftime('%a %b %d %Y %H:%M:%S %Z') @@ -1256,14 +1256,14 @@ tests: php: >- (new UTCDateTime(819167040000))->toDateTime()->format(\DateTimeInterface::RFC3339_EXTENDED) - ruby: 'Time.utc(1995, 12, 17, 2, 24, 0).strftime(''%a %b %d %Y %H:%M:%S %Z'')' + ruby: "Time.utc(1995, 12, 17, 2, 24, 0).strftime('%a %b %d %Y %H:%M:%S %Z')" rust: >- DateTime::parse_rfc3339_str("1995-12-17T02:24:00.000Z")?.to_rfc3339_string() go: 'time.Date(1995, 12, 17, 2, 24, 0, 0, time.UTC)' - input: shell: 'Date(1995, 11, 17)' output: - javascript: 'Date(''Sun, 17 Dec 1995 00:00:00 GMT'')' + javascript: "Date('Sun, 17 Dec 1995 00:00:00 GMT')" python: >- datetime(1995, 12, 17, 0, 0, 0, tzinfo=timezone.utc).strftime('%a %b %d %Y %H:%M:%S %Z') @@ -1276,29 +1276,29 @@ tests: php: >- (new UTCDateTime(819158400000))->toDateTime()->format(\DateTimeInterface::RFC3339_EXTENDED) - ruby: 'Time.utc(1995, 12, 17, 0, 0, 0).strftime(''%a %b %d %Y %H:%M:%S %Z'')' + ruby: "Time.utc(1995, 12, 17, 0, 0, 0).strftime('%a %b %d %Y %H:%M:%S %Z')" rust: >- DateTime::parse_rfc3339_str("1995-12-17T00:00:00.000Z")?.to_rfc3339_string() go: 'time.Date(1995, 12, 17, 0, 0, 0, 0, time.UTC)' ISODate: - input: - shell: 'new ISODate(''1995-12-17T03:24:00.000Z'')' + shell: "new ISODate('1995-12-17T03:24:00.000Z')" output: python: 'datetime(1995, 12, 17, 3, 24, 0, tzinfo=timezone.utc)' java: new java.util.Date(819170640000L) csharp: 'new DateTime(1995, 12, 17, 3, 24, 0)' - javascript: 'new Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 03:24:00 GMT')" php: new UTCDateTime(819170640000) ruby: 'Time.utc(1995, 12, 17, 3, 24, 0)' rust: 'DateTime::parse_rfc3339_str("1995-12-17T03:24:00.000Z")?' go: 'time.Date(1995, 12, 17, 3, 24, 0, 0, time.UTC)' - input: - shell: 'ISODate(''1995-12-17T03:24:00.000Z'')' + shell: "ISODate('1995-12-17T03:24:00.000Z')" output: python: 'datetime(1995, 12, 17, 3, 24, 0, tzinfo=timezone.utc)' java: new java.util.Date(819170640000L) csharp: 'new DateTime(1995, 12, 17, 3, 24, 0)' - javascript: 'new Date(''Sun, 17 Dec 1995 03:24:00 GMT'')' + javascript: "new Date('Sun, 17 Dec 1995 03:24:00 GMT')" php: new UTCDateTime(819170640000) ruby: 'Time.utc(1995, 12, 17, 3, 24, 0)' rust: 'DateTime::parse_rfc3339_str("1995-12-17T03:24:00.000Z")?' @@ -1332,7 +1332,7 @@ tests: input: shell: RegExp('') output: - javascript: 'new RegExp(''(?:)'')' + javascript: "new RegExp('(?:)')" python: 're.compile(r"(?:)")' java: 'Pattern.compile("(?:)")' csharp: 'new Regex("(?:)")' @@ -1354,9 +1354,9 @@ tests: go: 'primitive.Regex{Pattern: "abc"}' - description: regex object with im flags as args input: - shell: 'new RegExp(''ab+c'', ''im'')' + shell: "new RegExp('ab+c', 'im')" output: - javascript: 'new RegExp(''ab+c'', ''im'')' + javascript: "new RegExp('ab+c', 'im')" python: re.compile(r"ab+c(?im)") java: Pattern.compile("ab+c(?im)") csharp: new Regex("(?im)ab+c") @@ -1366,9 +1366,9 @@ tests: go: 'primitive.Regex{Pattern: "ab+c", Options: "im"}' - description: regex object with ig flags as args input: - shell: 'new RegExp(''ab+c'', ''ig'')' + shell: "new RegExp('ab+c', 'ig')" output: - javascript: 'new RegExp(''ab+c'', ''gi'')' + javascript: "new RegExp('ab+c', 'gi')" python: re.compile(r"ab+c(?is)") java: Pattern.compile("ab+c(?i)") csharp: new Regex("(?i)ab+c") @@ -1452,7 +1452,7 @@ tests: input: shell: /ab+c/ig output: - javascript: 'new RegExp(''ab+c'', ''gi'')' + javascript: "new RegExp('ab+c', 'gi')" python: re.compile(r"ab+c(?is)") java: Pattern.compile("ab+c(?i)") csharp: new Regex("(?i)ab+c") @@ -1462,9 +1462,9 @@ tests: go: 'primitive.Regex{Pattern: "ab+c", Options: "gi"}' - description: regex object with regex literal arg input: - shell: 'new RegExp(/ab+c/, ''i'')' + shell: "new RegExp(/ab+c/, 'i')" output: - javascript: 'new RegExp(''ab+c'', ''i'')' + javascript: "new RegExp('ab+c', 'i')" python: re.compile(r"ab+c(?i)") java: Pattern.compile("ab+c(?i)") csharp: new Regex("(?i)ab+c") diff --git a/packages/bson-transpilers/test/yaml/non-idiomatic.yaml b/packages/bson-transpilers/test/yaml/non-idiomatic.yaml index 19f2217b02a..acd4da6879c 100644 --- a/packages/bson-transpilers/test/yaml/non-idiomatic.yaml +++ b/packages/bson-transpilers/test/yaml/non-idiomatic.yaml @@ -19,13 +19,13 @@ tests: go: 'bson.D{{"x", 1}}' - description: Doc with trailing comma input: - shell: '{x: ''x''}' + shell: "{x: 'x'}" output: java: 'new Document("x", "x")' go: 'bson.D{{"x", "x"}}' - description: Doc with array input: - shell: '{x: [''x'', ''y'']}' + shell: "{x: ['x', 'y']}" output: java: 'new Document("x", Arrays.asList("x", "y"))' go: |- @@ -39,7 +39,7 @@ tests: } - description: Doc with subdoc input: - shell: '{x: {y: ''x''}}' + shell: "{x: {y: 'x'}}" output: java: 'new Document("x", new Document("y", "x"))' go: 'bson.D{{"x", bson.D{{"y", "x"}}}}' @@ -51,7 +51,7 @@ tests: go: 'bson.D{}' - description: Doc with declaration input: - shell: '{x: ObjectId(''5ab901c29ee65f5c8550c5b9'')}' + shell: "{x: ObjectId('5ab901c29ee65f5c8550c5b9')}" output: go: |- var objectIDFromHex = func(hex string) primitive.ObjectID { @@ -65,7 +65,7 @@ tests: bson.D{{"x", objectIDFromHex("5ab901c29ee65f5c8550c5b9")}} - description: Two items in document input: - shell: '{x: ''x'', n: ''4''}' + shell: "{x: 'x', n: '4'}" output: java: |- new Document("x", "x") @@ -124,7 +124,7 @@ tests: } - description: Array with subdoc input: - shell: '[''x'', { settings: ''http2'' }]' + shell: "['x', { settings: 'http2' }]" output: java: |- Arrays.asList("x", diff --git a/packages/bson-transpilers/test/yaml/partial.yaml b/packages/bson-transpilers/test/yaml/partial.yaml index 5d7876eee65..8f1f92fa9e4 100644 --- a/packages/bson-transpilers/test/yaml/partial.yaml +++ b/packages/bson-transpilers/test/yaml/partial.yaml @@ -521,7 +521,7 @@ tests: java: Decimal128.parse("5.3E-6175").toString csharp: Decimal128.Parse("5.3E-6175").ToString php: (string) new Decimal128('5.3E-6175') - ruby: 'BSON::Decimal128.new(''5.3E-6175'').to_s' + ruby: "BSON::Decimal128.new('5.3E-6175').to_s" go: |- var parseDecimal128 = func(str string) primitive.Decimal128 { d128, err := primitive.ParseDecimal128(str) @@ -646,32 +646,32 @@ tests: shell: BSONSymbol('2').valueOf output: javascript: new BSONSymbol('2').valueOf - python: '''2''' + python: "'2'" java: new Symbol("2").getSymbol csharp: '"2"' - php: '''2''' - ruby: ':''2''' + php: "'2'" + ruby: ":'2'" go: '' rust: 'Bson::Symbol("2").as_symbol().unwrap()' - input: shell: BSONSymbol('2').toString output: javascript: new BSONSymbol('2').toString - python: '''2''' + python: "'2'" java: new Symbol("2").toString csharp: '"2"' - php: '''2''' - ruby: '''2''' + php: "'2'" + ruby: "'2'" go: '' rust: 'Bson::Symbol("2").as_symbol().unwrap()' - input: shell: BSONSymbol('2').inspect output: javascript: new BSONSymbol('2').inspect - python: '''2''' + python: "'2'" java: new Symbol("2").getSymbol csharp: '"2"' - php: '''2''' - ruby: ':''2''.inspect' + php: "'2'" + ruby: ":'2'.inspect" go: '' rust: 'format!("{:?}", Bson::Symbol("2"))' diff --git a/packages/compass-e2e-tests/.prettierignore b/packages/compass-e2e-tests/.prettierignore index 104b57fc109..3f0e8eed2a2 100644 --- a/packages/compass-e2e-tests/.prettierignore +++ b/packages/compass-e2e-tests/.prettierignore @@ -3,3 +3,7 @@ fixtures .nyc_output coverage + +# Generated files +electron-versions.json +write-electron-versions.js diff --git a/packages/compass/.prettierignore b/packages/compass/.prettierignore index 7a1718f5dc6..57051100119 100644 --- a/packages/compass/.prettierignore +++ b/packages/compass/.prettierignore @@ -3,3 +3,6 @@ dist coverage build src/deps + +# Generated +THIRD-PARTY-NOTICES.md diff --git a/packages/hadron-build/.eslintrc b/packages/hadron-build/.eslintrc index 7365f2aeaa1..367578bba00 100644 --- a/packages/hadron-build/.eslintrc +++ b/packages/hadron-build/.eslintrc @@ -7,9 +7,7 @@ "ecmaVersion": 2020 }, "extends": ["@mongodb-js/eslint-config-compass/plugin"], - "plugins": [ - "mocha" - ], + "plugins": ["mocha"], "rules": { "mocha/no-mocha-arrows": 0, "mocha/no-setup-in-describe": 0, diff --git a/packages/hadron-build/.prettierignore b/packages/hadron-build/.prettierignore new file mode 100644 index 00000000000..fce9904de74 --- /dev/null +++ b/packages/hadron-build/.prettierignore @@ -0,0 +1 @@ +test/fixtures/ \ No newline at end of file diff --git a/packages/hadron-build/.prettierrc.json b/packages/hadron-build/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/hadron-build/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/hadron-build/README.md b/packages/hadron-build/README.md index 7394ed59470..82a0fd19b65 100644 --- a/packages/hadron-build/README.md +++ b/packages/hadron-build/README.md @@ -38,7 +38,6 @@ Options: --help Show help [boolean] ``` - ## Configuration ```json @@ -69,12 +68,11 @@ Options: "test-check-ci": "npm run test", "compile-ui": "hadron-build ui", "fmt": "hadron-build fmt", - "release": "hadron-build release", + "release": "hadron-build release" } } ``` - ### build.win32 #### build.win32.icon @@ -117,7 +115,7 @@ var appBundleId = 'com.mongodb.hadron'; ### Windows -- `C:\Users\${username}\AppData\Local\${_.titlecase(productName)}`: App installation path. Why in a temp dir? Allows installation and auto update without requiring Administrator. +- `C:\Users\${username}\AppData\Local\${_.titlecase(productName)}`: App installation path. Why in a temp dir? Allows installation and auto update without requiring Administrator. - `C:\Users\${username}\AppData\Roaming\${productName}`: The `[userData][electron-app-getPath]` directory - `C:\Users\${username}\AppData\Local\SquirrelTemp\SquirrelSetup.log`: Squirrel.Windows installation log. Global for any app installation that's using Squirrel.Windows. - `C:\Users\${username}\AppData\Local\${_.titlecase(productName)}\SquirrelSetup.log`: Application level Squirrel.Windows log @@ -135,6 +133,7 @@ What you can expect from a successful installation: ``` The following exception might be scary, but it's purely informational and ok to ignore. + ``` 2016-06-24 09:46:12> CheckForUpdateImpl: Couldn't write out staging user ID, this user probably shouldn't get beta anything: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\${username}\AppData\Local\${_.titlecase(productName)}\packages\.betaId'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) @@ -191,6 +190,7 @@ The actual installation: ``` Another exception that might be scary, but it's purely informational and ok to ignore. + ``` 2016-06-24 09:46:18> ApplyReleasesImpl: Couldn't rewrite shim RegKey, most likely no apps are shimmed: System.NullReferenceException: Object reference not set to an instance of an object. at Squirrel.UpdateManager.ApplyReleasesImpl.b__ee(RegistryView view) @@ -199,6 +199,7 @@ Another exception that might be scary, but it's purely informational and ok to i ``` And then finally + ``` 2016-06-24 09:46:18> ApplyReleasesImpl: cleanDeadVersions: for version ${version} 2016-06-24 09:46:18> ApplyReleasesImpl: cleanDeadVersions: exclude folder app-${version} @@ -289,6 +290,6 @@ Which assets are generated depends on the target platform. [npm_url]: https://npmjs.org/package/hadron-build [npm-scripts]: https://docs.npmjs.com/misc/scripts [electron-mocha]: https://github.com/jprichardson/electron-mocha -[electron-app-getPath]: https://github.com/electron/electron/blob/78193a0608b5fa55161e95b7b3845b6bd85af377/docs/api/app.md#appgetpathname +[electron-app-getpath]: https://github.com/electron/electron/blob/78193a0608b5fa55161e95b7b3845b6bd85af377/docs/api/app.md#appgetpathname [appveyor_img]: https://ci.appveyor.com/api/projects/status/n9yqrfsf17s4g1ss?svg=true [appveyor_url]: https://ci.appveyor.com/project/imlucas/hadron-build diff --git a/packages/hadron-build/cli.js b/packages/hadron-build/cli.js index b2018ad4cbc..00f494c1a9b 100755 --- a/packages/hadron-build/cli.js +++ b/packages/hadron-build/cli.js @@ -15,7 +15,7 @@ const yargs = require('yargs') .strict() .env() .help('help') - .fail(function(msg, err) { + .fail(function (msg, err) { cli.abortIfError(err); cli.error(`${msg}\n\n`); yargs.showHelp(); diff --git a/packages/hadron-build/commands/download.js b/packages/hadron-build/commands/download.js index 0caf486e424..fd0468f4657 100644 --- a/packages/hadron-build/commands/download.js +++ b/packages/hadron-build/commands/download.js @@ -15,12 +15,12 @@ const describe = 'Download all `release` assets from evergreen bucket'; const builder = { dir: { description: 'Project root directory', - default: process.cwd() + default: process.cwd(), }, version: { description: 'Target version', - default: require(path.join(process.cwd(), 'package.json')).version - } + default: require(path.join(process.cwd(), 'package.json')).version, + }, }; const handler = function handler(argv) { @@ -34,7 +34,7 @@ const handler = function handler(argv) { return assets; }); - const downloads = assetsToDownload.map(async(asset) => { + const downloads = assetsToDownload.map(async (asset) => { const shortPath = path.relative(root, asset.path); cli.info( `${asset.name}: download from evg bucket started (path: ${shortPath})` @@ -50,5 +50,5 @@ module.exports = { command, describe, builder, - handler + handler, }; diff --git a/packages/hadron-build/commands/info.js b/packages/hadron-build/commands/info.js index 7465ca13519..52ec0afb105 100644 --- a/packages/hadron-build/commands/info.js +++ b/packages/hadron-build/commands/info.js @@ -14,44 +14,45 @@ exports.describe = 'Display project info.'; exports.builder = { verbose: { - describe: 'Confused or trying to track down a bug and want lots of debug output?', + describe: + 'Confused or trying to track down a bug and want lots of debug output?', type: 'boolean', - default: false + default: false, }, format: { choices: ['table', 'yaml', 'json'], description: 'What output format would you like?', - default: 'table' + default: 'table', }, flatten: { description: 'Flatten the config object into dot notation', type: 'boolean', - default: false + default: false, }, dir: { description: 'Project root directory', - default: process.cwd() + default: process.cwd(), }, version: { description: 'Target version', - default: undefined + default: undefined, }, platform: { description: 'Target platform', - default: undefined + default: undefined, }, arch: { description: 'Target arch', - default: undefined + default: undefined, }, out: { description: 'Output file path', - default: undefined - } + default: undefined, + }, }; const serialize = (target) => { - return _.omitBy(target, function(value) { + return _.omitBy(target, function (value) { return _.isFunction(value) || _.isRegExp(value) || _.isUndefined(value); }); }; @@ -61,13 +62,16 @@ const toTable = (target) => { * Print the assembled `CONFIG` data as a nice table. */ var configTable = new Table({ - head: ['Key', 'Value'] + head: ['Key', 'Value'], }); - _.forIn(target, function(value, key) { - configTable.push([key, inspect(value, { - depth: null, - colors: true - })]); + _.forIn(target, function (value, key) { + configTable.push([ + key, + inspect(value, { + depth: null, + colors: true, + }), + ]); }); return configTable.toString(); }; @@ -76,7 +80,7 @@ exports.handler = (argv) => { let target = new Target(argv.dir, { version: argv.version, platform: argv.platform, - arch: argv.arch + arch: argv.arch, }); if (argv.flatten) { diff --git a/packages/hadron-build/commands/release.d.ts b/packages/hadron-build/commands/release.d.ts index b93f8d7b484..480c335ffc8 100644 --- a/packages/hadron-build/commands/release.d.ts +++ b/packages/hadron-build/commands/release.d.ts @@ -1,2 +1,2 @@ export function run(argv: any, done: any): void; -export function compileAssets(CONFIG: any, done: any): void; \ No newline at end of file +export function compileAssets(CONFIG: any, done: any): void; diff --git a/packages/hadron-build/commands/release.js b/packages/hadron-build/commands/release.js index 567e9377f6e..d13d19b8684 100644 --- a/packages/hadron-build/commands/release.js +++ b/packages/hadron-build/commands/release.js @@ -43,32 +43,34 @@ exports.describe = ':shipit:'; */ const createBrandedApplication = (CONFIG, done) => { cli.debug('running electron-packager'); - packager(CONFIG.packagerOptions).then((res) => { - cli.debug('Packager result is: ' + JSON.stringify(res, null, 2)); + packager(CONFIG.packagerOptions) + .then((res) => { + cli.debug('Packager result is: ' + JSON.stringify(res, null, 2)); - if (CONFIG.platform !== 'darwin') { - return done(null, true); - } - - /** - * @see https://jira.mongodb.org/browse/INT-1836 - */ - const atomIcns = path.join(CONFIG.resources, 'atom.icns'); - const electronIcns = path.join(CONFIG.resources, 'electron.icns'); - fs.exists(atomIcns, function(exists) { - if (!exists) { + if (CONFIG.platform !== 'darwin') { return done(null, true); } - fs.remove(electronIcns, function(_err) { - if (_err) { - return done(_err); + + /** + * @see https://jira.mongodb.org/browse/INT-1836 + */ + const atomIcns = path.join(CONFIG.resources, 'atom.icns'); + const electronIcns = path.join(CONFIG.resources, 'electron.icns'); + fs.exists(atomIcns, function (exists) { + if (!exists) { + return done(null, true); } - fs.move(atomIcns, electronIcns, done); + fs.remove(electronIcns, function (_err) { + if (_err) { + return done(_err); + } + fs.move(atomIcns, electronIcns, done); + }); }); + }) + .catch((err) => { + return done(err); }); - }).catch((err) => { - return done(err); - }); }; /** @@ -85,7 +87,7 @@ const symlinkExecutable = (CONFIG, done) => { const newPath = path.join(CONFIG.appPath, 'Contents', 'MacOS'); cli.debug('chdir', newPath); process.chdir(newPath); - fs.ensureSymlink(CONFIG.productName, 'Electron', function(_err) { + fs.ensureSymlink(CONFIG.productName, 'Electron', function (_err) { process.chdir(cwd); if (_err) { return done(_err); @@ -116,8 +118,8 @@ const cleanupBrandedApplicationScaffold = (CONFIG, done) => { cli.debug('cleaning up extraneous files from template'); del(globsToDelete, { - force: true - }).then(function(paths) { + force: true, + }).then(function (paths) { cli.debug(format('%d extraneous files removed', paths.length)); done(null, true); }, done); @@ -130,9 +132,11 @@ const cleanupBrandedApplicationScaffold = (CONFIG, done) => { const writeLicenseFile = (CONFIG, done) => { try { const contents = fs.readFileSync(path.join(CONFIG.dir, 'LICENSE')); - CONFIG.write('LICENSE', contents).then(() => { - cli.debug(format('LICENSE written')); - }).then(() => done(null, true)); + CONFIG.write('LICENSE', contents) + .then(() => { + cli.debug(format('LICENSE written')); + }) + .then(() => done(null, true)); } catch (err) { done(err); } @@ -148,9 +152,11 @@ const copy3rdPartyNoticesFile = (CONFIG, done) => { try { const noticesPath = path.join(CONFIG.dir, 'THIRD-PARTY-NOTICES.md'); const contents = fs.readFileSync(noticesPath); - CONFIG.write('THIRD-PARTY-NOTICES.md', contents).then(() => { - cli.debug(format('THIRD-PARTY-NOTICES.md written')); - }).then(() => done(null, true)); + CONFIG.write('THIRD-PARTY-NOTICES.md', contents) + .then(() => { + cli.debug(format('THIRD-PARTY-NOTICES.md written')); + }) + .then(() => done(null, true)); } catch (err) { done(err); } @@ -164,12 +170,19 @@ const copySBOMFile = (CONFIG, done) => { try { const sbomPath = path.join(CONFIG.dir, '..', '..', '.sbom', 'sbom.json'); const contents = fs.readFileSync(sbomPath); - CONFIG.write('.sbom.json', contents).then(() => { - cli.debug(format('.sbom.json written')); - }).then(() => done(null, true)); + CONFIG.write('.sbom.json', contents) + .then(() => { + cli.debug(format('.sbom.json written')); + }) + .then(() => done(null, true)); } catch (err) { - if (err.code === 'ENOENT' && !process.env.COMPASS_WAS_COMPILED_AND_HAS_SBOM) { - cli.debug(format('Skipping sbom.json writing because the file is missing')); + if ( + err.code === 'ENOENT' && + !process.env.COMPASS_WAS_COMPILED_AND_HAS_SBOM + ) { + cli.debug( + format('Skipping sbom.json writing because the file is missing') + ); return done(null, true); } done(err); @@ -179,7 +192,10 @@ const copySBOMFile = (CONFIG, done) => { // Remove a malicious link from chromium license // See: COMPASS-5333 const fixCompass5333 = (CONFIG, done) => { - const chromiumLicensePath = path.join(CONFIG.distRoot(), 'LICENSES.chromium.html'); + const chromiumLicensePath = path.join( + CONFIG.distRoot(), + 'LICENSES.chromium.html' + ); const chromiumLicense = fs.readFileSync(chromiumLicensePath, 'utf8'); @@ -191,7 +207,6 @@ const fixCompass5333 = (CONFIG, done) => { done(); }; - /** * Replace the version file `electron-packager` creates w/ a version * file specific to the project. @@ -208,13 +223,13 @@ const writeVersionFile = (CONFIG, done) => { const version = CONFIG.packagerOptions.electronVersion; return CONFIG.write('version', version) - .then(dest => { + .then((dest) => { cli.debug(format('version `%s` written to `%s`', version, dest)); if (done) { done(null, true); } }) - .catch(err => { + .catch((err) => { if (done) { return done(err); } @@ -231,14 +246,14 @@ const writeVersionFile = (CONFIG, done) => { * @param {Function} done * @api public */ -const transformPackageJson = async(CONFIG, done) => { +const transformPackageJson = async (CONFIG, done) => { const PACKAGE_JSON_DEST = path.join(CONFIG.resourcesAppDir, 'package.json'); const packageKeysToRemove = [ 'devDependencies', 'dependency-check', 'repository', 'check', - 'config.hadron.build' + 'config.hadron.build', ]; let contents = _.omit(CONFIG.pkg, packageKeysToRemove); @@ -246,7 +261,7 @@ const transformPackageJson = async(CONFIG, done) => { _.assign(contents, { channel: CONFIG.channel, version: CONFIG.version, - distribution: CONFIG.distribution + distribution: CONFIG.distribution, }); /** @@ -255,7 +270,7 @@ const transformPackageJson = async(CONFIG, done) => { */ const distributions = contents.config.hadron.distributions; _.assign(contents, { - productName: CONFIG.productName + productName: CONFIG.productName, }); distributions[contents.distribution].productName = CONFIG.productName; distributions[contents.distribution].metrics_intercom_app_id = @@ -282,7 +297,7 @@ const transformPackageJson = async(CONFIG, done) => { for (const depType of [ 'dependencies', 'peerDependencies', - 'optionalDependencies' + 'optionalDependencies', ]) { for (const depName of Object.keys(contents[depType] || {})) { const depEdge = packageNode.edgesOut.get(depName); @@ -320,7 +335,7 @@ const transformPackageJson = async(CONFIG, done) => { * @param {Function} done * @api public */ -const installDependencies = util.callbackify(async(CONFIG) => { +const installDependencies = util.callbackify(async (CONFIG) => { let originalPackagePath = CONFIG.resourcesAppDir; let appPackagePath = originalPackagePath; @@ -333,8 +348,11 @@ const installDependencies = util.callbackify(async(CONFIG) => { appPackagePath = path.join( process.env.EVERGREEN_WORKDIR.replace(/^\/cygdrive\/(\w)\//, '$1:\\'), 'src', - 'app'); - cli.debug(`Moving app package path from ${originalPackagePath} to ${appPackagePath}`); + 'app' + ); + cli.debug( + `Moving app package path from ${originalPackagePath} to ${appPackagePath}` + ); await fs.promises.rename(originalPackagePath, appPackagePath); } @@ -342,7 +360,7 @@ const installDependencies = util.callbackify(async(CONFIG) => { const opts = { cwd: appPackagePath, - shell: true + shell: true, }; await run.async('npm', ['install', '--production'], opts); @@ -369,7 +387,7 @@ const installDependencies = util.callbackify(async(CONFIG) => { // --build-from-source flag to rebuild-install package, but we can force // rebuild by providing a tag prefix that will make prebuild think that // prebuilt files don't exist - prebuildTagPrefix: 'totally-not-a-real-prefix-to-force-rebuild' + prebuildTagPrefix: 'totally-not-a-real-prefix-to-force-rebuild', }; // We can not force rebuild mongodb-client-encryption locally, but we need to @@ -377,9 +395,7 @@ const installDependencies = util.callbackify(async(CONFIG) => { // so let's run rebuild again. const clientEncryptionRebuildConfig = { ...sharedRebuildConfig, - onlyModules: [ - 'mongodb-client-encryption', - ], + onlyModules: ['mongodb-client-encryption'], }; await rebuild(allModulesRebuildConfig); @@ -387,8 +403,10 @@ const installDependencies = util.callbackify(async(CONFIG) => { cli.debug('Native modules rebuilt against Electron.'); if (originalPackagePath !== appPackagePath) { - cli.debug(`Moving app package back to ${originalPackagePath} from ${appPackagePath}`); - await fs.promises.rename(appPackagePath, originalPackagePath) + cli.debug( + `Moving app package back to ${originalPackagePath} from ${appPackagePath}` + ); + await fs.promises.rename(appPackagePath, originalPackagePath); } }); @@ -415,7 +433,7 @@ const removeDevelopmentFiles = (CONFIG, done) => { '.jsfmt*', '.git*', 'report*', - '*.less' + '*.less', ]; var globsToDelete = [ @@ -428,13 +446,15 @@ const removeDevelopmentFiles = (CONFIG, done) => { path.join(CONFIG.resourcesAppDir, '{' + DOT_FILES.join(',') + '}'), // node-gyp creates symlinks for build purposes, but doesn't clean them up // afterwards https://github.com/nodejs/node-gyp/issues/2713 - path.join(CONFIG.resourcesAppDir, '**', 'node_gyp_bins') + path.join(CONFIG.resourcesAppDir, '**', 'node_gyp_bins'), ]; - cli.debug('Checking for extraneous files to remove:\n' + - JSON.stringify(globsToDelete, null, 2)); + cli.debug( + 'Checking for extraneous files to remove:\n' + + JSON.stringify(globsToDelete, null, 2) + ); - del(globsToDelete).then(function(paths) { + del(globsToDelete).then(function (paths) { if (paths.length === 0) { cli.debug('No extraneous files to remove'); } else { @@ -465,22 +485,25 @@ const createApplicationAsar = (CONFIG, done) => { ...CONFIG.asar, unpack: `{${['*.node', '**/vendor/**'] .concat(CONFIG.asar.unpack) - .join(',')}}` + .join(',')}}`, }; var src = CONFIG.resourcesAppDir; var dest = `${CONFIG.resourcesAppDir}.asar`; - asar.createPackageWithOptions(src, dest, opts).then(() => { - del(src, { force: true }).then(() => { + asar + .createPackageWithOptions(src, dest, opts) + .then(() => { + del(src, { force: true }).then(() => { + done(); + }, done); + }) + .catch((err) => { + if (err) { + cli.error(err); + } done(); - }, done); - }).catch((err) => { - if (err) { - cli.error(err); - } - done(); - }); + }); }; /** @@ -492,7 +515,9 @@ const createApplicationAsar = (CONFIG, done) => { */ const createBrandedInstaller = (CONFIG, done) => { cli.debug('Creating installer'); - CONFIG.createInstaller().then(() => done()).catch(done); + CONFIG.createInstaller() + .then(() => done()) + .catch(done); }; const writeConfigToJson = (CONFIG, done) => { @@ -506,19 +531,18 @@ const writeConfigToJson = (CONFIG, done) => { exports.builder = { dir: { description: 'Project root directory', - default: process.cwd() + default: process.cwd(), }, skip_installer: { description: 'Skip installer generation', - default: false + default: false, }, no_asar: { description: 'Do not package application source to .asar bundle', - default: false - } + default: false, + }, }; - /** * @param {any} argv Parsed command arguments * @param {Function} done Callback @@ -532,17 +556,18 @@ exports.run = async (argv, done) => { cli.debug(`Building distribution: ${target.distribution}`); const task = (name, fn) => { - return () => new Promise((resolve, reject) => { - cli.debug(`start: ${name}`); - fn(target, (err) => { - if (err) { - cli.error(err); - return reject(err); - } - cli.debug(`completed: ${name}`); - return resolve(); + return () => + new Promise((resolve, reject) => { + cli.debug(`start: ${name}`); + fn(target, (err) => { + if (err) { + cli.error(err); + return reject(err); + } + cli.debug(`completed: ${name}`); + return resolve(); + }); }); - }); }; const skipInstaller = @@ -550,31 +575,37 @@ exports.run = async (argv, done) => { const noAsar = process.env.NO_ASAR === 'true' || argv.no_asar; - const tasks = _.flatten([ - task('copy npmrc from root', ({ dir }, done) => { - fs.cp( - path.resolve(dir, '..', '..', '.npmrc'), - path.resolve(dir, '.npmrc'), - done - ); - }), - task('create branded application', createBrandedApplication), - task('create executable symlink', symlinkExecutable), - task('cleanup branded application scaffold', cleanupBrandedApplicationScaffold), - task('write version file', writeVersionFile), - task('transform package.json', transformPackageJson), - task('install dependencies', installDependencies), - task('fix COMPASS-5333', fixCompass5333), - task('write license file', writeLicenseFile), - task('write 3rd party notices file', copy3rdPartyNoticesFile), - task('write sbom file', copySBOMFile), - task('remove development files', removeDevelopmentFiles), - !noAsar && task('create application asar', createApplicationAsar), - !skipInstaller && task('create branded installer', createBrandedInstaller), - task('create application zip', createApplicationZip), - task('sign zip', signArchive), - task('store build configuration as json', writeConfigToJson) - ].filter(Boolean)); + const tasks = _.flatten( + [ + task('copy npmrc from root', ({ dir }, done) => { + fs.cp( + path.resolve(dir, '..', '..', '.npmrc'), + path.resolve(dir, '.npmrc'), + done + ); + }), + task('create branded application', createBrandedApplication), + task('create executable symlink', symlinkExecutable), + task( + 'cleanup branded application scaffold', + cleanupBrandedApplicationScaffold + ), + task('write version file', writeVersionFile), + task('transform package.json', transformPackageJson), + task('install dependencies', installDependencies), + task('fix COMPASS-5333', fixCompass5333), + task('write license file', writeLicenseFile), + task('write 3rd party notices file', copy3rdPartyNoticesFile), + task('write sbom file', copySBOMFile), + task('remove development files', removeDevelopmentFiles), + !noAsar && task('create application asar', createApplicationAsar), + !skipInstaller && + task('create branded installer', createBrandedInstaller), + task('create application zip', createApplicationZip), + task('sign zip', signArchive), + task('store build configuration as json', writeConfigToJson), + ].filter(Boolean) + ); try { for (const task of tasks) { @@ -597,7 +628,7 @@ exports.handler = (argv) => { exports.run(argv, (_err, CONFIG) => { cli.abortIfError(_err); cli.ok(`${CONFIG.assets.length} assets successfully built`); - CONFIG.assets.map(function(asset) { + CONFIG.assets.map(function (asset) { cli.info(asset.path); }); }); diff --git a/packages/hadron-build/commands/upload.js b/packages/hadron-build/commands/upload.js index 1a1789749e5..340847b6637 100644 --- a/packages/hadron-build/commands/upload.js +++ b/packages/hadron-build/commands/upload.js @@ -19,7 +19,7 @@ const { getKeyPrefix, downloadManifest, uploadAsset, - uploadManifest + uploadManifest, } = require('../lib/download-center'); const cli = require('mongodb-js-cli')('hadron-build:upload'); @@ -28,7 +28,7 @@ const root = path.resolve(__dirname, '..', '..', '..'); async function checkAssetsExist(paths) { await Promise.all( - paths.map(async(assetPath) => { + paths.map(async (assetPath) => { const stats = await fs.stat(assetPath); if (!stats.isFile()) { throw new TypeError(`Not a file at path ${assetPath}`); @@ -48,12 +48,12 @@ function isStable(id) { const distributionLabel = { 'compass-readonly': 'Readonly Edition', - 'compass-isolated': 'Isolated Edition' + 'compass-isolated': 'Isolated Edition', }; const channelLabel = { stable: 'Stable', - beta: 'Beta' + beta: 'Beta', }; function versionId(version, distribution = '') { @@ -129,10 +129,10 @@ function generateVersionsForAssets(assets, version, channel) { config.platform, asset.name ), - download_link: link + download_link: link, }; }); - }) + }), }; }); } @@ -145,13 +145,13 @@ async function publishGitHubRelease(assets, version, channel, dryRun) { } const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN + auth: process.env.GITHUB_TOKEN, }); const repo = new GithubRepo( { owner: 'mongodb-js', - repo: 'compass' + repo: 'compass', }, octokit ); @@ -161,7 +161,7 @@ async function publishGitHubRelease(assets, version, channel, dryRun) { const release = { name: version, tag: releaseTag, - notes: `Release v${version}` + notes: `Release v${version}`, }; cli.info('Updating draft release…'); @@ -214,10 +214,9 @@ async function publishGitHubRelease(assets, version, channel, dryRun) { } async function uploadAssetsToDownloadCenter(assets, channel, dryRun) { - const assetsToUpload = assets - .flatMap((item) => { - return item.assets; - }); + const assetsToUpload = assets.flatMap((item) => { + return item.assets; + }); cli.info('Uploading assets to download center…'); @@ -227,7 +226,7 @@ async function uploadAssetsToDownloadCenter(assets, channel, dryRun) { }) ); - const uploads = assetsToUpload.map(async(asset) => { + const uploads = assetsToUpload.map(async (asset) => { cli.info( `${asset.name}: upload to download center started (path: ${path.relative( root, @@ -249,7 +248,7 @@ async function uploadAssetsToDownloadCenter(assets, channel, dryRun) { */ async function getLatestRelease(channel = 'stable') { const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN + auth: process.env.GITHUB_TOKEN, }); const page = 1; @@ -265,7 +264,7 @@ async function getLatestRelease(channel = 'stable') { owner: 'mongodb-js', repo: 'compass', per_page: 100, - page + page, } ); releases = data; @@ -341,7 +340,7 @@ async function updateManifest(dryRun) { previous_releases_link: '', development_releases_link: '', supported_browsers_link: '', - tutorial_link: '' + tutorial_link: '', }; if (isDeepStrictEqual(currentManifest, newManifest)) { @@ -371,22 +370,22 @@ const describe = 'Upload assets from `release`.'; const builder = { dir: { description: 'Project root directory', - default: process.cwd() + default: process.cwd(), }, version: { description: 'Target version', - default: require(path.join(process.cwd(), 'package.json')).version + default: require(path.join(process.cwd(), 'package.json')).version, }, manifest: { description: 'Upload download center manifest update for the target version (NOTE: This will will replace existing version for the channel with the provided one for all existing and newly added assets)', - default: false + default: false, }, ['dry-run']: { description: 'Does everything the real script will do without actually publishing assets to GH / download center', - default: process.env.npm_config_dry_run === 'true' - } + default: process.env.npm_config_dry_run === 'true', + }, }; const handler = function handler(argv) { @@ -430,7 +429,7 @@ const handler = function handler(argv) { return; } const channelToProjectMap = { - testing: 'beta' + testing: 'beta', }; const mappedChannel = channelToProjectMap[projectChannel] || projectChannel; if (channel !== mappedChannel) { @@ -461,5 +460,5 @@ module.exports = { uploadAssetsToDownloadCenter, getLatestRelease, getLatestReleaseVersions, - updateManifest + updateManifest, }; diff --git a/packages/hadron-build/index.js b/packages/hadron-build/index.js index e76cf08e3d4..dd1acfe43ab 100644 --- a/packages/hadron-build/index.js +++ b/packages/hadron-build/index.js @@ -1,5 +1,5 @@ 'use strict'; -exports = function() {}; +exports = function () {}; exports.release = require('./commands/release'); exports.upload = require('./commands/upload'); diff --git a/packages/hadron-build/lib/download-center.js b/packages/hadron-build/lib/download-center.js index 320e96518bd..b68ed07b3d1 100644 --- a/packages/hadron-build/lib/download-center.js +++ b/packages/hadron-build/lib/download-center.js @@ -22,13 +22,13 @@ const requireEnvironmentVariables = (keys) => { const getDownloadCenter = (bucketConfig) => { requireEnvironmentVariables([ 'DOWNLOAD_CENTER_AWS_ACCESS_KEY_ID', - 'DOWNLOAD_CENTER_AWS_SECRET_ACCESS_KEY' + 'DOWNLOAD_CENTER_AWS_SECRET_ACCESS_KEY', ]); return new DownloadCenter({ ...bucketConfig, accessKeyId: process.env.DOWNLOAD_CENTER_AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.DOWNLOAD_CENTER_AWS_SECRET_ACCESS_KEY + secretAccessKey: process.env.DOWNLOAD_CENTER_AWS_SECRET_ACCESS_KEY, }); }; @@ -36,28 +36,28 @@ const getKeyPrefix = (channel) => { return channel && channel !== 'stable' ? `compass/${channel}` : 'compass'; }; -const uploadAsset = async(channel, asset) => { +const uploadAsset = async (channel, asset) => { const dlCenter = getDownloadCenter({ bucket: DOWNLOADS_BUCKET }); const objectKey = `${getKeyPrefix(channel)}/${asset.name}`; return dlCenter.uploadAsset(objectKey, fs.createReadStream(asset.path)); }; -const downloadManifest = async(key = MANIFEST_OBJECT_KEY) => { +const downloadManifest = async (key = MANIFEST_OBJECT_KEY) => { const dlCenter = getDownloadCenter({ bucket: MANIFEST_BUCKET }); return dlCenter.downloadConfig(key); }; -const uploadManifest = async(manifest) => { +const uploadManifest = async (manifest) => { const dlCenter = getDownloadCenter({ bucket: MANIFEST_BUCKET }); return dlCenter.uploadConfig(MANIFEST_OBJECT_KEY, manifest); }; const downloadAssetFromEvergreen = ({ name, path: dest }) => { // eslint-disable-next-line no-async-promise-executor - return new Promise(async(resolve, reject) => { + return new Promise(async (resolve, reject) => { requireEnvironmentVariables([ 'EVERGREEN_BUCKET_NAME', - 'EVERGREEN_BUCKET_KEY_PREFIX' + 'EVERGREEN_BUCKET_KEY_PREFIX', ]); const bucket = process.env.EVERGREEN_BUCKET_NAME; const key = `${process.env.EVERGREEN_BUCKET_KEY_PREFIX}/${name}`; @@ -77,5 +77,5 @@ module.exports = { uploadAsset, downloadManifest, uploadManifest, - downloadAssetFromEvergreen + downloadAssetFromEvergreen, }; diff --git a/packages/hadron-build/lib/mac-notary-service.js b/packages/hadron-build/lib/mac-notary-service.js index 9122024189d..a36198f3307 100644 --- a/packages/hadron-build/lib/mac-notary-service.js +++ b/packages/hadron-build/lib/mac-notary-service.js @@ -16,7 +16,7 @@ async function setupMacosNotary() { debug('downloading macnotary'); await download(process.env.MACOS_NOTARY_CLIENT_URL, 'macnotary', { extract: true, - strip: 1 // remove leading platform + arch directory + strip: 1, // remove leading platform + arch directory }); await fs.chmod('macnotary/macnotary', 0o755); // ensure +x is set } @@ -58,17 +58,31 @@ async function notarize(src, notarizeOptions) { try { // Step:2 - send the zip to notary service and save the result to signedArchive - debug(`sending file to notary service (bundle id = ${notarizeOptions.bundleId})`); - const macnotaryResult = await execFile(path.resolve('macnotary/macnotary'), [ - '-t', 'app', - '-m', 'notarizeAndSign', - '-u', process.env.MACOS_NOTARY_API_URL, - '-b', notarizeOptions.bundleId, - '-f', unsignedArchive, - '-o', signedArchive, - '--verify', - ...(notarizeOptions.macosEntitlements ? ['-e', notarizeOptions.macosEntitlements] : []) - ], execOpts); + debug( + `sending file to notary service (bundle id = ${notarizeOptions.bundleId})` + ); + const macnotaryResult = await execFile( + path.resolve('macnotary/macnotary'), + [ + '-t', + 'app', + '-m', + 'notarizeAndSign', + '-u', + process.env.MACOS_NOTARY_API_URL, + '-b', + notarizeOptions.bundleId, + '-f', + unsignedArchive, + '-o', + signedArchive, + '--verify', + ...(notarizeOptions.macosEntitlements + ? ['-e', notarizeOptions.macosEntitlements] + : []), + ], + execOpts + ); debug('macnotary result:', macnotaryResult.stdout, macnotaryResult.stderr); debug('ls', (await execFile('ls', ['-lh'], execOpts)).stdout); @@ -78,16 +92,23 @@ async function notarize(src, notarizeOptions) { debug(`unzipping with "unzip -u ${signedArchive}"`); await execFile('unzip', ['-u', signedArchive], execOpts); } catch (err) { - debug('full macnotary error output', inspect(err, { - maxArrayLength: Infinity, - maxStringLength: Infinity - })); + debug( + 'full macnotary error output', + inspect(err, { + maxArrayLength: Infinity, + maxStringLength: Infinity, + }) + ); throw err; } finally { // cleanup - remove signedArchive and unsignedArchive debug('ls', (await execFile('ls', ['-lh'], execOpts)).stdout); debug(`removing ${signedArchive} and ${unsignedArchive}`); - await execFile('rm', ['-r', signedArchive, unsignedArchive], execOpts).catch(err => { + await execFile( + 'rm', + ['-r', signedArchive, unsignedArchive], + execOpts + ).catch((err) => { debug('error cleaning up', err); }); } diff --git a/packages/hadron-build/lib/run.js b/packages/hadron-build/lib/run.js index 303cbc73c08..f2249aa178e 100644 --- a/packages/hadron-build/lib/run.js +++ b/packages/hadron-build/lib/run.js @@ -41,33 +41,45 @@ function run(cmd, args, opts, fn) { var output = []; var proc = spawn(cmd, args, opts); - proc.stdout.on('data', function(buf) { - buf.toString('utf-8').split('\n').map(function(line) { - debug(' %s> %s', cmd, line); - }); + proc.stdout.on('data', function (buf) { + buf + .toString('utf-8') + .split('\n') + .map(function (line) { + debug(' %s> %s', cmd, line); + }); output.push(buf); }); - proc.stderr.on('data', function(buf) { - buf.toString('utf-8').split('\n').map(function(line) { - debug(' %s> %s', cmd, line); - }); + proc.stderr.on('data', function (buf) { + buf + .toString('utf-8') + .split('\n') + .map(function (line) { + debug(' %s> %s', cmd, line); + }); output.push(buf); }); - proc.on('exit', function(code) { + proc.on('exit', function (code) { const _output = Buffer.concat(output).toString('utf-8'); if (code !== 0) { debug('command failed!', { cmd, output: _output }); - const error = new Error(`Command failed with exit code ${code}: ${cmd} ${args.join(' ')} [enable line-by-line output via 'DEBUG=hadron*']`); + const error = new Error( + `Command failed with exit code ${code}: ${cmd} ${args.join( + ' ' + )} [enable line-by-line output via 'DEBUG=hadron*']` + ); error.output = { output: _output, - [util.inspect.custom]() { return util.inspect(_output, { maxStringLength: Infinity }); } + [util.inspect.custom]() { + return util.inspect(_output, { maxStringLength: Infinity }); + }, }; fn(error); return; } debug('completed! %j', { - cmd: cmd + cmd: cmd, }); fn(null, _output); diff --git a/packages/hadron-build/lib/signtool.js b/packages/hadron-build/lib/signtool.js index 4966dc2689e..092029ad155 100644 --- a/packages/hadron-build/lib/signtool.js +++ b/packages/hadron-build/lib/signtool.js @@ -3,12 +3,11 @@ const path = require('path'); const debug = require('debug')('hadron-build:target'); const { sign: _garasign } = require('@mongodb-js/signing-utils'); -const canSign = () => ( +const canSign = () => process.env.GARASIGN_USERNAME && process.env.GARASIGN_PASSWORD && process.env.ARTIFACTORY_USERNAME && - process.env.ARTIFACTORY_PASSWORD -); + process.env.ARTIFACTORY_PASSWORD; /** * When using gpg to sign a file, it creates a signature file diff --git a/packages/hadron-build/lib/target.js b/packages/hadron-build/lib/target.js index e716adc35b8..873ba6c302c 100644 --- a/packages/hadron-build/lib/target.js +++ b/packages/hadron-build/lib/target.js @@ -7,7 +7,8 @@ const semver = require('semver'); const path = require('path'); const normalizePkg = require('normalize-package-data'); const parseGitHubRepoURL = require('parse-github-repo-url'); -const ffmpegAfterExtract = require('electron-packager-plugin-non-proprietary-codecs-ffmpeg').default; +const ffmpegAfterExtract = + require('electron-packager-plugin-non-proprietary-codecs-ffmpeg').default; const windowsInstallerVersion = require('./windows-installer-version'); const debug = require('debug')('hadron-build:target'); const which = require('which'); @@ -49,7 +50,7 @@ function _canBuildInstaller(ext) { function ifEnvironmentCanBuild(ext, fn) { debug('checking if environment can build installer for %s', ext); - return _canBuildInstaller(ext).then(function(can) { + return _canBuildInstaller(ext).then(function (can) { debug('can build installer for %s?', ext, true); if (!can) return false; return fn(); @@ -72,7 +73,7 @@ function getPkg(directory) { _.defaults(pkg, { productName: pkg.name, author: pkg.authors, - electronVersion: require('electron/package.json').version + electronVersion: require('electron/package.json').version, }); return pkg; @@ -82,13 +83,13 @@ const supportedPlatforms = [ { platform: 'darwin', arch: 'x64' }, { platform: 'darwin', arch: 'arm64' }, { platform: 'linux', arch: 'x64' }, - { platform: 'win32', arch: 'x64' } + { platform: 'win32', arch: 'x64' }, ]; const supportedDistributions = [ 'compass', 'compass-readonly', - 'compass-isolated' + 'compass-isolated', ]; class Target { @@ -137,7 +138,7 @@ class Target { isolated: typeof process.env.HADRON_ISOLATED !== 'undefined' ? ['1', 'true'].includes(process.env.HADRON_ISOLATED) - : undefined + : undefined, }, distributions[this.distribution] ); @@ -211,10 +212,13 @@ class Target { arch: this.arch, electronVersion: this.electronVersion, sign: null, - afterExtract: [ffmpegAfterExtract] + afterExtract: [ffmpegAfterExtract], }; - validateBuildConfig(this.platform, this.pkg.config.hadron.build[this.platform]); + validateBuildConfig( + this.platform, + this.pkg.config.hadron.build[this.platform] + ); if (this.platform === 'win32') { this.configureForWin32(); @@ -239,7 +243,7 @@ class Target { 'channel', 'assets', 'packagerOptions', - 'installerOptions' + 'installerOptions', ]) ); } @@ -315,8 +319,8 @@ class Target { CompanyName: this.author, FileDescription: this.description, ProductName: this.productName, - InternalName: this.name - } + InternalName: this.name, + }, }); this.appPath = this.dest( @@ -345,26 +349,26 @@ class Target { this.windows_nupkg_full_label = this.windows_nupkg_full_filename = `${this.packagerOptions.name}-${nuggetVersion}-full.nupkg`; - this.windows_zip_sign_label = - this.windows_zip_sign_filename = getSignedFilename(this.windows_zip_filename); - this.windows_nupkg_full_sign_label = - this.windows_nupkg_full_sign_filename = getSignedFilename(this.windows_nupkg_full_filename); + this.windows_zip_sign_label = this.windows_zip_sign_filename = + getSignedFilename(this.windows_zip_filename); + this.windows_nupkg_full_sign_label = this.windows_nupkg_full_sign_filename = + getSignedFilename(this.windows_nupkg_full_filename); this.assets = [ { name: this.windows_setup_label, path: this.dest(this.windows_setup_label), - downloadCenter: true + downloadCenter: true, }, { name: this.windows_msi_label, path: this.dest(this.windows_msi_label), - downloadCenter: true + downloadCenter: true, }, { name: this.windows_zip_label, path: this.dest(this.windows_zip_label), - downloadCenter: true + downloadCenter: true, }, { name: this.windows_zip_sign_label, @@ -372,16 +376,16 @@ class Target { }, { name: this.windows_releases_label, - path: this.dest(this.windows_releases_label) + path: this.dest(this.windows_releases_label), }, { name: this.windows_nupkg_full_label, - path: this.dest(this.windows_nupkg_full_label) + path: this.dest(this.windows_nupkg_full_label), }, { name: this.windows_nupkg_full_sign_label, - path: this.dest(this.windows_nupkg_full_sign_label) - } + path: this.dest(this.windows_nupkg_full_sign_label), + }, ]; this.installerOptions = { @@ -411,7 +415,7 @@ class Target { productName: this.productName, description: this.description, name: this.packagerOptions.name, - noMsi: true + noMsi: true, }; /** @@ -425,16 +429,18 @@ class Target { this.installerOptions.setupIcon = this.src(platformSettings.setup_icon); } - this.createInstaller = async() => { + this.createInstaller = async () => { // sign the main application .exe - await sign(path.join(this.installerOptions.appDirectory, this.installerOptions.exe)); + await sign( + path.join(this.installerOptions.appDirectory, this.installerOptions.exe) + ); const electronWinstaller = require('electron-winstaller'); await electronWinstaller.createWindowsInstaller(this.installerOptions); await fs.promises.rename( this.dest('RELEASES'), - this.dest(this.windows_releases_label), + this.dest(this.windows_releases_label) ); const { MSICreator } = require('@mongodb-js/electron-wix-msi'); @@ -457,9 +463,9 @@ class Target { chooseDirectory: true, images: { background: this.src(platformSettings.background), - banner: this.src(platformSettings.banner) - } - } + banner: this.src(platformSettings.banner), + }, + }, }); await msiCreator.create(); @@ -470,7 +476,7 @@ class Target { await fs.promises.rename( this.dest(this.packagerOptions.name + '.msi'), - this.dest(this.windows_msi_label), + this.dest(this.windows_msi_label) ); // sign the nupkg @@ -502,7 +508,7 @@ class Target { icon: this.src(platformSettings.icon), appBundleId: this.bundleId, appCategoryType: platformSettings.app_category_type, - protocols: _.get(this, 'config.hadron.protocols', []) + protocols: _.get(this, 'config.hadron.protocols', []), }); if (this.channel !== 'stable') { @@ -513,8 +519,9 @@ class Target { this.osx_dmg_filename = `${this.id}-${this.version}-${this.platform}-${this.arch}.dmg`; this.osx_zip_label = this.osx_zip_filename = `${this.id}-${this.version}-${this.platform}-${this.arch}.zip`; - this.osx_zip_sign_label = - this.osx_zip_sign_filename = getSignedFilename(this.osx_zip_filename); + this.osx_zip_sign_label = this.osx_zip_sign_filename = getSignedFilename( + this.osx_zip_filename + ); this.assets = [ { @@ -524,12 +531,12 @@ class Target { }, { name: this.osx_zip_label, - path: this.dest(this.osx_zip_label) + path: this.dest(this.osx_zip_label), }, { name: this.osx_zip_sign_label, - path: this.dest(this.osx_zip_sign_label) - } + path: this.dest(this.osx_zip_sign_label), + }, ]; this.installerOptions = { @@ -559,7 +566,7 @@ class Target { x: 322, y: 243, type: 'link', - path: '/Applications' + path: '/Applications', }, /** * Show a shortcut on the left for the application icon. @@ -568,44 +575,52 @@ class Target { x: 93, y: 243, type: 'file', - path: this.appPath - } - ] + path: this.appPath, + }, + ], }; - this.createInstaller = async() => { + this.createInstaller = async () => { const appPath = this.appPath; { const plistFilePath = path.join(appPath, 'Contents', 'Info.plist'); - const plistContents = plist.parse(await fs.promises.readFile(plistFilePath, 'utf8')); - - plistContents.CFBundleURLTypes = - _.get(this.pkg, 'config.hadron.protocols', []) - .map(protocol => ({ - CFBundleTypeRole: 'Editor', - CFBundleURLIconFile: platformSettings.icon, - CFBundleURLName: protocol.name, - CFBundleURLSchemes: protocol.schemes - })); + const plistContents = plist.parse( + await fs.promises.readFile(plistFilePath, 'utf8') + ); + + plistContents.CFBundleURLTypes = _.get( + this.pkg, + 'config.hadron.protocols', + [] + ).map((protocol) => ({ + CFBundleTypeRole: 'Editor', + CFBundleURLIconFile: platformSettings.icon, + CFBundleURLName: protocol.name, + CFBundleURLSchemes: protocol.schemes, + })); await fs.promises.writeFile(plistFilePath, plist.build(plistContents)); } - const isNotarizationPossible = process.env.MACOS_NOTARY_KEY && + const isNotarizationPossible = + process.env.MACOS_NOTARY_KEY && process.env.MACOS_NOTARY_SECRET && process.env.MACOS_NOTARY_CLIENT_URL && process.env.MACOS_NOTARY_API_URL; const notarizationOptions = { bundleId: this.bundleId, - macosEntitlements: this.macosEntitlements + macosEntitlements: this.macosEntitlements, }; if (isNotarizationPossible) { await notarize(appPath, notarizationOptions); } else { - console.error(chalk.yellow.bold( - 'WARNING: macos notary service credentials not set -- skipping signing and notarization of .app!')); + console.error( + chalk.yellow.bold( + 'WARNING: macos notary service credentials not set -- skipping signing and notarization of .app!' + ) + ); } const createDMG = require('electron-installer-dmg'); @@ -614,8 +629,11 @@ class Target { if (isNotarizationPossible) { await notarize(this.installerOptions.dmgPath, notarizationOptions); } else { - console.error(chalk.yellow.bold( - 'WARNING: macos notary service credentials not set -- skipping signing and notarization of .dmg!')); + console.error( + chalk.yellow.bold( + 'WARNING: macos notary service credentials not set -- skipping signing and notarization of .dmg!' + ) + ); } }; } @@ -633,7 +651,7 @@ class Target { this.resources = path.join(this.appPath, 'resources'); Object.assign(this.packagerOptions, { - name: this.productName + name: this.productName, }); const debianVersion = this.version; @@ -647,7 +665,7 @@ class Target { const rhelVersion = [ this.semver.major, this.semver.minor, - this.semver.patch + this.semver.patch, ].join('.'); const rhelRevision = this.semver.prerelease.join('.') || '1'; const rhelArch = this.arch === 'x64' ? 'x86_64' : 'i386'; @@ -661,7 +679,7 @@ class Target { { name: this.linux_deb_filename, path: this.dest(this.linux_deb_filename), - downloadCenter: true + downloadCenter: true, }, { name: this.linux_deb_sign_filename, @@ -670,24 +688,24 @@ class Target { { name: this.linux_rpm_filename, path: this.dest(this.linux_rpm_filename), - downloadCenter: true + downloadCenter: true, }, { name: this.linux_tar_filename, - path: this.dest(this.linux_tar_filename) + path: this.dest(this.linux_tar_filename), }, { name: this.linux_tar_sign_filename, - path: this.dest(this.linux_tar_sign_filename) + path: this.dest(this.linux_tar_sign_filename), }, { name: this.rhel_tar_filename, - path: this.dest(this.rhel_tar_filename) + path: this.dest(this.rhel_tar_filename), }, { name: this.rhel_tar_sign_filename, - path: this.dest(this.rhel_tar_sign_filename) - } + path: this.dest(this.rhel_tar_sign_filename), + }, ]; var license = this.pkg.license; @@ -697,10 +715,9 @@ class Target { }. All Rights Reserved.`; } - const mimeType = - _.get(this.pkg, 'config.hadron.protocols', []) - .flatMap(protocol => protocol.schemes) - .map(scheme => `x-scheme-handler/${scheme}`); + const mimeType = _.get(this.pkg, 'config.hadron.protocols', []) + .flatMap((protocol) => protocol.schemes) + .map((scheme) => `x-scheme-handler/${scheme}`); this.installerOptions = { deb: { src: this.appPath, @@ -712,7 +729,7 @@ class Target { bin: this.productName, section: debianSection, depends: ['libsecret-1-0', 'gnome-keyring'], - mimeType + mimeType, }, rpm: { src: this.appPath, @@ -726,14 +743,11 @@ class Target { return path.join(dest, this.linux_rpm_filename); }, bin: this.productName, - requires: [ - 'gnome-keyring', - 'libsecret', - ], + requires: ['gnome-keyring', 'libsecret'], categories: rhelCategories, license: license, - mimeType - } + mimeType, + }, }; const createRpmInstaller = () => { @@ -772,7 +786,7 @@ class Target { return Promise.all([ createRpmInstaller(), createDebInstaller(), - createTarball() + createTarball(), ]); }; } @@ -788,7 +802,7 @@ class Target { * >>> null */ getAssetWithExtension(extname) { - const res = this.assets.filter(function(asset) { + const res = this.assets.filter(function (asset) { return path.extname(asset.path) === extname; }); debug('%s -> ', extname, res); @@ -807,7 +821,7 @@ class Target { const target = new Target(dir, { ...config, version }); return { config: { ...config, version: target.version, channel: target.channel }, - assets: target.assets + assets: target.assets, }; }); diff --git a/packages/hadron-build/lib/validate-build-config.js b/packages/hadron-build/lib/validate-build-config.js index 9c758f076c0..22ec79fefb8 100644 --- a/packages/hadron-build/lib/validate-build-config.js +++ b/packages/hadron-build/lib/validate-build-config.js @@ -1,14 +1,10 @@ - const platformRequiredKeys = { darwin: ['dmg_background', 'app_category_type', 'icon'], linux: ['deb_section', 'rpm_categories', 'icon'], - win32: ['icon', 'favicon_url', 'loading_gif', 'background', 'banner'] + win32: ['icon', 'favicon_url', 'loading_gif', 'background', 'banner'], }; -const validateBuildConfig = ( - platform, - config -) => { +const validateBuildConfig = (platform, config) => { const requiredKeys = platformRequiredKeys[platform]; if (!requiredKeys) { throw new Error(`Unsupported platform: ${platform}`); @@ -27,5 +23,5 @@ const validateBuildConfig = ( }; module.exports = { - validateBuildConfig -}; \ No newline at end of file + validateBuildConfig, +}; diff --git a/packages/hadron-build/lib/windows-installer-version.js b/packages/hadron-build/lib/windows-installer-version.js index 756b8eb94da..2b4adc56839 100644 --- a/packages/hadron-build/lib/windows-installer-version.js +++ b/packages/hadron-build/lib/windows-installer-version.js @@ -1,6 +1,8 @@ 'use strict'; function windowsInstallerVersion(version) { - const versionComponents = (version || '').match(/^(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?/); + const versionComponents = (version || '').match( + /^(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?/ + ); if (versionComponents) { const [, major, minor, patch, pre] = versionComponents; diff --git a/packages/hadron-build/lib/zip.js b/packages/hadron-build/lib/zip.js index 6dd42d8c0b5..63c720405e1 100644 --- a/packages/hadron-build/lib/zip.js +++ b/packages/hadron-build/lib/zip.js @@ -16,7 +16,8 @@ async function zip(_opts, done) { opts.outPath = opts.out; opts.out = path.dirname(opts.out); } else { - opts.outPath = path.resolve(opts.out, path.basename(opts.dir, '.app')) + '.zip'; + opts.outPath = + path.resolve(opts.out, path.basename(opts.dir, '.app')) + '.zip'; } const runZip = async () => { @@ -27,16 +28,21 @@ async function zip(_opts, done) { execFileSync('zip', args, { env: process.env, cwd: path.join(opts.dir, '..'), - stdio: 'inherit' + stdio: 'inherit', }); } - } + }; const removeZipIfExists = async () => { try { const stats = await fs.stat(opts.outPath); if (!stats.isFile()) { - throw new Error('Refusing to wipe path "' + opts.outPath + '" as it is ' + (stats.isDirectory() ? 'a directory' : 'not a file')); + throw new Error( + 'Refusing to wipe path "' + + opts.outPath + + '" as it is ' + + (stats.isDirectory() ? 'a directory' : 'not a file') + ); } await fs.unlink(opts.outPath); } catch (err) { @@ -44,7 +50,7 @@ async function zip(_opts, done) { throw err; } } - } + }; debug('creating zip', opts); @@ -70,7 +76,7 @@ async function zip(_opts, done) { * @param {Function} done * @return {void} */ -module.exports = function(target, done) { +module.exports = function (target, done) { if (target.platform === 'linux') { debug('.zip releases assets for linux disabled'); return done(); @@ -78,7 +84,7 @@ module.exports = function(target, done) { zip(module.exports.getOptions(target), done); }; -module.exports.getOptions = function(target) { +module.exports.getOptions = function (target) { const asset = target.getAssetWithExtension('.zip'); if (!asset) { debug('no asset w extension .zip!'); @@ -88,7 +94,7 @@ module.exports.getOptions = function(target) { const res = { dir: target.appPath, out: asset.path, - platform: target.platform + platform: target.platform, }; debug('options', res); diff --git a/packages/hadron-build/signtool/install.js b/packages/hadron-build/signtool/install.js index 1a228bf91ce..2aff04c6197 100644 --- a/packages/hadron-build/signtool/install.js +++ b/packages/hadron-build/signtool/install.js @@ -13,7 +13,9 @@ if (process.platform !== 'win32') { process.exit(0); } -const originalSigntool = require.resolve('electron-winstaller/vendor/signtool.exe'); +const originalSigntool = require.resolve( + 'electron-winstaller/vendor/signtool.exe' +); if (!fs.existsSync(originalSigntool)) { throw new Error('Original signtool.exe to be replaced not found'); diff --git a/packages/hadron-build/test/config.test.js b/packages/hadron-build/test/config.test.js index 6e75580d6a4..b6ae9825312 100644 --- a/packages/hadron-build/test/config.test.js +++ b/packages/hadron-build/test/config.test.js @@ -9,14 +9,14 @@ describe('hadron-build::config', () => { describe('Release channel support', () => { const channels = { stable: getConfig({ - version: '1.2.0' + version: '1.2.0', }), beta: getConfig({ - version: '1.2.0-beta.1' + version: '1.2.0-beta.1', }), custom: getConfig({ - version: '1.2.0-custom.5' - }) + version: '1.2.0-custom.5', + }), }; it('should have the right versions', () => { @@ -32,7 +32,9 @@ describe('hadron-build::config', () => { }); it('should not include channel in the product name on stable', () => { - expect(channels.stable.productName).to.equal('MongoDB Compass Enterprise super long test name'); + expect(channels.stable.productName).to.equal( + 'MongoDB Compass Enterprise super long test name' + ); }); it('should not include channel in the slug on stable', () => { @@ -41,8 +43,12 @@ describe('hadron-build::config', () => { describe('For releases *not* on the stable channel', () => { it('should add the channel as a suffix to the product name', () => { - expect(channels.beta.productName).to.equal('MongoDB Compass Enterprise super long test name Beta'); - expect(channels.custom.productName).to.equal('MongoDB Compass Enterprise super long test name Custom'); + expect(channels.beta.productName).to.equal( + 'MongoDB Compass Enterprise super long test name Beta' + ); + expect(channels.custom.productName).to.equal( + 'MongoDB Compass Enterprise super long test name Custom' + ); }); it('should add the channel as a suffix to the slug', () => { expect(channels.beta.slug).to.equal('compass-beta'); @@ -55,7 +61,7 @@ describe('hadron-build::config', () => { const moment = require('moment'); const dev = getConfig({ - version: '1.2.0-dev' + version: '1.2.0-dev', }); const version = `1.2.0-alpha.${moment().format('YYYYMMDDHHmm')}`; @@ -79,7 +85,7 @@ describe('hadron-build::config', () => { name: 'hadron-app', version: '1.2.0', product_name: 'Hadron', - platform: 'linux' + platform: 'linux', }; const c = getConfig(linux); @@ -103,11 +109,11 @@ describe('hadron-build::config', () => { product_name: 'Hadron', platform: 'win32', author: 'MongoDB Inc', - arch: 'x64' + arch: 'x64', }; let res; - before( () => { + before(() => { res = getConfig(windows); }); it.skip('should have the platform specific packager options', () => { @@ -121,10 +127,16 @@ describe('hadron-build::config', () => { it('should have the platform specific evergreen expansions', () => { expect(res.windows_msi_filename).to.equal('compass-1.2.0-win32-x64.msi'); - expect(res.windows_setup_filename).to.equal('compass-1.2.0-win32-x64.exe'); + expect(res.windows_setup_filename).to.equal( + 'compass-1.2.0-win32-x64.exe' + ); expect(res.windows_zip_filename).to.equal('compass-1.2.0-win32-x64.zip'); - expect(res.windows_nupkg_full_filename).to.equal('MongoDBCompassEnterprisesuperlongtestname-1.2.0-full.nupkg'); - expect(res.windows_nupkg_full_label).to.equal('MongoDBCompassEnterprisesuperlongtestname-1.2.0-full.nupkg'); + expect(res.windows_nupkg_full_filename).to.equal( + 'MongoDBCompassEnterprisesuperlongtestname-1.2.0-full.nupkg' + ); + expect(res.windows_nupkg_full_label).to.equal( + 'MongoDBCompassEnterprisesuperlongtestname-1.2.0-full.nupkg' + ); }); it('should have the platform specific installer options', () => { @@ -146,27 +158,37 @@ describe('hadron-build::config', () => { describe('For non-stable channel releases', () => { let custom; - before( () => { + before(() => { custom = getConfig({ version: '1.2.0-custom.5', name: 'hadron', product_name: 'Hadron', platform: 'win32', author: 'MongoDB Inc', - arch: 'x64' + arch: 'x64', }); }); it('should append the channel name to the product name', () => { let versionString = custom.packagerOptions['version-string']; - expect(versionString.ProductName).to.equal('MongoDB Compass Enterprise super long test name Custom'); + expect(versionString.ProductName).to.equal( + 'MongoDB Compass Enterprise super long test name Custom' + ); }); it('should include the channel name in asset filenames', () => { - expect(custom.windows_msi_filename).to.equal('compass-1.2.0-custom.5-win32-x64.msi'); - expect(custom.windows_setup_filename).to.equal('compass-1.2.0-custom.5-win32-x64.exe'); - expect(custom.windows_zip_filename).to.equal('compass-1.2.0-custom.5-win32-x64.zip'); - expect(custom.windows_nupkg_full_filename).to.equal('MongoDBCompassEnterprisesuperlongtestnameCustom-1.2.0-custom5-full.nupkg'); + expect(custom.windows_msi_filename).to.equal( + 'compass-1.2.0-custom.5-win32-x64.msi' + ); + expect(custom.windows_setup_filename).to.equal( + 'compass-1.2.0-custom.5-win32-x64.exe' + ); + expect(custom.windows_zip_filename).to.equal( + 'compass-1.2.0-custom.5-win32-x64.zip' + ); + expect(custom.windows_nupkg_full_filename).to.equal( + 'MongoDBCompassEnterprisesuperlongtestnameCustom-1.2.0-custom5-full.nupkg' + ); }); }); }); diff --git a/packages/hadron-build/test/download-center.test.js b/packages/hadron-build/test/download-center.test.js index 6f3abfd0a83..da496c37667 100644 --- a/packages/hadron-build/test/download-center.test.js +++ b/packages/hadron-build/test/download-center.test.js @@ -2,39 +2,39 @@ const { expect } = require('chai'); const { getKeyPrefix, - requireEnvironmentVariables + requireEnvironmentVariables, } = require('../lib/download-center'); -describe('download-center', function() { - describe('getKeyPrefix', function() { - it('should return compass for stable channel', function() { +describe('download-center', function () { + describe('getKeyPrefix', function () { + it('should return compass for stable channel', function () { expect(getKeyPrefix('stable')).to.eq('compass'); }); - it('should return compass when no channel is passed', function() { + it('should return compass when no channel is passed', function () { expect(getKeyPrefix()).to.eq('compass'); }); - it('should return prefix with channel when channel is not stable', function() { + it('should return prefix with channel when channel is not stable', function () { expect(getKeyPrefix('beta')).to.eq('compass/beta'); }); }); - describe('requireEnvironmentVariables', function() { - it('should throw if variable is missing', function() { + describe('requireEnvironmentVariables', function () { + it('should throw if variable is missing', function () { expect(() => { requireEnvironmentVariables([ - 'I_WOULD_BE_REALLY_SURPRISED_IF_THIS_ACTUALLY_EXISTS' + 'I_WOULD_BE_REALLY_SURPRISED_IF_THIS_ACTUALLY_EXISTS', ]); }).to.throw(); }); - it('should return true if variable is set', function() { + it('should return true if variable is set', function () { try { process.env.THIS_IS_HERE_TO_TEST_REQUIRE_ENV_VARIABLES_METHOD = '1'; expect( requireEnvironmentVariables([ - 'THIS_IS_HERE_TO_TEST_REQUIRE_ENV_VARIABLES_METHOD' + 'THIS_IS_HERE_TO_TEST_REQUIRE_ENV_VARIABLES_METHOD', ]) ).to.eq(true); } finally { diff --git a/packages/hadron-build/test/fixtures/hadron-app/main.js b/packages/hadron-build/test/fixtures/hadron-app/main.js index 8fce97e07de..f1f37d61913 100644 --- a/packages/hadron-build/test/fixtures/hadron-app/main.js +++ b/packages/hadron-build/test/fixtures/hadron-app/main.js @@ -5,11 +5,15 @@ const dialog = electron.dialog; const nativeImage = electron.nativeImage; app.on('ready', () => { - dialog.showMessageBox({ - type: 'info', - title: 'Test Fixture App for hadron-build', - message: 'Showing this message is all this app does and is only for testing.', - buttons: ['OK'], - icon: nativeImage.createFromPath('./hadron-app.png') - }, () => app.quit()); + dialog.showMessageBox( + { + type: 'info', + title: 'Test Fixture App for hadron-build', + message: + 'Showing this message is all this app does and is only for testing.', + buttons: ['OK'], + icon: nativeImage.createFromPath('./hadron-app.png'), + }, + () => app.quit() + ); }); diff --git a/packages/hadron-build/test/fixtures/hadron-app/package.json b/packages/hadron-build/test/fixtures/hadron-app/package.json index ae56155f2c6..742552721bd 100644 --- a/packages/hadron-build/test/fixtures/hadron-app/package.json +++ b/packages/hadron-build/test/fixtures/hadron-app/package.json @@ -30,7 +30,9 @@ "dev": "resources/linux/Icon.png" }, "deb_section": "productivity", - "rpm_categories": ["IDE"] + "rpm_categories": [ + "IDE" + ] } }, "distributions": { @@ -41,7 +43,9 @@ "bundleId": "com.mongodb.hadron-testing", "productName": "MongoDB Compass Enterprise super long test name", "plugins": [], - "styles": [ "index" ] + "styles": [ + "index" + ] }, "foo-bar": { "name": "foo-bar" diff --git a/packages/hadron-build/test/helpers.js b/packages/hadron-build/test/helpers.js index c415f82ab3f..890526b07a5 100644 --- a/packages/hadron-build/test/helpers.js +++ b/packages/hadron-build/test/helpers.js @@ -2,7 +2,7 @@ const Target = require('../lib/target'); const path = require('path'); -exports.getConfig = argv => { +exports.getConfig = (argv) => { const src = path.join(__dirname, 'fixtures', 'hadron-app'); process.env.HADRON_DISTRIBUTION = 'compass'; return new Target(src, argv); diff --git a/packages/hadron-build/test/index.test.js b/packages/hadron-build/test/index.test.js index 14af4320d14..3ea29171c65 100644 --- a/packages/hadron-build/test/index.test.js +++ b/packages/hadron-build/test/index.test.js @@ -24,7 +24,7 @@ describe('hadron-build', () => { main: false, renderer: false, functional: false, - release: false + release: false, }; const cwd = process.cwd(); @@ -40,31 +40,39 @@ describe('hadron-build', () => { describe('::getSpawnJobs', () => { it.skip('should return arguments for requested suite jobs', () => { - const argv = _.defaults({ - unit: true, - enzyme: true, - main: true, - renderer: true, - functional: true - }, DEFAULT_ARGS); + const argv = _.defaults( + { + unit: true, + enzyme: true, + main: true, + renderer: true, + functional: true, + }, + DEFAULT_ARGS + ); expect(commands.test.getSpawnJobs(argv)).to.deep.equal({ unit: ['--sort', '--recursive', './test/unit'], enzyme: ['--sort', '--recursive', './test/enzyme'], main: ['--sort', '--recursive', './test/main'], renderer: ['--sort', '--renderer', '--recursive', './test/renderer'], - functional: ['--sort', './test/functional'] + functional: ['--sort', './test/functional'], }); }); }); describe('::getMochaArgs', () => { context('when the arguments are default', () => { it.skip('should allow pass through of mocha cli options', () => { - var argv = _.defaults({ - grep: '#spectron' - }, DEFAULT_ARGS); + var argv = _.defaults( + { + grep: '#spectron', + }, + DEFAULT_ARGS + ); expect(commands.test.getMochaArgs(argv)).to.deep.equal([ - '--sort', '--grep', '#spectron' + '--sort', + '--grep', + '#spectron', ]); }); }); @@ -72,7 +80,9 @@ describe('hadron-build', () => { describe('::handler', () => { it('should set `NODE_ENV` to testing'); - it('should set the TEST_WITH_PREBUILT environment variable if --release specified'); + it( + 'should set the TEST_WITH_PREBUILT environment variable if --release specified' + ); it('should remove the user-data directory'); it('should spawn electron-mocha'); }); diff --git a/packages/hadron-build/test/release.test.js b/packages/hadron-build/test/release.test.js index 94cb8bc16ed..564f3a60b1b 100644 --- a/packages/hadron-build/test/release.test.js +++ b/packages/hadron-build/test/release.test.js @@ -9,7 +9,7 @@ const path = require('path'); const getConfig = require('./helpers').getConfig; // TODO: Investigate why it's failing in GitHub Actions CI -describe.skip('hadron-build::release', function() { +describe.skip('hadron-build::release', function () { if ( // Functional tests on appveyor too slow. Skipping. process.platform === 'win32' || @@ -22,36 +22,53 @@ describe.skip('hadron-build::release', function() { this.timeout(300000); let target = null; - before(function(done) { - fs.remove(path.join(__dirname, 'fixtures', 'hadron-app', 'dist'), (_err) => { - if (_err) { - return done(_err); + before(function (done) { + fs.remove( + path.join(__dirname, 'fixtures', 'hadron-app', 'dist'), + (_err) => { + if (_err) { + return done(_err); + } + target = getConfig(); + commands.release.run(target, done); } - target = getConfig(); - commands.release.run(target, done); - }); + ); }); - it('should symlink `Electron` to the app binary on OS X', function(done) { + it('should symlink `Electron` to the app binary on OS X', function (done) { if (target.platform !== 'darwin') { return this.skip(); } - const bin = target.dest(`${target.productName}-darwin-${target.arch}`, `${target.productName}.app`, 'Contents', 'MacOS', 'Electron'); - fs.exists(bin, function(exists) { + const bin = target.dest( + `${target.productName}-darwin-${target.arch}`, + `${target.productName}.app`, + 'Contents', + 'MacOS', + 'Electron' + ); + fs.exists(bin, function (exists) { assert(exists, `Expected ${bin} to exist`); done(); }); }); it('has the correct product name', () => { - assert.equal(target.productName, 'MongoDB Compass Enterprise super long test name Beta'); + assert.equal( + target.productName, + 'MongoDB Compass Enterprise super long test name Beta' + ); }); - it('sets the correct CFBundleIdentifier', function() { + it('sets the correct CFBundleIdentifier', function () { if (target.platform !== 'darwin') { return this.skip(); } - const info = target.dest(`${target.productName}-darwin-${target.arch}`, `${target.productName}.app`, 'Contents', 'Info.plist'); + const info = target.dest( + `${target.productName}-darwin-${target.arch}`, + `${target.productName}.app`, + 'Contents', + 'Info.plist' + ); // eslint-disable-next-line no-sync const config = plist.parse(fs.readFileSync(info, 'utf8')); assert.equal(config.CFBundleIdentifier, 'com.mongodb.hadron-testing.beta'); @@ -65,10 +82,11 @@ describe.skip('hadron-build::release', function() { it('should have the correct application icon', () => {}); it.skip('should have all assets specified in the manifest', () => { - const missing = target.assets.map(function(asset) { - // eslint-disable-next-line no-sync - return [asset.path, fs.existsSync(asset.path)]; - }) + const missing = target.assets + .map(function (asset) { + // eslint-disable-next-line no-sync + return [asset.path, fs.existsSync(asset.path)]; + }) .filter(([, existing]) => !existing) .map(([assetPath]) => assetPath); diff --git a/packages/hadron-build/test/signtool.test.js b/packages/hadron-build/test/signtool.test.js index c3a4e04f615..6292a9099dd 100644 --- a/packages/hadron-build/test/signtool.test.js +++ b/packages/hadron-build/test/signtool.test.js @@ -23,79 +23,96 @@ describe('hadron-build::signtool', () => { describe('sign', () => { let garasign; - beforeEach(function() { + beforeEach(function () { garasign = spy(); }); - context('when credentials are not set', function() { - beforeEach(function() { - setEnvVars(Object.fromEntries(Object.keys(CURRENT_SIGING_VARS).map((key) => [key, false]))); + context('when credentials are not set', function () { + beforeEach(function () { + setEnvVars( + Object.fromEntries( + Object.keys(CURRENT_SIGING_VARS).map((key) => [key, false]) + ) + ); }); - afterEach(function() { + afterEach(function () { setEnvVars(CURRENT_SIGING_VARS); }); - it('does not sign when credentials are not set', async() => { + it('does not sign when credentials are not set', async () => { await sign('test/fixtures/foo', garasign); expect(garasign.called).to.be.false; }); }); - context('when credentials are set', function() { - beforeEach(function() { + context('when credentials are set', function () { + beforeEach(function () { // Set all the signing vars to a defined value - setEnvVars(Object.fromEntries(Object.keys(CURRENT_SIGING_VARS).map((key) => [key, key]))); + setEnvVars( + Object.fromEntries( + Object.keys(CURRENT_SIGING_VARS).map((key) => [key, key]) + ) + ); }); - afterEach(function() { + afterEach(function () { setEnvVars(CURRENT_SIGING_VARS); }); - it('signs windows exe remotely using jsign', async() => { + it('signs windows exe remotely using jsign', async () => { await sign('test/fixtures/foo.exe', garasign); expect(garasign.calledOnce).to.be.true; - expect(garasign.firstCall.args).to.deep.equal(['test/fixtures/foo.exe', { - client: 'remote', - signingMethod: 'jsign', - // These are the signing server creds - host: undefined, - port: undefined, - privateKey: undefined, - username: undefined, - }]); + expect(garasign.firstCall.args).to.deep.equal([ + 'test/fixtures/foo.exe', + { + client: 'remote', + signingMethod: 'jsign', + // These are the signing server creds + host: undefined, + port: undefined, + privateKey: undefined, + username: undefined, + }, + ]); }); - it('signs windows msi remotely using jsign', async() => { + it('signs windows msi remotely using jsign', async () => { await sign('test/fixtures/foo.msi', garasign); expect(garasign.calledOnce).to.be.true; - expect(garasign.firstCall.args).to.deep.equal(['test/fixtures/foo.msi', { - client: 'remote', - signingMethod: 'jsign', - // These are the signing server creds - host: undefined, - port: undefined, - privateKey: undefined, - username: undefined, - }]); + expect(garasign.firstCall.args).to.deep.equal([ + 'test/fixtures/foo.msi', + { + client: 'remote', + signingMethod: 'jsign', + // These are the signing server creds + host: undefined, + port: undefined, + privateKey: undefined, + username: undefined, + }, + ]); }); - it('signs everything remotely using gpg', async() => { + it('signs everything remotely using gpg', async () => { await sign('test/fixtures/foo', garasign); expect(garasign.calledOnce).to.be.true; - expect(garasign.firstCall.args).to.deep.equal(['test/fixtures/foo', { - client: 'remote', - signingMethod: 'gpg', - // These are the signing server creds - host: undefined, - port: undefined, - privateKey: undefined, - username: undefined, - }]); + expect(garasign.firstCall.args).to.deep.equal([ + 'test/fixtures/foo', + { + client: 'remote', + signingMethod: 'gpg', + // These are the signing server creds + host: undefined, + port: undefined, + privateKey: undefined, + username: undefined, + }, + ]); }); }); }); - describe('getSignedFilename', function() { - it('adds .sig to the file name', function() { + describe('getSignedFilename', function () { + it('adds .sig to the file name', function () { ['.zip', '.gz', '.deb', '.rpm'].map((ext) => { expect(getSignedFilename(`foo${ext}`)).to.equal(`foo${ext}.sig`); }); diff --git a/packages/hadron-build/test/tar-gz.test.js b/packages/hadron-build/test/tar-gz.test.js index ea740b30342..a0827a76c6f 100644 --- a/packages/hadron-build/test/tar-gz.test.js +++ b/packages/hadron-build/test/tar-gz.test.js @@ -7,15 +7,15 @@ const util = require('util'); const execFile = util.promisify(execFileCb); const tar = require('../lib/tar-gz'); -describe('tar', function() { - before(function() { +describe('tar', function () { + before(function () { if (!['linux', 'darwin'].includes(process.platform)) { this.skip(); } }); let tmpdir; - beforeEach(async function() { + beforeEach(async function () { tmpdir = path.join( os.tmpdir(), 'hadron-build-tar-test', @@ -25,11 +25,11 @@ describe('tar', function() { await fs.mkdir(tmpdir, { recursive: true }); }); - afterEach(async function() { + afterEach(async function () { await fs.rm(tmpdir, { recursive: true }); }); - it('creates a tar archive from a directory, preserves the root and the permissions', async function() { + it('creates a tar archive from a directory, preserves the root and the permissions', async function () { const src = path.join(tmpdir, 'src'); const extracted = path.join(tmpdir, 'extracted'); await fs.mkdir(src, { recursive: true }); diff --git a/packages/hadron-build/test/target.test.js b/packages/hadron-build/test/target.test.js index 666d4cd0086..56d4741a52d 100644 --- a/packages/hadron-build/test/target.test.js +++ b/packages/hadron-build/test/target.test.js @@ -44,7 +44,7 @@ describe('target', () => { HADRON_PRODUCT_NAME: 'MongoDB Compass My Awesome Edition', HADRON_READONLY: 'true', HADRON_ISOLATED: 'true', - HADRON_APP_VERSION: '1.2.3' + HADRON_APP_VERSION: '1.2.3', }); const target = new Target(path.join(__dirname, 'fixtures', 'hadron-app')); diff --git a/packages/hadron-build/test/upload.test.js b/packages/hadron-build/test/upload.test.js index c5bce2e284c..f4c21ce9eef 100644 --- a/packages/hadron-build/test/upload.test.js +++ b/packages/hadron-build/test/upload.test.js @@ -5,55 +5,55 @@ const { versionId, readableVersionName, readablePlatformName, - generateVersionsForAssets + generateVersionsForAssets, } = require('../commands/upload'); const Target = require('../lib/target'); -describe('upload', function() { - describe('versionId', function() { - it('returns a version number', function() { +describe('upload', function () { + describe('versionId', function () { + it('returns a version number', function () { expect(versionId('1.2.3')).to.eq('1.2.3'); }); - it('returns a version number when dist is just compass', function() { + it('returns a version number when dist is just compass', function () { expect(versionId('1.2.3', 'compass')).to.eq('1.2.3'); }); - it('returns a version number with dist when dist is custom', function() { + it('returns a version number with dist when dist is custom', function () { expect(versionId('1.2.3', 'compass-isolated')).to.eq('1.2.3-isolated'); }); }); - describe('readableVersionName', function() { - it('returns version number', function() { + describe('readableVersionName', function () { + it('returns version number', function () { expect(readableVersionName('1.0.0')).to.eq('1.0.0'); }); - it('returns version number with channel pretty-printed', function() { + it('returns version number with channel pretty-printed', function () { expect(readableVersionName('1.0.0', 'stable')).to.eq('1.0.0 (Stable)'); }); - it('returns version number with channel and distribution pretty-printed', function() { + it('returns version number with channel and distribution pretty-printed', function () { expect(readableVersionName('1.0.0', 'beta', 'compass-readonly')).to.eq( '1.0.0 (Readonly Edition Beta)' ); }); }); - describe('readablePlatformName', function() { - it('returns a pretty-printed platform / arch label', function() { + describe('readablePlatformName', function () { + it('returns a pretty-printed platform / arch label', function () { expect(readablePlatformName('x64', 'darwin')).to.eq( 'macOS 64-bit (10.15+)' ); }); - it('throws for unsupported values', function() { + it('throws for unsupported values', function () { expect(() => readablePlatformName('linux', 'arm64')).to.throw(); }); }); - describe('generateVersionsForAssets', function() { - it('returns a versions list for provided assets / version / channel combo', function() { + describe('generateVersionsForAssets', function () { + it('returns a versions list for provided assets / version / channel combo', function () { const version = '1.0.0'; const assets = Target.getAssetsForVersion( // /packages/compass @@ -70,52 +70,52 @@ describe('upload', function() { download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0-darwin-x64.dmg', name: 'macOS 64-bit (10.15+)', - os: 'darwin' + os: 'darwin', }, { arch: 'arm64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0-darwin-arm64.dmg', name: 'macOS arm64 (M1) (11.0+)', - os: 'darwin' + os: 'darwin', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass_1.0.0_amd64.deb', name: 'Ubuntu 64-bit (16.04+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0.x86_64.rpm', name: 'RedHat 64-bit (8+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0-win32-x64.exe', name: 'Windows 64-bit (10+)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0-win32-x64.msi', name: 'Windows 64-bit (10+) (MSI)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-1.0.0-win32-x64.zip', name: 'Windows 64-bit (10+) (Zip)', - os: 'win32' - } + os: 'win32', + }, ], - version: '1.0.0 (Stable)' + version: '1.0.0 (Stable)', }, { _id: '1.0.0-readonly', @@ -125,52 +125,52 @@ describe('upload', function() { download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0-darwin-x64.dmg', name: 'macOS 64-bit (10.15+)', - os: 'darwin' + os: 'darwin', }, { arch: 'arm64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0-darwin-arm64.dmg', name: 'macOS arm64 (M1) (11.0+)', - os: 'darwin' + os: 'darwin', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly_1.0.0_amd64.deb', name: 'Ubuntu 64-bit (16.04+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0.x86_64.rpm', name: 'RedHat 64-bit (8+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0-win32-x64.exe', name: 'Windows 64-bit (10+)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0-win32-x64.msi', name: 'Windows 64-bit (10+) (MSI)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-readonly-1.0.0-win32-x64.zip', name: 'Windows 64-bit (10+) (Zip)', - os: 'win32' - } + os: 'win32', + }, ], - version: '1.0.0 (Readonly Edition Stable)' + version: '1.0.0 (Readonly Edition Stable)', }, { _id: '1.0.0-isolated', @@ -180,53 +180,53 @@ describe('upload', function() { download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0-darwin-x64.dmg', name: 'macOS 64-bit (10.15+)', - os: 'darwin' + os: 'darwin', }, { arch: 'arm64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0-darwin-arm64.dmg', name: 'macOS arm64 (M1) (11.0+)', - os: 'darwin' + os: 'darwin', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated_1.0.0_amd64.deb', name: 'Ubuntu 64-bit (16.04+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0.x86_64.rpm', name: 'RedHat 64-bit (8+)', - os: 'linux' + os: 'linux', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0-win32-x64.exe', name: 'Windows 64-bit (10+)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0-win32-x64.msi', name: 'Windows 64-bit (10+) (MSI)', - os: 'win32' + os: 'win32', }, { arch: 'x64', download_link: 'https://downloads.mongodb.com/compass/mongodb-compass-isolated-1.0.0-win32-x64.zip', name: 'Windows 64-bit (10+) (Zip)', - os: 'win32' - } + os: 'win32', + }, ], - version: '1.0.0 (Isolated Edition Stable)' - } + version: '1.0.0 (Isolated Edition Stable)', + }, ]); }); }); diff --git a/packages/hadron-build/test/zip.test.js b/packages/hadron-build/test/zip.test.js index b9e65493d86..e67e1360058 100644 --- a/packages/hadron-build/test/zip.test.js +++ b/packages/hadron-build/test/zip.test.js @@ -12,7 +12,7 @@ const chai = require('chai'); const expect = chai.expect; function skipUnlessRunningOn(platform) { - before(function() { + before(function () { if (process.platform !== platform) { this.skip(); } @@ -44,18 +44,18 @@ async function getTargetZipEntries(target) { const file = fsExtra.readFileSync(getTargetZipPath(target)); const zipContent = await JSZip.loadAsync(file); - return Object.values(zipContent.files).map(entry => _.pick(entry, [ - 'name', 'dir' - ])); + return Object.values(zipContent.files).map((entry) => + _.pick(entry, ['name', 'dir']) + ); } -describe('zip', function() { +describe('zip', function () { context('on linux', () => { skipUnlessRunningOn('linux'); const target = getTarget({ version: '1.2.0', - platform: 'linux' + platform: 'linux', }); setupAndZipFakeTarget(target); @@ -78,22 +78,22 @@ describe('zip', function() { const target = getTarget({ version: '1.2.0', - platform: 'darwin' + platform: 'darwin', }); setupAndZipFakeTarget(target); - it('creates a zip with the right entries', async() => { + it('creates a zip with the right entries', async () => { const entries = await getTargetZipEntries(target); expect(entries).to.deep.equal([ { name: 'MongoDB Compass Enterprise super long test name.app/', - dir: true + dir: true, }, { name: 'MongoDB Compass Enterprise super long test name.app/file', - dir: false - } + dir: false, + }, ]); }); }); @@ -103,18 +103,18 @@ describe('zip', function() { const target = getTarget({ version: '1.2.0', - platform: 'win32' + platform: 'win32', }); setupAndZipFakeTarget(target); - it('creates a zip with the right entries', async() => { + it('creates a zip with the right entries', async () => { const entries = await getTargetZipEntries(target); expect(entries).to.deep.equal([ { name: 'file', - dir: false - } + dir: false, + }, ]); }); }); diff --git a/packages/hadron-type-checker/.eslintrc b/packages/hadron-type-checker/.eslintrc index b53acc369ea..3024abad4f1 100644 --- a/packages/hadron-type-checker/.eslintrc +++ b/packages/hadron-type-checker/.eslintrc @@ -1,14 +1,4 @@ { - "ecmaFeatures": { - "blockBindings": true, - }, - "env": { - "mocha": true, - "node": true, - "es6": true - }, - "rules": { - "strict": 0 - }, - "extends": ["mongodb-js/node"] + "root": true, + "extends": ["@mongodb-js/eslint-config-compass"] } diff --git a/packages/hadron-type-checker/.prettierrc.json b/packages/hadron-type-checker/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/hadron-type-checker/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/hadron-type-checker/index.d.ts b/packages/hadron-type-checker/index.d.ts index 0b11e590d21..9bded75e150 100644 --- a/packages/hadron-type-checker/index.d.ts +++ b/packages/hadron-type-checker/index.d.ts @@ -10,7 +10,7 @@ import type { BSONRegExp, Code, BSONSymbol, - Timestamp + Timestamp, } from 'bson'; export type TypeCastMap = { diff --git a/packages/hadron-type-checker/package.json b/packages/hadron-type-checker/package.json index 547729e6673..40a94fbff8f 100644 --- a/packages/hadron-type-checker/package.json +++ b/packages/hadron-type-checker/package.json @@ -31,10 +31,10 @@ "lodash": "^4.17.21" }, "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "chai": "^4.2.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", - "eslint-config-mongodb-js": "^5.0.3", "mocha": "^10.2.0" } } diff --git a/packages/hadron-type-checker/src/type-checker.js b/packages/hadron-type-checker/src/type-checker.js index 01fc8346058..5a52a6ef105 100644 --- a/packages/hadron-type-checker/src/type-checker.js +++ b/packages/hadron-type-checker/src/type-checker.js @@ -24,7 +24,6 @@ const { Code, BSONSymbol, Timestamp, - Map } = require('bson'); /** * The object string. @@ -177,7 +176,9 @@ const toInt64 = (object) => { return Long.fromString(object); } - throw new Error(`Value ${object.toString()} is outside the valid Int64 range`); + throw new Error( + `Value ${object.toString()} is outside the valid Int64 range` + ); }; const toDouble = (object) => { @@ -209,7 +210,9 @@ const toObjectID = (object) => { }; const toBinary = (object) => { - const buffer = ArrayBuffer.isView(object) ? Buffer.from(object) : Buffer.from(toString(object), 'utf8'); + const buffer = ArrayBuffer.isView(object) + ? Buffer.from(object) + : Buffer.from(toString(object), 'utf8'); return new Binary(buffer, Binary.SUBTYPE_DEFAULT); }; @@ -252,7 +255,7 @@ const CASTERS = { String: toString, BSONSymbol: toSymbol, Timestamp: toTimestamp, - Undefined: toUndefined + Undefined: toUndefined, }; /** diff --git a/packages/hadron-type-checker/test/type-checker.test.js b/packages/hadron-type-checker/test/type-checker.test.js index 7eec0d535f1..33516429ccd 100644 --- a/packages/hadron-type-checker/test/type-checker.test.js +++ b/packages/hadron-type-checker/test/type-checker.test.js @@ -15,140 +15,159 @@ const Int32 = bson.Int32; const Decimal128 = bson.Decimal128; const TypeChecker = require('../'); -describe('TypeChecker', function() { - describe('#cast', function() { - context('when the object is a string', function() { - context('when the string is empty', function() { - context('when casting to min key', function() { +describe('TypeChecker', function () { + describe('#cast', function () { + context('when the object is a string', function () { + context('when the string is empty', function () { + context('when casting to min key', function () { var value = ''; - it('returns the min key', function() { - expect(TypeChecker.cast(value, 'MinKey')).to.deep.equal(new MinKey()); + it('returns the min key', function () { + expect(TypeChecker.cast(value, 'MinKey')).to.deep.equal( + new MinKey() + ); }); }); - context('when casting to max key', function() { + context('when casting to max key', function () { var value = ''; - it('returns the max key', function() { - expect(TypeChecker.cast(value, 'MaxKey')).to.deep.equal(new MaxKey()); + it('returns the max key', function () { + expect(TypeChecker.cast(value, 'MaxKey')).to.deep.equal( + new MaxKey() + ); }); }); - context('when casting to ObjectId', function() { + context('when casting to ObjectId', function () { var value = ''; - it('returns a new ObjectId()', function() { - expect(TypeChecker.cast(value, 'ObjectId')).to.be.an.instanceof(bson.ObjectId); + it('returns a new ObjectId()', function () { + expect(TypeChecker.cast(value, 'ObjectId')).to.be.an.instanceof( + bson.ObjectId + ); }); }); - context('when casting to a binary', function() { - it('returns a corresponding binary object', function() { + context('when casting to a binary', function () { + it('returns a corresponding binary object', function () { const value = 'yay 🎉'; - expect(TypeChecker.cast(value, 'Binary')._bsontype).to.equal('Binary'); - expect(TypeChecker.cast(value, 'Binary').toString()).to.equal(value); + expect(TypeChecker.cast(value, 'Binary')._bsontype).to.equal( + 'Binary' + ); + expect(TypeChecker.cast(value, 'Binary').toString()).to.equal( + value + ); }); }); }); - context('when the string is an integer', function() { - context('when the integer is 32 bits', function() { - context('when casting to an int32', function() { + context('when the string is an integer', function () { + context('when the integer is 32 bits', function () { + context('when casting to an int32', function () { var value = '23'; - it('returns the number', function() { - expect(TypeChecker.cast(value, 'Int32')).to.deep.equal(new Int32(23)); + it('returns the number', function () { + expect(TypeChecker.cast(value, 'Int32')).to.deep.equal( + new Int32(23) + ); }); }); - context('when casting to a boolean', function() { - context('when the int is 0', function() { - it('returns false', function() { + context('when casting to a boolean', function () { + context('when the int is 0', function () { + it('returns false', function () { expect(TypeChecker.cast(0, 'Boolean')).to.equal(false); }); }); - context('when the int is 1', function() { - it('returns true', function() { + context('when the int is 1', function () { + it('returns true', function () { expect(TypeChecker.cast(1, 'Boolean')).to.equal(true); }); }); - context('when the int is > 1', function() { - it('returns true', function() { + context('when the int is > 1', function () { + it('returns true', function () { expect(TypeChecker.cast(2, 'Boolean')).to.equal(true); }); }); - context('when the int is < 0', function() { - it('returns true', function() { + context('when the int is < 0', function () { + it('returns true', function () { expect(TypeChecker.cast(-2, 'Boolean')).to.equal(true); }); }); }); - context('when the int is partially valid', function() { - context('when the int is a -', function() { + context('when the int is partially valid', function () { + context('when the int is a -', function () { var value = '-'; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Int32'); }).to.throw('is not a valid Int32 value'); }); }); - context('when the int is a ""', function() { + context('when the int is a ""', function () { var value = ''; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Int32'); }).to.throw('is not a valid Int32 value'); }); }); }); - context('when the int64 is very large', function() { - context('when the int is larger than max js number', function() { + context('when the int64 is very large', function () { + context('when the int is larger than max js number', function () { // js max safe integer is 9007199254740991 var value = '9007199254740991238'; - it('returns int64', function() { - expect(TypeChecker.cast(value, 'Int64')).to.deep.equal(Long.fromString('9007199254740991238')); + it('returns int64', function () { + expect(TypeChecker.cast(value, 'Int64')).to.deep.equal( + Long.fromString('9007199254740991238') + ); }); }); - context('when the int is larger than max int64 number', function() { - // max int64 number is 9223372036854775807 - var value = '10223372036854775810'; - - it('raises an error', function() { - expect(function() { - TypeChecker.cast(value, 'Int64'); - }).to.throw('Value 10223372036854775810 is outside the valid Int64 range'); - }); - }); + context( + 'when the int is larger than max int64 number', + function () { + // max int64 number is 9223372036854775807 + var value = '10223372036854775810'; + + it('raises an error', function () { + expect(function () { + TypeChecker.cast(value, 'Int64'); + }).to.throw( + 'Value 10223372036854775810 is outside the valid Int64 range' + ); + }); + } + ); }); - context('when the int64 is partially valid', function() { - context('when the int is a -', function() { + context('when the int64 is partially valid', function () { + context('when the int is a -', function () { var value = '-'; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Int64'); }).to.throw('is not a valid Int64 value'); }); }); - context('when the int is a ""', function() { + context('when the int is a ""', function () { var value = ''; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Int64'); }).to.throw('is not a valid Int64 value'); }); @@ -156,572 +175,613 @@ describe('TypeChecker', function() { }); }); - context('when the integer is 64 bit', function() { - context('when casting to an int64', function() { + context('when the integer is 64 bit', function () { + context('when casting to an int64', function () { var value = '42000000000000'; - it('returns the int64', function() { - expect(TypeChecker.cast(value, 'Int64')).to.deep.equal(Long.fromNumber(42000000000000)); + it('returns the int64', function () { + expect(TypeChecker.cast(value, 'Int64')).to.deep.equal( + Long.fromNumber(42000000000000) + ); }); }); }); - context('when casting to a decimal 128', function() { + context('when casting to a decimal 128', function () { var value = '9223372036854775808'; - it('returns the number', function() { - expect(TypeChecker.cast(value, 'Decimal128').toString()).to.equal(value); + it('returns the number', function () { + expect(TypeChecker.cast(value, 'Decimal128').toString()).to.equal( + value + ); }); }); }); - context('when the string is a double', function() { - context('when casting to a double', function() { - context('when the double is valid', function() { + context('when the string is a double', function () { + context('when casting to a double', function () { + context('when the double is valid', function () { var value = '23.45'; - it('returns the number', function() { - expect(TypeChecker.cast(value, 'Double')).to.deep.equal(new Double(23.45)); + it('returns the number', function () { + expect(TypeChecker.cast(value, 'Double')).to.deep.equal( + new Double(23.45) + ); }); }); - context('when the doule is partially valid', function() { - context('when the double is a -', function() { + context('when the doule is partially valid', function () { + context('when the double is a -', function () { var value = '-'; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Double'); }).to.throw('is not a valid Double value'); }); }); - context('when the double is a ""', function() { + context('when the double is a ""', function () { var value = ''; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Double'); }).to.throw('is not a valid Double value'); }); }); - context('when the double ends with decimal', function() { + context('when the double ends with decimal', function () { var value = '12.'; - it('raises an error', function() { - expect(function() { + it('raises an error', function () { + expect(function () { TypeChecker.cast(value, 'Double'); - }).to.throw('Please enter at least one digit after the decimal'); + }).to.throw( + 'Please enter at least one digit after the decimal' + ); }); }); }); }); }); - context('when the string is a decimal 128', function() { - context('when casting to a decimal 128', function() { + context('when the string is a decimal 128', function () { + context('when casting to a decimal 128', function () { var value = '23.45'; - it('returns the number', function() { - expect(TypeChecker.cast(value, 'Decimal128').toString()).to.equal('23.45'); + it('returns the number', function () { + expect(TypeChecker.cast(value, 'Decimal128').toString()).to.equal( + '23.45' + ); }); }); }); - context('when the string is a plain string', function() { - context('when casting to a string', function() { + context('when the string is a plain string', function () { + context('when casting to a string', function () { var value = 'test'; - it('returns the string', function() { + it('returns the string', function () { expect(TypeChecker.cast(value, 'String')).to.equal(value); }); }); - context('when casting to a boolean', function() { + context('when casting to a boolean', function () { var value = 'fal'; - it('raises an exception', function() { - expect(TypeChecker.cast.bind(null, value, 'Boolean')).to.throw('not a valid boolean'); + it('raises an exception', function () { + expect(TypeChecker.cast.bind(null, value, 'Boolean')).to.throw( + 'not a valid boolean' + ); }); }); - context('when casting to an object', function() { + context('when casting to an object', function () { var value = 'test'; - it('returns an empty object', function() { + it('returns an empty object', function () { expect(TypeChecker.cast(value, 'Object')).to.deep.equal({}); }); }); - context('when casting to an array', function() { - context('when the value is a string', function() { + context('when casting to an array', function () { + context('when the value is a string', function () { var value = 'test'; - it('returns the string wrapped in an array', function() { - expect(TypeChecker.cast(value, 'Array')).to.deep.equal([ value ]); + it('returns the string wrapped in an array', function () { + expect(TypeChecker.cast(value, 'Array')).to.deep.equal([value]); }); }); - context('when the value is an object', function() { - it('returns an empty array', function() { + context('when the value is an object', function () { + it('returns an empty array', function () { expect(TypeChecker.cast({}, 'Array')).to.deep.equal([]); }); }); }); - context('when casting to a date', function() { + context('when casting to a date', function () { var value = '2016-10-10'; var date = new Date(value); - it('returns the date', function() { + it('returns the date', function () { expect(TypeChecker.cast(value, 'Date')).to.deep.equal(date); }); }); }); - context('when the string is a 12-byte hex string', function() { - context('when casting to an ObjectId', function() { + context('when the string is a 12-byte hex string', function () { + context('when casting to an ObjectId', function () { var value = '58cbf2318ecfb65b8cee6556'; var oid = new ObjectId(value); - it('returns a new ObjectId', function() { + it('returns a new ObjectId', function () { expect(TypeChecker.cast(value, 'ObjectId')).to.deep.equal(oid); }); }); - context('when casting to a string', function() { + context('when casting to a string', function () { var value = '58cbf2318ecfb65b8cee6556'; - it('returns a string', function() { + it('returns a string', function () { expect(TypeChecker.cast(value, 'String')).to.deep.equal(value); }); }); }); }); - context('when the object is a primitive double', function() { - context('when casting to a string', function() { - it('returns the number as a string', function() { + context('when the object is a primitive double', function () { + context('when casting to a string', function () { + it('returns the number as a string', function () { expect(TypeChecker.cast(2.45, 'String')).to.equal('2.45'); }); }); - context('when casting to an object id', function() { - it('returns a new ObjectId()', function() { - expect(TypeChecker.cast(2.45, 'ObjectId')).to.be.an.instanceof(bson.ObjectId); + context('when casting to an object id', function () { + it('returns a new ObjectId()', function () { + expect(TypeChecker.cast(2.45, 'ObjectId')).to.be.an.instanceof( + bson.ObjectId + ); }); }); }); - context('when the object is a double', function() { - context('when casting to a string', function() { - it('returns the number as a string', function() { + context('when the object is a double', function () { + context('when casting to a string', function () { + it('returns the number as a string', function () { expect(TypeChecker.cast(new Double(2.45), 'String')).to.equal('2.45'); }); }); - context('when casting to decimal-128', function() { - it('returns the number as decimal-128', function() { - expect(TypeChecker.cast(new Double(2.45), 'Decimal128').toString()).to.equal('2.45'); + context('when casting to decimal-128', function () { + it('returns the number as decimal-128', function () { + expect( + TypeChecker.cast(new Double(2.45), 'Decimal128').toString() + ).to.equal('2.45'); }); }); }); - context('when the object is a long', function() { - context('when casting to a string', function() { - it('returns the number as a string', function() { + context('when the object is a long', function () { + context('when casting to a string', function () { + it('returns the number as a string', function () { expect(TypeChecker.cast(new Long(245), 'String')).to.equal('245'); }); }); - context('when casting to an int32', function() { - it('returns the number as an int32', function() { - expect(TypeChecker.cast(new Long(245), 'Int32')).to.deep.equal(new Int32(245)); + context('when casting to an int32', function () { + it('returns the number as an int32', function () { + expect(TypeChecker.cast(new Long(245), 'Int32')).to.deep.equal( + new Int32(245) + ); }); }); - context('when casting to a double', function() { - it('returns the number as a double', function() { - expect(TypeChecker.cast(new Long(245), 'Double')).to.deep.equal(new Double(245)); + context('when casting to a double', function () { + it('returns the number as a double', function () { + expect(TypeChecker.cast(new Long(245), 'Double')).to.deep.equal( + new Double(245) + ); }); }); - context('when casting to decimal-128', function() { - it('returns the number as decimal-128', function() { - expect(TypeChecker.cast(new Long(245), 'Decimal128').toString()).to.equal('245'); + context('when casting to decimal-128', function () { + it('returns the number as decimal-128', function () { + expect( + TypeChecker.cast(new Long(245), 'Decimal128').toString() + ).to.equal('245'); }); }); }); - context('when the object is an int32', function() { - context('when casting to a string', function() { - it('returns the number as a string', function() { + context('when the object is an int32', function () { + context('when casting to a string', function () { + it('returns the number as a string', function () { expect(TypeChecker.cast(new Int32(245), 'String')).to.equal('245'); }); }); - context('when casting to an int64', function() { - it('returns the number as an int64 from int32', function() { - expect(TypeChecker.cast(new Int32(245), 'Int64')).to.deep.equal(new Long(245)); + context('when casting to an int64', function () { + it('returns the number as an int64 from int32', function () { + expect(TypeChecker.cast(new Int32(245), 'Int64')).to.deep.equal( + new Long(245) + ); }); - it('returns the number as an int64 from decimal', function() { - expect(TypeChecker.cast(Decimal128.fromString('245'), 'Int64')).to.deep.equal(new Long(245)); + it('returns the number as an int64 from decimal', function () { + expect( + TypeChecker.cast(Decimal128.fromString('245'), 'Int64') + ).to.deep.equal(new Long(245)); }); - it('returns the number as an int64 from double', function() { - expect(TypeChecker.cast(new Double('245'), 'Int64')).to.deep.equal(new Long(245)); + it('returns the number as an int64 from double', function () { + expect(TypeChecker.cast(new Double('245'), 'Int64')).to.deep.equal( + new Long(245) + ); }); }); - context('when casting to a double', function() { - it('returns the number as a double', function() { - expect(TypeChecker.cast(new Int32(245), 'Double')).to.deep.equal(new Double(245)); + context('when casting to a double', function () { + it('returns the number as a double', function () { + expect(TypeChecker.cast(new Int32(245), 'Double')).to.deep.equal( + new Double(245) + ); }); }); - context('when casting to decimal-128', function() { - it('returns the number as decimal-128', function() { - expect(TypeChecker.cast(new Int32(245), 'Decimal128').toString()).to.equal('245'); + context('when casting to decimal-128', function () { + it('returns the number as decimal-128', function () { + expect( + TypeChecker.cast(new Int32(245), 'Decimal128').toString() + ).to.equal('245'); }); }); }); - context('when the object is an int64', function() { - context('when casting to an int64', function() { - it('returns the number as an int64', function() { - expect(TypeChecker.cast(new Long(245), 'Int64')).to.deep.equal(new Long(245)); + context('when the object is an int64', function () { + context('when casting to an int64', function () { + it('returns the number as an int64', function () { + expect(TypeChecker.cast(new Long(245), 'Int64')).to.deep.equal( + new Long(245) + ); }); }); }); - context('when the object is an int32 literal', function() { - context('when casting to a string', function() { - it('returns the number as a string', function() { + context('when the object is an int32 literal', function () { + context('when casting to a string', function () { + it('returns the number as a string', function () { expect(TypeChecker.cast(245, 'String')).to.equal('245'); }); }); - context('when casting to an int64', function() { - it('returns the number as an int64', function() { + context('when casting to an int64', function () { + it('returns the number as an int64', function () { expect(TypeChecker.cast(245, 'Int64')).to.deep.equal(new Long(245)); }); }); - context('when casting to a double', function() { - it('returns the number as a double', function() { - expect(TypeChecker.cast(245, 'Double')).to.deep.equal(new Double(245)); + context('when casting to a double', function () { + it('returns the number as a double', function () { + expect(TypeChecker.cast(245, 'Double')).to.deep.equal( + new Double(245) + ); }); }); }); - context('when the object is a binary', function() { - context('when casting to a string', function() { + context('when the object is a binary', function () { + context('when casting to a string', function () { var binary = new Binary(Buffer.from('test'), 0); - it('returns the binary as a string', function() { + it('returns the binary as a string', function () { expect(TypeChecker.cast(binary, 'String')).to.equal('test'); }); }); }); - context('when the object is an undefined', function() { - context('when casting to a string', function() { - it('returns an empty string', function() { + context('when the object is an undefined', function () { + context('when casting to a string', function () { + it('returns an empty string', function () { expect(TypeChecker.cast(undefined, 'String')).to.equal(''); }); }); }); - context('when the object is an object id', function() { - context('when casting to a string', function() { + context('when the object is an object id', function () { + context('when casting to a string', function () { var objectId = new ObjectId(); - it('returns the string id', function() { + it('returns the string id', function () { expect(TypeChecker.cast(objectId, 'String').length).to.equal(24); }); }); }); - context('when the object is a boolean false', function() { - context('when casting to a string', function() { - it('returns the string false', function() { + context('when the object is a boolean false', function () { + context('when casting to a string', function () { + it('returns the string false', function () { expect(TypeChecker.cast(false, 'String')).to.equal('false'); }); }); }); - context('when the object is a boolean true', function() { - context('when casting to a string', function() { - it('returns the string true', function() { + context('when the object is a boolean true', function () { + context('when casting to a string', function () { + it('returns the string true', function () { expect(TypeChecker.cast(true, 'String')).to.equal('true'); }); }); }); - context('when the object is a utc date time', function() { - context('when casting to a string', function() { + context('when the object is a utc date time', function () { + context('when casting to a string', function () { var date = new Date(2016, 1, 1); - it('returns the date as a string', function() { + it('returns the date as a string', function () { expect(TypeChecker.cast(date, 'String')).to.not.equal(''); }); }); }); - context('when the object is a null', function() { - context('when casting to a string', function() { - it('returns an empty string', function() { + context('when the object is a null', function () { + context('when casting to a string', function () { + it('returns an empty string', function () { expect(TypeChecker.cast(null, 'String')).to.equal(''); }); }); }); - context('when the object is a regex', function() { - context('when casting to a string', function() { + context('when the object is a regex', function () { + context('when casting to a string', function () { var regex = new BSONRegExp('+w', 'i'); - it('returns the string regex', function() { + it('returns the string regex', function () { expect(TypeChecker.cast(regex, 'String')).to.equal(''); }); }); }); - context('when the object is a min key', function() { - context('when casting to a string', function() { + context('when the object is a min key', function () { + context('when casting to a string', function () { var minKey = new MinKey(); - it('returns an empty string', function() { + it('returns an empty string', function () { expect(TypeChecker.cast(minKey, 'String')).to.equal(''); }); }); }); - context('when the object is a max key', function() { - context('when casting to a string', function() { + context('when the object is a max key', function () { + context('when casting to a string', function () { var maxKey = new MaxKey(); - it('returns an empty string', function() { + it('returns an empty string', function () { expect(TypeChecker.cast(maxKey, 'String')).to.equal(''); }); }); }); - context('when the object is an object', function() { - context('when casting to a string', function() { - it('returns an empty string', function() { + context('when the object is an object', function () { + context('when casting to a string', function () { + it('returns an empty string', function () { expect(TypeChecker.cast({}, 'String')).to.equal(''); }); }); - context('when casting to a string and the string is [object Object] does not return empty', function() { - it('returns an empty string', function() { - expect(TypeChecker.cast('[object Object]', 'String')).to.equal('[object Object]'); - }); - }); + context( + 'when casting to a string and the string is [object Object] does not return empty', + function () { + it('returns an empty string', function () { + expect(TypeChecker.cast('[object Object]', 'String')).to.equal( + '[object Object]' + ); + }); + } + ); - context('when casting to an array', function() { - it('returns an empty array', function() { - expect(TypeChecker.cast({ test: 'value' }, 'Array')).to.deep.equal([]); + context('when casting to an array', function () { + it('returns an empty array', function () { + expect(TypeChecker.cast({ test: 'value' }, 'Array')).to.deep.equal( + [] + ); }); }); - context('when casting to a binary', function() { - it('returns an empty binary', function() { - expect(TypeChecker.cast({ test: 'value' }, 'Binary')._bsontype).to.equal('Binary'); + context('when casting to a binary', function () { + it('returns an empty binary', function () { + expect( + TypeChecker.cast({ test: 'value' }, 'Binary')._bsontype + ).to.equal('Binary'); }); }); - context('when casting to a boolean', function() { - it('returns true', function() { + context('when casting to a boolean', function () { + it('returns true', function () { expect(TypeChecker.cast({ test: 'value' }, 'Boolean')).to.equal(true); }); }); - context('when casting to a code', function() { - it('returns an empty code', function() { - expect(TypeChecker.cast({ test: 'value' }, 'Code').code).to.equal('[object Object]'); + context('when casting to a code', function () { + it('returns an empty code', function () { + expect(TypeChecker.cast({ test: 'value' }, 'Code').code).to.equal( + '[object Object]' + ); }); }); - context('when casting to a date', function() { - it('returns the invalid date', function() { - expect(TypeChecker.cast({ test: 'value' }, 'Date').toString()).to.equal('Invalid Date'); + context('when casting to a date', function () { + it('returns the invalid date', function () { + expect( + TypeChecker.cast({ test: 'value' }, 'Date').toString() + ).to.equal('Invalid Date'); }); }); }); - context('when the object is an Array', function() { - context('when casting to a string', function() { - var value = [ 'test', 'test2' ]; - it('returns Array', function() { + context('when the object is an Array', function () { + context('when casting to a string', function () { + var value = ['test', 'test2']; + it('returns Array', function () { expect(TypeChecker.cast(value, 'String')).to.deep.equal('test,test2'); }); }); }); }); - describe('#type', function() { - context('when the object is a string', function() { - it('returns String', function() { + describe('#type', function () { + context('when the object is a string', function () { + it('returns String', function () { expect(TypeChecker.type('testing')).to.equal('String'); }); }); - context('when the object is a double', function() { - it('returns Double', function() { + context('when the object is a double', function () { + it('returns Double', function () { expect(TypeChecker.type(new Double(2.45))).to.equal('Double'); }); }); - context('when the object is a decimal 128', function() { - it('returns Decimal128', function() { - expect(TypeChecker.type(Decimal128.fromString('2.45'))).to.equal('Decimal128'); + context('when the object is a decimal 128', function () { + it('returns Decimal128', function () { + expect(TypeChecker.type(Decimal128.fromString('2.45'))).to.equal( + 'Decimal128' + ); }); }); - context('when the object is a binary', function() { + context('when the object is a binary', function () { var binary = new Binary(Buffer.from('test'), 0); - it('returns Binary', function() { + it('returns Binary', function () { expect(TypeChecker.type(binary)).to.equal('Binary'); }); }); - context('when the object is an undefined', function() { - it('returns Undefined', function() { + context('when the object is an undefined', function () { + it('returns Undefined', function () { expect(TypeChecker.type(undefined)).to.equal('Undefined'); }); }); - context('when the object is an object id', function() { + context('when the object is an object id', function () { var objectId = new ObjectId(); - it('returns ObjectId', function() { + it('returns ObjectId', function () { expect(TypeChecker.type(objectId)).to.equal('ObjectId'); }); }); - context('when the object is a boolean false', function() { - it('returns boolean', function() { + context('when the object is a boolean false', function () { + it('returns boolean', function () { expect(TypeChecker.type(false)).to.equal('Boolean'); }); }); - context('when the object is a boolean true', function() { - it('returns boolean', function() { + context('when the object is a boolean true', function () { + it('returns boolean', function () { expect(TypeChecker.type(true)).to.equal('Boolean'); }); }); - context('when the object is a utc date time', function() { + context('when the object is a utc date time', function () { var date = new Date(); - it('returns Date', function() { + it('returns Date', function () { expect(TypeChecker.type(date)).to.equal('Date'); }); }); - context('when the object is a null', function() { - it('returns Null', function() { + context('when the object is a null', function () { + it('returns Null', function () { expect(TypeChecker.type(null)).to.equal('Null'); }); }); - context('when the object is a regex', function() { + context('when the object is a regex', function () { var regex = new BSONRegExp('+w', 'i'); - it('returns BSONRegExp', function() { + it('returns BSONRegExp', function () { expect(TypeChecker.type(regex)).to.equal('BSONRegExp'); }); }); - context('when the object is an object', function() { - it('returns Object', function() { + context('when the object is an object', function () { + it('returns Object', function () { expect(TypeChecker.type({})).to.equal('Object'); }); }); - context('when the object is an Array', function() { - it('returns Array', function() { - expect(TypeChecker.type([ 'test' ])).to.equal('Array'); + context('when the object is an Array', function () { + it('returns Array', function () { + expect(TypeChecker.type(['test'])).to.equal('Array'); }); }); - context('when the object is a code', function() { + context('when the object is a code', function () { var code = new Code('where blah'); - it('returns Code', function() { + it('returns Code', function () { expect(TypeChecker.type(code)).to.equal('Code'); }); }); - context('when the object is a code with scope', function() { + context('when the object is a code with scope', function () { var code = new Code('where blah', {}); - it('returns Code', function() { + it('returns Code', function () { expect(TypeChecker.type(code)).to.equal('Code'); }); }); - context('when the object is a 32bit int', function() { - it('returns Int32', function() { + context('when the object is a 32bit int', function () { + it('returns Int32', function () { expect(TypeChecker.type(new Int32(1234234))).to.equal('Int32'); }); }); - context('when the object is a timestamp', function() { + context('when the object is a timestamp', function () { var timestamp = new Timestamp({ t: 0, i: 100 }); - it('returns Timestamp', function() { + it('returns Timestamp', function () { expect(TypeChecker.type(timestamp)).to.equal('Timestamp'); }); }); - context('when the object is a bson long', function() { - it('returns Int64', function() { - expect(TypeChecker.type(new Long(Number.MAX_SAFE_INTEGER))).to.equal('Int64'); + context('when the object is a bson long', function () { + it('returns Int64', function () { + expect(TypeChecker.type(new Long(Number.MAX_SAFE_INTEGER))).to.equal( + 'Int64' + ); }); }); - context('when the object is a bson double', function() { - it('returns Double', function() { + context('when the object is a bson double', function () { + it('returns Double', function () { expect(TypeChecker.type(new Double(43.13123123))).to.equal('Double'); }); }); - context('when the object is a min key', function() { + context('when the object is a min key', function () { var minKey = new MinKey(); - it('returns ObjectId', function() { + it('returns ObjectId', function () { expect(TypeChecker.type(minKey)).to.equal('MinKey'); }); }); - context('when the object is a max key', function() { + context('when the object is a max key', function () { var maxKey = new MaxKey(); - it('returns ObjectId', function() { + it('returns ObjectId', function () { expect(TypeChecker.type(maxKey)).to.equal('MaxKey'); }); }); - - context('when the object is an object', function() { - it('returns Object', function() { - expect(TypeChecker.type({})).to.equal('Object'); - }); - }); - - context('when the object is an Array', function() { - it('returns Array', function() { - expect(TypeChecker.type([ 'test' ])).to.equal('Array'); - }); - }); }); - describe('#castableTypes', function() { - context('when using high precision support', function() { - it('includes decimal 128', function() { + describe('#castableTypes', function () { + context('when using high precision support', function () { + it('includes decimal 128', function () { expect(TypeChecker.castableTypes(true)).to.deep.equal([ 'Array', 'Binary', @@ -741,13 +801,13 @@ describe('TypeChecker', function() { 'String', 'BSONSymbol', 'Timestamp', - 'Undefined' + 'Undefined', ]); }); }); - context('when not using high precision support', function() { - it('does not include decimal 128', function() { + context('when not using high precision support', function () { + it('does not include decimal 128', function () { expect(TypeChecker.castableTypes()).to.deep.equal([ 'Array', 'Binary', @@ -766,7 +826,7 @@ describe('TypeChecker', function() { 'String', 'BSONSymbol', 'Timestamp', - 'Undefined' + 'Undefined', ]); }); }); diff --git a/packages/mongodb-explain-compat/.eslintrc b/packages/mongodb-explain-compat/.eslintrc index cff2b28a7a9..3024abad4f1 100644 --- a/packages/mongodb-explain-compat/.eslintrc +++ b/packages/mongodb-explain-compat/.eslintrc @@ -1,8 +1,4 @@ { - "extends": [ - "semistandard" - ], - "rules": { - "space-before-function-paren": 0 - } + "root": true, + "extends": ["@mongodb-js/eslint-config-compass"] } diff --git a/packages/mongodb-explain-compat/.prettierrc.json b/packages/mongodb-explain-compat/.prettierrc.json new file mode 100644 index 00000000000..18853d1532e --- /dev/null +++ b/packages/mongodb-explain-compat/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-compass" diff --git a/packages/mongodb-explain-compat/lib/index.js b/packages/mongodb-explain-compat/lib/index.js index a9f1a346506..ff368b4e28f 100644 --- a/packages/mongodb-explain-compat/lib/index.js +++ b/packages/mongodb-explain-compat/lib/index.js @@ -5,19 +5,41 @@ const kSBENodes = Symbol('kSBENodes'); function mapPlanTree(stage, mapper, currentParent = null) { const result = mapper(stage, currentParent); const target = result || {}; - if (stage.inputStage) target.inputStage = mapPlanTree(stage.inputStage, mapper, stage); - if (stage.innerStage) target.innerStage = mapPlanTree(stage.innerStage, mapper, stage); - if (stage.outerStage) target.outerStage = mapPlanTree(stage.outerStage, mapper, stage); - if (stage.thenStage) target.thenStage = mapPlanTree(stage.thenStage, mapper, stage); - if (stage.elseStage) target.elseStage = mapPlanTree(stage.elseStage, mapper, stage); - if (stage.inputStages) target.inputStages = stage.inputStages.map(s => mapPlanTree(s, mapper, stage)); - if (stage.shards) target.shards = stage.shards.map(s => mapPlanTree(s, stage)); - if (stage.executionStages) target.executionStages = stage.executionStages.map(s => mapPlanTree(s, mapper, stage)); + if (stage.inputStage) { + target.inputStage = mapPlanTree(stage.inputStage, mapper, stage); + } + if (stage.innerStage) { + target.innerStage = mapPlanTree(stage.innerStage, mapper, stage); + } + if (stage.outerStage) { + target.outerStage = mapPlanTree(stage.outerStage, mapper, stage); + } + if (stage.thenStage) { + target.thenStage = mapPlanTree(stage.thenStage, mapper, stage); + } + if (stage.elseStage) { + target.elseStage = mapPlanTree(stage.elseStage, mapper, stage); + } + if (stage.inputStages) { + target.inputStages = stage.inputStages.map((s) => + mapPlanTree(s, mapper, stage) + ); + } + if (stage.shards) { + target.shards = stage.shards.map((s) => mapPlanTree(s, stage)); + } + if (stage.executionStages) { + target.executionStages = stage.executionStages.map((s) => + mapPlanTree(s, mapper, stage) + ); + } return result; } function omitChildStages(stage) { - return mapPlanTree(stage, child => stage === child ? { ...stage } : undefined); + return mapPlanTree(stage, (child) => + stage === child ? { ...stage } : undefined + ); } function mapStages(queryPlan, sbeExecutionStages) { @@ -25,7 +47,7 @@ function mapStages(queryPlan, sbeExecutionStages) { // First, look up all stages from the query plan, and store their IDs so // that we know which SBE nodes we should assign to which query plan node. - mapPlanTree(queryPlan, stage => { + mapPlanTree(queryPlan, (stage) => { if (stage.planNodeId) { nodeIdToQueryPlan.set(stage.planNodeId, stage); stage[kSBENodes] = []; @@ -53,21 +75,23 @@ function mapStages(queryPlan, sbeExecutionStages) { // Do the actual mapping here. Use the head SBE node, and only aggregate // 'docsExamined' based on all child nodes and 'executionTimeMillisEstimate' // based on all top-level child nodes here. - return mapPlanTree(queryPlan, stage => { + return mapPlanTree(queryPlan, (stage) => { const sbeNodes = stage[kSBENodes]; const headSBENode = sbeNodes[0] || {}; return { ...omitChildStages(headSBENode), ...omitChildStages(stage), - executionTimeMillisEstimate: headSBENode.executionTimeMillis || headSBENode.executionTimeMillisEstimate, + executionTimeMillisEstimate: + headSBENode.executionTimeMillis || + headSBENode.executionTimeMillisEstimate, docsExamined: sbeNodes - .filter(sbe => sbe.stage === 'seek' || sbe.stage === 'scan') - .map(sbe => sbe.numReads || 0) + .filter((sbe) => sbe.stage === 'seek' || sbe.stage === 'scan') + .map((sbe) => sbe.numReads || 0) .reduce((a, b) => a + b, 0), keysExamined: sbeNodes - .filter(sbe => sbe.stage === 'ixseek' || sbe.stage === 'ixscan') - .map(sbe => sbe.numReads || 0) - .reduce((a, b) => a + b, 0) + .filter((sbe) => sbe.stage === 'ixseek' || sbe.stage === 'ixscan') + .map((sbe) => sbe.numReads || 0) + .reduce((a, b) => a + b, 0), }; }); } diff --git a/packages/mongodb-explain-compat/package.json b/packages/mongodb-explain-compat/package.json index e9cfbb30b87..81af5e97da6 100644 --- a/packages/mongodb-explain-compat/package.json +++ b/packages/mongodb-explain-compat/package.json @@ -47,13 +47,8 @@ }, "license": "SSPL", "devDependencies": { + "@mongodb-js/eslint-config-compass": "^1.1.7", "eslint": "^7.25.0", - "eslint-config-semistandard": "^15.0.1", - "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1", "gen-esm-wrapper": "^1.1.0", "mocha": "^10.2.0", "nyc": "^15.1.0" diff --git a/packages/mongodb-explain-compat/test/fixtures/in1.json b/packages/mongodb-explain-compat/test/fixtures/in1.json index 0dce9415598..9b42816bc27 100644 --- a/packages/mongodb-explain-compat/test/fixtures/in1.json +++ b/packages/mongodb-explain-compat/test/fixtures/in1.json @@ -32,9 +32,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] } } }, @@ -65,9 +63,7 @@ "innerOpens": 1432, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 2 - ], + "outerCorrelated": [2], "outerStage": { "stage": "nlj", "planNodeId": 1, @@ -82,10 +78,7 @@ "innerOpens": 1, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 3, - 4 - ], + "outerCorrelated": [3, 4], "outerStage": { "stage": "project", "planNodeId": 1, @@ -196,4 +189,4 @@ "gitVersion": "16aff18cbb6b993ac325a50a59b1898d35cf08c3" }, "ok": 1 -} \ No newline at end of file +} diff --git a/packages/mongodb-explain-compat/test/fixtures/in2.json b/packages/mongodb-explain-compat/test/fixtures/in2.json index 08734c3f12f..9bbfed2ec94 100644 --- a/packages/mongodb-explain-compat/test/fixtures/in2.json +++ b/packages/mongodb-explain-compat/test/fixtures/in2.json @@ -56,10 +56,7 @@ "objSlot": 9, "rootSlot": 4, "fieldBehavior": "keep", - "fields": [ - "_id", - "i" - ], + "fields": ["_id", "i"], "projectFields": [], "projectSlots": [], "forceNewObject": true, diff --git a/packages/mongodb-explain-compat/test/fixtures/out1.json b/packages/mongodb-explain-compat/test/fixtures/out1.json index b2e98b3bada..49fafdd214f 100644 --- a/packages/mongodb-explain-compat/test/fixtures/out1.json +++ b/packages/mongodb-explain-compat/test/fixtures/out1.json @@ -30,9 +30,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] } } }, @@ -59,9 +57,7 @@ "innerOpens": 1432, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 2 - ], + "outerCorrelated": [2], "inputStage": { "stage": "IXSCAN", "planNodeId": 1, @@ -76,10 +72,7 @@ "innerOpens": 1, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 3, - 4 - ], + "outerCorrelated": [3, 4], "keyPattern": { "beds": 1 }, @@ -94,9 +87,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] }, "docsExamined": 0, "keysExamined": 1432 diff --git a/packages/mongodb-explain-compat/test/fixtures/out2.json b/packages/mongodb-explain-compat/test/fixtures/out2.json index 3cce3e9752d..d615514d883 100644 --- a/packages/mongodb-explain-compat/test/fixtures/out2.json +++ b/packages/mongodb-explain-compat/test/fixtures/out2.json @@ -50,10 +50,7 @@ "objSlot": 9, "rootSlot": 4, "fieldBehavior": "keep", - "fields": [ - "_id", - "i" - ], + "fields": ["_id", "i"], "projectFields": [], "projectSlots": [], "forceNewObject": true, diff --git a/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.in.json b/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.in.json index 0dce9415598..9b42816bc27 100644 --- a/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.in.json +++ b/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.in.json @@ -32,9 +32,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] } } }, @@ -65,9 +63,7 @@ "innerOpens": 1432, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 2 - ], + "outerCorrelated": [2], "outerStage": { "stage": "nlj", "planNodeId": 1, @@ -82,10 +78,7 @@ "innerOpens": 1, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 3, - 4 - ], + "outerCorrelated": [3, 4], "outerStage": { "stage": "project", "planNodeId": 1, @@ -196,4 +189,4 @@ "gitVersion": "16aff18cbb6b993ac325a50a59b1898d35cf08c3" }, "ok": 1 -} \ No newline at end of file +} diff --git a/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.out.json b/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.out.json index b2e98b3bada..49fafdd214f 100644 --- a/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.out.json +++ b/packages/mongodb-explain-compat/test/fixtures/unsharded-find.sbe.out.json @@ -30,9 +30,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] } } }, @@ -59,9 +57,7 @@ "innerOpens": 1432, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 2 - ], + "outerCorrelated": [2], "inputStage": { "stage": "IXSCAN", "planNodeId": 1, @@ -76,10 +72,7 @@ "innerOpens": 1, "innerCloses": 1, "outerProjects": [], - "outerCorrelated": [ - 3, - 4 - ], + "outerCorrelated": [3, 4], "keyPattern": { "beds": 1 }, @@ -94,9 +87,7 @@ "indexVersion": 2, "direction": "forward", "indexBounds": { - "beds": [ - "(2, inf.0]" - ] + "beds": ["(2, inf.0]"] }, "docsExamined": 0, "keysExamined": 1432 diff --git a/packages/mongodb-explain-compat/test/index.js b/packages/mongodb-explain-compat/test/index.js index 1ee2329a866..042944c3826 100644 --- a/packages/mongodb-explain-compat/test/index.js +++ b/packages/mongodb-explain-compat/test/index.js @@ -1,4 +1,3 @@ -/* global describe, it */ 'use strict'; const convertExplainCompat = require('..'); const assert = require('assert'); @@ -11,20 +10,20 @@ function fixture(name) { ); } -describe('convertExplainCompat', () => { - it('maps stuff from the SBE format to the pre-SBE format (in1)', () => { +describe('convertExplainCompat', function () { + it('maps stuff from the SBE format to the pre-SBE format (in1)', function () { assert.deepStrictEqual( convertExplainCompat(fixture('in1')), fixture('out1') ); }); - it('maps stuff from the SBE format to the pre-SBE format (in2)', () => { + it('maps stuff from the SBE format to the pre-SBE format (in2)', function () { assert.deepStrictEqual( convertExplainCompat(fixture('in2')), fixture('out2') ); }); - it('keeps the old SBE format as-is', () => { + it('keeps the old SBE format as-is', function () { assert.deepStrictEqual( convertExplainCompat(fixture('in4')), fixture('in4') @@ -32,7 +31,7 @@ describe('convertExplainCompat', () => { }); describe('Sharded Aggregations', function () { - it('keeps the classic for as-is - with stages', () => { + it('keeps the classic for as-is - with stages', function () { assert.deepStrictEqual( convertExplainCompat( fixture('sharded-aggregate-with-stages.classic.in') @@ -40,7 +39,7 @@ describe('convertExplainCompat', () => { fixture('sharded-aggregate-with-stages.classic.out') ); }); - it('keeps the classic for as-is - without stages', () => { + it('keeps the classic for as-is - without stages', function () { assert.deepStrictEqual( convertExplainCompat( fixture('sharded-aggregate-without-stages.classic.in') @@ -48,13 +47,13 @@ describe('convertExplainCompat', () => { fixture('sharded-aggregate-without-stages.classic.out') ); }); - it('maps the SBE format to pre-SBE - with stages', () => { + it('maps the SBE format to pre-SBE - with stages', function () { assert.deepStrictEqual( convertExplainCompat(fixture('sharded-aggregate-with-stages.sbe.in')), fixture('sharded-aggregate-with-stages.sbe.out') ); }); - it('maps the SBE format to pre-SBE - without stages', () => { + it('maps the SBE format to pre-SBE - without stages', function () { assert.deepStrictEqual( convertExplainCompat( fixture('sharded-aggregate-without-stages.sbe.in') @@ -79,13 +78,13 @@ describe('convertExplainCompat', () => { }); describe('Sharded Queries', function () { - it('keeps the classic format as-is', () => { + it('keeps the classic format as-is', function () { assert.deepStrictEqual( convertExplainCompat(fixture('sharded-find.classic.in')), fixture('sharded-find.classic.out') ); }); - it('maps the SBE format to pre-SBE', () => { + it('maps the SBE format to pre-SBE', function () { assert.deepStrictEqual( convertExplainCompat(fixture('sharded-find.sbe.in')), fixture('sharded-find.sbe.out') @@ -93,19 +92,19 @@ describe('convertExplainCompat', () => { }); }); describe('Unsharded Queries', function () { - it('keeps the classic format as-is', () => { + it('keeps the classic format as-is', function () { assert.deepStrictEqual( convertExplainCompat(fixture('unsharded-find.classic.in')), fixture('unsharded-find.classic.out') ); }); - it('maps the SBE format to pre-SBE', () => { + it('maps the SBE format to pre-SBE', function () { assert.deepStrictEqual( convertExplainCompat(fixture('unsharded-find.sbe.in')), fixture('unsharded-find.sbe.out') ); }); - it('handles 7.2 (SERVER-79724) changes to mongos explain for unsharded collections', () => { + it('handles 7.2 (SERVER-79724) changes to mongos explain for unsharded collections', function () { assert.deepStrictEqual( convertExplainCompat(fixture('unsharded-aggregate-on-mongos.7.2.in')), fixture('unsharded-aggregate-on-mongos.7.2.out') From 8af5d4e18cb47b46518caa3d9f3cfaaafe19b887 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:48:02 +0000 Subject: [PATCH 55/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6314) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 18024 ++++++++++++++++++--------------------- docs/tracking-plan.md | 2 +- 2 files changed, 8514 insertions(+), 9512 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 616e9ade9e5..fc0e708f5e9 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,671 +1,669 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Oct 01 2024. +This document was automatically generated on Wed Oct 02 2024. ## List of dependencies -| Package | Version | License | -| --------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------- | -| **[@ampproject/remapping](#0dc8b6568eb743fd551ce2cf2f54be9d0f94b12167f7c34a997c864bcc7e128d)** | 2.2.0 | Apache-2.0 | -| **[@aws-sdk/client-cognito-identity](#d3350d9512a30a7d722a254609aaeb5048055ad7ac83e0fc718676cba82d4f0e)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/client-sso](#122bc8ec6e0086415cbed6567ead1e85e6a80326f5609ee0221fabcf2bc3e35b)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/client-sts](#92440c05901818918488da134d1ff538799409309918135a178f5881d1eb6dcc)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/core](#5ef232eecbafdb891fe4d107f580fd4b94e4eb2712df79ab4b5c3c0255e9b8d0)** | 3.629.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-cognito-identity](#a0b39e721e27fe3cda471c233a5dd7105832c517c80022d149a2709ceecb4a20)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-env](#f0037899766f9fb156ae52d4262089a964f044c3a331a71320443ad3664ba4e5)** | 3.620.1 | Apache-2.0 | -| **[@aws-sdk/credential-provider-http](#990097dcbfa0fafca7fe8253939d00e2237407a576c79a8b94c3fb402a40f9f4)** | 3.622.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-ini](#d0499091db530426e22820e5a86e11c1635cd6cfd6886be00a73167496589031)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-node](#15a01844ec1a77911fc8af581b4cc91607f4ea537aa1b55099ddeb3933c08793)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-process](#6df29928703aec90607f9c2d3a1c36071751aa24177be72f0fc88c6773b7df22)** | 3.620.1 | Apache-2.0 | -| **[@aws-sdk/credential-provider-sso](#d0a0d6042ff0dfbd6143041fd83bc1096e36ec1b9b7100726135989fe6974d7b)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/credential-provider-web-identity](#7ca705ce1768551740ce25addeda56a029a25efb024929b6224fffed16402d87)** | 3.621.0 | Apache-2.0 | -| **[@aws-sdk/credential-providers](#89261894eb9947986c4f5e3d27470902346dad44742f42ed42ef0c3b7a443165)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/middleware-host-header](#76f9788f0a3892655b30ff5be7eadcc24c2a4dc60675874d11e110e53cf7d770)** | 3.620.0 | Apache-2.0 | -| **[@aws-sdk/middleware-logger](#77971232a25c0db769f48f8c0b70d1272e792393db29953a47d319effbca9616)** | 3.609.0 | Apache-2.0 | -| **[@aws-sdk/middleware-recursion-detection](#a19d96e543a0b45bed652d0c84ce89e3f27c98bbcfecbdb66fe4124b14f4e25c)** | 3.620.0 | Apache-2.0 | -| **[@aws-sdk/middleware-user-agent](#a3db739171b14ee7fbc688b1442211cc99cbec5032b4e29c011f4031d6d30789)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/region-config-resolver](#c707d161415ea2bbe26756eb111aa1fa6e20fe297f8357c2314200f1bc7b4812)** | 3.614.0 | Apache-2.0 | -| **[@aws-sdk/token-providers](#2797e884608a8f3c4d716b944c9df465acbf619c27612fecdf21e6feac32ffd4)** | 3.614.0 | Apache-2.0 | -| **[@aws-sdk/util-endpoints](#d7c10ece9c460c5fda50acd92143946e29643997740b52f22a2db086204b922b)** | 3.632.0 | Apache-2.0 | -| **[@aws-sdk/util-user-agent-node](#78337458e259597e1af9ae36c139707b9d47d298d6b660fda8ca49f7a6039933)** | 3.614.0 | Apache-2.0 | -| **[@babel/code-frame](#414cb15586d104447ca15cc1904c5779eb415e9079a4a3ca6a81ad96ba9ee4e1)** | 7.24.7 | MIT | -| **[@babel/compat-data](#b4fe3477d50389378e6666362dee06b0abe468140f77f427b952059f193a7a38)** | 7.25.2 | MIT | -| **[@babel/core](#cb1e750729bb20848944291eb3bd3ec445a032e1929fef18d6ee0a6ef3f04bcb)** | 7.25.2 | MIT | -| **[@babel/generator](#0b27790f5456040ac13e71653c95ea0152f86742fcab51983e67601681ba94e0)** | 7.25.0 | MIT | -| **[@babel/helper-annotate-as-pure](#029a306089573d76f9def44953787148e1b886d6f554efd9b97b9e7c226a0bb7)** | 7.22.5 | MIT | -| **[@babel/helper-compilation-targets](#508649a127123be64df2bf11cb716138ec0b9e821f15f99f2f4ff05ea6b4da74)** | 7.25.2 | MIT | -| **[@babel/helper-create-class-features-plugin](#ecefee5d4a0100be1536cec655793a6bf8aa75d540cd1d4ce8df49a91d25f653)** | 7.22.6 | MIT | -| **[@babel/helper-environment-visitor](#7c3618d6e312d4ee318c25b43c5e6e8b79bdd545f899341f34f4174f993f75c6)** | 7.24.7 | MIT | -| **[@babel/helper-function-name](#341cda70cf85da27703ac922b9c9e2ae965553830dec7e94a358ea0efc80e33f)** | 7.24.7 | MIT | -| **[@babel/helper-member-expression-to-functions](#a4b70dbf2d35802a3d8c37e07c5cf031678d08474ef4ab11a6d7e5e3a3143626)** | 7.22.5 | MIT | -| **[@babel/helper-module-imports](#ae249528a13dcadd4a50009d6fc23533184b7512e6029f8e75472bc05ec78328)** | 7.24.7 | MIT | -| **[@babel/helper-module-transforms](#ba2e9abfc9b01015dc06b6eecaff1e93add098ad2ee1fca4541d2a42b1e3b265)** | 7.25.2 | MIT | -| **[@babel/helper-optimise-call-expression](#4e8bad824c45ef99b87f6cf7d3f35a61a8d2d36406972594e230d12ae775ec9c)** | 7.22.5 | MIT | -| **[@babel/helper-plugin-utils](#b7852d4cf81a7e126d632935ff358c99ae9f07948155e64224a2d526a903a009)** | 7.22.5 | MIT | -| **[@babel/helper-replace-supers](#a646f77bcb685d394b994b1e972791acdfcd92c83f33daec4ff2e75c9b1ed148)** | 7.22.5 | MIT | -| **[@babel/helper-simple-access](#72de0cb66b9416da47c095a80457dee176b7e8944b20eb0aa927ee59517c69b1)** | 7.24.7 | MIT | -| **[@babel/helper-skip-transparent-expression-wrappers](#3680d72a3e5058442cc8966d761775227dc7296f71c862ab179c463d5caeb58b)** | 7.22.5 | MIT | -| **[@babel/helper-split-export-declaration](#05dfa4aa91ff28ddfbe5e3741d3535f2998fd2ff8619ee42a619458dcca04873)** | 7.24.7 | MIT | -| **[@babel/helper-string-parser](#4b5727b5007527084d63346bf4767bc3b8683c75b68fc4f3a1a3d0cee5fa235a)** | 7.24.8 | MIT | -| **[@babel/helper-validator-identifier](#cd56a60c2382cafd5f5f3432d2af1a5103bcbb862da8abd0d0db0316886a2789)** | 7.24.7 | MIT | -| **[@babel/helper-validator-option](#cfe2d04997b6c7a764f96a7383b7518f4ad73844a12cc8dc3537045dcc297fad)** | 7.24.8 | MIT | -| **[@babel/helpers](#43b0b2e5ad67e18b90f0a2f60c96c3818519ddba3de59ed0c52a594f33e7b32a)** | 7.25.0 | MIT | -| **[@babel/highlight](#ac1d96bb7961d93c529e7b46f2fcf1ee07f0cb15851aab1ac5f212b46e0f0e7d)** | 7.24.7 | MIT | -| **[@babel/parser](#4dfa90cfe90188b3d219eee843ef7f70003af7c190bbb15dd2fe74a57ab9ae16)** | 7.25.6 | MIT | -| **[@babel/plugin-syntax-jsx](#92b0c9e2acd6beca918c90ecdc4cc5973ac7c517f7dee4ef88df317effdfa44b)** | 7.22.5 | MIT | -| **[@babel/plugin-syntax-typescript](#61156a21baf5a28e3fe10ec0f30808684165b1dbb5f5122c2e2eaf69f6f4f237)** | 7.21.4 | MIT | -| **[@babel/plugin-transform-destructuring](#c97fc3729e02faa151dc6eb84560e5aba3f15e1b409cf5ed2a58431f96660368)** | 7.22.5 | MIT | -| **[@babel/plugin-transform-modules-commonjs](#9dc9700c07e14862f1c48a1e4be203ffe5e62597a92411fba7140f125638e391)** | 7.22.5 | MIT | -| **[@babel/plugin-transform-parameters](#6fac48e0505318a21b9554f11767b16b6a8bf8cb79c8bf6379fff44932cfbbfd)** | 7.22.5 | MIT | -| **[@babel/plugin-transform-shorthand-properties](#b93c2977332c87c88bb42733c298a494df63eb1ad048aab45aa7a57960fbce6e)** | 7.22.5 | MIT | -| **[@babel/plugin-transform-typescript](#01d55893e2b014a36f9855b9c88123888b53f8f2f205e7a9511e2272a8c72ce5)** | 7.21.3 | MIT | -| **[@babel/preset-typescript](#6453c0322ee9255614c50610d48452459d62e0663cb3d060b83e4c3b7dc06dc4)** | 7.21.4 | MIT | -| **[@babel/runtime](#3a0292b85c21e6020d26f99075ac094fa943f759b0df9b7c01cccf01f65efeb9)** | 7.21.0 | MIT | -| **[@babel/template](#ce7b7770e36438d8eb9e8713520aca18c79d1fd0cad068eeb5c88cede557f6a3)** | 7.25.0 | MIT | -| **[@babel/traverse](#bc1b8d30e8e37f5eade430e098b05094a0dd90264ff2c291510973e5315014af)** | 7.25.2 | MIT | -| **[@babel/types](#c6630d254fc6e684be9d283c7020e7e911bb98d9c99a3e405e4467b1e57ec9f4)** | 7.25.6 | MIT | -| **[@codemirror/autocomplete](#62d2362c07f0c11664969b60d0d7c3e081905838b8994675aaf0e6c67baf358d)** | 6.17.0 | MIT | -| **[@codemirror/commands](#e12a76404dd2d66430f2dff53a430449896e9b5c2558779497b855ba2ab9326a)** | 6.1.2 | MIT | -| **[@codemirror/lang-javascript](#d5fb6a843784efdc3ec06ae43bdf3ca13ec93a6bce802995a47cf7bddafc9628)** | 6.1.2 | MIT | -| **[@codemirror/lang-json](#8681100c5ce2bab822c877bc288cac59b84b13ff17735c301d4e1c7fa5924720)** | 6.0.1 | MIT | -| **[@codemirror/language](#5528845a8e28aec6e48cb76145e25db0921b87499dc07ab852cdeca48b9f87a6)** | 6.3.2 | MIT | -| **[@codemirror/lint](#9b9400c17e0d1474348d87ba1131d9609c3598ea4d575380f81fd746b02ec796)** | 6.1.1 | MIT | -| **[@codemirror/state](#7db8880200a14064e03a5e8dd0483aa16511fc8a0c4e09353d51816771f8b63d)** | 6.4.1 | MIT | -| **[@codemirror/view](#f6bea8a649eb633e0e66739e6d3bee4d37893904778e421d126f1e5ae250c9fb)** | 6.28.4 | MIT | -| **[@dnd-kit/accessibility](#bf712d0ed1df4df5829a9e9695c42e816564346a70cab60f6eaf9c141f8b510d)** | 3.0.1 | MIT | -| **[@dnd-kit/core](#6200777f2fce7fbea84b65146c30f3f882633a73ab4e85f62de992928bebd267)** | 6.0.7 | MIT | -| **[@dnd-kit/sortable](#059a166729dc9306b37987bfa0eaa5e59b3ffc6928155d28750993d7178ea61e)** | 7.0.2 | MIT | -| **[@dnd-kit/utilities](#5c1b45075a016b1605974d8314078eaff1a193cb964f113c2e3730cbe9603ae0)** | 3.2.1 | MIT | -| **[@electron/remote](#1b60dc9421c1b6d8b9d0e622fa6b2ef72f605502fd87ad509ea160940395ab6d)** | 2.1.2 | MIT | -| **[@emotion/cache](#c91e3f11a83bb52488c9d1aa63b8e135037dbebc6acd2717e994939f5547b521)** | 11.11.0 | MIT | -| **[@emotion/css](#0f0fe64169ea56b12722e0c13f21cf260cb4e2a9840c0b909e6871d870ba3129)** | 11.11.2 | MIT | -| **[@emotion/hash](#b42900e08e5dadbc62da63a30f552d7705f99bf37c9468aacaf4d05af9589206)** | 0.9.1 | MIT | -| **[@emotion/memoize](#1827146c6aec82dcee79fa8bc04b0315431dd1ce05aae537ea63a88ce1580dcc)** | 0.8.1 | MIT | -| **[@emotion/serialize](#55f5a8e0d65e17a53e71c997b847af76e4e1c46fc25aec5c6824a23ced36b5af)** | 1.1.2 | MIT | -| **[@emotion/sheet](#e421ab8cefe597cf44f29ad92e17c5dc018be162bdac5bc5476ebac908aa3309)** | 1.2.2 | MIT | -| **[@emotion/unitless](#6f21f2d3d65978942c063ac7244c87c1e70353c1cb50b664bb1d1887e84521ae)** | 0.8.1 | MIT | -| **[@emotion/utils](#f6b1e8b81a4cecb8428a258e22f946a728b5c73d12a8d5cb55087f672c0ce2bc)** | 1.2.1 | MIT | -| **[@emotion/weak-memoize](#e5fd44184f5735455cec841f564e21689561fdc449fed6922f4999dae125d2f1)** | 0.3.1 | MIT | -| **[@jridgewell/gen-mapping](#1e660067f4d1364dc830c372517d8ec92eddc9af7eaa6b1e698d478b286abafa)** | 0.1.1 | MIT | -| **[@jridgewell/gen-mapping](#25a8188ec7d87cf1b9baf2470bad1f75a22f246ca0fca732933d26fd488ef5d2)** | 0.3.5 | MIT | -| **[@jridgewell/resolve-uri](#f356bc3bb9c04f5fe4e387a4eea4e74125aae03bb50f846d956d7d986d200f50)** | 3.1.0 | MIT | -| **[@jridgewell/set-array](#46727c727ad43ad8e382221964d27c475629a5635986edac6ea622c772311421)** | 1.2.1 | MIT | -| **[@jridgewell/sourcemap-codec](#7b2141e6a44d38d8458ddcb163c26ab65d5782f6c25465b1954182593dd0c2c4)** | 1.5.0 | MIT | -| **[@jridgewell/trace-mapping](#73923b51cccefe7db1ead00c09a18978443a238d51a858a7a0c86868a9a4ea3f)** | 0.3.25 | MIT | -| **[@lezer/common](#4bf054ecf9e3b46b5959ff484326d62af9e9d7698317b1e8a5f11a5ebf66534a)** | 1.2.1 | MIT | -| **[@lezer/highlight](#30f07ec49dde0ce2f5c814903361f4d9c8b9fc2d8bb143d2e682e05d94a69ee6)** | 1.2.0 | MIT | -| **[@lezer/javascript](#6f8d761b240b610d6ad180799f8b36219b20649cbce80bd3cb7e669082e92ef3)** | 1.3.2 | MIT | -| **[@lezer/json](#7869bdb7c09e2ae1e28909eb504f475477cc5ed0750dc8ccee42886961975253)** | 1.0.0 | MIT | -| **[@lezer/lr](#1443872b0ea87b0af4967c9026094e634c83118fb811349742ca05bde397412b)** | 1.4.1 | MIT | -| **[@lg-tools/test-harnesses](#d9d520c615bec249e9215664d5dbb781e77d0e048253f0f1de362a8bb6212d6e)** | 0.1.2 | Apache-2.0 | -| **[@lukeed/uuid](#82700fba068def47ea9842f28d700a387f59da805f74a6ed10a5eb7eece4cdab)** | 2.0.1 | MIT | -| **[@nicolo-ribaudo/semver-v6](#0db933ddbe9acfd097ee5ee08e4afb1f4f7a64ef9712f95fef7958494c8e02cd)** | 6.3.3 | ISC | -| **[@react-aria/interactions](#638eaf69f422aa3fbe2277f9e95b6b87e64569742134491d2653e9fc05c8f58a)** | 3.9.1 | Apache-2.0 | -| **[@react-aria/ssr](#d50578768741f1468c3d5dc0da1f585e37a01e7e13b44149ff094a0a5008d023)** | 3.2.0 | Apache-2.0 | -| **[@react-aria/utils](#1c0ce36c400225256d025ea8b6f4d36b8d4491f6c81cc1e9dfcb961dbfe05bd7)** | 3.13.1 | Apache-2.0 | -| **[@react-aria/visually-hidden](#67d321e4ea237fb1e2b91f294d1f31af998f4e1ca75ea5eb4a780b2e254d3149)** | 3.3.1 | Apache-2.0 | -| **[@react-stately/utils](#0827474019c352ac03e04eb7fc65f7fe2eba2af1f14f05cc36bb74a504d893f5)** | 3.5.0 | Apache-2.0 | -| **[@segment/analytics-core](#ceca19940ddcc60d35099f1b04cb449caddc02f22a12fc4b6e9afab7b5b38e14)** | 1.4.0 | MIT | -| **[@segment/analytics-generic-utils](#9f4e5775b541ec8bbc32077308532f03fb923e2fb19fff11ac4506ee4498af13)** | 1.1.0 | MIT | -| **[@segment/analytics-node](#5e36f09aa494e968de1e219302594c1aa82f14d2287c063fe1be910021fe1879)** | 1.1.4 | MIT | -| **[@smithy/config-resolver](#50159dd3d75e4f4233935008371e16a6721f052e958a5c4b9c7283e5adaf8f33)** | 3.0.5 | Apache-2.0 | -| **[@smithy/core](#874e0237249efe933850eb42f816f882404af60f8a1512dd83c6b1c98ddc5d19)** | 2.3.2 | Apache-2.0 | -| **[@smithy/credential-provider-imds](#34611beabdec16106966ebb4943cfecdc43c8cc142e5edae6436365632b9fa58)** | 3.2.0 | Apache-2.0 | -| **[@smithy/fetch-http-handler](#786f2bfacb944bdb568e1a786606a6a2dc02f867842f7800355b908aba260891)** | 3.2.4 | Apache-2.0 | -| **[@smithy/hash-node](#391a956b0a8b9c2f7af88541150eca7a355c08e2c891e15170a0cedb66f8c843)** | 3.0.3 | Apache-2.0 | -| **[@smithy/is-array-buffer](#3e840c8e473fca775cfba50e1c0832e2a2734ae3e75418b55905122f260bd73a)** | 3.0.0 | Apache-2.0 | -| **[@smithy/middleware-content-length](#93ab06858226b2392bd8f35d1ef56a363eac4cf19200bb8ee81e842384a8e2e0)** | 3.0.5 | Apache-2.0 | -| **[@smithy/middleware-endpoint](#dce020d94d521d84610461a98027c3821bec38cc676a35284ead114484d1dc06)** | 3.1.0 | Apache-2.0 | -| **[@smithy/middleware-retry](#a4651b327b9add4d8cdd1e0d62ac38d992cf25b495beb18c90bf3d09108c1703)** | 3.0.14 | Apache-2.0 | -| **[@smithy/middleware-serde](#c3675ccf95f0205d19f112c92a7a34849fe09dcf0900877b295692cdee3b1a3b)** | 3.0.3 | Apache-2.0 | -| **[@smithy/middleware-stack](#ea63c1e355c55bbf2e59545c6fb05399ca941daeeec43540feb38e2fef98e93f)** | 3.0.3 | Apache-2.0 | -| **[@smithy/node-config-provider](#f3a27d12f80a2d60af7facfff889c045d65b56e0ec20904c87b998575b7e4605)** | 3.1.4 | Apache-2.0 | -| **[@smithy/node-http-handler](#c37a7f5194e1cae47e8a63c4bb449434097c1beba0e14d3d7f821da9202da3b1)** | 3.1.4 | Apache-2.0 | -| **[@smithy/property-provider](#1af73ed46575c11cb17328c5ab023c4689b6fd3aac8e95637d8a2430c8234d4e)** | 3.1.3 | Apache-2.0 | -| **[@smithy/protocol-http](#2ba5cccbf0f9869872f2786a1c202c5d4dfb6aa59b8e933b0d32c5bfaef8ead4)** | 4.1.0 | Apache-2.0 | -| **[@smithy/querystring-builder](#200f9715ba37573546a0ba50d6600f493501ad1fa99a1214f4652edd3f32eb6b)** | 3.0.3 | Apache-2.0 | -| **[@smithy/querystring-parser](#b2d703203bc9334d657f0cfe5e2f3ff2e029f4be60ccb9a837373f1019e30bc5)** | 3.0.3 | Apache-2.0 | -| **[@smithy/service-error-classification](#557a776a2222ef5b1930bc9c154cc80a4422644765747502c34995779de707f9)** | 3.0.3 | Apache-2.0 | -| **[@smithy/shared-ini-file-loader](#103ac7bac6c71c7909ddff4de45221eefb970300f5eee041039c35ce86e6ade0)** | 3.1.4 | Apache-2.0 | -| **[@smithy/signature-v4](#4a110aeeb62df2468523d0078962af35910d6e836463e11142bcc1be2d1f4670)** | 4.1.0 | Apache-2.0 | -| **[@smithy/smithy-client](#d41834802fb9a283a133cc778bda33ae0a4580819e10c0d12797f83ac83fa1a9)** | 3.1.12 | Apache-2.0 | -| **[@smithy/types](#66e18d9960829b34832f8284a597f0e8bc4f70149542f7533dc9f05866bb22f2)** | 3.3.0 | Apache-2.0 | -| **[@smithy/url-parser](#cc28500f1b3dbf7f305e81f81414d3f5cd733e00df104a56acdd5b82f2f19ef4)** | 3.0.3 | Apache-2.0 | -| **[@smithy/util-base64](#c13f86d5882c72328221d234d624fc36da9fe0ef6270d9ed0f7a3690616bc0b7)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-body-length-node](#a84f0a1a3fcd05391da50ee998d84695412ce141bdae38ca182c11a58eb7df38)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-buffer-from](#33c6c26bbdc76fe4bf4ca385fe9618fa7322bd346d836ee4b18e5b322e256051)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-config-provider](#c87a7523255ad59e5f721bd27137222d188dc0507d93c4cd946092736ca3b582)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-defaults-mode-node](#17e3c5fdb381e735bc7062fa7510b953fb4f9ba1cf43ec61f9252f133ae35bd2)** | 3.0.14 | Apache-2.0 | -| **[@smithy/util-endpoints](#6bbc52b3dfd8d143c95f7c48631d054e2b4c76ed74a0e449c36a12a4d3505279)** | 2.0.5 | Apache-2.0 | -| **[@smithy/util-hex-encoding](#f797009fb996f0b306124df8c5f82a938af17ab613ee4a6d1b7e2014b26fdde7)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-middleware](#cdddd643148aefb93fd2abb8f3ea636694a4d11ed1e7e6f883fa81661a3b7dd2)** | 3.0.3 | Apache-2.0 | -| **[@smithy/util-retry](#b62c349356fcac274685aa0ab184eb71cac5084041f86ba14fd6f4cd091ee49e)** | 3.0.3 | Apache-2.0 | -| **[@smithy/util-stream](#620a9e04e4791a554ce9ddd0d3fa2f264d0d5bf211b7e5d4354411bc40d58ad6)** | 3.1.3 | Apache-2.0 | -| **[@smithy/util-uri-escape](#00c89382e0278c66e8d4394996711d826b23491ef5e313b58f5681da7a07d0b6)** | 3.0.0 | Apache-2.0 | -| **[@smithy/util-utf8](#c0da7acc7121c0e4e76c58d92e290275318534cfce16949c7b916cfa0301c3b9)** | 3.0.0 | Apache-2.0 | -| **[@tanstack/react-table](#3472fd929bf691e34b02f3f62232cafe55163b92e3c51afc884780ba2413e67f)** | 8.14.0 | MIT | -| **[@tanstack/table-core](#8a18d3df915b2b72a0c8a845e2a930504b08cb745c8e0b5537de30793b71c967)** | 8.14.0 | MIT | -| **[@testing-library/dom](#15e0d0db2fcc307557d106b8a27b182d980d667836b8d8cbb6edb67a0aab34ee)** | 9.3.1 | MIT | -| **[@tootallnate/quickjs-emscripten](#dda6dbabe98503ac1af20979be1778d7a1c8f355b85377124a909567193c2cd3)** | 0.23.0 | MIT | -| **[accepts](#4c224d266c36e8e0abc4a53eb7eaa038504ee20b9b91f3e761187298a447d76b)** | 1.3.8 | MIT | -| **[acorn](#4aa96f656a11c11b0e17ee35cc26cad7c13dcf4afdff6431e6d074261b59f47d)** | 8.8.2 | MIT | -| **[ag-grid-community](#f3a0879bf804a8156c501942869cb2b3f5c2770fe5ae768eacebf9c4856a3e6e)** | 20.2.0 | MIT | -| **[ag-grid-react](#266b3ad41f62fe9d8b3388c7e3e56532f1081dfc35c8b513d746105d0f7ef2d5)** | 20.2.0 | MIT | -| **[agent-base](#f2315537cada74050b82aaa21dcd7136d001ad9b9442d6ce952030fd890ad26b)** | 7.1.1 | MIT | -| **[ampersand-class-extend](#fa70ccae815f704b05515401eb173b69fec304f2fc4d70d8cefafecb7582c960)** | 1.0.2 | MIT | -| **[ampersand-class-extend](#e80e071b7daf67567df2ed06a0912550d865bb42f740c56f3ee13e4c9ada947b)** | 2.0.0 | MIT | -| **[ampersand-collection-view](#394cdda776a31044177827f7d787e79a65210fbf3e6d2619e2f40709248eaaed)** | 1.4.0 | MIT | -| **[ampersand-collection](#7ae90475872c8fb68869e0d81db8e343084b47fd30ab156865b4b22ae3578a37)** | 2.0.2 | MIT | -| **[ampersand-dom-bindings](#4af3a9ceda31b9fc6fc90e458e9cdbb22d004fa171f69665f659b71f19bdff7d)** | 3.9.2 | MIT | -| **[ampersand-dom](#3e17c8de5bd0d155ce04e72e923d7d76d39708be70bef26a67583c28a1850bbe)** | 1.5.0 | MIT | -| **[ampersand-events](#6bbd750c35bde9ac7cd9789013efa6fffbdb3debb597dd66deaa7a818623209f)** | 1.1.1 | MIT | -| **[ampersand-events](#5aa8f29a56511aafd27953d01cb603faa9aa7e2f92847c72f879c42646e7f3fa)** | 2.0.2 | MIT | -| **[ampersand-model](#82c2458e0e00bac271d59b70c0cc51b9d8c2ed725b62f51575b4b422c7aa5ca0)** | 8.0.1 | MIT | -| **[ampersand-state](#5a76226bf9a842fcccb127eb22fdd20e0bf973f5c4d2e3330bb88a587cbcdb38)** | 4.8.2 | MIT | -| **[ampersand-state](#50886d5661d4241b348d233af087614640a657fad2d772282410875a410ba00a)** | 5.0.3 | MIT | -| **[ampersand-view](#04597f3cef8beed68d8312481c66b00b5cfb5700dcd5e7fc97a1358472ad7dd0)** | 9.0.2 | MIT | -| **[ansi-regex](#7fa0e28daa6f9c697017b06f32a9e31a57ccfb4f138a8daded68a5d002231e29)** | 5.0.1 | MIT | -| **[ansi-styles](#3d188f4ce9ad01e2061b3dafeb74005547429b09fb5b114980303db9cf34f4ee)** | 3.2.1 | MIT | -| **[ansi-styles](#22c90e10fdbeeedded470f2fb78a8094893efd4675108074eddde452da52ef87)** | 4.3.0 | MIT | -| **[ansi-styles](#a480abbdfa49ebce7f9eb04451485c433d1fa24a2ddc4380cc92fd2d34642d82)** | 5.2.0 | MIT | -| **[antlr4](#c5ad356fae2f067425b6c90b7251290842a1f2dec296bbd5afd5ccc32dcf3acc)** | 4.7.2 | BSD-3-Clause | -| **[aria-query](#ea709a066de0bac38519808675639c17ed8511255f6f1604c0262ea3914cfd2f)** | 5.1.3 | Apache-2.0 | -| **[array-buffer-byte-length](#cc88781e246dc898d7b281d0c92ffc26ae81261dc07ec4ea7d1257688f769328)** | 1.0.1 | MIT | -| **[array-flatten](#832052c97b92484a7685d432fbdac9cb8d6cd26a0de715df336780d91762bfc9)** | 1.1.1 | MIT | -| **[array-next](#2eca7126c828f7c4b047e8bc3982acc390adc906c9e1fd2ab512d7ade811a40d)** | 0.0.1 | MIT | -| **[asn1](#c03a7b8eb9b75e350660b88148698446ab536a4ea01c5f321c14036a86aac2ef)** | 0.2.6 | MIT | -| **[ast-types](#b10f17e6889028ee16e1f388d24ed535333cd289f0871c70d99c6180f498c6e0)** | 0.13.4 | MIT | -| **[available-typed-arrays](#b26a9227325a0e2f27e4793244a52200e15f63f970e71f86ead22e0f696c4a41)** | 1.0.7 | MIT | -| **[aws4](#10a86cbc2356f4c2e30ecdd2d3f40dce2dee62e2a2efa860bf539568a5d14573)** | 1.11.0 | MIT | -| **[base64-js](#cf278cb8d073b3bd22b60816c2ba78b69043aec6bcd673437b4c1db3375153d6)** | 1.5.1 | MIT | -| **[basic-ftp](#2893c6a2ae0507b9073fc65146e8902587fef3bfeb9e94a67ea34cb09124b902)** | 5.0.5 | MIT | -| **[bcrypt-pbkdf](#b6b5900f1e48a933591abc1c918fbcc9c890b3d071f607c59d704bc1c13b3937)** | 1.0.2 | BSD-3-Clause | -| **[big-integer](#eb3eaa39f6d9126fdf0b39f43641e13908ba5ab8b70af073669d23cc768335b5)** | 1.6.52 | Unlicense | -| **[bindings](#acdb65ce90d2786593049f690752613250632fd5aeaa2960152abc4f0e8f3a44)** | 1.5.0 | MIT | -| **[bl](#0e8c95ceb67a28a94b8caec6fa59d55974c80aab5dcf21bf1b17b0867f694c3c)** | 4.1.0 | MIT | -| **[body-parser](#ac02c7f4de34d468bfc87444d6d5f4691f322aa0b5dbfe2c2d0c3c42fd078dec)** | 1.20.3 | MIT | -| **[bplist-parser](#a012056f1b32796d923573a3b1ef72cf36943d95e5e2f6af0f7eeab57a21be24)** | 0.2.0 | MIT | -| **[bson](#b355c474f7d8440212aca8ad979743ee65c159f2d853f15ebad55e080bb21ae5)** | 6.7.0 | Apache-2.0 | -| **[buffer-alloc-unsafe](#1022220a813dd092d3ced592ac36121a00bd08a9c2020e08ad370dc29ed217f0)** | 1.1.0 | MIT | -| **[buffer-alloc](#d5cbc95b9dde4a46cd45334630efe3bc9025c904074bee845376bd60651441c0)** | 1.2.0 | MIT | -| **[buffer-fill](#c3747dfd267829ceeb564a1717d0c65d88d2b366e215f640067abefac59e3fd4)** | 1.0.0 | MIT | -| **[buffer](#409d076f160d0351818531a7c09f5e2928335b83e3f0070a7f3e2685553efa6a)** | 5.7.1 | MIT | -| **[bundle-name](#a4c3d6b89061e28c4e5d7937e09f0886c37c406b9c547105da495923b5e3999d)** | 3.0.0 | MIT | -| **[bytes](#bc4d24341f85f604856ec6dfddb2dd192b71929ff892a8549f6b5050fbebac9d)** | 3.1.2 | MIT | -| **[call-bind](#855e84602be0584cc1eb1123aa7791d7a2cc4ed81d396818fb2b13515af7d811)** | 1.0.7 | MIT | -| **[chalk](#8b8d3d6ff6233601575f891628d83bd6b34978a103d513931ae45b00f0e07585)** | 2.4.2 | MIT | -| **[chalk](#0c7c7a95e90c3fdaf99df4851bc949785311d8ea1d2d4498615f37af8fa16cf8)** | 3.0.0 | MIT | -| **[chalk](#c1619ad3bd43ce54cc7a4702c368501fd4fb4fa629077ba610f81d81bcd3f5f1)** | 4.1.2 | MIT | -| **[chownr](#3dbff1a17bbf2c33026995132ecdd14757cb3bee815f4636fe43df0f5ebdcf07)** | 2.0.0 | ISC | -| **[clean-stack](#e1e3f1193b2ac191874d758c618f1552b4679c5ef91d3d59cf46385c9da4e965)** | 2.2.0 | MIT | -| **[clipboard](#c48767bc6ed2a136b20ca8ae206e6a049e1e98a7db03120c44fbd219389ea248)** | 2.0.10 | MIT | -| **[closest](#d06b758bb0a5c68d314479321acf51e1e5ce0faa84afba2817b574067e610ef0)** | 0.0.1 | MIT | -| **[clsx](#112cfff031c752f6ab3595be6de44b2c02620da21c18ce4e2421b6c176f6ee08)** | 1.1.1 | MIT | -| **[color-convert](#a85d5170e73259d44269aafb78e1863169810a839a870124e3574457d214e28d)** | 1.9.3 | MIT | -| **[color-convert](#55c87baa2843a3df1bf7eb7ad8e5c1329afea9bef4e94386d484de20b03c119b)** | 2.0.1 | MIT | -| **[color-name](#e7c2ecd62026cf51768973c2e972505cab32d45b9368aa35105af0a68839ad37)** | 1.1.3 | MIT | -| **[color-name](#66a8b5479032c7b05b81caf8cef9ed81be452b9f3f299868af0167900a4db262)** | 1.1.4 | MIT | -| **[component-event](#32d720e7a217746311d55af1f088a9ab8ae8a3966be80250634fbff4c2c45935)** | 0.1.4 | MIT | -| **[content-disposition](#b0fd3fa1e97f5d899f52e84c86cd6d0a077cabef2388f531bf62f1f1dbdbc371)** | 0.5.4 | MIT | -| **[content-type](#65e9de41d2cef0ed95875e387bc56dae50b05d41b1a7868ed68c32834843bbab)** | 1.0.5 | MIT | -| **[convert-source-map](#46e32cfc12079a57eefebf967b5959d3657698c6a389222eb3228f49cb2fd8db)** | 2.0.0 | MIT | -| **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)** | 1.0.6 | MIT | -| **[cookie](#c396652ff004385e7bdb8398e37493d5f4144e475282a413ec52f1d3fdaf25da)** | 0.6.0 | MIT | -| **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)** | 3.17.3 | MIT | -| **[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)** | 0.0.9 | MIT | -| **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)** | 1.0.5 | MIT | -| **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)** | 3.1.8 | MIT | -| **[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)** | 7.0.3 | MIT | -| **[css-loader](#36a5fb6f554559a2f884527f4dd7aa81131ccc3b1aee899472cfec2eda765798)** | 4.3.0 | MIT | -| **[d3-flextree](#d4848a862048d0f4733db2a8631b802f3b5f86f2d4a1efb77fc8b8cf9a06bf73)** | 2.1.2 | WTFPL | -| **[d3-hierarchy](#e718643319205524a77c56ca75dcbf37e3975cc5e187760d1eef01cdd94a7d74)** | 1.1.9 | BSD-3-Clause | -| **[d3-timer](#8d462b04307bb707afc68fb60de32526091852b278fc753ebd023aee6ac2faac)** | 1.0.3 | BSD-3-Clause | -| **[d3](#af9ae6fd28524ec267db82c3ebf75e02f2806418cda4ab310971631d632d3317)** | 3.5.17 | BSD-3-Clause | -| **[data-uri-to-buffer](#496bb13aeb7c14308e5c8c3e20ea81509260ff27a35abfc39b316ced3c5d6860)** | 4.0.1 | MIT | -| **[data-uri-to-buffer](#27ce7d71d79fc8fbfcac8bfd802d2dd044056224bb2a737180caf2d7e268c5ad)** | 6.0.2 | MIT | -| **[debug](#233219ced46fb5b84e28859835e97775eb9d0181f4cb85d6aa5cecb61e595947)** | 2.6.9 | MIT | -| **[debug](#f9b654e80c05af90dc288869333e452db67fbba75969b385acd60df9895a7944)** | 4.3.4 | MIT | -| **[debug](#8f6d58c520b4b6702b6fb9abb811ba1798560ac052612c0fa8dc243516825360)** | 4.3.6 | MIT | -| **[debug](#8bcd678354554043662ec7b1a1fc890da6dca2f1f245833d5400831daaeb3fc5)** | 4.3.7 | MIT | -| **[decompress-response](#71cad5eab34cc643a6a7853a43d3090ac7e8b6014c9ec55fabb8112cdbfd9fbd)** | 5.0.0 | MIT | -| **[deep-equal](#2f9e585913d3ba1d9ffaf3e79f616e66788fa687f6069a567aee25bb3045410a)** | 2.2.3 | MIT | -| **[deep-extend](#654bd7d00073c2195bca924a07d93393b2aaf5cacbb6f52a383877f6f33dbfbf)** | 0.6.0 | MIT | -| **[default-browser-id](#bc6a381b83371172dbb72cac459792e2d4d55ecb71165c082142ef085b2130ee)** | 3.0.0 | MIT | -| **[default-browser](#bf5c7331e49e4c648e57747ffd553870a7fe79fea24780366a6bc22ef346f304)** | 4.0.0 | MIT | -| **[define-data-property](#a776d26c4eb3429c37b30afeed2ddcd9be51dec6d9ea7025b0e6426a5d4f78d6)** | 1.1.4 | MIT | -| **[define-lazy-prop](#6e79b04c4690532e40a5cdfb76f3ab49de1d6778466fede1548a2e19ac8e75c4)** | 3.0.0 | MIT | -| **[define-properties](#332935df321f270f8588f3ae5e25759d1611d1610bd987eac78b79dd1ee5fe35)** | 1.2.1 | MIT | -| **[degenerator](#6cb75d096539cebca1a3054d0012d40eda0230d9c8da8455621c9d78b92f0b69)** | 5.0.1 | MIT | -| **[delegate-events](#9bd9e92528721909dffad7816bd183b65a96891a390f9420036ba9a2cc6ae291)** | 1.1.1 | MIT | -| **[delegate](#bc2c0cfa061f5865ffa83a2bf2c0f3e29dc3a2056113b1ce3e9acd33709e7606)** | 3.2.0 | MIT | -| **[depd](#7028878ddf0fd7d977703a868b5ec8df7220b2f8e7d67827e93767cbb0f21b99)** | 2.0.0 | MIT | -| **[destroy](#b0d735940e17a041d544c301b27489e5d09c3032fa11e7832f03be6541182fd6)** | 1.2.0 | MIT | -| **[detect-libc](#75227d1b1c09630ea361abee4d27101e350832bbeab9640a013c82662408b467)** | 2.0.1 | Apache-2.0 | -| **[diff-match-patch](#850176c67954354dc12126896278644187ef9d1eeeaa1d67f1b6ef48b0c23321)** | 1.0.5 | Apache-2.0 | -| **[dom-accessibility-api](#a91e4ceabaaddea1b80532694b37621980591fa28c7144a3a848e66363bfee06)** | 0.5.9 | MIT | -| **[dom-helpers](#8d51cc2c2eba67a9ee7b80bdbca48b1102ceeb0618178fae05b1a82522a80e6e)** | 5.2.1 | MIT | -| **[domify](#4360a769ee10e827f9ae503aa7ea9aeb9039932fa02ac938316df303704a7fb1)** | 1.4.1 | MIT | -| **[dset](#f51cb933ffb40a4dfeed4e6c3f7e6299cf7d05c42528b3fccc5bc7cab310914c)** | 3.1.4 | MIT | -| **[ee-first](#e2746902c758ae8a6f91ffb9618cd53717f936cb33c6323e65b6b7b24f7ebefe)** | 1.1.1 | MIT | -| **[electron-dl](#e97e034c7b93c63e7a433d75f6f1de3e0668764225ebbd61dbde8d1b55d6f3b7)** | 3.5.0 | MIT | -| **[electron-squirrel-startup](#09fb8168e8fda2e174f8d1a1c392ffd8f762c5637c788edd00d1e2486d060349)** | 1.0.1 | Apache-2.0 | -| **[electron](#b8949aa8130b5ef5da1efc84f1a58e30028db62c230eb1da216dcfd7b263f55f)** | 30.5.1 | MIT | -| **[encodeurl](#b89152db475e86531e570f87b45d8a51aa5e5d87d4cc3b960cee7b8febf1d26a)** | 1.0.2 | MIT | -| **[encodeurl](#177948a319ae0aeebbd65742c53c62b37c75ec1d021afa5a188d10a7ceae6623)** | 2.0.0 | MIT | -| **[end-of-stream](#fadc10994f5fa767d06fb25cfff35fb17a895daf3bc3477c782907668ed16563)** | 1.4.4 | MIT | -| **[ensure-error](#3b1eba5276d89414cef21a1007e85c4f1d6749bf57b300e082ab23975a41dbc9)** | 3.0.1 | MIT | -| **[es-define-property](#f19a2c06a58db5974cd4d8abbd3fa0453122ea6d3bac0de0603ca69f72dcce38)** | 1.0.0 | MIT | -| **[es-errors](#645b141d3027520f69209dba8e012e737f0ee8cad89ea8d0e26d02669d14a981)** | 1.3.0 | MIT | -| **[es-get-iterator](#d9180f3ad32c9d77645aa98ee5b6b8c233f3341b4cdfe00a1b8909505dc0f84b)** | 1.1.3 | MIT | -| **[escape-goat](#9e11fd1d88e064409c700bdd041e7a9077ebe4bb0e8ad151a6820df52ac0a9e3)** | 2.1.1 | MIT | -| **[escape-html](#5463e0a52abb42be051fba2f4ea5d49d907d2b5ed09df0983b54f88c59c8c481)** | 1.0.3 | MIT | -| **[escape-string-regexp](#a9c53481a9db89e7cf01e302086c50fcfbde360978cdd2bbe1e52a430d3fee42)** | 1.0.5 | MIT | -| **[escodegen](#1e641bd52df32bd017c4d69033099f93df452d219efd67395b78fead686277f3)** | 2.1.0 | BSD-2-Clause | -| **[esprima](#48204389e2519fd65c7341ad2eb6174fad10df3c5b019e78cbabeb2488eeca37)** | 4.0.1 | BSD-2-Clause | -| **[estraverse](#34389c51a0aa1205dfb23a6e76beb58b791316f617dc3d09788e50fe99fe5338)** | 5.2.0 | BSD-2-Clause | -| **[esutils](#cbd4dd8d594e202bb6c9713d3b097eea62783e99d79069a29ebf4ce921e129b6)** | 2.0.3 | BSD-2-Clause | -| **[etag](#dfcb09916bd8554b4d5ec250d985c02174ddfe92cb0efaa97df51b903ce0adf8)** | 1.8.1 | MIT | -| **[eventemitter3](#2845c3d706e174e51442028b5aada4c274955de08db3fc13005df746b5d6b3e6)** | 1.2.0 | MIT | -| **[eventemitter3](#344ac4a1404cf0768bccce4529868ee2081bb2d49637269457647deab073e298)** | 4.0.7 | MIT | -| **[events-mixin](#5db5de476dd54dc255312e4dcdb45fb765e1b7d0622d9b9ba86b65527de02a1c)** | 1.3.0 | MIT | -| **[execa](#4172423d3420d919e31613f23914ef325af8a3bf9ed3c6110a4053369b1cfddd)** | 5.1.1 | MIT | -| **[execa](#099ba5f976333854bfd5aa2237fd12d883c4477af76007a7963109833edef012)** | 7.2.0 | MIT | -| **[expand-template](#46d3e73ca0d4a8c14e99252386f0a5c1a4fd8b2747331373d7b4da97105c15bb)** | 2.0.3 | (MIT OR WTFPL) | -| **[express](#8751e219c34fdecbdbc22ade072ef51354f9ff6434904f388f85002299a5a1ec)** | 4.21.0 | MIT | -| **[ext-list](#84470edae99e3ac5a9fdf9da513cd9a1ea7e479ca5fca13b6abecbb4c522f97c)** | 2.2.2 | MIT | -| **[ext-name](#ad9b31fcbd25bf889177f1e55d92e083fbc5ae2460904d8a81abf075c4762abd)** | 5.0.0 | MIT | -| **[facepaint](#7f6881dbbff5f35b8670063d56384fa880a5558aeaf952f1dc00997cfc7cddd4)** | 1.2.1 | MIT | -| **[fast-deep-equal](#c3b1bc7fbf8bedbac237ffb2eb2aa967bc264fc393bb6451c52a831352540d09)** | 2.0.1 | MIT | -| **[fast-memoize](#f613a3ea5150bd2496e9eb6f15357579eb3ec308a8ee91cdafce0d68ffef289b)** | 2.5.2 | MIT | -| **[fast-xml-parser](#ebbe8cacbca0e6da2c884ade309dddffc2df1cf8f3532ffda03e31aa6d3a9a3b)** | 4.4.1 | MIT | -| **[fetch-blob](#9a40c73e2482c1cc651991133722a6fedd12dc752d2858a21da24395e6fc8461)** | 3.2.0 | MIT | -| **[file-uri-to-path](#9eb41790b1cce0829afe7926edf4be80e0dd6927cd8376c00a54a8fc86f8943e)** | 1.0.0 | MIT | -| **[finalhandler](#f3d0b351ed5ad496bcb1412f1508b4cd24709821f254c8f391f6e96999f97900)** | 1.3.1 | MIT | -| **[first-chunk-stream](#c940079dd0a2457019ab184334f928cab84e316cd4016ba3581b312aa55c70f9)** | 3.0.0 | MIT | -| **[focus-trap-react](#4db13d4bfad6e874b38f8054935a1c7872c265b0a9f279e24dbe2523f3d1ce53)** | 9.0.2 | MIT | -| **[focus-trap](#c34eea0a3a357645a464ee2dd814f280c9670f39b9b85132394eb15acb70916a)** | 6.9.4 | MIT | -| **[for-each](#8b82c7ffa1300f8e1575c1d59105d6b256827ec211760d6fb6f884e4290e0abe)** | 0.3.3 | MIT | -| **[formdata-polyfill](#57e46e70e3cf628270eb56d751c6e2dd8332438324f1e4f5a3602c34ff7c85b9)** | 4.0.10 | MIT | -| **[forwarded](#2d7f4275b09b041fd821b7672ebae7c9ccad3c87f3f37b6bd91306973c02b9a3)** | 0.2.0 | MIT | -| **[fresh](#d7c677c373e09a5e9c7fe1d1ce69ca3147fe0455bf5606a26251970181d9efc4)** | 0.5.2 | MIT | -| **[fs-constants](#9961a9f7535cded379a7696ad6d002a62d4826a3a8c2ffb5624383b942c879e5)** | 1.0.0 | MIT | -| **[fs-extra](#f4bda72fc58b809b6533077d1826716805d4bec29651a76697ededec9689e0a4)** | 11.2.0 | MIT | -| **[function-bind](#83de3b394293d96fb3fea968392a9d9ffb8b461f6c173bbb76a5bc51db5bec52)** | 1.1.2 | MIT | -| **[functions-have-names](#e47bfb8af99536984c43eccff65479505a133c528be9e5e73fa43c03b31749bf)** | 1.2.3 | MIT | -| **[fuse.js](#ced18d15cdf119bfd867863e1f147fb1f4021544033d6cf956803c71a14cf53d)** | 6.5.3 | Apache-2.0 | -| **[gensync](#c49cbe8d63515db5596a717f0d65eab2f06a623b4f1dfbd512d61bbdccf1aa4c)** | 1.0.0-beta.2 | MIT | -| **[get-intrinsic](#2c1a0d16eee22217701f9243a8041f80f74f0a262eb6c10bf1b1f7f41e8599ac)** | 1.2.4 | MIT | -| **[get-stream](#8d24427d88f4f3193411b16e6dbdfc05d0edc3ce08460a1c73ec55718470e28c)** | 6.0.1 | MIT | -| **[get-uri](#4ae602658ce541126b57c19a2c8c47ed82d62e55c642d49f59f14e841ddc1db6)** | 6.0.3 | MIT | -| **[github-from-package](#8cba969ea116f44491f4fbb8b391c0ab40408fc2e5380f81bc8e8e42b55fff8b)** | 0.0.0 | MIT | -| **[globals](#749052b146da20b19c298de835e7cacd7f6d1f0a87a8422e538ccdfeaa69b0a5)** | 11.12.0 | MIT | -| **[good-listener](#0700018cbdc383f6ad6d421484a062b2e19ae4da91ffeecbccf3886e5a38afc6)** | 1.2.2 | MIT | -| **[gopd](#e51829c607e5861ddbe69decfaab45dbffb62e23d40af7d1f746c5bce8d05859)** | 1.0.1 | MIT | -| **[graceful-fs](#c0b8c47fbef7d28839a82ca95e6743793680005077b011462d5c0a6d1ca1b39d)** | 4.2.11 | ISC | -| **[has-flag](#e2f50bddacaae4f231bda078470fd90f19fd780e9c2bc721710a09bcdd536d1a)** | 3.0.0 | MIT | -| **[has-flag](#7ec819116728d891777ebd4140bef063f473b9ae26d46e91f5ca78834c872abf)** | 4.0.0 | MIT | -| **[has-property-descriptors](#4616611d5db8c73d2811bc79dd6cbde0b69f1cc891c1f997448bc79546ba9913)** | 1.0.2 | MIT | -| **[has-proto](#7a8e708aab5b7c789098be88699f7f374a9b3a2f2737537a66d391147377b362)** | 1.0.3 | MIT | -| **[has-symbols](#26dae1ac20c49dbfafbfca8c84abb75e056b0213a6ff12412dd23dd752e1a424)** | 1.0.3 | MIT | -| **[has-tostringtag](#e39d802569f1249ba08678c5fb24fc1b87ee4c92cc0f6eaa259f5b54038f2e13)** | 1.0.2 | MIT | -| **[hasown](#ace41f4c3d63ecdc85c94d28b43fc006fc67f35c24ecaa112b631dbcb5c0b39d)** | 2.0.2 | MIT | -| **[heap-js](#02ff1972404d29f951641af2b6cf6b371521d70f6daaf4196dcc45e6b5dbe96d)** | 2.3.0 | BSD-3-Clause | -| **[highlight.js](#2c60adc5db39462d0c2ff2176f71b4694ffe5060c53b1aa4f6f670e269ec1905)** | 11.5.1 | BSD-3-Clause | -| **[highlightjs-graphql](#11efa7dc664403503100672cb251f0bac920e5f8ac3847419583e9318faf451d)** | 1.0.2 | MIT | -| **[hoist-non-react-statics](#48f3f00d384ea079099b9b701c304b7e276313a616f8ad0084f41ea563f876af)** | 3.3.2 | BSD-3-Clause | -| **[http-errors](#63ffbc6de129d4a36e73df25da1f31ee2a7da3b1060e1b5b3c2b5cad89ca04c7)** | 2.0.0 | MIT | -| **[http-proxy-agent](#bd2b92f8eb0b68f6d255c316d3cd8c9aff9984e8bcb584d47613c422de726405)** | 7.0.2 | MIT | -| **[https-proxy-agent](#8a149a0a84183adc7ec4c2ca491a2aced0803a8c5fdae6e99879bcb4720837e1)** | 7.0.5 | MIT | -| **[human-signals](#49d0a41c5a505634282f30fd5bf8876d5c9fd885fc242bcf16c71d3b4c4e2da5)** | 2.1.0 | Apache-2.0 | -| **[human-signals](#62680fd7715b22b948ad9771bc3f0de13d753f68f6478afdda970d4393faa754)** | 4.3.1 | Apache-2.0 | -| **[iconv-lite](#7d9ca5eb7c6d1a6f1b3b2db04e94ca19cc04caa10d923fca7d7942d47aa505fe)** | 0.4.24 | MIT | -| **[ieee754](#926bd89d8cb0e458a159fe96007510a5c9d75add2ea3e46185c68854f977a887)** | 1.2.1 | BSD-3-Clause | -| **[imurmurhash](#d1af6342e06cf4463a1e70d43bb8fd673f060cc7c236f7fe024631d6714c81c8)** | 0.1.4 | MIT | -| **[inherits](#3eafa9bfb872baf192e837ab771da2e95e983ee682371a2b1c579e518e96f7b4)** | 2.0.4 | ISC | -| **[ini](#2269ab4bd2e1fa90571f520780ab5499f6d49da3b7daee9b9dfdad9e93c33a18)** | 1.3.8 | ISC | -| **[internal-slot](#1ecccc52c5daf9836e78ebc03604e73050b23a095bc4474240968ba1b9cd8892)** | 1.0.7 | MIT | -| **[interruptor](#e8a35d2ce64b947fb7a1aba891bc1e4eb166be57a59249cda1fcc689e767b6bc)** | 1.0.2 | Apache-2.0 | -| **[ip-address](#8de6e89459554be8a933663b25ae1d1ffee71458028fa8cbe5d68b349438a8c8)** | 9.0.5 | MIT | -| **[ipaddr.js](#38a5a1606dbc89a9c65a28d1e9ebe3c8d323e107a77c495a56dbf522211676d2)** | 1.9.1 | MIT | -| **[ipaddr.js](#d8a1c47a5dc5581d8d9e84268efa779a5140196540c2a4425e8317c1eeb93fb7)** | 2.1.0 | MIT | -| **[ipv6-normalize](#7a4346dbf206011966449898fcd37178a9be89acf6dff120b676d4c4d0dec203)** | 1.0.1 | MIT | -| **[is-arguments](#4af472b071742337deb4d56d6c4a507fd58990e8922613def80a84ba532a2b6d)** | 1.1.1 | MIT | -| **[is-array-buffer](#442760df883a3fb368f6c5666080a8c4e07d95f5f69fc92654bed5bd4be7f814)** | 3.0.4 | MIT | -| **[is-bigint](#76328e128016cee0810bc1fd650e8f63f1ad3a062d2e0c555515448ffd3f13cd)** | 1.0.2 | MIT | -| **[is-boolean-object](#db76784fdb608b8a1760612e770f909cb121ee1d4f6067a33c25443f06b9c998)** | 1.1.1 | MIT | -| **[is-callable](#8cf8f70dfb44d8f426d81a03a0f5a1e4be28081368aa69089c22ac2571dcac14)** | 1.2.7 | MIT | -| **[is-date-object](#4e4be4dc1852d5d512c7afa3107dcff477e27efa4ac81bda7a72422f55fc5841)** | 1.0.5 | MIT | -| **[is-docker](#893885e21608c60de02539fa3bd5a98f7068127aa5fab86a215bfec41a3119a4)** | 2.2.1 | MIT | -| **[is-docker](#b21de9a8d47c7c165b912be5c7a36eae3939076531e05733aa2ac7f1099dc46d)** | 3.0.0 | MIT | -| **[is-electron-renderer](#5f979579f0e64b4ba63a2cf1d32f11e274d285511e84ee596bddc57424d5299c)** | 2.0.1 | MIT | -| **[is-inside-container](#3f45825f7cda0ec2231b94ee915a0dc76a31eb0f97746c44510d9b05d80c1a97)** | 1.0.0 | MIT | -| **[is-map](#a9d75aec4f0b5614e4286c133a5fb6390141bd79d8b5bff8f3f7815869d04f8e)** | 2.0.3 | MIT | -| **[is-number-object](#98d946a111ed40a337dcf7f4aa4824b69cfe20d4b3b230710bcd5f9c803c9348)** | 1.0.5 | MIT | -| **[is-plain-obj](#6aa44f19e7afb6047589b7ad4e4ee3d44264e44f4a4ac5057efb8e3000820525)** | 1.1.0 | MIT | -| **[is-regex](#b98aa247d6a1b7f75692f6acb485fc213de3ca0cd8ecdd6bab7f96393e255d07)** | 1.1.4 | MIT | -| **[is-set](#af0e69272cbdbff01e5f873f16f9aa12c5c8fcbc228972be63e0b1ce16bd180a)** | 2.0.3 | MIT | -| **[is-shared-array-buffer](#6828bd9e33499632e06a110b3a3ecc06df254c4a28caf86e436a9939af9b3ed7)** | 1.0.3 | MIT | -| **[is-stream](#6a348f7c7e9ad013ef74124a87896ed11f8bafac3344e58377dcfc0944187cf6)** | 2.0.0 | MIT | -| **[is-stream](#309bd1940a381ff538d0c335564cc3e436c79307c991516433092d84e35acfc7)** | 3.0.0 | MIT | -| **[is-string](#f00a8e1cf00a8951016596ae951454a7d9944dc72a4f1b1127e7ec5879db5654)** | 1.0.7 | MIT | -| **[is-symbol](#3550f187e60fe8b94de5ebefd70dca43157d4c7a8ac847bb8d5ddfb1c59c1723)** | 1.0.4 | MIT | -| **[is-utf8](#df5522c387e62effc17916c612bf340d6543c4bccca99fed4c1c1fae77ed4900)** | 0.2.1 | MIT | -| **[is-weakmap](#ed08152c59d2b4e2e55e4c75373f7cd102901b6de08e20dba61722d1bb7a5086)** | 2.0.2 | MIT | -| **[is-weakset](#5538f4c86728250aa4d278637d76d6fff7d7a2cf1ff7433f842cc4045c95ec6e)** | 2.0.3 | MIT | -| **[is-wsl](#133bdb52dad1bbd87bcda9564e6df13fe7c51ae7d67575fea63cf0a2072ac884)** | 2.2.0 | MIT | -| **[isarray](#55a8a963f7aba0af49a654ea316f8dc19b717b632b88145881fda3988256ef6d)** | 2.0.5 | MIT | -| **[isexe](#2f62e711a6921973ef3f9650fd3e06585fd3842e34078c8fa959481738600405)** | 2.0.0 | ISC | -| **[javascript-stringify](#e0d27d21a288d227e51243715c044b3933d9fc0fb025dc16ec79c78af35f85a7)** | 2.1.0 | MIT | -| **[jose](#7c6ba2890a65df8d382e1b102b311651675d0ed5fd5443e911c520b18e93f62f)** | 4.15.5 | MIT | -| **[js-tokens](#f4371f095c6f087cf41433031f8c612e21a4258b18cb4e847ffae73905e146d4)** | 4.0.0 | MIT | -| **[js-yaml](#c82a34a38ab0debe302cf958caa7a51b455f5fb8a32a3ce6b9b4cab3f500c60a)** | 3.14.1 | MIT | -| **[js-yaml](#b7325d630b0ab313450fcd188788f6ee374aadd75df4969a9e3c48507ef88bdf)** | 4.1.0 | MIT | -| **[jsbn](#936d5c89291f7b505f688e45ff8261d3f225f96e0e981fd0366a9efda9e0e7f2)** | 1.1.0 | MIT | -| **[jsesc](#253e8a44fc188759c5ce35330e4f20aacf1d0253d7e8d7dffd4a1f884a10ce1e)** | 2.5.2 | MIT | -| **[json5](#16281c6ea25e0cec4bc0bb8c01d1759d66992776381bf9c5af6959bec47d2f77)** | 2.2.3 | MIT | -| **[jsondiffpatch](#2cc3b990f6692cd23f883319a727b42a76a3a9d6675d1ebd8a05241eb7edc4ac)** | 0.5.0 | MIT | -| **[jsonfile](#1504ddbe5031429f6d90bb02373b4629ff5da9ef4e869d5015ff42f685817e74)** | 6.1.0 | MIT | -| **[kerberos](#e9b8ef28e3d246d5071f34b07b67580523cda7bd0d7d74dc2e422d79d30c238d)** | 2.1.1 | Apache-2.0 | -| **[key-tree-store](#63e3bcb8e06ac6b9f7c153030ce57fad6e985a0cc7f0109d3fc6073192a932f8)** | 1.3.0 | MIT | -| **[keytar](#752f1130bbd6c5dc941bdb20fb39579c1d350252a112c58f2558b7c5f536d6f7)** | 7.9.0 | MIT | -| **[leaflet-defaulticon-compatibility](#7fba582082c899d764d8e4214d2f6f06cd043b2dce51598ec24ce299f5640a6e)** | 0.1.1 | BSD-2-Clause | -| **[leaflet-draw](#d3f67d0a666ece9171dffece3f3db67430e7055b1e8b857d806555d65b720d0e)** | 1.0.4 | MIT | -| **[leaflet](#0c77955158defdd249f5abf69232ca350038122d4fc768826d9d79ce402761f4)** | 1.5.1 | BSD-2-Clause | -| **[local-links](#9d5ba7b7e3257ecb142eb0aaf6f846e1f98c95256ae9a5836a5246db26eccbee)** | 1.4.1 | MIT | -| **[lodash-es](#a591ea211f9167d2f80166d42532d3c01f7843fafac380deb0bcf693cdf6fa1d)** | 4.17.21 | MIT | -| **[lodash.\_arrayeach](#e705b211da95702daddcf8ca44be1e168f2c98cc4298c3c0039d7acba4b651d5)** | 3.0.0 | MIT | -| **[lodash.\_arraymap](#afacdd77340d24ba7aeefb1cb7a952166c5d601c0a7fe44483832dff840688d0)** | 3.0.0 | MIT | -| **[lodash.\_baseassign](#aacac99d5201811cd8fbae43458c75e440fcaee435b10ff4ebae397ca34fc335)** | 3.2.0 | MIT | -| **[lodash.\_basecallback](#560dff0d15a98e42aa42379205f5a3e8e4f9a2234c4bf1e7aae85ea6369d5eb1)** | 3.3.1 | MIT | -| **[lodash.\_basecopy](#b7789a88750f78ca9242497a1c4acdb472b17b3a207bb1088c1865d5fc059d45)** | 3.0.1 | MIT | -| **[lodash.\_basedifference](#fba9051032cf703707176db1852b2c612c58e0fe0aa275233262512fe1cc3c1e)** | 3.0.3 | MIT | -| **[lodash.\_baseeach](#9a24b68e28142b48a1f27163a281677591406ba38b1aa99b8fea01c1cbd2c2a4)** | 3.0.4 | MIT | -| **[lodash.\_basefind](#c58e88997b2cda815fe8eafeb62113412915090abb1734f1ab37c060bd186d78)** | 3.0.0 | MIT | -| **[lodash.\_basefindindex](#070aeaeefdc0615eb01ab55ee2611f008b4973f77542680c09d58206324d7244)** | 3.6.0 | MIT | -| **[lodash.\_baseflatten](#ef8e3266ef37ba1e96b4494119bf1d6e167b5fbae3a3a3f24f6b2adfd813a18f)** | 3.1.4 | MIT | -| **[lodash.\_basefor](#9452e64da946cc633bba85112f9d585983d4d34ddb922312c23509f31b9cf54a)** | 3.0.3 | MIT | -| **[lodash.\_baseget](#c3cf4bbadde17410a34e84962cf52620d922e4c477c0c67407e3905a668d5b3f)** | 3.7.2 | MIT | -| **[lodash.\_baseindexof](#984f3f17e0475ba7b138ad2bcd02121d1069d6b685100583bb4bc9d6127a29a1)** | 3.1.0 | MIT | -| **[lodash.\_baseisequal](#5722da50c112fc1c4eb299375a140f952d867bf75c7433a0fb78b121b90a6fa0)** | 3.0.7 | MIT | -| **[lodash.\_baseslice](#f3a23746e44f620faa3af8d34a8ba0423726d0cd24176300f50a3c2798774e21)** | 3.0.3 | MIT | -| **[lodash.\_baseuniq](#fa4ce8551ed1dc65f15b9dafa6fb0238a4feb17f2caf8ed613748869842943b4)** | 3.0.3 | MIT | -| **[lodash.\_basevalues](#a6386191237cb1d70784b24e2847098f2876903ede40b488e306ba726b674f47)** | 3.0.0 | MIT | -| **[lodash.\_bindcallback](#759845849a0d94685fdf1a87cde520e49632ca378662469cdfe0c2be33cb3057)** | 3.0.1 | MIT | -| **[lodash.\_cacheindexof](#e2920f2aa3d3ef638e09c3952dd2cac1a42dca3929acc0bd76c3fc69f7cacfb7)** | 3.0.2 | MIT | -| **[lodash.\_createassigner](#c8f058ba3519bcdc9abd63b121fe2fab26acab4f4bcf2658efec676a3fdbaaa0)** | 3.1.1 | MIT | -| **[lodash.\_createcache](#072c756c562325194b5d955a7929da38e505fadd86c92a1a7d19ed9d251a58ef)** | 3.1.2 | MIT | -| **[lodash.\_createwrapper](#c3d6fd2a3e8a1412538ac86360c7608876b0841ea7f499ab96edc3e82ed120b2)** | 3.2.0 | MIT | -| **[lodash.\_getnative](#2a9507ae12db57c5319c675c4dbe5e100525a22f40b95339f9fc2d5f340ce09c)** | 3.9.1 | MIT | -| **[lodash.\_invokepath](#de9648080f5467f2559c407ca80b67fbd95a3767f8735507a7ff9802115379d8)** | 3.7.2 | MIT | -| **[lodash.\_isiterateecall](#2a87d94ff3c38e8d5da4ead575fec274d7655bc29e5645ff44b867a5b8926b4e)** | 3.0.9 | MIT | -| **[lodash.\_pickbyarray](#ce351b398064b4b254cd6189e4d91e14af322cb837142813fdf6d7f35e3a7e7a)** | 3.0.2 | MIT | -| **[lodash.\_pickbycallback](#5a4ef737299f75e14a058f857cdd3593cff7385db2c2d750516bd8c5fd1dac74)** | 3.0.0 | MIT | -| **[lodash.\_replaceholders](#c79e1ac85ddff7c5fe2d1170dc92a28f55b4a1ce6da74091d8775ed2c172c3a2)** | 3.0.0 | MIT | -| **[lodash.\_root](#b4c5b75f0ca57172edd2801a0107b22b1cc5b4bc258c4bfbe5d1b1fc052bb191)** | 3.0.1 | MIT | -| **[lodash.\_topath](#41ef14e011630cd3bea80b43c1d824c5bdada826f2bddaddda350eca30a93f4a)** | 3.8.1 | MIT | -| **[lodash.assign](#279f6350b38f924a812ff5d74a5f9c9023f5923a7c70dcb75bdb1670ad35ab50)** | 3.2.0 | MIT | -| **[lodash.before](#2fef595ae4ab5ca92be6f59e86e4d7f2b4ad0c224c22d828dfd0bae48af64645)** | 3.0.3 | MIT | -| **[lodash.bind](#3acab10f30bde74cc48a35928697ce1670df78f45fdca78b8bcb8c047a698b0e)** | 3.1.0 | MIT | -| **[lodash.difference](#43791df64f8fe405fc866c836325719f4060084c461c21882bef3b606d98ebcd)** | 3.2.2 | MIT | -| **[lodash.escape](#b2c0e0aeb488595574952c98b5f54e03f435b75e913a2bd5e5355645a576f866)** | 3.2.0 | MIT | -| **[lodash.find](#83ef2b0f6879ce20ff4050bf0aba209ccab6beceed27ea68be7dc15e088aed7c)** | 3.2.1 | MIT | -| **[lodash.flatten](#6adc3792aefcf12132c36a2d446686218a80ce413c20b2533d551509cc79c542)** | 3.0.2 | MIT | -| **[lodash.foreach](#27063675a97582e63d10521797ca5436c38ec0a71341733744333edec40fe4e1)** | 3.0.3 | MIT | -| **[lodash.forown](#b50edd80fd196dfaace7b3aa2a90290a00fed380636e15429b37a7d2f8e3776a)** | 3.0.2 | MIT | -| **[lodash.get](#632dd5085bea3b2734eae88903cfc1e91fb5b4ddb9213e10ffeadf7121ce5ea2)** | 3.7.0 | MIT | -| **[lodash.has](#d0e17f0b2e78b1a2618102c4f3b743c662a0f7cb0d3ef613b22a5595f46c3667)** | 3.2.1 | MIT | -| **[lodash.includes](#3adf597b6163c3ba3343235b44071cb955635e582da311d5b57ac35f2692f9b4)** | 3.1.3 | MIT | -| **[lodash.invoke](#43d25e539b3db0cb448dfaeac571c6f35c805ed7336f54c63392ccdb88c7ec91)** | 3.2.3 | MIT | -| **[lodash.isarguments](#fc005d458a81bf6d8d32c52123952311bdd5e02c5564720455bd4d9480b20da7)** | 3.1.0 | MIT | -| **[lodash.isarray](#0ec1c02a99d5b713fe4a1e0682e2917aedfbf6f16057f1dad1c7871c6f736575)** | 3.0.4 | MIT | -| **[lodash.isdate](#54396c41d452d46f8d06091b9ab83f35cbafd80f53b8a3337c4567d1009556f4)** | 3.0.3 | MIT | -| **[lodash.isempty](#f1f61f99f9012392c9bc1dd4b01eccd42224ff516c50b507c0041845df62bcbe)** | 3.0.4 | MIT | -| **[lodash.isequal](#3c009e1972544c1bf8dba82eb0bffe6230cf8760bd49d8ee6e120d20b4296b2c)** | 3.0.4 | MIT | -| **[lodash.isfunction](#037b8981ee3ca5d6ef852835683db8dfb102f43763b561aa365c7567a766ff60)** | 3.0.9 | MIT | -| **[lodash.isobject](#247f42305767fcd88c563da8a196a61fcaecdd7d4ddab3d72d1a9eb05bbf5405)** | 3.0.2 | MIT | -| **[lodash.isstring](#10489ff0ae921489d537bc6aecec98d63d40c04e55ced77d1f68331a7f2dcd56)** | 3.0.1 | MIT | -| **[lodash.istypedarray](#1968cf985099120c230a51c77054d5e662feeea4825ca0218c1c728f80b5839a)** | 3.0.6 | MIT | -| **[lodash.keys](#c588afca24b161c04c66b7fe976458f32d1871dbdc38343d2249c15af51e6df0)** | 3.1.2 | MIT | -| **[lodash.keysin](#eb438504bc7bde2a75d470d2723add90d5a7e2948c7a9320eebed39d20e9e133)** | 3.0.8 | MIT | -| **[lodash.last](#541caa1523f10bb2a8b2f52174d1de4ab2d64fb7a02719e69eb7d4e1e10b1065)** | 3.0.0 | MIT | -| **[lodash.merge](#996e40d63a94f1b8693d7c81e0cdfb874c6432d6bbd675976fc1b6b13652c8db)** | 4.6.2 | MIT | -| **[lodash.omit](#babde7076e3dbe66c1cd8dd0af071af1fcd4b49d2c7dbf8a306cc09b860c9ad9)** | 3.1.0 | MIT | -| **[lodash.once](#e794f12866dca62acdae15f1b5b4495ad6dee09c7150f71a96044adc2ced1286)** | 3.0.1 | MIT | -| **[lodash.pairs](#db90d2eca20d73caab322dc7ac851ecbc50db59e5e9e40d5c78d0f840cf03329)** | 3.0.1 | MIT | -| **[lodash.pick](#d54a2e0c0e3d3024a4b364b8917d59c1170262088fb3bfc4ab4a71f53ecbb3ae)** | 3.1.0 | MIT | -| **[lodash.restparam](#212ef51d65362b73a8d548dcc6dda631ef012bdd6d7d724281ab9bb0a1dbcec5)** | 3.6.1 | MIT | -| **[lodash.result](#7a09af41b88107096ee9071a254bacf1e324ecab5c9fb56d81dcda873144de35)** | 3.1.2 | MIT | -| **[lodash.union](#9ee2120113e7c91fbcbee571e2fae44f1e7f87afb331cca6eb46a3d318d6169e)** | 3.1.0 | MIT | -| **[lodash.uniqueid](#f4693b5b22365d675cec07ce8ca01fc235054f442963585ee0097efdae26995b)** | 3.2.0 | MIT | -| **[lodash](#adaac4144887ebc2c1b682380ff385210f681fc58b4bc1ef3986148cf8dcd28a)** | 4.17.21 | MIT | -| **[lru-cache](#8d10f71b6ab389fdca1b55e9aa96d77790f776843bd42ca91804a40a0d543f19)** | 11.0.1 | ISC | -| **[lru-cache](#fe7f0a2f2cf4c92f13c3a2a63f14f80f20f6919979306dc054e4f947c1234651)** | 5.1.1 | ISC | -| **[lru-cache](#938513411a6603ce29334db15563fb94b7d52f839d32b9bd78c18f5d3f98aa5a)** | 6.0.0 | ISC | -| **[lz-string](#a04d0916e49897705fe7a9d865134920984a19a03f8de501d4e46c6698a6b421)** | 1.5.0 | MIT | -| **[marky](#c5789082b93eeeb451a00e87792a533dd2589421119d3560a06c5f96b39414ea)** | 1.2.2 | Apache-2.0 | -| **[matches-selector](#ed68b9f3ecca4297cbb806474484688a85517361d99a33773e3152603a6771e6)** | 0.0.1 | MIT | -| **[matches-selector](#cec79a3cd38ecccf3066baf0e39cf87735fffea201040dd2799e4c6b5221d981)** | 1.2.0 | MIT | -| **[media-typer](#fa74be298a38f8f9351484e9124aba4a4086182a4cba24449f195219a2843784)** | 0.3.0 | MIT | -| **[memoize-one](#4d802a078eb32373fe5d8119384598a703537750aeeb5990aa28659939260789)** | 5.2.1 | MIT | -| **[memory-pager](#7fbdeab18f48c3527cae276a51cd879e42d15337aba1acb44fedcf748137608b)** | 1.5.0 | MIT | -| **[merge-descriptors](#0dc27d83f406152460ccee54a872599fa57bf48baa989aaa2165fc98eafd08da)** | 1.0.3 | MIT | -| **[merge-stream](#df06bda70cbfe392ea02ab42ab188d21ab5c15e3c1a172e6f2ce4cd9d304c01f)** | 2.0.0 | MIT | -| **[methods](#d2f0af2174fefc260353011b7a5dd7845576b8eb5f16c423378467dfd5b10f5f)** | 1.1.2 | MIT | -| **[mime-db](#7cfa78c6359b5b06cbb7cde9659b052fb92a58e290411458d496ea39857bc15b)** | 1.52.0 | MIT | -| **[mime-types](#a4d3481c7c7fa681b0c2a946f94b390ac9f96f0412b1ec63b79eba32dab82500)** | 2.1.35 | MIT | -| **[mime](#9b48af8a381b3c30ce0ed825fdb250ac917cf825ec677471e72657f421bece3a)** | 1.6.0 | MIT | -| **[mimic-fn](#5cdd2e226cc15411692ae7c6c44c95adde675477de818b755be01f0e7994f8d9)** | 2.1.0 | MIT | -| **[mimic-fn](#40db999726ca69c48458bec0492bb7351025a3719caeceb9ade4a08098817a0c)** | 4.0.0 | MIT | -| **[mimic-response](#0c868fd85c36cbce69ede58ff4693b89140b6a529a6794843f4985674d63642e)** | 2.1.0 | MIT | -| **[minimist](#837db6b00930af97755b724568aecf8b139361dc2148c7db77673ba6ae44a44d)** | 1.2.6 | MIT | -| **[mkdirp-classic](#e79cc875152b50c2eb57a97163d99f0155bf4e4af7ba4a7e01c12a17a4a3305c)** | 0.5.3 | MIT | -| **[modify-filename](#7153be07939379ccf0072006c519fba2bdf5ab79ca8bb59bc5273f87a7bacbf6)** | 1.1.0 | MIT | -| **[moment](#94975b5423311209f3beed9c2c6bb6157f622312a3f8563d507b52e804bf6285)** | 2.29.4 | MIT | -| **[mongodb-build-info](#f0a98c22ae0766702726f79e058ac6dc4e4bead8557b67b816f40bd13fb54170)** | 1.7.2 | Apache-2.0 | -| **[mongodb-client-encryption](#01c104ff07b0715f77217b6b7adfc9a0056f35ffd976182ffbf409f69b3a0df3)** | 6.1.0 | Apache-2.0 | -| **[mongodb-cloud-info](#a784f3b401cf51746f49964e044db933529b3e3791e557702715730f5a3f1e46)** | 2.1.2 | Apache-2.0 | -| **[mongodb-connection-string-url](#2e1146256a89ebd24e3398881e03807fe363d58444e6b7952ea50bd6108707bc)** | 3.0.1 | Apache-2.0 | -| **[mongodb-log-writer](#c4945018f8490fc8e56e1414e262fcf1b802800e05cd15f2bd6b7a9d0b94af85)** | 1.4.2 | Apache-2.0 | -| **[mongodb-ns](#68260f4d06e4d16a28d4139e391264d220e891ac6f0fb844b925a0cc37792aff)** | 2.4.2 | MIT | -| **[mongodb-query-parser](#871cbd55e42c522f9f44ee40a9a19b3edde2f543528582d5ac5f4bc60adeb336)** | 4.2.3 | Apache-2.0 | -| **[mongodb-redact](#f0766ec5011e3865ffb152537e7a24c89591d1ea5ee46777ca8f3e857a3e57d6)** | 1.1.3 | Apache-2.0 | -| **[mongodb-schema](#652dcef4a8a39849996a5f858fe48048e806fda4ce1aa0f757ada56bef011145)** | 12.2.0 | Apache-2.0 | -| **[mongodb](#6fec8e7c940738c785acba4b627a32d91425768e886601b770ad3b664670653e)** | 6.8.0 | Apache-2.0 | -| **[ms](#484b814b85d5028e34246147c8fc901d33570202bd7cdc3703c0ed1078eba0aa)** | 2.0.0 | MIT | -| **[ms](#0a987b2f79ff37005e452a5afa7dacd3042061a7077054d2ba9cabacd88506d2)** | 2.1.2 | MIT | -| **[ms](#2083576c5af8054927640b4788059806d07e250a26066c9ccb2d928394fb9226)** | 2.1.3 | MIT | -| **[napi-build-utils](#26912b5ff7632f262d64273f99cd1a869376c5c378960e24501585e35b31054a)** | 1.0.2 | MIT | -| **[negotiator](#e3856213d8f0a7d28cd4166e53ec7e2c019cb7becf4a8535097bac28d21e8579)** | 0.6.3 | MIT | -| **[netmask](#2bd5b8ff7fab9adace6c38d3fd32e7328484939fdd07836635b0155d0afc35b2)** | 2.0.2 | MIT | -| **[node-abi](#e95a83ce4ffe7621819fbbceed23c54f12e0e1066aad9e5b3093bbdc7c958e0b)** | 3.68.0 | MIT | -| **[node-addon-api](#af9f7588524ca4e68f4efe7b24aea46d9c8004263b1d7cf3b558f86d87a163e8)** | 4.3.0 | MIT | -| **[node-domexception](#3c25065fd2bc1b6b56856e30ac5b8f34ddae33ca87b225854f8d855b0ccabfbe)** | 1.0.0 | MIT | -| **[node-fetch](#364527ef1b51cc6ac34872b931049c9e25b5014f9b40e3898c84e1a830e21720)** | 2.6.7 | MIT | -| **[node-fetch](#23d7d5a419e9a25e6384dee4aa24f7162544418f0cdc2d92e94e2cf924507b8c)** | 2.7.0 | MIT | -| **[node-fetch](#22edb8ba3fe3457e8c1a02e497e6a8cb54e89775224f0c7680ea43772b5c1638)** | 3.3.2 | MIT | -| **[npm-run-path](#b21248abecb88119fcf2885e5471cd9235f40d356cba189a348def4b8a6046bd)** | 4.0.1 | MIT | -| **[npm-run-path](#17c35569bae8ecfc9314730bb16dde145a190d68c6fe6a29c78873c9c5520ed1)** | 5.3.0 | MIT | -| **[numeral](#b3c90be596160f7dccbd1ff771ddbffb9a1b19d0bb9456553d8822903386573e)** | 1.5.6 | MIT | -| **[numeral](#d274a180ad09fc1ae9325f01bf5dc1296caf553888d952fab7ebf524dfdc56a1)** | 2.0.6 | MIT | -| **[object-assign](#598e372231bb5bef26b7d61105282eb20e14ade430143052d064d2d406769b95)** | 4.1.1 | MIT | -| **[object-hash](#848d5d28b20a6a7f2e701e9b2b7e65b5518313269696dacf4ac69fa8bc5b571a)** | 2.2.0 | MIT | -| **[object-inspect](#b9d7050d521cb65fdc84f2212e39302b36e9bb0f7191e0be89ac3e4ea488b1fb)** | 1.13.1 | MIT | -| **[object-is](#d597163d660664be4b28b1f40171738a17ec18b028d62ee1cf2e264e30924d84)** | 1.1.5 | MIT | -| **[object-keys](#e9aac5890f5f1c6f8d56c08ce91012ba530b586511a89d1fa99ae2d7c39d8b2e)** | 1.1.1 | MIT | -| **[object.assign](#498d41061b8e766f5d53d287d41307891ca86b3d63eee61a1c4131f5dc5f185c)** | 4.1.5 | MIT | -| **[oidc-token-hash](#3beaf628821d1b6d7ec7b67b3c9ceea1d37727ea52253383f31d3e73141cf29f)** | 5.0.3 | MIT | -| **[on-finished](#d3c391e10faad1d82190a06f5be315d94a9194cff75aa389940432ef15cf45de)** | 2.4.1 | MIT | -| **[once](#d0d1303998dfae04e4f898f477380aac35568f4d6679f4ea913c2441cf9ebb0b)** | 1.4.0 | ISC | -| **[onetime](#5a35b0b7c7570756939e95a639f311d4676b87c61cd74cd94d6609334c2ee1a2)** | 5.1.2 | MIT | -| **[onetime](#8d8b66854ab397ef1815b6af9e17698a8e5f83b256a1202b74104ee5609c5d99)** | 6.0.0 | MIT | -| **[open](#6c66626cf6e18f59c76bef1f4ed0c2b541e68592d65325d4fb83a659e3078981)** | 9.1.0 | MIT | -| **[openid-client](#03ada662ee390db4436dc7bd38857b43e2a0407275d27e422ff915ec7738b035)** | 5.6.5 | MIT | -| **[os-dns-native](#ed8fb030877b8f0494551fd7f55288d885b2ddcece35dd7134434ad5c4c704de)** | 1.2.1 | MIT | -| **[pac-proxy-agent](#0c860d23706396c87370b49399bd004f0a3552427d65a829b16274a966c51304)** | 7.0.2 | MIT | -| **[pac-resolver](#7935fe0839f6e2b7c51abcc08705a6096eff5670dc2bdc3819fd096b8d114d8b)** | 7.0.1 | MIT | -| **[papaparse](#a94a34c1e6cf2f678ffd64381c6d54f9ad5f6b3c65281a0b077dd5b92f028684)** | 5.3.2 | MIT | -| **[parseurl](#c3fdd1b6fb725cb30e8fed82cf929953b46129d347d8404a4a51b633389fbae8)** | 1.3.3 | MIT | -| **[path-exists](#3ae48f237e1a4424a3b1b60cfc95f35ca29141cd956f8bda85e763d7969e12c7)** | 4.0.0 | MIT | -| **[path-key](#e1a2a032096ace66b422351e00b11b0229e42e4b49c2146f439f8fe442218451)** | 3.1.1 | MIT | -| **[path-key](#8e0734b8abb76579df2174822606e692914e985fc58363a78e6ad4b2a4a5831f)** | 4.0.0 | MIT | -| **[path-to-regexp](#96d230365f414cce8d80ceb9d99d855685dfa922f931b49ea01952a1efe64266)** | 0.1.10 | MIT | -| **[picocolors](#f964752f1f8cfd947506fd51ce1c148469ecf3b6f531d826511b720670e556f1)** | 1.1.0 | ISC | -| **[polished](#a7a5d1244e48a082dbc54de31b5309caf950b12aa6bd9fefbba39e362e705f06)** | 4.2.2 | MIT | -| **[possible-typed-array-names](#5ba4283f5512abd5d57e79c0a75acb3818d98d169df979afb01ad6867cefd312)** | 1.0.0 | MIT | -| **[prebuild-install](#93d13a9b3a51a6a802fcd35aa031d3ae7369aa6fd47d3a89f28a6d31ea3c9dc5)** | 7.1.2 | MIT | -| **[prettier](#2e1e2077936be4bb5f075fd4d279f9ece641322ccd12a8116edb3f99f08f7411)** | 2.7.1 | MIT | -| **[pretty-format](#0c53580441217a6c2b9c885eb1ec35adde420c312ccf9f408c856dc3845cce8b)** | 27.5.1 | MIT | -| **[prop-types](#e4dd0bb5b6f98fbf52f0ad7062b8514aadc56a47a692bf6d8aab369786b6039f)** | 15.8.1 | MIT | -| **[proxy-addr](#7b128e3d41d39ecb1a405a490a53ae86f70ef45f01079333ed3ca49939f5fba8)** | 2.0.7 | MIT | -| **[pump](#147f1bd3a6380306e696f0574feda0b1490121a1d12e4500e91ffb6e888ffa3a)** | 3.0.0 | MIT | -| **[punycode](#3fe331f5536b72438f24d644ea9804b5e462f791a4c72a6d94f37193af1086aa)** | 2.3.1 | MIT | -| **[pupa](#b05b7cc4c1bc01acd063dc811b9b1b0a1a4b3e0f17be77deaeaabade7dfeb095)** | 2.1.1 | MIT | -| **[qs](#2240c454f0418501921d6b094c1f6477603b0c893c4d7a8ed2bdfcab9e75c069)** | 6.13.0 | BSD-3-Clause | -| **[range-parser](#e973789240fef3c00f359e6acc8570dd769b70ee8b29fdcb679897fa2d696bff)** | 1.2.1 | MIT | -| **[raw-body](#fc0f8cf1771db07ef15ce7dafcac6db8e351607bb82caf0e5838f1769a796266)** | 2.5.2 | MIT | -| **[rc](#0dd705bd5862b4c60ed88e6b4a6f5ece23c627c97f6928233d32aefdd463c3f7)** | 1.2.8 | (BSD-2-Clause OR MIT OR Apache-2.0) | -| **[re-resizable](#ba463da4fb82093fffa407b9083835a23c9d44c84cd988f2536312f7e78f863d)** | 6.9.0 | MIT | -| **[react-dom](#6f313dd207f71f3d56121132c87ef27cba1beab9e5e349ac81c740cee6fd0774)** | 17.0.2 | MIT | -| **[react-hotkeys-hook](#6ce07fe9653ad69a76354e2d71137c70ab9a838377fe5a8f8e45c559cfbf41cc)** | 4.3.7 | MIT | -| **[react-intersection-observer](#84f998bdb33a5f9330d81ef063f7ad0897f1b004661fbf131725697b847a5b6a)** | 8.34.0 | MIT | -| **[react-is](#7183835e2bcaca6754fe10854fc3b65407d2cb9aa3b68b1c06ccaafb7b9be28a)** | 16.13.1 | MIT | -| **[react-is](#5ec174b50bba38f48ee8da3d8a5b9463a9e77c3f01d74a132ecc30a2be099c4b)** | 17.0.2 | MIT | -| **[react-is](#5746232ad830b635a6581ee7d3b826ee932c6877087c98cb46b94101eb5ce40b)** | 18.2.0 | MIT | -| **[react-keyed-flatten-children](#9c7ffa4be6351eaf0a19b808fc4048eb28455824378f089da7a566cdeb0bdd84)** | 1.3.0 | MIT | -| **[react-leaflet-draw](#d80b4b765d856cdefe411a073d3b3dde06100128005f1381b4d26d6cf53134c7)** | 0.19.0 | ISC | -| **[react-leaflet](#a5fc1f0504a89a932a12c5a183b75a748207329f20af6078f926e182d55aee8d)** | 2.4.0 | MIT | -| **[react-redux](#156f5c2e2cbbda376faae24e78cc75de697170101ff7e9d2955c0f891cffd6a8)** | 8.1.3 | MIT | -| **[react-transition-group](#f8a526737bf3e6cc7928ce77b3fa8e6a880da418fd9363a0dae1122922f92b72)** | 4.4.5 | BSD-3-Clause | -| **[react-virtual](#b9245d8b8a0d57eba1876cc38950eccd82b4db023c50026f4a70a6c66e16cb5c)** | 2.10.4 | MIT | -| **[react-virtualized-auto-sizer](#6c2551e5d023f4aa01efbb54d394f7cebd0627e78ca3b24a00a4364e3e7a3129)** | 1.0.24 | MIT | -| **[react-window](#1241166cdcf24220683cbe7d1460897436f3982e7795fc504323ba66f06e53f9)** | 1.8.10 | MIT | -| **[react](#2f31f78715f56093f4bb569e2e2ea931c518db6f4ee690482a0a2a1cd4d18b4c)** | 17.0.2 | MIT | -| **[readable-stream](#75bd2243ec5ecc92b8d7e9a2e9a1aa142f20f6a5aad6dc0d923cdab997766174)** | 3.6.0 | MIT | -| **[redux-thunk](#7eabcce4f7274e0c876829cb939804a9704770a9a60419d514c11e3e97c01623)** | 2.4.2 | MIT | -| **[redux](#98b5d53f97fab4eea98fb5f423cad33400855b69ac662f1fdf55f0fb9e33f2ab)** | 4.2.1 | MIT | -| **[reflux-core](#7af6ea33b0ed18717d672b44743ae53dcef843ae464690bb9e10eb1df048e9ea)** | 0.3.0 | BSD-3-Clause | -| **[reflux](#f892193924d403a4dd1a73a5861913838f1a9d704055d9d098eb0d40f752e053)** | 0.4.1 | BSD-3-Clause | -| **[regexp.prototype.flags](#51cb6c20041a1fef833bb3f46483fcbd99a186e3767ec2ad32f7b3db74d296f2)** | 1.5.2 | MIT | -| **[reservoir](#84f8998f94ad5bd85b50458378edf3815fff553cdcabf8ced3db418f05e85ff6)** | 0.1.2 | MIT | -| **[resolve-mongodb-srv](#2ae8b0c9dbe8e8c900bfaf5567bcf2af917e62fb0a24121b4d667dffbeaffa99)** | 1.1.5 | Apache-2.0 | -| **[run-applescript](#f4d3cc18b69c2dec9e4f1d19a1cb794c8fa2e548e530f4033dc6b0caf803bebc)** | 5.0.0 | MIT | -| **[safe-buffer](#952cf236ee56e7de5ea7e772caf3e256866f9dbdffc492539c48cd8c15ac9674)** | 5.2.1 | MIT | -| **[safer-buffer](#2fb14d3728e4ebf313be4634b146bd90cd3ad3559157baec03b64eec0878a0ba)** | 2.1.2 | MIT | -| **[scheduler](#950b09ca6f4766ded0bdde81e2697b5e184ed63925d74a8f512c978cab5bda6f)** | 0.20.2 | MIT | -| **[select](#12d30053a00882385c42a50004536696d477e8e694b047d6d39513947e5a39e9)** | 1.1.2 | MIT | -| **[semver](#8b8f657069cf84b7ca932ab17eb24a0a55a8053ccd2a36c03185dadab64db3f8)** | 6.3.1 | ISC | -| **[semver](#2c8b8c47dd7d24873eda4559b25851062c21d7584a396735b363f9bab626dd7b)** | 7.6.3 | ISC | -| **[send](#412cd4c4a8e6aaa433d5e67852c05a1e307fd4eb9dc362bdc30fa099313c24cb)** | 0.19.0 | MIT | -| **[serve-static](#9a2d04a479ef9c6e990f1fb614478dea4368c040af707296400ff7f9bb68d30b)** | 1.16.2 | MIT | -| **[set-function-length](#88ee3e1c8e8c22ac3653a290c1cdc68787d064f17a743020a070b31290bb4eb9)** | 1.2.2 | MIT | -| **[set-function-name](#f9d4c9272c71403774a64f46fc69cefd1039845f2ee1d252fb62cbd97f9e7fb4)** | 2.0.2 | MIT | -| **[setprototypeof](#7787a1d3bc2f39b65d75407d5d8d02d8ddb70f1cdb74897f15115e995fb64a56)** | 1.2.0 | ISC | -| **[shebang-command](#a9cba97b71b818fb0a4978f8b14875ae118f292a19ffa97c8b2d848f9a897d89)** | 2.0.0 | MIT | -| **[shebang-regex](#849fb37298f1c4dcdeb6065edc4242918c7533bcfda5c67747e6ce4620c587bb)** | 3.0.0 | MIT | -| **[side-channel](#b87368b55d9ba1ff553ed48946c9eb64686bc10b48bc0f5859c669427508a6b5)** | 1.0.6 | MIT | -| **[signal-exit](#5ad551060d44370794e770309e198719e94f939e46a3ea537b776c9c4fdad9e4)** | 3.0.7 | ISC | -| **[signal-exit](#09ce5ebc7ff1552bf0ed979e2479321c6a9a4b7a06d90ece7a70fa360007eff4)** | 4.1.0 | ISC | -| **[simple-concat](#7e08f893385d0a6d7059029da3885e8346ad01eb58d6e4561612d2fb653c15ec)** | 1.0.1 | MIT | -| **[simple-get](#c2c12990b6319daff653bdf953cadfa368185f0edc671124fb1028f6979df829)** | 4.0.1 | MIT | -| **[smart-buffer](#bc8fbee089eb9cddf673c4c9dbc15edd13839063c27e2814009b6a0448065875)** | 4.2.0 | MIT | -| **[socks-proxy-agent](#e192db394689e9e76e333aebe6a6958554ba85f63c4b2959bd6732f76ce1ed0d)** | 8.0.4 | MIT | -| **[socks](#0248dada9537f6f43ee753036902a8c3d06323744469309fdc207cd0b14f70e9)** | 2.8.3 | MIT | -| **[sort-keys-length](#af13db706339ff49fba434ce0fbda036b99f3dc30e66a530b64374afd5a1eec1)** | 1.0.1 | MIT | -| **[sort-keys](#714faeb378f5373d2aa5f80825d02c9f7ab2cacb699db02c84e675d193a6bfa8)** | 1.1.2 | MIT | -| **[source-code-pro](#0496fbae8c99eac4b7354b7eb0a394806e547de30fd2acbdf14f2ac77079e643)** | 2.38.0 | OFL-1.1 | -| **[source-map](#55fb2b4a8e114a26cce0c971365f26175ae0d834849c5edebbdb5adafaa08787)** | 0.6.1 | BSD-3-Clause | -| **[sparse-bitfield](#0cbcf2cac3ff859d288ae5ffc2c793bbd2430b120f5930bd09b6dba7259086d7)** | 3.0.3 | MIT | -| **[sprintf-js](#d8b6ff1ba6436283de681a756ad453428005e61986c5113a3a8088ced2b36eb7)** | 1.1.3 | BSD-3-Clause | -| **[ssh2](#caa88a7f6fedc946b33fe4cdcd84104598cca8b841b593d1ffb031578cd3d8c9)** | 1.15.0 | MIT | -| **[statuses](#a347e5a1994ef74647a2af80f58030a572f71173d5c1dfc0ce6eb55f4005b17d)** | 2.0.1 | MIT | -| **[stop-iteration-iterator](#b4a114e720966d8d69055a584424fa2465b603774072e8b7e35619282ff67afb)** | 1.0.0 | MIT | -| **[stream-chain](#dbe4594ad347bd2850f84bc41ea7ed1f0bebb82c38b9e7e0f6820d1c071e534c)** | 2.2.5 | BSD-3-Clause | -| **[stream-json](#ff32de703b38cb80287bf73b31ddc47fb97277eadcfb231017f31a06824e41e0)** | 1.7.5 | BSD-3-Clause | -| **[string_decoder](#b7999058a36380603fb66d82d8b9e36ddb8f0e5b81cd3f3233f31eac12b793fe)** | 1.3.0 | MIT | -| **[strip-bom-buf](#4f426c3eaeb7d288c70eb64ad2e2617952c0d8da8cdedf4f8cb29ba65bb3b65e)** | 2.0.0 | MIT | -| **[strip-bom-stream](#f7e90a4335dbb561f2b002d1b73cdb9d891c023959465fee58c1636e0216af2e)** | 4.0.0 | MIT | -| **[strip-final-newline](#a6dd80beeaaa538a553eca27a2bc8f9b22f02a61191d2f6981b02a2c1c12bf19)** | 2.0.0 | MIT | -| **[strip-final-newline](#0e84cc036056cb7e0b11c5f70c4d239d4adf3ca9253b0e215abd7e78639b1c61)** | 3.0.0 | MIT | -| **[strip-json-comments](#7e22a64e44ef0efd054f76d551df5305ac48eb5807079c025c8bf63c0a728c33)** | 3.1.1 | MIT | -| **[strnum](#84f6b71bdd647bcb9588183f13dc0b7a0c5b0a3103b2fc7e8e95012c0d6c631d)** | 1.0.5 | MIT | -| **[style-mod](#65cbf3eb373755d5dd9f5c58cf62d48dd4a33349e67d644af61d8d5438dbc1b5)** | 4.1.2 | MIT | -| **[stylis](#131ca0470639719771dc1f233c9962655afffb6d27143e894c43e967517107cf)** | 4.2.0 | MIT | -| **[supports-color](#113926f6cb42a3d41d1c11fb1209faf789d78f51fb458da90c61e5c1a2307a8e)** | 5.5.0 | MIT | -| **[supports-color](#b97a30572cac0a03b8cf442bc01621a041d5714550984f25cb71fac2587edbd6)** | 7.2.0 | MIT | -| **[system-ca](#f7020e15c3acda122c176b63132660540ac26981c7037d110fc2896e3551ab19)** | 2.0.1 | Apache-2.0 | -| **[tabbable](#0ebe87140b76c7f2135bbd5099e7973a5ec2b5d8fe2bec8e272608cf0b3f396a)** | 5.3.3 | MIT | -| **[tar-fs](#8e5bae5073977abd61cb5549abc7581354454558aedf4a4002b91e6fd7b9830d)** | 2.1.1 | MIT | -| **[tar-stream](#5605712784129d10d2559e12f8031603f0cf4e5ff206f09356e4bf1dc5ab1168)** | 1.6.2 | MIT | -| **[text-table](#408475075eb207dd5ae8858365d5b39a25bebe2b757601c43164cec36f315b23)** | 0.2.0 | MIT | -| **[tiny-emitter](#43eb8db7345f328bbd03f484accbed64a06fa649df3ab59db7492e65d9361def)** | 2.1.0 | MIT | -| **[titleize](#36b49586e2b5f60bee2c757b90d19871a99822f92e2b2e19202ef9efb9595766)** | 3.0.0 | MIT | -| **[to-buffer](#5934a0e0ea92470fb3bbe2a1d6869494c53208b1b06aaee8ffd31e4e040e4e85)** | 1.1.1 | MIT | -| **[to-fast-properties](#79afe8c8f3cc0bb1187c6ffaf6105b49888137e917978e870d67727353aba954)** | 2.0.0 | MIT | -| **[toidentifier](#2067d1f99d35f28c8384d3e9762282f3c2ded0041392af855caf28ba2209bd2a)** | 1.0.1 | MIT | -| **[tr46](#a94418e116fb43931c49abb9cd596d6814a55956c3d0d11b7e225592b9977197)** | 0.0.3 | MIT | -| **[tr46](#73a239b431778fd3a06957f11cd6de530a4ba35ca946f8656f46e02228113c2b)** | 4.1.1 | MIT | -| **[tslib](#c5fc5d0adaeec50d156fc1f9a16cbca801bfb431eb78f3647a1237a0e239ae35)** | 2.6.2 | 0BSD | -| **[tslib](#bd15b467ea785206b74637cc23d2b9088ba8fa47aa3034d1217f3dea848c1d1e)** | 2.6.3 | 0BSD | -| **[tunnel-agent](#09f746d17a1777efda5a12a6072da10c6820d7f56ea8aa0af202a2c83d6ccb67)** | 0.6.0 | Apache-2.0 | -| **[tweetnacl](#496caef692284d7a5d6acd31283b785ebca47d82b2d85c9af7ea1913bb4b49a8)** | 0.14.5 | Unlicense | -| **[type-is](#12dbb9fcc3a6de5bbd595659bff8b688d45fff57a2014441e4fe6779f5eeb7e2)** | 1.6.18 | MIT | -| **[universalify](#c381098afc5e144dfbd23d044afa2bf9bcf3dcadb7eb397d379f6cfd0ed47001)** | 2.0.0 | MIT | -| **[unpipe](#3a555405bd00c7e7e52b07a5600248bdaa683db613d7c286e425511cee8ed14a)** | 1.0.0 | MIT | -| **[untildify](#511cd56aa5943fd465da93776449b0a7249438206b5c5bfc22cc6d7e55ab0029)** | 4.0.0 | MIT | -| **[unused-filename](#5c8d4d94e0c17084eac0ca8c2eefa1fdb285e6a3dc47477e54d9acf7bf08eb2a)** | 2.1.0 | MIT | -| **[use-sync-external-store](#f7d4a0ea4ee9d814fb264db8103d6ad3a831aa79bf7f3ea70bfa182f8a930f0a)** | 1.2.0 | MIT | -| **[util-deprecate](#a1bd80d6a50b36e34032c402c5204d6276747d8212b68b164a9e3f895b90c2d6)** | 1.0.2 | MIT | -| **[utils-merge](#daf17cb7acc6dd4694e84d0920d7b32dba2be0fcf114309bfce8538812e7c458)** | 1.0.1 | MIT | -| **[uuid](#8e5d6b0bb24ea0188cd3a88b1f790f104e774bb8ed04c0dac0db7cfe2911227e)** | 9.0.1 | MIT | -| **[vary](#d308bd3935a6f29310b20de016cdb7b3de3aa40a7d4c3365b96e35d2c248d74a)** | 1.1.2 | MIT | -| **[w3c-keyname](#160316b2bf7a19e2cc0418d5ef94b5a999f9092fee3023ac9b2c7d76d2934f5b)** | 2.2.6 | MIT | -| **[warning](#02c159f6bf591ba6e8523609cb610cbd897ea68c214f64dac6f21d7b4e4d3a2d)** | 4.0.3 | MIT | -| **[web-streams-polyfill](#2349028b62115a87d9af122218c79a38cd90411e2b53a91c1cff7249e16f45f0)** | 3.3.3 | MIT | -| **[web-vitals](#66d3585417e14f352ce331e44fe42a97c4d03073d014efd601538735085f84fe)** | 2.1.2 | Apache-2.0 | -| **[web-worker](#8aa3d357e4e58928a87a1cfde9f21452b05f10e194f93e5d5908bdff9b94e20a)** | 1.3.0 | Apache-2.0 | -| **[webidl-conversions](#3604b2bfa479706fe7bd8068257240d32158704a3bffae30b414963343027aa1)** | 3.0.1 | BSD-2-Clause | -| **[webidl-conversions](#cb7c681998e7ee3c598e6e37432bcf448946924eefe816636c3cb122bae46e1c)** | 7.0.0 | BSD-2-Clause | -| **[webpack](#bd55cdb69f5b1b336d12c3f00d849ccb1f2c39987c257c89027d6a790f947496)** | 5.94.0 | MIT | -| **[whatwg-url](#3a968d9d3fed498fc1edf2f65459cc89b6a2fea277b5c9b5c3f3a0b41390835a)** | 13.0.0 | MIT | -| **[whatwg-url](#cd3f81c4a0fd856ab1d9c9fc99c1d7eaf2c12c4867b218e9901e5020a1ffcd85)** | 5.0.0 | MIT | -| **[which-boxed-primitive](#b3f94b6da310368951f52909c400e19c4c2c7a282ba67374f41ab2d070bf83f2)** | 1.0.2 | MIT | -| **[which-collection](#8d30c0dc07cdaccc2163cb70ff87fa91c48abdf4963bf5603218d66dbd6ae538)** | 1.0.2 | MIT | -| **[which-typed-array](#949a7e27fa7c5423fa71694a92b2c5e0d1b7f9e43ba00aab74414d4311e82530)** | 1.1.15 | MIT | -| **[which](#5a71f2b741944bf107d6e7f067241798a6e277e42e8ca1e28c4608ccc233f8ec)** | 2.0.2 | ISC | -| **[winreg-ts](#b1df7eee15fa28ae85b9086513c8316c08a21c254e8eda11e63c6321a03ac4a7)** | 1.0.4 | BSD-2-Clause | -| **[wrappy](#13cebf193d7ada5ee347b9ae819b96f5e6da21f9b53e7f268c7703b686158595)** | 1.0.2 | ISC | -| **[write-file-atomic](#f2c3af5826c073336660baeb567e1bb4453d5b6fadafaa880c59787bfdc4408f)** | 5.0.1 | ISC | -| **[xtend](#ef439651e21b69e8811099e984a3a42de35b6d0fc30a5c230715bea4c96e4940)** | 4.0.2 | MIT | -| **[yallist](#63b110ffd18712146937e9f182800c6f2b5783e76d1659a0bd4b457789b0df07)** | 3.1.1 | ISC | -| **[yallist](#d400799c4e1f58dbbbe68b4d9c1b6e80e023f744bd7d16da491005fd8439200f)** | 4.0.0 | ISC | -| **[yargs-parser](#617a7401008b7639df8cebae61c9c009bf04ca762c652da0975da4533bf33690)** | 21.1.1 | ISC | -| **[zod](#7e37bb8a0a232b053778166963faee52e7d1a9cfca82f4501d65e94f11d1c566)** | 3.22.3 | MIT | +Package|Version|License +-------|-------|------- +**[@ampproject/remapping](#0dc8b6568eb743fd551ce2cf2f54be9d0f94b12167f7c34a997c864bcc7e128d)**|2.2.0|Apache-2.0 +**[@aws-sdk/client-cognito-identity](#d3350d9512a30a7d722a254609aaeb5048055ad7ac83e0fc718676cba82d4f0e)**|3.632.0|Apache-2.0 +**[@aws-sdk/client-sso](#122bc8ec6e0086415cbed6567ead1e85e6a80326f5609ee0221fabcf2bc3e35b)**|3.632.0|Apache-2.0 +**[@aws-sdk/client-sts](#92440c05901818918488da134d1ff538799409309918135a178f5881d1eb6dcc)**|3.632.0|Apache-2.0 +**[@aws-sdk/core](#5ef232eecbafdb891fe4d107f580fd4b94e4eb2712df79ab4b5c3c0255e9b8d0)**|3.629.0|Apache-2.0 +**[@aws-sdk/credential-provider-cognito-identity](#a0b39e721e27fe3cda471c233a5dd7105832c517c80022d149a2709ceecb4a20)**|3.632.0|Apache-2.0 +**[@aws-sdk/credential-provider-env](#f0037899766f9fb156ae52d4262089a964f044c3a331a71320443ad3664ba4e5)**|3.620.1|Apache-2.0 +**[@aws-sdk/credential-provider-http](#990097dcbfa0fafca7fe8253939d00e2237407a576c79a8b94c3fb402a40f9f4)**|3.622.0|Apache-2.0 +**[@aws-sdk/credential-provider-ini](#d0499091db530426e22820e5a86e11c1635cd6cfd6886be00a73167496589031)**|3.632.0|Apache-2.0 +**[@aws-sdk/credential-provider-node](#15a01844ec1a77911fc8af581b4cc91607f4ea537aa1b55099ddeb3933c08793)**|3.632.0|Apache-2.0 +**[@aws-sdk/credential-provider-process](#6df29928703aec90607f9c2d3a1c36071751aa24177be72f0fc88c6773b7df22)**|3.620.1|Apache-2.0 +**[@aws-sdk/credential-provider-sso](#d0a0d6042ff0dfbd6143041fd83bc1096e36ec1b9b7100726135989fe6974d7b)**|3.632.0|Apache-2.0 +**[@aws-sdk/credential-provider-web-identity](#7ca705ce1768551740ce25addeda56a029a25efb024929b6224fffed16402d87)**|3.621.0|Apache-2.0 +**[@aws-sdk/credential-providers](#89261894eb9947986c4f5e3d27470902346dad44742f42ed42ef0c3b7a443165)**|3.632.0|Apache-2.0 +**[@aws-sdk/middleware-host-header](#76f9788f0a3892655b30ff5be7eadcc24c2a4dc60675874d11e110e53cf7d770)**|3.620.0|Apache-2.0 +**[@aws-sdk/middleware-logger](#77971232a25c0db769f48f8c0b70d1272e792393db29953a47d319effbca9616)**|3.609.0|Apache-2.0 +**[@aws-sdk/middleware-recursion-detection](#a19d96e543a0b45bed652d0c84ce89e3f27c98bbcfecbdb66fe4124b14f4e25c)**|3.620.0|Apache-2.0 +**[@aws-sdk/middleware-user-agent](#a3db739171b14ee7fbc688b1442211cc99cbec5032b4e29c011f4031d6d30789)**|3.632.0|Apache-2.0 +**[@aws-sdk/region-config-resolver](#c707d161415ea2bbe26756eb111aa1fa6e20fe297f8357c2314200f1bc7b4812)**|3.614.0|Apache-2.0 +**[@aws-sdk/token-providers](#2797e884608a8f3c4d716b944c9df465acbf619c27612fecdf21e6feac32ffd4)**|3.614.0|Apache-2.0 +**[@aws-sdk/util-endpoints](#d7c10ece9c460c5fda50acd92143946e29643997740b52f22a2db086204b922b)**|3.632.0|Apache-2.0 +**[@aws-sdk/util-user-agent-node](#78337458e259597e1af9ae36c139707b9d47d298d6b660fda8ca49f7a6039933)**|3.614.0|Apache-2.0 +**[@babel/code-frame](#414cb15586d104447ca15cc1904c5779eb415e9079a4a3ca6a81ad96ba9ee4e1)**|7.24.7|MIT +**[@babel/compat-data](#b4fe3477d50389378e6666362dee06b0abe468140f77f427b952059f193a7a38)**|7.25.2|MIT +**[@babel/core](#cb1e750729bb20848944291eb3bd3ec445a032e1929fef18d6ee0a6ef3f04bcb)**|7.25.2|MIT +**[@babel/generator](#0b27790f5456040ac13e71653c95ea0152f86742fcab51983e67601681ba94e0)**|7.25.0|MIT +**[@babel/helper-annotate-as-pure](#029a306089573d76f9def44953787148e1b886d6f554efd9b97b9e7c226a0bb7)**|7.22.5|MIT +**[@babel/helper-compilation-targets](#508649a127123be64df2bf11cb716138ec0b9e821f15f99f2f4ff05ea6b4da74)**|7.25.2|MIT +**[@babel/helper-create-class-features-plugin](#ecefee5d4a0100be1536cec655793a6bf8aa75d540cd1d4ce8df49a91d25f653)**|7.22.6|MIT +**[@babel/helper-environment-visitor](#7c3618d6e312d4ee318c25b43c5e6e8b79bdd545f899341f34f4174f993f75c6)**|7.24.7|MIT +**[@babel/helper-function-name](#341cda70cf85da27703ac922b9c9e2ae965553830dec7e94a358ea0efc80e33f)**|7.24.7|MIT +**[@babel/helper-member-expression-to-functions](#a4b70dbf2d35802a3d8c37e07c5cf031678d08474ef4ab11a6d7e5e3a3143626)**|7.22.5|MIT +**[@babel/helper-module-imports](#ae249528a13dcadd4a50009d6fc23533184b7512e6029f8e75472bc05ec78328)**|7.24.7|MIT +**[@babel/helper-module-transforms](#ba2e9abfc9b01015dc06b6eecaff1e93add098ad2ee1fca4541d2a42b1e3b265)**|7.25.2|MIT +**[@babel/helper-optimise-call-expression](#4e8bad824c45ef99b87f6cf7d3f35a61a8d2d36406972594e230d12ae775ec9c)**|7.22.5|MIT +**[@babel/helper-plugin-utils](#b7852d4cf81a7e126d632935ff358c99ae9f07948155e64224a2d526a903a009)**|7.22.5|MIT +**[@babel/helper-replace-supers](#a646f77bcb685d394b994b1e972791acdfcd92c83f33daec4ff2e75c9b1ed148)**|7.22.5|MIT +**[@babel/helper-simple-access](#72de0cb66b9416da47c095a80457dee176b7e8944b20eb0aa927ee59517c69b1)**|7.24.7|MIT +**[@babel/helper-skip-transparent-expression-wrappers](#3680d72a3e5058442cc8966d761775227dc7296f71c862ab179c463d5caeb58b)**|7.22.5|MIT +**[@babel/helper-split-export-declaration](#05dfa4aa91ff28ddfbe5e3741d3535f2998fd2ff8619ee42a619458dcca04873)**|7.24.7|MIT +**[@babel/helper-string-parser](#4b5727b5007527084d63346bf4767bc3b8683c75b68fc4f3a1a3d0cee5fa235a)**|7.24.8|MIT +**[@babel/helper-validator-identifier](#cd56a60c2382cafd5f5f3432d2af1a5103bcbb862da8abd0d0db0316886a2789)**|7.24.7|MIT +**[@babel/helper-validator-option](#cfe2d04997b6c7a764f96a7383b7518f4ad73844a12cc8dc3537045dcc297fad)**|7.24.8|MIT +**[@babel/helpers](#43b0b2e5ad67e18b90f0a2f60c96c3818519ddba3de59ed0c52a594f33e7b32a)**|7.25.0|MIT +**[@babel/highlight](#ac1d96bb7961d93c529e7b46f2fcf1ee07f0cb15851aab1ac5f212b46e0f0e7d)**|7.24.7|MIT +**[@babel/parser](#4dfa90cfe90188b3d219eee843ef7f70003af7c190bbb15dd2fe74a57ab9ae16)**|7.25.6|MIT +**[@babel/plugin-syntax-jsx](#92b0c9e2acd6beca918c90ecdc4cc5973ac7c517f7dee4ef88df317effdfa44b)**|7.22.5|MIT +**[@babel/plugin-syntax-typescript](#61156a21baf5a28e3fe10ec0f30808684165b1dbb5f5122c2e2eaf69f6f4f237)**|7.21.4|MIT +**[@babel/plugin-transform-destructuring](#c97fc3729e02faa151dc6eb84560e5aba3f15e1b409cf5ed2a58431f96660368)**|7.22.5|MIT +**[@babel/plugin-transform-modules-commonjs](#9dc9700c07e14862f1c48a1e4be203ffe5e62597a92411fba7140f125638e391)**|7.22.5|MIT +**[@babel/plugin-transform-parameters](#6fac48e0505318a21b9554f11767b16b6a8bf8cb79c8bf6379fff44932cfbbfd)**|7.22.5|MIT +**[@babel/plugin-transform-shorthand-properties](#b93c2977332c87c88bb42733c298a494df63eb1ad048aab45aa7a57960fbce6e)**|7.22.5|MIT +**[@babel/plugin-transform-typescript](#01d55893e2b014a36f9855b9c88123888b53f8f2f205e7a9511e2272a8c72ce5)**|7.21.3|MIT +**[@babel/preset-typescript](#6453c0322ee9255614c50610d48452459d62e0663cb3d060b83e4c3b7dc06dc4)**|7.21.4|MIT +**[@babel/runtime](#3a0292b85c21e6020d26f99075ac094fa943f759b0df9b7c01cccf01f65efeb9)**|7.21.0|MIT +**[@babel/template](#ce7b7770e36438d8eb9e8713520aca18c79d1fd0cad068eeb5c88cede557f6a3)**|7.25.0|MIT +**[@babel/traverse](#bc1b8d30e8e37f5eade430e098b05094a0dd90264ff2c291510973e5315014af)**|7.25.2|MIT +**[@babel/types](#c6630d254fc6e684be9d283c7020e7e911bb98d9c99a3e405e4467b1e57ec9f4)**|7.25.6|MIT +**[@codemirror/autocomplete](#62d2362c07f0c11664969b60d0d7c3e081905838b8994675aaf0e6c67baf358d)**|6.17.0|MIT +**[@codemirror/commands](#e12a76404dd2d66430f2dff53a430449896e9b5c2558779497b855ba2ab9326a)**|6.1.2|MIT +**[@codemirror/lang-javascript](#d5fb6a843784efdc3ec06ae43bdf3ca13ec93a6bce802995a47cf7bddafc9628)**|6.1.2|MIT +**[@codemirror/lang-json](#8681100c5ce2bab822c877bc288cac59b84b13ff17735c301d4e1c7fa5924720)**|6.0.1|MIT +**[@codemirror/language](#5528845a8e28aec6e48cb76145e25db0921b87499dc07ab852cdeca48b9f87a6)**|6.3.2|MIT +**[@codemirror/lint](#9b9400c17e0d1474348d87ba1131d9609c3598ea4d575380f81fd746b02ec796)**|6.1.1|MIT +**[@codemirror/state](#7db8880200a14064e03a5e8dd0483aa16511fc8a0c4e09353d51816771f8b63d)**|6.4.1|MIT +**[@codemirror/view](#f6bea8a649eb633e0e66739e6d3bee4d37893904778e421d126f1e5ae250c9fb)**|6.28.4|MIT +**[@dnd-kit/accessibility](#bf712d0ed1df4df5829a9e9695c42e816564346a70cab60f6eaf9c141f8b510d)**|3.0.1|MIT +**[@dnd-kit/core](#6200777f2fce7fbea84b65146c30f3f882633a73ab4e85f62de992928bebd267)**|6.0.7|MIT +**[@dnd-kit/sortable](#059a166729dc9306b37987bfa0eaa5e59b3ffc6928155d28750993d7178ea61e)**|7.0.2|MIT +**[@dnd-kit/utilities](#5c1b45075a016b1605974d8314078eaff1a193cb964f113c2e3730cbe9603ae0)**|3.2.1|MIT +**[@electron/remote](#1b60dc9421c1b6d8b9d0e622fa6b2ef72f605502fd87ad509ea160940395ab6d)**|2.1.2|MIT +**[@emotion/cache](#c91e3f11a83bb52488c9d1aa63b8e135037dbebc6acd2717e994939f5547b521)**|11.11.0|MIT +**[@emotion/css](#0f0fe64169ea56b12722e0c13f21cf260cb4e2a9840c0b909e6871d870ba3129)**|11.11.2|MIT +**[@emotion/hash](#b42900e08e5dadbc62da63a30f552d7705f99bf37c9468aacaf4d05af9589206)**|0.9.1|MIT +**[@emotion/memoize](#1827146c6aec82dcee79fa8bc04b0315431dd1ce05aae537ea63a88ce1580dcc)**|0.8.1|MIT +**[@emotion/serialize](#55f5a8e0d65e17a53e71c997b847af76e4e1c46fc25aec5c6824a23ced36b5af)**|1.1.2|MIT +**[@emotion/sheet](#e421ab8cefe597cf44f29ad92e17c5dc018be162bdac5bc5476ebac908aa3309)**|1.2.2|MIT +**[@emotion/unitless](#6f21f2d3d65978942c063ac7244c87c1e70353c1cb50b664bb1d1887e84521ae)**|0.8.1|MIT +**[@emotion/utils](#f6b1e8b81a4cecb8428a258e22f946a728b5c73d12a8d5cb55087f672c0ce2bc)**|1.2.1|MIT +**[@emotion/weak-memoize](#e5fd44184f5735455cec841f564e21689561fdc449fed6922f4999dae125d2f1)**|0.3.1|MIT +**[@jridgewell/gen-mapping](#1e660067f4d1364dc830c372517d8ec92eddc9af7eaa6b1e698d478b286abafa)**|0.1.1|MIT +**[@jridgewell/gen-mapping](#25a8188ec7d87cf1b9baf2470bad1f75a22f246ca0fca732933d26fd488ef5d2)**|0.3.5|MIT +**[@jridgewell/resolve-uri](#f356bc3bb9c04f5fe4e387a4eea4e74125aae03bb50f846d956d7d986d200f50)**|3.1.0|MIT +**[@jridgewell/set-array](#46727c727ad43ad8e382221964d27c475629a5635986edac6ea622c772311421)**|1.2.1|MIT +**[@jridgewell/sourcemap-codec](#7b2141e6a44d38d8458ddcb163c26ab65d5782f6c25465b1954182593dd0c2c4)**|1.5.0|MIT +**[@jridgewell/trace-mapping](#73923b51cccefe7db1ead00c09a18978443a238d51a858a7a0c86868a9a4ea3f)**|0.3.25|MIT +**[@lezer/common](#4bf054ecf9e3b46b5959ff484326d62af9e9d7698317b1e8a5f11a5ebf66534a)**|1.2.1|MIT +**[@lezer/highlight](#30f07ec49dde0ce2f5c814903361f4d9c8b9fc2d8bb143d2e682e05d94a69ee6)**|1.2.0|MIT +**[@lezer/javascript](#6f8d761b240b610d6ad180799f8b36219b20649cbce80bd3cb7e669082e92ef3)**|1.3.2|MIT +**[@lezer/json](#7869bdb7c09e2ae1e28909eb504f475477cc5ed0750dc8ccee42886961975253)**|1.0.0|MIT +**[@lezer/lr](#1443872b0ea87b0af4967c9026094e634c83118fb811349742ca05bde397412b)**|1.4.1|MIT +**[@lg-tools/test-harnesses](#d9d520c615bec249e9215664d5dbb781e77d0e048253f0f1de362a8bb6212d6e)**|0.1.2|Apache-2.0 +**[@lukeed/uuid](#82700fba068def47ea9842f28d700a387f59da805f74a6ed10a5eb7eece4cdab)**|2.0.1|MIT +**[@nicolo-ribaudo/semver-v6](#0db933ddbe9acfd097ee5ee08e4afb1f4f7a64ef9712f95fef7958494c8e02cd)**|6.3.3|ISC +**[@react-aria/interactions](#638eaf69f422aa3fbe2277f9e95b6b87e64569742134491d2653e9fc05c8f58a)**|3.9.1|Apache-2.0 +**[@react-aria/ssr](#d50578768741f1468c3d5dc0da1f585e37a01e7e13b44149ff094a0a5008d023)**|3.2.0|Apache-2.0 +**[@react-aria/utils](#1c0ce36c400225256d025ea8b6f4d36b8d4491f6c81cc1e9dfcb961dbfe05bd7)**|3.13.1|Apache-2.0 +**[@react-aria/visually-hidden](#67d321e4ea237fb1e2b91f294d1f31af998f4e1ca75ea5eb4a780b2e254d3149)**|3.3.1|Apache-2.0 +**[@react-stately/utils](#0827474019c352ac03e04eb7fc65f7fe2eba2af1f14f05cc36bb74a504d893f5)**|3.5.0|Apache-2.0 +**[@segment/analytics-core](#ceca19940ddcc60d35099f1b04cb449caddc02f22a12fc4b6e9afab7b5b38e14)**|1.4.0|MIT +**[@segment/analytics-generic-utils](#9f4e5775b541ec8bbc32077308532f03fb923e2fb19fff11ac4506ee4498af13)**|1.1.0|MIT +**[@segment/analytics-node](#5e36f09aa494e968de1e219302594c1aa82f14d2287c063fe1be910021fe1879)**|1.1.4|MIT +**[@smithy/config-resolver](#50159dd3d75e4f4233935008371e16a6721f052e958a5c4b9c7283e5adaf8f33)**|3.0.5|Apache-2.0 +**[@smithy/core](#874e0237249efe933850eb42f816f882404af60f8a1512dd83c6b1c98ddc5d19)**|2.3.2|Apache-2.0 +**[@smithy/credential-provider-imds](#34611beabdec16106966ebb4943cfecdc43c8cc142e5edae6436365632b9fa58)**|3.2.0|Apache-2.0 +**[@smithy/fetch-http-handler](#786f2bfacb944bdb568e1a786606a6a2dc02f867842f7800355b908aba260891)**|3.2.4|Apache-2.0 +**[@smithy/hash-node](#391a956b0a8b9c2f7af88541150eca7a355c08e2c891e15170a0cedb66f8c843)**|3.0.3|Apache-2.0 +**[@smithy/is-array-buffer](#3e840c8e473fca775cfba50e1c0832e2a2734ae3e75418b55905122f260bd73a)**|3.0.0|Apache-2.0 +**[@smithy/middleware-content-length](#93ab06858226b2392bd8f35d1ef56a363eac4cf19200bb8ee81e842384a8e2e0)**|3.0.5|Apache-2.0 +**[@smithy/middleware-endpoint](#dce020d94d521d84610461a98027c3821bec38cc676a35284ead114484d1dc06)**|3.1.0|Apache-2.0 +**[@smithy/middleware-retry](#a4651b327b9add4d8cdd1e0d62ac38d992cf25b495beb18c90bf3d09108c1703)**|3.0.14|Apache-2.0 +**[@smithy/middleware-serde](#c3675ccf95f0205d19f112c92a7a34849fe09dcf0900877b295692cdee3b1a3b)**|3.0.3|Apache-2.0 +**[@smithy/middleware-stack](#ea63c1e355c55bbf2e59545c6fb05399ca941daeeec43540feb38e2fef98e93f)**|3.0.3|Apache-2.0 +**[@smithy/node-config-provider](#f3a27d12f80a2d60af7facfff889c045d65b56e0ec20904c87b998575b7e4605)**|3.1.4|Apache-2.0 +**[@smithy/node-http-handler](#c37a7f5194e1cae47e8a63c4bb449434097c1beba0e14d3d7f821da9202da3b1)**|3.1.4|Apache-2.0 +**[@smithy/property-provider](#1af73ed46575c11cb17328c5ab023c4689b6fd3aac8e95637d8a2430c8234d4e)**|3.1.3|Apache-2.0 +**[@smithy/protocol-http](#2ba5cccbf0f9869872f2786a1c202c5d4dfb6aa59b8e933b0d32c5bfaef8ead4)**|4.1.0|Apache-2.0 +**[@smithy/querystring-builder](#200f9715ba37573546a0ba50d6600f493501ad1fa99a1214f4652edd3f32eb6b)**|3.0.3|Apache-2.0 +**[@smithy/querystring-parser](#b2d703203bc9334d657f0cfe5e2f3ff2e029f4be60ccb9a837373f1019e30bc5)**|3.0.3|Apache-2.0 +**[@smithy/service-error-classification](#557a776a2222ef5b1930bc9c154cc80a4422644765747502c34995779de707f9)**|3.0.3|Apache-2.0 +**[@smithy/shared-ini-file-loader](#103ac7bac6c71c7909ddff4de45221eefb970300f5eee041039c35ce86e6ade0)**|3.1.4|Apache-2.0 +**[@smithy/signature-v4](#4a110aeeb62df2468523d0078962af35910d6e836463e11142bcc1be2d1f4670)**|4.1.0|Apache-2.0 +**[@smithy/smithy-client](#d41834802fb9a283a133cc778bda33ae0a4580819e10c0d12797f83ac83fa1a9)**|3.1.12|Apache-2.0 +**[@smithy/types](#66e18d9960829b34832f8284a597f0e8bc4f70149542f7533dc9f05866bb22f2)**|3.3.0|Apache-2.0 +**[@smithy/url-parser](#cc28500f1b3dbf7f305e81f81414d3f5cd733e00df104a56acdd5b82f2f19ef4)**|3.0.3|Apache-2.0 +**[@smithy/util-base64](#c13f86d5882c72328221d234d624fc36da9fe0ef6270d9ed0f7a3690616bc0b7)**|3.0.0|Apache-2.0 +**[@smithy/util-body-length-node](#a84f0a1a3fcd05391da50ee998d84695412ce141bdae38ca182c11a58eb7df38)**|3.0.0|Apache-2.0 +**[@smithy/util-buffer-from](#33c6c26bbdc76fe4bf4ca385fe9618fa7322bd346d836ee4b18e5b322e256051)**|3.0.0|Apache-2.0 +**[@smithy/util-config-provider](#c87a7523255ad59e5f721bd27137222d188dc0507d93c4cd946092736ca3b582)**|3.0.0|Apache-2.0 +**[@smithy/util-defaults-mode-node](#17e3c5fdb381e735bc7062fa7510b953fb4f9ba1cf43ec61f9252f133ae35bd2)**|3.0.14|Apache-2.0 +**[@smithy/util-endpoints](#6bbc52b3dfd8d143c95f7c48631d054e2b4c76ed74a0e449c36a12a4d3505279)**|2.0.5|Apache-2.0 +**[@smithy/util-hex-encoding](#f797009fb996f0b306124df8c5f82a938af17ab613ee4a6d1b7e2014b26fdde7)**|3.0.0|Apache-2.0 +**[@smithy/util-middleware](#cdddd643148aefb93fd2abb8f3ea636694a4d11ed1e7e6f883fa81661a3b7dd2)**|3.0.3|Apache-2.0 +**[@smithy/util-retry](#b62c349356fcac274685aa0ab184eb71cac5084041f86ba14fd6f4cd091ee49e)**|3.0.3|Apache-2.0 +**[@smithy/util-stream](#620a9e04e4791a554ce9ddd0d3fa2f264d0d5bf211b7e5d4354411bc40d58ad6)**|3.1.3|Apache-2.0 +**[@smithy/util-uri-escape](#00c89382e0278c66e8d4394996711d826b23491ef5e313b58f5681da7a07d0b6)**|3.0.0|Apache-2.0 +**[@smithy/util-utf8](#c0da7acc7121c0e4e76c58d92e290275318534cfce16949c7b916cfa0301c3b9)**|3.0.0|Apache-2.0 +**[@tanstack/react-table](#3472fd929bf691e34b02f3f62232cafe55163b92e3c51afc884780ba2413e67f)**|8.14.0|MIT +**[@tanstack/table-core](#8a18d3df915b2b72a0c8a845e2a930504b08cb745c8e0b5537de30793b71c967)**|8.14.0|MIT +**[@testing-library/dom](#15e0d0db2fcc307557d106b8a27b182d980d667836b8d8cbb6edb67a0aab34ee)**|9.3.1|MIT +**[@tootallnate/quickjs-emscripten](#dda6dbabe98503ac1af20979be1778d7a1c8f355b85377124a909567193c2cd3)**|0.23.0|MIT +**[accepts](#4c224d266c36e8e0abc4a53eb7eaa038504ee20b9b91f3e761187298a447d76b)**|1.3.8|MIT +**[acorn](#4aa96f656a11c11b0e17ee35cc26cad7c13dcf4afdff6431e6d074261b59f47d)**|8.8.2|MIT +**[ag-grid-community](#f3a0879bf804a8156c501942869cb2b3f5c2770fe5ae768eacebf9c4856a3e6e)**|20.2.0|MIT +**[ag-grid-react](#266b3ad41f62fe9d8b3388c7e3e56532f1081dfc35c8b513d746105d0f7ef2d5)**|20.2.0|MIT +**[agent-base](#f2315537cada74050b82aaa21dcd7136d001ad9b9442d6ce952030fd890ad26b)**|7.1.1|MIT +**[ampersand-class-extend](#fa70ccae815f704b05515401eb173b69fec304f2fc4d70d8cefafecb7582c960)**|1.0.2|MIT +**[ampersand-class-extend](#e80e071b7daf67567df2ed06a0912550d865bb42f740c56f3ee13e4c9ada947b)**|2.0.0|MIT +**[ampersand-collection-view](#394cdda776a31044177827f7d787e79a65210fbf3e6d2619e2f40709248eaaed)**|1.4.0|MIT +**[ampersand-collection](#7ae90475872c8fb68869e0d81db8e343084b47fd30ab156865b4b22ae3578a37)**|2.0.2|MIT +**[ampersand-dom-bindings](#4af3a9ceda31b9fc6fc90e458e9cdbb22d004fa171f69665f659b71f19bdff7d)**|3.9.2|MIT +**[ampersand-dom](#3e17c8de5bd0d155ce04e72e923d7d76d39708be70bef26a67583c28a1850bbe)**|1.5.0|MIT +**[ampersand-events](#6bbd750c35bde9ac7cd9789013efa6fffbdb3debb597dd66deaa7a818623209f)**|1.1.1|MIT +**[ampersand-events](#5aa8f29a56511aafd27953d01cb603faa9aa7e2f92847c72f879c42646e7f3fa)**|2.0.2|MIT +**[ampersand-model](#82c2458e0e00bac271d59b70c0cc51b9d8c2ed725b62f51575b4b422c7aa5ca0)**|8.0.1|MIT +**[ampersand-state](#5a76226bf9a842fcccb127eb22fdd20e0bf973f5c4d2e3330bb88a587cbcdb38)**|4.8.2|MIT +**[ampersand-state](#50886d5661d4241b348d233af087614640a657fad2d772282410875a410ba00a)**|5.0.3|MIT +**[ampersand-view](#04597f3cef8beed68d8312481c66b00b5cfb5700dcd5e7fc97a1358472ad7dd0)**|9.0.2|MIT +**[ansi-regex](#7fa0e28daa6f9c697017b06f32a9e31a57ccfb4f138a8daded68a5d002231e29)**|5.0.1|MIT +**[ansi-styles](#3d188f4ce9ad01e2061b3dafeb74005547429b09fb5b114980303db9cf34f4ee)**|3.2.1|MIT +**[ansi-styles](#22c90e10fdbeeedded470f2fb78a8094893efd4675108074eddde452da52ef87)**|4.3.0|MIT +**[ansi-styles](#a480abbdfa49ebce7f9eb04451485c433d1fa24a2ddc4380cc92fd2d34642d82)**|5.2.0|MIT +**[antlr4](#c5ad356fae2f067425b6c90b7251290842a1f2dec296bbd5afd5ccc32dcf3acc)**|4.7.2|BSD-3-Clause +**[aria-query](#ea709a066de0bac38519808675639c17ed8511255f6f1604c0262ea3914cfd2f)**|5.1.3|Apache-2.0 +**[array-buffer-byte-length](#cc88781e246dc898d7b281d0c92ffc26ae81261dc07ec4ea7d1257688f769328)**|1.0.1|MIT +**[array-flatten](#832052c97b92484a7685d432fbdac9cb8d6cd26a0de715df336780d91762bfc9)**|1.1.1|MIT +**[array-next](#2eca7126c828f7c4b047e8bc3982acc390adc906c9e1fd2ab512d7ade811a40d)**|0.0.1|MIT +**[asn1](#c03a7b8eb9b75e350660b88148698446ab536a4ea01c5f321c14036a86aac2ef)**|0.2.6|MIT +**[ast-types](#b10f17e6889028ee16e1f388d24ed535333cd289f0871c70d99c6180f498c6e0)**|0.13.4|MIT +**[available-typed-arrays](#b26a9227325a0e2f27e4793244a52200e15f63f970e71f86ead22e0f696c4a41)**|1.0.7|MIT +**[aws4](#10a86cbc2356f4c2e30ecdd2d3f40dce2dee62e2a2efa860bf539568a5d14573)**|1.11.0|MIT +**[base64-js](#cf278cb8d073b3bd22b60816c2ba78b69043aec6bcd673437b4c1db3375153d6)**|1.5.1|MIT +**[basic-ftp](#2893c6a2ae0507b9073fc65146e8902587fef3bfeb9e94a67ea34cb09124b902)**|5.0.5|MIT +**[bcrypt-pbkdf](#b6b5900f1e48a933591abc1c918fbcc9c890b3d071f607c59d704bc1c13b3937)**|1.0.2|BSD-3-Clause +**[big-integer](#eb3eaa39f6d9126fdf0b39f43641e13908ba5ab8b70af073669d23cc768335b5)**|1.6.52|Unlicense +**[bindings](#acdb65ce90d2786593049f690752613250632fd5aeaa2960152abc4f0e8f3a44)**|1.5.0|MIT +**[bl](#0e8c95ceb67a28a94b8caec6fa59d55974c80aab5dcf21bf1b17b0867f694c3c)**|4.1.0|MIT +**[body-parser](#ac02c7f4de34d468bfc87444d6d5f4691f322aa0b5dbfe2c2d0c3c42fd078dec)**|1.20.3|MIT +**[bplist-parser](#a012056f1b32796d923573a3b1ef72cf36943d95e5e2f6af0f7eeab57a21be24)**|0.2.0|MIT +**[bson](#b355c474f7d8440212aca8ad979743ee65c159f2d853f15ebad55e080bb21ae5)**|6.7.0|Apache-2.0 +**[buffer-alloc-unsafe](#1022220a813dd092d3ced592ac36121a00bd08a9c2020e08ad370dc29ed217f0)**|1.1.0|MIT +**[buffer-alloc](#d5cbc95b9dde4a46cd45334630efe3bc9025c904074bee845376bd60651441c0)**|1.2.0|MIT +**[buffer-fill](#c3747dfd267829ceeb564a1717d0c65d88d2b366e215f640067abefac59e3fd4)**|1.0.0|MIT +**[buffer](#409d076f160d0351818531a7c09f5e2928335b83e3f0070a7f3e2685553efa6a)**|5.7.1|MIT +**[bundle-name](#a4c3d6b89061e28c4e5d7937e09f0886c37c406b9c547105da495923b5e3999d)**|3.0.0|MIT +**[bytes](#bc4d24341f85f604856ec6dfddb2dd192b71929ff892a8549f6b5050fbebac9d)**|3.1.2|MIT +**[call-bind](#855e84602be0584cc1eb1123aa7791d7a2cc4ed81d396818fb2b13515af7d811)**|1.0.7|MIT +**[chalk](#8b8d3d6ff6233601575f891628d83bd6b34978a103d513931ae45b00f0e07585)**|2.4.2|MIT +**[chalk](#0c7c7a95e90c3fdaf99df4851bc949785311d8ea1d2d4498615f37af8fa16cf8)**|3.0.0|MIT +**[chalk](#c1619ad3bd43ce54cc7a4702c368501fd4fb4fa629077ba610f81d81bcd3f5f1)**|4.1.2|MIT +**[chownr](#3dbff1a17bbf2c33026995132ecdd14757cb3bee815f4636fe43df0f5ebdcf07)**|2.0.0|ISC +**[clean-stack](#e1e3f1193b2ac191874d758c618f1552b4679c5ef91d3d59cf46385c9da4e965)**|2.2.0|MIT +**[clipboard](#c48767bc6ed2a136b20ca8ae206e6a049e1e98a7db03120c44fbd219389ea248)**|2.0.10|MIT +**[closest](#d06b758bb0a5c68d314479321acf51e1e5ce0faa84afba2817b574067e610ef0)**|0.0.1|MIT +**[clsx](#112cfff031c752f6ab3595be6de44b2c02620da21c18ce4e2421b6c176f6ee08)**|1.1.1|MIT +**[color-convert](#a85d5170e73259d44269aafb78e1863169810a839a870124e3574457d214e28d)**|1.9.3|MIT +**[color-convert](#55c87baa2843a3df1bf7eb7ad8e5c1329afea9bef4e94386d484de20b03c119b)**|2.0.1|MIT +**[color-name](#e7c2ecd62026cf51768973c2e972505cab32d45b9368aa35105af0a68839ad37)**|1.1.3|MIT +**[color-name](#66a8b5479032c7b05b81caf8cef9ed81be452b9f3f299868af0167900a4db262)**|1.1.4|MIT +**[component-event](#32d720e7a217746311d55af1f088a9ab8ae8a3966be80250634fbff4c2c45935)**|0.1.4|MIT +**[content-disposition](#b0fd3fa1e97f5d899f52e84c86cd6d0a077cabef2388f531bf62f1f1dbdbc371)**|0.5.4|MIT +**[content-type](#65e9de41d2cef0ed95875e387bc56dae50b05d41b1a7868ed68c32834843bbab)**|1.0.5|MIT +**[convert-source-map](#46e32cfc12079a57eefebf967b5959d3657698c6a389222eb3228f49cb2fd8db)**|2.0.0|MIT +**[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)**|1.0.6|MIT +**[cookie](#c396652ff004385e7bdb8398e37493d5f4144e475282a413ec52f1d3fdaf25da)**|0.6.0|MIT +**[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)**|3.17.3|MIT +**[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)**|0.0.9|MIT +**[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)**|1.0.5|MIT +**[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)**|3.1.8|MIT +**[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)**|7.0.3|MIT +**[css-loader](#36a5fb6f554559a2f884527f4dd7aa81131ccc3b1aee899472cfec2eda765798)**|4.3.0|MIT +**[d3-flextree](#d4848a862048d0f4733db2a8631b802f3b5f86f2d4a1efb77fc8b8cf9a06bf73)**|2.1.2|WTFPL +**[d3-hierarchy](#e718643319205524a77c56ca75dcbf37e3975cc5e187760d1eef01cdd94a7d74)**|1.1.9|BSD-3-Clause +**[d3-timer](#8d462b04307bb707afc68fb60de32526091852b278fc753ebd023aee6ac2faac)**|1.0.3|BSD-3-Clause +**[d3](#af9ae6fd28524ec267db82c3ebf75e02f2806418cda4ab310971631d632d3317)**|3.5.17|BSD-3-Clause +**[data-uri-to-buffer](#496bb13aeb7c14308e5c8c3e20ea81509260ff27a35abfc39b316ced3c5d6860)**|4.0.1|MIT +**[data-uri-to-buffer](#27ce7d71d79fc8fbfcac8bfd802d2dd044056224bb2a737180caf2d7e268c5ad)**|6.0.2|MIT +**[debug](#233219ced46fb5b84e28859835e97775eb9d0181f4cb85d6aa5cecb61e595947)**|2.6.9|MIT +**[debug](#f9b654e80c05af90dc288869333e452db67fbba75969b385acd60df9895a7944)**|4.3.4|MIT +**[debug](#8f6d58c520b4b6702b6fb9abb811ba1798560ac052612c0fa8dc243516825360)**|4.3.6|MIT +**[debug](#8bcd678354554043662ec7b1a1fc890da6dca2f1f245833d5400831daaeb3fc5)**|4.3.7|MIT +**[decompress-response](#71cad5eab34cc643a6a7853a43d3090ac7e8b6014c9ec55fabb8112cdbfd9fbd)**|5.0.0|MIT +**[deep-equal](#2f9e585913d3ba1d9ffaf3e79f616e66788fa687f6069a567aee25bb3045410a)**|2.2.3|MIT +**[deep-extend](#654bd7d00073c2195bca924a07d93393b2aaf5cacbb6f52a383877f6f33dbfbf)**|0.6.0|MIT +**[default-browser-id](#bc6a381b83371172dbb72cac459792e2d4d55ecb71165c082142ef085b2130ee)**|3.0.0|MIT +**[default-browser](#bf5c7331e49e4c648e57747ffd553870a7fe79fea24780366a6bc22ef346f304)**|4.0.0|MIT +**[define-data-property](#a776d26c4eb3429c37b30afeed2ddcd9be51dec6d9ea7025b0e6426a5d4f78d6)**|1.1.4|MIT +**[define-lazy-prop](#6e79b04c4690532e40a5cdfb76f3ab49de1d6778466fede1548a2e19ac8e75c4)**|3.0.0|MIT +**[define-properties](#332935df321f270f8588f3ae5e25759d1611d1610bd987eac78b79dd1ee5fe35)**|1.2.1|MIT +**[degenerator](#6cb75d096539cebca1a3054d0012d40eda0230d9c8da8455621c9d78b92f0b69)**|5.0.1|MIT +**[delegate-events](#9bd9e92528721909dffad7816bd183b65a96891a390f9420036ba9a2cc6ae291)**|1.1.1|MIT +**[delegate](#bc2c0cfa061f5865ffa83a2bf2c0f3e29dc3a2056113b1ce3e9acd33709e7606)**|3.2.0|MIT +**[depd](#7028878ddf0fd7d977703a868b5ec8df7220b2f8e7d67827e93767cbb0f21b99)**|2.0.0|MIT +**[destroy](#b0d735940e17a041d544c301b27489e5d09c3032fa11e7832f03be6541182fd6)**|1.2.0|MIT +**[detect-libc](#75227d1b1c09630ea361abee4d27101e350832bbeab9640a013c82662408b467)**|2.0.1|Apache-2.0 +**[diff-match-patch](#850176c67954354dc12126896278644187ef9d1eeeaa1d67f1b6ef48b0c23321)**|1.0.5|Apache-2.0 +**[dom-accessibility-api](#a91e4ceabaaddea1b80532694b37621980591fa28c7144a3a848e66363bfee06)**|0.5.9|MIT +**[dom-helpers](#8d51cc2c2eba67a9ee7b80bdbca48b1102ceeb0618178fae05b1a82522a80e6e)**|5.2.1|MIT +**[domify](#4360a769ee10e827f9ae503aa7ea9aeb9039932fa02ac938316df303704a7fb1)**|1.4.1|MIT +**[dset](#f51cb933ffb40a4dfeed4e6c3f7e6299cf7d05c42528b3fccc5bc7cab310914c)**|3.1.4|MIT +**[ee-first](#e2746902c758ae8a6f91ffb9618cd53717f936cb33c6323e65b6b7b24f7ebefe)**|1.1.1|MIT +**[electron-dl](#e97e034c7b93c63e7a433d75f6f1de3e0668764225ebbd61dbde8d1b55d6f3b7)**|3.5.0|MIT +**[electron-squirrel-startup](#09fb8168e8fda2e174f8d1a1c392ffd8f762c5637c788edd00d1e2486d060349)**|1.0.1|Apache-2.0 +**[electron](#b8949aa8130b5ef5da1efc84f1a58e30028db62c230eb1da216dcfd7b263f55f)**|30.5.1|MIT +**[encodeurl](#b89152db475e86531e570f87b45d8a51aa5e5d87d4cc3b960cee7b8febf1d26a)**|1.0.2|MIT +**[encodeurl](#177948a319ae0aeebbd65742c53c62b37c75ec1d021afa5a188d10a7ceae6623)**|2.0.0|MIT +**[end-of-stream](#fadc10994f5fa767d06fb25cfff35fb17a895daf3bc3477c782907668ed16563)**|1.4.4|MIT +**[ensure-error](#3b1eba5276d89414cef21a1007e85c4f1d6749bf57b300e082ab23975a41dbc9)**|3.0.1|MIT +**[es-define-property](#f19a2c06a58db5974cd4d8abbd3fa0453122ea6d3bac0de0603ca69f72dcce38)**|1.0.0|MIT +**[es-errors](#645b141d3027520f69209dba8e012e737f0ee8cad89ea8d0e26d02669d14a981)**|1.3.0|MIT +**[es-get-iterator](#d9180f3ad32c9d77645aa98ee5b6b8c233f3341b4cdfe00a1b8909505dc0f84b)**|1.1.3|MIT +**[escape-goat](#9e11fd1d88e064409c700bdd041e7a9077ebe4bb0e8ad151a6820df52ac0a9e3)**|2.1.1|MIT +**[escape-html](#5463e0a52abb42be051fba2f4ea5d49d907d2b5ed09df0983b54f88c59c8c481)**|1.0.3|MIT +**[escape-string-regexp](#a9c53481a9db89e7cf01e302086c50fcfbde360978cdd2bbe1e52a430d3fee42)**|1.0.5|MIT +**[escodegen](#1e641bd52df32bd017c4d69033099f93df452d219efd67395b78fead686277f3)**|2.1.0|BSD-2-Clause +**[esprima](#48204389e2519fd65c7341ad2eb6174fad10df3c5b019e78cbabeb2488eeca37)**|4.0.1|BSD-2-Clause +**[estraverse](#34389c51a0aa1205dfb23a6e76beb58b791316f617dc3d09788e50fe99fe5338)**|5.2.0|BSD-2-Clause +**[esutils](#cbd4dd8d594e202bb6c9713d3b097eea62783e99d79069a29ebf4ce921e129b6)**|2.0.3|BSD-2-Clause +**[etag](#dfcb09916bd8554b4d5ec250d985c02174ddfe92cb0efaa97df51b903ce0adf8)**|1.8.1|MIT +**[eventemitter3](#2845c3d706e174e51442028b5aada4c274955de08db3fc13005df746b5d6b3e6)**|1.2.0|MIT +**[eventemitter3](#344ac4a1404cf0768bccce4529868ee2081bb2d49637269457647deab073e298)**|4.0.7|MIT +**[events-mixin](#5db5de476dd54dc255312e4dcdb45fb765e1b7d0622d9b9ba86b65527de02a1c)**|1.3.0|MIT +**[execa](#4172423d3420d919e31613f23914ef325af8a3bf9ed3c6110a4053369b1cfddd)**|5.1.1|MIT +**[execa](#099ba5f976333854bfd5aa2237fd12d883c4477af76007a7963109833edef012)**|7.2.0|MIT +**[expand-template](#46d3e73ca0d4a8c14e99252386f0a5c1a4fd8b2747331373d7b4da97105c15bb)**|2.0.3|(MIT OR WTFPL) +**[express](#8751e219c34fdecbdbc22ade072ef51354f9ff6434904f388f85002299a5a1ec)**|4.21.0|MIT +**[ext-list](#84470edae99e3ac5a9fdf9da513cd9a1ea7e479ca5fca13b6abecbb4c522f97c)**|2.2.2|MIT +**[ext-name](#ad9b31fcbd25bf889177f1e55d92e083fbc5ae2460904d8a81abf075c4762abd)**|5.0.0|MIT +**[facepaint](#7f6881dbbff5f35b8670063d56384fa880a5558aeaf952f1dc00997cfc7cddd4)**|1.2.1|MIT +**[fast-deep-equal](#c3b1bc7fbf8bedbac237ffb2eb2aa967bc264fc393bb6451c52a831352540d09)**|2.0.1|MIT +**[fast-memoize](#f613a3ea5150bd2496e9eb6f15357579eb3ec308a8ee91cdafce0d68ffef289b)**|2.5.2|MIT +**[fast-xml-parser](#ebbe8cacbca0e6da2c884ade309dddffc2df1cf8f3532ffda03e31aa6d3a9a3b)**|4.4.1|MIT +**[fetch-blob](#9a40c73e2482c1cc651991133722a6fedd12dc752d2858a21da24395e6fc8461)**|3.2.0|MIT +**[file-uri-to-path](#9eb41790b1cce0829afe7926edf4be80e0dd6927cd8376c00a54a8fc86f8943e)**|1.0.0|MIT +**[finalhandler](#f3d0b351ed5ad496bcb1412f1508b4cd24709821f254c8f391f6e96999f97900)**|1.3.1|MIT +**[first-chunk-stream](#c940079dd0a2457019ab184334f928cab84e316cd4016ba3581b312aa55c70f9)**|3.0.0|MIT +**[focus-trap-react](#4db13d4bfad6e874b38f8054935a1c7872c265b0a9f279e24dbe2523f3d1ce53)**|9.0.2|MIT +**[focus-trap](#c34eea0a3a357645a464ee2dd814f280c9670f39b9b85132394eb15acb70916a)**|6.9.4|MIT +**[for-each](#8b82c7ffa1300f8e1575c1d59105d6b256827ec211760d6fb6f884e4290e0abe)**|0.3.3|MIT +**[formdata-polyfill](#57e46e70e3cf628270eb56d751c6e2dd8332438324f1e4f5a3602c34ff7c85b9)**|4.0.10|MIT +**[forwarded](#2d7f4275b09b041fd821b7672ebae7c9ccad3c87f3f37b6bd91306973c02b9a3)**|0.2.0|MIT +**[fresh](#d7c677c373e09a5e9c7fe1d1ce69ca3147fe0455bf5606a26251970181d9efc4)**|0.5.2|MIT +**[fs-constants](#9961a9f7535cded379a7696ad6d002a62d4826a3a8c2ffb5624383b942c879e5)**|1.0.0|MIT +**[fs-extra](#f4bda72fc58b809b6533077d1826716805d4bec29651a76697ededec9689e0a4)**|11.2.0|MIT +**[function-bind](#83de3b394293d96fb3fea968392a9d9ffb8b461f6c173bbb76a5bc51db5bec52)**|1.1.2|MIT +**[functions-have-names](#e47bfb8af99536984c43eccff65479505a133c528be9e5e73fa43c03b31749bf)**|1.2.3|MIT +**[fuse.js](#ced18d15cdf119bfd867863e1f147fb1f4021544033d6cf956803c71a14cf53d)**|6.5.3|Apache-2.0 +**[gensync](#c49cbe8d63515db5596a717f0d65eab2f06a623b4f1dfbd512d61bbdccf1aa4c)**|1.0.0-beta.2|MIT +**[get-intrinsic](#2c1a0d16eee22217701f9243a8041f80f74f0a262eb6c10bf1b1f7f41e8599ac)**|1.2.4|MIT +**[get-stream](#8d24427d88f4f3193411b16e6dbdfc05d0edc3ce08460a1c73ec55718470e28c)**|6.0.1|MIT +**[get-uri](#4ae602658ce541126b57c19a2c8c47ed82d62e55c642d49f59f14e841ddc1db6)**|6.0.3|MIT +**[github-from-package](#8cba969ea116f44491f4fbb8b391c0ab40408fc2e5380f81bc8e8e42b55fff8b)**|0.0.0|MIT +**[globals](#749052b146da20b19c298de835e7cacd7f6d1f0a87a8422e538ccdfeaa69b0a5)**|11.12.0|MIT +**[good-listener](#0700018cbdc383f6ad6d421484a062b2e19ae4da91ffeecbccf3886e5a38afc6)**|1.2.2|MIT +**[gopd](#e51829c607e5861ddbe69decfaab45dbffb62e23d40af7d1f746c5bce8d05859)**|1.0.1|MIT +**[graceful-fs](#c0b8c47fbef7d28839a82ca95e6743793680005077b011462d5c0a6d1ca1b39d)**|4.2.11|ISC +**[has-flag](#e2f50bddacaae4f231bda078470fd90f19fd780e9c2bc721710a09bcdd536d1a)**|3.0.0|MIT +**[has-flag](#7ec819116728d891777ebd4140bef063f473b9ae26d46e91f5ca78834c872abf)**|4.0.0|MIT +**[has-property-descriptors](#4616611d5db8c73d2811bc79dd6cbde0b69f1cc891c1f997448bc79546ba9913)**|1.0.2|MIT +**[has-proto](#7a8e708aab5b7c789098be88699f7f374a9b3a2f2737537a66d391147377b362)**|1.0.3|MIT +**[has-symbols](#26dae1ac20c49dbfafbfca8c84abb75e056b0213a6ff12412dd23dd752e1a424)**|1.0.3|MIT +**[has-tostringtag](#e39d802569f1249ba08678c5fb24fc1b87ee4c92cc0f6eaa259f5b54038f2e13)**|1.0.2|MIT +**[hasown](#ace41f4c3d63ecdc85c94d28b43fc006fc67f35c24ecaa112b631dbcb5c0b39d)**|2.0.2|MIT +**[heap-js](#02ff1972404d29f951641af2b6cf6b371521d70f6daaf4196dcc45e6b5dbe96d)**|2.3.0|BSD-3-Clause +**[highlight.js](#2c60adc5db39462d0c2ff2176f71b4694ffe5060c53b1aa4f6f670e269ec1905)**|11.5.1|BSD-3-Clause +**[highlightjs-graphql](#11efa7dc664403503100672cb251f0bac920e5f8ac3847419583e9318faf451d)**|1.0.2|MIT +**[hoist-non-react-statics](#48f3f00d384ea079099b9b701c304b7e276313a616f8ad0084f41ea563f876af)**|3.3.2|BSD-3-Clause +**[http-errors](#63ffbc6de129d4a36e73df25da1f31ee2a7da3b1060e1b5b3c2b5cad89ca04c7)**|2.0.0|MIT +**[http-proxy-agent](#bd2b92f8eb0b68f6d255c316d3cd8c9aff9984e8bcb584d47613c422de726405)**|7.0.2|MIT +**[https-proxy-agent](#8a149a0a84183adc7ec4c2ca491a2aced0803a8c5fdae6e99879bcb4720837e1)**|7.0.5|MIT +**[human-signals](#49d0a41c5a505634282f30fd5bf8876d5c9fd885fc242bcf16c71d3b4c4e2da5)**|2.1.0|Apache-2.0 +**[human-signals](#62680fd7715b22b948ad9771bc3f0de13d753f68f6478afdda970d4393faa754)**|4.3.1|Apache-2.0 +**[iconv-lite](#7d9ca5eb7c6d1a6f1b3b2db04e94ca19cc04caa10d923fca7d7942d47aa505fe)**|0.4.24|MIT +**[ieee754](#926bd89d8cb0e458a159fe96007510a5c9d75add2ea3e46185c68854f977a887)**|1.2.1|BSD-3-Clause +**[imurmurhash](#d1af6342e06cf4463a1e70d43bb8fd673f060cc7c236f7fe024631d6714c81c8)**|0.1.4|MIT +**[inherits](#3eafa9bfb872baf192e837ab771da2e95e983ee682371a2b1c579e518e96f7b4)**|2.0.4|ISC +**[ini](#2269ab4bd2e1fa90571f520780ab5499f6d49da3b7daee9b9dfdad9e93c33a18)**|1.3.8|ISC +**[internal-slot](#1ecccc52c5daf9836e78ebc03604e73050b23a095bc4474240968ba1b9cd8892)**|1.0.7|MIT +**[interruptor](#e8a35d2ce64b947fb7a1aba891bc1e4eb166be57a59249cda1fcc689e767b6bc)**|1.0.2|Apache-2.0 +**[ip-address](#8de6e89459554be8a933663b25ae1d1ffee71458028fa8cbe5d68b349438a8c8)**|9.0.5|MIT +**[ipaddr.js](#38a5a1606dbc89a9c65a28d1e9ebe3c8d323e107a77c495a56dbf522211676d2)**|1.9.1|MIT +**[ipaddr.js](#d8a1c47a5dc5581d8d9e84268efa779a5140196540c2a4425e8317c1eeb93fb7)**|2.1.0|MIT +**[ipv6-normalize](#7a4346dbf206011966449898fcd37178a9be89acf6dff120b676d4c4d0dec203)**|1.0.1|MIT +**[is-arguments](#4af472b071742337deb4d56d6c4a507fd58990e8922613def80a84ba532a2b6d)**|1.1.1|MIT +**[is-array-buffer](#442760df883a3fb368f6c5666080a8c4e07d95f5f69fc92654bed5bd4be7f814)**|3.0.4|MIT +**[is-bigint](#76328e128016cee0810bc1fd650e8f63f1ad3a062d2e0c555515448ffd3f13cd)**|1.0.2|MIT +**[is-boolean-object](#db76784fdb608b8a1760612e770f909cb121ee1d4f6067a33c25443f06b9c998)**|1.1.1|MIT +**[is-callable](#8cf8f70dfb44d8f426d81a03a0f5a1e4be28081368aa69089c22ac2571dcac14)**|1.2.7|MIT +**[is-date-object](#4e4be4dc1852d5d512c7afa3107dcff477e27efa4ac81bda7a72422f55fc5841)**|1.0.5|MIT +**[is-docker](#893885e21608c60de02539fa3bd5a98f7068127aa5fab86a215bfec41a3119a4)**|2.2.1|MIT +**[is-docker](#b21de9a8d47c7c165b912be5c7a36eae3939076531e05733aa2ac7f1099dc46d)**|3.0.0|MIT +**[is-electron-renderer](#5f979579f0e64b4ba63a2cf1d32f11e274d285511e84ee596bddc57424d5299c)**|2.0.1|MIT +**[is-inside-container](#3f45825f7cda0ec2231b94ee915a0dc76a31eb0f97746c44510d9b05d80c1a97)**|1.0.0|MIT +**[is-map](#a9d75aec4f0b5614e4286c133a5fb6390141bd79d8b5bff8f3f7815869d04f8e)**|2.0.3|MIT +**[is-number-object](#98d946a111ed40a337dcf7f4aa4824b69cfe20d4b3b230710bcd5f9c803c9348)**|1.0.5|MIT +**[is-plain-obj](#6aa44f19e7afb6047589b7ad4e4ee3d44264e44f4a4ac5057efb8e3000820525)**|1.1.0|MIT +**[is-regex](#b98aa247d6a1b7f75692f6acb485fc213de3ca0cd8ecdd6bab7f96393e255d07)**|1.1.4|MIT +**[is-set](#af0e69272cbdbff01e5f873f16f9aa12c5c8fcbc228972be63e0b1ce16bd180a)**|2.0.3|MIT +**[is-shared-array-buffer](#6828bd9e33499632e06a110b3a3ecc06df254c4a28caf86e436a9939af9b3ed7)**|1.0.3|MIT +**[is-stream](#6a348f7c7e9ad013ef74124a87896ed11f8bafac3344e58377dcfc0944187cf6)**|2.0.0|MIT +**[is-stream](#309bd1940a381ff538d0c335564cc3e436c79307c991516433092d84e35acfc7)**|3.0.0|MIT +**[is-string](#f00a8e1cf00a8951016596ae951454a7d9944dc72a4f1b1127e7ec5879db5654)**|1.0.7|MIT +**[is-symbol](#3550f187e60fe8b94de5ebefd70dca43157d4c7a8ac847bb8d5ddfb1c59c1723)**|1.0.4|MIT +**[is-utf8](#df5522c387e62effc17916c612bf340d6543c4bccca99fed4c1c1fae77ed4900)**|0.2.1|MIT +**[is-weakmap](#ed08152c59d2b4e2e55e4c75373f7cd102901b6de08e20dba61722d1bb7a5086)**|2.0.2|MIT +**[is-weakset](#5538f4c86728250aa4d278637d76d6fff7d7a2cf1ff7433f842cc4045c95ec6e)**|2.0.3|MIT +**[is-wsl](#133bdb52dad1bbd87bcda9564e6df13fe7c51ae7d67575fea63cf0a2072ac884)**|2.2.0|MIT +**[isarray](#55a8a963f7aba0af49a654ea316f8dc19b717b632b88145881fda3988256ef6d)**|2.0.5|MIT +**[isexe](#2f62e711a6921973ef3f9650fd3e06585fd3842e34078c8fa959481738600405)**|2.0.0|ISC +**[javascript-stringify](#e0d27d21a288d227e51243715c044b3933d9fc0fb025dc16ec79c78af35f85a7)**|2.1.0|MIT +**[jose](#7c6ba2890a65df8d382e1b102b311651675d0ed5fd5443e911c520b18e93f62f)**|4.15.5|MIT +**[js-tokens](#f4371f095c6f087cf41433031f8c612e21a4258b18cb4e847ffae73905e146d4)**|4.0.0|MIT +**[js-yaml](#c82a34a38ab0debe302cf958caa7a51b455f5fb8a32a3ce6b9b4cab3f500c60a)**|3.14.1|MIT +**[js-yaml](#b7325d630b0ab313450fcd188788f6ee374aadd75df4969a9e3c48507ef88bdf)**|4.1.0|MIT +**[jsbn](#936d5c89291f7b505f688e45ff8261d3f225f96e0e981fd0366a9efda9e0e7f2)**|1.1.0|MIT +**[jsesc](#253e8a44fc188759c5ce35330e4f20aacf1d0253d7e8d7dffd4a1f884a10ce1e)**|2.5.2|MIT +**[json5](#16281c6ea25e0cec4bc0bb8c01d1759d66992776381bf9c5af6959bec47d2f77)**|2.2.3|MIT +**[jsondiffpatch](#2cc3b990f6692cd23f883319a727b42a76a3a9d6675d1ebd8a05241eb7edc4ac)**|0.5.0|MIT +**[jsonfile](#1504ddbe5031429f6d90bb02373b4629ff5da9ef4e869d5015ff42f685817e74)**|6.1.0|MIT +**[kerberos](#e9b8ef28e3d246d5071f34b07b67580523cda7bd0d7d74dc2e422d79d30c238d)**|2.1.1|Apache-2.0 +**[key-tree-store](#63e3bcb8e06ac6b9f7c153030ce57fad6e985a0cc7f0109d3fc6073192a932f8)**|1.3.0|MIT +**[keytar](#752f1130bbd6c5dc941bdb20fb39579c1d350252a112c58f2558b7c5f536d6f7)**|7.9.0|MIT +**[leaflet-defaulticon-compatibility](#7fba582082c899d764d8e4214d2f6f06cd043b2dce51598ec24ce299f5640a6e)**|0.1.1|BSD-2-Clause +**[leaflet-draw](#d3f67d0a666ece9171dffece3f3db67430e7055b1e8b857d806555d65b720d0e)**|1.0.4|MIT +**[leaflet](#0c77955158defdd249f5abf69232ca350038122d4fc768826d9d79ce402761f4)**|1.5.1|BSD-2-Clause +**[local-links](#9d5ba7b7e3257ecb142eb0aaf6f846e1f98c95256ae9a5836a5246db26eccbee)**|1.4.1|MIT +**[lodash-es](#a591ea211f9167d2f80166d42532d3c01f7843fafac380deb0bcf693cdf6fa1d)**|4.17.21|MIT +**[lodash._arrayeach](#e705b211da95702daddcf8ca44be1e168f2c98cc4298c3c0039d7acba4b651d5)**|3.0.0|MIT +**[lodash._arraymap](#afacdd77340d24ba7aeefb1cb7a952166c5d601c0a7fe44483832dff840688d0)**|3.0.0|MIT +**[lodash._baseassign](#aacac99d5201811cd8fbae43458c75e440fcaee435b10ff4ebae397ca34fc335)**|3.2.0|MIT +**[lodash._basecallback](#560dff0d15a98e42aa42379205f5a3e8e4f9a2234c4bf1e7aae85ea6369d5eb1)**|3.3.1|MIT +**[lodash._basecopy](#b7789a88750f78ca9242497a1c4acdb472b17b3a207bb1088c1865d5fc059d45)**|3.0.1|MIT +**[lodash._basedifference](#fba9051032cf703707176db1852b2c612c58e0fe0aa275233262512fe1cc3c1e)**|3.0.3|MIT +**[lodash._baseeach](#9a24b68e28142b48a1f27163a281677591406ba38b1aa99b8fea01c1cbd2c2a4)**|3.0.4|MIT +**[lodash._basefind](#c58e88997b2cda815fe8eafeb62113412915090abb1734f1ab37c060bd186d78)**|3.0.0|MIT +**[lodash._basefindindex](#070aeaeefdc0615eb01ab55ee2611f008b4973f77542680c09d58206324d7244)**|3.6.0|MIT +**[lodash._baseflatten](#ef8e3266ef37ba1e96b4494119bf1d6e167b5fbae3a3a3f24f6b2adfd813a18f)**|3.1.4|MIT +**[lodash._basefor](#9452e64da946cc633bba85112f9d585983d4d34ddb922312c23509f31b9cf54a)**|3.0.3|MIT +**[lodash._baseget](#c3cf4bbadde17410a34e84962cf52620d922e4c477c0c67407e3905a668d5b3f)**|3.7.2|MIT +**[lodash._baseindexof](#984f3f17e0475ba7b138ad2bcd02121d1069d6b685100583bb4bc9d6127a29a1)**|3.1.0|MIT +**[lodash._baseisequal](#5722da50c112fc1c4eb299375a140f952d867bf75c7433a0fb78b121b90a6fa0)**|3.0.7|MIT +**[lodash._baseslice](#f3a23746e44f620faa3af8d34a8ba0423726d0cd24176300f50a3c2798774e21)**|3.0.3|MIT +**[lodash._baseuniq](#fa4ce8551ed1dc65f15b9dafa6fb0238a4feb17f2caf8ed613748869842943b4)**|3.0.3|MIT +**[lodash._basevalues](#a6386191237cb1d70784b24e2847098f2876903ede40b488e306ba726b674f47)**|3.0.0|MIT +**[lodash._bindcallback](#759845849a0d94685fdf1a87cde520e49632ca378662469cdfe0c2be33cb3057)**|3.0.1|MIT +**[lodash._cacheindexof](#e2920f2aa3d3ef638e09c3952dd2cac1a42dca3929acc0bd76c3fc69f7cacfb7)**|3.0.2|MIT +**[lodash._createassigner](#c8f058ba3519bcdc9abd63b121fe2fab26acab4f4bcf2658efec676a3fdbaaa0)**|3.1.1|MIT +**[lodash._createcache](#072c756c562325194b5d955a7929da38e505fadd86c92a1a7d19ed9d251a58ef)**|3.1.2|MIT +**[lodash._createwrapper](#c3d6fd2a3e8a1412538ac86360c7608876b0841ea7f499ab96edc3e82ed120b2)**|3.2.0|MIT +**[lodash._getnative](#2a9507ae12db57c5319c675c4dbe5e100525a22f40b95339f9fc2d5f340ce09c)**|3.9.1|MIT +**[lodash._invokepath](#de9648080f5467f2559c407ca80b67fbd95a3767f8735507a7ff9802115379d8)**|3.7.2|MIT +**[lodash._isiterateecall](#2a87d94ff3c38e8d5da4ead575fec274d7655bc29e5645ff44b867a5b8926b4e)**|3.0.9|MIT +**[lodash._pickbyarray](#ce351b398064b4b254cd6189e4d91e14af322cb837142813fdf6d7f35e3a7e7a)**|3.0.2|MIT +**[lodash._pickbycallback](#5a4ef737299f75e14a058f857cdd3593cff7385db2c2d750516bd8c5fd1dac74)**|3.0.0|MIT +**[lodash._replaceholders](#c79e1ac85ddff7c5fe2d1170dc92a28f55b4a1ce6da74091d8775ed2c172c3a2)**|3.0.0|MIT +**[lodash._root](#b4c5b75f0ca57172edd2801a0107b22b1cc5b4bc258c4bfbe5d1b1fc052bb191)**|3.0.1|MIT +**[lodash._topath](#41ef14e011630cd3bea80b43c1d824c5bdada826f2bddaddda350eca30a93f4a)**|3.8.1|MIT +**[lodash.assign](#279f6350b38f924a812ff5d74a5f9c9023f5923a7c70dcb75bdb1670ad35ab50)**|3.2.0|MIT +**[lodash.before](#2fef595ae4ab5ca92be6f59e86e4d7f2b4ad0c224c22d828dfd0bae48af64645)**|3.0.3|MIT +**[lodash.bind](#3acab10f30bde74cc48a35928697ce1670df78f45fdca78b8bcb8c047a698b0e)**|3.1.0|MIT +**[lodash.difference](#43791df64f8fe405fc866c836325719f4060084c461c21882bef3b606d98ebcd)**|3.2.2|MIT +**[lodash.escape](#b2c0e0aeb488595574952c98b5f54e03f435b75e913a2bd5e5355645a576f866)**|3.2.0|MIT +**[lodash.find](#83ef2b0f6879ce20ff4050bf0aba209ccab6beceed27ea68be7dc15e088aed7c)**|3.2.1|MIT +**[lodash.flatten](#6adc3792aefcf12132c36a2d446686218a80ce413c20b2533d551509cc79c542)**|3.0.2|MIT +**[lodash.foreach](#27063675a97582e63d10521797ca5436c38ec0a71341733744333edec40fe4e1)**|3.0.3|MIT +**[lodash.forown](#b50edd80fd196dfaace7b3aa2a90290a00fed380636e15429b37a7d2f8e3776a)**|3.0.2|MIT +**[lodash.get](#632dd5085bea3b2734eae88903cfc1e91fb5b4ddb9213e10ffeadf7121ce5ea2)**|3.7.0|MIT +**[lodash.has](#d0e17f0b2e78b1a2618102c4f3b743c662a0f7cb0d3ef613b22a5595f46c3667)**|3.2.1|MIT +**[lodash.includes](#3adf597b6163c3ba3343235b44071cb955635e582da311d5b57ac35f2692f9b4)**|3.1.3|MIT +**[lodash.invoke](#43d25e539b3db0cb448dfaeac571c6f35c805ed7336f54c63392ccdb88c7ec91)**|3.2.3|MIT +**[lodash.isarguments](#fc005d458a81bf6d8d32c52123952311bdd5e02c5564720455bd4d9480b20da7)**|3.1.0|MIT +**[lodash.isarray](#0ec1c02a99d5b713fe4a1e0682e2917aedfbf6f16057f1dad1c7871c6f736575)**|3.0.4|MIT +**[lodash.isdate](#54396c41d452d46f8d06091b9ab83f35cbafd80f53b8a3337c4567d1009556f4)**|3.0.3|MIT +**[lodash.isempty](#f1f61f99f9012392c9bc1dd4b01eccd42224ff516c50b507c0041845df62bcbe)**|3.0.4|MIT +**[lodash.isequal](#3c009e1972544c1bf8dba82eb0bffe6230cf8760bd49d8ee6e120d20b4296b2c)**|3.0.4|MIT +**[lodash.isfunction](#037b8981ee3ca5d6ef852835683db8dfb102f43763b561aa365c7567a766ff60)**|3.0.9|MIT +**[lodash.isobject](#247f42305767fcd88c563da8a196a61fcaecdd7d4ddab3d72d1a9eb05bbf5405)**|3.0.2|MIT +**[lodash.isstring](#10489ff0ae921489d537bc6aecec98d63d40c04e55ced77d1f68331a7f2dcd56)**|3.0.1|MIT +**[lodash.istypedarray](#1968cf985099120c230a51c77054d5e662feeea4825ca0218c1c728f80b5839a)**|3.0.6|MIT +**[lodash.keys](#c588afca24b161c04c66b7fe976458f32d1871dbdc38343d2249c15af51e6df0)**|3.1.2|MIT +**[lodash.keysin](#eb438504bc7bde2a75d470d2723add90d5a7e2948c7a9320eebed39d20e9e133)**|3.0.8|MIT +**[lodash.last](#541caa1523f10bb2a8b2f52174d1de4ab2d64fb7a02719e69eb7d4e1e10b1065)**|3.0.0|MIT +**[lodash.merge](#996e40d63a94f1b8693d7c81e0cdfb874c6432d6bbd675976fc1b6b13652c8db)**|4.6.2|MIT +**[lodash.omit](#babde7076e3dbe66c1cd8dd0af071af1fcd4b49d2c7dbf8a306cc09b860c9ad9)**|3.1.0|MIT +**[lodash.once](#e794f12866dca62acdae15f1b5b4495ad6dee09c7150f71a96044adc2ced1286)**|3.0.1|MIT +**[lodash.pairs](#db90d2eca20d73caab322dc7ac851ecbc50db59e5e9e40d5c78d0f840cf03329)**|3.0.1|MIT +**[lodash.pick](#d54a2e0c0e3d3024a4b364b8917d59c1170262088fb3bfc4ab4a71f53ecbb3ae)**|3.1.0|MIT +**[lodash.restparam](#212ef51d65362b73a8d548dcc6dda631ef012bdd6d7d724281ab9bb0a1dbcec5)**|3.6.1|MIT +**[lodash.result](#7a09af41b88107096ee9071a254bacf1e324ecab5c9fb56d81dcda873144de35)**|3.1.2|MIT +**[lodash.union](#9ee2120113e7c91fbcbee571e2fae44f1e7f87afb331cca6eb46a3d318d6169e)**|3.1.0|MIT +**[lodash.uniqueid](#f4693b5b22365d675cec07ce8ca01fc235054f442963585ee0097efdae26995b)**|3.2.0|MIT +**[lodash](#adaac4144887ebc2c1b682380ff385210f681fc58b4bc1ef3986148cf8dcd28a)**|4.17.21|MIT +**[lru-cache](#8d10f71b6ab389fdca1b55e9aa96d77790f776843bd42ca91804a40a0d543f19)**|11.0.1|ISC +**[lru-cache](#fe7f0a2f2cf4c92f13c3a2a63f14f80f20f6919979306dc054e4f947c1234651)**|5.1.1|ISC +**[lru-cache](#938513411a6603ce29334db15563fb94b7d52f839d32b9bd78c18f5d3f98aa5a)**|6.0.0|ISC +**[lz-string](#a04d0916e49897705fe7a9d865134920984a19a03f8de501d4e46c6698a6b421)**|1.5.0|MIT +**[marky](#c5789082b93eeeb451a00e87792a533dd2589421119d3560a06c5f96b39414ea)**|1.2.2|Apache-2.0 +**[matches-selector](#ed68b9f3ecca4297cbb806474484688a85517361d99a33773e3152603a6771e6)**|0.0.1|MIT +**[matches-selector](#cec79a3cd38ecccf3066baf0e39cf87735fffea201040dd2799e4c6b5221d981)**|1.2.0|MIT +**[media-typer](#fa74be298a38f8f9351484e9124aba4a4086182a4cba24449f195219a2843784)**|0.3.0|MIT +**[memoize-one](#4d802a078eb32373fe5d8119384598a703537750aeeb5990aa28659939260789)**|5.2.1|MIT +**[memory-pager](#7fbdeab18f48c3527cae276a51cd879e42d15337aba1acb44fedcf748137608b)**|1.5.0|MIT +**[merge-descriptors](#0dc27d83f406152460ccee54a872599fa57bf48baa989aaa2165fc98eafd08da)**|1.0.3|MIT +**[merge-stream](#df06bda70cbfe392ea02ab42ab188d21ab5c15e3c1a172e6f2ce4cd9d304c01f)**|2.0.0|MIT +**[methods](#d2f0af2174fefc260353011b7a5dd7845576b8eb5f16c423378467dfd5b10f5f)**|1.1.2|MIT +**[mime-db](#7cfa78c6359b5b06cbb7cde9659b052fb92a58e290411458d496ea39857bc15b)**|1.52.0|MIT +**[mime-types](#a4d3481c7c7fa681b0c2a946f94b390ac9f96f0412b1ec63b79eba32dab82500)**|2.1.35|MIT +**[mime](#9b48af8a381b3c30ce0ed825fdb250ac917cf825ec677471e72657f421bece3a)**|1.6.0|MIT +**[mimic-fn](#5cdd2e226cc15411692ae7c6c44c95adde675477de818b755be01f0e7994f8d9)**|2.1.0|MIT +**[mimic-fn](#40db999726ca69c48458bec0492bb7351025a3719caeceb9ade4a08098817a0c)**|4.0.0|MIT +**[mimic-response](#0c868fd85c36cbce69ede58ff4693b89140b6a529a6794843f4985674d63642e)**|2.1.0|MIT +**[minimist](#837db6b00930af97755b724568aecf8b139361dc2148c7db77673ba6ae44a44d)**|1.2.6|MIT +**[mkdirp-classic](#e79cc875152b50c2eb57a97163d99f0155bf4e4af7ba4a7e01c12a17a4a3305c)**|0.5.3|MIT +**[modify-filename](#7153be07939379ccf0072006c519fba2bdf5ab79ca8bb59bc5273f87a7bacbf6)**|1.1.0|MIT +**[moment](#94975b5423311209f3beed9c2c6bb6157f622312a3f8563d507b52e804bf6285)**|2.29.4|MIT +**[mongodb-build-info](#f0a98c22ae0766702726f79e058ac6dc4e4bead8557b67b816f40bd13fb54170)**|1.7.2|Apache-2.0 +**[mongodb-client-encryption](#01c104ff07b0715f77217b6b7adfc9a0056f35ffd976182ffbf409f69b3a0df3)**|6.1.0|Apache-2.0 +**[mongodb-cloud-info](#a784f3b401cf51746f49964e044db933529b3e3791e557702715730f5a3f1e46)**|2.1.2|Apache-2.0 +**[mongodb-connection-string-url](#2e1146256a89ebd24e3398881e03807fe363d58444e6b7952ea50bd6108707bc)**|3.0.1|Apache-2.0 +**[mongodb-log-writer](#c4945018f8490fc8e56e1414e262fcf1b802800e05cd15f2bd6b7a9d0b94af85)**|1.4.2|Apache-2.0 +**[mongodb-ns](#68260f4d06e4d16a28d4139e391264d220e891ac6f0fb844b925a0cc37792aff)**|2.4.2|MIT +**[mongodb-query-parser](#871cbd55e42c522f9f44ee40a9a19b3edde2f543528582d5ac5f4bc60adeb336)**|4.2.3|Apache-2.0 +**[mongodb-redact](#f0766ec5011e3865ffb152537e7a24c89591d1ea5ee46777ca8f3e857a3e57d6)**|1.1.3|Apache-2.0 +**[mongodb-schema](#652dcef4a8a39849996a5f858fe48048e806fda4ce1aa0f757ada56bef011145)**|12.2.0|Apache-2.0 +**[mongodb](#6fec8e7c940738c785acba4b627a32d91425768e886601b770ad3b664670653e)**|6.8.0|Apache-2.0 +**[ms](#484b814b85d5028e34246147c8fc901d33570202bd7cdc3703c0ed1078eba0aa)**|2.0.0|MIT +**[ms](#0a987b2f79ff37005e452a5afa7dacd3042061a7077054d2ba9cabacd88506d2)**|2.1.2|MIT +**[ms](#2083576c5af8054927640b4788059806d07e250a26066c9ccb2d928394fb9226)**|2.1.3|MIT +**[napi-build-utils](#26912b5ff7632f262d64273f99cd1a869376c5c378960e24501585e35b31054a)**|1.0.2|MIT +**[negotiator](#e3856213d8f0a7d28cd4166e53ec7e2c019cb7becf4a8535097bac28d21e8579)**|0.6.3|MIT +**[netmask](#2bd5b8ff7fab9adace6c38d3fd32e7328484939fdd07836635b0155d0afc35b2)**|2.0.2|MIT +**[node-abi](#e95a83ce4ffe7621819fbbceed23c54f12e0e1066aad9e5b3093bbdc7c958e0b)**|3.68.0|MIT +**[node-addon-api](#af9f7588524ca4e68f4efe7b24aea46d9c8004263b1d7cf3b558f86d87a163e8)**|4.3.0|MIT +**[node-domexception](#3c25065fd2bc1b6b56856e30ac5b8f34ddae33ca87b225854f8d855b0ccabfbe)**|1.0.0|MIT +**[node-fetch](#364527ef1b51cc6ac34872b931049c9e25b5014f9b40e3898c84e1a830e21720)**|2.6.7|MIT +**[node-fetch](#23d7d5a419e9a25e6384dee4aa24f7162544418f0cdc2d92e94e2cf924507b8c)**|2.7.0|MIT +**[node-fetch](#22edb8ba3fe3457e8c1a02e497e6a8cb54e89775224f0c7680ea43772b5c1638)**|3.3.2|MIT +**[npm-run-path](#b21248abecb88119fcf2885e5471cd9235f40d356cba189a348def4b8a6046bd)**|4.0.1|MIT +**[npm-run-path](#17c35569bae8ecfc9314730bb16dde145a190d68c6fe6a29c78873c9c5520ed1)**|5.3.0|MIT +**[numeral](#b3c90be596160f7dccbd1ff771ddbffb9a1b19d0bb9456553d8822903386573e)**|1.5.6|MIT +**[numeral](#d274a180ad09fc1ae9325f01bf5dc1296caf553888d952fab7ebf524dfdc56a1)**|2.0.6|MIT +**[object-assign](#598e372231bb5bef26b7d61105282eb20e14ade430143052d064d2d406769b95)**|4.1.1|MIT +**[object-hash](#848d5d28b20a6a7f2e701e9b2b7e65b5518313269696dacf4ac69fa8bc5b571a)**|2.2.0|MIT +**[object-inspect](#b9d7050d521cb65fdc84f2212e39302b36e9bb0f7191e0be89ac3e4ea488b1fb)**|1.13.1|MIT +**[object-is](#d597163d660664be4b28b1f40171738a17ec18b028d62ee1cf2e264e30924d84)**|1.1.5|MIT +**[object-keys](#e9aac5890f5f1c6f8d56c08ce91012ba530b586511a89d1fa99ae2d7c39d8b2e)**|1.1.1|MIT +**[object.assign](#498d41061b8e766f5d53d287d41307891ca86b3d63eee61a1c4131f5dc5f185c)**|4.1.5|MIT +**[oidc-token-hash](#3beaf628821d1b6d7ec7b67b3c9ceea1d37727ea52253383f31d3e73141cf29f)**|5.0.3|MIT +**[on-finished](#d3c391e10faad1d82190a06f5be315d94a9194cff75aa389940432ef15cf45de)**|2.4.1|MIT +**[once](#d0d1303998dfae04e4f898f477380aac35568f4d6679f4ea913c2441cf9ebb0b)**|1.4.0|ISC +**[onetime](#5a35b0b7c7570756939e95a639f311d4676b87c61cd74cd94d6609334c2ee1a2)**|5.1.2|MIT +**[onetime](#8d8b66854ab397ef1815b6af9e17698a8e5f83b256a1202b74104ee5609c5d99)**|6.0.0|MIT +**[open](#6c66626cf6e18f59c76bef1f4ed0c2b541e68592d65325d4fb83a659e3078981)**|9.1.0|MIT +**[openid-client](#03ada662ee390db4436dc7bd38857b43e2a0407275d27e422ff915ec7738b035)**|5.6.5|MIT +**[os-dns-native](#ed8fb030877b8f0494551fd7f55288d885b2ddcece35dd7134434ad5c4c704de)**|1.2.1|MIT +**[pac-proxy-agent](#0c860d23706396c87370b49399bd004f0a3552427d65a829b16274a966c51304)**|7.0.2|MIT +**[pac-resolver](#7935fe0839f6e2b7c51abcc08705a6096eff5670dc2bdc3819fd096b8d114d8b)**|7.0.1|MIT +**[papaparse](#a94a34c1e6cf2f678ffd64381c6d54f9ad5f6b3c65281a0b077dd5b92f028684)**|5.3.2|MIT +**[parseurl](#c3fdd1b6fb725cb30e8fed82cf929953b46129d347d8404a4a51b633389fbae8)**|1.3.3|MIT +**[path-exists](#3ae48f237e1a4424a3b1b60cfc95f35ca29141cd956f8bda85e763d7969e12c7)**|4.0.0|MIT +**[path-key](#e1a2a032096ace66b422351e00b11b0229e42e4b49c2146f439f8fe442218451)**|3.1.1|MIT +**[path-key](#8e0734b8abb76579df2174822606e692914e985fc58363a78e6ad4b2a4a5831f)**|4.0.0|MIT +**[path-to-regexp](#96d230365f414cce8d80ceb9d99d855685dfa922f931b49ea01952a1efe64266)**|0.1.10|MIT +**[picocolors](#f964752f1f8cfd947506fd51ce1c148469ecf3b6f531d826511b720670e556f1)**|1.1.0|ISC +**[polished](#a7a5d1244e48a082dbc54de31b5309caf950b12aa6bd9fefbba39e362e705f06)**|4.2.2|MIT +**[possible-typed-array-names](#5ba4283f5512abd5d57e79c0a75acb3818d98d169df979afb01ad6867cefd312)**|1.0.0|MIT +**[prebuild-install](#93d13a9b3a51a6a802fcd35aa031d3ae7369aa6fd47d3a89f28a6d31ea3c9dc5)**|7.1.2|MIT +**[prettier](#2e1e2077936be4bb5f075fd4d279f9ece641322ccd12a8116edb3f99f08f7411)**|2.7.1|MIT +**[pretty-format](#0c53580441217a6c2b9c885eb1ec35adde420c312ccf9f408c856dc3845cce8b)**|27.5.1|MIT +**[prop-types](#e4dd0bb5b6f98fbf52f0ad7062b8514aadc56a47a692bf6d8aab369786b6039f)**|15.8.1|MIT +**[proxy-addr](#7b128e3d41d39ecb1a405a490a53ae86f70ef45f01079333ed3ca49939f5fba8)**|2.0.7|MIT +**[pump](#147f1bd3a6380306e696f0574feda0b1490121a1d12e4500e91ffb6e888ffa3a)**|3.0.0|MIT +**[punycode](#3fe331f5536b72438f24d644ea9804b5e462f791a4c72a6d94f37193af1086aa)**|2.3.1|MIT +**[pupa](#b05b7cc4c1bc01acd063dc811b9b1b0a1a4b3e0f17be77deaeaabade7dfeb095)**|2.1.1|MIT +**[qs](#2240c454f0418501921d6b094c1f6477603b0c893c4d7a8ed2bdfcab9e75c069)**|6.13.0|BSD-3-Clause +**[range-parser](#e973789240fef3c00f359e6acc8570dd769b70ee8b29fdcb679897fa2d696bff)**|1.2.1|MIT +**[raw-body](#fc0f8cf1771db07ef15ce7dafcac6db8e351607bb82caf0e5838f1769a796266)**|2.5.2|MIT +**[rc](#0dd705bd5862b4c60ed88e6b4a6f5ece23c627c97f6928233d32aefdd463c3f7)**|1.2.8|(BSD-2-Clause OR MIT OR Apache-2.0) +**[re-resizable](#ba463da4fb82093fffa407b9083835a23c9d44c84cd988f2536312f7e78f863d)**|6.9.0|MIT +**[react-dom](#6f313dd207f71f3d56121132c87ef27cba1beab9e5e349ac81c740cee6fd0774)**|17.0.2|MIT +**[react-hotkeys-hook](#6ce07fe9653ad69a76354e2d71137c70ab9a838377fe5a8f8e45c559cfbf41cc)**|4.3.7|MIT +**[react-intersection-observer](#84f998bdb33a5f9330d81ef063f7ad0897f1b004661fbf131725697b847a5b6a)**|8.34.0|MIT +**[react-is](#7183835e2bcaca6754fe10854fc3b65407d2cb9aa3b68b1c06ccaafb7b9be28a)**|16.13.1|MIT +**[react-is](#5ec174b50bba38f48ee8da3d8a5b9463a9e77c3f01d74a132ecc30a2be099c4b)**|17.0.2|MIT +**[react-is](#5746232ad830b635a6581ee7d3b826ee932c6877087c98cb46b94101eb5ce40b)**|18.2.0|MIT +**[react-keyed-flatten-children](#9c7ffa4be6351eaf0a19b808fc4048eb28455824378f089da7a566cdeb0bdd84)**|1.3.0|MIT +**[react-leaflet-draw](#d80b4b765d856cdefe411a073d3b3dde06100128005f1381b4d26d6cf53134c7)**|0.19.0|ISC +**[react-leaflet](#a5fc1f0504a89a932a12c5a183b75a748207329f20af6078f926e182d55aee8d)**|2.4.0|MIT +**[react-redux](#156f5c2e2cbbda376faae24e78cc75de697170101ff7e9d2955c0f891cffd6a8)**|8.1.3|MIT +**[react-transition-group](#f8a526737bf3e6cc7928ce77b3fa8e6a880da418fd9363a0dae1122922f92b72)**|4.4.5|BSD-3-Clause +**[react-virtual](#b9245d8b8a0d57eba1876cc38950eccd82b4db023c50026f4a70a6c66e16cb5c)**|2.10.4|MIT +**[react-virtualized-auto-sizer](#6c2551e5d023f4aa01efbb54d394f7cebd0627e78ca3b24a00a4364e3e7a3129)**|1.0.24|MIT +**[react-window](#1241166cdcf24220683cbe7d1460897436f3982e7795fc504323ba66f06e53f9)**|1.8.10|MIT +**[react](#2f31f78715f56093f4bb569e2e2ea931c518db6f4ee690482a0a2a1cd4d18b4c)**|17.0.2|MIT +**[readable-stream](#75bd2243ec5ecc92b8d7e9a2e9a1aa142f20f6a5aad6dc0d923cdab997766174)**|3.6.0|MIT +**[redux-thunk](#7eabcce4f7274e0c876829cb939804a9704770a9a60419d514c11e3e97c01623)**|2.4.2|MIT +**[redux](#98b5d53f97fab4eea98fb5f423cad33400855b69ac662f1fdf55f0fb9e33f2ab)**|4.2.1|MIT +**[reflux-core](#7af6ea33b0ed18717d672b44743ae53dcef843ae464690bb9e10eb1df048e9ea)**|0.3.0|BSD-3-Clause +**[reflux](#f892193924d403a4dd1a73a5861913838f1a9d704055d9d098eb0d40f752e053)**|0.4.1|BSD-3-Clause +**[regexp.prototype.flags](#51cb6c20041a1fef833bb3f46483fcbd99a186e3767ec2ad32f7b3db74d296f2)**|1.5.2|MIT +**[reservoir](#84f8998f94ad5bd85b50458378edf3815fff553cdcabf8ced3db418f05e85ff6)**|0.1.2|MIT +**[resolve-mongodb-srv](#2ae8b0c9dbe8e8c900bfaf5567bcf2af917e62fb0a24121b4d667dffbeaffa99)**|1.1.5|Apache-2.0 +**[run-applescript](#f4d3cc18b69c2dec9e4f1d19a1cb794c8fa2e548e530f4033dc6b0caf803bebc)**|5.0.0|MIT +**[safe-buffer](#952cf236ee56e7de5ea7e772caf3e256866f9dbdffc492539c48cd8c15ac9674)**|5.2.1|MIT +**[safer-buffer](#2fb14d3728e4ebf313be4634b146bd90cd3ad3559157baec03b64eec0878a0ba)**|2.1.2|MIT +**[scheduler](#950b09ca6f4766ded0bdde81e2697b5e184ed63925d74a8f512c978cab5bda6f)**|0.20.2|MIT +**[select](#12d30053a00882385c42a50004536696d477e8e694b047d6d39513947e5a39e9)**|1.1.2|MIT +**[semver](#8b8f657069cf84b7ca932ab17eb24a0a55a8053ccd2a36c03185dadab64db3f8)**|6.3.1|ISC +**[semver](#2c8b8c47dd7d24873eda4559b25851062c21d7584a396735b363f9bab626dd7b)**|7.6.3|ISC +**[send](#412cd4c4a8e6aaa433d5e67852c05a1e307fd4eb9dc362bdc30fa099313c24cb)**|0.19.0|MIT +**[serve-static](#9a2d04a479ef9c6e990f1fb614478dea4368c040af707296400ff7f9bb68d30b)**|1.16.2|MIT +**[set-function-length](#88ee3e1c8e8c22ac3653a290c1cdc68787d064f17a743020a070b31290bb4eb9)**|1.2.2|MIT +**[set-function-name](#f9d4c9272c71403774a64f46fc69cefd1039845f2ee1d252fb62cbd97f9e7fb4)**|2.0.2|MIT +**[setprototypeof](#7787a1d3bc2f39b65d75407d5d8d02d8ddb70f1cdb74897f15115e995fb64a56)**|1.2.0|ISC +**[shebang-command](#a9cba97b71b818fb0a4978f8b14875ae118f292a19ffa97c8b2d848f9a897d89)**|2.0.0|MIT +**[shebang-regex](#849fb37298f1c4dcdeb6065edc4242918c7533bcfda5c67747e6ce4620c587bb)**|3.0.0|MIT +**[side-channel](#b87368b55d9ba1ff553ed48946c9eb64686bc10b48bc0f5859c669427508a6b5)**|1.0.6|MIT +**[signal-exit](#5ad551060d44370794e770309e198719e94f939e46a3ea537b776c9c4fdad9e4)**|3.0.7|ISC +**[signal-exit](#09ce5ebc7ff1552bf0ed979e2479321c6a9a4b7a06d90ece7a70fa360007eff4)**|4.1.0|ISC +**[simple-concat](#7e08f893385d0a6d7059029da3885e8346ad01eb58d6e4561612d2fb653c15ec)**|1.0.1|MIT +**[simple-get](#c2c12990b6319daff653bdf953cadfa368185f0edc671124fb1028f6979df829)**|4.0.1|MIT +**[smart-buffer](#bc8fbee089eb9cddf673c4c9dbc15edd13839063c27e2814009b6a0448065875)**|4.2.0|MIT +**[socks-proxy-agent](#e192db394689e9e76e333aebe6a6958554ba85f63c4b2959bd6732f76ce1ed0d)**|8.0.4|MIT +**[socks](#0248dada9537f6f43ee753036902a8c3d06323744469309fdc207cd0b14f70e9)**|2.8.3|MIT +**[sort-keys-length](#af13db706339ff49fba434ce0fbda036b99f3dc30e66a530b64374afd5a1eec1)**|1.0.1|MIT +**[sort-keys](#714faeb378f5373d2aa5f80825d02c9f7ab2cacb699db02c84e675d193a6bfa8)**|1.1.2|MIT +**[source-code-pro](#0496fbae8c99eac4b7354b7eb0a394806e547de30fd2acbdf14f2ac77079e643)**|2.38.0|OFL-1.1 +**[source-map](#55fb2b4a8e114a26cce0c971365f26175ae0d834849c5edebbdb5adafaa08787)**|0.6.1|BSD-3-Clause +**[sparse-bitfield](#0cbcf2cac3ff859d288ae5ffc2c793bbd2430b120f5930bd09b6dba7259086d7)**|3.0.3|MIT +**[sprintf-js](#d8b6ff1ba6436283de681a756ad453428005e61986c5113a3a8088ced2b36eb7)**|1.1.3|BSD-3-Clause +**[ssh2](#caa88a7f6fedc946b33fe4cdcd84104598cca8b841b593d1ffb031578cd3d8c9)**|1.15.0|MIT +**[statuses](#a347e5a1994ef74647a2af80f58030a572f71173d5c1dfc0ce6eb55f4005b17d)**|2.0.1|MIT +**[stop-iteration-iterator](#b4a114e720966d8d69055a584424fa2465b603774072e8b7e35619282ff67afb)**|1.0.0|MIT +**[stream-chain](#dbe4594ad347bd2850f84bc41ea7ed1f0bebb82c38b9e7e0f6820d1c071e534c)**|2.2.5|BSD-3-Clause +**[stream-json](#ff32de703b38cb80287bf73b31ddc47fb97277eadcfb231017f31a06824e41e0)**|1.7.5|BSD-3-Clause +**[string_decoder](#b7999058a36380603fb66d82d8b9e36ddb8f0e5b81cd3f3233f31eac12b793fe)**|1.3.0|MIT +**[strip-bom-buf](#4f426c3eaeb7d288c70eb64ad2e2617952c0d8da8cdedf4f8cb29ba65bb3b65e)**|2.0.0|MIT +**[strip-bom-stream](#f7e90a4335dbb561f2b002d1b73cdb9d891c023959465fee58c1636e0216af2e)**|4.0.0|MIT +**[strip-final-newline](#a6dd80beeaaa538a553eca27a2bc8f9b22f02a61191d2f6981b02a2c1c12bf19)**|2.0.0|MIT +**[strip-final-newline](#0e84cc036056cb7e0b11c5f70c4d239d4adf3ca9253b0e215abd7e78639b1c61)**|3.0.0|MIT +**[strip-json-comments](#7e22a64e44ef0efd054f76d551df5305ac48eb5807079c025c8bf63c0a728c33)**|3.1.1|MIT +**[strnum](#84f6b71bdd647bcb9588183f13dc0b7a0c5b0a3103b2fc7e8e95012c0d6c631d)**|1.0.5|MIT +**[style-mod](#65cbf3eb373755d5dd9f5c58cf62d48dd4a33349e67d644af61d8d5438dbc1b5)**|4.1.2|MIT +**[stylis](#131ca0470639719771dc1f233c9962655afffb6d27143e894c43e967517107cf)**|4.2.0|MIT +**[supports-color](#113926f6cb42a3d41d1c11fb1209faf789d78f51fb458da90c61e5c1a2307a8e)**|5.5.0|MIT +**[supports-color](#b97a30572cac0a03b8cf442bc01621a041d5714550984f25cb71fac2587edbd6)**|7.2.0|MIT +**[system-ca](#f7020e15c3acda122c176b63132660540ac26981c7037d110fc2896e3551ab19)**|2.0.1|Apache-2.0 +**[tabbable](#0ebe87140b76c7f2135bbd5099e7973a5ec2b5d8fe2bec8e272608cf0b3f396a)**|5.3.3|MIT +**[tar-fs](#8e5bae5073977abd61cb5549abc7581354454558aedf4a4002b91e6fd7b9830d)**|2.1.1|MIT +**[tar-stream](#5605712784129d10d2559e12f8031603f0cf4e5ff206f09356e4bf1dc5ab1168)**|1.6.2|MIT +**[text-table](#408475075eb207dd5ae8858365d5b39a25bebe2b757601c43164cec36f315b23)**|0.2.0|MIT +**[tiny-emitter](#43eb8db7345f328bbd03f484accbed64a06fa649df3ab59db7492e65d9361def)**|2.1.0|MIT +**[titleize](#36b49586e2b5f60bee2c757b90d19871a99822f92e2b2e19202ef9efb9595766)**|3.0.0|MIT +**[to-buffer](#5934a0e0ea92470fb3bbe2a1d6869494c53208b1b06aaee8ffd31e4e040e4e85)**|1.1.1|MIT +**[to-fast-properties](#79afe8c8f3cc0bb1187c6ffaf6105b49888137e917978e870d67727353aba954)**|2.0.0|MIT +**[toidentifier](#2067d1f99d35f28c8384d3e9762282f3c2ded0041392af855caf28ba2209bd2a)**|1.0.1|MIT +**[tr46](#a94418e116fb43931c49abb9cd596d6814a55956c3d0d11b7e225592b9977197)**|0.0.3|MIT +**[tr46](#73a239b431778fd3a06957f11cd6de530a4ba35ca946f8656f46e02228113c2b)**|4.1.1|MIT +**[tslib](#c5fc5d0adaeec50d156fc1f9a16cbca801bfb431eb78f3647a1237a0e239ae35)**|2.6.2|0BSD +**[tslib](#bd15b467ea785206b74637cc23d2b9088ba8fa47aa3034d1217f3dea848c1d1e)**|2.6.3|0BSD +**[tunnel-agent](#09f746d17a1777efda5a12a6072da10c6820d7f56ea8aa0af202a2c83d6ccb67)**|0.6.0|Apache-2.0 +**[tweetnacl](#496caef692284d7a5d6acd31283b785ebca47d82b2d85c9af7ea1913bb4b49a8)**|0.14.5|Unlicense +**[type-is](#12dbb9fcc3a6de5bbd595659bff8b688d45fff57a2014441e4fe6779f5eeb7e2)**|1.6.18|MIT +**[universalify](#c381098afc5e144dfbd23d044afa2bf9bcf3dcadb7eb397d379f6cfd0ed47001)**|2.0.0|MIT +**[unpipe](#3a555405bd00c7e7e52b07a5600248bdaa683db613d7c286e425511cee8ed14a)**|1.0.0|MIT +**[untildify](#511cd56aa5943fd465da93776449b0a7249438206b5c5bfc22cc6d7e55ab0029)**|4.0.0|MIT +**[unused-filename](#5c8d4d94e0c17084eac0ca8c2eefa1fdb285e6a3dc47477e54d9acf7bf08eb2a)**|2.1.0|MIT +**[use-sync-external-store](#f7d4a0ea4ee9d814fb264db8103d6ad3a831aa79bf7f3ea70bfa182f8a930f0a)**|1.2.0|MIT +**[util-deprecate](#a1bd80d6a50b36e34032c402c5204d6276747d8212b68b164a9e3f895b90c2d6)**|1.0.2|MIT +**[utils-merge](#daf17cb7acc6dd4694e84d0920d7b32dba2be0fcf114309bfce8538812e7c458)**|1.0.1|MIT +**[uuid](#8e5d6b0bb24ea0188cd3a88b1f790f104e774bb8ed04c0dac0db7cfe2911227e)**|9.0.1|MIT +**[vary](#d308bd3935a6f29310b20de016cdb7b3de3aa40a7d4c3365b96e35d2c248d74a)**|1.1.2|MIT +**[w3c-keyname](#160316b2bf7a19e2cc0418d5ef94b5a999f9092fee3023ac9b2c7d76d2934f5b)**|2.2.6|MIT +**[warning](#02c159f6bf591ba6e8523609cb610cbd897ea68c214f64dac6f21d7b4e4d3a2d)**|4.0.3|MIT +**[web-streams-polyfill](#2349028b62115a87d9af122218c79a38cd90411e2b53a91c1cff7249e16f45f0)**|3.3.3|MIT +**[web-vitals](#66d3585417e14f352ce331e44fe42a97c4d03073d014efd601538735085f84fe)**|2.1.2|Apache-2.0 +**[web-worker](#8aa3d357e4e58928a87a1cfde9f21452b05f10e194f93e5d5908bdff9b94e20a)**|1.3.0|Apache-2.0 +**[webidl-conversions](#3604b2bfa479706fe7bd8068257240d32158704a3bffae30b414963343027aa1)**|3.0.1|BSD-2-Clause +**[webidl-conversions](#cb7c681998e7ee3c598e6e37432bcf448946924eefe816636c3cb122bae46e1c)**|7.0.0|BSD-2-Clause +**[webpack](#bd55cdb69f5b1b336d12c3f00d849ccb1f2c39987c257c89027d6a790f947496)**|5.94.0|MIT +**[whatwg-url](#3a968d9d3fed498fc1edf2f65459cc89b6a2fea277b5c9b5c3f3a0b41390835a)**|13.0.0|MIT +**[whatwg-url](#cd3f81c4a0fd856ab1d9c9fc99c1d7eaf2c12c4867b218e9901e5020a1ffcd85)**|5.0.0|MIT +**[which-boxed-primitive](#b3f94b6da310368951f52909c400e19c4c2c7a282ba67374f41ab2d070bf83f2)**|1.0.2|MIT +**[which-collection](#8d30c0dc07cdaccc2163cb70ff87fa91c48abdf4963bf5603218d66dbd6ae538)**|1.0.2|MIT +**[which-typed-array](#949a7e27fa7c5423fa71694a92b2c5e0d1b7f9e43ba00aab74414d4311e82530)**|1.1.15|MIT +**[which](#5a71f2b741944bf107d6e7f067241798a6e277e42e8ca1e28c4608ccc233f8ec)**|2.0.2|ISC +**[winreg-ts](#b1df7eee15fa28ae85b9086513c8316c08a21c254e8eda11e63c6321a03ac4a7)**|1.0.4|BSD-2-Clause +**[wrappy](#13cebf193d7ada5ee347b9ae819b96f5e6da21f9b53e7f268c7703b686158595)**|1.0.2|ISC +**[write-file-atomic](#f2c3af5826c073336660baeb567e1bb4453d5b6fadafaa880c59787bfdc4408f)**|5.0.1|ISC +**[xtend](#ef439651e21b69e8811099e984a3a42de35b6d0fc30a5c230715bea4c96e4940)**|4.0.2|MIT +**[yallist](#63b110ffd18712146937e9f182800c6f2b5783e76d1659a0bd4b457789b0df07)**|3.1.1|ISC +**[yallist](#d400799c4e1f58dbbbe68b4d9c1b6e80e023f744bd7d16da491005fd8439200f)**|4.0.0|ISC +**[yargs-parser](#617a7401008b7639df8cebae61c9c009bf04ca762c652da0975da4533bf33690)**|21.1.1|ISC +**[zod](#7e37bb8a0a232b053778166963faee52e7d1a9cfca82f4501d65e94f11d1c566)**|3.22.3|MIT ## Package details - ### [@ampproject/remapping](https://www.npmjs.com/package/@ampproject/remapping) (version 2.2.0) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -673,24 +671,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -698,7 +696,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -712,18 +710,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -739,24 +737,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -773,14 +771,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -788,12 +786,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -803,7 +801,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -815,7 +813,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -826,11 +824,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -839,45 +837,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Google LLC - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/client-cognito-identity](https://www.npmjs.com/package/@aws-sdk/client-cognito-identity) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -885,24 +882,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -910,7 +907,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -924,18 +921,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -951,24 +948,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -985,14 +982,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1000,12 +997,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1015,7 +1012,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1027,7 +1024,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1038,11 +1035,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -1051,45 +1048,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/client-sso](https://www.npmjs.com/package/@aws-sdk/client-sso) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1097,24 +1093,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1122,7 +1118,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1136,18 +1132,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -1163,24 +1159,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -1197,14 +1193,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1212,12 +1208,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1227,7 +1223,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1239,7 +1235,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1250,11 +1246,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -1263,45 +1259,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/client-sts](https://www.npmjs.com/package/@aws-sdk/client-sts) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1309,24 +1304,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1334,7 +1329,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1348,18 +1343,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -1375,24 +1370,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -1409,14 +1404,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1424,12 +1419,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1439,7 +1434,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1451,7 +1446,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1462,11 +1457,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -1475,51 +1470,49 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/core](https://www.npmjs.com/package/@aws-sdk/core) (version 3.629.0) - License tags: Apache-2.0 - + ### [@aws-sdk/credential-provider-cognito-identity](https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1527,24 +1520,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1552,7 +1545,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1566,18 +1559,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -1593,24 +1586,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -1627,14 +1620,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1642,12 +1635,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1657,7 +1650,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1669,7 +1662,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1680,11 +1673,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -1693,45 +1686,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/credential-provider-env](https://www.npmjs.com/package/@aws-sdk/credential-provider-env) (version 3.620.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1739,24 +1731,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1764,7 +1756,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1778,18 +1770,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -1805,24 +1797,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -1839,14 +1831,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1854,12 +1846,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1869,7 +1861,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1881,7 +1873,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1892,11 +1884,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -1905,51 +1897,48 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-provider-http](https://www.npmjs.com/package/@aws-sdk/credential-provider-http) (version 3.622.0) - License tags: Apache-2.0 - + ### [@aws-sdk/credential-provider-ini](https://www.npmjs.com/package/@aws-sdk/credential-provider-ini) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1957,24 +1946,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1982,7 +1971,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1996,18 +1985,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -2023,24 +2012,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -2057,14 +2046,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -2072,12 +2061,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -2087,7 +2076,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -2099,7 +2088,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -2110,11 +2099,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -2123,45 +2112,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-provider-node](https://www.npmjs.com/package/@aws-sdk/credential-provider-node) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -2169,24 +2156,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -2194,7 +2181,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -2208,18 +2195,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -2235,24 +2222,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -2269,14 +2256,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -2284,12 +2271,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -2299,7 +2286,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -2311,7 +2298,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -2322,11 +2309,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -2335,45 +2322,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-provider-process](https://www.npmjs.com/package/@aws-sdk/credential-provider-process) (version 3.620.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -2381,24 +2366,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -2406,7 +2391,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -2420,18 +2405,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -2447,24 +2432,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -2481,14 +2466,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -2496,12 +2481,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -2511,7 +2496,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -2523,7 +2508,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -2534,11 +2519,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -2547,45 +2532,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-provider-sso](https://www.npmjs.com/package/@aws-sdk/credential-provider-sso) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -2593,24 +2576,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -2618,7 +2601,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -2632,18 +2615,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -2659,24 +2642,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -2693,14 +2676,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -2708,12 +2691,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -2723,7 +2706,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -2735,7 +2718,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -2746,11 +2729,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -2759,45 +2742,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-provider-web-identity](https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity) (version 3.621.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -2805,24 +2786,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -2830,7 +2811,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -2844,18 +2825,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -2871,24 +2852,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -2905,14 +2886,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -2920,12 +2901,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -2935,7 +2916,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -2947,7 +2928,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -2958,11 +2939,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -2971,45 +2952,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/credential-providers](https://www.npmjs.com/package/@aws-sdk/credential-providers) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -3017,24 +2996,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -3042,7 +3021,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -3056,18 +3035,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -3083,24 +3062,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -3117,14 +3096,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -3132,12 +3111,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -3147,7 +3126,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -3159,7 +3138,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -3170,11 +3149,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -3183,45 +3162,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/middleware-host-header](https://www.npmjs.com/package/@aws-sdk/middleware-host-header) (version 3.620.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -3229,24 +3206,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -3254,7 +3231,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -3268,18 +3245,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -3295,24 +3272,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -3329,14 +3306,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -3344,12 +3321,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -3359,7 +3336,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -3371,7 +3348,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -3382,11 +3359,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -3395,45 +3372,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/middleware-logger](https://www.npmjs.com/package/@aws-sdk/middleware-logger) (version 3.609.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -3441,24 +3417,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -3466,7 +3442,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -3480,18 +3456,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -3507,24 +3483,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -3541,14 +3517,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -3556,12 +3532,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -3571,7 +3547,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -3583,7 +3559,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -3594,11 +3570,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -3607,45 +3583,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/middleware-recursion-detection](https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection) (version 3.620.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -3653,24 +3627,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -3678,7 +3652,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -3692,18 +3666,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -3719,24 +3693,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -3753,14 +3727,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -3768,12 +3742,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -3783,7 +3757,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -3795,7 +3769,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -3806,11 +3780,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -3819,45 +3793,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/middleware-user-agent](https://www.npmjs.com/package/@aws-sdk/middleware-user-agent) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -3865,24 +3838,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -3890,7 +3863,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -3904,18 +3877,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -3931,24 +3904,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -3965,14 +3938,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -3980,12 +3953,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -3995,7 +3968,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -4007,7 +3980,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -4018,11 +3991,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -4031,45 +4004,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@aws-sdk/region-config-resolver](https://www.npmjs.com/package/@aws-sdk/region-config-resolver) (version 3.614.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -4077,24 +4049,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -4102,7 +4074,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -4116,18 +4088,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -4143,24 +4115,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -4177,14 +4149,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -4192,12 +4164,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -4207,7 +4179,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -4219,7 +4191,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -4230,11 +4202,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -4243,45 +4215,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/token-providers](https://www.npmjs.com/package/@aws-sdk/token-providers) (version 3.614.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -4289,24 +4259,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -4314,7 +4284,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -4328,18 +4298,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -4355,24 +4325,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -4389,14 +4359,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -4404,12 +4374,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -4419,7 +4389,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -4431,7 +4401,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -4442,11 +4412,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -4455,45 +4425,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/util-endpoints](https://www.npmjs.com/package/@aws-sdk/util-endpoints) (version 3.632.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -4501,24 +4469,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -4526,7 +4494,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -4540,18 +4508,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -4567,24 +4535,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -4601,14 +4569,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -4616,12 +4584,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -4631,7 +4599,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -4643,7 +4611,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -4654,11 +4622,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -4667,45 +4635,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@aws-sdk/util-user-agent-node](https://www.npmjs.com/package/@aws-sdk/util-user-agent-node) (version 3.614.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -4713,24 +4679,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -4738,7 +4704,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -4752,18 +4718,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -4779,24 +4745,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -4813,14 +4779,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -4828,12 +4794,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -4843,7 +4809,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -4855,7 +4821,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -4866,11 +4832,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -4879,35 +4845,34 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@babel/code-frame](https://www.npmjs.com/package/@babel/code-frame) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -4915,10 +4880,10 @@ License files: 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 @@ -4926,21 +4891,20 @@ License files: 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. + - + ### [@babel/compat-data](https://www.npmjs.com/package/@babel/compat-data) (version 7.25.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -4948,10 +4912,10 @@ License files: 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 @@ -4959,21 +4923,20 @@ License files: 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. + - + ### [@babel/core](https://www.npmjs.com/package/@babel/core) (version 7.25.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -4981,10 +4944,10 @@ License files: 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 @@ -4992,21 +4955,20 @@ License files: 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. + - + ### [@babel/generator](https://www.npmjs.com/package/@babel/generator) (version 7.25.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5014,10 +4976,10 @@ License files: 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 @@ -5025,21 +4987,20 @@ License files: 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. + - + ### [@babel/helper-annotate-as-pure](https://www.npmjs.com/package/@babel/helper-annotate-as-pure) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5047,10 +5008,10 @@ License files: 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 @@ -5058,21 +5019,20 @@ License files: 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. + - + ### [@babel/helper-compilation-targets](https://www.npmjs.com/package/@babel/helper-compilation-targets) (version 7.25.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5080,10 +5040,10 @@ License files: 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 @@ -5091,21 +5051,20 @@ License files: 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. + - + ### [@babel/helper-create-class-features-plugin](https://www.npmjs.com/package/@babel/helper-create-class-features-plugin) (version 7.22.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5113,10 +5072,10 @@ License files: 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 @@ -5124,21 +5083,20 @@ License files: 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. + - + ### [@babel/helper-environment-visitor](https://www.npmjs.com/package/@babel/helper-environment-visitor) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5146,10 +5104,10 @@ License files: 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 @@ -5157,21 +5115,20 @@ License files: 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. + - + ### [@babel/helper-function-name](https://www.npmjs.com/package/@babel/helper-function-name) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5179,10 +5136,10 @@ License files: 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 @@ -5190,21 +5147,20 @@ License files: 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. + - + ### [@babel/helper-member-expression-to-functions](https://www.npmjs.com/package/@babel/helper-member-expression-to-functions) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5212,10 +5168,10 @@ License files: 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 @@ -5223,21 +5179,20 @@ License files: 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. + - + ### [@babel/helper-module-imports](https://www.npmjs.com/package/@babel/helper-module-imports) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5245,10 +5200,10 @@ License files: 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 @@ -5256,21 +5211,20 @@ License files: 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. + - + ### [@babel/helper-module-transforms](https://www.npmjs.com/package/@babel/helper-module-transforms) (version 7.25.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5278,10 +5232,10 @@ License files: 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 @@ -5289,21 +5243,20 @@ License files: 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. + - + ### [@babel/helper-optimise-call-expression](https://www.npmjs.com/package/@babel/helper-optimise-call-expression) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5311,10 +5264,10 @@ License files: 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 @@ -5322,21 +5275,20 @@ License files: 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. + - + ### [@babel/helper-plugin-utils](https://www.npmjs.com/package/@babel/helper-plugin-utils) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5344,10 +5296,10 @@ License files: 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 @@ -5355,21 +5307,20 @@ License files: 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. + - + ### [@babel/helper-replace-supers](https://www.npmjs.com/package/@babel/helper-replace-supers) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5377,10 +5328,10 @@ License files: 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 @@ -5388,21 +5339,20 @@ License files: 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. + - + ### [@babel/helper-simple-access](https://www.npmjs.com/package/@babel/helper-simple-access) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5410,10 +5360,10 @@ License files: 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 @@ -5421,21 +5371,20 @@ License files: 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. + - + ### [@babel/helper-skip-transparent-expression-wrappers](https://www.npmjs.com/package/@babel/helper-skip-transparent-expression-wrappers) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5443,10 +5392,10 @@ License files: 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 @@ -5454,21 +5403,20 @@ License files: 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. + - + ### [@babel/helper-split-export-declaration](https://www.npmjs.com/package/@babel/helper-split-export-declaration) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5476,10 +5424,10 @@ License files: 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 @@ -5487,21 +5435,20 @@ License files: 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. + - + ### [@babel/helper-string-parser](https://www.npmjs.com/package/@babel/helper-string-parser) (version 7.24.8) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5509,10 +5456,10 @@ License files: 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 @@ -5520,21 +5467,20 @@ License files: 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. + - + ### [@babel/helper-validator-identifier](https://www.npmjs.com/package/@babel/helper-validator-identifier) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5542,10 +5488,10 @@ License files: 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 @@ -5553,21 +5499,20 @@ License files: 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. + - + ### [@babel/helper-validator-option](https://www.npmjs.com/package/@babel/helper-validator-option) (version 7.24.8) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5575,10 +5520,10 @@ License files: 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 @@ -5586,21 +5531,20 @@ License files: 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. + - + ### [@babel/helpers](https://www.npmjs.com/package/@babel/helpers) (version 7.25.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5608,10 +5552,10 @@ License files: 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 @@ -5619,21 +5563,20 @@ License files: 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. + - + ### [@babel/highlight](https://www.npmjs.com/package/@babel/highlight) (version 7.24.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5641,10 +5584,10 @@ License files: 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 @@ -5652,29 +5595,28 @@ License files: 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. + - + ### [@babel/parser](https://www.npmjs.com/package/@babel/parser) (version 7.25.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2012-2014 by various contributors (see AUTHORS) - + 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 @@ -5682,21 +5624,20 @@ License files: 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. + - + ### [@babel/plugin-syntax-jsx](https://www.npmjs.com/package/@babel/plugin-syntax-jsx) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5704,10 +5645,10 @@ License files: 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 @@ -5715,21 +5656,20 @@ License files: 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. + - + ### [@babel/plugin-syntax-typescript](https://www.npmjs.com/package/@babel/plugin-syntax-typescript) (version 7.21.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5737,10 +5677,10 @@ License files: 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 @@ -5748,21 +5688,20 @@ License files: 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. + - + ### [@babel/plugin-transform-destructuring](https://www.npmjs.com/package/@babel/plugin-transform-destructuring) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5770,10 +5709,10 @@ License files: 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 @@ -5781,21 +5720,20 @@ License files: 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. + - + ### [@babel/plugin-transform-modules-commonjs](https://www.npmjs.com/package/@babel/plugin-transform-modules-commonjs) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5803,10 +5741,10 @@ License files: 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 @@ -5814,21 +5752,20 @@ License files: 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. + - + ### [@babel/plugin-transform-parameters](https://www.npmjs.com/package/@babel/plugin-transform-parameters) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5836,10 +5773,10 @@ License files: 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 @@ -5847,21 +5784,20 @@ License files: 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. + - + ### [@babel/plugin-transform-shorthand-properties](https://www.npmjs.com/package/@babel/plugin-transform-shorthand-properties) (version 7.22.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5869,10 +5805,10 @@ License files: 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 @@ -5880,21 +5816,20 @@ License files: 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. + - + ### [@babel/plugin-transform-typescript](https://www.npmjs.com/package/@babel/plugin-transform-typescript) (version 7.21.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5902,10 +5837,10 @@ License files: 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 @@ -5913,21 +5848,20 @@ License files: 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. + - + ### [@babel/preset-typescript](https://www.npmjs.com/package/@babel/preset-typescript) (version 7.21.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5935,10 +5869,10 @@ License files: 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 @@ -5946,21 +5880,20 @@ License files: 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. + - + ### [@babel/runtime](https://www.npmjs.com/package/@babel/runtime) (version 7.21.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -5968,10 +5901,10 @@ License files: 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 @@ -5979,21 +5912,20 @@ License files: 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. + - + ### [@babel/template](https://www.npmjs.com/package/@babel/template) (version 7.25.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -6001,10 +5933,10 @@ License files: 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 @@ -6012,21 +5944,20 @@ License files: 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. + - + ### [@babel/traverse](https://www.npmjs.com/package/@babel/traverse) (version 7.25.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -6034,10 +5965,10 @@ License files: 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 @@ -6045,21 +5976,20 @@ License files: 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. + - + ### [@babel/types](https://www.npmjs.com/package/@babel/types) (version 7.25.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2014-present Sebastian McKenzie and other contributors - + 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 @@ -6067,10 +5997,10 @@ License files: 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 @@ -6078,31 +6008,30 @@ License files: 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. + - + ### [@codemirror/autocomplete](https://www.npmjs.com/package/@codemirror/autocomplete) (version 6.17.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6110,31 +6039,30 @@ License files: 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. + - + ### [@codemirror/commands](https://www.npmjs.com/package/@codemirror/commands) (version 6.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6142,31 +6070,30 @@ License files: 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. + - + ### [@codemirror/lang-javascript](https://www.npmjs.com/package/@codemirror/lang-javascript) (version 6.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6174,31 +6101,30 @@ License files: 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. + - + ### [@codemirror/lang-json](https://www.npmjs.com/package/@codemirror/lang-json) (version 6.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6206,31 +6132,30 @@ License files: 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. + - + ### [@codemirror/language](https://www.npmjs.com/package/@codemirror/language) (version 6.3.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6238,31 +6163,30 @@ License files: 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. + - + ### [@codemirror/lint](https://www.npmjs.com/package/@codemirror/lint) (version 6.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6270,31 +6194,30 @@ License files: 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. + - + ### [@codemirror/state](https://www.npmjs.com/package/@codemirror/state) (version 6.4.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6302,31 +6225,30 @@ License files: 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. + - + ### [@codemirror/view](https://www.npmjs.com/package/@codemirror/view) (version 6.28.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018-2021 by Marijn Haverbeke and others - + 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 @@ -6334,31 +6256,30 @@ License files: 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. + - + ### [@dnd-kit/accessibility](https://www.npmjs.com/package/@dnd-kit/accessibility) (version 3.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021, Claudéric Demers - + 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 @@ -6366,31 +6287,30 @@ License files: 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. + - + ### [@dnd-kit/core](https://www.npmjs.com/package/@dnd-kit/core) (version 6.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021, Claudéric Demers - + 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 @@ -6398,31 +6318,30 @@ License files: 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. + - + ### [@dnd-kit/sortable](https://www.npmjs.com/package/@dnd-kit/sortable) (version 7.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021, Claudéric Demers - + 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 @@ -6430,31 +6349,30 @@ License files: 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. + - + ### [@dnd-kit/utilities](https://www.npmjs.com/package/@dnd-kit/utilities) (version 3.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021, Claudéric Demers - + 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 @@ -6462,19 +6380,18 @@ License files: 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. + - + ### [@electron/remote](https://www.npmjs.com/package/@electron/remote) (version 2.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2019-2022 Electron contributors - + 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 @@ -6482,10 +6399,10 @@ License files: 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 @@ -6493,31 +6410,30 @@ License files: 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. + - + ### [@emotion/cache](https://www.npmjs.com/package/@emotion/cache) (version 11.11.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6525,31 +6441,30 @@ License files: 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. + - + ### [@emotion/css](https://www.npmjs.com/package/@emotion/css) (version 11.11.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6557,31 +6472,30 @@ License files: 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. + - + ### [@emotion/hash](https://www.npmjs.com/package/@emotion/hash) (version 0.9.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6589,31 +6503,30 @@ License files: 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. + - + ### [@emotion/memoize](https://www.npmjs.com/package/@emotion/memoize) (version 0.8.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6621,31 +6534,30 @@ License files: 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. + - + ### [@emotion/serialize](https://www.npmjs.com/package/@emotion/serialize) (version 1.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6653,31 +6565,30 @@ License files: 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. + - + ### [@emotion/sheet](https://www.npmjs.com/package/@emotion/sheet) (version 1.2.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6685,31 +6596,30 @@ License files: 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. + - + ### [@emotion/unitless](https://www.npmjs.com/package/@emotion/unitless) (version 0.8.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6717,31 +6627,30 @@ License files: 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. + - + ### [@emotion/utils](https://www.npmjs.com/package/@emotion/utils) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6749,31 +6658,30 @@ License files: 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. + - + ### [@emotion/weak-memoize](https://www.npmjs.com/package/@emotion/weak-memoize) (version 0.3.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Emotion team and other contributors - + 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 @@ -6781,29 +6689,28 @@ License files: 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. + - + ### [@jridgewell/gen-mapping](https://www.npmjs.com/package/@jridgewell/gen-mapping) (version 0.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2022 Justin Ridgewell - + 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 @@ -6811,29 +6718,28 @@ License files: 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. + - + ### [@jridgewell/gen-mapping](https://www.npmjs.com/package/@jridgewell/gen-mapping) (version 0.3.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2022 Justin Ridgewell - + 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 @@ -6841,29 +6747,28 @@ License files: 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. + - + ### [@jridgewell/resolve-uri](https://www.npmjs.com/package/@jridgewell/resolve-uri) (version 3.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2019 Justin Ridgewell - + 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 @@ -6872,28 +6777,26 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [@jridgewell/set-array](https://www.npmjs.com/package/@jridgewell/set-array) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2022 Justin Ridgewell - + 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 @@ -6901,31 +6804,30 @@ License files: 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. + - + ### [@jridgewell/sourcemap-codec](https://www.npmjs.com/package/@jridgewell/sourcemap-codec) (version 1.5.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License - + Copyright (c) 2015 Rich Harris - + 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 @@ -6933,29 +6835,28 @@ License files: 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. + - + ### [@jridgewell/trace-mapping](https://www.npmjs.com/package/@jridgewell/trace-mapping) (version 0.3.25) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2022 Justin Ridgewell - + 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 @@ -6963,31 +6864,30 @@ License files: 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. + - + ### [@lezer/common](https://www.npmjs.com/package/@lezer/common) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018 by Marijn Haverbeke and others - + 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 @@ -6995,31 +6895,30 @@ License files: 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. + - + ### [@lezer/highlight](https://www.npmjs.com/package/@lezer/highlight) (version 1.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018 by Marijn Haverbeke and others - + 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 @@ -7027,31 +6926,30 @@ License files: 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. + - + ### [@lezer/javascript](https://www.npmjs.com/package/@lezer/javascript) (version 1.3.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018 by Marijn Haverbeke and others - + 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 @@ -7059,31 +6957,30 @@ License files: 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. + - + ### [@lezer/json](https://www.npmjs.com/package/@lezer/json) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2020 by Marijn Haverbeke , Arun Srinivasan , and others - + 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 @@ -7092,30 +6989,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [@lezer/lr](https://www.npmjs.com/package/@lezer/lr) (version 1.4.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2018 by Marijn Haverbeke and others - + 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 @@ -7123,51 +7018,48 @@ License files: 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. + - + ### [@lg-tools/test-harnesses](https://www.npmjs.com/package/@lg-tools/test-harnesses) (version 0.1.2) - License tags: Apache-2.0 - + ### [@lukeed/uuid](https://www.npmjs.com/package/@lukeed/uuid) (version 2.0.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Luke Edwards (lukeed.com) - + 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. + - + ### [@nicolo-ribaudo/semver-v6](https://www.npmjs.com/package/@nicolo-ribaudo/semver-v6) (version 6.3.3) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -7175,31 +7067,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [@react-aria/interactions](https://www.npmjs.com/package/@react-aria/interactions) (version 3.9.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -7207,24 +7098,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -7232,7 +7123,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -7246,18 +7137,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -7273,24 +7164,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -7307,14 +7198,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -7322,12 +7213,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -7337,7 +7228,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -7349,7 +7240,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -7360,11 +7251,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -7373,45 +7264,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Adobe - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@react-aria/ssr](https://www.npmjs.com/package/@react-aria/ssr) (version 3.2.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -7419,24 +7309,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -7444,7 +7334,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -7458,18 +7348,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -7485,24 +7375,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -7519,14 +7409,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -7534,12 +7424,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -7549,7 +7439,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -7561,7 +7451,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -7572,11 +7462,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -7585,45 +7475,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Adobe - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@react-aria/utils](https://www.npmjs.com/package/@react-aria/utils) (version 3.13.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -7631,24 +7520,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -7656,7 +7545,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -7670,18 +7559,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -7697,24 +7586,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -7731,14 +7620,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -7746,12 +7635,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -7761,7 +7650,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -7773,7 +7662,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -7784,11 +7673,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -7797,45 +7686,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Adobe - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@react-aria/visually-hidden](https://www.npmjs.com/package/@react-aria/visually-hidden) (version 3.3.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -7843,24 +7731,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -7868,7 +7756,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -7882,18 +7770,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -7909,24 +7797,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -7943,14 +7831,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -7958,12 +7846,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -7973,7 +7861,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -7985,7 +7873,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -7996,11 +7884,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -8009,45 +7897,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Adobe - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@react-stately/utils](https://www.npmjs.com/package/@react-stately/utils) (version 3.5.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -8055,24 +7942,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -8080,7 +7967,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -8094,18 +7981,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -8121,24 +8008,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -8155,14 +8042,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -8170,12 +8057,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -8185,7 +8072,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -8197,7 +8084,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -8208,11 +8095,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -8221,45 +8108,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Adobe - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@segment/analytics-core](https://www.npmjs.com/package/@segment/analytics-core) (version 1.4.0) - License tags: MIT License files: - -- LICENSE.MD: +* LICENSE.MD: The MIT License (MIT) - + Copyright © 2021 Segment - + 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 @@ -8268,30 +8154,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [@segment/analytics-generic-utils](https://www.npmjs.com/package/@segment/analytics-generic-utils) (version 1.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright © 2023 Segment - + 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 @@ -8299,31 +8183,30 @@ License files: 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. + - + ### [@segment/analytics-node](https://www.npmjs.com/package/@segment/analytics-node) (version 1.1.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright © 2021 Segment - + 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 @@ -8331,31 +8214,30 @@ License files: 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. + - + ### [@smithy/config-resolver](https://www.npmjs.com/package/@smithy/config-resolver) (version 3.0.5) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -8363,24 +8245,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -8388,7 +8270,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -8402,18 +8284,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -8429,24 +8311,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -8463,14 +8345,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -8478,12 +8360,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -8493,7 +8375,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -8505,7 +8387,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -8516,11 +8398,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -8529,45 +8411,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/core](https://www.npmjs.com/package/@smithy/core) (version 2.3.2) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -8575,24 +8455,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -8600,7 +8480,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -8614,18 +8494,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -8641,24 +8521,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -8675,14 +8555,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -8690,12 +8570,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -8705,7 +8585,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -8717,7 +8597,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -8728,11 +8608,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -8741,45 +8621,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/credential-provider-imds](https://www.npmjs.com/package/@smithy/credential-provider-imds) (version 3.2.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -8787,24 +8666,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -8812,7 +8691,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -8826,18 +8705,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -8853,24 +8732,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -8887,14 +8766,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -8902,12 +8781,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -8917,7 +8796,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -8929,7 +8808,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -8940,11 +8819,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -8953,45 +8832,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/fetch-http-handler](https://www.npmjs.com/package/@smithy/fetch-http-handler) (version 3.2.4) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -8999,24 +8876,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -9024,7 +8901,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -9038,18 +8915,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -9065,24 +8942,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -9099,14 +8976,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -9114,12 +8991,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -9129,7 +9006,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -9141,7 +9018,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -9152,11 +9029,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -9165,45 +9042,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/hash-node](https://www.npmjs.com/package/@smithy/hash-node) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -9211,24 +9086,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -9236,7 +9111,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -9250,18 +9125,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -9277,24 +9152,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -9311,14 +9186,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -9326,12 +9201,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -9341,7 +9216,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -9353,7 +9228,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -9364,11 +9239,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -9377,45 +9252,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/is-array-buffer](https://www.npmjs.com/package/@smithy/is-array-buffer) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -9423,24 +9296,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -9448,7 +9321,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -9462,18 +9335,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -9489,24 +9362,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -9523,14 +9396,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -9538,12 +9411,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -9553,7 +9426,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -9565,7 +9438,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -9576,11 +9449,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -9589,45 +9462,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/middleware-content-length](https://www.npmjs.com/package/@smithy/middleware-content-length) (version 3.0.5) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -9635,24 +9506,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -9660,7 +9531,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -9674,18 +9545,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -9701,24 +9572,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -9735,14 +9606,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -9750,12 +9621,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -9765,7 +9636,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -9777,7 +9648,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -9788,11 +9659,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -9801,45 +9672,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/middleware-endpoint](https://www.npmjs.com/package/@smithy/middleware-endpoint) (version 3.1.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -9847,24 +9716,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -9872,7 +9741,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -9886,18 +9755,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -9913,24 +9782,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -9947,14 +9816,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -9962,12 +9831,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -9977,7 +9846,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -9989,7 +9858,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -10000,11 +9869,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -10013,45 +9882,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/middleware-retry](https://www.npmjs.com/package/@smithy/middleware-retry) (version 3.0.14) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -10059,24 +9926,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -10084,7 +9951,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -10098,18 +9965,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -10125,24 +9992,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -10159,14 +10026,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -10174,12 +10041,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -10189,7 +10056,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -10201,7 +10068,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -10212,11 +10079,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -10225,45 +10092,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/middleware-serde](https://www.npmjs.com/package/@smithy/middleware-serde) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -10271,24 +10137,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -10296,7 +10162,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -10310,18 +10176,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -10337,24 +10203,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -10371,14 +10237,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -10386,12 +10252,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -10401,7 +10267,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -10413,7 +10279,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -10424,11 +10290,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -10437,45 +10303,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/middleware-stack](https://www.npmjs.com/package/@smithy/middleware-stack) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -10483,24 +10348,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -10508,7 +10373,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -10522,18 +10387,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -10549,24 +10414,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -10583,14 +10448,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -10598,12 +10463,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -10613,7 +10478,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -10625,7 +10490,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -10636,11 +10501,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -10649,45 +10514,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/node-config-provider](https://www.npmjs.com/package/@smithy/node-config-provider) (version 3.1.4) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -10695,24 +10558,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -10720,7 +10583,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -10734,18 +10597,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -10761,24 +10624,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -10795,14 +10658,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -10810,12 +10673,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -10825,7 +10688,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -10837,7 +10700,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -10848,11 +10711,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -10861,45 +10724,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/node-http-handler](https://www.npmjs.com/package/@smithy/node-http-handler) (version 3.1.4) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -10907,24 +10768,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -10932,7 +10793,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -10946,18 +10807,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -10973,24 +10834,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -11007,14 +10868,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -11022,12 +10883,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -11037,7 +10898,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -11049,7 +10910,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -11060,11 +10921,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -11073,45 +10934,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/property-provider](https://www.npmjs.com/package/@smithy/property-provider) (version 3.1.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -11119,24 +10978,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -11144,7 +11003,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -11158,18 +11017,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -11185,24 +11044,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -11219,14 +11078,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -11234,12 +11093,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -11249,7 +11108,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -11261,7 +11120,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -11272,11 +11131,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -11285,45 +11144,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/protocol-http](https://www.npmjs.com/package/@smithy/protocol-http) (version 4.1.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -11331,24 +11188,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -11356,7 +11213,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -11370,18 +11227,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -11397,24 +11254,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -11431,14 +11288,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -11446,12 +11303,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -11461,7 +11318,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -11473,7 +11330,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -11484,11 +11341,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -11497,45 +11354,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/querystring-builder](https://www.npmjs.com/package/@smithy/querystring-builder) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -11543,24 +11399,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -11568,7 +11424,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -11582,18 +11438,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -11609,24 +11465,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -11643,14 +11499,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -11658,12 +11514,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -11673,7 +11529,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -11685,7 +11541,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -11696,11 +11552,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -11709,45 +11565,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/querystring-parser](https://www.npmjs.com/package/@smithy/querystring-parser) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -11755,24 +11610,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -11780,7 +11635,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -11794,18 +11649,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -11821,24 +11676,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -11855,14 +11710,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -11870,12 +11725,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -11885,7 +11740,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -11897,7 +11752,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -11908,11 +11763,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -11921,45 +11776,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/service-error-classification](https://www.npmjs.com/package/@smithy/service-error-classification) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -11967,24 +11821,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -11992,7 +11846,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -12006,18 +11860,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -12033,24 +11887,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -12067,14 +11921,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -12082,12 +11936,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -12097,7 +11951,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -12109,7 +11963,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -12120,11 +11974,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -12133,45 +11987,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/shared-ini-file-loader](https://www.npmjs.com/package/@smithy/shared-ini-file-loader) (version 3.1.4) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -12179,24 +12032,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -12204,7 +12057,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -12218,18 +12071,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -12245,24 +12098,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -12279,14 +12132,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -12294,12 +12147,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -12309,7 +12162,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -12321,7 +12174,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -12332,11 +12185,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -12345,45 +12198,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/signature-v4](https://www.npmjs.com/package/@smithy/signature-v4) (version 4.1.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -12391,24 +12242,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -12416,7 +12267,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -12430,18 +12281,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -12457,24 +12308,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -12491,14 +12342,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -12506,12 +12357,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -12521,7 +12372,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -12533,7 +12384,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -12544,11 +12395,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -12557,45 +12408,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/smithy-client](https://www.npmjs.com/package/@smithy/smithy-client) (version 3.1.12) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -12603,24 +12452,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -12628,7 +12477,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -12642,18 +12491,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -12669,24 +12518,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -12703,14 +12552,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -12718,12 +12567,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -12733,7 +12582,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -12745,7 +12594,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -12756,11 +12605,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -12769,45 +12618,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/types](https://www.npmjs.com/package/@smithy/types) (version 3.3.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -12815,24 +12663,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -12840,7 +12688,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -12854,18 +12702,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -12881,24 +12729,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -12915,14 +12763,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -12930,12 +12778,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -12945,7 +12793,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -12957,7 +12805,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -12968,11 +12816,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -12981,45 +12829,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/url-parser](https://www.npmjs.com/package/@smithy/url-parser) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -13027,24 +12874,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -13052,7 +12899,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -13066,18 +12913,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -13093,24 +12940,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -13127,14 +12974,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -13142,12 +12989,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -13157,7 +13004,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -13169,7 +13016,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -13180,11 +13027,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -13193,45 +13040,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/util-base64](https://www.npmjs.com/package/@smithy/util-base64) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -13239,24 +13085,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -13264,7 +13110,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -13278,18 +13124,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -13305,24 +13151,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -13339,14 +13185,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -13354,12 +13200,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -13369,7 +13215,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -13381,7 +13227,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -13392,11 +13238,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -13405,45 +13251,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-body-length-node](https://www.npmjs.com/package/@smithy/util-body-length-node) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -13451,24 +13295,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -13476,7 +13320,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -13490,18 +13334,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -13517,24 +13361,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -13551,14 +13395,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -13566,12 +13410,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -13581,7 +13425,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -13593,7 +13437,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -13604,11 +13448,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -13617,45 +13461,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-buffer-from](https://www.npmjs.com/package/@smithy/util-buffer-from) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -13663,24 +13505,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -13688,7 +13530,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -13702,18 +13544,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -13729,24 +13571,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -13763,14 +13605,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -13778,12 +13620,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -13793,7 +13635,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -13805,7 +13647,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -13816,11 +13658,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -13829,45 +13671,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-config-provider](https://www.npmjs.com/package/@smithy/util-config-provider) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -13875,24 +13715,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -13900,7 +13740,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -13914,18 +13754,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -13941,24 +13781,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -13975,14 +13815,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -13990,12 +13830,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -14005,7 +13845,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -14017,7 +13857,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -14028,11 +13868,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -14041,45 +13881,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-defaults-mode-node](https://www.npmjs.com/package/@smithy/util-defaults-mode-node) (version 3.0.14) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -14087,24 +13925,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -14112,7 +13950,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -14126,18 +13964,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -14153,24 +13991,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -14187,14 +14025,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -14202,12 +14040,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -14217,7 +14055,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -14229,7 +14067,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -14240,11 +14078,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -14253,45 +14091,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [@smithy/util-endpoints](https://www.npmjs.com/package/@smithy/util-endpoints) (version 2.0.5) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -14299,24 +14136,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -14324,7 +14161,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -14338,18 +14175,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -14365,24 +14202,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -14399,14 +14236,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -14414,12 +14251,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -14429,7 +14266,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -14441,7 +14278,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -14452,11 +14289,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -14465,45 +14302,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-hex-encoding](https://www.npmjs.com/package/@smithy/util-hex-encoding) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -14511,24 +14346,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -14536,7 +14371,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -14550,18 +14385,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -14577,24 +14412,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -14611,14 +14446,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -14626,12 +14461,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -14641,7 +14476,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -14653,7 +14488,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -14664,11 +14499,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -14677,45 +14512,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-middleware](https://www.npmjs.com/package/@smithy/util-middleware) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -14723,24 +14556,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -14748,7 +14581,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -14762,18 +14595,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -14789,24 +14622,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -14823,14 +14656,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -14838,12 +14671,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -14853,7 +14686,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -14865,7 +14698,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -14876,11 +14709,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -14889,45 +14722,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-retry](https://www.npmjs.com/package/@smithy/util-retry) (version 3.0.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -14935,24 +14766,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -14960,7 +14791,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -14974,18 +14805,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -15001,24 +14832,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -15035,14 +14866,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -15050,12 +14881,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -15065,7 +14896,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -15077,7 +14908,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -15088,11 +14919,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -15101,45 +14932,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-stream](https://www.npmjs.com/package/@smithy/util-stream) (version 3.1.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -15147,24 +14976,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -15172,7 +15001,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -15186,18 +15015,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -15213,24 +15042,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -15247,14 +15076,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -15262,12 +15091,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -15277,7 +15106,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -15289,7 +15118,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -15300,11 +15129,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -15313,45 +15142,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-uri-escape](https://www.npmjs.com/package/@smithy/util-uri-escape) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -15359,24 +15186,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -15384,7 +15211,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -15398,18 +15225,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -15425,24 +15252,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -15459,14 +15286,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -15474,12 +15301,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -15489,7 +15316,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -15501,7 +15328,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -15512,11 +15339,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -15525,45 +15352,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@smithy/util-utf8](https://www.npmjs.com/package/@smithy/util-utf8) (version 3.0.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -15571,24 +15396,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -15596,7 +15421,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -15610,18 +15435,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -15637,24 +15462,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -15671,14 +15496,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -15686,12 +15511,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -15701,7 +15526,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -15713,7 +15538,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -15724,11 +15549,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -15737,45 +15562,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [@tanstack/react-table](https://www.npmjs.com/package/@tanstack/react-table) (version 8.14.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Tanner Linsley - + 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 @@ -15783,31 +15606,30 @@ License files: 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. + - + ### [@tanstack/table-core](https://www.npmjs.com/package/@tanstack/table-core) (version 8.14.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Tanner Linsley - + 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 @@ -15815,30 +15637,29 @@ License files: 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. + - + ### [@testing-library/dom](https://www.npmjs.com/package/@testing-library/dom) (version 9.3.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) Copyright (c) 2017 Kent C. Dodds - + 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 @@ -15846,31 +15667,30 @@ License files: 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. + - + ### [@tootallnate/quickjs-emscripten](https://www.npmjs.com/package/@tootallnate/quickjs-emscripten) (version 0.23.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + quickjs-emscripten copyright (c) 2019 Jake Teton-Landis - + 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 @@ -15878,22 +15698,21 @@ License files: 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. + - + ### [accepts](https://www.npmjs.com/package/accepts) (version 1.3.8) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -15901,10 +15720,10 @@ License files: 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. @@ -15912,31 +15731,30 @@ License files: 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. + - + ### [acorn](https://www.npmjs.com/package/acorn) (version 8.8.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (C) 2012-2022 by various contributors (see AUTHORS) - + 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 @@ -15944,31 +15762,30 @@ License files: 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. + - + ### [ag-grid-community](https://www.npmjs.com/package/ag-grid-community) (version 20.2.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: The MIT License - + Copyright (c) 2015-2016 AG GRID 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 @@ -15976,31 +15793,30 @@ License files: 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. + - + ### [ag-grid-react](https://www.npmjs.com/package/ag-grid-react) (version 20.2.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: The MIT License - + Copyright (c) 2015-2016 AG GRID 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 @@ -16008,21 +15824,20 @@ License files: 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. + - + ### [agent-base](https://www.npmjs.com/package/agent-base) (version 7.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Nathan Rajlich - + 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 @@ -16030,10 +15845,10 @@ License files: 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. @@ -16042,18 +15857,16 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [ampersand-class-extend](https://www.npmjs.com/package/ampersand-class-extend) (version 1.0.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16061,10 +15874,10 @@ License files: 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. @@ -16072,19 +15885,18 @@ License files: 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. + - + ### [ampersand-class-extend](https://www.npmjs.com/package/ampersand-class-extend) (version 2.0.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16092,10 +15904,10 @@ License files: 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. @@ -16103,19 +15915,18 @@ License files: 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. + - + ### [ampersand-collection-view](https://www.npmjs.com/package/ampersand-collection-view) (version 1.4.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16123,10 +15934,10 @@ License files: 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. @@ -16134,19 +15945,18 @@ License files: 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. + - + ### [ampersand-collection](https://www.npmjs.com/package/ampersand-collection) (version 2.0.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16154,10 +15964,10 @@ License files: 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. @@ -16165,19 +15975,18 @@ License files: 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. + - + ### [ampersand-dom-bindings](https://www.npmjs.com/package/ampersand-dom-bindings) (version 3.9.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright © 2015 &yet, LLC and AmpersandJS contributors - + 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 @@ -16185,10 +15994,10 @@ License files: 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. @@ -16196,19 +16005,18 @@ License files: 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. + - + ### [ampersand-dom](https://www.npmjs.com/package/ampersand-dom) (version 1.5.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16216,10 +16024,10 @@ License files: 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. @@ -16227,19 +16035,18 @@ License files: 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. + - + ### [ampersand-events](https://www.npmjs.com/package/ampersand-events) (version 1.1.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16247,10 +16054,10 @@ License files: 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. @@ -16259,18 +16066,16 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [ampersand-events](https://www.npmjs.com/package/ampersand-events) (version 2.0.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16278,10 +16083,10 @@ License files: 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. @@ -16290,18 +16095,16 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [ampersand-model](https://www.npmjs.com/package/ampersand-model) (version 8.0.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16309,10 +16112,10 @@ License files: 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. @@ -16320,19 +16123,18 @@ License files: 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. + - + ### [ampersand-state](https://www.npmjs.com/package/ampersand-state) (version 4.8.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16340,10 +16142,10 @@ License files: 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. @@ -16351,19 +16153,18 @@ License files: 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. + - + ### [ampersand-state](https://www.npmjs.com/package/ampersand-state) (version 5.0.3) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16371,10 +16172,10 @@ License files: 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. @@ -16382,19 +16183,18 @@ License files: 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. + - + ### [ampersand-view](https://www.npmjs.com/package/ampersand-view) (version 9.0.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright © 2014 &yet, LLC and AmpersandJS contributors - + 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 @@ -16402,10 +16202,10 @@ License files: 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. @@ -16413,117 +16213,111 @@ License files: 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. + - + ### [ansi-regex](https://www.npmjs.com/package/ansi-regex) (version 5.0.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [ansi-styles](https://www.npmjs.com/package/ansi-styles) (version 3.2.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [ansi-styles](https://www.npmjs.com/package/ansi-styles) (version 4.3.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [ansi-styles](https://www.npmjs.com/package/ansi-styles) (version 5.2.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [antlr4](https://www.npmjs.com/package/antlr4) (version 4.7.2) - License tags: BSD-3-Clause - + ### [aria-query](https://www.npmjs.com/package/aria-query) (version 5.1.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -16531,24 +16325,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -16556,7 +16350,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -16570,18 +16364,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -16597,24 +16391,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -16631,14 +16425,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -16646,12 +16440,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -16661,7 +16455,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -16673,7 +16467,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -16684,11 +16478,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -16697,45 +16491,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2020 A11yance - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [array-buffer-byte-length](https://www.npmjs.com/package/array-buffer-byte-length) (version 1.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2023 Inspect JS - + 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 @@ -16743,31 +16536,30 @@ License files: 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. + - + ### [array-flatten](https://www.npmjs.com/package/array-flatten) (version 1.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - + 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 @@ -16775,35 +16567,33 @@ License files: 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. + - + ### [array-next](https://www.npmjs.com/package/array-next) (version 0.0.1) - License tags: MIT - + ### [asn1](https://www.npmjs.com/package/asn1) (version 0.2.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2011 Mark Cavage, All rights reserved. - + 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 @@ -16811,19 +16601,18 @@ License files: 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 + - + ### [ast-types](https://www.npmjs.com/package/ast-types) (version 0.13.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2013 Ben Newman - + 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 @@ -16831,10 +16620,10 @@ License files: 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. @@ -16842,31 +16631,30 @@ License files: 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. + - + ### [available-typed-arrays](https://www.npmjs.com/package/available-typed-arrays) (version 1.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2020 Inspect JS - + 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 @@ -16874,29 +16662,28 @@ License files: 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. + - + ### [aws4](https://www.npmjs.com/package/aws4) (version 1.11.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2013 Michael Hart (michael.hart.au@gmail.com) - + 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 @@ -16904,31 +16691,30 @@ License files: 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. + - + ### [base64-js](https://www.npmjs.com/package/base64-js) (version 1.5.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Jameson Little - + 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 @@ -16936,29 +16722,28 @@ License files: 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. + - + ### [basic-ftp](https://www.npmjs.com/package/basic-ftp) (version 5.0.5) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright (c) 2019 Patrick Juchli - + 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 @@ -16967,24 +16752,22 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [bcrypt-pbkdf](https://www.npmjs.com/package/bcrypt-pbkdf) (version 1.0.2) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: The Blowfish portions are under the following license: - + Blowfish block cipher for OpenBSD Copyright 1997 Niels Provos All rights reserved. - + Implementation advice by David Mazieres . - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -16995,7 +16778,7 @@ License files: documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -17006,17 +16789,17 @@ License files: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - + + + The bcrypt_pbkdf portions are under the following license: - + Copyright (c) 2013 Ted Unangst - + Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -17024,18 +16807,18 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - + + + Performance improvements (Javascript-specific): - + Copyright 2016, Joyent Inc Author: Alex Wilson - + Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -17043,79 +16826,54 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [big-integer](https://www.npmjs.com/package/big-integer) (version 1.6.52) - License tags: Unlicense License files: - -- LICENSE: - - This is free and unencumbered software released into the public domain. +* LICENSE: + + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + 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 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. + + For more information, please refer to + + +### [bindings](https://www.npmjs.com/package/bindings) (version 1.5.0) +License tags: MIT - Anyone is free to copy, modify, publish, use, compile, sell, or - - distribute this software, either in source code form or as a compiled - - binary, for any purpose, commercial or non-commercial, and by any - - means. - - - - In jurisdictions that recognize copyright laws, the author or authors - - of this software dedicate any and all copyright interest in the - - software to the public domain. We make this dedication for the benefit - - of the public at large and to the detriment of our heirs and - - successors. We intend this dedication to be an overt act of - - relinquishment in perpetuity of all present and future rights to this - - software under copyright law. - - - - 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 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. - - - - For more information, please refer to - - - -### [bindings](https://www.npmjs.com/package/bindings) (version 1.5.0) - -License tags: MIT - -License files: - -- LICENSE.md: +License files: +* LICENSE.md: (The MIT License) - + Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net> - + 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 @@ -17123,10 +16881,10 @@ License files: 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. @@ -17134,46 +16892,44 @@ License files: 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. + - + ### [bl](https://www.npmjs.com/package/bl) (version 4.1.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) ===================== - + Copyright (c) 2013-2019 bl contributors ---------------------------------- - + *bl contributors listed at * - + 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. + - + ### [body-parser](https://www.npmjs.com/package/body-parser) (version 1.20.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2014-2015 Douglas Christopher Wilson - + 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 @@ -17181,10 +16937,10 @@ License files: 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. @@ -17192,37 +16948,35 @@ License files: 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. + - + ### [bplist-parser](https://www.npmjs.com/package/bplist-parser) (version 0.2.0) - License tags: MIT - + ### [bson](https://www.npmjs.com/package/bson) (version 6.7.0) - License tags: Apache-2.0 License files: - -- LICENSE.md: +* LICENSE.md: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -17230,24 +16984,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -17255,7 +17009,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -17269,18 +17023,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -17296,24 +17050,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -17330,14 +17084,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -17345,12 +17099,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -17360,7 +17114,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -17372,7 +17126,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -17383,11 +17137,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -17396,63 +17150,59 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright [yyyy] [name of copyright owner] - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [buffer-alloc-unsafe](https://www.npmjs.com/package/buffer-alloc-unsafe) (version 1.1.0) - License tags: MIT - + ### [buffer-alloc](https://www.npmjs.com/package/buffer-alloc) (version 1.2.0) - License tags: MIT - + ### [buffer-fill](https://www.npmjs.com/package/buffer-fill) (version 1.0.0) - License tags: MIT - + ### [buffer](https://www.npmjs.com/package/buffer) (version 5.7.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) Feross Aboukhadijeh, and other contributors. - + 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 @@ -17460,42 +17210,40 @@ License files: 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. + - + ### [bundle-name](https://www.npmjs.com/package/bundle-name) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [bytes](https://www.npmjs.com/package/bytes) (version 3.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2014 TJ Holowaychuk Copyright (c) 2015 Jed Watson - + 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 @@ -17503,10 +17251,10 @@ License files: 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. @@ -17514,31 +17262,30 @@ License files: 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. + - + ### [call-bind](https://www.npmjs.com/package/call-bind) (version 1.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2020 Jordan Harband - + 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 @@ -17546,85 +17293,81 @@ License files: 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. + - + ### [chalk](https://www.npmjs.com/package/chalk) (version 2.4.2) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [chalk](https://www.npmjs.com/package/chalk) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [chalk](https://www.npmjs.com/package/chalk) (version 4.1.2) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [chownr](https://www.npmjs.com/package/chownr) (version 2.0.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -17632,51 +17375,49 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [clean-stack](https://www.npmjs.com/package/clean-stack) (version 2.2.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [clipboard](https://www.npmjs.com/package/clipboard) (version 2.0.10) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Zeno Rocha - + 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 @@ -17684,45 +17425,42 @@ License files: 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. + - + ### [closest](https://www.npmjs.com/package/closest) (version 0.0.1) - License tags: MIT - + ### [clsx](https://www.npmjs.com/package/clsx) (version 1.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Luke Edwards (lukeed.com) - + 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. + - + ### [color-convert](https://www.npmjs.com/package/color-convert) (version 1.9.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2011-2016 Heather Arthur - + 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 @@ -17730,10 +17468,10 @@ License files: 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 @@ -17741,19 +17479,19 @@ License files: 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. + + - + ### [color-convert](https://www.npmjs.com/package/color-convert) (version 2.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2011-2016 Heather Arthur - + 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 @@ -17761,10 +17499,10 @@ License files: 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 @@ -17772,79 +17510,60 @@ License files: 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. + + - + ### [color-name](https://www.npmjs.com/package/color-name) (version 1.1.3) - License tags: MIT License files: +* LICENSE: -- LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Dmitry Ivanov - - - - 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 MIT License (MIT) + Copyright (c) 2015 Dmitry Ivanov + + 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. - + ### [color-name](https://www.npmjs.com/package/color-name) (version 1.1.4) - License tags: MIT License files: +* LICENSE: -- LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Dmitry Ivanov - - - - 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 MIT License (MIT) + Copyright (c) 2015 Dmitry Ivanov + + 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. - + ### [component-event](https://www.npmjs.com/package/component-event) (version 0.1.4) - License tags: MIT - + ### [content-disposition](https://www.npmjs.com/package/content-disposition) (version 0.5.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 Douglas Christopher Wilson - + 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 @@ -17852,10 +17571,10 @@ License files: 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. @@ -17863,21 +17582,20 @@ License files: 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. + - + ### [content-type](https://www.npmjs.com/package/content-type) (version 1.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -17885,10 +17603,10 @@ License files: 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. @@ -17896,20 +17614,19 @@ License files: 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. + - + ### [convert-source-map](https://www.npmjs.com/package/convert-source-map) (version 2.0.0) - License tags: MIT License files: +* LICENSE: -- LICENSE: - - Copyright 2013 Thorsten Lorenz. + Copyright 2013 Thorsten Lorenz. All rights reserved. - + 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 @@ -17918,10 +17635,10 @@ License files: 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 @@ -17930,28 +17647,26 @@ License files: 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. + - + ### [cookie-signature](https://www.npmjs.com/package/cookie-signature) (version 1.0.6) - License tags: MIT - + ### [cookie](https://www.npmjs.com/package/cookie) (version 0.6.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2014 Roman Shtylman Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -17959,10 +17674,10 @@ License files: 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. @@ -17970,29 +17685,29 @@ License files: 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. + + - + ### [core-js](https://www.npmjs.com/package/core-js) (version 3.17.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2014-2021 Denis Pushkarev - + 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 @@ -18000,77 +17715,56 @@ License files: 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. + - + ### [cpu-features](https://www.npmjs.com/package/cpu-features) (version 0.0.9) - License tags: MIT License files: - -- LICENSE: - - Copyright Brian White. All rights reserved. - - - - 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 - +* LICENSE: + + Copyright Brian White. All rights reserved. + + 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. - + ### [crelt](https://www.npmjs.com/package/crelt) (version 1.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2020 by Marijn Haverbeke - + 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 @@ -18078,31 +17772,30 @@ License files: 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. + - + ### [cross-fetch](https://www.npmjs.com/package/cross-fetch) (version 3.1.8) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2017 Leonardo Quixadá - + 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 @@ -18110,31 +17803,30 @@ License files: 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. + - + ### [cross-spawn](https://www.npmjs.com/package/cross-spawn) (version 7.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2018 Made With MOXY Lda - + 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 @@ -18142,19 +17834,18 @@ License files: 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. + - + ### [css-loader](https://www.npmjs.com/package/css-loader) (version 4.3.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright JS Foundation and other contributors - + 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 @@ -18162,10 +17853,10 @@ License files: 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. @@ -18173,59 +17864,57 @@ License files: 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. + - + ### [d3-flextree](https://www.npmjs.com/package/d3-flextree) (version 2.1.2) - License tags: WTFPL License files: - -- LICENSE: +* LICENSE: DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 - + Copyright (C) 2004 Sam Hocevar - + Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. - + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - + 0. You just DO WHAT THE FUCK YOU WANT TO. + + - ### [d3-hierarchy](https://www.npmjs.com/package/d3-hierarchy) (version 1.1.9) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright 2010-2016 Mike Bostock All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -18236,34 +17925,33 @@ License files: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [d3-timer](https://www.npmjs.com/package/d3-timer) (version 1.0.3) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright 2010-2016 Mike Bostock All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -18274,33 +17962,32 @@ License files: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [d3](https://www.npmjs.com/package/d3) (version 3.5.17) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright (c) 2010-2016, Michael Bostock All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * The name Michael Bostock may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -18311,27 +17998,25 @@ License files: OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [data-uri-to-buffer](https://www.npmjs.com/package/data-uri-to-buffer) (version 4.0.1) - License tags: MIT - + ### [data-uri-to-buffer](https://www.npmjs.com/package/data-uri-to-buffer) (version 6.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Nathan Rajlich - + 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 @@ -18339,10 +18024,10 @@ License files: 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. @@ -18351,169 +18036,166 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [debug](https://www.npmjs.com/package/debug) (version 2.6.9) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 TJ Holowaychuk - - 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, + + 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 + + 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 + + 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. + + - + ### [debug](https://www.npmjs.com/package/debug) (version 4.3.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 TJ Holowaychuk Copyright (c) 2018-2021 Josh Junon - + 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. + + - + ### [debug](https://www.npmjs.com/package/debug) (version 4.3.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 TJ Holowaychuk Copyright (c) 2018-2021 Josh Junon - + 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. + + - + ### [debug](https://www.npmjs.com/package/debug) (version 4.3.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 TJ Holowaychuk Copyright (c) 2018-2021 Josh Junon - + 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. + + - + ### [decompress-response](https://www.npmjs.com/package/decompress-response) (version 5.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [deep-equal](https://www.npmjs.com/package/deep-equal) (version 2.2.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2012, 2013, 2014 James Halliday , 2009 Thomas Robinson <280north.com> - + 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 @@ -18521,102 +18203,98 @@ License files: 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. + - + ### [deep-extend](https://www.npmjs.com/package/deep-extend) (version 0.6.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013-2018, Viacheslav Lotsmanov - + 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. + - + ### [default-browser-id](https://www.npmjs.com/package/default-browser-id) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [default-browser](https://www.npmjs.com/package/default-browser) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [define-data-property](https://www.npmjs.com/package/define-data-property) (version 1.1.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2023 Jordan Harband - + 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 @@ -18624,51 +18302,49 @@ License files: 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. + - + ### [define-lazy-prop](https://www.npmjs.com/package/define-lazy-prop) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [define-properties](https://www.npmjs.com/package/define-properties) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (C) 2015 Jordan Harband - + 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 @@ -18677,38 +18353,33 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [degenerator](https://www.npmjs.com/package/degenerator) (version 5.0.1) - License tags: MIT - + ### [delegate-events](https://www.npmjs.com/package/delegate-events) (version 1.1.1) - License tags: MIT - + ### [delegate](https://www.npmjs.com/package/delegate) (version 3.2.0) - License tags: MIT - + ### [depd](https://www.npmjs.com/package/depd) (version 2.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2018 Douglas Christopher Wilson - + 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 @@ -18716,10 +18387,10 @@ License files: 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. @@ -18727,32 +18398,32 @@ License files: 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. + - + ### [destroy](https://www.npmjs.com/package/destroy) (version 1.2.0) - License tags: MIT License files: +* LICENSE: -- LICENSE: - + The MIT License (MIT) - + Copyright (c) 2014 Jonathan Ong me@jongleberry.com Copyright (c) 2015-2022 Douglas Christopher Wilson doug@somethingdoug.com - + 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 @@ -18760,31 +18431,30 @@ License files: 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. + - + ### [detect-libc](https://www.npmjs.com/package/detect-libc) (version 2.0.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -18792,24 +18462,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -18817,7 +18487,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -18831,18 +18501,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -18858,24 +18528,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -18892,14 +18562,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -18907,12 +18577,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -18922,7 +18592,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -18934,7 +18604,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -18945,11 +18615,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -18958,45 +18628,45 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [diff-match-patch](https://www.npmjs.com/package/diff-match-patch) (version 1.0.5) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -19004,24 +18674,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -19029,7 +18699,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -19043,18 +18713,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -19070,24 +18740,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -19104,14 +18774,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -19119,12 +18789,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -19134,7 +18804,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -19146,7 +18816,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -19157,11 +18827,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -19170,45 +18840,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright [yyyy] [name of copyright owner] - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [dom-accessibility-api](https://www.npmjs.com/package/dom-accessibility-api) (version 0.5.9) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: MIT License - + Copyright (c) 2020 Sebastian Silbermann - + 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 @@ -19216,31 +18884,30 @@ License files: 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. + - + ### [dom-helpers](https://www.npmjs.com/package/dom-helpers) (version 5.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jason Quense - + 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 @@ -19249,36 +18916,33 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [domify](https://www.npmjs.com/package/domify) (version 1.4.1) - License tags: MIT - + ### [dset](https://www.npmjs.com/package/dset) (version 3.1.4) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Luke Edwards (lukeed.com) - + 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 @@ -19286,31 +18950,31 @@ License files: 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. + - + ### [ee-first](https://www.npmjs.com/package/ee-first) (version 1.1.1) - License tags: MIT License files: +* LICENSE: -- LICENSE: - + The MIT License (MIT) - + Copyright (c) 2014 Jonathan Ong me@jongleberry.com - + 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 @@ -19318,51 +18982,49 @@ License files: 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. + - + ### [electron-dl](https://www.npmjs.com/package/electron-dl) (version 3.5.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [electron-squirrel-startup](https://www.npmjs.com/package/electron-squirrel-startup) (version 1.0.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -19370,24 +19032,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -19395,7 +19057,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -19409,18 +19071,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -19436,24 +19098,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -19470,14 +19132,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -19485,12 +19147,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -19500,7 +19162,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -19512,7 +19174,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -19523,11 +19185,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -19536,34 +19198,33 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [electron](https://www.npmjs.com/package/electron) (version 30.5.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) Electron contributors Copyright (c) 2013-2020 GitHub Inc. - + 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 @@ -19571,10 +19232,10 @@ License files: 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 @@ -19582,21 +19243,20 @@ License files: 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. + - + ### [encodeurl](https://www.npmjs.com/package/encodeurl) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2016 Douglas Christopher Wilson - + 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 @@ -19604,10 +19264,10 @@ License files: 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. @@ -19615,21 +19275,20 @@ License files: 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. + - + ### [encodeurl](https://www.npmjs.com/package/encodeurl) (version 2.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2016 Douglas Christopher Wilson - + 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 @@ -19637,10 +19296,10 @@ License files: 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. @@ -19648,31 +19307,30 @@ License files: 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. + - + ### [end-of-stream](https://www.npmjs.com/package/end-of-stream) (version 1.4.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Mathias Buus - + 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 @@ -19681,50 +19339,47 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [ensure-error](https://www.npmjs.com/package/ensure-error) (version 3.0.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [es-define-property](https://www.npmjs.com/package/es-define-property) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2024 Jordan Harband - + 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 @@ -19732,31 +19387,30 @@ License files: 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. + - + ### [es-errors](https://www.npmjs.com/package/es-errors) (version 1.3.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2024 Jordan Harband - + 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 @@ -19764,31 +19418,30 @@ License files: 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. + - + ### [es-get-iterator](https://www.npmjs.com/package/es-get-iterator) (version 1.1.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Jordan Harband - + 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 @@ -19796,43 +19449,41 @@ License files: 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. + - + ### [escape-goat](https://www.npmjs.com/package/escape-goat) (version 2.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [escape-html](https://www.npmjs.com/package/escape-html) (version 1.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2013 TJ Holowaychuk Copyright (c) 2015 Andreas Lubbe Copyright (c) 2015 Tiancheng "Timothy" Gu - + 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 @@ -19840,10 +19491,10 @@ License files: 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. @@ -19851,31 +19502,30 @@ License files: 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. + - + ### [escape-string-regexp](https://www.npmjs.com/package/escape-string-regexp) (version 1.0.5) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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 @@ -19883,28 +19533,27 @@ License files: 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. + - + ### [escodegen](https://www.npmjs.com/package/escodegen) (version 2.1.0) - License tags: BSD-2-Clause License files: - -- LICENSE.BSD: +* LICENSE.BSD: Copyright (C) 2012 Yusuke Suzuki (twitter: @Constellation) and other contributors. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19915,28 +19564,27 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [esprima](https://www.npmjs.com/package/esprima) (version 4.0.1) - License tags: BSD-2-Clause License files: - -- LICENSE.BSD: +* LICENSE.BSD: Copyright JS Foundation and other contributors, https://js.foundation/ - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19947,26 +19595,25 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [estraverse](https://www.npmjs.com/package/estraverse) (version 5.2.0) - License tags: BSD-2-Clause License files: - -- LICENSE.BSD: +* LICENSE.BSD: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19977,26 +19624,25 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [esutils](https://www.npmjs.com/package/esutils) (version 2.0.3) - License tags: BSD-2-Clause License files: - -- LICENSE.BSD: +* LICENSE.BSD: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20007,21 +19653,20 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [etag](https://www.npmjs.com/package/etag) (version 1.8.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2016 Douglas Christopher Wilson - + 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 @@ -20029,10 +19674,10 @@ License files: 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. @@ -20040,31 +19685,30 @@ License files: 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. + - + ### [eventemitter3](https://www.npmjs.com/package/eventemitter3) (version 1.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Arnout Kazemier - + 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 @@ -20072,31 +19716,30 @@ License files: 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. + - + ### [eventemitter3](https://www.npmjs.com/package/eventemitter3) (version 4.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Arnout Kazemier - + 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 @@ -20104,77 +19747,73 @@ License files: 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. + - + ### [events-mixin](https://www.npmjs.com/package/events-mixin) (version 1.3.0) - License tags: MIT - + ### [execa](https://www.npmjs.com/package/execa) (version 5.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [execa](https://www.npmjs.com/package/execa) (version 7.2.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [expand-template](https://www.npmjs.com/package/expand-template) (version 2.0.3) - License tags: (MIT OR WTFPL) License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2018 Lars-Magnus Skog - + 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 @@ -20183,22 +19822,20 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [express](https://www.npmjs.com/package/express) (version 4.21.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2009-2014 TJ Holowaychuk Copyright (c) 2013-2014 Roman Shtylman Copyright (c) 2014-2015 Douglas Christopher Wilson - + 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 @@ -20206,10 +19843,10 @@ License files: 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. @@ -20217,31 +19854,30 @@ License files: 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. + - + ### [ext-list](https://www.npmjs.com/package/ext-list) (version 2.2.2) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Kevin Mårtensson - + 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 @@ -20249,31 +19885,30 @@ License files: 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. + - + ### [ext-name](https://www.npmjs.com/package/ext-name) (version 5.0.0) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Kevin Mårtensson - + 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 @@ -20281,37 +19916,35 @@ License files: 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. + - + ### [facepaint](https://www.npmjs.com/package/facepaint) (version 1.2.1) - License tags: MIT - + ### [fast-deep-equal](https://www.npmjs.com/package/fast-deep-equal) (version 2.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2017 Evgeny Poberezkin - + 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 @@ -20319,31 +19952,30 @@ License files: 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. + - + ### [fast-memoize](https://www.npmjs.com/package/fast-memoize) (version 2.5.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2016 Caio Gondim - + 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 @@ -20351,31 +19983,30 @@ License files: 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. + - + ### [fast-xml-parser](https://www.npmjs.com/package/fast-xml-parser) (version 4.4.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2017 Amit Kumar Gupta - + 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 @@ -20383,31 +20014,30 @@ License files: 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. + - + ### [fetch-blob](https://www.npmjs.com/package/fetch-blob) (version 3.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 David Frank - + 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 @@ -20415,19 +20045,18 @@ License files: 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. + - + ### [file-uri-to-path](https://www.npmjs.com/package/file-uri-to-path) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2014 Nathan Rajlich - + 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 @@ -20435,10 +20064,10 @@ License files: 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. @@ -20446,21 +20075,20 @@ License files: 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. + - + ### [finalhandler](https://www.npmjs.com/package/finalhandler) (version 1.3.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2022 Douglas Christopher Wilson - + 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 @@ -20468,10 +20096,10 @@ License files: 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. @@ -20479,51 +20107,49 @@ License files: 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. + - + ### [first-chunk-stream](https://www.npmjs.com/package/first-chunk-stream) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [focus-trap-react](https://www.npmjs.com/package/focus-trap-react) (version 9.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 David Clark - + 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 @@ -20531,31 +20157,31 @@ License files: 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. + + - + ### [focus-trap](https://www.npmjs.com/package/focus-trap) (version 6.9.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015-2016 David Clark - + 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 @@ -20563,31 +20189,30 @@ License files: 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. + - + ### [for-each](https://www.npmjs.com/package/for-each) (version 0.3.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2012 Raynos. - + 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 @@ -20595,31 +20220,31 @@ License files: 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. + + - + ### [formdata-polyfill](https://www.npmjs.com/package/formdata-polyfill) (version 4.0.10) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Jimmy Karl Roland Wärting - + 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 @@ -20627,21 +20252,20 @@ License files: 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. + - + ### [forwarded](https://www.npmjs.com/package/forwarded) (version 0.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 Douglas Christopher Wilson - + 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 @@ -20649,10 +20273,10 @@ License files: 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. @@ -20660,22 +20284,21 @@ License files: 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. + - + ### [fresh](https://www.npmjs.com/package/fresh) (version 0.5.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012 TJ Holowaychuk Copyright (c) 2016-2017 Douglas Christopher Wilson - + 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 @@ -20683,10 +20306,10 @@ License files: 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. @@ -20694,31 +20317,30 @@ License files: 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. + - + ### [fs-constants](https://www.npmjs.com/package/fs-constants) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2018 Mathias Buus - + 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 @@ -20726,55 +20348,53 @@ License files: 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. + - + ### [fs-extra](https://www.npmjs.com/package/fs-extra) (version 11.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2011-2017 JP Richardson - + 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. + - + ### [function-bind](https://www.npmjs.com/package/function-bind) (version 1.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2013 Raynos. - + 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 @@ -20782,31 +20402,31 @@ License files: 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. + + - + ### [functions-have-names](https://www.npmjs.com/package/functions-have-names) (version 1.2.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Jordan Harband - + 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 @@ -20814,31 +20434,30 @@ License files: 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. + - + ### [fuse.js](https://www.npmjs.com/package/fuse.js) (version 6.5.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -20846,24 +20465,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -20871,7 +20490,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -20885,18 +20504,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -20912,24 +20531,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -20946,14 +20565,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -20961,12 +20580,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -20976,7 +20595,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -20988,7 +20607,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -20999,11 +20618,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -21012,63 +20631,61 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2017 Kirollos Risk - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [gensync](https://www.npmjs.com/package/gensync) (version 1.0.0-beta.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2018 Logan Smyth - + 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. + - + ### [get-intrinsic](https://www.npmjs.com/package/get-intrinsic) (version 1.2.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2020 Jordan Harband - + 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 @@ -21076,41 +20693,39 @@ License files: 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. + - + ### [get-stream](https://www.npmjs.com/package/get-stream) (version 6.0.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [get-uri](https://www.npmjs.com/package/get-uri) (version 6.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Nathan Rajlich - + 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 @@ -21118,10 +20733,10 @@ License files: 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. @@ -21130,85 +20745,80 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [github-from-package](https://www.npmjs.com/package/github-from-package) (version 0.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: This software is released under the MIT license: - + 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. + - + ### [globals](https://www.npmjs.com/package/globals) (version 11.12.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [good-listener](https://www.npmjs.com/package/good-listener) (version 1.2.2) - License tags: MIT - + ### [gopd](https://www.npmjs.com/package/gopd) (version 1.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2022 Jordan Harband - + 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 @@ -21216,25 +20826,24 @@ License files: 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. + - + ### [graceful-fs](https://www.npmjs.com/package/graceful-fs) (version 4.2.11) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -21242,71 +20851,68 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [has-flag](https://www.npmjs.com/package/has-flag) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [has-flag](https://www.npmjs.com/package/has-flag) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [has-property-descriptors](https://www.npmjs.com/package/has-property-descriptors) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2022 Inspect JS - + 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 @@ -21314,31 +20920,30 @@ License files: 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. + - + ### [has-proto](https://www.npmjs.com/package/has-proto) (version 1.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2022 Inspect JS - + 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 @@ -21346,31 +20951,30 @@ License files: 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. + - + ### [has-symbols](https://www.npmjs.com/package/has-symbols) (version 1.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Jordan Harband - + 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 @@ -21378,31 +20982,30 @@ License files: 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. + - + ### [has-tostringtag](https://www.npmjs.com/package/has-tostringtag) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021 Inspect JS - + 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 @@ -21410,31 +21013,30 @@ License files: 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. + - + ### [hasown](https://www.npmjs.com/package/hasown) (version 2.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Jordan Harband and contributors - + 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 @@ -21442,36 +21044,35 @@ License files: 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. + - + ### [heap-js](https://www.npmjs.com/package/heap-js) (version 2.3.0) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: BSD 3-Clause License - + Copyright (c) 2017, Ignacio Lago All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -21482,36 +21083,35 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [highlight.js](https://www.npmjs.com/package/highlight.js) (version 11.5.1) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: BSD 3-Clause License - + Copyright (c) 2006, Ivan Sagalaev. All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -21522,31 +21122,30 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [highlightjs-graphql](https://www.npmjs.com/package/highlightjs-graphql) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 David Peek - + 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 @@ -21554,27 +21153,26 @@ License files: 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. + - + ### [hoist-non-react-statics](https://www.npmjs.com/package/hoist-non-react-statics) (version 3.3.2) - License tags: BSD-3-Clause License files: - -- LICENSE.md: +* LICENSE.md: Software License Agreement (BSD License) ======================================== - + Copyright (c) 2015, Yahoo! Inc. All rights reserved. ---------------------------------------------------- - + Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, @@ -21583,7 +21181,7 @@ License files: * Neither the name of Yahoo! Inc. nor the names of YUI's contributors may be used to endorse or promote products derived from this software without specific prior written permission of Yahoo! Inc. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -21594,32 +21192,32 @@ License files: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [http-errors](https://www.npmjs.com/package/http-errors) (version 2.0.0) - License tags: MIT License files: +* LICENSE: -- LICENSE: - + The MIT License (MIT) - + Copyright (c) 2014 Jonathan Ong me@jongleberry.com Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com - + 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 @@ -21627,21 +21225,20 @@ License files: 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. + - + ### [http-proxy-agent](https://www.npmjs.com/package/http-proxy-agent) (version 7.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Nathan Rajlich - + 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 @@ -21649,10 +21246,10 @@ License files: 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. @@ -21660,21 +21257,20 @@ License files: 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. + - + ### [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent) (version 7.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Nathan Rajlich - + 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 @@ -21682,10 +21278,10 @@ License files: 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. @@ -21694,30 +21290,28 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [human-signals](https://www.npmjs.com/package/human-signals) (version 2.1.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -21725,24 +21319,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -21750,7 +21344,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -21764,18 +21358,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -21791,24 +21385,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -21825,14 +21419,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -21840,12 +21434,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -21855,7 +21449,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -21867,7 +21461,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -21878,11 +21472,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -21891,45 +21485,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2019 ehmicky - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [human-signals](https://www.npmjs.com/package/human-signals) (version 4.3.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -21937,24 +21530,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -21962,7 +21555,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -21976,18 +21569,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -22003,24 +21596,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -22037,14 +21630,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -22052,12 +21645,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -22067,7 +21660,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -22079,7 +21672,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -22090,11 +21683,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -22103,33 +21696,32 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2022 ehmicky - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [iconv-lite](https://www.npmjs.com/package/iconv-lite) (version 0.4.24) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2011 Alexander Shtuchkin - + 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 @@ -22137,10 +21729,10 @@ License files: 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 @@ -22148,53 +21740,51 @@ License files: 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. + + - + ### [ieee754](https://www.npmjs.com/package/ieee754) (version 1.2.1) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright 2008 Fair Oaks Labs, Inc. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [imurmurhash](https://www.npmjs.com/package/imurmurhash) (version 0.1.4) - License tags: MIT - + ### [inherits](https://www.npmjs.com/package/inherits) (version 2.0.4) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, @@ -22202,25 +21792,25 @@ License files: LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + - + ### [ini](https://www.npmjs.com/package/ini) (version 1.3.8) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -22228,31 +21818,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [internal-slot](https://www.npmjs.com/package/internal-slot) (version 1.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Jordan Harband - + 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 @@ -22260,31 +21849,31 @@ License files: 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. + - + ### [interruptor](https://www.npmjs.com/package/interruptor) (version 1.0.2) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -22292,24 +21881,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -22317,7 +21906,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -22331,18 +21920,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -22358,24 +21947,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -22392,14 +21981,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -22407,12 +21996,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -22422,7 +22011,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -22434,7 +22023,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -22445,45 +22034,45 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + Copyright 2020 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [ip-address](https://www.npmjs.com/package/ip-address) (version 9.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2011 by Beau Gunderson - + 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 @@ -22491,29 +22080,28 @@ License files: 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. + - + ### [ipaddr.js](https://www.npmjs.com/package/ipaddr.js) (version 1.9.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2011-2017 whitequark - + 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 @@ -22521,29 +22109,28 @@ License files: 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. + - + ### [ipaddr.js](https://www.npmjs.com/package/ipaddr.js) (version 2.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2011-2017 whitequark - + 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 @@ -22551,68 +22138,65 @@ License files: 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. + - + ### [ipv6-normalize](https://www.npmjs.com/package/ipv6-normalize) (version 1.0.1) - License tags: MIT - + ### [is-arguments](https://www.npmjs.com/package/is-arguments) (version 1.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Jordan Harband - + 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. + - + ### [is-array-buffer](https://www.npmjs.com/package/is-array-buffer) (version 3.0.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2015 Chen Gengyuan, Inspect JS - + 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 @@ -22620,31 +22204,30 @@ License files: 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. + - + ### [is-bigint](https://www.npmjs.com/package/is-bigint) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2018 Jordan Harband - + 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 @@ -22652,31 +22235,30 @@ License files: 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. + - + ### [is-boolean-object](https://www.npmjs.com/package/is-boolean-object) (version 1.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -22684,31 +22266,31 @@ License files: 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. + + - + ### [is-callable](https://www.npmjs.com/package/is-callable) (version 1.2.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -22716,31 +22298,31 @@ License files: 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. + + - + ### [is-date-object](https://www.npmjs.com/package/is-date-object) (version 1.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -22748,97 +22330,93 @@ License files: 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. + + - + ### [is-docker](https://www.npmjs.com/package/is-docker) (version 2.2.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [is-docker](https://www.npmjs.com/package/is-docker) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [is-electron-renderer](https://www.npmjs.com/package/is-electron-renderer) (version 2.0.1) - License tags: MIT - + ### [is-inside-container](https://www.npmjs.com/package/is-inside-container) (version 1.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [is-map](https://www.npmjs.com/package/is-map) (version 2.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Inspect JS - + 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 @@ -22846,31 +22424,30 @@ License files: 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. + - + ### [is-number-object](https://www.npmjs.com/package/is-number-object) (version 1.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -22878,31 +22455,31 @@ License files: 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. + + - + ### [is-plain-obj](https://www.npmjs.com/package/is-plain-obj) (version 1.1.0) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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 @@ -22910,62 +22487,60 @@ License files: 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. + - + ### [is-regex](https://www.npmjs.com/package/is-regex) (version 1.1.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Jordan Harband - + 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. + - + ### [is-set](https://www.npmjs.com/package/is-set) (version 2.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Inspect JS - + 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 @@ -22973,31 +22548,30 @@ License files: 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. + - + ### [is-shared-array-buffer](https://www.npmjs.com/package/is-shared-array-buffer) (version 1.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021 Inspect JS - + 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 @@ -23005,71 +22579,68 @@ License files: 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. + - + ### [is-stream](https://www.npmjs.com/package/is-stream) (version 2.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [is-stream](https://www.npmjs.com/package/is-stream) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [is-string](https://www.npmjs.com/package/is-string) (version 1.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -23077,31 +22648,31 @@ License files: 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. + + - + ### [is-symbol](https://www.npmjs.com/package/is-symbol) (version 1.0.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -23109,51 +22680,50 @@ License files: 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. + + - + ### [is-utf8](https://www.npmjs.com/package/is-utf8) (version 0.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (C) 2014 Wei Fanzhe - + 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. + - + ### [is-weakmap](https://www.npmjs.com/package/is-weakmap) (version 2.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Inspect JS - + 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 @@ -23161,31 +22731,30 @@ License files: 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. + - + ### [is-weakset](https://www.npmjs.com/package/is-weakset) (version 2.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Inspect JS - + 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 @@ -23193,51 +22762,49 @@ License files: 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. + - + ### [is-wsl](https://www.npmjs.com/package/is-wsl) (version 2.2.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [isarray](https://www.npmjs.com/package/isarray) (version 2.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2013 Julian Gruber - + 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 @@ -23245,25 +22812,24 @@ License files: 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. + - + ### [isexe](https://www.npmjs.com/package/isexe) (version 2.0.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -23271,31 +22837,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [javascript-stringify](https://www.npmjs.com/package/javascript-stringify) (version 2.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013 Blake Embrey (hello@blakeembrey.com) - + 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 @@ -23303,31 +22868,30 @@ License files: 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. + - + ### [jose](https://www.npmjs.com/package/jose) (version 4.15.5) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2018 Filip Skokan - + 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 @@ -23335,31 +22899,30 @@ License files: 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. + - + ### [js-tokens](https://www.npmjs.com/package/js-tokens) (version 4.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell - + 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 @@ -23367,31 +22930,30 @@ License files: 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. + - + ### [js-yaml](https://www.npmjs.com/package/js-yaml) (version 3.14.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (C) 2011-2015 by Vitaly Puzrin - + 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 @@ -23399,31 +22961,30 @@ License files: 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. + - + ### [js-yaml](https://www.npmjs.com/package/js-yaml) (version 4.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (C) 2011-2015 by Vitaly Puzrin - + 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 @@ -23431,22 +22992,21 @@ License files: 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. + - + ### [jsbn](https://www.npmjs.com/package/jsbn) (version 1.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Licensing --------- - + This software is covered under the following copyright: - + /* * Copyright (c) 2003-2005 Tom Wu * All Rights Reserved. @@ -23462,9 +23022,9 @@ License files: * 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" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER @@ -23477,24 +23037,23 @@ License files: * All redistributions must retain an intact copy of this copyright notice * and disclaimer. */ - + Address all questions regarding this license to: - + Tom Wu tjw@cs.Stanford.EDU + - + ### [jsesc](https://www.npmjs.com/package/jsesc) (version 2.5.2) - License tags: MIT License files: - -- LICENSE-MIT.txt: +* LICENSE-MIT.txt: Copyright Mathias Bynens - + 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 @@ -23502,10 +23061,10 @@ License files: 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 @@ -23513,31 +23072,30 @@ License files: 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. + - + ### [json5](https://www.npmjs.com/package/json5) (version 2.2.3) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: MIT License - + Copyright (c) 2012-2018 Aseem Kishore, and [others]. - + 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 @@ -23545,65 +23103,62 @@ License files: 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. - + [others]: https://github.com/json5/json5/contributors + - + ### [jsondiffpatch](https://www.npmjs.com/package/jsondiffpatch) (version 0.5.0) - License tags: MIT - + ### [jsonfile](https://www.npmjs.com/package/jsonfile) (version 6.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2015, JP Richardson - + 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. + - + ### [kerberos](https://www.npmjs.com/package/kerberos) (version 2.1.1) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -23611,24 +23166,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -23636,7 +23191,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -23650,18 +23205,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -23677,24 +23232,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -23711,14 +23266,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -23726,12 +23281,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -23741,7 +23296,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -23753,7 +23308,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -23764,11 +23319,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -23777,39 +23332,37 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright [yyyy] [name of copyright owner] - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [key-tree-store](https://www.npmjs.com/package/key-tree-store) (version 1.3.0) - License tags: MIT - + ### [keytar](https://www.npmjs.com/package/keytar) (version 7.9.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright (c) 2013 GitHub Inc. - + 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 @@ -23817,10 +23370,10 @@ License files: 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 @@ -23828,32 +23381,31 @@ License files: 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. + - + ### [leaflet-defaulticon-compatibility](https://www.npmjs.com/package/leaflet-defaulticon-compatibility) (version 0.1.1) - License tags: BSD-2-Clause License files: - -- LICENSE: +* LICENSE: BSD 2-Clause License - + Copyright (c) 2018, ghybs All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -23864,93 +23416,68 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [leaflet-draw](https://www.npmjs.com/package/leaflet-draw) (version 1.0.4) - License tags: MIT - + ### [leaflet](https://www.npmjs.com/package/leaflet) (version 1.5.1) - License tags: BSD-2-Clause License files: +* LICENSE: + + Copyright (c) 2010-2018, Vladimir Agafonkin + Copyright (c) 2010-2011, CloudMade + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + -- LICENSE: - - Copyright (c) 2010-2018, Vladimir Agafonkin - - Copyright (c) 2010-2011, CloudMade - - All rights reserved. - - - - Redistribution and use in source and binary forms, with or without modification, are - - permitted provided that the following conditions are met: - - - - 1. Redistributions of source code must retain the above copyright notice, this list of - - conditions and the following disclaimer. - - - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - - of conditions and the following disclaimer in the documentation and/or other materials - - provided with the distribution. - - - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - - COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ### [local-links](https://www.npmjs.com/package/local-links) (version 1.4.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Luke Karrys - + 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 @@ -23958,31 +23485,30 @@ License files: 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. + - + ### [lodash-es](https://www.npmjs.com/package/lodash-es) (version 4.17.21) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright OpenJS Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -23990,10 +23516,10 @@ License files: 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 @@ -24001,36 +23527,35 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - - -### [lodash.\_arrayeach](https://www.npmjs.com/package/lodash._arrayeach) (version 3.0.0) + +### [lodash._arrayeach](https://www.npmjs.com/package/lodash._arrayeach) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24038,10 +23563,10 @@ License files: 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 @@ -24049,21 +23574,20 @@ License files: 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. + - - -### [lodash.\_arraymap](https://www.npmjs.com/package/lodash._arraymap) (version 3.0.0) + +### [lodash._arraymap](https://www.npmjs.com/package/lodash._arraymap) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24071,10 +23595,10 @@ License files: 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 @@ -24082,21 +23606,20 @@ License files: 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. + - - -### [lodash.\_baseassign](https://www.npmjs.com/package/lodash._baseassign) (version 3.2.0) + +### [lodash._baseassign](https://www.npmjs.com/package/lodash._baseassign) (version 3.2.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24104,10 +23627,10 @@ License files: 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 @@ -24115,21 +23638,20 @@ License files: 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. + - - -### [lodash.\_basecallback](https://www.npmjs.com/package/lodash._basecallback) (version 3.3.1) + +### [lodash._basecallback](https://www.npmjs.com/package/lodash._basecallback) (version 3.3.1) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24137,10 +23659,10 @@ License files: 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 @@ -24148,21 +23670,20 @@ License files: 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. + - - -### [lodash.\_basecopy](https://www.npmjs.com/package/lodash._basecopy) (version 3.0.1) + +### [lodash._basecopy](https://www.npmjs.com/package/lodash._basecopy) (version 3.0.1) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24170,10 +23691,10 @@ License files: 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 @@ -24181,21 +23702,20 @@ License files: 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. + - - -### [lodash.\_basedifference](https://www.npmjs.com/package/lodash._basedifference) (version 3.0.3) + +### [lodash._basedifference](https://www.npmjs.com/package/lodash._basedifference) (version 3.0.3) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24203,10 +23723,10 @@ License files: 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 @@ -24214,21 +23734,20 @@ License files: 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. + - - -### [lodash.\_baseeach](https://www.npmjs.com/package/lodash._baseeach) (version 3.0.4) + +### [lodash._baseeach](https://www.npmjs.com/package/lodash._baseeach) (version 3.0.4) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24236,10 +23755,10 @@ License files: 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 @@ -24247,21 +23766,20 @@ License files: 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. + - - -### [lodash.\_basefind](https://www.npmjs.com/package/lodash._basefind) (version 3.0.0) + +### [lodash._basefind](https://www.npmjs.com/package/lodash._basefind) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24269,10 +23787,10 @@ License files: 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 @@ -24280,21 +23798,20 @@ License files: 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. + - - -### [lodash.\_basefindindex](https://www.npmjs.com/package/lodash._basefindindex) (version 3.6.0) + +### [lodash._basefindindex](https://www.npmjs.com/package/lodash._basefindindex) (version 3.6.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24302,10 +23819,10 @@ License files: 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 @@ -24313,21 +23830,20 @@ License files: 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. + - - -### [lodash.\_baseflatten](https://www.npmjs.com/package/lodash._baseflatten) (version 3.1.4) + +### [lodash._baseflatten](https://www.npmjs.com/package/lodash._baseflatten) (version 3.1.4) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24335,10 +23851,10 @@ License files: 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 @@ -24346,21 +23862,20 @@ License files: 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. + - - -### [lodash.\_basefor](https://www.npmjs.com/package/lodash._basefor) (version 3.0.3) + +### [lodash._basefor](https://www.npmjs.com/package/lodash._basefor) (version 3.0.3) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24368,10 +23883,10 @@ License files: 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 @@ -24379,21 +23894,20 @@ License files: 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. + - - -### [lodash.\_baseget](https://www.npmjs.com/package/lodash._baseget) (version 3.7.2) + +### [lodash._baseget](https://www.npmjs.com/package/lodash._baseget) (version 3.7.2) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24401,10 +23915,10 @@ License files: 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 @@ -24412,21 +23926,20 @@ License files: 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. + - - -### [lodash.\_baseindexof](https://www.npmjs.com/package/lodash._baseindexof) (version 3.1.0) + +### [lodash._baseindexof](https://www.npmjs.com/package/lodash._baseindexof) (version 3.1.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24434,10 +23947,10 @@ License files: 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 @@ -24445,21 +23958,20 @@ License files: 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. + - - -### [lodash.\_baseisequal](https://www.npmjs.com/package/lodash._baseisequal) (version 3.0.7) + +### [lodash._baseisequal](https://www.npmjs.com/package/lodash._baseisequal) (version 3.0.7) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24467,32 +23979,31 @@ License files: 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. - - + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + -### [lodash.\_baseslice](https://www.npmjs.com/package/lodash._baseslice) (version 3.0.3) + +### [lodash._baseslice](https://www.npmjs.com/package/lodash._baseslice) (version 3.0.3) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24500,10 +24011,10 @@ License files: 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 @@ -24511,21 +24022,20 @@ License files: 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. + - - -### [lodash.\_baseuniq](https://www.npmjs.com/package/lodash._baseuniq) (version 3.0.3) + +### [lodash._baseuniq](https://www.npmjs.com/package/lodash._baseuniq) (version 3.0.3) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24533,10 +24043,10 @@ License files: 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 @@ -24544,21 +24054,20 @@ License files: 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. + - - -### [lodash.\_basevalues](https://www.npmjs.com/package/lodash._basevalues) (version 3.0.0) + +### [lodash._basevalues](https://www.npmjs.com/package/lodash._basevalues) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24566,10 +24075,10 @@ License files: 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 @@ -24577,21 +24086,20 @@ License files: 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. + - - -### [lodash.\_bindcallback](https://www.npmjs.com/package/lodash._bindcallback) (version 3.0.1) + +### [lodash._bindcallback](https://www.npmjs.com/package/lodash._bindcallback) (version 3.0.1) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24599,10 +24107,10 @@ License files: 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 @@ -24610,21 +24118,20 @@ License files: 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. + - - -### [lodash.\_cacheindexof](https://www.npmjs.com/package/lodash._cacheindexof) (version 3.0.2) + +### [lodash._cacheindexof](https://www.npmjs.com/package/lodash._cacheindexof) (version 3.0.2) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24632,10 +24139,10 @@ License files: 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 @@ -24643,21 +24150,20 @@ License files: 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. + - - -### [lodash.\_createassigner](https://www.npmjs.com/package/lodash._createassigner) (version 3.1.1) + +### [lodash._createassigner](https://www.npmjs.com/package/lodash._createassigner) (version 3.1.1) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24665,10 +24171,10 @@ License files: 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 @@ -24676,21 +24182,20 @@ License files: 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. + - - -### [lodash.\_createcache](https://www.npmjs.com/package/lodash._createcache) (version 3.1.2) + +### [lodash._createcache](https://www.npmjs.com/package/lodash._createcache) (version 3.1.2) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24698,10 +24203,10 @@ License files: 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 @@ -24709,21 +24214,20 @@ License files: 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. + - - -### [lodash.\_createwrapper](https://www.npmjs.com/package/lodash._createwrapper) (version 3.2.0) + +### [lodash._createwrapper](https://www.npmjs.com/package/lodash._createwrapper) (version 3.2.0) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24731,10 +24235,10 @@ License files: 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 @@ -24742,21 +24246,20 @@ License files: 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. + - - -### [lodash.\_getnative](https://www.npmjs.com/package/lodash._getnative) (version 3.9.1) + +### [lodash._getnative](https://www.npmjs.com/package/lodash._getnative) (version 3.9.1) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24764,10 +24267,10 @@ License files: 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 @@ -24775,21 +24278,20 @@ License files: 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. + - - -### [lodash.\_invokepath](https://www.npmjs.com/package/lodash._invokepath) (version 3.7.2) + +### [lodash._invokepath](https://www.npmjs.com/package/lodash._invokepath) (version 3.7.2) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24797,10 +24299,10 @@ License files: 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 @@ -24808,21 +24310,20 @@ License files: 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. + - - -### [lodash.\_isiterateecall](https://www.npmjs.com/package/lodash._isiterateecall) (version 3.0.9) + +### [lodash._isiterateecall](https://www.npmjs.com/package/lodash._isiterateecall) (version 3.0.9) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24830,10 +24331,10 @@ License files: 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 @@ -24841,21 +24342,20 @@ License files: 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. + - - -### [lodash.\_pickbyarray](https://www.npmjs.com/package/lodash._pickbyarray) (version 3.0.2) + +### [lodash._pickbyarray](https://www.npmjs.com/package/lodash._pickbyarray) (version 3.0.2) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24863,10 +24363,10 @@ License files: 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 @@ -24874,21 +24374,20 @@ License files: 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. + - - -### [lodash.\_pickbycallback](https://www.npmjs.com/package/lodash._pickbycallback) (version 3.0.0) + +### [lodash._pickbycallback](https://www.npmjs.com/package/lodash._pickbycallback) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24896,10 +24395,10 @@ License files: 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 @@ -24907,21 +24406,20 @@ License files: 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. + - - -### [lodash.\_replaceholders](https://www.npmjs.com/package/lodash._replaceholders) (version 3.0.0) + +### [lodash._replaceholders](https://www.npmjs.com/package/lodash._replaceholders) (version 3.0.0) License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24929,10 +24427,10 @@ License files: 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 @@ -24940,33 +24438,32 @@ License files: 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. + - - -### [lodash.\_root](https://www.npmjs.com/package/lodash._root) (version 3.0.1) + +### [lodash._root](https://www.npmjs.com/package/lodash._root) (version 3.0.1) License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24974,21 +24471,20 @@ License files: 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. + - - -### [lodash.\_topath](https://www.npmjs.com/package/lodash._topath) (version 3.8.1) + +### [lodash._topath](https://www.npmjs.com/package/lodash._topath) (version 3.8.1) License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -24996,10 +24492,10 @@ License files: 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 @@ -25007,21 +24503,20 @@ License files: 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. + - + ### [lodash.assign](https://www.npmjs.com/package/lodash.assign) (version 3.2.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25029,10 +24524,10 @@ License files: 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 @@ -25040,21 +24535,20 @@ License files: 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. + - + ### [lodash.before](https://www.npmjs.com/package/lodash.before) (version 3.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25062,10 +24556,10 @@ License files: 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 @@ -25073,21 +24567,20 @@ License files: 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. + - + ### [lodash.bind](https://www.npmjs.com/package/lodash.bind) (version 3.1.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25095,10 +24588,10 @@ License files: 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 @@ -25106,21 +24599,20 @@ License files: 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. + - + ### [lodash.difference](https://www.npmjs.com/package/lodash.difference) (version 3.2.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25128,10 +24620,10 @@ License files: 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 @@ -25139,21 +24631,20 @@ License files: 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. + - + ### [lodash.escape](https://www.npmjs.com/package/lodash.escape) (version 3.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25161,10 +24652,10 @@ License files: 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 @@ -25172,21 +24663,20 @@ License files: 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. + - + ### [lodash.find](https://www.npmjs.com/package/lodash.find) (version 3.2.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25194,10 +24684,10 @@ License files: 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 @@ -25205,21 +24695,20 @@ License files: 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. + - + ### [lodash.flatten](https://www.npmjs.com/package/lodash.flatten) (version 3.0.2) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25227,10 +24716,10 @@ License files: 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 @@ -25238,21 +24727,20 @@ License files: 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. + - + ### [lodash.foreach](https://www.npmjs.com/package/lodash.foreach) (version 3.0.3) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25260,10 +24748,10 @@ License files: 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 @@ -25271,21 +24759,20 @@ License files: 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. + - + ### [lodash.forown](https://www.npmjs.com/package/lodash.forown) (version 3.0.2) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25293,10 +24780,10 @@ License files: 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 @@ -25304,21 +24791,20 @@ License files: 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. + - + ### [lodash.get](https://www.npmjs.com/package/lodash.get) (version 3.7.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25326,10 +24812,10 @@ License files: 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 @@ -25337,21 +24823,20 @@ License files: 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. + - + ### [lodash.has](https://www.npmjs.com/package/lodash.has) (version 3.2.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25359,10 +24844,10 @@ License files: 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 @@ -25370,21 +24855,20 @@ License files: 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. + - + ### [lodash.includes](https://www.npmjs.com/package/lodash.includes) (version 3.1.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25392,10 +24876,10 @@ License files: 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 @@ -25403,21 +24887,20 @@ License files: 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. + - + ### [lodash.invoke](https://www.npmjs.com/package/lodash.invoke) (version 3.2.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25425,10 +24908,10 @@ License files: 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 @@ -25436,31 +24919,30 @@ License files: 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. + - + ### [lodash.isarguments](https://www.npmjs.com/package/lodash.isarguments) (version 3.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright jQuery Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -25468,10 +24950,10 @@ License files: 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 @@ -25479,36 +24961,35 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - + ### [lodash.isarray](https://www.npmjs.com/package/lodash.isarray) (version 3.0.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25516,10 +24997,10 @@ License files: 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 @@ -25527,21 +25008,20 @@ License files: 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. + - + ### [lodash.isdate](https://www.npmjs.com/package/lodash.isdate) (version 3.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25549,10 +25029,10 @@ License files: 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 @@ -25560,21 +25040,20 @@ License files: 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. + - + ### [lodash.isempty](https://www.npmjs.com/package/lodash.isempty) (version 3.0.4) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25582,10 +25061,10 @@ License files: 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 @@ -25593,21 +25072,20 @@ License files: 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. + - + ### [lodash.isequal](https://www.npmjs.com/package/lodash.isequal) (version 3.0.4) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25615,10 +25093,10 @@ License files: 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 @@ -25626,31 +25104,30 @@ License files: 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. + - + ### [lodash.isfunction](https://www.npmjs.com/package/lodash.isfunction) (version 3.0.9) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright JS Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -25658,10 +25135,10 @@ License files: 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 @@ -25669,36 +25146,35 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - + ### [lodash.isobject](https://www.npmjs.com/package/lodash.isobject) (version 3.0.2) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25706,10 +25182,10 @@ License files: 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 @@ -25717,21 +25193,20 @@ License files: 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. + - + ### [lodash.isstring](https://www.npmjs.com/package/lodash.isstring) (version 3.0.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25739,10 +25214,10 @@ License files: 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 @@ -25750,31 +25225,30 @@ License files: 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. + - + ### [lodash.istypedarray](https://www.npmjs.com/package/lodash.istypedarray) (version 3.0.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright jQuery Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -25782,10 +25256,10 @@ License files: 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 @@ -25793,36 +25267,35 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - + ### [lodash.keys](https://www.npmjs.com/package/lodash.keys) (version 3.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25830,10 +25303,10 @@ License files: 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 @@ -25841,21 +25314,20 @@ License files: 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. + - + ### [lodash.keysin](https://www.npmjs.com/package/lodash.keysin) (version 3.0.8) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25863,10 +25335,10 @@ License files: 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 @@ -25874,21 +25346,20 @@ License files: 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. + - + ### [lodash.last](https://www.npmjs.com/package/lodash.last) (version 3.0.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25896,10 +25367,10 @@ License files: 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 @@ -25907,31 +25378,30 @@ License files: 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. + - + ### [lodash.merge](https://www.npmjs.com/package/lodash.merge) (version 4.6.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright OpenJS Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -25939,10 +25409,10 @@ License files: 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 @@ -25950,36 +25420,35 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - + ### [lodash.omit](https://www.npmjs.com/package/lodash.omit) (version 3.1.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -25987,10 +25456,10 @@ License files: 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 @@ -25998,21 +25467,20 @@ License files: 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. + - + ### [lodash.once](https://www.npmjs.com/package/lodash.once) (version 3.0.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26020,10 +25488,10 @@ License files: 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 @@ -26031,21 +25499,20 @@ License files: 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. + - + ### [lodash.pairs](https://www.npmjs.com/package/lodash.pairs) (version 3.0.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26053,10 +25520,10 @@ License files: 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 @@ -26064,21 +25531,20 @@ License files: 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. + - + ### [lodash.pick](https://www.npmjs.com/package/lodash.pick) (version 3.1.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26086,10 +25552,10 @@ License files: 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 @@ -26097,21 +25563,20 @@ License files: 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. + - + ### [lodash.restparam](https://www.npmjs.com/package/lodash.restparam) (version 3.6.1) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26119,10 +25584,10 @@ License files: 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 @@ -26130,21 +25595,20 @@ License files: 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. + - + ### [lodash.result](https://www.npmjs.com/package/lodash.result) (version 3.1.2) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26152,10 +25616,10 @@ License files: 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 @@ -26163,21 +25627,20 @@ License files: 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. + - + ### [lodash.union](https://www.npmjs.com/package/lodash.union) (version 3.1.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright 2012-2015 The Dojo Foundation Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26185,10 +25648,10 @@ License files: 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 @@ -26196,21 +25659,20 @@ License files: 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. + - + ### [lodash.uniqueid](https://www.npmjs.com/package/lodash.uniqueid) (version 3.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright 2012-2016 The Dojo Foundation Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + 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 @@ -26218,10 +25680,10 @@ License files: 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 @@ -26229,31 +25691,30 @@ License files: 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. + - + ### [lodash](https://www.npmjs.com/package/lodash) (version 4.17.21) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright OpenJS Foundation and other contributors - + Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - + This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/lodash/lodash - + The following license applies to all parts of this software except as documented below: - + ==== - + 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 @@ -26261,10 +25722,10 @@ License files: 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 @@ -26272,40 +25733,39 @@ License files: 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. - + ==== - + Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. - + CC0: http://creativecommons.org/publicdomain/zero/1.0/ - + ==== - + Files located in the node_modules and vendor directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. + - + ### [lru-cache](https://www.npmjs.com/package/lru-cache) (version 11.0.1) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -26313,25 +25773,24 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [lru-cache](https://www.npmjs.com/package/lru-cache) (version 5.1.1) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -26339,25 +25798,24 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [lru-cache](https://www.npmjs.com/package/lru-cache) (version 6.0.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -26365,31 +25823,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [lz-string](https://www.npmjs.com/package/lz-string) (version 1.5.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2013 pieroxy - + 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 @@ -26397,31 +25854,30 @@ License files: 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. + - + ### [marky](https://www.npmjs.com/package/marky) (version 1.2.2) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the @@ -26429,24 +25885,24 @@ License files: entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, @@ -26454,7 +25910,7 @@ License files: License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for @@ -26468,22 +25924,22 @@ License files: discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. - + Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. - + Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent @@ -26498,24 +25954,24 @@ License files: contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. - + You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and - + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding @@ -26530,32 +25986,32 @@ License files: distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. - + Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. - + This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. - + Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, @@ -26564,9 +26020,9 @@ License files: FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. - + In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed @@ -26577,9 +26033,9 @@ License files: for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. - + While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with @@ -26589,11 +26045,11 @@ License files: each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be @@ -26601,50 +26057,49 @@ License files: recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2016 Nolan Lawson - - + + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [matches-selector](https://www.npmjs.com/package/matches-selector) (version 0.0.1) - License tags: MIT - + ### [matches-selector](https://www.npmjs.com/package/matches-selector) (version 1.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2013 Forbes Lindesay - + 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 @@ -26653,20 +26108,18 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [media-typer](https://www.npmjs.com/package/media-typer) (version 0.3.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Douglas Christopher Wilson - + 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 @@ -26674,10 +26127,10 @@ License files: 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. @@ -26685,31 +26138,30 @@ License files: 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. + - + ### [memoize-one](https://www.npmjs.com/package/memoize-one) (version 5.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Alexander Reardon - + 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 @@ -26718,30 +26170,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [memory-pager](https://www.npmjs.com/package/memory-pager) (version 1.5.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2017 Mathias Buus - + 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 @@ -26749,22 +26199,21 @@ License files: 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. + - + ### [merge-descriptors](https://www.npmjs.com/package/merge-descriptors) (version 1.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Jonathan Ong Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -26772,10 +26221,10 @@ License files: 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. @@ -26783,31 +26232,30 @@ License files: 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. + - + ### [merge-stream](https://www.npmjs.com/package/merge-stream) (version 2.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) Stephen Sugden (stephensugden.com) - + 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 @@ -26815,22 +26263,21 @@ License files: 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. + - + ### [methods](https://www.npmjs.com/package/methods) (version 1.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013-2014 TJ Holowaychuk Copyright (c) 2015-2016 Douglas Christopher Wilson - + 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 @@ -26838,10 +26285,10 @@ License files: 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. @@ -26849,22 +26296,22 @@ License files: 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. + + - + ### [mime-db](https://www.npmjs.com/package/mime-db) (version 1.52.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2015-2022 Douglas Christopher Wilson - + 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 @@ -26872,10 +26319,10 @@ License files: 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. @@ -26883,22 +26330,21 @@ License files: 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. + - + ### [mime-types](https://www.npmjs.com/package/mime-types) (version 2.1.35) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -26906,10 +26352,10 @@ License files: 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. @@ -26917,31 +26363,30 @@ License files: 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. + - + ### [mime](https://www.npmjs.com/package/mime) (version 1.6.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - + 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 @@ -26949,120 +26394,115 @@ License files: 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. + - + ### [mimic-fn](https://www.npmjs.com/package/mimic-fn) (version 2.1.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [mimic-fn](https://www.npmjs.com/package/mimic-fn) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [mimic-response](https://www.npmjs.com/package/mimic-response) (version 2.1.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [minimist](https://www.npmjs.com/package/minimist) (version 1.2.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: This software is released under the MIT license: - + 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. + - + ### [mkdirp-classic](https://www.npmjs.com/package/mkdirp-classic) (version 0.5.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2020 James Halliday (mail@substack.net) and Mathias Buus - + 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 @@ -27070,31 +26510,30 @@ License files: 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. + - + ### [modify-filename](https://www.npmjs.com/package/modify-filename) (version 1.1.0) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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 @@ -27102,19 +26541,18 @@ License files: 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. + - + ### [moment](https://www.npmjs.com/package/moment) (version 2.29.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) JS Foundation and other contributors - + 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 @@ -27123,10 +26561,10 @@ License files: 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 @@ -27135,31 +26573,30 @@ License files: 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. + - + ### [mongodb-build-info](https://www.npmjs.com/package/mongodb-build-info) (version 1.7.2) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -27167,24 +26604,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -27192,7 +26629,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -27206,18 +26643,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -27233,24 +26670,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -27267,14 +26704,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -27282,12 +26719,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -27297,7 +26734,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -27309,7 +26746,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -27320,11 +26757,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -27333,45 +26770,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2016 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb-client-encryption](https://www.npmjs.com/package/mongodb-client-encryption) (version 6.1.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -27379,24 +26815,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -27404,7 +26840,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -27418,18 +26854,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -27445,24 +26881,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -27479,14 +26915,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -27494,12 +26930,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -27509,7 +26945,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -27521,7 +26957,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -27532,11 +26968,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -27545,45 +26981,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright [yyyy] [name of copyright owner] - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb-cloud-info](https://www.npmjs.com/package/mongodb-cloud-info) (version 2.1.2) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -27591,24 +27026,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -27616,7 +27051,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -27630,18 +27065,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -27657,24 +27092,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -27691,14 +27126,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -27706,12 +27141,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -27721,7 +27156,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -27733,7 +27168,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -27744,11 +27179,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -27757,45 +27192,45 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb-connection-string-url](https://www.npmjs.com/package/mongodb-connection-string-url) (version 3.0.1) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -27803,24 +27238,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -27828,7 +27263,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -27842,18 +27277,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -27869,24 +27304,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -27903,14 +27338,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -27918,12 +27353,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -27933,7 +27368,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -27945,7 +27380,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -27956,47 +27391,48 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + Copyright 2020 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [mongodb-log-writer](https://www.npmjs.com/package/mongodb-log-writer) (version 1.4.2) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -28004,24 +27440,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -28029,7 +27465,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -28043,18 +27479,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -28070,24 +27506,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -28104,14 +27540,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -28119,12 +27555,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -28134,7 +27570,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -28146,7 +27582,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -28157,78 +27593,77 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + Copyright 2020 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [mongodb-ns](https://www.npmjs.com/package/mongodb-ns) (version 2.4.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Lucas Hrabovsky - + 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. + - + ### [mongodb-query-parser](https://www.npmjs.com/package/mongodb-query-parser) (version 4.2.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -28236,24 +27671,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -28261,7 +27696,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -28275,18 +27710,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -28302,24 +27737,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -28336,14 +27771,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -28351,12 +27786,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -28366,7 +27801,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -28378,7 +27813,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -28389,11 +27824,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -28402,45 +27837,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb-redact](https://www.npmjs.com/package/mongodb-redact) (version 1.1.3) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -28448,24 +27882,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -28473,7 +27907,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -28487,18 +27921,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -28514,24 +27948,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -28548,14 +27982,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -28563,12 +27997,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -28578,7 +28012,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -28590,7 +28024,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -28601,11 +28035,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -28614,45 +28048,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb-schema](https://www.npmjs.com/package/mongodb-schema) (version 12.2.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -28660,24 +28093,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -28685,7 +28118,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -28699,18 +28132,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -28726,24 +28159,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -28760,14 +28193,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -28775,12 +28208,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -28790,7 +28223,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -28802,7 +28235,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -28813,11 +28246,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -28826,45 +28259,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [mongodb](https://www.npmjs.com/package/mongodb) (version 6.8.0) - License tags: Apache-2.0 License files: - -- LICENSE.md: +* LICENSE.md: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -28872,24 +28304,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -28897,7 +28329,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -28911,18 +28343,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -28938,24 +28370,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -28972,14 +28404,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -28987,12 +28419,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -29002,7 +28434,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -29014,7 +28446,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -29025,11 +28457,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include @@ -29038,45 +28470,43 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright {yyyy} {name of copyright owner} - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [ms](https://www.npmjs.com/package/ms) (version 2.0.0) - License tags: MIT License files: - -- license.md: +* license.md: The MIT License (MIT) - + Copyright (c) 2016 Zeit, Inc. - + 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 @@ -29084,31 +28514,30 @@ License files: 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. + - + ### [ms](https://www.npmjs.com/package/ms) (version 2.1.2) - License tags: MIT License files: - -- license.md: +* license.md: The MIT License (MIT) - + Copyright (c) 2016 Zeit, Inc. - + 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 @@ -29116,31 +28545,30 @@ License files: 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. + - + ### [ms](https://www.npmjs.com/package/ms) (version 2.1.3) - License tags: MIT License files: - -- license.md: +* license.md: The MIT License (MIT) - + Copyright (c) 2020 Vercel, Inc. - + 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 @@ -29148,31 +28576,30 @@ License files: 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. + - + ### [napi-build-utils](https://www.npmjs.com/package/napi-build-utils) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2018 inspiredware - + 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 @@ -29180,23 +28607,22 @@ License files: 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. + - + ### [negotiator](https://www.npmjs.com/package/negotiator) (version 0.6.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2014 Federico Romero Copyright (c) 2012-2014 Isaac Z. Schlueter Copyright (c) 2014-2015 Douglas Christopher Wilson - + 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 @@ -29204,10 +28630,10 @@ License files: 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. @@ -29215,37 +28641,35 @@ License files: 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. + - + ### [netmask](https://www.npmjs.com/package/netmask) (version 2.0.2) - License tags: MIT - + ### [node-abi](https://www.npmjs.com/package/node-abi) (version 3.68.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Lukas Geiger - + 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 @@ -29253,55 +28677,52 @@ License files: 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. + - + ### [node-addon-api](https://www.npmjs.com/package/node-addon-api) (version 4.3.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) ===================== - + Copyright (c) 2017 Node.js API collaborators ----------------------------------- - + *Node.js API collaborators listed at * - + 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. - + ### [node-domexception](https://www.npmjs.com/package/node-domexception) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021 Jimmy Wärting - + 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 @@ -29309,31 +28730,30 @@ License files: 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. + - + ### [node-fetch](https://www.npmjs.com/package/node-fetch) (version 2.6.7) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2016 David Frank - + 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 @@ -29341,31 +28761,31 @@ License files: 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. + + - + ### [node-fetch](https://www.npmjs.com/package/node-fetch) (version 2.7.0) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2016 David Frank - + 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 @@ -29373,31 +28793,31 @@ License files: 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. + + - + ### [node-fetch](https://www.npmjs.com/package/node-fetch) (version 3.3.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2016 - 2020 Node Fetch Team - + 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 @@ -29405,59 +28825,57 @@ License files: 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. + + - + ### [npm-run-path](https://www.npmjs.com/package/npm-run-path) (version 4.0.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [npm-run-path](https://www.npmjs.com/package/npm-run-path) (version 5.3.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [numeral](https://www.npmjs.com/package/numeral) (version 1.5.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2014 Adam Draper - + 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 @@ -29466,10 +28884,10 @@ License files: 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 @@ -29479,18 +28897,16 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [numeral](https://www.npmjs.com/package/numeral) (version 2.0.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (c) 2016 Adam Draper - + 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 @@ -29499,10 +28915,10 @@ License files: 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 @@ -29511,31 +28927,30 @@ License files: 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. + - + ### [object-assign](https://www.npmjs.com/package/object-assign) (version 4.1.1) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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 @@ -29543,31 +28958,30 @@ License files: 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. + - + ### [object-hash](https://www.npmjs.com/package/object-hash) (version 2.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 object-hash contributors - + 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 @@ -29575,31 +28989,31 @@ License files: 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. + + - + ### [object-inspect](https://www.npmjs.com/package/object-inspect) (version 1.13.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2013 James Halliday - + 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 @@ -29607,62 +29021,60 @@ License files: 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. + - + ### [object-is](https://www.npmjs.com/package/object-is) (version 1.1.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Jordan Harband - + 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. + - + ### [object-keys](https://www.npmjs.com/package/object-keys) (version 1.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (C) 2013 Jordan Harband - + 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 @@ -29671,30 +29083,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [object.assign](https://www.npmjs.com/package/object.assign) (version 4.1.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Jordan Harband - + 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 @@ -29703,30 +29113,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [oidc-token-hash](https://www.npmjs.com/package/oidc-token-hash) (version 5.0.3) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2015 Filip Skokan - + 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 @@ -29734,22 +29142,21 @@ License files: 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. + - + ### [on-finished](https://www.npmjs.com/package/on-finished) (version 2.4.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Jonathan Ong Copyright (c) 2014 Douglas Christopher Wilson - + 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 @@ -29757,10 +29164,10 @@ License files: 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. @@ -29768,25 +29175,24 @@ License files: 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. + - + ### [once](https://www.npmjs.com/package/once) (version 1.4.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -29794,91 +29200,87 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [onetime](https://www.npmjs.com/package/onetime) (version 5.1.2) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [onetime](https://www.npmjs.com/package/onetime) (version 6.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [open](https://www.npmjs.com/package/open) (version 9.1.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [openid-client](https://www.npmjs.com/package/openid-client) (version 5.6.5) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2016 Filip Skokan - + 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 @@ -29886,31 +29288,30 @@ License files: 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. + - + ### [os-dns-native](https://www.npmjs.com/package/os-dns-native) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2021 MongoDB, Inc. - + 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 @@ -29918,21 +29319,21 @@ License files: 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. + + - + ### [pac-proxy-agent](https://www.npmjs.com/package/pac-proxy-agent) (version 7.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Nathan Rajlich - + 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 @@ -29940,10 +29341,10 @@ License files: 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. @@ -29951,21 +29352,20 @@ License files: 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. + - + ### [pac-resolver](https://www.npmjs.com/package/pac-resolver) (version 7.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Nathan Rajlich - + 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 @@ -29973,10 +29373,10 @@ License files: 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. @@ -29985,52 +29385,50 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [papaparse](https://www.npmjs.com/package/papaparse) (version 5.3.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Matthew Holt - + 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. + - + ### [parseurl](https://www.npmjs.com/package/parseurl) (version 1.3.3) - License tags: MIT License files: +* LICENSE: -- LICENSE: - + (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2014-2017 Douglas Christopher Wilson - + 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 @@ -30038,10 +29436,10 @@ License files: 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. @@ -30049,91 +29447,87 @@ License files: 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. + - + ### [path-exists](https://www.npmjs.com/package/path-exists) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [path-key](https://www.npmjs.com/package/path-key) (version 3.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [path-key](https://www.npmjs.com/package/path-key) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [path-to-regexp](https://www.npmjs.com/package/path-to-regexp) (version 0.1.10) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - + 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 @@ -30141,25 +29535,24 @@ License files: 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. + - + ### [picocolors](https://www.npmjs.com/package/picocolors) (version 1.1.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: ISC License - + Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -30167,31 +29560,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [polished](https://www.npmjs.com/package/polished) (version 4.2.2) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: MIT License - + Copyright (c) 2016 - 2021 Brian Hough and Maximilian Stoiber - + 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 @@ -30199,31 +29591,30 @@ License files: 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. + - + ### [possible-typed-array-names](https://www.npmjs.com/package/possible-typed-array-names) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2024 Jordan Harband - + 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 @@ -30231,31 +29622,30 @@ License files: 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. + - + ### [prebuild-install](https://www.npmjs.com/package/prebuild-install) (version 7.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Mathias Buus - + 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 @@ -30263,50 +29653,49 @@ License files: 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. + - + ### [prettier](https://www.npmjs.com/package/prettier) (version 2.7.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: # Prettier license - + Prettier is released under the MIT license: - + Copyright © James Long and contributors - + 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. - + ## Licenses of bundled dependencies - + The published Prettier artifact additionally contains code with the following licenses: MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0, 0BSD - + ## Bundled dependencies - + ### @angular/compiler@v12.2.16 - + License: MIT By: angular Repository: - + ---------------------------------------- - + ### @babel/code-frame@v7.16.7 - + License: MIT By: The Babel Team Repository: - + > MIT License > > Copyright (c) 2014-present Sebastian McKenzie and other contributors @@ -30329,15 +29718,15 @@ License files: > 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. - + ---------------------------------------- - + ### @babel/helper-validator-identifier@v7.16.7 - + License: MIT By: The Babel Team Repository: - + > MIT License > > Copyright (c) 2014-present Sebastian McKenzie and other contributors @@ -30360,15 +29749,15 @@ License files: > 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. - + ---------------------------------------- - + ### @babel/highlight@v7.16.10 - + License: MIT By: The Babel Team Repository: - + > MIT License > > Copyright (c) 2014-present Sebastian McKenzie and other contributors @@ -30391,15 +29780,15 @@ License files: > 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. - + ---------------------------------------- - + ### @babel/parser@v7.18.0 - + License: MIT By: The Babel Team Repository: - + > Copyright (C) 2012-2014 by various contributors (see AUTHORS) > > Permission is hereby granted, free of charge, to any person obtaining a copy @@ -30419,13 +29808,13 @@ License files: > 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. - + ---------------------------------------- - + ### @glimmer/env@v0.1.7 - + License: MIT - + > Copyright (c) 2017 Martin Muñoz and contributors. > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -30445,13 +29834,13 @@ License files: > 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. - + ---------------------------------------- - + ### @glimmer/syntax@v0.84.2 - + License: MIT - + > Copyright (c) 2015 Tilde, Inc. > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -30471,13 +29860,13 @@ License files: > 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. - + ---------------------------------------- - + ### @glimmer/util@v0.84.2 - + License: MIT - + > Copyright (c) 2015 Tilde, Inc. > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -30497,22 +29886,22 @@ License files: > 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. - + ---------------------------------------- - + ### @handlebars/parser@v2.0.0 - + License: ISC Repository: - + ---------------------------------------- - + ### @iarna/toml@v2.2.5 - + License: ISC By: Rebecca Turner Repository: - + > Copyright (c) 2016, Rebecca Turner > > Permission to use, copy, modify, and/or distribute this software for any @@ -30526,13 +29915,13 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### @nodelib/fs.scandir@v2.1.5 - + License: MIT - + > The MIT License (MIT) > > Copyright (c) Denis Malinochkin @@ -30554,13 +29943,13 @@ License files: > 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. - + ---------------------------------------- - + ### @nodelib/fs.stat@v2.0.5 - + License: MIT - + > The MIT License (MIT) > > Copyright (c) Denis Malinochkin @@ -30582,13 +29971,13 @@ License files: > 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. - + ---------------------------------------- - + ### @nodelib/fs.walk@v1.2.8 - + License: MIT - + > The MIT License (MIT) > > Copyright (c) Denis Malinochkin @@ -30610,14 +29999,14 @@ License files: > 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. - + ---------------------------------------- - + ### @typescript-eslint/types@v5.27.0 - + License: MIT Repository: - + > MIT License > > Copyright (c) 2019 TypeScript ESLint and other contributors @@ -30639,14 +30028,14 @@ License files: > 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. - + ---------------------------------------- - + ### @typescript-eslint/typescript-estree@v5.27.0 - + License: BSD-2-Clause Repository: - + > TypeScript ESTree > > Originally extracted from: @@ -30673,14 +30062,14 @@ License files: > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ---------------------------------------- - + ### @typescript-eslint/visitor-keys@v5.27.0 - + License: MIT Repository: - + > MIT License > > Copyright (c) 2019 TypeScript ESLint and other contributors @@ -30702,14 +30091,14 @@ License files: > 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. - + ---------------------------------------- - + ### acorn@v8.7.0 - + License: MIT Repository: - + > MIT License > > Copyright (C) 2012-2020 by various contributors (see AUTHORS) @@ -30731,14 +30120,14 @@ License files: > 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. - + ---------------------------------------- - + ### acorn-jsx@v5.3.2 - + License: MIT Repository: - + > Copyright (C) 2012-2017 by Ingvar Stepanyan > > Permission is hereby granted, free of charge, to any person obtaining a copy @@ -30758,14 +30147,14 @@ License files: > 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. - + ---------------------------------------- - + ### aggregate-error@v3.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -30775,14 +30164,14 @@ License files: > 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. - + ---------------------------------------- - + ### angular-estree-parser@v2.5.1 - + License: MIT By: Ika - + > MIT License > > Copyright (c) Ika (https://github.com/ikatyang) @@ -30804,14 +30193,14 @@ License files: > 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. - + ---------------------------------------- - + ### angular-html-parser@v1.8.0 - + License: MIT By: Ika - + > MIT License > > Copyright (c) Ika (https://github.com/ikatyang) @@ -30833,14 +30222,14 @@ License files: > 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. - + ---------------------------------------- - + ### ansi-regex@v6.0.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -30850,14 +30239,14 @@ License files: > 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. - + ---------------------------------------- - + ### ansi-styles@v3.2.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -30867,14 +30256,14 @@ License files: > 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. - + ---------------------------------------- - + ### array-union@v2.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -30884,14 +30273,14 @@ License files: > 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. - + ---------------------------------------- - + ### bail@v1.0.5 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -30914,15 +30303,15 @@ License files: > 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. - + ---------------------------------------- - + ### balanced-match@v1.0.2 - + License: MIT By: Julian Gruber Repository: - + > (MIT) > > Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> @@ -30944,15 +30333,15 @@ License files: > 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. - + ---------------------------------------- - + ### brace-expansion@v1.1.11 - + License: MIT By: Julian Gruber Repository: - + > MIT License > > Copyright (c) 2013 Julian Gruber @@ -30974,14 +30363,14 @@ License files: > 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. - + ---------------------------------------- - + ### braces@v3.0.2 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-2018, Jon Schlinkert. @@ -31003,14 +30392,14 @@ License files: > 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. - + ---------------------------------------- - + ### camelcase@v6.3.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -31020,14 +30409,14 @@ License files: > 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. - + ---------------------------------------- - + ### ccount@v1.1.0 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -31050,13 +30439,13 @@ License files: > 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. - + ---------------------------------------- - + ### chalk@v2.4.2 - + License: MIT - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -31066,13 +30455,13 @@ License files: > 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. - + ---------------------------------------- - + ### chalk@v5.0.1 - + License: MIT - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -31082,14 +30471,14 @@ License files: > 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. - + ---------------------------------------- - + ### character-entities@v1.2.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -31112,14 +30501,14 @@ License files: > 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. - + ---------------------------------------- - + ### character-entities-legacy@v1.1.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -31142,14 +30531,14 @@ License files: > 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. - + ---------------------------------------- - + ### character-reference-invalid@v1.1.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -31172,15 +30561,15 @@ License files: > 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. - + ---------------------------------------- - + ### ci-info@v3.3.0 - + License: MIT By: Thomas Watson Steen Repository: - + > The MIT License (MIT) > > Copyright (c) 2016-2021 Thomas Watson Steen @@ -31202,14 +30591,14 @@ License files: > 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. - + ---------------------------------------- - + ### clean-stack@v2.2.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -31219,15 +30608,15 @@ License files: > 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. - + ---------------------------------------- - + ### clone@v1.0.4 - + License: MIT By: Paul Vorbach Repository: - + > Copyright © 2011-2015 Paul Vorbach > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -31246,14 +30635,14 @@ License files: > COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER > IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE > SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ---------------------------------------- - + ### collapse-white-space@v1.0.6 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -31276,14 +30665,14 @@ License files: > 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. - + ---------------------------------------- - + ### color-convert@v1.9.3 - + License: MIT By: Heather Arthur - + > Copyright (c) 2011-2016 Heather Arthur > > Permission is hereby granted, free of charge, to any person obtaining @@ -31304,72 +30693,65 @@ License files: > 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. - + ---------------------------------------- - + ### color-name@v1.1.3 - + License: MIT By: DY Repository: - - > The MIT License (MIT) - - > Copyright (c) 2015 Dmitry Ivanov - - > - - > 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 MIT License (MIT) + > Copyright (c) 2015 Dmitry Ivanov + > + > 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. - + ---------------------------------------- - + ### commondir@v1.0.1 - + License: MIT By: James Halliday Repository: - + > The MIT License > > Copyright (c) 2013 James Halliday (mail@substack.net) > - > 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, + > 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 + > 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 + > 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. - + ---------------------------------------- - + ### concat-map@v0.0.1 - + License: MIT By: James Halliday Repository: - + > This software is released under the MIT license: > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -31388,15 +30770,15 @@ License files: > 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. - + ---------------------------------------- - + ### cosmiconfig@v7.0.1 - + License: MIT By: David Clark Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 David Clark @@ -31418,15 +30800,15 @@ License files: > 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. - + ---------------------------------------- - + ### cross-spawn@v7.0.3 - + License: MIT By: André Cruz Repository: - + > The MIT License (MIT) > > Copyright (c) 2018 Made With MOXY Lda @@ -31448,14 +30830,14 @@ License files: > 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. - + ---------------------------------------- - + ### crypto-random-string@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -31465,14 +30847,14 @@ License files: > 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. - + ---------------------------------------- - + ### css-units-list@v1.1.0 - + License: MIT By: fisker Cheung - + > MIT License > > Copyright (c) fisker Cheung (https://www.fiskercheung.com/) @@ -31494,14 +30876,14 @@ License files: > 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. - + ---------------------------------------- - + ### dashify@v2.0.0 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2015-present, Jon Schlinkert. @@ -31523,15 +30905,15 @@ License files: > 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. - + ---------------------------------------- - + ### debug@v4.3.4 - + License: MIT By: Josh Junon Repository: - + > (The MIT License) > > Copyright (c) 2014-2017 TJ Holowaychuk @@ -31551,15 +30933,15 @@ License files: > 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. - + ---------------------------------------- - + ### defaults@v1.0.3 - + License: MIT By: Elijah Insua Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 Elijah Insua @@ -31581,14 +30963,14 @@ License files: > 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. - + ---------------------------------------- - + ### del@v6.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -31598,14 +30980,14 @@ License files: > 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. - + ---------------------------------------- - + ### detect-newline@v3.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -31615,14 +30997,14 @@ License files: > 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@v5.0.0 - + License: BSD-3-Clause Repository: - + > Software License Agreement (BSD License) > > Copyright (c) 2009-2015, Kevin Decker @@ -31654,14 +31036,14 @@ License files: > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER > IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ---------------------------------------- - + ### dir-glob@v3.0.1 - + License: MIT By: Kevin Mårtensson - + > MIT License > > Copyright (c) Kevin Mårtensson (github.com/kevva) @@ -31671,15 +31053,15 @@ License files: > 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. - + ---------------------------------------- - + ### editorconfig@v0.15.3 - + License: MIT By: EditorConfig Team Repository: - + > Copyright © 2012 EditorConfig Team > > Permission is hereby granted, free of charge, to any person obtaining a copy @@ -31699,23 +31081,23 @@ License files: > 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. - + ---------------------------------------- - + ### editorconfig-to-prettier@v0.2.0 - + License: ISC By: Joseph Frazier Repository: - + ---------------------------------------- - + ### emoji-regex@v9.2.2 - + License: MIT By: Mathias Bynens Repository: - + > Copyright Mathias Bynens > > Permission is hereby granted, free of charge, to any person obtaining @@ -31736,13 +31118,13 @@ License files: > 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. - + ---------------------------------------- - + ### error-ex@v1.3.2 - + License: MIT - + > The MIT License (MIT) > > Copyright (c) 2015 JD Ballard @@ -31764,14 +31146,14 @@ License files: > 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. - + ---------------------------------------- - + ### escape-string-regexp@v1.0.5 - + License: MIT By: Sindre Sorhus - + > The MIT License (MIT) > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -31793,14 +31175,14 @@ License files: > 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. - + ---------------------------------------- - + ### escape-string-regexp@v5.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -31810,14 +31192,14 @@ License files: > 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. - + ---------------------------------------- - + ### eslint-visitor-keys@v3.3.0 - + License: Apache-2.0 By: Toru Nagashima - + > Apache License > Version 2.0, January 2004 > http://www.apache.org/licenses/ @@ -32019,14 +31401,14 @@ License files: > WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > See the License for the specific language governing permissions and > limitations under the License. - + ---------------------------------------- - + ### espree@v9.3.1 - + License: BSD-2-Clause By: Nicholas C. Zakas - + > BSD 2-Clause License > > Copyright (c) Open JS Foundation @@ -32052,14 +31434,14 @@ License files: > CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, > OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ---------------------------------------- - + ### esutils@v2.0.3 - + License: BSD-2-Clause Repository: - + > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > @@ -32079,14 +31461,14 @@ License files: > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ---------------------------------------- - + ### execa@v6.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -32096,15 +31478,15 @@ License files: > 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. - + ---------------------------------------- - + ### extend@v3.0.2 - + License: MIT By: Stefan Thomas Repository: - + > The MIT License (MIT) > > Copyright (c) 2014 Stefan Thomas @@ -32127,14 +31509,14 @@ License files: > 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. - + ---------------------------------------- - + ### fast-glob@v3.2.11 - + License: MIT By: Denis Malinochkin - + > The MIT License (MIT) > > Copyright (c) Denis Malinochkin @@ -32156,15 +31538,15 @@ License files: > 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. - + ---------------------------------------- - + ### fast-json-stable-stringify@v2.1.0 - + License: MIT By: James Halliday Repository: - + > This software is released under the MIT license: > > Copyright (c) 2017 Evgeny Poberezkin @@ -32186,15 +31568,15 @@ License files: > 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. - + ---------------------------------------- - + ### fastq@v1.13.0 - + License: ISC By: Matteo Collina Repository: - + > Copyright (c) 2015-2020, Matteo Collina > > Permission to use, copy, modify, and/or distribute this software for any @@ -32208,14 +31590,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### file-entry-cache@v6.0.1 - + License: MIT By: Roy Riojas - + > The MIT License (MIT) > > Copyright (c) 2015 Roy Riojas @@ -32237,14 +31619,14 @@ License files: > 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. - + ---------------------------------------- - + ### fill-range@v7.0.1 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-present, Jon Schlinkert. @@ -32266,13 +31648,13 @@ License files: > 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. - + ---------------------------------------- - + ### find-cache-dir@v3.3.2 - + License: MIT - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -32282,16 +31664,16 @@ License files: > 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. - + ---------------------------------------- - + ### find-parent-dir@v0.3.1 - + License: MIT By: Thorsten Lorenz Repository: - - > Copyright 2013 Thorsten Lorenz. + + > Copyright 2013 Thorsten Lorenz. > All rights reserved. > > Permission is hereby granted, free of charge, to any person @@ -32314,14 +31696,14 @@ License files: > 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. - + ---------------------------------------- - + ### find-up@v4.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -32331,14 +31713,14 @@ License files: > 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. - + ---------------------------------------- - + ### flat-cache@v3.0.4 - + License: MIT By: Roy Riojas - + > The MIT License (MIT) > > Copyright (c) 2015 Roy Riojas @@ -32360,15 +31742,15 @@ License files: > 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. - + ---------------------------------------- - + ### flatted@v3.2.5 - + License: ISC By: Andrea Giammarchi Repository: - + > ISC License > > Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection @@ -32384,15 +31766,15 @@ License files: > LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE > OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### flatten@v1.0.3 - + License: MIT By: Joshua Holbrook Repository: - + > The MIT License (MIT) > > Copyright (c) 2016 Joshua Holbrook @@ -32414,23 +31796,23 @@ License files: > 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. - + ---------------------------------------- - + ### flow-parser@v0.180.0 - + License: MIT By: Flow Team Repository: - + ---------------------------------------- - + ### fs.realpath@v1.0.0 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -32474,14 +31856,14 @@ License files: > 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. - + ---------------------------------------- - + ### function-bind@v1.1.1 - + License: MIT By: Raynos - + > Copyright (c) 2013 Raynos. > > Permission is hereby granted, free of charge, to any person obtaining a copy @@ -32501,14 +31883,14 @@ License files: > 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. - + ---------------------------------------- - + ### get-stdin@v8.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -32518,14 +31900,14 @@ License files: > 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. - + ---------------------------------------- - + ### get-stream@v6.0.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -32535,15 +31917,15 @@ License files: > 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. - + ---------------------------------------- - + ### glob@v7.2.0 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -32565,14 +31947,14 @@ License files: > Glob's logo created by Tanya Brassie , licensed > under a Creative Commons Attribution-ShareAlike 4.0 International License > https://creativecommons.org/licenses/by-sa/4.0/ - + ---------------------------------------- - + ### glob-parent@v5.1.2 - + License: ISC By: Gulp Team - + > The ISC License > > Copyright (c) 2015, 2019 Elan Shanker @@ -32588,14 +31970,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### globby@v11.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -32605,14 +31987,14 @@ License files: > 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. - + ---------------------------------------- - + ### graceful-fs@v4.2.9 - + License: ISC Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors @@ -32628,14 +32010,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### graphql@v15.6.1 - + License: MIT Repository: - + > MIT License > > Copyright (c) GraphQL Contributors @@ -32657,15 +32039,15 @@ License files: > 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. - + ---------------------------------------- - + ### has@v1.0.3 - + License: MIT By: Thiago de Arruda Repository: - + > Copyright (c) 2013 Thiago de Arruda > > Permission is hereby granted, free of charge, to any person @@ -32688,14 +32070,14 @@ License files: > 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. - + ---------------------------------------- - + ### has-flag@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -32705,14 +32087,14 @@ License files: > 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. - + ---------------------------------------- - + ### html-element-attributes@v3.1.0 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -32735,14 +32117,14 @@ License files: > 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. - + ---------------------------------------- - + ### html-tag-names@v2.0.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -32765,14 +32147,14 @@ License files: > 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. - + ---------------------------------------- - + ### html-void-elements@v2.0.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -32795,14 +32177,14 @@ License files: > 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. - + ---------------------------------------- - + ### human-signals@v3.0.1 - + License: Apache-2.0 By: ehmicky - + > Apache License > Version 2.0, January 2004 > http://www.apache.org/licenses/ @@ -33004,15 +32386,15 @@ License files: > WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > See the License for the specific language governing permissions and > limitations under the License. - + ---------------------------------------- - + ### ignore@v5.2.0 - + License: MIT By: kael Repository: - + > Copyright (c) 2013 Kael Zhang , contributors > http://kael.me/ > @@ -33034,14 +32416,14 @@ License files: > 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. - + ---------------------------------------- - + ### import-fresh@v3.3.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -33051,14 +32433,14 @@ License files: > 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. - + ---------------------------------------- - + ### indent-string@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33068,46 +32450,46 @@ License files: > 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. - + ---------------------------------------- - + ### indexes-of@v1.0.1 - + License: MIT By: Dominic Tarr Repository: - + > Copyright (c) 2013 Dominic Tarr > - > 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, + > 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 + > 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 + > 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. - + ---------------------------------------- - + ### inflight@v1.0.6 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter @@ -33123,13 +32505,13 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### inherits@v2.0.4 - + License: ISC - + > The ISC License > > Copyright (c) Isaac Z. Schlueter @@ -33145,14 +32527,14 @@ License files: > LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR > OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### is-alphabetical@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33175,14 +32557,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-alphanumerical@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33205,15 +32587,15 @@ License files: > 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. - + ---------------------------------------- - + ### is-arrayish@v0.2.1 - + License: MIT By: Qix Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 JD Ballard @@ -33235,15 +32617,15 @@ License files: > 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. - + ---------------------------------------- - + ### is-buffer@v2.0.5 - + License: MIT By: Feross Aboukhadijeh Repository: - + > The MIT License (MIT) > > Copyright (c) Feross Aboukhadijeh @@ -33265,15 +32647,15 @@ License files: > 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. - + ---------------------------------------- - + ### is-core-module@v2.8.1 - + License: MIT By: Jordan Harband Repository: - + > The MIT License (MIT) > > Copyright (c) 2014 Dave Justice @@ -33294,14 +32676,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-decimal@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33324,14 +32706,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-extglob@v2.1.1 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-2016, Jon Schlinkert @@ -33353,14 +32735,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-fullwidth-code-point@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -33370,14 +32752,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-glob@v4.0.3 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-2017, Jon Schlinkert. @@ -33399,14 +32781,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-hexadecimal@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33429,14 +32811,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-number@v7.0.0 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-present, Jon Schlinkert. @@ -33458,14 +32840,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-path-cwd@v2.2.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33475,14 +32857,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-path-inside@v3.0.3 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33492,14 +32874,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-plain-obj@v2.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33509,14 +32891,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-stream@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -33526,14 +32908,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-whitespace-character@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33556,14 +32938,14 @@ License files: > 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. - + ---------------------------------------- - + ### is-word-character@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33586,15 +32968,15 @@ License files: > 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. - + ---------------------------------------- - + ### isexe@v2.0.0 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -33610,14 +32992,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### jest-docblock@v27.5.1 - + License: MIT Repository: - + > MIT License > > Copyright (c) Facebook, Inc. and its affiliates. @@ -33639,14 +33021,14 @@ License files: > 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. - + ---------------------------------------- - + ### js-tokens@v4.0.0 - + License: MIT By: Simon Lydell - + > The MIT License (MIT) > > Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell @@ -33668,14 +33050,14 @@ License files: > 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. - + ---------------------------------------- - + ### json-parse-even-better-errors@v2.3.1 - + License: MIT By: Kat Marchán - + > Copyright 2017 Kat Marchán > Copyright npm, Inc. > @@ -33701,15 +33083,15 @@ License files: > > This library is a fork of 'better-json-errors' by Kat Marchán, extended and > distributed under the terms of the MIT license above. - + ---------------------------------------- - + ### json5@v2.2.1 - + License: MIT By: Aseem Kishore Repository: - + > MIT License > > Copyright (c) 2012-2018 Aseem Kishore, and [others]. @@ -33733,14 +33115,14 @@ License files: > SOFTWARE. > > [others]: https://github.com/json5/json5/contributors - + ---------------------------------------- - + ### leven@v2.1.0 - + License: MIT By: Sindre Sorhus - + > The MIT License (MIT) > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33762,14 +33144,14 @@ License files: > 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. - + ---------------------------------------- - + ### leven@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -33779,15 +33161,15 @@ License files: > 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. - + ---------------------------------------- - + ### lines-and-columns@v1.2.4 - + License: MIT By: Brian Donovan Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 Brian Donovan @@ -33809,15 +33191,15 @@ License files: > 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. - + ---------------------------------------- - + ### lines-and-columns@v2.0.3 - + License: MIT By: Brian Donovan Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 Brian Donovan @@ -33839,14 +33221,14 @@ License files: > 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. - + ---------------------------------------- - + ### linguist-languages@v7.21.0 - + License: MIT By: Ika - + > MIT License > > Copyright (c) Ika (https://github.com/ikatyang) @@ -33868,14 +33250,14 @@ License files: > 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. - + ---------------------------------------- - + ### locate-path@v5.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33885,14 +33267,14 @@ License files: > 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. - + ---------------------------------------- - + ### lru-cache@v4.1.5 - + License: ISC By: Isaac Z. Schlueter - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -33908,14 +33290,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### lru-cache@v6.0.0 - + License: ISC By: Isaac Z. Schlueter - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -33931,14 +33313,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### make-dir@v3.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -33948,14 +33330,14 @@ License files: > 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. - + ---------------------------------------- - + ### map-age-cleaner@v0.1.3 - + License: MIT By: Sam Verschueren - + > MIT License > > Copyright (c) Sam Verschueren (github.com/SamVerschueren) @@ -33965,14 +33347,14 @@ License files: > 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. - + ---------------------------------------- - + ### markdown-escapes@v1.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -33995,14 +33377,14 @@ License files: > 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. - + ---------------------------------------- - + ### mem@v9.0.2 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34012,14 +33394,14 @@ License files: > 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. - + ---------------------------------------- - + ### merge-stream@v2.0.0 - + License: MIT By: Stephen Sugden - + > The MIT License (MIT) > > Copyright (c) Stephen Sugden (stephensugden.com) @@ -34041,14 +33423,14 @@ License files: > 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. - + ---------------------------------------- - + ### merge2@v1.4.1 - + License: MIT Repository: - + > The MIT License (MIT) > > Copyright (c) 2014-2020 Teambition @@ -34070,15 +33452,15 @@ License files: > 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. - + ---------------------------------------- - + ### meriyah@v4.2.1 - + License: ISC By: Kenny F. Repository: - + > ISC License > > Copyright (c) 2019 and later, KFlash and others. @@ -34086,14 +33468,14 @@ License files: > Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. > > THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### micromatch@v4.0.5 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-present, Jon Schlinkert. @@ -34115,14 +33497,14 @@ License files: > 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. - + ---------------------------------------- - + ### mimic-fn@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34132,15 +33514,15 @@ License files: > 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. - + ---------------------------------------- - + ### minimatch@v3.1.2 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -34156,15 +33538,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### minimist@v1.2.6 - + License: MIT By: James Halliday Repository: - + > This software is released under the MIT license: > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -34183,13 +33565,13 @@ License files: > 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. - + ---------------------------------------- - + ### ms@v2.1.2 - + License: MIT - + > The MIT License (MIT) > > Copyright (c) 2016 Zeit, Inc. @@ -34211,15 +33593,15 @@ License files: > 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. - + ---------------------------------------- - + ### n-readlines@v1.0.1 - + License: MIT By: Yoan Arnaudov Repository: - + > The MIT License (MIT) > > Copyright (c) 2013 Liucw @@ -34240,14 +33622,14 @@ License files: > 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. - + ---------------------------------------- - + ### npm-run-path@v5.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34257,15 +33639,15 @@ License files: > 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. - + ---------------------------------------- - + ### once@v1.4.0 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -34281,14 +33663,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### onetime@v6.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34298,15 +33680,15 @@ License files: > 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. - + ---------------------------------------- - + ### outdent@v0.8.0 - + License: MIT By: Andrew Bradley Repository: - + > The MIT License (MIT) > > Copyright (c) 2016 Andrew Bradley @@ -34328,14 +33710,14 @@ License files: > 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. - + ---------------------------------------- - + ### p-defer@v1.0.0 - + License: MIT By: Sindre Sorhus - + > The MIT License (MIT) > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34357,14 +33739,14 @@ License files: > 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. - + ---------------------------------------- - + ### p-limit@v2.3.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34374,14 +33756,14 @@ License files: > 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. - + ---------------------------------------- - + ### p-locate@v4.1.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34391,14 +33773,14 @@ License files: > 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. - + ---------------------------------------- - + ### p-map@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34408,14 +33790,14 @@ License files: > 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. - + ---------------------------------------- - + ### p-try@v2.2.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34425,14 +33807,14 @@ License files: > 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. - + ---------------------------------------- - + ### parse-entities@v2.0.0 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -34455,14 +33837,14 @@ License files: > 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. - + ---------------------------------------- - + ### parse-json@v5.2.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -34472,15 +33854,15 @@ License files: > 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. - + ---------------------------------------- - + ### parse-srcset@v1.0.2 - + License: MIT By: Alex Bell Repository: - + > The MIT License (MIT) > > Copyright (c) 2014 Alex Bell @@ -34502,14 +33884,14 @@ License files: > 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. - + ---------------------------------------- - + ### path-exists@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34519,14 +33901,14 @@ License files: > 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. - + ---------------------------------------- - + ### path-is-absolute@v1.0.1 - + License: MIT By: Sindre Sorhus - + > The MIT License (MIT) > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34548,14 +33930,14 @@ License files: > 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. - + ---------------------------------------- - + ### path-key@v3.1.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34565,15 +33947,15 @@ License files: > 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. - + ---------------------------------------- - + ### path-parse@v1.0.7 - + License: MIT By: Javier Blanco Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 Javier Blanco @@ -34595,14 +33977,14 @@ License files: > 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. - + ---------------------------------------- - + ### path-type@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34612,14 +33994,14 @@ License files: > 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. - + ---------------------------------------- - + ### picocolors@v0.2.1 - + License: ISC By: Alexey Raspopov - + > ISC License > > Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov @@ -34635,14 +34017,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### picomatch@v2.3.1 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2017-present, Jon Schlinkert. @@ -34664,14 +34046,14 @@ License files: > 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. - + ---------------------------------------- - + ### pkg-dir@v4.2.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -34681,18 +34063,18 @@ License files: > 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. - + ---------------------------------------- - + ### please-upgrade-node@v3.2.0 - + License: MIT By: typicode Repository: - + > MIT License > - > Copyright (c) 2017 + > Copyright (c) 2017 > > Permission is hereby granted, free of charge, to any person obtaining a copy > of this software and associated documentation files (the "Software"), to deal @@ -34711,14 +34093,14 @@ License files: > 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. - + ---------------------------------------- - + ### postcss@v7.0.39 - + License: MIT By: Andrey Sitnik - + > The MIT License (MIT) > > Copyright 2013 Andrey Sitnik @@ -34739,14 +34121,14 @@ License files: > 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. - + ---------------------------------------- - + ### postcss-less@v3.1.4 - + License: MIT By: Denys Kniazevych - + > The MIT License (MIT) > > Copyright (c) 2013 Andrey Sitnik @@ -34771,22 +34153,22 @@ License files: > 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. - + ---------------------------------------- - + ### postcss-media-query-parser@v0.2.3 - + License: MIT By: dryoma Repository: - + ---------------------------------------- - + ### postcss-scss@v2.1.1 - + License: MIT By: Andrey Sitnik - + > The MIT License (MIT) > > Copyright 2013 Andrey Sitnik @@ -34807,14 +34189,14 @@ License files: > 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. - + ---------------------------------------- - + ### postcss-selector-parser@v2.2.3 - + License: MIT By: Ben Briggs - + > Copyright (c) Ben Briggs (http://beneb.info) > > Permission is hereby granted, free of charge, to any person @@ -34837,14 +34219,14 @@ License files: > 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. - + ---------------------------------------- - + ### postcss-values-parser@v2.0.1 - + License: MIT By: Andrew Powell (shellscape) - + > Copyright (c) Andrew Powell > > Permission is hereby granted, free of charge, to any person @@ -34867,15 +34249,15 @@ License files: > 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. - + ---------------------------------------- - + ### pseudomap@v1.0.2 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -34891,15 +34273,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### queue-microtask@v1.2.3 - + License: MIT By: Feross Aboukhadijeh Repository: - + > The MIT License (MIT) > > Copyright (c) Feross Aboukhadijeh @@ -34920,14 +34302,14 @@ License files: > 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. - + ---------------------------------------- - + ### remark-footnotes@v2.0.0 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2020 Titus Wormer @@ -34950,28 +34332,28 @@ License files: > 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. - + ---------------------------------------- - + ### remark-math@v3.0.1 - + License: MIT By: Junyoung Choi - + ---------------------------------------- - + ### remark-parse@v8.0.3 - + License: MIT By: Titus Wormer - + ---------------------------------------- - + ### repeat-string@v1.6.1 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2014-2016, Jon Schlinkert. @@ -34993,15 +34375,15 @@ License files: > 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. - + ---------------------------------------- - + ### resolve@v1.22.0 - + License: MIT By: James Halliday Repository: - + > MIT License > > Copyright (c) 2012 James Halliday @@ -35023,14 +34405,14 @@ License files: > 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. - + ---------------------------------------- - + ### resolve-from@v4.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -35040,15 +34422,15 @@ License files: > 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. - + ---------------------------------------- - + ### reusify@v1.0.4 - + License: MIT By: Matteo Collina Repository: - + > The MIT License (MIT) > > Copyright (c) 2015 Matteo Collina @@ -35070,14 +34452,14 @@ License files: > 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. - + ---------------------------------------- - + ### rimraf@v3.0.2 - + License: ISC By: Isaac Z. Schlueter - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -35093,14 +34475,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### rollup-plugin-node-polyfills@v0.2.1 - + License: MIT Repository: - + > The MIT License (MIT) > > Copyright (c) 2019 these people @@ -35110,15 +34492,15 @@ License files: > 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. - + ---------------------------------------- - + ### run-parallel@v1.2.0 - + License: MIT By: Feross Aboukhadijeh Repository: - + > The MIT License (MIT) > > Copyright (c) Feross Aboukhadijeh @@ -35139,14 +34521,14 @@ License files: > 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. - + ---------------------------------------- - + ### sdbm@v2.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35156,13 +34538,13 @@ License files: > 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. - + ---------------------------------------- - + ### semver@v6.3.0 - + License: ISC - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -35178,15 +34560,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### semver@v7.3.7 - + License: ISC By: GitHub Inc. Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -35202,15 +34584,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### semver-compare@v1.0.0 - + License: MIT By: James Halliday Repository: - + > This software is released under the MIT license: > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -35229,14 +34611,14 @@ License files: > 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. - + ---------------------------------------- - + ### shebang-command@v2.0.0 - + License: MIT By: Kevin Mårtensson - + > MIT License > > Copyright (c) Kevin Mårtensson (github.com/kevva) @@ -35246,14 +34628,14 @@ License files: > 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. - + ---------------------------------------- - + ### shebang-regex@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -35263,15 +34645,15 @@ License files: > 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. - + ---------------------------------------- - + ### sigmund@v1.0.1 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -35287,15 +34669,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### signal-exit@v3.0.7 - + License: ISC By: Ben Coe Repository: - + > The ISC License > > Copyright (c) 2015, Contributors @@ -35312,14 +34694,14 @@ License files: > OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, > WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, > ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### simple-html-tokenizer@v0.5.11 - + License: MIT Repository: - + > Copyright (c) 2014 Yehuda Katz and contributors > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -35339,14 +34721,14 @@ License files: > 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. - + ---------------------------------------- - + ### slash@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -35356,14 +34738,14 @@ License files: > 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. - + ---------------------------------------- - + ### state-toggle@v1.0.3 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -35386,14 +34768,14 @@ License files: > 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. - + ---------------------------------------- - + ### string-width@v5.0.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35403,14 +34785,14 @@ License files: > 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. - + ---------------------------------------- - + ### strip-ansi@v7.0.1 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35420,14 +34802,14 @@ License files: > 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. - + ---------------------------------------- - + ### strip-final-newline@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35437,14 +34819,14 @@ License files: > 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. - + ---------------------------------------- - + ### supports-color@v5.5.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -35454,14 +34836,14 @@ License files: > 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. - + ---------------------------------------- - + ### temp-dir@v2.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -35471,14 +34853,14 @@ License files: > 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. - + ---------------------------------------- - + ### tempy@v2.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35488,14 +34870,14 @@ License files: > 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. - + ---------------------------------------- - + ### to-regex-range@v5.0.1 - + License: MIT By: Jon Schlinkert - + > The MIT License (MIT) > > Copyright (c) 2015-present, Jon Schlinkert. @@ -35517,20 +34899,20 @@ License files: > 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. - + ---------------------------------------- - + ### trim@v0.0.1 - + By: TJ Holowaychuk - + ---------------------------------------- - + ### trim-trailing-lines@v1.1.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -35553,14 +34935,14 @@ License files: > 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. - + ---------------------------------------- - + ### trough@v1.0.5 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -35582,214 +34964,129 @@ License files: > 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. - + ---------------------------------------- - + ### tslib@v1.14.1 - + License: 0BSD By: Microsoft Corp. Repository: - - > Copyright (c) Microsoft Corporation. - - > - - > Permission to use, copy, modify, and/or distribute this software for any - - > purpose with or without fee is hereby granted. - - > - - > THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - - > REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - - > AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - - > INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - - > LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - - > OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - + + > Copyright (c) Microsoft Corporation. + > + > Permission to use, copy, modify, and/or distribute this software for any + > purpose with or without fee is hereby granted. + > + > THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + > REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + > AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + > INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + > LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + > OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### tsutils@v3.21.0 - + License: MIT By: Klaus Meinhardt Repository: - - > The MIT License (MIT) - - > - - > Copyright (c) 2017 Klaus Meinhardt - - > - - > 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 - + + > The MIT License (MIT) + > + > Copyright (c) 2017 Klaus Meinhardt + > + > 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. - + ---------------------------------------- - + ### typescript@v4.7.2 - + License: Apache-2.0 By: Microsoft Corp. Repository: - - > Apache License - - > - - > Version 2.0, January 2004 - - > - - > http://www.apache.org/licenses/ - - > - - > TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - > - - > 1. Definitions. - - > - - > "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - - > - - > "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - - > - - > "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - - > - - > "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - - > - - > "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - - > - - > "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - - > - - > "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - - > - - > "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - - > - - > "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - - > - - > "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - - > - - > 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - - > - - > 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - - > - - > 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - > - - > You must give any other recipients of the Work or Derivative Works a copy of this License; and - - > - - > You must cause any modified files to carry prominent notices stating that You changed the files; and - - > - - > You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - > - - > If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - - > - - > 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - - > - - > 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - - > - - > 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - - > - - > 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - - > - - > 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - - > - + + > Apache License + > + > Version 2.0, January 2004 + > + > http://www.apache.org/licenses/ + > + > TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + > + > 1. Definitions. + > + > "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + > + > "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + > + > "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + > + > "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + > + > "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + > + > "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + > + > "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + > + > "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + > + > "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + > + > "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + > + > 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + > + > 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + > + > 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + > + > You must give any other recipients of the Work or Derivative Works a copy of this License; and + > + > You must cause any modified files to carry prominent notices stating that You changed the files; and + > + > You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + > + > If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + > + > 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + > + > 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + > + > 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + > + > 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + > + > 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + > > END OF TERMS AND CONDITIONS - + ---------------------------------------- - + ### unherit@v1.1.3 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -35811,14 +35108,14 @@ License files: > 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. - + ---------------------------------------- - + ### unified@v9.2.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -35840,15 +35137,15 @@ License files: > 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. - + ---------------------------------------- - + ### uniq@v1.0.1 - + License: MIT By: Mikola Lysenko Repository: - + > The MIT License (MIT) > > Copyright (c) 2013 Mikola Lysenko @@ -35870,14 +35167,14 @@ License files: > 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. - + ---------------------------------------- - + ### unique-string@v3.0.0 - + License: MIT By: Sindre Sorhus - + > MIT License > > Copyright (c) Sindre Sorhus (https://sindresorhus.com) @@ -35887,14 +35184,14 @@ License files: > 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. - + ---------------------------------------- - + ### unist-util-is@v4.1.0 - + License: MIT By: Titus Wormer - + > (The MIT license) > > Copyright (c) 2015 Titus Wormer @@ -35917,14 +35214,14 @@ License files: > 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. - + ---------------------------------------- - + ### unist-util-remove-position@v2.0.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -35947,14 +35244,14 @@ License files: > 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. - + ---------------------------------------- - + ### unist-util-stringify-position@v2.0.3 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -35977,14 +35274,14 @@ License files: > 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. - + ---------------------------------------- - + ### unist-util-visit@v2.0.3 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -36007,14 +35304,14 @@ License files: > 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. - + ---------------------------------------- - + ### unist-util-visit-parents@v3.1.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -36037,14 +35334,14 @@ License files: > 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. - + ---------------------------------------- - + ### vfile@v4.2.1 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2015 Titus Wormer @@ -36066,14 +35363,14 @@ License files: > 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. - + ---------------------------------------- - + ### vfile-location@v3.2.0 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2016 Titus Wormer @@ -36096,14 +35393,14 @@ License files: > 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. - + ---------------------------------------- - + ### vfile-message@v2.0.4 - + License: MIT By: Titus Wormer - + > (The MIT License) > > Copyright (c) 2017 Titus Wormer @@ -36126,14 +35423,14 @@ License files: > 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. - + ---------------------------------------- - + ### vnopts@v1.0.2 - + License: MIT By: Ika - + > MIT License > > Copyright (c) Ika (https://github.com/ikatyang) @@ -36155,15 +35452,15 @@ License files: > 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. - + ---------------------------------------- - + ### wcwidth@v1.0.1 - + License: MIT By: Tim Oxley Repository: - + > wcwidth.js: JavaScript Portng of Markus Kuhn's wcwidth() Implementation > ======================================================================= > @@ -36193,15 +35490,15 @@ License files: > IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > POSSIBILITY OF SUCH DAMAGE. - + ---------------------------------------- - + ### which@v2.0.2 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -36217,15 +35514,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### wrappy@v1.0.2 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -36241,14 +35538,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### xtend@v4.0.2 - + License: MIT By: Raynos - + > The MIT License (MIT) > Copyright (c) 2012-2014 Raynos. > @@ -36269,15 +35566,15 @@ License files: > 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. - + ---------------------------------------- - + ### yallist@v2.1.2 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -36293,15 +35590,15 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### yallist@v4.0.0 - + License: ISC By: Isaac Z. Schlueter Repository: - + > The ISC License > > Copyright (c) Isaac Z. Schlueter and Contributors @@ -36317,14 +35614,14 @@ License files: > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR > IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - + ---------------------------------------- - + ### yaml@v1.10.2 - + License: ISC By: Eemeli Aro - + > Copyright 2018 Eemeli Aro > > Permission to use, copy, modify, and/or distribute this software for any purpose @@ -36338,14 +35635,14 @@ License files: > OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER > TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF > THIS SOFTWARE. - + ---------------------------------------- - + ### yaml-unist-parser@v1.3.1 - + License: MIT By: Ika - + > MIT License > > Copyright (c) Ika (https://github.com/ikatyang) @@ -36367,31 +35664,30 @@ License files: > 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. + - + ### [pretty-format](https://www.npmjs.com/package/pretty-format) (version 27.5.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -36399,31 +35695,30 @@ License files: 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. + - + ### [prop-types](https://www.npmjs.com/package/prop-types) (version 15.8.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2013-present, Facebook, Inc. - + 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 @@ -36431,21 +35726,20 @@ License files: 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. + - + ### [proxy-addr](https://www.npmjs.com/package/proxy-addr) (version 2.0.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2016 Douglas Christopher Wilson - + 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 @@ -36453,10 +35747,10 @@ License files: 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. @@ -36464,31 +35758,30 @@ License files: 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. + - + ### [pump](https://www.npmjs.com/package/pump) (version 3.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Mathias Buus - + 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 @@ -36497,18 +35790,16 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [punycode](https://www.npmjs.com/package/punycode) (version 2.3.1) - License tags: MIT License files: - -- LICENSE-MIT.txt: +* LICENSE-MIT.txt: Copyright Mathias Bynens - + 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 @@ -36516,10 +35807,10 @@ License files: 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 @@ -36527,56 +35818,54 @@ License files: 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. + - + ### [pupa](https://www.npmjs.com/package/pupa) (version 2.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [qs](https://www.npmjs.com/package/qs) (version 6.13.0) - License tags: BSD-3-Clause License files: - -- LICENSE.md: +* LICENSE.md: BSD 3-Clause License - + Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -36587,22 +35876,21 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [range-parser](https://www.npmjs.com/package/range-parser) (version 1.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012-2014 TJ Holowaychuk Copyright (c) 2015-2016 Douglas Christopher Wilson + ### [raw-body](https://www.npmjs.com/package/raw-body) (version 2.5.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013-2014 Jonathan Ong Copyright (c) 2014-2022 Douglas Christopher Wilson - + 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 @@ -36654,47 +35941,47 @@ License files: 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. + - + ### [rc](https://www.npmjs.com/package/rc) (version 1.2.8) - License tags: (BSD-2-Clause OR MIT OR Apache-2.0) License files: - -- LICENSE.APACHE2: +* LICENSE.APACHE2: Apache License, Version 2.0 - + Copyright (c) 2011 Dominic Tarr - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + -- LICENSE.BSD: +* LICENSE.BSD: Copyright (c) 2013, Dominic Tarr All rights reserved. - + Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - + and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -36705,62 +35992,62 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + The views and conclusions contained in the software and documentation are those - of the authors and should not be interpreted as representing official policies, + of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. + -- LICENSE.MIT: +* LICENSE.MIT: The MIT License - + Copyright (c) 2011 Dominic Tarr - - 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, + + 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 + + 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 + + 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. + - + ### [re-resizable](https://www.npmjs.com/package/re-resizable) (version 6.9.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2018 @bokuweb - + 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 @@ -36768,31 +36055,30 @@ License files: 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. + - + ### [react-dom](https://www.npmjs.com/package/react-dom) (version 17.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -36800,31 +36086,30 @@ License files: 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. + - + ### [react-hotkeys-hook](https://www.npmjs.com/package/react-hotkeys-hook) (version 4.3.7) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2018 Johannes Klauss - + 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 @@ -36832,31 +36117,30 @@ License files: 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. + - + ### [react-intersection-observer](https://www.npmjs.com/package/react-intersection-observer) (version 8.34.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2022 React Intersection Observer authors - + 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 @@ -36864,31 +36148,30 @@ License files: 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. + - + ### [react-is](https://www.npmjs.com/package/react-is) (version 16.13.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -36896,31 +36179,30 @@ License files: 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. + - + ### [react-is](https://www.npmjs.com/package/react-is) (version 17.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -36928,31 +36210,30 @@ License files: 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. + - + ### [react-is](https://www.npmjs.com/package/react-is) (version 18.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -36960,31 +36241,30 @@ License files: 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. + - + ### [react-keyed-flatten-children](https://www.npmjs.com/package/react-keyed-flatten-children) (version 1.3.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Tom McKenzie - + 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 @@ -36992,37 +36272,35 @@ License files: 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. + - + ### [react-leaflet-draw](https://www.npmjs.com/package/react-leaflet-draw) (version 0.19.0) - License tags: ISC - + ### [react-leaflet](https://www.npmjs.com/package/react-leaflet) (version 2.4.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015-present Paul Le Cam and contributors - + 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 @@ -37030,89 +36308,67 @@ License files: 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. + - + ### [react-redux](https://www.npmjs.com/package/react-redux) (version 8.1.3) - License tags: MIT License files: +* LICENSE.md: + + The MIT License (MIT) + + Copyright (c) 2015-present Dan Abramov + + 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. + -- LICENSE.md: - - The MIT License (MIT) - - - - Copyright (c) 2015-present Dan Abramov - - - - 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. - ### [react-transition-group](https://www.npmjs.com/package/react-transition-group) (version 4.4.5) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: BSD 3-Clause License - + Copyright (c) 2018, React Community Forked from React (https://github.com/facebook/react) Copyright 2013-present, Facebook, Inc. All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -37123,31 +36379,30 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [react-virtual](https://www.npmjs.com/package/react-virtual) (version 2.10.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Tanner Linsley - + 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 @@ -37155,31 +36410,30 @@ License files: 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. + - + ### [react-virtualized-auto-sizer](https://www.npmjs.com/package/react-virtualized-auto-sizer) (version 1.0.24) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: MIT License - + Copyright (c) 2023 Brian Vaughn - + 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 @@ -37187,31 +36441,30 @@ License files: 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. + - + ### [react-window](https://www.npmjs.com/package/react-window) (version 1.8.10) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2018 Brian Vaughn - + 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 @@ -37219,31 +36472,30 @@ License files: 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. + - + ### [react](https://www.npmjs.com/package/react) (version 17.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -37251,32 +36503,31 @@ License files: 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. + - + ### [readable-stream](https://www.npmjs.com/package/readable-stream) (version 3.6.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Node.js is licensed for use as follows: - + """ Copyright Node.js contributors. All rights reserved. - + 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 @@ -37285,10 +36536,10 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - + This license applies to parts of Node.js originating from the https://github.com/joyent/node repository: - + """ Copyright Joyent, Inc. and other Node contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy @@ -37297,10 +36548,10 @@ License files: 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 @@ -37309,83 +36560,61 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ + - + ### [redux-thunk](https://www.npmjs.com/package/redux-thunk) (version 2.4.2) - License tags: MIT License files: - -- LICENSE.md: - - The MIT License (MIT) - - - - Copyright (c) 2015-present Dan Abramov - - - - 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: +* LICENSE.md: + + The MIT License (MIT) + + Copyright (c) 2015-present Dan Abramov + + 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. + - - 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. - - ### [redux](https://www.npmjs.com/package/redux) (version 4.2.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2015-present Dan Abramov - + 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 @@ -37393,77 +36622,72 @@ License files: 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. + - + ### [reflux-core](https://www.npmjs.com/package/reflux-core) (version 0.3.0) - License tags: BSD-3-Clause License files: - -- LICENSE.md: +* LICENSE.md: Copyright (c) 2014, Mikael Brassman All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ### [reflux](https://www.npmjs.com/package/reflux) (version 0.4.1) - License tags: BSD-3-Clause License files: - -- LICENSE.md: +* LICENSE.md: Copyright (c) 2014, Mikael Brassman All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + ### [regexp.prototype.flags](https://www.npmjs.com/package/regexp.prototype.flags) (version 1.5.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (C) 2014 Jordan Harband - + 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 @@ -37471,37 +36695,37 @@ License files: 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. + + - + ### [reservoir](https://www.npmjs.com/package/reservoir) (version 0.1.2) - License tags: MIT - + ### [resolve-mongodb-srv](https://www.npmjs.com/package/resolve-mongodb-srv) (version 1.1.5) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -37509,24 +36733,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -37534,7 +36758,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -37548,18 +36772,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -37575,24 +36799,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -37609,14 +36833,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -37624,12 +36848,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -37639,7 +36863,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -37651,7 +36875,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -37662,67 +36886,66 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + Copyright 2020 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [run-applescript](https://www.npmjs.com/package/run-applescript) (version 5.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [safe-buffer](https://www.npmjs.com/package/safe-buffer) (version 5.2.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) Feross Aboukhadijeh - + 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 @@ -37730,31 +36953,30 @@ License files: 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. + - + ### [safer-buffer](https://www.npmjs.com/package/safer-buffer) (version 2.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2018 Nikita Skovoroda - + 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 @@ -37762,31 +36984,30 @@ License files: 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. + - + ### [scheduler](https://www.npmjs.com/package/scheduler) (version 0.20.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -37794,31 +37015,29 @@ License files: 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. + - + ### [select](https://www.npmjs.com/package/select) (version 1.1.2) - License tags: MIT - + ### [semver](https://www.npmjs.com/package/semver) (version 6.3.1) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -37826,25 +37045,24 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [semver](https://www.npmjs.com/package/semver) (version 7.6.3) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -37852,22 +37070,21 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [send](https://www.npmjs.com/package/send) (version 0.19.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2012 TJ Holowaychuk Copyright (c) 2014-2022 Douglas Christopher Wilson - + 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 @@ -37875,10 +37092,10 @@ License files: 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. @@ -37886,24 +37103,23 @@ License files: 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. + - + ### [serve-static](https://www.npmjs.com/package/serve-static) (version 1.16.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2010 Sencha Inc. Copyright (c) 2011 LearnBoost Copyright (c) 2011 TJ Holowaychuk Copyright (c) 2014-2016 Douglas Christopher Wilson - + 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 @@ -37911,10 +37127,10 @@ License files: 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. @@ -37922,31 +37138,30 @@ License files: 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. + - + ### [set-function-length](https://www.npmjs.com/package/set-function-length) (version 1.2.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Jordan Harband and contributors - + 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 @@ -37954,31 +37169,30 @@ License files: 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. + - + ### [set-function-name](https://www.npmjs.com/package/set-function-name) (version 2.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Jordan Harband and contributors - + 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 @@ -37986,23 +37200,22 @@ License files: 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. + - + ### [setprototypeof](https://www.npmjs.com/package/setprototypeof) (version 1.2.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: Copyright (c) 2015, Wes Todd - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY @@ -38010,71 +37223,68 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [shebang-command](https://www.npmjs.com/package/shebang-command) (version 2.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Kevin Mårtensson (github.com/kevva) - + 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. + - + ### [shebang-regex](https://www.npmjs.com/package/shebang-regex) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [side-channel](https://www.npmjs.com/package/side-channel) (version 1.0.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Jordan Harband - + 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 @@ -38082,26 +37292,25 @@ License files: 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. + - + ### [signal-exit](https://www.npmjs.com/package/signal-exit) (version 3.0.7) - License tags: ISC License files: - -- LICENSE.txt: +* LICENSE.txt: The ISC License - + Copyright (c) 2015, Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE @@ -38109,26 +37318,25 @@ License files: OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [signal-exit](https://www.npmjs.com/package/signal-exit) (version 4.1.0) - License tags: ISC License files: - -- LICENSE.txt: +* LICENSE.txt: The ISC License - + Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE @@ -38136,114 +37344,110 @@ License files: OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [simple-concat](https://www.npmjs.com/package/simple-concat) (version 1.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) Feross Aboukhadijeh - + 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. + - + ### [simple-get](https://www.npmjs.com/package/simple-get) (version 4.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) Feross Aboukhadijeh - + 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. + - + ### [smart-buffer](https://www.npmjs.com/package/smart-buffer) (version 4.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013-2017 Josh Glazebrook - + 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. + - + ### [socks-proxy-agent](https://www.npmjs.com/package/socks-proxy-agent) (version 8.0.4) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2013 Nathan Rajlich - + 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 @@ -38251,10 +37455,10 @@ License files: 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. @@ -38263,59 +37467,56 @@ License files: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [socks](https://www.npmjs.com/package/socks) (version 2.8.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013 Josh Glazebrook - + 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. + - + ### [sort-keys-length](https://www.npmjs.com/package/sort-keys-length) (version 1.0.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: Copyright (c) Kevin Mårtensson - + 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 @@ -38323,31 +37524,30 @@ License files: 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. + - + ### [sort-keys](https://www.npmjs.com/package/sort-keys) (version 1.1.2) - License tags: MIT License files: - -- license: +* license: The MIT License (MIT) - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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 @@ -38355,230 +37555,137 @@ License files: 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. + - + ### [source-code-pro](https://www.npmjs.com/package/source-code-pro) (version 2.38.0) - License tags: OFL-1.1 License files: - -- LICENSE.md: - - Copyright 2010-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. - - - - This Font Software is licensed under the SIL Open Font License, Version 1.1. - - - - This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - - - - - ----------------------------------------------------------- - - SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 - - ----------------------------------------------------------- - - - - PREAMBLE - - The goals of the Open Font License (OFL) are to stimulate worldwide - - development of collaborative font projects, to support the font creation - - efforts of academic and linguistic communities, and to provide a free and - - open framework in which fonts may be shared and improved in partnership - - with others. - - - - The OFL allows the licensed fonts to be used, studied, modified and - - redistributed freely as long as they are not sold by themselves. The - - fonts, including any derivative works, can be bundled, embedded, - - redistributed and/or sold with any software provided that any reserved - - names are not used by derivative works. The fonts and derivatives, - - however, cannot be released under any other type of license. The - - requirement for fonts to remain under this license does not apply - - to any document created using the fonts or their derivatives. - - - - DEFINITIONS - - "Font Software" refers to the set of files released by the Copyright - - Holder(s) under this license and clearly marked as such. This may - - include source files, build scripts and documentation. - - - - "Reserved Font Name" refers to any names specified as such after the - - copyright statement(s). - - - - "Original Version" refers to the collection of Font Software components as - - distributed by the Copyright Holder(s). - +* LICENSE.md: + + Copyright 2010-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + + This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + + ----------------------------------------------------------- + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + ----------------------------------------------------------- + + PREAMBLE + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. + + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. + + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + + "Original Version" refers to the collection of Font Software components as + distributed by the Copyright Holder(s). + + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting -- in part or in whole -- any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. + + "Author" refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. + + PERMISSION & CONDITIONS + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + + 1) Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. + + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. + + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + + 5) The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. + + TERMINATION + This license becomes null and void if any of the above conditions are + not met. + + DISCLAIMER + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE + COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + OTHER DEALINGS IN THE FONT SOFTWARE. + - "Modified Version" refers to any derivative made by adding to, deleting, - - or substituting -- in part or in whole -- any of the components of the - - Original Version, by changing formats or by porting the Font Software to a - - new environment. - - - - "Author" refers to any designer, engineer, programmer, technical - - writer or other person who contributed to the Font Software. - - - - PERMISSION & CONDITIONS - - Permission is hereby granted, free of charge, to any person obtaining - - a copy of the Font Software, to use, study, copy, merge, embed, modify, - - redistribute, and sell modified and unmodified copies of the Font - - Software, subject to the following conditions: - - - - 1) Neither the Font Software nor any of its individual components, - - in Original or Modified Versions, may be sold by itself. - - - - 2) Original or Modified Versions of the Font Software may be bundled, - - redistributed and/or sold with any software, provided that each copy - - contains the above copyright notice and this license. These can be - - included either as stand-alone text files, human-readable headers or - - in the appropriate machine-readable metadata fields within text or - - binary files as long as those fields can be easily viewed by the user. - - - - 3) No Modified Version of the Font Software may use the Reserved Font - - Name(s) unless explicit written permission is granted by the corresponding - - Copyright Holder. This restriction only applies to the primary font name as - - presented to the users. - - - - 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font - - Software shall not be used to promote, endorse or advertise any - - Modified Version, except to acknowledge the contribution(s) of the - - Copyright Holder(s) and the Author(s) or with their explicit written - - permission. - - - - 5) The Font Software, modified or unmodified, in part or in whole, - - must be distributed entirely under this license, and must not be - - distributed under any other license. The requirement for fonts to - - remain under this license does not apply to any document created - - using the Font Software. - - - - TERMINATION - - This license becomes null and void if any of the above conditions are - - not met. - - - - DISCLAIMER - - THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF - - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT - - OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE - - COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - - INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL - - DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - - FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM - - OTHER DEALINGS IN THE FONT SOFTWARE. - - ### [source-map](https://www.npmjs.com/package/source-map) (version 0.6.1) - License tags: BSD-3-Clause License files: +* LICENSE: -- LICENSE: - + Copyright (c) 2009-2011, Mozilla Foundation and contributors All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + * Neither the names of the Mozilla Foundation nor the names of project contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -38589,31 +37696,30 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [sparse-bitfield](https://www.npmjs.com/package/sparse-bitfield) (version 3.0.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2016 Mathias Buus - + 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 @@ -38621,20 +37727,19 @@ License files: 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. + - + ### [sprintf-js](https://www.npmjs.com/package/sprintf-js) (version 1.1.3) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright (c) 2007-present, Alexandru Mărășteanu All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright @@ -38645,7 +37750,7 @@ License files: * Neither the name of this software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -38656,29 +37761,28 @@ License files: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [ssh2](https://www.npmjs.com/package/ssh2) (version 1.15.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright Brian White. All rights reserved. - + 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 @@ -38687,31 +37791,30 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [statuses](https://www.npmjs.com/package/statuses) (version 2.0.1) - License tags: MIT License files: +* LICENSE: -- LICENSE: - + The MIT License (MIT) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2016 Douglas Christopher Wilson - + 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 @@ -38719,31 +37822,30 @@ License files: 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. + - + ### [stop-iteration-iterator](https://www.npmjs.com/package/stop-iteration-iterator) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2023 Jordan Harband - + 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 @@ -38751,54 +37853,52 @@ License files: 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. + - + ### [stream-chain](https://www.npmjs.com/package/stream-chain) (version 2.2.5) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: Copyright 2019 Eugene Lazutkin - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [stream-json](https://www.npmjs.com/package/stream-json) (version 1.7.5) - License tags: BSD-3-Clause License files: - -- LICENSE: +* LICENSE: This library is available under the terms of the modified BSD license. No external contributions are allowed under licenses which are fundamentally incompatible with the BSD license that this library is distributed under. - + The text of the BSD license is reproduced below. - + ------------------------------------------------------------------------------- The "New" BSD License: ********************** - + Copyright (c) 2005-2018, Eugene Lazutkin All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, @@ -38807,7 +37907,7 @@ License files: * Neither the name of Eugene Lazutkin nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -38818,32 +37918,31 @@ License files: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [string_decoder](https://www.npmjs.com/package/string_decoder) (version 1.3.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Node.js is licensed for use as follows: - + """ Copyright Node.js contributors. All rights reserved. - + 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 @@ -38852,10 +37951,10 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - + This license applies to parts of Node.js originating from the https://github.com/joyent/node repository: - + """ Copyright Joyent, Inc. and other Node contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy @@ -38864,10 +37963,10 @@ License files: 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 @@ -38876,131 +37975,126 @@ License files: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ + + - + ### [strip-bom-buf](https://www.npmjs.com/package/strip-bom-buf) (version 2.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [strip-bom-stream](https://www.npmjs.com/package/strip-bom-stream) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [strip-final-newline](https://www.npmjs.com/package/strip-final-newline) (version 2.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [strip-final-newline](https://www.npmjs.com/package/strip-final-newline) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [strip-json-comments](https://www.npmjs.com/package/strip-json-comments) (version 3.1.1) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [strnum](https://www.npmjs.com/package/strnum) (version 1.0.5) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2021 Natural Intelligence - + 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 @@ -39008,29 +38102,28 @@ License files: 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. + - + ### [style-mod](https://www.npmjs.com/package/style-mod) (version 4.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2018 by Marijn Haverbeke and others - + 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 @@ -39038,31 +38131,30 @@ License files: 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. + - + ### [stylis](https://www.npmjs.com/package/stylis) (version 4.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016-present Sultan Tarimo - + 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 @@ -39070,71 +38162,69 @@ License files: 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. + - + ### [supports-color](https://www.npmjs.com/package/supports-color) (version 5.5.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [supports-color](https://www.npmjs.com/package/supports-color) (version 7.2.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [system-ca](https://www.npmjs.com/package/system-ca) (version 2.0.1) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -39142,24 +38232,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -39167,7 +38257,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -39181,18 +38271,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -39208,24 +38298,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -39242,14 +38332,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -39257,12 +38347,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -39272,7 +38362,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -39284,7 +38374,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -39295,47 +38385,47 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + Copyright 2020 MongoDB Inc. - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + - + ### [tabbable](https://www.npmjs.com/package/tabbable) (version 5.3.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 David Clark - + 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 @@ -39343,31 +38433,31 @@ License files: 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. + + - + ### [tar-fs](https://www.npmjs.com/package/tar-fs) (version 2.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Mathias Buus - + 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 @@ -39376,30 +38466,28 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [tar-stream](https://www.npmjs.com/package/tar-stream) (version 1.6.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2014 Mathias Buus - + 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 @@ -39408,59 +38496,56 @@ License files: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + ### [text-table](https://www.npmjs.com/package/text-table) (version 0.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: This software is released under the MIT license: - + 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. + - + ### [tiny-emitter](https://www.npmjs.com/package/tiny-emitter) (version 2.1.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2017 Scott Corgan - + 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 @@ -39468,51 +38553,50 @@ License files: 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. + + - + ### [titleize](https://www.npmjs.com/package/titleize) (version 3.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (https://sindresorhus.com) - + 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. + - + ### [to-buffer](https://www.npmjs.com/package/to-buffer) (version 1.1.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2016 Mathias Buus - + 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 @@ -39520,52 +38604,50 @@ License files: 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. + - + ### [to-fast-properties](https://www.npmjs.com/package/to-fast-properties) (version 2.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) 2014 Petka Antonov 2015 Sindre Sorhus - + 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. + - + ### [toidentifier](https://www.npmjs.com/package/toidentifier) (version 1.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2016 Douglas Christopher Wilson - + 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 @@ -39573,37 +38655,35 @@ License files: 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. + - + ### [tr46](https://www.npmjs.com/package/tr46) (version 0.0.3) - License tags: MIT - + ### [tr46](https://www.npmjs.com/package/tr46) (version 4.1.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) Sebastian Mayr - + 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 @@ -39611,218 +38691,167 @@ License files: 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. + - + ### [tslib](https://www.npmjs.com/package/tslib) (version 2.6.2) - License tags: 0BSD License files: - -- CopyrightNotice.txt: - - /****************************************************************************** - - Copyright (c) Microsoft Corporation. - - - - Permission to use, copy, modify, and/or distribute this software for any - - purpose with or without fee is hereby granted. - - - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - +* CopyrightNotice.txt: + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + + +* LICENSE.txt: + + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - -- LICENSE.txt: - - Copyright (c) Microsoft Corporation. - - - - Permission to use, copy, modify, and/or distribute this software for any - - purpose with or without fee is hereby granted. - - - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - - PERFORMANCE OF THIS SOFTWARE. - ### [tslib](https://www.npmjs.com/package/tslib) (version 2.6.3) - License tags: 0BSD License files: - -- CopyrightNotice.txt: - - /****************************************************************************** - - Copyright (c) Microsoft Corporation. - - - - Permission to use, copy, modify, and/or distribute this software for any - - purpose with or without fee is hereby granted. - - - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - +* CopyrightNotice.txt: + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + + +* LICENSE.txt: + + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - -- LICENSE.txt: - - Copyright (c) Microsoft Corporation. - - - - Permission to use, copy, modify, and/or distribute this software for any - - purpose with or without fee is hereby granted. - - - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - - PERFORMANCE OF THIS SOFTWARE. - ### [tunnel-agent](https://www.npmjs.com/package/tunnel-agent) (version 0.6.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License - + Version 2.0, January 2004 - + http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + You must give any other recipients of the Work or Derivative Works a copy of this License; and - + You must cause any modified files to carry prominent notices stating that You changed the files; and - + You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + ### [tweetnacl](https://www.npmjs.com/package/tweetnacl) (version 0.14.5) - License tags: Unlicense License files: - -- LICENSE: +* LICENSE: This is free and unencumbered software released into the public domain. - + Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. - + In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit @@ -39830,7 +38859,7 @@ License files: successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. - + 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. @@ -39838,24 +38867,23 @@ License files: 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. - + For more information, please refer to + - + ### [type-is](https://www.npmjs.com/package/type-is) (version 1.6.18) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Jonathan Ong Copyright (c) 2014-2015 Douglas Christopher Wilson - + 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 @@ -39863,10 +38891,10 @@ License files: 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. @@ -39874,52 +38902,50 @@ License files: 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. + - + ### [universalify](https://www.npmjs.com/package/universalify) (version 2.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2017, Ryan Zimmerman - + 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. + - + ### [unpipe](https://www.npmjs.com/package/unpipe) (version 1.0.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2015 Douglas Christopher Wilson - + 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 @@ -39927,10 +38953,10 @@ License files: 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. @@ -39938,71 +38964,68 @@ License files: 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. + - + ### [untildify](https://www.npmjs.com/package/untildify) (version 4.0.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [unused-filename](https://www.npmjs.com/package/unused-filename) (version 2.1.0) - License tags: MIT License files: - -- license: +* license: MIT License - + Copyright (c) Sindre Sorhus (sindresorhus.com) - + 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. + - + ### [use-sync-external-store](https://www.npmjs.com/package/use-sync-external-store) (version 1.2.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) Facebook, Inc. and its affiliates. - + 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 @@ -40010,21 +39033,20 @@ License files: 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. + - + ### [util-deprecate](https://www.npmjs.com/package/util-deprecate) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014 Nathan Rajlich - + 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 @@ -40033,10 +39055,10 @@ License files: 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 @@ -40045,72 +39067,69 @@ License files: 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. + - + ### [utils-merge](https://www.npmjs.com/package/utils-merge) (version 1.0.1) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2013-2017 Jared Hanson - + 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. + - + ### [uuid](https://www.npmjs.com/package/uuid) (version 9.0.1) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: The MIT License (MIT) - + Copyright (c) 2010-2020 Robert Kieffer and other contributors - + 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. + - + ### [vary](https://www.npmjs.com/package/vary) (version 1.1.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: (The MIT License) - + Copyright (c) 2014-2017 Douglas Christopher Wilson - + 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 @@ -40118,10 +39137,10 @@ License files: 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. @@ -40129,29 +39148,28 @@ License files: 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. + - + ### [w3c-keyname](https://www.npmjs.com/package/w3c-keyname) (version 2.2.6) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright (C) 2016 by Marijn Haverbeke and others - + 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 @@ -40159,31 +39177,30 @@ License files: 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. + - + ### [warning](https://www.npmjs.com/package/warning) (version 4.0.3) - License tags: MIT License files: - -- LICENSE.md: +* LICENSE.md: MIT License - + Copyright (c) 2013-present, Facebook, Inc. - + 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 @@ -40191,32 +39208,31 @@ License files: 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. + - + ### [web-streams-polyfill](https://www.npmjs.com/package/web-streams-polyfill) (version 3.3.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2024 Mattias Buelens Copyright (c) 2016 Diwank Singh Tomer - + 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 @@ -40224,31 +39240,31 @@ License files: 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. + - + ### [web-vitals](https://www.npmjs.com/package/web-vitals) (version 2.1.2) - License tags: Apache-2.0 License files: +* LICENSE: -- LICENSE: - + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -40256,24 +39272,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -40281,7 +39297,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -40295,18 +39311,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -40322,24 +39338,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -40356,14 +39372,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -40371,12 +39387,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -40386,7 +39402,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -40398,7 +39414,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -40409,11 +39425,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -40422,45 +39438,44 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright 2020 Google LLC - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + https://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + - + ### [web-worker](https://www.npmjs.com/package/web-worker) (version 1.3.0) - License tags: Apache-2.0 License files: - -- LICENSE: +* LICENSE: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ - + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - + 1. Definitions. - + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -40468,24 +39483,24 @@ License files: direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -40493,7 +39508,7 @@ License files: of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -40507,18 +39522,18 @@ License files: Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -40534,24 +39549,24 @@ License files: or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -40568,14 +39583,14 @@ License files: or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -40583,12 +39598,12 @@ License files: Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -40598,7 +39613,7 @@ License files: PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -40610,7 +39625,7 @@ License files: work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -40621,11 +39636,11 @@ License files: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - + END OF TERMS AND CONDITIONS - + APPENDIX: How to apply the Apache License to your work. - + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -40634,79 +39649,75 @@ License files: file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - + Copyright [yyyy] [name of copyright owner] - + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + ### [webidl-conversions](https://www.npmjs.com/package/webidl-conversions) (version 3.0.1) - License tags: BSD-2-Clause License files: - -- LICENSE.md: +* LICENSE.md: # The BSD 2-Clause License - + Copyright (c) 2014, Domenic Denicola All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [webidl-conversions](https://www.npmjs.com/package/webidl-conversions) (version 7.0.0) - License tags: BSD-2-Clause License files: - -- LICENSE.md: +* LICENSE.md: # The BSD 2-Clause License - + Copyright (c) 2014, Domenic Denicola All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - + ### [webpack](https://www.npmjs.com/package/webpack) (version 5.94.0) - License tags: MIT License files: - -- LICENSE: +* LICENSE: Copyright JS Foundation and other contributors - + 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 @@ -40714,10 +39725,10 @@ License files: 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. @@ -40725,31 +39736,30 @@ License files: 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. + - + ### [whatwg-url](https://www.npmjs.com/package/whatwg-url) (version 13.0.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: The MIT License (MIT) - + Copyright (c) Sebastian Mayr - + 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 @@ -40757,31 +39767,30 @@ License files: 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. + - + ### [whatwg-url](https://www.npmjs.com/package/whatwg-url) (version 5.0.0) - License tags: MIT License files: - -- LICENSE.txt: +* LICENSE.txt: The MIT License (MIT) - + Copyright (c) 2015–2016 Sebastian Mayr - + 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 @@ -40789,31 +39798,30 @@ License files: 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. + - + ### [which-boxed-primitive](https://www.npmjs.com/package/which-boxed-primitive) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Jordan Harband - + 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 @@ -40821,31 +39829,30 @@ License files: 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. + - + ### [which-collection](https://www.npmjs.com/package/which-collection) (version 1.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2019 Inspect JS - + 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 @@ -40853,31 +39860,30 @@ License files: 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. + - + ### [which-typed-array](https://www.npmjs.com/package/which-typed-array) (version 1.1.15) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) - + Copyright (c) 2015 Jordan Harband - + 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 @@ -40885,25 +39891,25 @@ License files: 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. + + - + ### [which](https://www.npmjs.com/package/which) (version 2.0.2) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -40911,31 +39917,30 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [winreg-ts](https://www.npmjs.com/package/winreg-ts) (version 1.0.4) - License tags: BSD-2-Clause License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2020 Emmanuel Kimmerlin - + 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 @@ -40943,25 +39948,24 @@ License files: 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. + - + ### [wrappy](https://www.npmjs.com/package/wrappy) (version 1.0.2) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -40969,46 +39973,45 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [write-file-atomic](https://www.npmjs.com/package/write-file-atomic) (version 5.0.1) - License tags: ISC License files: - -- LICENSE.md: +* LICENSE.md: Copyright (c) 2015, Rebecca Turner - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + - + ### [xtend](https://www.npmjs.com/package/xtend) (version 4.0.2) - License tags: MIT License files: - -- LICENSE: +* LICENSE: The MIT License (MIT) Copyright (c) 2012-2014 Raynos. - + 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 @@ -41016,25 +40019,24 @@ License files: 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. + - + ### [yallist](https://www.npmjs.com/package/yallist) (version 3.1.1) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -41042,25 +40044,24 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [yallist](https://www.npmjs.com/package/yallist) (version 4.0.0) - License tags: ISC License files: - -- LICENSE: +* LICENSE: The ISC License - + Copyright (c) Isaac Z. Schlueter and Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR @@ -41068,24 +40069,23 @@ License files: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [yargs-parser](https://www.npmjs.com/package/yargs-parser) (version 21.1.1) - License tags: ISC License files: - -- LICENSE.txt: +* LICENSE.txt: Copyright (c) 2016, Contributors - + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE @@ -41093,31 +40093,30 @@ License files: OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + - + ### [zod](https://www.npmjs.com/package/zod) (version 3.22.3) - License tags: MIT License files: - -- LICENSE: +* LICENSE: MIT License - + Copyright (c) 2020 Colin McDonnell - + 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 @@ -41125,3 +40124,6 @@ License files: 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/docs/tracking-plan.md b/docs/tracking-plan.md index 6f640c165fe..716ed6f3347 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 1, 2024 at 01:54 PM +Generated on Wed, Oct 2, 2024 at 08:47 AM ## Table of Contents From e46cc6d699788ddebb4c217ecaff1490889b22b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 2 Oct 2024 18:13:17 +0200 Subject: [PATCH 56/97] fix(hadron-build): use `ditto` instead of zip to package on MacOS COMPASS-7737 (#6315) Use ditto instead of zip to package on MacOS --- packages/hadron-build/lib/zip.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/hadron-build/lib/zip.js b/packages/hadron-build/lib/zip.js index 63c720405e1..557f6f300d3 100644 --- a/packages/hadron-build/lib/zip.js +++ b/packages/hadron-build/lib/zip.js @@ -24,8 +24,15 @@ async function zip(_opts, done) { if (opts.platform !== 'darwin') { await promisify(zipFolder)(opts.dir, opts.outPath); } else { - const args = ['-r', '--symlinks', opts.outPath, './']; - execFileSync('zip', args, { + const args = [ + '-V', // Print a line for every file copied + '-c', // Create an archive at the destination path + '-k', // PKZip archive + '--sequesterRsrc', // Preserve resource forks and HFS meta-data in the subdirectory __MACOSX + './', + opts.outPath, + ]; + execFileSync('ditto', args, { env: process.env, cwd: path.join(opts.dir, '..'), stdio: 'inherit', From 7424a4e00737e699bb080653472cb054f8309c3b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:19:55 +0000 Subject: [PATCH 57/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6319) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 716ed6f3347..8f45b6a7b36 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 2, 2024 at 08:47 AM +Generated on Wed, Oct 2, 2024 at 04:19 PM ## Table of Contents From b5efca6100f6574e3ad808905c5cd762b6022bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 2 Oct 2024 18:35:56 +0200 Subject: [PATCH 58/97] chore(ci): use "archive.targz_pack" command to archive e2e logs (#6316) Use "archive.targz_pack" command to archive e2e logs --- .evergreen/functions.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index 68b4dd24be7..945007a4c97 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -81,12 +81,12 @@ variables: # This is here with the variables because anchors aren't supported across includes post: - - command: shell.exec + - command: archive.targz_pack params: - working_dir: src - shell: bash - script: | - tar czf all-e2e-logs.tgz packages/compass-e2e-tests/.log + target: src/all-e2e-logs.tgz + source_dir: src/packages/compass-e2e-tests/.log + include: + - "**" - command: s3.put params: <<: *save-artifact-params-private From c79c68efaaf973a737d22ffb2c51933e45c7d300 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:42:44 +0000 Subject: [PATCH 59/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6320) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- AUTHORS | 1 + docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 469ce9a8c9b..d33515d2c0e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -90,3 +90,4 @@ Betsy Button <36177962+betsybutton@users.noreply.github.com> Vivian Xiao <57568527+VivianTNT@users.noreply.github.com> admin-token-bot <36773031+admin-token-bot@users.noreply.github.com> Kræn Hansen +Kræn Hansen diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 8f45b6a7b36..3eee2fb1401 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 2, 2024 at 04:19 PM +Generated on Wed, Oct 2, 2024 at 04:42 PM ## Table of Contents From d68c185a60691b82208f145eaacd1e61dbc0b475 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Thu, 3 Oct 2024 16:50:38 +0100 Subject: [PATCH 60/97] feat(compass-indexes): Poll rolling indexes where available, add status column COMPASS-8217 COMPASS-8329 (#6318) * WIP * add polling for rolling indexes, status column * minus comment * add ticket number * feedback, tests * test rolling index fetch * info icon and tooltip on the rolling index build badge * tweaks --- .../src/components/indexes/indexes.spec.tsx | 15 +-- .../regular-indexes-table/property-field.tsx | 49 +------ .../regular-indexes-table.spec.tsx | 107 ++++++++++++++- .../regular-indexes-table.tsx | 126 +++++++++++++++--- .../regular-indexes-table/status-field.tsx | 102 ++++++++++++++ .../src/modules/regular-indexes.spec.ts | 60 ++++++++- .../src/modules/regular-indexes.ts | 42 +++++- .../src/modules/rolling-indexes-service.ts | 4 +- 8 files changed, 419 insertions(+), 86 deletions(-) create mode 100644 packages/compass-indexes/src/components/regular-indexes-table/status-field.tsx diff --git a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx index 4706d23a155..0c2511a5081 100644 --- a/packages/compass-indexes/src/components/indexes/indexes.spec.tsx +++ b/packages/compass-indexes/src/components/indexes/indexes.spec.tsx @@ -222,11 +222,11 @@ describe('Indexes Component', function () { }); const indexesList = screen.getByTestId('indexes-list'); - const indexPropertyField = within(indexesList).getAllByTestId( - 'indexes-properties-field' - )[1]; - expect(indexPropertyField).to.contain.text('In Progress ...'); + const indexStatusField = within(indexesList).getAllByTestId( + 'indexes-status-field' + )[1]; + expect(indexStatusField).to.contain.text('In Progress'); const dropIndexButton = within(indexesList).queryByTestId( 'index-actions-delete-action' @@ -278,11 +278,10 @@ describe('Indexes Component', function () { }); const indexesList = screen.getByTestId('indexes-list'); - const indexPropertyField = within(indexesList).getAllByTestId( - 'indexes-properties-field' + const indexStatusField = within(indexesList).getAllByTestId( + 'indexes-status-field' )[1]; - - expect(indexPropertyField).to.contain.text('Failed'); + expect(indexStatusField).to.contain.text('Failed'); const dropIndexButton = within(indexesList).getByTestId( 'index-actions-delete-action' diff --git a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx index 2c09340139e..e9994e21d1d 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/property-field.tsx @@ -1,19 +1,8 @@ import React from 'react'; import getIndexHelpLink from '../../utils/index-link-helper'; -import { - spacing, - css, - Tooltip, - Body, - Badge, - BadgeVariant, - useDarkMode, -} from '@mongodb-js/compass-components'; -import type { - InProgressIndex, - RegularIndex, -} from '../../modules/regular-indexes'; +import { spacing, css, Tooltip, Body } from '@mongodb-js/compass-components'; +import type { RegularIndex } from '../../modules/regular-indexes'; import BadgeWithIconLink from '../indexes-table/badge-with-icon-link'; const containerStyles = css({ @@ -61,42 +50,19 @@ const PropertyBadgeWithTooltip: React.FunctionComponent<{ ); }; -const ErrorBadgeWithTooltip: React.FunctionComponent<{ - tooltip?: string | null; - darkMode?: boolean; -}> = ({ tooltip, darkMode }) => { - return ( - Failed} - > - {tooltip} - - ); -}; - type PropertyFieldProps = { cardinality?: RegularIndex['cardinality']; extra?: RegularIndex['extra']; properties: RegularIndex['properties']; - - // TODO(COMPASS-8329): these belong in their own column - status?: InProgressIndex['status']; - error?: InProgressIndex['error']; }; const HIDDEN_INDEX_TEXT = 'HIDDEN'; const PropertyField: React.FunctionComponent = ({ - status, extra, properties, cardinality, - error, }) => { - const darkMode = useDarkMode(); - return (
{extra && @@ -122,17 +88,6 @@ const PropertyField: React.FunctionComponent = ({ link={getIndexHelpLink(HIDDEN_INDEX_TEXT) ?? '#'} /> )} - {status === 'inprogress' && ( - - In Progress ... - - )} - {status === 'failed' && ( - - )}
); }; diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx index 48210c2ac1b..dc98401ac5c 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.spec.tsx @@ -12,6 +12,7 @@ import { RegularIndexesTable } from './regular-indexes-table'; import type { RegularIndex, InProgressIndex, + RollingIndex, } from '../../modules/regular-indexes'; import { mockRegularIndex } from '../../../test/helpers'; @@ -132,6 +133,21 @@ const inProgressIndexes: InProgressIndex[] = [ }, ]; +const rollingIndexes: RollingIndex[] = [ + { + indexName: 'my-rolling-index', + indexType: { + label: 'regular', + }, + keys: [ + { + name: 'title', + value: 'text', + }, + ], + }, +]; + const renderIndexList = ( props: Partial> = {} ) => { @@ -139,6 +155,7 @@ const renderIndexList = ( within(indexRow).getByTestId('index-actions-hide-action')).to + .throw; + expect(() => within(indexRow).getByTestId('index-actions-delete-action')) + .to.throw; + + userEvent.click(within(indexRow).getByLabelText('Expand row')); + const detailsRow = indexRow.nextSibling as HTMLTableRowElement; + expect(detailsRow).to.exist; + + const details = within(detailsRow).getByTestId( + `indexes-details-${index.indexName}` + ); + expect(details).to.exist; + + for (const key of index.keys) { + expect(within(details).getByTestId(`${key.name}-key`)); + } + } + }); + + it('strips out regular indexes that are also rolling indexes', function () { + const indexesWithRollingIndex: RegularIndex[] = [ + ...indexes, + { + name: rollingIndexes[0].indexName, + fields: rollingIndexes[0].keys.map(({ name, value }) => ({ + field: name, + value, + })), + type: rollingIndexes[0].indexType.label as RegularIndex['type'], + cardinality: 'single', + properties: [], + extra: {}, + size: 11111, + relativeSize: 0, + }, + ]; + + // first do a sanity check to make sure that we would render it as a regular + // index if it didn't also exist as a rolling index + renderIndexList({ + isWritable: true, + readOnly: false, + indexes: indexesWithRollingIndex, + }); + + let indexRow = screen.getByTestId( + `indexes-row-${rollingIndexes[0].indexName}` + ); + expect(within(indexRow).getByTestId('index-ready')).to.exist; + expect(() => within(indexRow).getByTestId('index-building')).to.throw; + + cleanup(); + + // then render it along with a rolling index to make sure it is not showing + // up as a regular index too + renderIndexList({ + isWritable: true, + readOnly: false, + indexes: indexesWithRollingIndex, + rollingIndexes, + }); + + indexRow = screen.getByTestId(`indexes-row-${rollingIndexes[0].indexName}`); + expect(() => within(indexRow).getByTestId('index-ready')).to.throw; + expect(within(indexRow).getByTestId('index-building')).to.exist; + }); + it('does not render the list if there is an error', function () { renderIndexList({ isWritable: true, @@ -331,10 +430,10 @@ describe('RegularIndexesTable Component', function () { expect(getIndexNames()).to.deep.eq(['b', 'a', 'c']); - clickSort('Name and Definition'); + clickSort('Name & Definition'); expect(getIndexNames()).to.deep.eq(['a', 'b', 'c']); - clickSort('Name and Definition'); + clickSort('Name & Definition'); expect(getIndexNames()).to.deep.eq(['c', 'b', 'a']); }); @@ -349,10 +448,10 @@ describe('RegularIndexesTable Component', function () { expect(getIndexNames()).to.deep.eq(['b', 'a', 'c']); - clickSort('Name and Definition'); + clickSort('Name & Definition'); expect(getIndexNames()).to.deep.eq(['a', 'b', 'c']); - clickSort('Name and Definition'); + clickSort('Name & Definition'); expect(getIndexNames()).to.deep.eq(['c', 'b', 'a']); }); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx index c30158e6fa4..c1235866633 100644 --- a/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx +++ b/packages/compass-indexes/src/components/regular-indexes-table/regular-indexes-table.tsx @@ -15,6 +15,7 @@ import TypeField from './type-field'; import SizeField from './size-field'; import UsageField from './usage-field'; import PropertyField from './property-field'; +import StatusField from './status-field'; import RegularIndexActions from './regular-index-actions'; import InProgressIndexActions from './in-progress-index-actions'; import { IndexesTable } from '../indexes-table'; @@ -31,11 +32,13 @@ import { import type { RegularIndex, InProgressIndex, + RollingIndex, } from '../../modules/regular-indexes'; type RegularIndexesTableProps = { indexes: RegularIndex[]; inProgressIndexes: InProgressIndex[]; + rollingIndexes: RollingIndex[]; serverVersion: string; isWritable?: boolean; onHideIndexClick: (name: string) => void; @@ -56,6 +59,7 @@ type IndexInfo = { size: React.ReactNode; usageCount: React.ReactNode; properties: React.ReactNode; + status: React.ReactNode; actions: undefined | React.ReactNode; renderExpandedContent: React.ReactNode; }; @@ -84,7 +88,7 @@ function sortByProperties(a: MergedIndex, b: MergedIndex) { return 0; } -type SortableField = 'name' | 'type' | 'size' | 'usageCount'; +type SortableField = 'name' | 'type' | 'size' | 'usageCount' | 'status'; function mergedIndexFieldValue( index: MergedIndex, @@ -101,13 +105,40 @@ function mergedIndexFieldValue( return index[field]; } + if (index.compassIndexType === 'rolling-index') { + if (field === 'size' || field === 'usageCount') { + return 0; + } + if (field === 'name') { + return index.indexName; + } + if (field === 'type') { + return index.indexType.label; + } + if (field === 'status') { + return 'building'; + } + return index[field]; + } + + if (field === 'status') { + return 'ready'; + } + return index[field]; } function isSupportedSortField( field: string -): field is 'name' | 'type' | 'size' | 'usageCount' | 'properties' { - return ['name', 'type', 'size', 'usageCount', 'properties'].includes(field); +): field is 'name' | 'type' | 'size' | 'usageCount' | 'properties' | 'status' { + return [ + 'name', + 'type', + 'size', + 'usageCount', + 'properties', + 'status', + ].includes(field); } function sortFn( @@ -142,7 +173,7 @@ function sortFn( const COLUMNS: LGColumnDef[] = [ { accessorKey: 'name', - header: 'Name and Definition', + header: 'Name & Definition', enableSorting: true, }, { @@ -176,6 +207,13 @@ const COLUMNS: LGColumnDef[] = [ sortingFn: sortFn, enableSorting: true, }, + { + accessorKey: 'status', + header: 'Status', + cell: (info) => info.getValue(), + sortingFn: sortFn, + enableSorting: true, + }, ]; const COLUMNS_WITH_ACTIONS: LGColumnDef[] = [ @@ -192,23 +230,54 @@ type MappedRegularIndex = RegularIndex & { compassIndexType: 'regular-index' }; type MappedInProgressIndex = InProgressIndex & { compassIndexType: 'in-progress-index'; }; +type MappedRollingIndex = RollingIndex & { + compassIndexType: 'rolling-index'; + fields: RegularIndex['fields']; +}; -type MergedIndex = MappedRegularIndex | MappedInProgressIndex; +type MergedIndex = + | MappedRegularIndex + | MappedInProgressIndex + | MappedRollingIndex; function mergeIndexes( indexes: RegularIndex[], - inProgressIndexes: InProgressIndex[] + inProgressIndexes: InProgressIndex[], + rollingIndexes: RollingIndex[] ): MergedIndex[] { - const mappedIndexes: MappedRegularIndex[] = indexes.map((index) => { - return { ...index, compassIndexType: 'regular-index' }; - }); + const rollingIndexNames = new Set( + rollingIndexes.map((index) => index.indexName) + ); + + const mappedIndexes: MappedRegularIndex[] = indexes + // exclude partially-built indexes so that we don't include indexes that + // only exist on the primary node and then duplicate those as rolling + // builds in the same table + .filter((index) => !rollingIndexNames.has(index.name)) + .map((index) => { + return { ...index, compassIndexType: 'regular-index' }; + }); const mappedInProgressIndexes: MappedInProgressIndex[] = inProgressIndexes.map((index) => { return { ...index, compassIndexType: 'in-progress-index' }; }); - return [...mappedIndexes, ...mappedInProgressIndexes]; + const mappedRollingIndexes: MappedRollingIndex[] = rollingIndexes.map( + (index) => { + return { + ...index, + compassIndexType: 'rolling-index', + fields: index.keys.map((k) => ({ field: k.name, value: k.value })), + }; + } + ); + + return [ + ...mappedIndexes, + ...mappedInProgressIndexes, + ...mappedRollingIndexes, + ]; } type CommonIndexInfo = Omit; @@ -228,13 +297,9 @@ function getInProgressIndexInfo( type: , size: , usageCount: , - properties: ( - - ), + // TODO(COMPASS-8335): add properties for in-progress indexes + properties: null, + status: , actions: ( , + size: , + usageCount: , + // TODO(COMPASS-7589): add properties for rolling indexes + properties: null, + status: , + actions: null, + }; +} + function getRegularIndexInfo( index: MappedRegularIndex, { @@ -274,6 +355,7 @@ function getRegularIndexInfo( properties={index.properties} /> ), + status: , actions: index.name !== '_id_' && ( []>( () => @@ -321,6 +408,8 @@ export const RegularIndexesTable: React.FunctionComponent< indexData = getInProgressIndexInfo(index, { onDeleteFailedIndexClick, }); + } else if (index.compassIndexType === 'rolling-index') { + indexData = getRollingIndexInfo(index); } else { indexData = getRegularIndexInfo(index, { serverVersion, @@ -379,6 +468,7 @@ const mapState = ({ serverVersion, indexes: regularIndexes.indexes, inProgressIndexes: regularIndexes.inProgressIndexes, + rollingIndexes: regularIndexes.rollingIndexes ?? [], error: regularIndexes.error, }); diff --git a/packages/compass-indexes/src/components/regular-indexes-table/status-field.tsx b/packages/compass-indexes/src/components/regular-indexes-table/status-field.tsx new file mode 100644 index 00000000000..d7386ae1099 --- /dev/null +++ b/packages/compass-indexes/src/components/regular-indexes-table/status-field.tsx @@ -0,0 +1,102 @@ +import React from 'react'; + +import { + spacing, + css, + Tooltip, + Body, + Badge, + BadgeVariant, + useDarkMode, + Icon, +} from '@mongodb-js/compass-components'; +import type { InProgressIndex } from '../../modules/regular-indexes'; + +const statusFieldStyles = css({ + display: 'flex', + gap: spacing[1], + minWidth: spacing[3] * 7, + alignItems: 'baseline', +}); + +const iconBadgeStyles = css({ + gap: spacing[200], +}); + +const ErrorBadgeWithTooltip: React.FunctionComponent<{ + ['data-testid']?: string; + text: string; + tooltip?: string | null; + darkMode?: boolean; +}> = ({ ['data-testid']: dataTestId, text, tooltip, darkMode }) => { + return ( + + {text} + + } + > + {tooltip} + + ); +}; + +type StatusFieldProps = { + status: InProgressIndex['status'] | 'ready' | 'building'; + error?: InProgressIndex['error']; +}; + +const StatusField: React.FunctionComponent = ({ + status, + error, +}) => { + const darkMode = useDarkMode(); + + return ( +
+ {status === 'ready' && ( + + Ready + + )} + + {status === 'building' && ( + + Building + + + } + > + This index is being built in a rolling process + + )} + + {status === 'inprogress' && ( + + In Progress + + )} + + {status === 'failed' && ( + + )} +
+ ); +}; + +export default StatusField; diff --git a/packages/compass-indexes/src/modules/regular-indexes.spec.ts b/packages/compass-indexes/src/modules/regular-indexes.spec.ts index 6fa4cec9632..87385686acd 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.spec.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.spec.ts @@ -26,6 +26,8 @@ import { import * as regularIndexesSlice from './regular-indexes'; import type { FetchStatus } from '../utils/fetch-status'; import { waitFor } from '@mongodb-js/testing-library-compass'; +import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import type { AtlasService } from '@mongodb-js/atlas-service/provider'; describe('regular-indexes module', function () { before(() => { @@ -36,7 +38,7 @@ describe('regular-indexes module', function () { sinon.restore(); }); - describe('#fetchRegularIndexees action', function () { + describe('#fetchRegularIndexes action', function () { it('sets status to ERROR and sets the error when there is an error', async function () { const error = new Error('failed to connect to server'); const store = await setupStoreAndWait( @@ -59,6 +61,62 @@ describe('regular-indexes module', function () { expect(state.status).to.equal('ERROR'); expect(state.indexes).to.deep.equal(defaultSortedIndexes); }); + + it('fetches rolling indexes when supported', async function () { + const connectionInfoRef = { + current: { + atlasMetadata: { + metricsType: 'cluster', + instanceSize: 'M10', + }, + }, + } as ConnectionInfoRef; + + const atlasServiceStub = { + automationAgentRequest: sinon.stub(), + automationAgentAwait: sinon.stub(), + }; + + atlasServiceStub.automationAgentRequest.resolves({ + _id: '_id', + requestType: 'requestType', + }); + atlasServiceStub.automationAgentAwait.resolves({ + response: [ + { indexName: 'abc', status: 'rolling build' }, + { indexName: 'cba', status: 'exists' }, + ], + }); + + const indexesStub = sinon.stub().resolves(defaultSortedIndexes); + + const store = await setupStoreAndWait( + {}, + { + indexes: indexesStub, + }, + { + connectionInfoRef, + atlasService: atlasServiceStub as unknown as AtlasService, + } + ); + + // it fetches immediately + await waitFor(() => { + expect(store.getState().regularIndexes.status).to.eq('READY'); + }); + + expect(indexesStub.callCount).to.equal(1); + expect(atlasServiceStub.automationAgentRequest.callCount).to.equal(1); + expect(atlasServiceStub.automationAgentAwait.callCount).to.equal(1); + + expect(store.getState().regularIndexes.indexes).to.have.lengthOf( + defaultSortedIndexes.length + ); + expect(store.getState().regularIndexes.rollingIndexes).to.have.lengthOf( + 1 + ); + }); }); describe('#refreshRegularIndexes action', function () { diff --git a/packages/compass-indexes/src/modules/regular-indexes.ts b/packages/compass-indexes/src/modules/regular-indexes.ts index 0b71b617b97..c43d8c9f25c 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.ts @@ -19,6 +19,8 @@ import { } from '../utils/modal-descriptions'; import type { IndexSpecification, CreateIndexesOptions } from 'mongodb'; import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; +import type { AtlasIndexStats } from './rolling-indexes-service'; +import { connectionSupports } from '@mongodb-js/compass-connections'; export type RegularIndex = Partial & Pick< @@ -42,6 +44,14 @@ export type InProgressIndex = Pick & { error?: string; }; +export type RollingIndex = Partial & + Pick< + AtlasIndexStats, + // These are the only ones we're treating as required because they are the + // ones we use. Everything else is treated as optional. + 'indexName' | 'indexType' | 'keys' + >; + const prepareInProgressIndex = ( id: string, { @@ -52,9 +62,9 @@ const prepareInProgressIndex = ( spec: CreateIndexSpec; } ): InProgressIndex => { - const inProgressIndexFields = Object.keys(spec).map((field: string) => ({ + const inProgressIndexFields = Object.entries(spec).map(([field, value]) => ({ field, - value: spec[field], + value, })); const inProgressIndexName = name || @@ -109,6 +119,7 @@ type FetchIndexesStartedAction = { type FetchIndexesSucceededAction = { type: ActionTypes.FetchIndexesSucceeded; indexes: RegularIndex[]; + rollingIndexes?: RollingIndex[]; }; type FetchIndexesFailedAction = { @@ -141,6 +152,7 @@ export type State = { status: FetchStatus; indexes: RegularIndex[]; inProgressIndexes: InProgressIndex[]; + rollingIndexes?: RollingIndex[]; error?: string; }; @@ -190,6 +202,7 @@ export default function reducer( return { ...state, indexes: action.indexes, + rollingIndexes: action.rollingIndexes, status: FetchStatuses.READY, }; } @@ -275,10 +288,12 @@ const fetchIndexesStarted = ( }); const fetchIndexesSucceeded = ( - indexes: RegularIndex[] + indexes: RegularIndex[], + rollingIndexes?: RollingIndex[] ): FetchIndexesSucceededAction => ({ type: ActionTypes.FetchIndexesSucceeded, indexes, + rollingIndexes, }); const fetchIndexesFailed = (error: string): FetchIndexesFailedAction => ({ @@ -302,7 +317,11 @@ function pickCollectionStatFields(state: RootState) { const fetchIndexes = ( reason: FetchReason ): IndexesThunkAction, FetchIndexesActions> => { - return async (dispatch, getState, { dataService, collection }) => { + return async ( + dispatch, + getState, + { dataService, collection, connectionInfoRef, rollingIndexesService } + ) => { const { isReadonlyView, namespace, @@ -319,11 +338,22 @@ const fetchIndexes = ( return; } + const isRollingIndexesSupported = connectionSupports( + connectionInfoRef.current, + 'rollingIndexCreation' + ); + try { dispatch(fetchIndexesStarted(reason)); - const indexes = await dataService.indexes(namespace); + const promises = [ + dataService.indexes(namespace), + isRollingIndexesSupported + ? rollingIndexesService.listRollingIndexes(namespace) + : undefined, + ] as [Promise, Promise | undefined]; + const [indexes, rollingIndexes] = await Promise.all(promises); const indexesBefore = pickCollectionStatFields(getState()); - dispatch(fetchIndexesSucceeded(indexes)); + dispatch(fetchIndexesSucceeded(indexes, rollingIndexes)); const indexesAfter = pickCollectionStatFields(getState()); if ( reason !== FetchReasons.INITIAL_FETCH && diff --git a/packages/compass-indexes/src/modules/rolling-indexes-service.ts b/packages/compass-indexes/src/modules/rolling-indexes-service.ts index df89c246bed..5f78a65f026 100644 --- a/packages/compass-indexes/src/modules/rolling-indexes-service.ts +++ b/packages/compass-indexes/src/modules/rolling-indexes-service.ts @@ -3,13 +3,13 @@ import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider import type { CreateIndexesOptions } from 'mongodb'; import toNS from 'mongodb-ns'; -type AtlasIndexStats = { +export type AtlasIndexStats = { collName: string; dbName: string; indexName: string; indexProperties: { label: string; properties: Record }[]; indexType: { label: string }; - keys: { name: string; value: string | number }; + keys: { name: string; value: string | number }[]; sizeBytes: number; status: 'rolling build' | 'building' | 'exists'; }; From 946a60c9f5db769f6e6b66b2dce4e92bba3c39c3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:58:00 +0000 Subject: [PATCH 61/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6322) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index fc0e708f5e9..429a2a51738 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Wed Oct 02 2024. +This document was automatically generated on Thu Oct 03 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 3eee2fb1401..7f9bd1d842e 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 2, 2024 at 04:42 PM +Generated on Thu, Oct 3, 2024 at 03:57 PM ## Table of Contents From eb86f23c0bba23d336a5ae63066dddf82baba130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 4 Oct 2024 09:35:56 +0200 Subject: [PATCH 62/97] chore(ci): log electron app messages (#6317) Logging electron app log --- packages/compass-e2e-tests/helpers/compass.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/compass.ts b/packages/compass-e2e-tests/helpers/compass.ts index 7d894db7309..531edc9420e 100644 --- a/packages/compass-e2e-tests/helpers/compass.ts +++ b/packages/compass-e2e-tests/helpers/compass.ts @@ -143,8 +143,8 @@ export const serverSatisfies = ( ); }; -// For the user data dirs -let i = 0; +// For the user data dirs and logs +let runCounter = 0; interface Coverage { main?: string; @@ -569,7 +569,7 @@ async function processCommonOpts({ if (!defaultUserDataDir) { defaultUserDataDir = path.join( os.tmpdir(), - `user-data-dir-${Date.now().toString(32)}-${++i}` + `user-data-dir-${Date.now().toString(32)}-${runCounter}` ); } const chromedriverLogPath = path.join( @@ -630,6 +630,7 @@ async function startCompassElectron( name: string, opts: StartCompassOptions = {} ): Promise { + runCounter++; const { testPackagedApp, binary } = await getCompassExecutionParameters(); const { needsCloseWelcomeModal, webdriverOptions, wdioOptions, chromeArgs } = @@ -644,6 +645,15 @@ async function startCompassElectron( chromeArgs.push('--showed-network-opt-in=true'); } + // Logging output from Electron, even before the app loads any JavaScript + const electronLogFile = path.join(LOG_PATH, `electron-${runCounter}.log`); + chromeArgs.push( + // See https://www.electronjs.org/docs/latest/api/command-line-switches#--enable-loggingfile + '--enable-logging=file', + // See https://www.electronjs.org/docs/latest/api/command-line-switches#--log-filepath + `--log-file=${electronLogFile}` + ); + if (opts.extraSpawnArgs) { chromeArgs.push(...opts.extraSpawnArgs); } @@ -756,6 +766,7 @@ export async function startBrowser( // eslint-disable-next-line @typescript-eslint/no-unused-vars opts: StartCompassOptions = {} ) { + runCounter++; const { webdriverOptions, wdioOptions } = await processCommonOpts(); const browser: CompassBrowser = (await remote({ From a0c702a3d11eaf5ae31ba404efcc9eb1fc189ae8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 07:42:45 +0000 Subject: [PATCH 63/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6323) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 429a2a51738..36286290f53 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Thu Oct 03 2024. +This document was automatically generated on Fri Oct 04 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 7f9bd1d842e..1026e01a09c 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Oct 3, 2024 at 03:57 PM +Generated on Fri, Oct 4, 2024 at 07:42 AM ## Table of Contents From 495c14025e45bdc5b6f2f7abd1768885de29d92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 4 Oct 2024 11:43:46 +0200 Subject: [PATCH 64/97] chore(ci): build and test packaged app on the newer macos version (2nd attempt) COMPASS-8090 (#6232) Upgrade variants to use MacOS 14 --- .evergreen/buildvariants-and-tasks.in.yml | 27 ++++++++++++----- .evergreen/buildvariants-and-tasks.yml | 36 ++++++++++++++++++----- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/.evergreen/buildvariants-and-tasks.in.yml b/.evergreen/buildvariants-and-tasks.in.yml index c8e742c289d..a0ae901cefd 100644 --- a/.evergreen/buildvariants-and-tasks.in.yml +++ b/.evergreen/buildvariants-and-tasks.in.yml @@ -49,48 +49,61 @@ const PACKAGE_BUILD_VARIANTS = [ { name: 'package-macos-x64', display_name: 'Package MacOS Intel', - run_on: 'macos-1100', + run_on: 'macos-14', silk_asset_group: 'compass-macos', }, { name: 'package-macos-arm', display_name: 'Package MacOS Arm64', - run_on: 'macos-1100-arm64', + run_on: 'macos-14-arm64', silk_asset_group: 'compass-macos-arm', } ]; const TEST_PACKAGED_APP_BUILD_VARIANTS = [ { - name: 'test-server-ubuntu', + name: 'test-packaged-app-ubuntu', display_name: 'Ubuntu 20.04', run_on: 'ubuntu2004-large', depends_on: 'package-ubuntu', }, { - name: 'test-server-windows', + name: 'test-packaged-app-windows', display_name: 'Windows 10', run_on: 'windows-vsCurrent-large', depends_on: 'package-windows', }, { - name: 'test-server-rhel', + name: 'test-packaged-app-rhel', display_name: 'RHEL 8.0', run_on: 'rhel80-large', depends_on: 'package-rhel', }, { - name: 'test-server-macos-11-arm', + name: 'test-packaged-app-macos-11-arm', display_name: 'MacOS arm64 11', run_on: 'macos-1100-arm64-gui', depends_on: 'package-macos-arm' }, { - name: 'test-server-macos-11-x64', + name: 'test-packaged-app-macos-11-x64', display_name: 'MacOS x64 11', run_on: 'macos-1100-gui', patchable: false, depends_on: 'package-macos-x64' + }, + { + name: 'test-packaged-app-macos-14-arm', + display_name: 'MacOS arm64 14', + run_on: 'macos-14-arm64-gui', + depends_on: 'package-macos-arm' + }, + { + name: 'test-packaged-app-macos-14-x64', + display_name: 'MacOS x64 14', + run_on: 'macos-14-gui', + patchable: false, + depends_on: 'package-macos-x64' } ]; diff --git a/.evergreen/buildvariants-and-tasks.yml b/.evergreen/buildvariants-and-tasks.yml index 8c3aa4df9f3..12e0c34f457 100644 --- a/.evergreen/buildvariants-and-tasks.yml +++ b/.evergreen/buildvariants-and-tasks.yml @@ -62,7 +62,7 @@ buildvariants: expansions: silk_asset_group: compass-macos display_name: Package MacOS Intel - run_on: macos-1100 + run_on: macos-14 tasks: - name: package-compass - name: package-compass-isolated @@ -71,7 +71,7 @@ buildvariants: expansions: silk_asset_group: compass-macos-arm display_name: Package MacOS Arm64 - run_on: macos-1100-arm64 + run_on: macos-14-arm64 tasks: - name: package-compass - name: package-compass-isolated @@ -145,7 +145,7 @@ buildvariants: - name: test-server-latest-alpha-1 - name: test-server-latest-alpha-2 - name: test-server-latest-alpha-3 - - name: test-server-ubuntu + - name: test-packaged-app-ubuntu display_name: Test Packaged App Ubuntu 20.04 run_on: ubuntu2004-large patchable: true @@ -156,7 +156,7 @@ buildvariants: - name: test-packaged-app-1 - name: test-packaged-app-2 - name: test-packaged-app-3 - - name: test-server-windows + - name: test-packaged-app-windows display_name: Test Packaged App Windows 10 run_on: windows-vsCurrent-large patchable: true @@ -167,7 +167,7 @@ buildvariants: - name: test-packaged-app-1 - name: test-packaged-app-2 - name: test-packaged-app-3 - - name: test-server-rhel + - name: test-packaged-app-rhel display_name: Test Packaged App RHEL 8.0 run_on: rhel80-large patchable: true @@ -178,7 +178,7 @@ buildvariants: - name: test-packaged-app-1 - name: test-packaged-app-2 - name: test-packaged-app-3 - - name: test-server-macos-11-arm + - name: test-packaged-app-macos-11-arm display_name: Test Packaged App MacOS arm64 11 run_on: macos-1100-arm64-gui patchable: true @@ -189,7 +189,7 @@ buildvariants: - name: test-packaged-app-1 - name: test-packaged-app-2 - name: test-packaged-app-3 - - name: test-server-macos-11-x64 + - name: test-packaged-app-macos-11-x64 display_name: Test Packaged App MacOS x64 11 run_on: macos-1100-gui patchable: false @@ -200,6 +200,28 @@ buildvariants: - name: test-packaged-app-1 - name: test-packaged-app-2 - name: test-packaged-app-3 + - name: test-packaged-app-macos-14-arm + display_name: Test Packaged App MacOS arm64 14 + run_on: macos-14-arm64-gui + patchable: true + depends_on: + - name: package-compass + variant: package-macos-arm + tasks: + - name: test-packaged-app-1 + - name: test-packaged-app-2 + - name: test-packaged-app-3 + - name: test-packaged-app-macos-14-x64 + display_name: Test Packaged App MacOS x64 14 + run_on: macos-14-gui + patchable: false + depends_on: + - name: package-compass + variant: package-macos-x64 + tasks: + - name: test-packaged-app-1 + - name: test-packaged-app-2 + - name: test-packaged-app-3 - name: publish display_name: Publish Artifacts run_on: ubuntu2004-large From 9ec077ecd41aa50fb5438185736d62d984c3b680 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:50:24 +0000 Subject: [PATCH 65/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6324) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 1026e01a09c..eaf3888ef04 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Oct 4, 2024 at 07:42 AM +Generated on Fri, Oct 4, 2024 at 09:50 AM ## Table of Contents From 5b3ca4b753f3002ab10f1bf84c173bbe4cd37a26 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Fri, 4 Oct 2024 12:02:29 +0200 Subject: [PATCH 66/97] feat(indexes): add an option to create indexes through rolling build COMPASS-8216 (#6309) * feat(indexes): add an option to create indexes through rolling build * chore(atlas-service): map non-api cloud backend errors * chore(indexes): fix checkbox types * chore: fix linting issues * chore(index): adjust rolling indexes fetching logic * fix(indexes): bind correct instance --- packages/atlas-service/src/atlas-service.ts | 13 ++-- packages/atlas-service/src/util.ts | 47 ++++++++----- .../create-index-form/checkbox-input.tsx | 7 +- .../create-index-form/create-index-form.tsx | 12 ++++ .../src/modules/create-index.tsx | 58 +++++++++++++--- .../src/modules/regular-indexes.ts | 14 ++-- .../modules/rolling-indexes-service.spec.ts | 22 +++--- .../src/modules/rolling-indexes-service.ts | 67 +++++++++++++------ 8 files changed, 171 insertions(+), 69 deletions(-) diff --git a/packages/atlas-service/src/atlas-service.ts b/packages/atlas-service/src/atlas-service.ts index c57a506b852..dd80e78bfa3 100644 --- a/packages/atlas-service/src/atlas-service.ts +++ b/packages/atlas-service/src/atlas-service.ts @@ -14,6 +14,11 @@ export type AtlasServiceOptions = { defaultHeaders?: Record; }; +function normalizePath(path?: string) { + path = path ? (path.startsWith('/') ? path : `/${path}`) : ''; + return encodeURI(path); +} + export class AtlasService { private config: AtlasServiceConfig; constructor( @@ -25,16 +30,14 @@ export class AtlasService { this.config = getAtlasConfig(preferences); } adminApiEndpoint(path?: string, requestId?: string): string { - const uri = encodeURI( - `${this.config.atlasApiBaseUrl}${path ? `/${path}` : ''}` - ); + const uri = `${this.config.atlasApiBaseUrl}${normalizePath(path)}`; const query = requestId ? `?request_id=${encodeURIComponent(requestId)}` : ''; return `${uri}${query}`; } cloudEndpoint(path?: string): string { - return encodeURI(`${this.config.cloudBaseUrl}${path ? `/${path}` : ''}`); + return `${this.config.cloudBaseUrl}${normalizePath(path)}`; } regionalizedCloudEndpoint( _atlasMetadata: Pick, @@ -45,7 +48,7 @@ export class AtlasService { return this.cloudEndpoint(path); } driverProxyEndpoint(path?: string): string { - return encodeURI(`${this.config.wsBaseUrl}${path ? `/${path}` : ''}`); + return `${this.config.wsBaseUrl}${normalizePath(path)}`; } async fetch(url: RequestInfo | URL, init?: RequestInit): Promise { throwIfNetworkTrafficDisabled(this.preferences); diff --git a/packages/atlas-service/src/util.ts b/packages/atlas-service/src/util.ts index fe93939d8db..fb27ab37e99 100644 --- a/packages/atlas-service/src/util.ts +++ b/packages/atlas-service/src/util.ts @@ -46,10 +46,21 @@ export function throwIfNetworkTrafficDisabled( /** * https://www.mongodb.com/docs/atlas/api/atlas-admin-api-ref/#errors */ -export function isServerError( +function isAtlasAPIError( err: any ): err is { error: number; errorCode: string; detail: string } { - return Boolean(err.error && err.errorCode && err.detail); + return Boolean(err && err.error && err.errorCode && err.detail); +} + +function isCloudBackendError(err: any): err is { + errorCode: string; + message: string; + version: string; + status: string; +} { + return Boolean( + err && err.errorCode && err.message && err.version && err.status + ); } export async function throwIfNotOk( @@ -60,21 +71,25 @@ export async function throwIfNotOk( } const messageJSON = await res.json().catch(() => undefined); - if (messageJSON && isServerError(messageJSON)) { - throw new AtlasServiceError( - 'ServerError', - res.status, - messageJSON.detail ?? 'Internal server error', - messageJSON.errorCode ?? 'INTERNAL_SERVER_ERROR' - ); - } else { - throw new AtlasServiceError( - 'NetworkError', - res.status, - res.statusText, - `${res.status}` - ); + + const status = res.status; + let statusText = res.statusText; + let errorCode = `${res.status}`; + let errorName: 'NetworkError' | 'ServerError' = 'NetworkError'; + + if (isAtlasAPIError(messageJSON)) { + errorName = 'ServerError'; + statusText = messageJSON.detail; + errorCode = messageJSON.errorCode; + } + + if (isCloudBackendError(messageJSON)) { + errorName = 'ServerError'; + statusText = messageJSON.message; + errorCode = messageJSON.errorCode; } + + throw new AtlasServiceError(errorName, status, statusText, errorCode); } export type AtlasServiceConfig = { diff --git a/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx b/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx index ea35ff7212c..9e7916625f0 100644 --- a/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx +++ b/packages/compass-indexes/src/components/create-index-form/checkbox-input.tsx @@ -11,8 +11,8 @@ import { OPTIONS, optionChanged } from '../../modules/create-index'; type CheckboxInputProps = { name: CheckboxOptions; - label: string; - description: string; + label: React.ReactNode; + description: React.ReactNode; disabled?: boolean; checked: boolean; onChange(name: CheckboxOptions, newVal: boolean): void; @@ -37,6 +37,9 @@ export const CheckboxInput: React.FunctionComponent = ({ onChange(name, event.target.checked); }} label={} + // @ts-expect-error leafygreen types only allow strings here, but can + // render a ReactNode too (and we use that to render links inside + // descriptions) description={description} disabled={disabled} /> diff --git a/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx b/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx index 555af792ea8..2cb7b37cde4 100644 --- a/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx +++ b/packages/compass-indexes/src/components/create-index-form/create-index-form.tsx @@ -6,6 +6,10 @@ import { CreateIndexFields } from '../create-index-fields'; import { hasColumnstoreIndexesSupport } from '../../utils/columnstore-indexes'; import CheckboxInput from './checkbox-input'; import CollapsibleInput from './collapsible-input'; +import { + useConnectionInfo, + useConnectionSupports, +} from '@mongodb-js/compass-connections/provider'; const createIndexModalFieldsStyles = css({ margin: `${spacing[4]}px 0 ${spacing[5]}px 0`, @@ -38,6 +42,11 @@ function CreateIndexForm({ onAddFieldClick, onRemoveFieldClick, }: CreateIndexFormProps) { + const { id: connectionId } = useConnectionInfo(); + const supportsRollingIndexes = useConnectionSupports( + connectionId, + 'rollingIndexCreation' + ); const schemaFields = useAutocompleteFields(namespace); const schemaFieldNames = useMemo(() => { return schemaFields @@ -86,6 +95,9 @@ function CreateIndexForm({ )} + {supportsRollingIndexes && ( + + )}
diff --git a/packages/compass-indexes/src/modules/create-index.tsx b/packages/compass-indexes/src/modules/create-index.tsx index fb5d380197c..ba723067276 100644 --- a/packages/compass-indexes/src/modules/create-index.tsx +++ b/packages/compass-indexes/src/modules/create-index.tsx @@ -1,9 +1,9 @@ import { EJSON, ObjectId } from 'bson'; -import type { CreateIndexesOptions } from 'mongodb'; +import type { CreateIndexesOptions, IndexDirection } from 'mongodb'; import { isCollationValid } from 'mongodb-query-parser'; import React from 'react'; import type { Action, Reducer, Dispatch } from 'redux'; -import { Badge } from '@mongodb-js/compass-components'; +import { Badge, Link } from '@mongodb-js/compass-components'; import { isAction } from '../utils/is-action'; import type { IndexesThunkAction } from '.'; import type { RootState } from '.'; @@ -191,6 +191,20 @@ export const OPTIONS = { description: 'Sparse indexes only contain entries for documents that have the indexed field, even if the index field contains a null value. The index skips over any document that is missing the indexed field.', }, + buildInRollingProcess: { + type: 'checkbox', + label: 'Build in rolling process', + description: ( + <> + Building indexes in a rolling fashion can minimize the performance + impact of index builds. We only recommend using rolling index builds + when regular index builds do not meet your needs.{' '} + + Learn More + + + ), + }, } as const; type OptionNames = keyof typeof OPTIONS; @@ -317,13 +331,24 @@ function isEmptyValue(value: unknown) { return false; } +function fieldTypeToIndexDirection(type: string): IndexDirection { + if (type === '1 (asc)') { + return 1; + } + if (type === '-1 (desc)') { + return -1; + } + if (type === 'text' || type === '2dsphere') { + return type; + } + throw new Error(`Unsupported field type: ${type}`); +} + export const createIndexFormSubmitted = (): IndexesThunkAction< void, ErrorEncounteredAction | CreateIndexFormSubmittedAction > => { return (dispatch, getState) => { - const spec = {} as CreateIndexSpec; - // Check for field errors. if ( getState().createIndex.fields.some( @@ -336,12 +361,18 @@ export const createIndexFormSubmitted = (): IndexesThunkAction< const formIndexOptions = getState().createIndex.options; - getState().createIndex.fields.forEach((field: Field) => { - let type: string | number = field.type; - if (field.type === '1 (asc)') type = 1; - if (field.type === '-1 (desc)') type = -1; - spec[field.name] = type; - }); + let spec: Record; + + try { + spec = Object.fromEntries( + getState().createIndex.fields.map((field) => { + return [field.name, fieldTypeToIndexDirection(field.type)]; + }) + ); + } catch (e) { + dispatch(errorEncountered((e as any).message)); + return; + } const options: CreateIndexesOptions = {}; @@ -437,7 +468,12 @@ export const createIndexFormSubmitted = (): IndexesThunkAction< dispatch({ type: ActionTypes.CreateIndexFormSubmitted }); void dispatch( - createRegularIndex(getState().createIndex.indexId, spec, options) + createRegularIndex( + getState().createIndex.indexId, + spec, + options, + !!formIndexOptions.buildInRollingProcess.value + ) ); }; }; diff --git a/packages/compass-indexes/src/modules/regular-indexes.ts b/packages/compass-indexes/src/modules/regular-indexes.ts index c43d8c9f25c..b1edf2e49d7 100644 --- a/packages/compass-indexes/src/modules/regular-indexes.ts +++ b/packages/compass-indexes/src/modules/regular-indexes.ts @@ -17,7 +17,7 @@ import { hideModalDescription, unhideModalDescription, } from '../utils/modal-descriptions'; -import type { IndexSpecification, CreateIndexesOptions } from 'mongodb'; +import type { CreateIndexesOptions, IndexDirection } from 'mongodb'; import { hasColumnstoreIndex } from '../utils/columnstore-indexes'; import type { AtlasIndexStats } from './rolling-indexes-service'; import { connectionSupports } from '@mongodb-js/compass-connections'; @@ -458,8 +458,9 @@ const indexCreationFailed = ( export function createRegularIndex( inProgressIndexId: string, - spec: CreateIndexSpec, - options: CreateIndexesOptions + spec: Record, + options: CreateIndexesOptions, + isRollingIndexBuild: boolean ): IndexesThunkAction< Promise, | IndexCreationStartedAction @@ -469,7 +470,7 @@ export function createRegularIndex( return async ( dispatch, getState, - { track, dataService, connectionInfoRef } + { track, dataService, rollingIndexesService, connectionInfoRef } ) => { const ns = getState().namespace; const inProgressIndex = prepareInProgressIndex(inProgressIndexId, { @@ -501,7 +502,10 @@ export function createRegularIndex( }; try { - await dataService.createIndex(ns, spec as IndexSpecification, options); + const createFn = isRollingIndexBuild + ? rollingIndexesService.createRollingIndex.bind(rollingIndexesService) + : dataService.createIndex.bind(dataService); + await createFn(ns, spec, options); dispatch(indexCreationSucceeded(inProgressIndexId)); track('Index Created', trackEvent, connectionInfoRef.current); diff --git a/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts b/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts index 6fd94829d5f..29381c4d7f9 100644 --- a/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts +++ b/packages/compass-indexes/src/modules/rolling-indexes-service.spec.ts @@ -6,6 +6,8 @@ describe('RollingIndexesService', function () { const atlasServiceStub = { automationAgentRequest: Sinon.stub(), automationAgentAwait: Sinon.stub(), + authenticatedFetch: Sinon.stub(), + cloudEndpoint: Sinon.stub().callsFake((str) => str), }; let service: RollingIndexesService; @@ -55,15 +57,19 @@ describe('RollingIndexesService', function () { }); describe('createRollingIndex', function () { - it('should fail if automation agent returned unexpected result', async function () { - atlasServiceStub.automationAgentRequest.resolves({ _id: '_id' }); + it('should send the request to the kinda automation agent endpoint with the matching body and path params', async function () { + await service.createRollingIndex('db.coll', {}, {}); - try { - await service.createRollingIndex('db.coll', {}, {}); - expect.fail('expected createRollingIndex to throw'); - } catch (err) { - expect(err).not.to.be.null; - } + expect(atlasServiceStub.authenticatedFetch).to.have.been.calledOnce; + + const { args } = atlasServiceStub.authenticatedFetch.getCall(0); + + expect(args[0]).to.eq('/explorer/v1/groups/abc/clusters/123/index'); + expect(args[1]).to.have.property('method', 'POST'); + expect(args[1]).to.have.property( + 'body', + '{"clusterId":"123","db":"db","collection":"coll","keys":"{}","options":"","collationOptions":""}' + ); }); }); }); diff --git a/packages/compass-indexes/src/modules/rolling-indexes-service.ts b/packages/compass-indexes/src/modules/rolling-indexes-service.ts index 5f78a65f026..736c7da3d89 100644 --- a/packages/compass-indexes/src/modules/rolling-indexes-service.ts +++ b/packages/compass-indexes/src/modules/rolling-indexes-service.ts @@ -1,6 +1,6 @@ import type { AtlasService } from '@mongodb-js/atlas-service/provider'; import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; -import type { CreateIndexesOptions } from 'mongodb'; +import type { CreateIndexesOptions, IndexSpecification } from 'mongodb'; import toNS from 'mongodb-ns'; export type AtlasIndexStats = { @@ -18,7 +18,10 @@ export class RollingIndexesService { constructor( private atlasService: Pick< AtlasService, - 'automationAgentRequest' | 'automationAgentAwait' + | 'automationAgentRequest' + | 'automationAgentAwait' + | 'authenticatedFetch' + | 'cloudEndpoint' >, private connectionInfo: ConnectionInfoRef ) {} @@ -51,36 +54,56 @@ export class RollingIndexesService { } async createRollingIndex( namespace: string, - indexSpec: Record, + indexSpec: IndexSpecification, { collation, ...options }: CreateIndexesOptions ): Promise { const { atlasMetadata } = this.connectionInfo.current; + if (!atlasMetadata) { throw new Error( "Can't create a rolling index for a non-Atlas cluster: atlasMetadata is not available" ); } - const { database: db, collection } = toNS(namespace); - const res = await this.atlasService.automationAgentRequest( - atlasMetadata, - 'index', - { - db, - collection, - keys: JSON.stringify(indexSpec), - options: Object.keys(options).length > 0 ? JSON.stringify(options) : '', - collationOptions: collation ? JSON.stringify(collation) : '', - } - ); - // Creating a rolling index doesn't return an "awaitable" job from - // automation agent backend - if (res) { + + // Not possible to do through UI, doing a pre-check here to avoid dealing + // with payload variations based on metricsType later + if (atlasMetadata.metricsType === 'serverless') { throw new Error( - `Unexpected response from the server, expected undefined, but got ${JSON.stringify( - res - )}` + "Serverless clusters don't support rolling index build creation" ); } - return undefined; + + // NB: Rolling indexes creation only pretends to be a "normal" automation + // agent request, in practice while a bunch of request logic is similar, + // both the resource URL and responses behave completely differently, so + // that's why we're not using `automationAgentRequest` helper method here. + + const { database: db, collection } = toNS(namespace); + + const requestBody = { + clusterId: atlasMetadata.metricsId, + db, + collection, + keys: JSON.stringify(indexSpec), + options: Object.keys(options).length > 0 ? JSON.stringify(options) : '', + collationOptions: collation ? JSON.stringify(collation) : '', + }; + + const requestUrl = this.atlasService.cloudEndpoint( + `/explorer/v1/groups/${atlasMetadata.projectId}/clusters/${atlasMetadata.metricsId}/index` + ); + + // Requesting a rolling index build doesn't return anything that we can + // await on similar to other index creation processes (but + // authenticatedFetch will make sure it fails if server responded with an + // error) or automation agent jobs, this is why we're just submitting + // without doing anything with a response + await this.atlasService.authenticatedFetch(requestUrl, { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify(requestBody), + }); } } From a06e46929ebca7475fc99b2299e37836c93ebed8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:09:08 +0000 Subject: [PATCH 67/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6325) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index eaf3888ef04..a6d64d798e6 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Oct 4, 2024 at 09:50 AM +Generated on Fri, Oct 4, 2024 at 10:09 AM ## Table of Contents From 3b153106990929214d31e53e86a9c68a8bed9d48 Mon Sep 17 00:00:00 2001 From: Kevin Mas Ruiz Date: Fri, 4 Oct 2024 12:18:20 +0200 Subject: [PATCH 68/97] fix(proxy): show friendly error when proxy config is not supported COMPASS-8345 (#6321) * chore: show friendly error when proxy config is not supported * chore: fix log * chore: fix eslint checks --- packages/compass/src/main/application.ts | 37 +++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/compass/src/main/application.ts b/packages/compass/src/main/application.ts index bc1297caf85..37207a21ced 100644 --- a/packages/compass/src/main/application.ts +++ b/packages/compass/src/main/application.ts @@ -2,6 +2,7 @@ import './disable-node-deprecations'; // Separate module so it runs first import path from 'path'; import { EventEmitter } from 'events'; import type { BrowserWindow, Event, ProxyConfig } from 'electron'; +import { dialog } from 'electron'; import { app, safeStorage, session } from 'electron'; import { ipcMain } from 'hadron-ipc'; import type { AutoUpdateManagerState } from './auto-update-manager'; @@ -301,7 +302,41 @@ class CompassApplication { try { const proxyOptions = proxyPreferenceToProxyOptions(value); await app.whenReady(); - await target.setProxy(translateToElectronProxyConfig(proxyOptions)); + + try { + const electronProxyConfig = + translateToElectronProxyConfig(proxyOptions); + await target.setProxy(electronProxyConfig); + } catch (err) { + const headline = String( + err && typeof err === 'object' && 'message' in err + ? err.message + : err || + 'Currently Compass does not support authenticated or ssh proxies.' + ); + + log.warn( + mongoLogId(1_001_000_332), + logContext, + 'Unable to set proxy configuration', + { + error: headline, + } + ); + + const sep = path.sep; + const configPath = `${app.getPath( + 'userData' + )}${sep}AppPreferences${sep}General.json`; + + dialog.showErrorBox( + 'Unsupported proxy configuration', + `${headline}\n\n + To reset the proxy configuration, remove the "proxy" key in ${configPath} and restart Compass.` + ); + + app.quit(); + } const agent = createAgent(proxyOptions); const fetch = createFetch(agent || {}); From a22b639ea8bda87b4cce57fe2600814395b0d23f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:24:50 +0000 Subject: [PATCH 69/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6326) Update report Co-authored-by: kmruiz <1822138+kmruiz@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index a6d64d798e6..4bb3e88dba8 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Oct 4, 2024 at 10:09 AM +Generated on Fri, Oct 4, 2024 at 10:24 AM ## Table of Contents From 35bf965a922e2f25452ff3b3347954aa1b2fa660 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 6 Oct 2024 03:16:28 +0000 Subject: [PATCH 70/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6327) Update report Co-authored-by: mcasimir <334881+mcasimir@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 36286290f53..0fd4fe857c5 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Fri Oct 04 2024. +This document was automatically generated on Sun Oct 06 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 4bb3e88dba8..dc3b14a4358 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Oct 4, 2024 at 10:24 AM +Generated on Sun, Oct 6, 2024 at 03:16 AM ## Table of Contents From faf24a060bb8556dc385404378a529728e02a707 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 05:05:26 +0000 Subject: [PATCH 71/97] v1.44.5-beta.2 --- package-lock.json | 2 +- packages/compass/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1bdbcfc1983..af0cb26243f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43353,7 +43353,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.5-beta.1", + "version": "1.44.5-beta.2", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index d300d82a993..ba4104e2c44 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.5-beta.1", + "version": "1.44.5-beta.2", "apiVersion": "3.0.0", "main": "build/main.js", "author": { From e88996c92ec0f0cb405b087634662eff97680b37 Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:16:17 -0400 Subject: [PATCH 72/97] chore: update electron (#6313) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- package-lock.json | 284 +++++------------------- packages/compass-e2e-tests/package.json | 2 +- packages/compass/package.json | 2 +- packages/hadron-build/package.json | 2 +- 4 files changed, 61 insertions(+), 229 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57cdb448135..81331c3c735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4250,9 +4250,9 @@ } }, "node_modules/@electron/rebuild": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.0.tgz", - "integrity": "sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.2.tgz", + "integrity": "sha512-fTSoWdbrPTmQOwvct4VnJH45aJg79WRabuNqt7cAWIno5kTXv1QD6qVmR2e8wmHi/xryaiVINl1gcEhKGjREVw==", "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", @@ -4333,7 +4333,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", "dependencies": { "debug": "4" }, @@ -4353,6 +4352,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4401,6 +4401,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4467,6 +4468,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -4522,7 +4524,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -4604,11 +4605,12 @@ } }, "node_modules/@electron/rebuild/node_modules/node-gyp": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", - "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dependencies": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", @@ -4630,6 +4632,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -4697,18 +4700,10 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@electron/rebuild/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/@electron/rebuild/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7573,15 +7568,6 @@ "semver": "^7.0.0" } }, - "node_modules/@lerna/create/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/@lerna/create/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -9713,14 +9699,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/@npmcli/fs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", @@ -10596,14 +10574,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", @@ -22936,8 +22906,7 @@ "node_modules/exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { "version": "4.21.0", @@ -29216,15 +29185,6 @@ "semver": "^7.0.0" } }, - "node_modules/lerna/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/lerna/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -32476,15 +32436,6 @@ "node": ">=8" } }, - "node_modules/node-gyp/node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", @@ -42579,50 +42530,11 @@ } }, "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { @@ -43366,7 +43278,7 @@ "system-ca": "^2.0.0" }, "devDependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-aggregations": "^9.45.2", @@ -44121,7 +44033,7 @@ "packages/compass-e2e-tests": { "version": "1.27.2", "devDependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -44164,6 +44076,15 @@ "xvfb-maybe": "^0.2.1" } }, + "packages/compass-e2e-tests/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "packages/compass-e2e-tests/node_modules/clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -44286,15 +44207,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/compass-e2e-tests/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "packages/compass-e2e-tests/node_modules/glob/node_modules/minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -47968,7 +47880,7 @@ "hasInstallScript": true, "license": "SSPL", "dependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", @@ -52703,9 +52615,9 @@ } }, "@electron/rebuild": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.0.tgz", - "integrity": "sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.2.tgz", + "integrity": "sha512-fTSoWdbrPTmQOwvct4VnJH45aJg79WRabuNqt7cAWIno5kTXv1QD6qVmR2e8wmHi/xryaiVINl1gcEhKGjREVw==", "requires": { "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", @@ -52957,11 +52869,12 @@ } }, "node-gyp": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", - "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "requires": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", @@ -53026,18 +52939,10 @@ "imurmurhash": "^0.1.4" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -55353,15 +55258,6 @@ } } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -61110,14 +61006,6 @@ "requires": { "builtins": "^5.0.0" } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } } } }, @@ -61782,14 +61670,6 @@ "requires": { "isexe": "^2.0.0" } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } } } }, @@ -67709,7 +67589,7 @@ "compass-e2e-tests": { "version": "file:packages/compass-e2e-tests", "requires": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -67752,6 +67632,15 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -67842,15 +67731,6 @@ "path-scurry": "^1.7.0" }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, "minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -71929,8 +71809,7 @@ "exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { "version": "4.21.0", @@ -73696,7 +73575,7 @@ "hadron-build": { "version": "file:packages/hadron-build", "requires": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", @@ -77523,15 +77402,6 @@ } } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -79365,7 +79235,7 @@ "mongodb-compass": { "version": "file:packages/compass", "requires": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-aggregations": "^9.45.2", @@ -80525,15 +80395,6 @@ "requires": { "ansi-regex": "^5.0.1" } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } } } }, @@ -88224,40 +88085,11 @@ } }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wildcard": { diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index 454074f362e..964d3f595b2 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -33,7 +33,7 @@ "server-info": "ts-node ./scripts/server-info.ts" }, "devDependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/connection-info": "^0.9.0", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/compass/package.json b/packages/compass/package.json index bb934a8154f..e1a4dbe6e8e 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -189,7 +189,7 @@ "system-ca": "^2.0.0" }, "devDependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.29.0", "@mongodb-js/compass-aggregations": "^9.45.2", diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index c8d3f7f3205..ffe998a376a 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -19,7 +19,7 @@ "url": "https://github.com/mongodb-js/compass.git" }, "dependencies": { - "@electron/rebuild": "^3.6.0", + "@electron/rebuild": "^3.6.2", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", From b8f11efb7cac35a681261a40ae97da95d4a7ff09 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:23:36 +0000 Subject: [PATCH 73/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6329) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 0fd4fe857c5..f48346a7e4d 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Sun Oct 06 2024. +This document was automatically generated on Mon Oct 07 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index dc3b14a4358..c6632cb4f16 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Sun, Oct 6, 2024 at 03:16 AM +Generated on Mon, Oct 7, 2024 at 07:23 PM ## Table of Contents From 818fb7c8bfcf83102dcbe98452d35bbd43a1a002 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 8 Oct 2024 09:25:16 +0200 Subject: [PATCH 74/97] chore(components): move component conventions from gdoc to readme (#6328) * chore(components): move component conventions from gdoc to readme * chore: add the reasoning for the package --- packages/compass-components/README.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/compass-components/README.md b/packages/compass-components/README.md index d3ffb56a088..b0421d33dee 100644 --- a/packages/compass-components/README.md +++ b/packages/compass-components/README.md @@ -1,17 +1,13 @@ -# @mongodb-js/compass-components [![][npm_img]][npm_url] +# @mongodb-js/compass-components -> A set of React Components which help build Compass +Compass Components package contains all foundational components and hooks used to build parts of Compass. Keeping all leafygreen dependencies and core UI components in a single package allows us to easier manage external depedendencies on LeafyGreen (including making sure that we never have multiple versions of the same LeafyGreen packages in the application at the same time as this can lead to technical issues) and make sure that the UI is consistently updated throughout the whole application. -## Resources +## Guidelines -- https://electron.atom.io/docs - Electron's documentation -- https://www.typescriptlang.org/ - Typescript -- https://nodejs.org/en/ - Node.js -- https://mochajs.org/ - Mocha testing framework -- https://reactjs.org/ - React -- https://testing-library.com/docs/react-testing-library/intro/ - React testing library -- https://github.com/mongodb/leafygreen-ui - LeafyGreen UI kit -- https://www.mongodb.design/ - MongoDB.Design - -[npm_img]: https://img.shields.io/npm/v/@mongodb-js/compass-components.svg?style=flat-square -[npm_url]: https://www.npmjs.org/package/@mongodb-js/compass-components +- If there is a foundational component available in LeafyGreen we **do not write our own**, instead we wrap that in compass-components and use it throughout Compass. LeafyGreen component usage should follow the "Design Documentation" for the component that is being used (when available). + - Refer to [LeafyGreen Design System](https://www.mongodb.design/) website to see all available LeafyGreen components. + - Ask in `#leafygreen-ui` Slack channel if you have any questions about the LeafyGreen component usage that the team can't help you answer or documentation is not sufficient. +- Components only use LeafyGreen variables for colors, typography, spacings, etc. Using custom values **should be avoided**. If Figma designs are not aligned with LeafyGreen design tokens, talk to the design team about that. +- Use [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag/) guidelines when building components. + - A screenreader can be used to navigate through and interact with the components. + - Components are navigable by using tab and arrow keys. From 2c24180a713b2a2b0cde7f7c265d8aa569baf268 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 07:31:58 +0000 Subject: [PATCH 75/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6330) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index f48346a7e4d..95a8304b718 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Mon Oct 07 2024. +This document was automatically generated on Tue Oct 08 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index c6632cb4f16..f23513372f8 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Oct 7, 2024 at 07:23 PM +Generated on Tue, Oct 8, 2024 at 07:31 AM ## Table of Contents From 58fb9f5e052e9f2393609a1135d72152b7349f06 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Wed, 9 Oct 2024 14:07:27 +0200 Subject: [PATCH 76/97] feat: add sharded state COMPASS-8279 (#6304) --- package-lock.json | 2 + packages/compass-global-writes/package.json | 1 + .../src/components/index.spec.tsx | 16 +- .../src/components/index.tsx | 8 + .../src/components/shard-zones-table.spec.tsx | 39 ++ .../src/components/shard-zones-table.tsx | 54 ++ .../states/shard-key-correct.spec.tsx | 135 +++++ .../components/states/shard-key-correct.tsx | 210 ++++++++ .../src/components/states/sharding.spec.tsx | 4 +- .../src/components/states/usharded.spec.tsx | 12 +- .../src/plugin-title.tsx | 4 +- .../services/atlas-global-writes-service.ts | 246 ++++++++- .../src/store/index.spec.ts | 260 ++++++---- .../compass-global-writes/src/store/index.ts | 7 +- .../src/store/reducer.ts | 491 +++++++++++++++--- .../tests/create-store.tsx | 56 +- 16 files changed, 1314 insertions(+), 231 deletions(-) create mode 100644 packages/compass-global-writes/src/components/shard-zones-table.spec.tsx create mode 100644 packages/compass-global-writes/src/components/shard-zones-table.tsx create mode 100644 packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx create mode 100644 packages/compass-global-writes/src/components/states/shard-key-correct.tsx diff --git a/package-lock.json b/package-lock.json index 81331c3c735..ba4db9ee48a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44784,6 +44784,7 @@ "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", + "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -56509,6 +56510,7 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", + "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index ab2f3f13335..cd3b029ccaa 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -56,6 +56,7 @@ "@mongodb-js/compass-logging": "^1.4.8", "@mongodb-js/compass-telemetry": "^1.2.0", "hadron-app-registry": "^9.2.7", + "lodash": "^4.17.21", "@mongodb-js/compass-field-store": "^9.18.1", "mongodb-ns": "^2.4.2", "react": "^17.0.2", diff --git a/packages/compass-global-writes/src/components/index.spec.tsx b/packages/compass-global-writes/src/components/index.spec.tsx index e264d94197d..4aff0336345 100644 --- a/packages/compass-global-writes/src/components/index.spec.tsx +++ b/packages/compass-global-writes/src/components/index.spec.tsx @@ -5,25 +5,25 @@ import { GlobalWrites } from './index'; import { renderWithStore } from './../../tests/create-store'; describe('Compass GlobalWrites Plugin', function () { - it('renders plugin in NOT_READY state', function () { - renderWithStore(); + it('renders plugin in NOT_READY state', async function () { + await renderWithStore(); expect(screen.getByText(/loading/i)).to.exist; }); - it('renders plugin in UNSHARDED state', function () { - renderWithStore(); + it('renders plugin in UNSHARDED state', async function () { + await renderWithStore(); expect(screen.getByTestId('shard-collection-button')).to.exist; }); - it('renders plugin in SUBMITTING_FOR_SHARDING state', function () { - renderWithStore( + it('renders plugin in SUBMITTING_FOR_SHARDING state', async function () { + await renderWithStore( ); expect(screen.getByTestId('shard-collection-button')).to.exist; }); - it('renders plugin in SHARDING state', function () { - renderWithStore(); + it('renders plugin in SHARDING state', async function () { + await renderWithStore(); expect(screen.getByText(/sharding your collection/i)).to.exist; }); }); diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index ff0a5b02fa4..77aa286de46 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -10,6 +10,7 @@ import type { RootState, ShardingStatus } from '../store/reducer'; import { ShardingStatuses } from '../store/reducer'; import UnshardedState from './states/unsharded'; import ShardingState from './states/sharding'; +import ShardKeyCorrect from './states/shard-key-correct'; const containerStyles = css({ paddingLeft: spacing[400], @@ -58,6 +59,13 @@ function ShardingStateView({ return ; } + if ( + shardingStatus === ShardingStatuses.SHARD_KEY_CORRECT || + shardingStatus === ShardingStatuses.UNMANAGING_NAMESPACE + ) { + return ; + } + return null; } diff --git a/packages/compass-global-writes/src/components/shard-zones-table.spec.tsx b/packages/compass-global-writes/src/components/shard-zones-table.spec.tsx new file mode 100644 index 00000000000..5aae046e76e --- /dev/null +++ b/packages/compass-global-writes/src/components/shard-zones-table.spec.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { expect } from 'chai'; +import { render, screen, within } from '@mongodb-js/testing-library-compass'; +import { ShardZonesTable } from './shard-zones-table'; +import { type ShardZoneData } from '../store/reducer'; + +describe('Compass GlobalWrites Plugin', function () { + const shardZones: ShardZoneData[] = [ + { + zoneId: '45893084', + country: 'Germany', + readableName: 'Germany', + isoCode: 'DE', + typeOneIsoCode: 'DE', + zoneName: 'EMEA', + zoneLocations: ['Frankfurt'], + }, + { + zoneId: '43829408', + country: 'Germany', + readableName: 'Germany - Berlin', + isoCode: 'DE-BE', + typeOneIsoCode: 'DE', + zoneName: 'EMEA', + zoneLocations: ['Frankfurt'], + }, + ]; + + it('renders the Location name & Zone for all items', function () { + render(); + + const rows = screen.getAllByRole('row'); + expect(rows).to.have.lengthOf(3); // 1 header, 2 items + expect(within(rows[1]).getByText('Germany (DE)')).to.be.visible; + expect(within(rows[1]).getByText('EMEA (Frankfurt)')).to.be.visible; + expect(within(rows[2]).getByText('Germany - Berlin (DE-BE)')).to.be.visible; + expect(within(rows[2]).getByText('EMEA (Frankfurt)')).to.be.visible; + }); +}); diff --git a/packages/compass-global-writes/src/components/shard-zones-table.tsx b/packages/compass-global-writes/src/components/shard-zones-table.tsx new file mode 100644 index 00000000000..abc866c668d --- /dev/null +++ b/packages/compass-global-writes/src/components/shard-zones-table.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { + Table, + TableBody, + TableHead, + HeaderRow, + HeaderCell, + Row, + Cell, + css, +} from '@mongodb-js/compass-components'; +import type { ShardZoneData } from '../store/reducer'; + +const containerStyles = css({ + maxWidth: '700px', + height: '400px', +}); + +export function ShardZonesTable({ + shardZones, +}: { + shardZones: ShardZoneData[]; +}) { + return ( + // TODO(COMPASS-8336): + // Add search + // group zones by ShardZoneData.typeOneIsoCode + // and display them in a single row that can be expanded + + + + Location Name + Zone + + + + {shardZones.map( + ({ readableName, zoneName, zoneLocations, isoCode }, index) => { + return ( + + + {readableName} ({isoCode}) + + + {zoneName} ({zoneLocations.join(', ')}) + + + ); + } + )} + +
+ ); +} diff --git a/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx b/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx new file mode 100644 index 00000000000..86f938cb10a --- /dev/null +++ b/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx @@ -0,0 +1,135 @@ +import React from 'react'; +import { expect } from 'chai'; +import { screen, userEvent } from '@mongodb-js/testing-library-compass'; +import { + ShardKeyCorrect, + type ShardKeyCorrectProps, +} from './shard-key-correct'; +import { type ShardZoneData } from '../../store/reducer'; +import Sinon from 'sinon'; +import { renderWithStore } from '../../../tests/create-store'; +import { type ConnectionInfo } from '@mongodb-js/compass-connections/provider'; + +describe('Compass GlobalWrites Plugin', function () { + const shardZones: ShardZoneData[] = [ + { + zoneId: '45893084', + country: 'Germany', + readableName: 'Germany', + isoCode: 'DE', + typeOneIsoCode: 'DE', + zoneName: 'EMEA', + zoneLocations: ['Frankfurt'], + }, + ]; + + const baseProps: ShardKeyCorrectProps = { + shardZones, + namespace: 'db1.coll1', + shardKey: { + fields: [ + { type: 'HASHED', name: 'location' }, + { type: 'RANGE', name: 'secondary' }, + ], + isUnique: false, + }, + isUnmanagingNamespace: false, + onUnmanageNamespace: () => {}, + }; + + function renderWithProps( + props?: Partial, + options?: Parameters[1] + ) { + return renderWithStore( + , + options + ); + } + + it('Provides button to unmanage', async function () { + const onUnmanageNamespace = Sinon.spy(); + await renderWithProps({ onUnmanageNamespace }); + + const btn = await screen.findByRole('button', { + name: /Unmanage collection/, + }); + expect(btn).to.be.visible; + + userEvent.click(btn); + + expect(onUnmanageNamespace).to.have.been.calledOnce; + }); + + it('Unmanage btn is disabled when the action is in progress', async function () { + const onUnmanageNamespace = Sinon.spy(); + await renderWithProps({ onUnmanageNamespace, isUnmanagingNamespace: true }); + + const btn = await screen.findByTestId( + 'shard-collection-button' + ); + expect(btn).to.be.visible; + expect(btn.getAttribute('aria-disabled')).to.equal('true'); + + userEvent.click(btn); + + expect(onUnmanageNamespace).not.to.have.been.called; + }); + + it('Provides link to Edit Configuration', async function () { + const connectionInfo = { + id: 'testConnection', + connectionOptions: { + connectionString: 'mongodb://test', + }, + atlasMetadata: { + projectId: 'project1', + clusterName: 'myCluster', + } as ConnectionInfo['atlasMetadata'], + }; + await renderWithProps(undefined, { + connectionInfo, + }); + + const link = await screen.findByRole('link', { + name: /Edit Configuration/, + }); + const expectedHref = `/v2/${connectionInfo.atlasMetadata?.projectId}#/clusters/edit/${connectionInfo.atlasMetadata?.clusterName}`; + + expect(link).to.be.visible; + expect(link).to.have.attribute('href', expectedHref); + }); + + it('Describes the shardKey', async function () { + await renderWithProps(); + + const title = await screen.findByTestId('shardkey-description-title'); + expect(title).to.be.visible; + expect(title.textContent).to.equal( + `${baseProps.namespace} is configured with the following shard key:` + ); + const list = await screen.findByTestId('shardkey-description-content'); + expect(list).to.be.visible; + expect(list.textContent).to.contain(`"location", "secondary"`); + }); + + it('Contains sample codes', async function () { + await renderWithProps(); + + const findingDocumentsSample = await screen.findByTestId( + 'sample-finding-documents' + ); + expect(findingDocumentsSample).to.be.visible; + expect(findingDocumentsSample.textContent).to.contain( + `use db1db["coll1"].find({"location": "US-NY", "secondary": ""})` + ); + + const insertingDocumentsSample = await screen.findByTestId( + 'sample-inserting-documents' + ); + expect(insertingDocumentsSample).to.be.visible; + expect(insertingDocumentsSample.textContent).to.contain( + `use db1db["coll1"].insertOne({"location": "US-NY", "secondary": "",...})` + ); + }); +}); diff --git a/packages/compass-global-writes/src/components/states/shard-key-correct.tsx b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx new file mode 100644 index 00000000000..05a29add5a8 --- /dev/null +++ b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx @@ -0,0 +1,210 @@ +import React, { useMemo } from 'react'; +import { + Banner, + BannerVariant, + Body, + css, + Link, + spacing, + Code, + Subtitle, + Label, + Button, +} from '@mongodb-js/compass-components'; +import { connect } from 'react-redux'; +import { + ShardingStatuses, + unmanageNamespace, + type RootState, + type ShardKey, + type ShardZoneData, +} from '../../store/reducer'; +import toNS from 'mongodb-ns'; +import { ShardZonesTable } from '../shard-zones-table'; +import { useConnectionInfo } from '@mongodb-js/compass-connections/provider'; + +const nbsp = '\u00a0'; + +const containerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[400], + marginBottom: spacing[400], +}); + +const codeBlockContainerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[100], + maxWidth: '700px', +}); + +const paragraphStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[100], +}); + +export type ShardKeyCorrectProps = { + namespace: string; + shardKey?: ShardKey; + shardZones: ShardZoneData[]; + isUnmanagingNamespace: boolean; + onUnmanageNamespace: () => void; +}; + +export function ShardKeyCorrect({ + namespace, + shardKey, + shardZones, + isUnmanagingNamespace, + onUnmanageNamespace, +}: ShardKeyCorrectProps) { + if (!shardKey) { + throw new Error('Shard key not found in ShardKeyCorrect'); + } + + const customShardKeyField = useMemo(() => { + return shardKey.fields[1].name; + }, [shardKey]); + + const { atlasMetadata } = useConnectionInfo(); + + const sampleCodes = useMemo(() => { + const { collection, database } = toNS(namespace); + return { + findingDocuments: `use ${database}\ndb[${JSON.stringify( + collection + )}].find({"location": "US-NY", "${customShardKeyField}": ""})`, + insertingDocuments: `use ${database}\ndb[${JSON.stringify( + collection + )}].insertOne({"location": "US-NY", "${customShardKeyField}": "",...})`, + }; + }, [namespace, customShardKeyField]); + + return ( +
+ + + All documents in your collection should contain both the ‘location’ + field (with a ISO country or subdivision code) and your{' '} + {customShardKeyField} field at insert time. + + {nbsp}We have included a table for reference below. + + +
+ + {namespace} is configured with the following shard + key: + + + {shardKey.fields.map((field) => `"${field.name}"`).join(', ')} + +
+ + Example commands +
+ + Start querying your database with some of the most{' '} + + common commands + {' '} + for Global Writes. + + + Replace the text to perform operations on different documents. US-NY + is an ISO 3166 location code referring to New York, United States. You + can look up other ISO 3166 location codes below. + +
+ +
+ + + {sampleCodes.findingDocuments} + +
+ +
+ + + {sampleCodes.insertingDocuments} + +
+ + Location Codes +
+ + Each document’s first field should include an ISO 3166-1 Alpha-2 code + for the location it belongs to. + + + We also support ISO 3166-2 subdivision codes for countries containing + a cloud provider data center (both ISO 3166-1 and ISO 3166-2 codes may + be used for these countries). All valid country codes and the zones to + which they map are listed in the table below. Additionally, you can + view a list of all location codes{' '} + here. + + + {atlasMetadata?.projectId && atlasMetadata?.clusterName && ( + <> + Locations’ zone mapping can be changed by navigating to this + clusters{' '} + + Edit Configuration + {' '} + page and clicking the Configure Location Mappings’ link above the + map. + + )} + +
+ + + + Unmanage this collection + + Documents belonging to this collection will no longer be distributed + across the shards of your global clusters. + +
+ +
+
+ ); +} + +export default connect( + (state: RootState) => ({ + namespace: state.namespace, + shardKey: state.shardKey, + shardZones: state.shardZones, + isUnmanagingNamespace: + state.status === ShardingStatuses.UNMANAGING_NAMESPACE, + }), + { + onUnmanageNamespace: unmanageNamespace, + } +)(ShardKeyCorrect); diff --git a/packages/compass-global-writes/src/components/states/sharding.spec.tsx b/packages/compass-global-writes/src/components/states/sharding.spec.tsx index beb6e372928..c3d8fb542be 100644 --- a/packages/compass-global-writes/src/components/states/sharding.spec.tsx +++ b/packages/compass-global-writes/src/components/states/sharding.spec.tsx @@ -11,8 +11,8 @@ function renderWithProps( } describe('Sharding', function () { - it('renders the info banner', function () { - renderWithProps(); + it('renders the info banner', async function () { + await renderWithProps(); expect(screen.getByRole('alert')).to.exist; }); }); diff --git a/packages/compass-global-writes/src/components/states/usharded.spec.tsx b/packages/compass-global-writes/src/components/states/usharded.spec.tsx index a26d5b228de..74d57ccb925 100644 --- a/packages/compass-global-writes/src/components/states/usharded.spec.tsx +++ b/packages/compass-global-writes/src/components/states/usharded.spec.tsx @@ -34,21 +34,21 @@ function setShardingKeyFieldValue(value: string) { } describe('UnshardedState', function () { - it('renders the warning banner', function () { - renderWithProps(); + it('renders the warning banner', async function () { + await renderWithProps(); expect(screen.getByRole('alert')).to.exist; }); - it('renders the text to the user', function () { - renderWithProps(); + it('renders the text to the user', async function () { + await renderWithProps(); expect(screen.getByTestId('unsharded-text-description')).to.exist; }); context('shard collection form', function () { let onCreateShardKeySpy: sinon.SinonSpy; - beforeEach(function () { + beforeEach(async function () { onCreateShardKeySpy = sinon.spy(); - renderWithProps({ onCreateShardKey: onCreateShardKeySpy }); + await renderWithProps({ onCreateShardKey: onCreateShardKeySpy }); }); it('renders location form field as disabled', function () { diff --git a/packages/compass-global-writes/src/plugin-title.tsx b/packages/compass-global-writes/src/plugin-title.tsx index e7fd917d6d2..0c484aecaac 100644 --- a/packages/compass-global-writes/src/plugin-title.tsx +++ b/packages/compass-global-writes/src/plugin-title.tsx @@ -72,7 +72,7 @@ const PluginTitle = ({ showWarning }: { showWarning: boolean }) => { }; export const GlobalWritesTabTitle = connect( - ({ isNamespaceSharded, status }: RootState) => ({ - showWarning: !isNamespaceSharded && status !== ShardingStatuses.NOT_READY, + ({ managedNamespace, status }: RootState) => ({ + showWarning: !managedNamespace && status !== ShardingStatuses.NOT_READY, }) )(PluginTitle); diff --git a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts index d548eae05c3..db41cb5f24f 100644 --- a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts +++ b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts @@ -1,8 +1,16 @@ import toNS from 'mongodb-ns'; +import keyBy from 'lodash/keyBy'; import type { AtlasService } from '@mongodb-js/atlas-service/provider'; import type { CreateShardKeyData } from '../store/reducer'; +import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; -type ZoneMapping = unknown; +export type ShardZoneMapping = { + isoCode: string; + typeOneIsoCode: string; + zoneId: string; + country: string; + readableName: string; +}; export type ManagedNamespace = { db: string; collection: string; @@ -14,18 +22,42 @@ export type ManagedNamespace = { }; type GeoShardingData = { - customZoneMapping: Record; + customZoneMapping: Record; managedNamespaces: ManagedNamespace[]; selfManagedSharding: boolean; }; -type ClusterDetailsApiResponse = { +type ReplicationItem = { + id: string; + regionConfigs: { + regionView: { + location: string; + }; + }[]; + zoneId: string; + zoneName: string; +}; +export type ClusterDetailsApiResponse = { geoSharding: GeoShardingData; + replicationSpecList: ReplicationItem[]; +}; + +type AutomationAgentProcess = { + statusType: string; + workingOnShort: string; + errorText: string; }; -type AtlasCluterInfo = { - projectId: string; - clusterName: string; +export type AutomationAgentDeploymentStatusApiResponse = { + automationStatus: { + processes: AutomationAgentProcess[]; + }; +}; + +type AtlasShardKey = { + _id: string; + unique: boolean; + key: Record; }; function assertDataIsClusterDetailsApiResponse( @@ -41,15 +73,44 @@ function assertDataIsClusterDetailsApiResponse( 'Invalid cluster details API response geoSharding.customZoneMapping' ); } + if (!Array.isArray(data?.replicationSpecList)) { + throw new Error('Invalid cluster details API response replicationSpecList'); + } +} + +function assertDataIsAutomationAgentDeploymentStatusApiResponse( + data: any +): asserts data is AutomationAgentDeploymentStatusApiResponse { + if (!Array.isArray(data?.automationStatus?.processes)) { + throw new Error( + 'Invalid automation agent deployment status API response automationStatus.processes' + ); + } +} + +function assertDataIsShardZonesApiResponse( + data: any +): asserts data is Record { + if (typeof data !== 'object') { + throw new Error('Invalid shard zones API response'); + } } export class AtlasGlobalWritesService { - constructor(private atlasService: AtlasService) {} + constructor( + private atlasService: AtlasService, + private connectionInfo: ConnectionInfoRef + ) {} + + private getAtlasMetadata() { + if (!this.connectionInfo.current?.atlasMetadata) { + throw new Error('Atlas metadata is not available'); + } + return this.connectionInfo.current.atlasMetadata; + } - private async fetchClusterDetails({ - clusterName, - projectId, - }: AtlasCluterInfo): Promise { + private async getClusterDetails(): Promise { + const { projectId, clusterName } = this.getAtlasMetadata(); const uri = this.atlasService.cloudEndpoint( `nds/clusters/${projectId}/${clusterName}` ); @@ -59,13 +120,10 @@ export class AtlasGlobalWritesService { return clusterDetails; } - async isNamespaceManaged( - namespace: string, - atlasClusterInfo: AtlasCluterInfo - ) { - const clusterDetails = await this.fetchClusterDetails(atlasClusterInfo); + async getManagedNamespace(namespace: string) { + const clusterDetails = await this.getClusterDetails(); const { database, collection } = toNS(namespace); - return clusterDetails.geoSharding.managedNamespaces.some( + return clusterDetails.geoSharding.managedNamespaces.find( (managedNamespace) => { return ( managedNamespace.db === database && @@ -75,12 +133,8 @@ export class AtlasGlobalWritesService { ); } - async createShardKey( - namespace: string, - keyData: CreateShardKeyData, - atlasClusterInfo: AtlasCluterInfo - ) { - const clusterDetails = await this.fetchClusterDetails(atlasClusterInfo); + async createShardKey(namespace: string, keyData: CreateShardKeyData) { + const clusterDetails = await this.getClusterDetails(); const { database, collection } = toNS(namespace); const requestData: GeoShardingData = { ...clusterDetails.geoSharding, @@ -94,8 +148,134 @@ export class AtlasGlobalWritesService { ], }; + const { projectId, clusterName } = this.getAtlasMetadata(); const uri = this.atlasService.cloudEndpoint( - `nds/clusters/${atlasClusterInfo.projectId}/${atlasClusterInfo.clusterName}/geoSharding` + `nds/clusters/${projectId}/${clusterName}/geoSharding` + ); + + const response = await this.atlasService.authenticatedFetch(uri, { + method: 'PATCH', + body: JSON.stringify(requestData), + headers: { + 'Content-Type': 'application/json', + }, + }); + assertDataIsClusterDetailsApiResponse(await response.json()); + + const managedNamespace = requestData.managedNamespaces.find( + (managedNamespace) => + managedNamespace.db === database && + managedNamespace.collection === collection + ); + if (!managedNamespace) { + throw new Error('Managed namespace not found'); + } + return managedNamespace; + } + + async getShardingError(namespace: string) { + const { projectId } = this.getAtlasMetadata(); + const uri = this.atlasService.cloudEndpoint( + `/automation/deploymentStatus/${projectId}` + ); + const response = await this.atlasService.authenticatedFetch(uri); + const data = await response.json(); + assertDataIsAutomationAgentDeploymentStatusApiResponse(data); + const namespaceShardingError = data.automationStatus.processes.find( + (process) => + process.statusType === 'ERROR' && + process.workingOnShort === 'ShardingCollections' && + process.errorText.indexOf(namespace) !== -1 + ); + return namespaceShardingError?.errorText; + } + + async getShardingKeys(namespace: string) { + const { database: db, collection } = toNS(namespace); + const atlasMetadata = this.getAtlasMetadata(); + + const req = await this.atlasService.automationAgentRequest( + atlasMetadata, + 'getShardKey', + { + db, + collection, + } + ); + + if (!req) { + throw new Error( + 'Unexpected response from the automation agent backend: expected to get the request metadata, got undefined' + ); + } + + const res = await this.atlasService.automationAgentAwait( + atlasMetadata, + req.requestType, + req._id + ); + const data = res.response; + + if (data.length === 0) { + return null; + } + const { key, unique } = data[0]; + + return { + fields: Object.keys(key).map( + (field) => + ({ + name: field, + type: key[field] === 'hashed' ? 'HASHED' : 'RANGE', + } as const) + ), + isUnique: !!unique, + }; + } + + async getShardingZones() { + const { projectId } = this.getAtlasMetadata(); + const { + replicationSpecList: replicationSpecs, + geoSharding: { customZoneMapping }, + } = await this.getClusterDetails(); + + const uri = this.atlasService.cloudEndpoint( + `/nds/geoSharding/${projectId}/newFormLocationMapping` + ); + const response = await this.atlasService.authenticatedFetch(uri, { + method: 'POST', + body: JSON.stringify({ + replicationSpecs, + customZoneMapping, + }), + headers: { + 'Content-Type': 'application/json', + }, + }); + const data = await response.json(); + assertDataIsShardZonesApiResponse(data); + return transformZoneData(Object.values(data), replicationSpecs); + } + + async unmanageNamespace(namespace: string) { + const clusterDetails = await this.getClusterDetails(); + const { database, collection } = toNS(namespace); + + const newManagedNamespaces = + clusterDetails.geoSharding.managedNamespaces.filter( + (managedNamespace) => + managedNamespace.db !== database || + managedNamespace.collection !== collection + ); + const requestData: GeoShardingData = { + ...clusterDetails.geoSharding, + managedNamespaces: newManagedNamespaces, + }; + + const { projectId, clusterName } = this.getAtlasMetadata(); + const uri = this.atlasService.cloudEndpoint( + `nds/clusters/${projectId}/${clusterName}/geoSharding` ); await this.atlasService.authenticatedFetch(uri, { @@ -107,3 +287,21 @@ export class AtlasGlobalWritesService { }); } } + +function transformZoneData( + zoneData: ShardZoneMapping[], + replicationSpecs: ReplicationItem[] +) { + const replicationSpecsMap = keyBy(replicationSpecs, 'zoneId'); + return zoneData.map((zone) => ({ + zoneId: zone.zoneId, + country: zone.country, + readableName: zone.readableName, + isoCode: zone.isoCode, + typeOneIsoCode: zone.typeOneIsoCode, + zoneName: replicationSpecsMap[zone.zoneId].zoneName, + zoneLocations: replicationSpecsMap[zone.zoneId].regionConfigs.map( + (regionConfig) => regionConfig.regionView.location + ), + })); +} diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts index 643869dc71b..7aa4c56e6d6 100644 --- a/packages/compass-global-writes/src/store/index.spec.ts +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -7,12 +7,51 @@ import { type CreateShardKeyData, } from './reducer'; import sinon from 'sinon'; +import type { + AutomationAgentDeploymentStatusApiResponse, + ClusterDetailsApiResponse, + ManagedNamespace, + ShardZoneMapping, +} from '../services/atlas-global-writes-service'; +import { waitFor } from '@mongodb-js/testing-library-compass'; const DB = 'test'; const COLL = 'coll'; const NS = `${DB}.${COLL}`; -function createJsonResponse(data: any) { +const clusterDetails: ClusterDetailsApiResponse = { + geoSharding: { + customZoneMapping: {}, + managedNamespaces: [], + selfManagedSharding: false, + }, + replicationSpecList: [], +}; + +const managedNamespace: ManagedNamespace = { + db: DB, + collection: COLL, + customShardKey: 'secondary', + isCustomShardKeyHashed: false, + isShardKeyUnique: false, + numInitialChunks: null, + presplitHashedZones: false, +}; + +const shardKeyData: CreateShardKeyData = { + customShardKey: 'test', + isCustomShardKeyHashed: true, + isShardKeyUnique: false, + numInitialChunks: 1, + presplitHashedZones: true, +}; + +function createAuthFetchResponse< + TResponse extends + | ClusterDetailsApiResponse + | AutomationAgentDeploymentStatusApiResponse + | Record +>(data: TResponse) { return { json: () => Promise.resolve(data), }; @@ -36,108 +75,141 @@ describe('GlobalWritesStore Store', function () { expect(store.getState().status).to.equal('NOT_READY'); }); - context('actions', function () { - context('fetchClusterShardingData', function () { - it('when the namespace is not managed', async function () { - const store = createStore({ - authenticatedFetch: () => - createJsonResponse({ - geoSharding: { customZoneMapping: {}, managedNamespaces: [] }, - }), - }); - await store.dispatch(fetchClusterShardingData()); - expect(store.getState().status).to.equal('UNSHARDED'); - expect(store.getState().isNamespaceSharded).to.equal(false); + context('scenarios', function () { + it('not managed -> sharding', async function () { + const store = createStore({ + authenticatedFetch: () => createAuthFetchResponse(clusterDetails), }); - - // TODO (COMPASS-8277): Add more test for fetching shard key and process errors + await store.dispatch(fetchClusterShardingData()); + expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().managedNamespace).to.equal(undefined); + + const promise = store.dispatch(createShardKey(shardKeyData)); + expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + await promise; + expect(store.getState().status).to.equal('SHARDING'); }); - context('createShardKey', function () { - const shardKeyData: CreateShardKeyData = { - customShardKey: 'test', - isCustomShardKeyHashed: true, - isShardKeyUnique: false, - numInitialChunks: 1, - presplitHashedZones: true, - }; - - it('sets SUBMITTING_FOR_SHARDING state when starting to create shard key and sets to SHARDING on success', async function () { - const store = createStore({ - authenticatedFetch: () => - createJsonResponse({ - geoSharding: { customZoneMapping: {}, managedNamespaces: [] }, - }), - }); - - const promise = store.dispatch(createShardKey(shardKeyData)); - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); - - await promise; - expect(store.getState().status).to.equal('SHARDING'); + it('not managed -> failed sharding attempt', async function () { + const store = createStore({ + authenticatedFetch: (uri: string) => { + if (uri.includes('/geoSharding')) { + return Promise.reject(new Error('Failed to shard')); + } + + return createAuthFetchResponse(clusterDetails); + }, }); + await store.dispatch(fetchClusterShardingData()); + expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().managedNamespace).to.equal(undefined); + + const promise = store.dispatch(createShardKey(shardKeyData)); + expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + await promise; + expect(store.getState().status).to.equal('UNSHARDED'); + }); - it('sets SUBMITTING_FOR_SHARDING state when starting to create shard key and sets to UNSHARDED on failure', async function () { - const store = createStore({ - authenticatedFetch: () => Promise.reject(new Error('error')), - }); + it('when the namespace is managed', async function () { + const store = createStore({ + authenticatedFetch: (uri: string) => { + if (uri.includes('/clusters/')) { + return createAuthFetchResponse({ + ...clusterDetails, + geoSharding: { + ...clusterDetails.geoSharding, + managedNamespaces: [managedNamespace], + }, + }); + } + + if (uri.includes('/deploymentStatus/')) { + return createAuthFetchResponse({ + automationStatus: { + processes: [], + }, + }); + } + + return createAuthFetchResponse({}); + }, + automationAgentRequest: (_meta: unknown, type: string) => ({ + _id: '123', + requestType: type, + }), + automationAgentAwait: (_meta: unknown, type: string) => { + if (type === 'getShardKey') { + return { + response: [ + { + key: { + location: 'HASHED', + secondary: 'HASHED', + }, + unique: false, + }, + ], + }; + } + }, + }); + await store.dispatch(fetchClusterShardingData()); + await waitFor(() => { + expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().managedNamespace).to.equal(managedNamespace); + }); + }); - const promise = store.dispatch(createShardKey(shardKeyData)); - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + it('sends correct data to the server when creating a shard key', async function () { + const alreadyManagedNamespaces = [ + { + db: 'test', + collection: 'one', + customShardKey: 'test', + isCustomShardKeyHashed: true, + isShardKeyUnique: false, + numInitialChunks: 1, + presplitHashedZones: true, + }, + ]; + + const getClusterInfoApiResponse = createAuthFetchResponse({ + ...clusterDetails, + geoSharding: { + ...clusterDetails.geoSharding, + managedNamespaces: alreadyManagedNamespaces, + }, + }); - await promise; - expect(store.getState().status).to.equal('UNSHARDED'); + // We call cluster API when store is activated to get the initial state. + // When creating a shard key, we call the same API to fetch the latest list of + // managed namespaces & then send it to the server along with the shard key data. + // So, we mock first and second call with same data. And then third call + // should be to create the shard key. + const fetchStub = sinon + .stub() + .onFirstCall() + .returns(getClusterInfoApiResponse) + .onSecondCall() + .returns(getClusterInfoApiResponse) + .onThirdCall() + .resolves(); + + const store = createStore({ + authenticatedFetch: fetchStub, }); - it('sends correct data to the server when creating a shard key', async function () { - const alreadyManagedNamespaces = [ - { - db: 'test', - collection: 'one', - customShardKey: 'test', - isCustomShardKeyHashed: true, - isShardKeyUnique: false, - numInitialChunks: 1, - presplitHashedZones: true, - }, - ]; - - const getClusterInfoApiResponse = createJsonResponse({ - geoSharding: { - customZoneMapping: {}, - managedNamespaces: alreadyManagedNamespaces, - }, - }); - - // We call cluster API when store is activated to get the initial state. - // When creating a shard key, we call the same API to fetch the latest list of - // managed namespaces & then send it to the server along with the shard key data. - // So, we mock first and second call with same data. And then third call - // should be to create the shard key. - const fetchStub = sinon - .stub() - .onFirstCall() - .returns(getClusterInfoApiResponse) - .onSecondCall() - .returns(getClusterInfoApiResponse) - .onThirdCall() - .resolves(); - - const store = createStore({ - authenticatedFetch: fetchStub, - }); - - await store.dispatch(createShardKey(shardKeyData)); - - const options = fetchStub.getCall(2).args[1]; - expect(options.method).to.equal('PATCH'); - expect(JSON.parse(options.body)).to.deep.equal({ - customZoneMapping: {}, - managedNamespaces: [ - ...alreadyManagedNamespaces, - { ...shardKeyData, db: DB, collection: COLL }, - ], - }); + await store.dispatch(createShardKey(shardKeyData)); + + const options = fetchStub.getCall(2).args[1]; + expect(options.method).to.equal('PATCH'); + expect(JSON.parse(options.body)).to.deep.equal({ + customZoneMapping: {}, + managedNamespaces: [ + ...alreadyManagedNamespaces, + { ...shardKeyData, db: DB, collection: COLL }, + ], + selfManagedSharding: false, }); }); }); diff --git a/packages/compass-global-writes/src/store/index.ts b/packages/compass-global-writes/src/store/index.ts index 334034a52a6..b00fad27e27 100644 --- a/packages/compass-global-writes/src/store/index.ts +++ b/packages/compass-global-writes/src/store/index.ts @@ -56,13 +56,16 @@ export function activateGlobalWritesPlugin( }: GlobalWritesPluginServices, { cleanup }: ActivateHelpers ) { - const atlasGlobalWritesService = new AtlasGlobalWritesService(atlasService); + const atlasGlobalWritesService = new AtlasGlobalWritesService( + atlasService, + connectionInfoRef + ); const store: GlobalWritesStore = createStore( reducer, { namespace: options.namespace, - isNamespaceSharded: false, status: ShardingStatuses.NOT_READY, + shardZones: [], }, applyMiddleware( thunk.withExtraArgument({ diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index 17e1dba65db..85981a039df 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -20,15 +20,39 @@ export type CreateShardKeyData = Pick< >; enum GlobalWritesActionTypes { - IsManagedNamespaceFetched = 'global-writes/IsManagedNamespaceFetched', + ManagedNamespaceFetched = 'global-writes/ManagedNamespaceFetched', + NamespaceShardingErrorFetched = 'global-writes/NamespaceShardingErrorFetched', + NamespaceShardKeyFetched = 'global-writes/NamespaceShardKeyFetched', + + ShardZonesFetched = 'global-writes/ShardZonesFetched', + SubmittingForShardingStarted = 'global-writes/SubmittingForShardingStarted', SubmittingForShardingFinished = 'global-writes/SubmittingForShardingFinished', SubmittingForShardingErrored = 'global-writes/SubmittingForShardingErrored', + + UnmanagingNamespaceStarted = 'global-writes/UnmanagingNamespaceStarted', + UnmanagingNamespaceFinished = 'global-writes/UnmanagingNamespaceFinished', + UnmanagingNamespaceErrored = 'global-writes/UnmanagingNamespaceErrored', } -type IsManagedNamespaceFetchedAction = { - type: GlobalWritesActionTypes.IsManagedNamespaceFetched; - isNamespaceManaged: boolean; +type ManagedNamespaceFetchedAction = { + type: GlobalWritesActionTypes.ManagedNamespaceFetched; + managedNamespace?: ManagedNamespace; +}; + +type NamespaceShardingErrorFetchedAction = { + type: GlobalWritesActionTypes.NamespaceShardingErrorFetched; + error: string; +}; + +type NamespaceShardKeyFetchedAction = { + type: GlobalWritesActionTypes.NamespaceShardKeyFetched; + shardKey: ShardKey; +}; + +type ShardZonesFetchedAction = { + type: GlobalWritesActionTypes.ShardZonesFetched; + shardZones: ShardZoneData[]; }; type SubmittingForShardingStartedAction = { @@ -37,12 +61,25 @@ type SubmittingForShardingStartedAction = { type SubmittingForShardingFinishedAction = { type: GlobalWritesActionTypes.SubmittingForShardingFinished; + managedNamespace?: ManagedNamespace; }; type SubmittingForShardingErroredAction = { type: GlobalWritesActionTypes.SubmittingForShardingErrored; }; +type UnmanagingNamespaceStartedAction = { + type: GlobalWritesActionTypes.UnmanagingNamespaceStarted; +}; + +type UnmanagingNamespaceFinishedAction = { + type: GlobalWritesActionTypes.UnmanagingNamespaceFinished; +}; + +type UnmanagingNamespaceErroredAction = { + type: GlobalWritesActionTypes.UnmanagingNamespaceErrored; +}; + export enum ShardingStatuses { /** * Initial status, no information available yet. @@ -64,43 +101,162 @@ export enum ShardingStatuses { * Namespace is being sharded. */ SHARDING = 'SHARDING', + + /** + * Sharding failed. + */ + SHARDING_ERROR = 'SHARDING_ERROR', + + /** + * If the first key is not valid location key or the key is not compound. + */ + SHARD_KEY_INVALID = 'SHARD_KEY_INVALID', + + /** + * If the first key is valid (location key) and second key is not valid. + * The second key valid means that it matches with the managedNamespace's + * customShardKey and is of the correct type. + */ + SHARD_KEY_MISMATCH = 'SHARD_KEY_MISMATCH', + + /** + * Namespace is geo-sharded. Both, first key is valid + * location key and second key is valid custom key. + */ + SHARD_KEY_CORRECT = 'SHARD_KEY_CORRECT', + + /** + * Namespace is being unmanaged. + */ + UNMANAGING_NAMESPACE = 'UNMANAGING_NAMESPACE', } export type ShardingStatus = keyof typeof ShardingStatuses; - +export type ShardKey = { + fields: Array<{ + type: 'HASHED' | 'RANGE'; + name: string; + }>; + isUnique: boolean; +}; +export type ShardZoneData = { + zoneId: string; + country: string; + readableName: string; + isoCode: string; + typeOneIsoCode: string; + zoneName: string; + zoneLocations: string[]; +}; export type RootState = { namespace: string; - isNamespaceSharded: boolean; - status: ShardingStatus; -}; + managedNamespace?: ManagedNamespace; + shardZones: ShardZoneData[]; +} & ( + | { + status: ShardingStatuses.NOT_READY; + shardKey?: never; + shardingError?: never; + } + | { + status: + | ShardingStatuses.UNSHARDED + | ShardingStatuses.SUBMITTING_FOR_SHARDING + | ShardingStatuses.SHARDING; + /** + * note: shardKey might exist even for unsharded. + * if the collection was sharded previously and then unmanaged + */ + shardKey?: ShardKey; + shardingError?: never; + } + | { + status: ShardingStatuses.SHARDING_ERROR; + shardKey?: never; + shardingError: string; + } + | { + status: + | ShardingStatuses.SHARD_KEY_CORRECT + | ShardingStatuses.SHARD_KEY_INVALID + | ShardingStatuses.SHARD_KEY_MISMATCH + | ShardingStatuses.UNMANAGING_NAMESPACE; + shardKey: ShardKey; + shardingError?: never; + } +); const initialState: RootState = { namespace: '', - isNamespaceSharded: false, status: ShardingStatuses.NOT_READY, + shardZones: [], }; const reducer: Reducer = (state = initialState, action) => { if ( - isAction( + isAction( action, - GlobalWritesActionTypes.IsManagedNamespaceFetched - ) + GlobalWritesActionTypes.ManagedNamespaceFetched + ) && + state.status === ShardingStatuses.NOT_READY ) { return { ...state, - isNamespaceSharded: action.isNamespaceManaged, - status: !action.isNamespaceManaged + managedNamespace: action.managedNamespace, + status: !action.managedNamespace ? ShardingStatuses.UNSHARDED : state.status, }; } + if ( + isAction( + action, + GlobalWritesActionTypes.NamespaceShardingErrorFetched + ) && + state.status === ShardingStatuses.NOT_READY + ) { + return { + ...state, + status: ShardingStatuses.SHARDING_ERROR, + shardKey: undefined, + shardingError: action.error, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.NamespaceShardKeyFetched + ) && + state.status === ShardingStatuses.NOT_READY + ) { + return { + ...state, + status: getStatusFromShardKey(action.shardKey, state.managedNamespace), + shardKey: action.shardKey, + shardingError: undefined, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.ShardZonesFetched + ) + ) { + return { + ...state, + shardZones: action.shardZones, + }; + } + if ( isAction( action, GlobalWritesActionTypes.SubmittingForShardingStarted - ) + ) && + state.status === ShardingStatuses.UNSHARDED ) { return { ...state, @@ -112,11 +268,12 @@ const reducer: Reducer = (state = initialState, action) => { isAction( action, GlobalWritesActionTypes.SubmittingForShardingFinished - ) + ) && + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING ) { return { ...state, - isNamespaceSharded: true, + managedNamespace: action.managedNamespace || state.managedNamespace, status: ShardingStatuses.SHARDING, }; } @@ -125,49 +282,86 @@ const reducer: Reducer = (state = initialState, action) => { isAction( action, GlobalWritesActionTypes.SubmittingForShardingErrored - ) + ) && + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING + ) { + return { + ...state, + managedNamespace: undefined, + status: ShardingStatuses.UNSHARDED, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.UnmanagingNamespaceStarted + ) && + (state.status === ShardingStatuses.SHARD_KEY_CORRECT || + state.status === ShardingStatuses.SHARD_KEY_INVALID || + state.status === ShardingStatuses.SHARD_KEY_MISMATCH) ) { return { ...state, + status: ShardingStatuses.UNMANAGING_NAMESPACE, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.UnmanagingNamespaceFinished + ) && + state.status === ShardingStatuses.UNMANAGING_NAMESPACE + ) { + return { + ...state, + managedNamespace: undefined, status: ShardingStatuses.UNSHARDED, }; } + if ( + isAction( + action, + GlobalWritesActionTypes.UnmanagingNamespaceErrored + ) && + state.status === ShardingStatuses.UNMANAGING_NAMESPACE + ) { + return { + ...state, + status: ShardingStatuses.SHARD_KEY_CORRECT, + }; + } + return state; }; export const fetchClusterShardingData = - (): GlobalWritesThunkAction, IsManagedNamespaceFetchedAction> => + (): GlobalWritesThunkAction, ManagedNamespaceFetchedAction> => async ( dispatch, getState, - { atlasGlobalWritesService, connectionInfoRef, logger } + { atlasGlobalWritesService, logger, connectionInfoRef } ) => { - if (!connectionInfoRef.current.atlasMetadata) { - return; - } - const { namespace } = getState(); - const { clusterName, projectId } = connectionInfoRef.current.atlasMetadata; - try { // Call the API to check if the namespace is managed. If the namespace is managed, // we would want to fetch more data that is needed to figure out the state and // accordingly show the UI to the user. - const isNamespaceManaged = - await atlasGlobalWritesService.isNamespaceManaged(namespace, { - projectId, - clusterName, - }); + const managedNamespace = + await atlasGlobalWritesService.getManagedNamespace(namespace); dispatch({ - type: GlobalWritesActionTypes.IsManagedNamespaceFetched, - isNamespaceManaged, + type: GlobalWritesActionTypes.ManagedNamespaceFetched, + managedNamespace, }); - if (!isNamespaceManaged) { + if (!managedNamespace) { return; } - // TODO (COMPASS-8277): Now fetch the sharding key and possible process error. + + // At this point, the namespace is managed and we want to fetch the sharding key. + void dispatch(fetchNamespaceShardKey()); } catch (error) { logger.log.error( logger.mongoLogId(1_001_000_330), @@ -175,50 +369,44 @@ export const fetchClusterShardingData = 'Error fetching cluster sharding data', (error as Error).message ); - openToast('global-writes-fetch-shard-info-error', { - title: `Failed to fetch sharding information: ${ - (error as Error).message - }`, - dismissible: true, - timeout: 5000, - variant: 'important', - }); + openToast( + `global-writes-fetch-shard-info-error-${connectionInfoRef.current.id}-${namespace}`, + { + title: `Failed to fetch sharding information: ${ + (error as Error).message + }`, + dismissible: true, + timeout: 5000, + variant: 'important', + } + ); } }; -export const createShardKey = - ( - data: CreateShardKeyData - ): GlobalWritesThunkAction< - Promise, - | SubmittingForShardingStartedAction - | SubmittingForShardingFinishedAction - | SubmittingForShardingErroredAction - > => - async ( +export const createShardKey = ( + data: CreateShardKeyData +): GlobalWritesThunkAction< + Promise, + | SubmittingForShardingStartedAction + | SubmittingForShardingFinishedAction + | SubmittingForShardingErroredAction +> => { + return async ( dispatch, getState, - { connectionInfoRef, atlasGlobalWritesService, logger } + { atlasGlobalWritesService, logger, connectionInfoRef } ) => { - if (!connectionInfoRef.current.atlasMetadata) { - return; - } - const { namespace } = getState(); - const { clusterName, projectId } = connectionInfoRef.current.atlasMetadata; - dispatch({ type: GlobalWritesActionTypes.SubmittingForShardingStarted, }); try { - await atlasGlobalWritesService.createShardKey(namespace, data, { - projectId, - clusterName, - }); - dispatch({ - type: GlobalWritesActionTypes.SubmittingForShardingFinished, - }); + const managedNamespace = await atlasGlobalWritesService.createShardKey( + namespace, + data + ); + dispatch(setNamespaceBeingSharded(managedNamespace)); } catch (error) { logger.log.error( logger.mongoLogId(1_001_000_331), @@ -229,16 +417,173 @@ export const createShardKey = data, } ); - openToast('global-writes-create-shard-key-error', { - title: `Failed to create shard key: ${(error as Error).message}`, - dismissible: true, - timeout: 5000, - variant: 'important', - }); + openToast( + `global-writes-create-shard-key-error-${connectionInfoRef.current.id}-${namespace}`, + { + title: `Failed to create shard key: ${(error as Error).message}`, + dismissible: true, + timeout: 5000, + variant: 'important', + } + ); dispatch({ type: GlobalWritesActionTypes.SubmittingForShardingErrored, }); } }; +}; + +const setNamespaceBeingSharded = ( + managedNamespace?: ManagedNamespace +): GlobalWritesThunkAction => { + return (dispatch) => { + dispatch({ + type: GlobalWritesActionTypes.SubmittingForShardingFinished, + managedNamespace, + }); + }; +}; + +export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< + Promise, + NamespaceShardingErrorFetchedAction | NamespaceShardKeyFetchedAction +> => { + return async ( + dispatch, + getState, + { atlasGlobalWritesService, logger, connectionInfoRef } + ) => { + const { namespace } = getState(); + + try { + const [shardingError, shardKey] = await Promise.all([ + atlasGlobalWritesService.getShardingError(namespace), + atlasGlobalWritesService.getShardingKeys(namespace), + ]); + + if (shardingError) { + dispatch({ + type: GlobalWritesActionTypes.NamespaceShardingErrorFetched, + error: shardingError, + }); + return; + } + + if (!shardKey) { + dispatch(setNamespaceBeingSharded()); + return; + } + + dispatch({ + type: GlobalWritesActionTypes.NamespaceShardKeyFetched, + shardKey, + }); + void dispatch(fetchShardingZones()); + } catch (error) { + logger.log.error( + logger.mongoLogId(1_001_000_333), + 'AtlasFetchError', + 'Error fetching shard key', + (error as Error).message + ); + openToast( + `global-writes-fetch-shard-key-error-${connectionInfoRef.current.id}-${namespace}`, + { + title: `Failed to fetch shard key: ${(error as Error).message}`, + dismissible: true, + timeout: 5000, + variant: 'important', + } + ); + } + }; +}; + +export const fetchShardingZones = (): GlobalWritesThunkAction< + Promise, + ShardZonesFetchedAction +> => { + return async (dispatch, getState, { atlasGlobalWritesService }) => { + const { shardZones } = getState(); + if (shardZones.length > 0) { + return; + } + const shardingZones = await atlasGlobalWritesService.getShardingZones(); + dispatch({ + type: GlobalWritesActionTypes.ShardZonesFetched, + shardZones: shardingZones, + }); + }; +}; + +export const unmanageNamespace = (): GlobalWritesThunkAction< + Promise, + | UnmanagingNamespaceStartedAction + | UnmanagingNamespaceFinishedAction + | UnmanagingNamespaceErroredAction +> => { + return async ( + dispatch, + getState, + { atlasGlobalWritesService, connectionInfoRef } + ) => { + const { namespace } = getState(); + + dispatch({ + type: GlobalWritesActionTypes.UnmanagingNamespaceStarted, + }); + + try { + await atlasGlobalWritesService.unmanageNamespace(namespace); + dispatch({ + type: GlobalWritesActionTypes.UnmanagingNamespaceFinished, + }); + } catch (error) { + dispatch({ + type: GlobalWritesActionTypes.UnmanagingNamespaceErrored, + }); + openToast( + `global-writes-unmanage-namespace-error-${connectionInfoRef.current.id}-${namespace}`, + { + title: `Failed to unmanage namespace: ${(error as Error).message}`, + dismissible: true, + timeout: 5000, + variant: 'important', + } + ); + } + }; +}; + +export function getStatusFromShardKey( + shardKey: ShardKey, + managedNamespace?: ManagedNamespace +) { + const [firstShardKey, secondShardKey] = shardKey.fields; + + // For a shard key to be valid: + // 1. The first key must be location and of type RANGE. + // 2. The second key name must match managedNamespace.customShardKey and + // the type must match the managedNamespace.isCustomShardKeyHashed. + + const isLocatonKeyValid = + firstShardKey.name === 'location' && firstShardKey.type === 'RANGE'; + const isCustomKeyValid = + managedNamespace && + managedNamespace.isShardKeyUnique === shardKey.isUnique && + secondShardKey.name === managedNamespace.customShardKey && + secondShardKey.type === + (managedNamespace.isCustomShardKeyHashed ? 'HASHED' : 'RANGE'); + + if (!isLocatonKeyValid || !secondShardKey) { + return ShardingStatuses.SHARD_KEY_INVALID; + } + + if (!isCustomKeyValid) { + return ShardingStatuses.SHARD_KEY_MISMATCH; + } + + return ShardingStatuses.SHARD_KEY_CORRECT; +} export default reducer; diff --git a/packages/compass-global-writes/tests/create-store.tsx b/packages/compass-global-writes/tests/create-store.tsx index 0aad67f78dc..631a6d6d5d9 100644 --- a/packages/compass-global-writes/tests/create-store.tsx +++ b/packages/compass-global-writes/tests/create-store.tsx @@ -7,13 +7,25 @@ import { activateGlobalWritesPlugin } from '../src/store'; import { createActivateHelpers } from 'hadron-app-registry'; import { createNoopLogger } from '@mongodb-js/compass-logging/provider'; import { createNoopTrack } from '@mongodb-js/compass-telemetry/provider'; -import type { ConnectionInfoRef } from '@mongodb-js/compass-connections/provider'; +import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import type { AtlasService } from '@mongodb-js/atlas-service/provider'; import { Provider } from 'react-redux'; -import { render } from '@mongodb-js/testing-library-compass'; +import { renderWithActiveConnection } from '@mongodb-js/testing-library-compass'; import clusterApiResponse from './cluster-api-response.json'; +const TEST_CONNECTION_INFO = { + id: 'TEST', + connectionOptions: { + connectionString: 'mongodb://localhost', + }, + atlasMetadata: { + clusterName: 'Cluster0', + clusterType: 'UNSHARDED', + projectId: 'Project0', + } as unknown as ConnectionInfo['atlasMetadata'], +}; + const atlasService = { cloudEndpoint: (p: string) => { return `https://example.com/${p}`; @@ -36,19 +48,9 @@ const atlasService = { export const setupStore = ( options: Partial = {}, - services: Partial = {} + services: Partial = {}, + connectionInfo: ConnectionInfo = TEST_CONNECTION_INFO ) => { - const connectionInfoRef = { - current: { - id: 'TEST', - atlasMetadata: { - clusterName: 'Cluster0', - clusterType: 'GEOSHARDED', - projectId: 'Project0', - }, - }, - } as ConnectionInfoRef; - return activateGlobalWritesPlugin( { namespace: 'airbnb.listings', @@ -57,7 +59,12 @@ export const setupStore = ( { logger: createNoopLogger('TEST'), track: createNoopTrack(), - connectionInfoRef, + connectionInfoRef: { + current: { + ...connectionInfo, + title: 'My connection', + }, + }, ...services, atlasService: { ...atlasService, @@ -70,10 +77,19 @@ export const setupStore = ( export const renderWithStore = ( component: JSX.Element, - services: Partial = {}, - options: Partial = {} + { + services = {}, + options = {}, + connectionInfo = TEST_CONNECTION_INFO, + }: { + services?: Partial; + options?: Partial; + connectionInfo?: ConnectionInfo; + } = {} ) => { - const store = setupStore(options, services); - render({component}); - return store; + const store = setupStore(options, services, connectionInfo); + return renderWithActiveConnection( + {component}, + connectionInfo + ); }; From a72ea4ec134bfa7e251d026ed6c777a35dd772ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:14:33 +0000 Subject: [PATCH 77/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6337) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 95a8304b718..950cf252de3 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Oct 08 2024. +This document was automatically generated on Wed Oct 09 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index f23513372f8..8bfa52962e1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 8, 2024 at 07:31 AM +Generated on Wed, Oct 9, 2024 at 12:14 PM ## Table of Contents From 95581dc02a13891c6bccb1d01d6fddcf6f6ee2a8 Mon Sep 17 00:00:00 2001 From: Rhys Date: Wed, 9 Oct 2024 08:32:54 -0400 Subject: [PATCH 78/97] chore(deps): update express for new cookie dep version COMPASS-8350 (#6335) --- package-lock.json | 34 ++++++++++++++++--------------- packages/compass-web/package.json | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba4db9ee48a..06baf2b6cc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18251,9 +18251,10 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -22909,16 +22910,17 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -46635,7 +46637,7 @@ "electron": "^30.5.1", "eslint": "^7.25.0", "events": "^3.3.0", - "express": "^4.20.0", + "express": "^4.21.1", "express-http-proxy": "^2.0.0", "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", @@ -58296,7 +58298,7 @@ "electron": "^30.5.1", "eslint": "^7.25.0", "events": "^3.3.0", - "express": "^4.20.0", + "express": "^4.21.1", "express-http-proxy": "^2.0.0", "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", @@ -68205,9 +68207,9 @@ } }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -71814,16 +71816,16 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 41030bbcc4c..9d2b5c1b71d 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -111,7 +111,7 @@ "electron": "^30.5.1", "eslint": "^7.25.0", "events": "^3.3.0", - "express": "^4.20.0", + "express": "^4.21.1", "express-http-proxy": "^2.0.0", "hadron-app-registry": "^9.2.7", "is-ip": "^5.0.1", From 4474f17fe4181829ba5d709778c535a4c343cccf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:40:12 +0000 Subject: [PATCH 79/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6338) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 12 ++++++------ docs/tracking-plan.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 950cf252de3..f5657e31a86 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -209,7 +209,7 @@ Package|Version|License **[content-type](#65e9de41d2cef0ed95875e387bc56dae50b05d41b1a7868ed68c32834843bbab)**|1.0.5|MIT **[convert-source-map](#46e32cfc12079a57eefebf967b5959d3657698c6a389222eb3228f49cb2fd8db)**|2.0.0|MIT **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)**|1.0.6|MIT -**[cookie](#c396652ff004385e7bdb8398e37493d5f4144e475282a413ec52f1d3fdaf25da)**|0.6.0|MIT +**[cookie](#6fffbd43d8f0d9a659c21e31a0935f0a1226c9990be593a9649dcd61e4db1204)**|0.7.1|MIT **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)**|3.17.3|MIT **[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)**|0.0.9|MIT **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)**|1.0.5|MIT @@ -270,7 +270,7 @@ Package|Version|License **[execa](#4172423d3420d919e31613f23914ef325af8a3bf9ed3c6110a4053369b1cfddd)**|5.1.1|MIT **[execa](#099ba5f976333854bfd5aa2237fd12d883c4477af76007a7963109833edef012)**|7.2.0|MIT **[expand-template](#46d3e73ca0d4a8c14e99252386f0a5c1a4fd8b2747331373d7b4da97105c15bb)**|2.0.3|(MIT OR WTFPL) -**[express](#8751e219c34fdecbdbc22ade072ef51354f9ff6434904f388f85002299a5a1ec)**|4.21.0|MIT +**[express](#96b5945aa9b5ba9189eb3e9f50f6522e976d90a93dc42f2f3aa13cbcffb434a2)**|4.21.1|MIT **[ext-list](#84470edae99e3ac5a9fdf9da513cd9a1ea7e479ca5fca13b6abecbb4c522f97c)**|2.2.2|MIT **[ext-name](#ad9b31fcbd25bf889177f1e55d92e083fbc5ae2460904d8a81abf075c4762abd)**|5.0.0|MIT **[facepaint](#7f6881dbbff5f35b8670063d56384fa880a5558aeaf952f1dc00997cfc7cddd4)**|1.2.1|MIT @@ -17655,8 +17655,8 @@ License files: License tags: MIT - -### [cookie](https://www.npmjs.com/package/cookie) (version 0.6.0) + +### [cookie](https://www.npmjs.com/package/cookie) (version 0.7.1) License tags: MIT License files: @@ -19823,8 +19823,8 @@ License files: THE SOFTWARE. - -### [express](https://www.npmjs.com/package/express) (version 4.21.0) + +### [express](https://www.npmjs.com/package/express) (version 4.21.1) License tags: MIT License files: diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 8bfa52962e1..63ad6c11fef 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 9, 2024 at 12:14 PM +Generated on Wed, Oct 9, 2024 at 12:40 PM ## Table of Contents From 529a71d68a0e60ded13793a36f12ccb25f2966cb Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Wed, 9 Oct 2024 14:10:05 +0100 Subject: [PATCH 80/97] feat(connection-form): allow editing connected connections, but only the name, colour and favorite checkbox COMPASS-8160 (#6336) allow editing connected connections, but only the name, colour and favorite. --- .../src/item-actions.ts | 6 +- .../multiple-connections/sidebar.tsx | 4 + .../csfle-tab/csfle-tab.spec.tsx | 4 +- .../connection-form-actions.spec.tsx | 10 ++ .../components/connection-form-actions.tsx | 24 ++-- .../src/components/connection-form.spec.tsx | 65 +++++++++ .../src/components/connection-form.tsx | 135 ++++++++++++++---- .../connection-string-input.spec.tsx | 1 + .../components/connection-string-input.tsx | 8 +- .../src/components/form-help/form-help.tsx | 19 +-- 10 files changed, 219 insertions(+), 57 deletions(-) diff --git a/packages/compass-connections-navigation/src/item-actions.ts b/packages/compass-connections-navigation/src/item-actions.ts index 4a78bc2b4c5..7930ed44e8c 100644 --- a/packages/compass-connections-navigation/src/item-actions.ts +++ b/packages/compass-connections-navigation/src/item-actions.ts @@ -7,14 +7,12 @@ export type NavigationItemActions = (ItemAction | ItemSeparator)[]; export const notConnectedConnectionItemActions = ({ connectionInfo, - hideEditConnect = false, }: { connectionInfo: ConnectionInfo; - hideEditConnect?: boolean; }): NavigationItemActions => { const isAtlas = !!connectionInfo.atlasMetadata; const actions: (ItemAction | ItemSeparator | null)[] = [ - hideEditConnect || isAtlas + isAtlas ? null : { action: 'edit-connection', @@ -85,8 +83,6 @@ export const connectedConnectionItemActions = ({ const isAtlas = !!connectionInfo.atlasMetadata; const connectionManagementActions = notConnectedConnectionItemActions({ connectionInfo, - // for connected connections we don't show connect action - hideEditConnect: true, }); const actions: (ItemAction | ItemSeparator | null)[] = [ hasWriteActionsDisabled diff --git a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx index 3189961eda0..d89835c4a7a 100644 --- a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx +++ b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx @@ -228,6 +228,10 @@ export function MultipleConnectionSidebar({ /> {editingConnectionInfo && ( disconnect(editingConnectionInfo.id)} isOpen={isEditingConnectionInfoModalOpen} setOpen={(newOpen) => { // This is how leafygreen propagates `X` button click diff --git a/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.spec.tsx b/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.spec.tsx index e2ad37fdce4..3752a8ffbf1 100644 --- a/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.spec.tsx +++ b/packages/connection-form/src/components/advanced-options-tabs/csfle-tab/csfle-tab.spec.tsx @@ -381,7 +381,9 @@ describe('In-Use Encryption', function () { const selector = within(card).getByTestId('csfle-kms-card-name'); userEvent.clear(selector); - userEvent.type(selector, value); + if (value !== '') { + userEvent.type(selector, value); + } userEvent.keyboard('{enter}'); } diff --git a/packages/connection-form/src/components/connection-form-actions.spec.tsx b/packages/connection-form/src/components/connection-form-actions.spec.tsx index 03434261762..23483d33e9a 100644 --- a/packages/connection-form/src/components/connection-form-actions.spec.tsx +++ b/packages/connection-form/src/components/connection-form-actions.spec.tsx @@ -46,6 +46,16 @@ describe('', function () { expect(onSaveAndConnectSpy).to.have.been.calledOnce; }); + + it('should hide "connect" button if there is no callback', function () { + render( + + ); + expect(screen.queryByRole('button', { name: 'Connect' })).to.not.exist; + }); }); describe('Save Button', function () { diff --git a/packages/connection-form/src/components/connection-form-actions.tsx b/packages/connection-form/src/components/connection-form-actions.tsx index 86de081c126..17c4263e86a 100644 --- a/packages/connection-form/src/components/connection-form-actions.tsx +++ b/packages/connection-form/src/components/connection-form-actions.tsx @@ -44,7 +44,7 @@ export type ConnectionFormModalActionsProps = { onCancel?(): void; onSave?(): void; - onSaveAndConnect(): void; + onSaveAndConnect?(): void; }; export function ConnectionFormModalActions({ @@ -89,7 +89,11 @@ export function ConnectionFormModalActions({
)} - + {onSaveAndConnect && ( + + )} ); diff --git a/packages/connection-form/src/components/connection-form.spec.tsx b/packages/connection-form/src/components/connection-form.spec.tsx index 46485aac68a..5dc306317fd 100644 --- a/packages/connection-form/src/components/connection-form.spec.tsx +++ b/packages/connection-form/src/components/connection-form.spec.tsx @@ -77,6 +77,71 @@ describe('ConnectionForm Component', function () { sandbox.restore(); }); + context('when disableEditingConnectedConnection==true', function () { + it('renders a banner, disables the connection string and removes advanced connection options + connect button', function () { + const onDisconnectClicked = Sinon.spy(); + const onSaveClicked = Sinon.spy(); + const onSaveAndConnectClicked = Sinon.spy(); + + renderForm({ + disableEditingConnectedConnection: true, + onDisconnectClicked, + onSaveClicked, + onSaveAndConnectClicked, + }); + + expect( + screen.getByTestId('disabled-connected-connection-banner') + ).to.exist; + expect(screen.getByRole('button', { name: 'Disconnect' })).to.exist; + expect(() => + screen.getByTestId('toggle-edit-connection-string') + ).to.throw; + expect(() => + screen.getByTestId('advanced-connection-options') + ).to.throw; + expect(() => screen.getByRole('button', { name: 'Connect' })).to.throw; + + // pressing enter calls onSubmit which saves + fireEvent.submit(screen.getByRole('form')); + expect(onSaveClicked.callCount).to.equal(1); + expect(onSaveAndConnectClicked.callCount).to.equal(0); + + fireEvent.click(screen.getByRole('button', { name: 'Disconnect' })); + expect(onDisconnectClicked.callCount).to.equal(1); + }); + }); + + context('when disableEditingConnectedConnection==false', function () { + it('leaves the connection string, advanced connection options and connect button intact, does not render a banner', function () { + const onDisconnectClicked = Sinon.spy(); + const onSaveClicked = Sinon.spy(); + const onSaveAndConnectClicked = Sinon.spy(); + + renderForm({ + disableEditingConnectedConnection: false, + onDisconnectClicked, + onSaveClicked, + onSaveAndConnectClicked, + }); + + expect(() => + screen.getByTestId('disabled-connected-connection-banner') + ).to.throw; + expect(() => + screen.getByRole('button', { name: 'Disconnect' }) + ).to.throw; + expect(screen.getByTestId('toggle-edit-connection-string')).to.exist; + expect(screen.getByTestId('advanced-connection-options')).to.exist; + expect(screen.getByRole('button', { name: 'Connect' })).to.exist; + + // pressing enter calls onSubmit which saves and connects (the default) + fireEvent.submit(screen.getByRole('form')); + expect(onSaveClicked.callCount).to.equal(0); + expect(onSaveAndConnectClicked.callCount).to.equal(1); + }); + }); + context( 'when preferences.protectConnectionStringsForNewConnections === true', function () { diff --git a/packages/connection-form/src/components/connection-form.tsx b/packages/connection-form/src/components/connection-form.tsx index ff5b278edc4..c70c0313d05 100644 --- a/packages/connection-form/src/components/connection-form.tsx +++ b/packages/connection-form/src/components/connection-form.tsx @@ -19,6 +19,8 @@ import { cx, palette, useDarkMode, + Button, + Icon, } from '@mongodb-js/compass-components'; import { cloneDeep } from 'lodash'; import ConnectionStringInput from './connection-string-input'; @@ -39,7 +41,7 @@ import { useConnectionColor } from '../hooks/use-connection-color'; import FormHelp from './form-help/form-help'; const descriptionStyles = css({ - marginTop: spacing[2], + marginTop: spacing[200], }); const formStyles = css({ @@ -127,8 +129,18 @@ const headingWithHiddenButtonStyles = css({ }, }); +const disabledConnectedConnectionBannerStyles = css({ + marginTop: spacing[400], + paddingRight: 0, +}); +const disabledConnectedConnectionContentStyles = css({ + display: 'flex', + gap: spacing[400], + alignItems: 'center', +}); + const connectionStringErrorStyles = css({ - marginBottom: spacing[3], + marginBottom: spacing[400], }); const colorPreviewStyles = css({ @@ -185,8 +197,8 @@ const personalizationSectionLayoutStyles = css({ 'name-input color-input' 'favorite-marker favorite-marker' `, - gap: spacing[4], - marginBottom: spacing[4], + gap: spacing[600], + marginBottom: spacing[600], }); const personalizationNameInputStyles = css({ @@ -303,10 +315,12 @@ type ConnectionFormPropsWithoutSettings = { darkMode?: boolean; initialConnectionInfo: ConnectionInfo; connectionErrorMessage?: string | null; + disableEditingConnectedConnection?: boolean; onCancel?: () => void; onConnectClicked?: (connectionInfo: ConnectionInfo) => void; onSaveAndConnectClicked?: (connectionInfo: ConnectionInfo) => void; onSaveClicked?: (connectionInfo: ConnectionInfo) => Promise; + onDisconnectClicked?: () => void; onAdvancedOptionsToggle?: (newState: boolean) => void; openSettingsModal?: (tab?: string) => void; }; @@ -317,8 +331,10 @@ export type ConnectionFormProps = ConnectionFormPropsWithoutSettings & function ConnectionForm({ initialConnectionInfo, connectionErrorMessage, + disableEditingConnectedConnection = false, onSaveAndConnectClicked, onSaveClicked, + onDisconnectClicked, onCancel, onAdvancedOptionsToggle, openSettingsModal, @@ -388,29 +404,6 @@ function ConnectionForm({ }), [initialConnectionInfo, connectionOptions, personalizationOptions] ); - const onSubmitForm = useCallback(() => { - const updatedConnectionOptions = cloneDeep(connectionOptions); - // TODO: this method throws on malformed connection strings instead of - // returning errors - const formErrors = validateConnectionOptionsErrors( - updatedConnectionOptions - ); - if (formErrors.length) { - setErrors(formErrors); - return; - } - onSaveAndConnectClicked?.({ - ...initialConnectionInfo, - ...getConnectionInfoToSave(), - connectionOptions: updatedConnectionOptions, - }); - }, [ - initialConnectionInfo, - onSaveAndConnectClicked, - setErrors, - connectionOptions, - getConnectionInfoToSave, - ]); const callOnSaveConnectionClickedAndStoreErrors = useCallback( async (connectionInfo: ConnectionInfo): Promise => { @@ -429,6 +422,39 @@ function ConnectionForm({ }, [onSaveClicked, setErrors] ); + const onSubmitForm = useCallback(() => { + const updatedConnectionOptions = cloneDeep(connectionOptions); + // TODO: this method throws on malformed connection strings instead of + // returning errors + const formErrors = validateConnectionOptionsErrors( + updatedConnectionOptions + ); + if (formErrors.length) { + setErrors(formErrors); + return; + } + if (disableEditingConnectedConnection) { + // there isn't a connect button in this case, so the default action should + // be to save, not to save and connect + void callOnSaveConnectionClickedAndStoreErrors?.( + getConnectionInfoToSave() + ); + } else { + onSaveAndConnectClicked?.({ + ...initialConnectionInfo, + ...getConnectionInfoToSave(), + connectionOptions: updatedConnectionOptions, + }); + } + }, [ + connectionOptions, + disableEditingConnectedConnection, + setErrors, + callOnSaveConnectionClickedAndStoreErrors, + getConnectionInfoToSave, + onSaveAndConnectClicked, + initialConnectionInfo, + ]); const showPersonalisationForm = useConnectionFormSetting( 'showPersonalisationForm' @@ -436,9 +462,18 @@ function ConnectionForm({ const showHelpCardsInForm = useConnectionFormSetting('showHelpCardsInForm'); + /* + To test onSubmit on a form (ie. what happens when you press {enter} and not + what happens when you click a submit button) you have to use submit() which only + works with role="form", but eslint doesn't like that because role="form" + should be redundant. + https://stackoverflow.com/questions/59362804/pressing-enter-to-submit-form-in-react-testing-library-does-not-work + */ + /* eslint-disable jsx-a11y/no-redundant-roles */ return (
{ // Prevent default html page refresh. @@ -451,7 +486,8 @@ function ConnectionForm({

- {initialConnectionInfo.favorite?.name ?? 'New Connection'} + {(initialConnectionInfo.favorite?.name ?? 'New Connection') || + 'Edit Connection'}

Manage your connection settings @@ -461,9 +497,36 @@ function ConnectionForm({
+ {disableEditingConnectedConnection && onDisconnectClicked && ( + +
+
+ While connected, you may only personalize your + connection's name, color or favorite status. To fully + configure it, you must first disconnect. Beware that + disconnecting might cause work in progress to be lost. +
+
+ +
+
+
+ )} )} - {!protectConnectionStrings && ( + {!( + protectConnectionStrings || disableEditingConnectedConnection + ) && (
); + /* eslint-enable jsx-a11y/no-redundant-roles */ } const ConnectionFormWithSettings: React.FunctionComponent< diff --git a/packages/connection-form/src/components/connection-string-input.spec.tsx b/packages/connection-form/src/components/connection-string-input.spec.tsx index 2b04dc5102c..16caad9be36 100644 --- a/packages/connection-form/src/components/connection-string-input.spec.tsx +++ b/packages/connection-form/src/components/connection-string-input.spec.tsx @@ -22,6 +22,7 @@ const renderConnectionStringInput = ( {}} diff --git a/packages/connection-form/src/components/connection-string-input.tsx b/packages/connection-form/src/components/connection-string-input.tsx index 867ce58d777..ba1653c984e 100644 --- a/packages/connection-form/src/components/connection-string-input.tsx +++ b/packages/connection-form/src/components/connection-string-input.tsx @@ -79,6 +79,7 @@ function ConnectionStringInput({ updateConnectionFormField, onSubmit, protectConnectionStrings, + disableEditingConnectedConnection, }: { connectionString: string; enableEditingConnectionString: boolean; @@ -86,6 +87,7 @@ function ConnectionStringInput({ updateConnectionFormField: UpdateConnectionFormField; onSubmit: () => void; protectConnectionStrings: boolean; + disableEditingConnectedConnection: boolean; }): React.ReactElement { const textAreaEl = useRef(null); const [editingConnectionString, setEditingConnectionString] = @@ -173,7 +175,7 @@ function ConnectionStringInput({ href="https://docs.mongodb.com/manual/reference/connection-string/" />
- {!protectConnectionStrings && ( + {!(protectConnectionStrings || disableEditingConnectedConnection) && (
diff --git a/packages/connection-form/src/hooks/use-connect-form-settings.tsx b/packages/connection-form/src/hooks/use-connect-form-settings.tsx index c0803853253..1d6d35aec02 100644 --- a/packages/connection-form/src/hooks/use-connect-form-settings.tsx +++ b/packages/connection-form/src/hooks/use-connect-form-settings.tsx @@ -33,7 +33,7 @@ const defaultSettings = { showKerberosAuth: true, showCSFLE: true, showProxySettings: true, - saveAndConnectLabel: 'Connect', + saveAndConnectLabel: 'Save & Connect', }; export const ConnectionFormSettingsContext = createContext< From bb80fe4365bbfaa5f2a0caed1cf941ed5e23c711 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:45:07 +0000 Subject: [PATCH 92/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6349) Update report Co-authored-by: lerouxb <69737+lerouxb@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 7abf14e5356..d6897553ef8 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Oct 10, 2024 at 11:32 AM +Generated on Thu, Oct 10, 2024 at 02:45 PM ## Table of Contents From 1558ef50a77fccb71846328e62789c89876af883 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 10 Oct 2024 17:23:08 +0200 Subject: [PATCH 93/97] chore: force package-lock to update the mismatched dependencies (#6348) chore: manually force package-lock to update the mismatched dependencies --- package-lock.json | 1628 ++++++++++++--------------------------------- 1 file changed, 435 insertions(+), 1193 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d3e458f983..0bdc5415e65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7908,6 +7908,30 @@ "resolved": "packages/databases-collections-list", "link": true }, + "node_modules/@mongodb-js/devtools-connect": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.3.1.tgz", + "integrity": "sha512-z9TJtUbDakYBKEB+/7fmBjFRcMCtiK/fIi04BKBs8cv71KmbS+PU76y6/7rE/TQucQ7/mPEhWs7+Z9TuKHR20A==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-proxy-support": "^0.4.1", + "@mongodb-js/oidc-http-server-pages": "1.1.3", + "lodash.merge": "^4.6.2", + "mongodb-connection-string-url": "^3.0.0", + "socks": "^2.7.3" + }, + "optionalDependencies": { + "kerberos": "^2.1.0", + "mongodb-client-encryption": "^6.1.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1" + }, + "peerDependencies": { + "@mongodb-js/oidc-plugin": "^1.1.0", + "mongodb": "^6.9.0", + "mongodb-log-writer": "^1.4.2" + } + }, "node_modules/@mongodb-js/devtools-github-repo": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-github-repo/-/devtools-github-repo-1.4.1.tgz", @@ -7917,9 +7941,10 @@ } }, "node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.9.tgz", - "integrity": "sha512-y6EpBQuOYMSbnc3y7lWG3ThFWC7iv6HHZn8+7tRsr9diSMwHRoxM/GNrz2yeldT7xstFdGL4zmmSK/3JcSz+8g==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", + "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", + "license": "Apache-2.0", "dependencies": { "@mongodb-js/socksv5": "^0.0.10", "agent-base": "^7.1.1", @@ -7931,13 +7956,14 @@ "pac-proxy-agent": "^7.0.2", "socks-proxy-agent": "^8.0.4", "ssh2": "^1.15.0", - "system-ca": "^2.0.0" + "system-ca": "^2.0.1" } }, "node_modules/@mongodb-js/devtools-proxy-support/node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", "engines": { "node": ">= 12" } @@ -7946,6 +7972,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -7962,6 +7989,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "license": "ISC", "engines": { "node": "20 || >=22" } @@ -7969,12 +7997,14 @@ "node_modules/@mongodb-js/devtools-proxy-support/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@mongodb-js/devtools-proxy-support/node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8748,6 +8778,231 @@ "resolved": "configs/webpack-config-compass", "link": true }, + "node_modules/@mongosh/arg-parser": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-2.3.2.tgz", + "integrity": "sha512-izy830Jvg1HxP7LnE68dhKvrhIALOCBf/GDI8egJZNfRcvR1VuzaquFhHyFtvhGeoqo+j9ujbaM/24v12+LLFg==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/errors": "2.3.2", + "@mongosh/i18n": "2.3.2", + "mongodb-connection-string-url": "^3.0.1" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/async-rewriter2": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter2/-/async-rewriter2-2.3.2.tgz", + "integrity": "sha512-VhqTUpv3q+Q/2kyOY37RrHaLyOnxTFyBqGz+wmaS9kADorsVTa6DuIO9GF+JLomVzdyFuIW3uaoNYbwq+mnPCA==", + "license": "Apache-2.0", + "dependencies": { + "@babel/core": "^7.22.8", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "bin": { + "async-rewrite": "bin/async-rewrite.js" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/autocomplete": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-2.3.2.tgz", + "integrity": "sha512-bpqG9A/O9ILP0vdwEZwV0Wc0T+LzcyqnWx1RWrC3XvUqMz1kfj5IJNK6RI1D7WuueWfi+HF+GAkz4kLNfFkgrg==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/mongodb-constants": "^0.10.1", + "@mongosh/shell-api": "2.3.2", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/browser-repl": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/browser-repl/-/browser-repl-2.3.2.tgz", + "integrity": "sha512-RWgmrmvq5kDyg84pHFC4V2jdNLhM/HxKoPVzz5gHr8HPcgFQaWG2S3XfpeylzspDhP8sFZ+irl7NguZE00gXUg==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/browser-runtime-core": "2.3.2", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/i18n": "2.3.2", + "@mongosh/node-runtime-worker-thread": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "numeral": "^2.0.6", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14.15.1" + }, + "peerDependencies": { + "@mongodb-js/compass-components": "*", + "@mongodb-js/compass-editor": "*", + "prop-types": "^15.7.2", + "react": "^17.0.2", + "react-dom": "^17.0.2" + } + }, + "node_modules/@mongosh/browser-repl/node_modules/numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@mongosh/browser-runtime-core": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-2.3.2.tgz", + "integrity": "sha512-y1qPdNxu6f7A1s6mgBee/iGya0MOIBRBMTGZanlBZv4nDq+nVoskSzhgrBXx+/YB1+/J0anSnCglfdaGUaq8Kw==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/autocomplete": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "@mongosh/shell-api": "2.3.2", + "@mongosh/shell-evaluator": "2.3.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/errors": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-2.3.2.tgz", + "integrity": "sha512-TKjWgKmxVW16+3+IcQNgv7RxSE3XinRKapxhs9E5nM5FDAXEMRMQnrhhb4KR9Wtp6phAywPSfNjWhuAeI91efQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/history": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-2.3.2.tgz", + "integrity": "sha512-+XLO1kbTwJ1XJ5PKpyU4vn+gqwGtTXQcF4zZIXwxZPN7a0MnBF2DaoMOvEkUYalG0/rkLdVdhILh17HM0mNLsA==", + "license": "Apache-2.0", + "dependencies": { + "mongodb-connection-string-url": "^3.0.1", + "mongodb-redact": "^1.1.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/i18n": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-2.3.2.tgz", + "integrity": "sha512-n/h/305TRPUAbBunhULKiqf9QyNHfgpj8WQjPI/2nZdfCKw29cdkiYjBNEMKl1j3jIGD51/wYgIUT4e51vZUwg==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/errors": "2.3.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/logging": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/logging/-/logging-2.3.2.tgz", + "integrity": "sha512-gwFWHFTEddEFNyBb3e/vhYkkhkkNtwySDeXLPc2Ngf51zDYavFLUIsH07wz9CDdZ4Vo/MtwT/f09T1Yhg0XFsA==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-connect": "^3.3.0", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/types": "2.3.2", + "mongodb-log-writer": "^1.4.2", + "mongodb-redact": "^1.1.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/node-runtime-worker-thread": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.2.tgz", + "integrity": "sha512-3GeGpmRRy/LOKc1mfNiD9ciJsvzuxHY47MB1MLQolNjoxZres3GCx/EF0i1Ib0JCPuyBBmH8y5UCPLbs5E4AbA==", + "license": "Apache-2.0", + "dependencies": { + "interruptor": "^1.0.1", + "system-ca": "^2.0.1", + "web-worker": "^1.3.0" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/service-provider-core": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-2.3.2.tgz", + "integrity": "sha512-lQqLuFojElKADTueYIE6gUPud31zrNwsFNk23mgH/PKDDYHGtYt5ZKQ7aAFe57HSMUZXk13SiANFukdoTcfvtA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-providers": "^3.525.0", + "@mongosh/errors": "2.3.2", + "bson": "^6.8.0", + "mongodb": "^6.9.0", + "mongodb-build-info": "^1.7.2", + "mongodb-connection-string-url": "^3.0.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "optionalDependencies": { + "mongodb-client-encryption": "^6.1.0" + } + }, + "node_modules/@mongosh/shell-api": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-2.3.2.tgz", + "integrity": "sha512-VDj6XVn7m6qHWphJAxPAnQ4HknJ2VZWwQFfQHm9u/6HFDnpAdnN/bubY9nawc55qdZTadpvg5m9YvmOZ3541rA==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/arg-parser": "2.3.2", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/i18n": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "mongodb-redact": "^1.1.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/shell-evaluator": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-2.3.2.tgz", + "integrity": "sha512-dQPRrsi60SFrn/p0vHkcsR+i7hUSQagdwkj0JarqDtGFuowWn6f2t4crSklOjM0wie4Bi/bsXwtFyGEUl+YN2g==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/async-rewriter2": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/shell-api": "2.3.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-2.3.2.tgz", + "integrity": "sha512-QXKsjEVsz1X2WyvWNyGsI+8Zs3/Z+vbCiBOC3t95JrGJlbkz5uPjGbAwcXSZTheehdCd01spgedSNn3r5yQDtQ==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-connect": "^3.3.0" + }, + "engines": { + "node": ">=14.15.1" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -43160,94 +43415,6 @@ "typescript": "^5.0.4" } }, - "packages/atlas-service/node_modules/@mongodb-js/devtools-connect": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "lodash.merge": "^4.6.2", - "mongodb-connection-string-url": "^3.0.0", - "socks": "^2.7.3" - }, - "optionalDependencies": { - "kerberos": "^2.1.0", - "mongodb-client-encryption": "^6.1.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1" - }, - "peerDependencies": { - "@mongodb-js/oidc-plugin": "^1.1.0", - "mongodb": "^6.8.0", - "mongodb-log-writer": "^1.4.2" - } - }, - "packages/atlas-service/node_modules/@mongodb-js/devtools-connect/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.10.tgz", - "integrity": "sha512-HComoStLokruxsPLR5m3mC+A167n9THKj3jCj6lQSh7szXotJI5zm500BFEI5IpcY/lVovbK4QlRYQP6WWS+5w==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.0" - } - }, - "packages/atlas-service/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "packages/atlas-service/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "packages/atlas-service/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "packages/atlas-service/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -43257,39 +43424,6 @@ "node": ">=0.3.1" } }, - "packages/atlas-service/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "packages/atlas-service/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "packages/atlas-service/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/atlas-service/node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -45539,84 +45673,6 @@ "sinon": "^9.2.3" } }, - "packages/compass-preferences-model/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "packages/compass-preferences-model/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "packages/compass-preferences-model/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "packages/compass-preferences-model/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "packages/compass-preferences-model/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "packages/compass-preferences-model/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/compass-preferences-model/node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -46103,246 +46159,6 @@ "typescript": "^5.0.4" } }, - "packages/compass-shell/node_modules/@mongodb-js/devtools-connect": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "lodash.merge": "^4.6.2", - "mongodb-connection-string-url": "^3.0.0", - "socks": "^2.7.3" - }, - "optionalDependencies": { - "kerberos": "^2.1.0", - "mongodb-client-encryption": "^6.1.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1" - }, - "peerDependencies": { - "@mongodb-js/oidc-plugin": "^1.1.0", - "mongodb": "^6.8.0", - "mongodb-log-writer": "^1.4.2" - } - }, - "packages/compass-shell/node_modules/@mongosh/arg-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-2.3.1.tgz", - "integrity": "sha512-s0tzK+vPhJRsZZnb1r4V8lv97gpUFOXudHgJ+O3orCkkAUN0JR3IDWPSRY3eECNTlW96ZErGMqRhyPsCFW733g==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/errors": "2.3.1", - "@mongosh/i18n": "2.3.1", - "mongodb-connection-string-url": "^3.0.1" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/async-rewriter2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter2/-/async-rewriter2-2.3.1.tgz", - "integrity": "sha512-4tCMYMmhlet4/TYowsGPaoXhXQd5C6jykPnSOMZZrluZeDqRqWJfozW7161m+8Xe7IMZf4KyFzk8CAVewJfzLw==", - "license": "Apache-2.0", - "dependencies": { - "@babel/core": "^7.22.8", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "bin": { - "async-rewrite": "bin/async-rewrite.js" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/autocomplete": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-2.3.1.tgz", - "integrity": "sha512-rTZ1pKOKahs62NLTiSnWKp4/34VWnVsSG+rvpup2Xf/XC8/uFuFZo5Moj6eIgEF49PSyfICA+agmg47ldeQelw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/mongodb-constants": "^0.10.1", - "@mongosh/shell-api": "2.3.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/browser-repl": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/browser-repl/-/browser-repl-2.3.1.tgz", - "integrity": "sha512-GYBJbfvLf2uxpLkiZdxYO7sQKwK9n+toRtl7WNahHK/e3VQQRcxwJqUp392y5MxyX3E/J4J+7Uy4YoTTiRKDtg==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/browser-runtime-core": "2.3.1", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/i18n": "2.3.1", - "@mongosh/node-runtime-worker-thread": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "numeral": "^2.0.6", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14.15.1" - }, - "peerDependencies": { - "@mongodb-js/compass-components": "*", - "@mongodb-js/compass-editor": "*", - "prop-types": "^15.7.2", - "react": "^17.0.2", - "react-dom": "^17.0.2" - } - }, - "packages/compass-shell/node_modules/@mongosh/browser-runtime-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-2.3.1.tgz", - "integrity": "sha512-pFV3g7qIY8YRLqH0GPc5YJSXx2U36Jf475nuVGsqmGdHVwmXRRCbTBa+0Bel/divc9YDD9/GNLMGGIVjRUfl9A==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/autocomplete": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "@mongosh/shell-api": "2.3.1", - "@mongosh/shell-evaluator": "2.3.1" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-2.3.1.tgz", - "integrity": "sha512-opMEluGMEABO4v72nOwJTPeaP2adNduzh7oFGLBtfencOw0em38g93XnzL5iwH/Bjp2BVAEiMtcHYZeMRus7FQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/history": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-2.3.1.tgz", - "integrity": "sha512-hjKcqQy0PtYHSl5ZxkiCKi4OltHm0ZQdpJ05a5R26fEvNue+0tcv1TfnXbVxAk9K9Q2vB06SIRI0rnJrTtG+yQ==", - "license": "Apache-2.0", - "dependencies": { - "mongodb-connection-string-url": "^3.0.1", - "mongodb-redact": "^1.1.2" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/i18n": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-2.3.1.tgz", - "integrity": "sha512-qwYjGJKV8mQl/dqL21aIo3z1wdoE80JBiGGhJgyc2ofhLTvdktoav0FXKWOPrpvSR3K29L98D0H8V7uhisfdRQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/errors": "2.3.1" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/logging": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/logging/-/logging-2.3.1.tgz", - "integrity": "sha512-DDe4YNZJfKI9guyzCTdcvEpn0E20v94wnRpfiDfp9y05WUvJsDPBWWmhyGLYj4c1qrDctj8BiGt9mbb/7tY6Yw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-connect": "^3.2.10", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/types": "2.3.1", - "mongodb-log-writer": "^1.4.2", - "mongodb-redact": "^1.1.2" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/node-runtime-worker-thread": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.1.tgz", - "integrity": "sha512-RmWQwQHdPEClthSBlLx3pLuQcrba9mGUnXpRIlT56Ddv7KyDEORM80yR/1SfUuxyPJ0BwtOcXIqAYf/m/KF85Q==", - "license": "Apache-2.0", - "dependencies": { - "interruptor": "^1.0.1", - "system-ca": "^2.0.1", - "web-worker": "^1.3.0" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/service-provider-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-2.3.1.tgz", - "integrity": "sha512-+UusnZjXqM2JWdva+11IX4fRW0+sqJS5FhpQ7UHreQyGzdDcgIIqFe1fB4CMfzaMdjQ7RvUqIMM5bV81xDZ9vA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-providers": "^3.525.0", - "@mongosh/errors": "2.3.1", - "bson": "^6.7.0", - "mongodb": "^6.8.0", - "mongodb-build-info": "^1.7.2", - "mongodb-connection-string-url": "^3.0.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "optionalDependencies": { - "mongodb-client-encryption": "^6.1.0" - } - }, - "packages/compass-shell/node_modules/@mongosh/shell-api": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-2.3.1.tgz", - "integrity": "sha512-ou6LIbpqlzsKVFiBQJ9Aqt5OxS5NuLb5y2cKuTPvv0wEKrPjg/XAHVyo+Bw09fa4ZYPDk705RehgtfdTpKnLfQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/arg-parser": "2.3.1", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/i18n": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "mongodb-redact": "^1.1.2" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/shell-evaluator": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-2.3.1.tgz", - "integrity": "sha512-MWGL8600o4d1/ngBOQXrorEmYBZebDJeF3g7CM0QmZAuHzJ9HY/67bm/xDKUn/9H0K3tVJSFAWYOXk99tQqTHQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/async-rewriter2": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/shell-api": "2.3.1" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass-shell/node_modules/@mongosh/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-2.3.1.tgz", - "integrity": "sha512-fpMJ4yHhilTIWe3jgWoE+Eq0q9ij40HMGRfCJoZE+aOCslBkggqsia5Fh13G8JCFKangkWnZ5UMMAxSg6VBJgQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-connect": "^3.2.10" - }, - "engines": { - "node": ">=14.15.1" - } - }, "packages/compass-shell/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -46352,15 +46168,6 @@ "node": ">=0.3.1" } }, - "packages/compass-shell/node_modules/numeral": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", - "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", - "license": "MIT", - "engines": { - "node": "*" - } - }, "packages/compass-shell/node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -46836,26 +46643,6 @@ "react-dom": "^17.0.2" } }, - "packages/compass-web/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, "packages/compass-web/node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -46918,16 +46705,6 @@ "ieee754": "^1.2.1" } }, - "packages/compass-web/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, "packages/compass-web/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -46955,16 +46732,6 @@ "node": ">=0.8.x" } }, - "packages/compass-web/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "packages/compass-web/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -47012,25 +46779,6 @@ "type-detect": "4.0.8" } }, - "packages/compass-web/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/compass-web/node_modules/readable-stream": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.1.tgz", @@ -47286,50 +47034,6 @@ "url": "https://opencollective.com/sinon" } }, - "packages/compass/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "packages/compass/node_modules/@mongosh/node-runtime-worker-thread": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.1.tgz", - "integrity": "sha512-RmWQwQHdPEClthSBlLx3pLuQcrba9mGUnXpRIlT56Ddv7KyDEORM80yR/1SfUuxyPJ0BwtOcXIqAYf/m/KF85Q==", - "license": "Apache-2.0", - "dependencies": { - "interruptor": "^1.0.1", - "system-ca": "^2.0.1", - "web-worker": "^1.3.0" - }, - "engines": { - "node": ">=14.15.1" - } - }, - "packages/compass/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, "packages/compass/node_modules/debug": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", @@ -47347,35 +47051,6 @@ } } }, - "packages/compass/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "packages/compass/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/connection-form": { "name": "@mongodb-js/connection-form", "version": "1.41.1", @@ -47677,49 +47352,6 @@ "mongodb-client-encryption": "^6.1.0" } }, - "packages/data-service/node_modules/@mongodb-js/devtools-connect": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "lodash.merge": "^4.6.2", - "mongodb-connection-string-url": "^3.0.0", - "socks": "^2.7.3" - }, - "optionalDependencies": { - "kerberos": "^2.1.0", - "mongodb-client-encryption": "^6.1.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1" - }, - "peerDependencies": { - "@mongodb-js/oidc-plugin": "^1.1.0", - "mongodb": "^6.8.0", - "mongodb-log-writer": "^1.4.2" - } - }, - "packages/data-service/node_modules/@mongodb-js/devtools-connect/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.10.tgz", - "integrity": "sha512-HComoStLokruxsPLR5m3mC+A167n9THKj3jCj6lQSh7szXotJI5zm500BFEI5IpcY/lVovbK4QlRYQP6WWS+5w==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.0" - } - }, "packages/data-service/node_modules/@mongodb-js/devtools-docker-test-envs": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-docker-test-envs/-/devtools-docker-test-envs-1.3.3.tgz", @@ -47744,51 +47376,6 @@ "whatwg-url": "^11.0.0" } }, - "packages/data-service/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "packages/data-service/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "packages/data-service/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "packages/data-service/node_modules/eslint-plugin-mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", @@ -47823,39 +47410,6 @@ "eslint": ">=5" } }, - "packages/data-service/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "packages/data-service/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "packages/data-service/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/data-service/node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -55841,98 +55395,12 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/devtools-connect": { - "version": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "requires": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "kerberos": "^2.1.0", - "lodash.merge": "^4.6.2", - "mongodb-client-encryption": "^6.1.0", - "mongodb-connection-string-url": "^3.0.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1", - "socks": "^2.7.3" - }, - "dependencies": { - "@mongodb-js/devtools-proxy-support": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.10.tgz", - "integrity": "sha512-HComoStLokruxsPLR5m3mC+A167n9THKj3jCj6lQSh7szXotJI5zm500BFEI5IpcY/lVovbK4QlRYQP6WWS+5w==", - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.0" - } - } - } - }, - "@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "requires": { - "ms": "^2.1.3" - } - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, "sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -58191,179 +57659,12 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/devtools-connect": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "requires": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "kerberos": "^2.1.0", - "lodash.merge": "^4.6.2", - "mongodb-client-encryption": "^6.1.0", - "mongodb-connection-string-url": "^3.0.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1", - "socks": "^2.7.3" - } - }, - "@mongosh/arg-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-2.3.1.tgz", - "integrity": "sha512-s0tzK+vPhJRsZZnb1r4V8lv97gpUFOXudHgJ+O3orCkkAUN0JR3IDWPSRY3eECNTlW96ZErGMqRhyPsCFW733g==", - "requires": { - "@mongosh/errors": "2.3.1", - "@mongosh/i18n": "2.3.1", - "mongodb-connection-string-url": "^3.0.1" - } - }, - "@mongosh/async-rewriter2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter2/-/async-rewriter2-2.3.1.tgz", - "integrity": "sha512-4tCMYMmhlet4/TYowsGPaoXhXQd5C6jykPnSOMZZrluZeDqRqWJfozW7161m+8Xe7IMZf4KyFzk8CAVewJfzLw==", - "requires": { - "@babel/core": "^7.22.8", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@mongosh/autocomplete": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-2.3.1.tgz", - "integrity": "sha512-rTZ1pKOKahs62NLTiSnWKp4/34VWnVsSG+rvpup2Xf/XC8/uFuFZo5Moj6eIgEF49PSyfICA+agmg47ldeQelw==", - "requires": { - "@mongodb-js/mongodb-constants": "^0.10.1", - "@mongosh/shell-api": "2.3.1", - "semver": "^7.5.4" - } - }, - "@mongosh/browser-repl": { - "version": "https://registry.npmjs.org/@mongosh/browser-repl/-/browser-repl-2.3.1.tgz", - "integrity": "sha512-GYBJbfvLf2uxpLkiZdxYO7sQKwK9n+toRtl7WNahHK/e3VQQRcxwJqUp392y5MxyX3E/J4J+7Uy4YoTTiRKDtg==", - "requires": { - "@mongosh/browser-runtime-core": "2.3.1", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/i18n": "2.3.1", - "@mongosh/node-runtime-worker-thread": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "numeral": "^2.0.6", - "text-table": "^0.2.0" - } - }, - "@mongosh/browser-runtime-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-2.3.1.tgz", - "integrity": "sha512-pFV3g7qIY8YRLqH0GPc5YJSXx2U36Jf475nuVGsqmGdHVwmXRRCbTBa+0Bel/divc9YDD9/GNLMGGIVjRUfl9A==", - "requires": { - "@mongosh/autocomplete": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "@mongosh/shell-api": "2.3.1", - "@mongosh/shell-evaluator": "2.3.1" - } - }, - "@mongosh/errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-2.3.1.tgz", - "integrity": "sha512-opMEluGMEABO4v72nOwJTPeaP2adNduzh7oFGLBtfencOw0em38g93XnzL5iwH/Bjp2BVAEiMtcHYZeMRus7FQ==" - }, - "@mongosh/history": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-2.3.1.tgz", - "integrity": "sha512-hjKcqQy0PtYHSl5ZxkiCKi4OltHm0ZQdpJ05a5R26fEvNue+0tcv1TfnXbVxAk9K9Q2vB06SIRI0rnJrTtG+yQ==", - "requires": { - "mongodb-connection-string-url": "^3.0.1", - "mongodb-redact": "^1.1.2" - } - }, - "@mongosh/i18n": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-2.3.1.tgz", - "integrity": "sha512-qwYjGJKV8mQl/dqL21aIo3z1wdoE80JBiGGhJgyc2ofhLTvdktoav0FXKWOPrpvSR3K29L98D0H8V7uhisfdRQ==", - "requires": { - "@mongosh/errors": "2.3.1" - } - }, - "@mongosh/logging": { - "version": "https://registry.npmjs.org/@mongosh/logging/-/logging-2.3.1.tgz", - "integrity": "sha512-DDe4YNZJfKI9guyzCTdcvEpn0E20v94wnRpfiDfp9y05WUvJsDPBWWmhyGLYj4c1qrDctj8BiGt9mbb/7tY6Yw==", - "requires": { - "@mongodb-js/devtools-connect": "^3.2.10", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/types": "2.3.1", - "mongodb-log-writer": "^1.4.2", - "mongodb-redact": "^1.1.2" - } - }, - "@mongosh/node-runtime-worker-thread": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.1.tgz", - "integrity": "sha512-RmWQwQHdPEClthSBlLx3pLuQcrba9mGUnXpRIlT56Ddv7KyDEORM80yR/1SfUuxyPJ0BwtOcXIqAYf/m/KF85Q==", - "requires": { - "interruptor": "^1.0.1", - "system-ca": "^2.0.1", - "web-worker": "^1.3.0" - } - }, - "@mongosh/service-provider-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-2.3.1.tgz", - "integrity": "sha512-+UusnZjXqM2JWdva+11IX4fRW0+sqJS5FhpQ7UHreQyGzdDcgIIqFe1fB4CMfzaMdjQ7RvUqIMM5bV81xDZ9vA==", - "requires": { - "@aws-sdk/credential-providers": "^3.525.0", - "@mongosh/errors": "2.3.1", - "bson": "^6.7.0", - "mongodb": "^6.8.0", - "mongodb-build-info": "^1.7.2", - "mongodb-client-encryption": "^6.1.0", - "mongodb-connection-string-url": "^3.0.1" - } - }, - "@mongosh/shell-api": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-2.3.1.tgz", - "integrity": "sha512-ou6LIbpqlzsKVFiBQJ9Aqt5OxS5NuLb5y2cKuTPvv0wEKrPjg/XAHVyo+Bw09fa4ZYPDk705RehgtfdTpKnLfQ==", - "requires": { - "@mongosh/arg-parser": "2.3.1", - "@mongosh/errors": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/i18n": "2.3.1", - "@mongosh/service-provider-core": "2.3.1", - "mongodb-redact": "^1.1.2" - } - }, - "@mongosh/shell-evaluator": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-2.3.1.tgz", - "integrity": "sha512-MWGL8600o4d1/ngBOQXrorEmYBZebDJeF3g7CM0QmZAuHzJ9HY/67bm/xDKUn/9H0K3tVJSFAWYOXk99tQqTHQ==", - "requires": { - "@mongosh/async-rewriter2": "2.3.1", - "@mongosh/history": "2.3.1", - "@mongosh/shell-api": "2.3.1" - } - }, - "@mongosh/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-2.3.1.tgz", - "integrity": "sha512-fpMJ4yHhilTIWe3jgWoE+Eq0q9ij40HMGRfCJoZE+aOCslBkggqsia5Fh13G8JCFKangkWnZ5UMMAxSg6VBJgQ==", - "requires": { - "@mongodb-js/devtools-connect": "^3.2.10" - } - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "numeral": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", - "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==" - }, "sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -58786,25 +58087,6 @@ "ws": "^8.16.0" }, "dependencies": { - "@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "dev": true, - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -58855,12 +58137,6 @@ "ieee754": "^1.2.1" } }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true - }, "debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -58876,12 +58152,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "dev": true - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -58932,17 +58202,6 @@ } } }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, "readable-stream": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.1.tgz", @@ -59483,15 +58742,31 @@ } } }, + "@mongodb-js/devtools-connect": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.3.1.tgz", + "integrity": "sha512-z9TJtUbDakYBKEB+/7fmBjFRcMCtiK/fIi04BKBs8cv71KmbS+PU76y6/7rE/TQucQ7/mPEhWs7+Z9TuKHR20A==", + "requires": { + "@mongodb-js/devtools-proxy-support": "^0.4.1", + "@mongodb-js/oidc-http-server-pages": "1.1.3", + "kerberos": "^2.1.0", + "lodash.merge": "^4.6.2", + "mongodb-client-encryption": "^6.1.0", + "mongodb-connection-string-url": "^3.0.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1", + "socks": "^2.7.3" + } + }, "@mongodb-js/devtools-github-repo": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-github-repo/-/devtools-github-repo-1.4.1.tgz", "integrity": "sha512-wpVbM7MTft2mFc66ZOulAW4TnyK9fzYL/dqhcUk7DMcdwO8TcR1VZPkh55fRugSXgkfCUcxfZmqmuSSAudLGjA==" }, "@mongodb-js/devtools-proxy-support": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.9.tgz", - "integrity": "sha512-y6EpBQuOYMSbnc3y7lWG3ThFWC7iv6HHZn8+7tRsr9diSMwHRoxM/GNrz2yeldT7xstFdGL4zmmSK/3JcSz+8g==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", + "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", "requires": { "@mongodb-js/socksv5": "^0.0.10", "agent-base": "^7.1.1", @@ -59503,7 +58778,7 @@ "pac-proxy-agent": "^7.0.2", "socks-proxy-agent": "^8.0.4", "ssh2": "^1.15.0", - "system-ca": "^2.0.0" + "system-ca": "^2.0.1" }, "dependencies": { "data-uri-to-buffer": { @@ -60817,6 +60092,161 @@ } } }, + "@mongosh/arg-parser": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-2.3.2.tgz", + "integrity": "sha512-izy830Jvg1HxP7LnE68dhKvrhIALOCBf/GDI8egJZNfRcvR1VuzaquFhHyFtvhGeoqo+j9ujbaM/24v12+LLFg==", + "requires": { + "@mongosh/errors": "2.3.2", + "@mongosh/i18n": "2.3.2", + "mongodb-connection-string-url": "^3.0.1" + } + }, + "@mongosh/async-rewriter2": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter2/-/async-rewriter2-2.3.2.tgz", + "integrity": "sha512-VhqTUpv3q+Q/2kyOY37RrHaLyOnxTFyBqGz+wmaS9kADorsVTa6DuIO9GF+JLomVzdyFuIW3uaoNYbwq+mnPCA==", + "requires": { + "@babel/core": "^7.22.8", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@mongosh/autocomplete": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-2.3.2.tgz", + "integrity": "sha512-bpqG9A/O9ILP0vdwEZwV0Wc0T+LzcyqnWx1RWrC3XvUqMz1kfj5IJNK6RI1D7WuueWfi+HF+GAkz4kLNfFkgrg==", + "requires": { + "@mongodb-js/mongodb-constants": "^0.10.1", + "@mongosh/shell-api": "2.3.2", + "semver": "^7.5.4" + } + }, + "@mongosh/browser-repl": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/browser-repl/-/browser-repl-2.3.2.tgz", + "integrity": "sha512-RWgmrmvq5kDyg84pHFC4V2jdNLhM/HxKoPVzz5gHr8HPcgFQaWG2S3XfpeylzspDhP8sFZ+irl7NguZE00gXUg==", + "requires": { + "@mongosh/browser-runtime-core": "2.3.2", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/i18n": "2.3.2", + "@mongosh/node-runtime-worker-thread": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "numeral": "^2.0.6", + "text-table": "^0.2.0" + }, + "dependencies": { + "numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==" + } + } + }, + "@mongosh/browser-runtime-core": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-2.3.2.tgz", + "integrity": "sha512-y1qPdNxu6f7A1s6mgBee/iGya0MOIBRBMTGZanlBZv4nDq+nVoskSzhgrBXx+/YB1+/J0anSnCglfdaGUaq8Kw==", + "requires": { + "@mongosh/autocomplete": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "@mongosh/shell-api": "2.3.2", + "@mongosh/shell-evaluator": "2.3.2" + } + }, + "@mongosh/errors": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-2.3.2.tgz", + "integrity": "sha512-TKjWgKmxVW16+3+IcQNgv7RxSE3XinRKapxhs9E5nM5FDAXEMRMQnrhhb4KR9Wtp6phAywPSfNjWhuAeI91efQ==" + }, + "@mongosh/history": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-2.3.2.tgz", + "integrity": "sha512-+XLO1kbTwJ1XJ5PKpyU4vn+gqwGtTXQcF4zZIXwxZPN7a0MnBF2DaoMOvEkUYalG0/rkLdVdhILh17HM0mNLsA==", + "requires": { + "mongodb-connection-string-url": "^3.0.1", + "mongodb-redact": "^1.1.2" + } + }, + "@mongosh/i18n": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-2.3.2.tgz", + "integrity": "sha512-n/h/305TRPUAbBunhULKiqf9QyNHfgpj8WQjPI/2nZdfCKw29cdkiYjBNEMKl1j3jIGD51/wYgIUT4e51vZUwg==", + "requires": { + "@mongosh/errors": "2.3.2" + } + }, + "@mongosh/logging": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/logging/-/logging-2.3.2.tgz", + "integrity": "sha512-gwFWHFTEddEFNyBb3e/vhYkkhkkNtwySDeXLPc2Ngf51zDYavFLUIsH07wz9CDdZ4Vo/MtwT/f09T1Yhg0XFsA==", + "requires": { + "@mongodb-js/devtools-connect": "^3.3.0", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/types": "2.3.2", + "mongodb-log-writer": "^1.4.2", + "mongodb-redact": "^1.1.2" + } + }, + "@mongosh/node-runtime-worker-thread": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.2.tgz", + "integrity": "sha512-3GeGpmRRy/LOKc1mfNiD9ciJsvzuxHY47MB1MLQolNjoxZres3GCx/EF0i1Ib0JCPuyBBmH8y5UCPLbs5E4AbA==", + "requires": { + "interruptor": "^1.0.1", + "system-ca": "^2.0.1", + "web-worker": "^1.3.0" + } + }, + "@mongosh/service-provider-core": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-2.3.2.tgz", + "integrity": "sha512-lQqLuFojElKADTueYIE6gUPud31zrNwsFNk23mgH/PKDDYHGtYt5ZKQ7aAFe57HSMUZXk13SiANFukdoTcfvtA==", + "requires": { + "@aws-sdk/credential-providers": "^3.525.0", + "@mongosh/errors": "2.3.2", + "bson": "^6.8.0", + "mongodb": "^6.9.0", + "mongodb-build-info": "^1.7.2", + "mongodb-client-encryption": "^6.1.0", + "mongodb-connection-string-url": "^3.0.1" + } + }, + "@mongosh/shell-api": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-2.3.2.tgz", + "integrity": "sha512-VDj6XVn7m6qHWphJAxPAnQ4HknJ2VZWwQFfQHm9u/6HFDnpAdnN/bubY9nawc55qdZTadpvg5m9YvmOZ3541rA==", + "requires": { + "@mongosh/arg-parser": "2.3.2", + "@mongosh/errors": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/i18n": "2.3.2", + "@mongosh/service-provider-core": "2.3.2", + "mongodb-redact": "^1.1.2" + } + }, + "@mongosh/shell-evaluator": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-2.3.2.tgz", + "integrity": "sha512-dQPRrsi60SFrn/p0vHkcsR+i7hUSQagdwkj0JarqDtGFuowWn6f2t4crSklOjM0wie4Bi/bsXwtFyGEUl+YN2g==", + "requires": { + "@mongosh/async-rewriter2": "2.3.2", + "@mongosh/history": "2.3.2", + "@mongosh/shell-api": "2.3.2" + } + }, + "@mongosh/types": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-2.3.2.tgz", + "integrity": "sha512-QXKsjEVsz1X2WyvWNyGsI+8Zs3/Z+vbCiBOC3t95JrGJlbkz5uPjGbAwcXSZTheehdCd01spgedSNn3r5yQDtQ==", + "requires": { + "@mongodb-js/devtools-connect": "^3.3.0" + } + }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -68380,57 +67810,6 @@ "zod": "^3.22.3" }, "dependencies": { - "@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "requires": { - "ms": "^2.1.3" - } - }, - "lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, "sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -79911,40 +79290,6 @@ "winreg-ts": "^1.0.4" }, "dependencies": { - "@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "dev": true, - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "@mongosh/node-runtime-worker-thread": { - "version": "https://registry.npmjs.org/@mongosh/node-runtime-worker-thread/-/node-runtime-worker-thread-2.3.1.tgz", - "integrity": "sha512-RmWQwQHdPEClthSBlLx3pLuQcrba9mGUnXpRIlT56Ddv7KyDEORM80yR/1SfUuxyPJ0BwtOcXIqAYf/m/KF85Q==", - "requires": { - "interruptor": "^1.0.1", - "system-ca": "^2.0.1", - "web-worker": "^1.3.0" - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true - }, "debug": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", @@ -79953,23 +79298,6 @@ "requires": { "ms": "2.1.2" } - }, - "lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "dev": true - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } } } }, @@ -80029,41 +79357,6 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/devtools-connect": { - "version": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.2.10.tgz", - "integrity": "sha512-x+MhIwJzCKjc5NhGHbns5IGa6yBwj/Nm6uVh0TwmhdKGxBbIP4o0xa4YVRwRajxHHGrxhiKQRNRJsHD6IzVVOw==", - "requires": { - "@mongodb-js/devtools-proxy-support": "^0.3.9", - "@mongodb-js/oidc-http-server-pages": "1.1.3", - "kerberos": "^2.1.0", - "lodash.merge": "^4.6.2", - "mongodb-client-encryption": "^6.1.0", - "mongodb-connection-string-url": "^3.0.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1", - "socks": "^2.7.3" - }, - "dependencies": { - "@mongodb-js/devtools-proxy-support": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.3.10.tgz", - "integrity": "sha512-HComoStLokruxsPLR5m3mC+A167n9THKj3jCj6lQSh7szXotJI5zm500BFEI5IpcY/lVovbK4QlRYQP6WWS+5w==", - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.0" - } - } - } - }, "@mongodb-js/devtools-docker-test-envs": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-docker-test-envs/-/devtools-docker-test-envs-1.3.3.tgz", @@ -80090,37 +79383,6 @@ } } }, - "@mongodb-js/devtools-proxy-support": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.1.tgz", - "integrity": "sha512-BGr8dxCeik5LLmPJUcT7c1Sj8I/u0+14+GwS5OPgVy5KlsTJRcGtANjrC7b8IZewpKVLqyJkK+XcdYpa5+b3KQ==", - "requires": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.3.6", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "requires": { - "ms": "^2.1.3" - } - }, "eslint-plugin-mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", @@ -80140,26 +79402,6 @@ "eslint-visitor-keys": "^2.0.0" } }, - "lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, "sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", From 0a92de66314c0e6aaccd4a8ef6d1ea684d9b6af2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:30:20 +0000 Subject: [PATCH 94/97] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6350) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 64 ------------------------------------------ docs/tracking-plan.md | 2 +- 2 files changed, 1 insertion(+), 65 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 121778001e1..7859bb432a2 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -602,7 +602,6 @@ Package|Version|License **[to-fast-properties](#79afe8c8f3cc0bb1187c6ffaf6105b49888137e917978e870d67727353aba954)**|2.0.0|MIT **[toidentifier](#2067d1f99d35f28c8384d3e9762282f3c2ded0041392af855caf28ba2209bd2a)**|1.0.1|MIT **[tr46](#a94418e116fb43931c49abb9cd596d6814a55956c3d0d11b7e225592b9977197)**|0.0.3|MIT -**[tr46](#68f1ee14543e0adeddce4bb4422886f20da6ce5cb83508383fa092c15689cf8a)**|3.0.0|MIT **[tr46](#73a239b431778fd3a06957f11cd6de530a4ba35ca946f8656f46e02228113c2b)**|4.1.1|MIT **[tslib](#c5fc5d0adaeec50d156fc1f9a16cbca801bfb431eb78f3647a1237a0e239ae35)**|2.6.2|0BSD **[tslib](#bd15b467ea785206b74637cc23d2b9088ba8fa47aa3034d1217f3dea848c1d1e)**|2.6.3|0BSD @@ -626,7 +625,6 @@ Package|Version|License **[webidl-conversions](#3604b2bfa479706fe7bd8068257240d32158704a3bffae30b414963343027aa1)**|3.0.1|BSD-2-Clause **[webidl-conversions](#cb7c681998e7ee3c598e6e37432bcf448946924eefe816636c3cb122bae46e1c)**|7.0.0|BSD-2-Clause **[webpack](#bd55cdb69f5b1b336d12c3f00d849ccb1f2c39987c257c89027d6a790f947496)**|5.94.0|MIT -**[whatwg-url](#5d2cdcc7276796013d4573d401d239ff04971bb5a44fbb0e1bc62cae6f5ca911)**|11.0.0|MIT **[whatwg-url](#3a968d9d3fed498fc1edf2f65459cc89b6a2fea277b5c9b5c3f3a0b41390835a)**|13.0.0|MIT **[whatwg-url](#cd3f81c4a0fd856ab1d9c9fc99c1d7eaf2c12c4867b218e9901e5020a1ffcd85)**|5.0.0|MIT **[which-boxed-primitive](#b3f94b6da310368951f52909c400e19c4c2c7a282ba67374f41ab2d070bf83f2)**|1.0.2|MIT @@ -38665,37 +38663,6 @@ License files: License tags: MIT - -### [tr46](https://www.npmjs.com/package/tr46) (version 3.0.0) -License tags: MIT - -License files: -* LICENSE.md: - - The MIT License (MIT) - - Copyright (c) Sebastian Mayr - - 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. - - - ### [tr46](https://www.npmjs.com/package/tr46) (version 4.1.1) License tags: MIT @@ -39772,37 +39739,6 @@ License files: - -### [whatwg-url](https://www.npmjs.com/package/whatwg-url) (version 11.0.0) -License tags: MIT - -License files: -* LICENSE.txt: - - The MIT License (MIT) - - Copyright (c) Sebastian Mayr - - 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. - - - ### [whatwg-url](https://www.npmjs.com/package/whatwg-url) (version 13.0.0) License tags: MIT diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index d6897553ef8..a2d87205ccc 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Oct 10, 2024 at 02:45 PM +Generated on Thu, Oct 10, 2024 at 03:30 PM ## Table of Contents From d80a02fb2bd11071c8f3e08eb508382fa7bbbe55 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:43:39 +0000 Subject: [PATCH 95/97] v1.44.5-beta.4 --- package-lock.json | 2 +- packages/compass/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 590f6a98b46..1224613534f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43500,7 +43500,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.5-beta.3", + "version": "1.44.5-beta.4", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 1e4700ab700..7895a8b6c23 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.5-beta.3", + "version": "1.44.5-beta.4", "apiVersion": "3.0.0", "main": "build/main.js", "author": { From 22677d9fe8d9f2f7bfc1c31b9645092148806f29 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Fri, 11 Oct 2024 12:02:17 +0100 Subject: [PATCH 96/97] chore(e2e): small screen fixes (#6351) * no need to check the whole document. what's shown depends on virtual scrolling * maximize the window in e2e tests in electron --- packages/compass-e2e-tests/helpers/compass.ts | 33 +++++++---- .../tests/collection-import.test.ts | 55 +------------------ packages/compass/src/main/window-manager.ts | 8 +++ 3 files changed, 30 insertions(+), 66 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/compass.ts b/packages/compass-e2e-tests/helpers/compass.ts index 531edc9420e..3cd10cc47a0 100644 --- a/packages/compass-e2e-tests/helpers/compass.ts +++ b/packages/compass-e2e-tests/helpers/compass.ts @@ -1020,19 +1020,28 @@ export async function init( // For browser.executeAsync(). Trying to see if it will work for browser.execute() too. await browser.setTimeout({ script: 5_000 }); - // larger window for more consistent results - const [width, height] = await browser.execute(() => { - // in case setWindowSize() below doesn't work - window.resizeTo(window.screen.availWidth, window.screen.availHeight); + if (TEST_COMPASS_WEB) { + // larger window for more consistent results + const [width, height] = await browser.execute(() => { + // in case setWindowSize() below doesn't work + window.resizeTo(window.screen.availWidth, window.screen.availHeight); - return [window.screen.availWidth, window.screen.availHeight]; - }); - debug(`available width=${width}, height=${height}`); - try { - // window.resizeTo() doesn't work on firefox - await browser.setWindowSize(width, height); - } catch (err: any) { - console.error(err?.stack); + return [window.screen.availWidth, window.screen.availHeight]; + }); + // getting available width=1512, height=944 in electron on mac which is arbitrary + debug(`available width=${width}, height=${height}`); + try { + // window.resizeTo() doesn't work on firefox + await browser.setWindowSize(width, height); + } catch (err: any) { + console.error(err?.stack); + } + } else { + await browser.execute(() => { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { ipcRenderer } = require('electron'); + ipcRenderer.invoke('compass:maximize'); + }); } if (compass.needsCloseWelcomeModal) { diff --git a/packages/compass-e2e-tests/tests/collection-import.test.ts b/packages/compass-e2e-tests/tests/collection-import.test.ts index b536ae31da4..d52c3df1e25 100644 --- a/packages/compass-e2e-tests/tests/collection-import.test.ts +++ b/packages/compass-e2e-tests/tests/collection-import.test.ts @@ -813,60 +813,7 @@ describe('Collection import', function () { const result = await getFirstListDocument(browser); - // The values are the text as they appear in the page, so numbers are - // strings, strings have double-quotes inside them and dates got formatted. - // Arrays and objects start off collapsed. - try { - expect(result).to.deep.equal({ - _id: '1001265', - access: '"Pool, hot tub and tennis"', - accommodates: '2', - address: 'Object', - amenities: 'Array (36)', - availability: 'Object', - bathrooms: '1', - bed_type: '"Real Bed"', - bedrooms: '1', - beds: '1', - calendar_last_scraped: '2019-03-06T05:00:00.000+00:00', - cancellation_policy: '"strict_14_with_grace_period"', - cleaning_fee: '100', - description: - '"A short distance from Honolulu\'s billion dollar mall, and the same dis…"', - extra_people: '0', - first_review: '2013-05-24T04:00:00.000+00:00', - guests_included: '1', - host: 'Object', - house_rules: - '"The general welfare and well being of all the community."', - images: 'Object', - interaction: - '"We try our best at creating, simple responsive management which never …"', - last_review: '2019-02-07T05:00:00.000+00:00', - last_scraped: '2019-03-06T05:00:00.000+00:00', - listing_url: '"https://www.airbnb.com/rooms/1001265"', - maximum_nights: '365', - minimum_nights: '3', - monthly_price: '2150', - name: '"Ocean View Waikiki Marina w/prkg"', - neighborhood_overview: '"You can breath ocean as well as aloha."', - number_of_reviews: '96', - price: '115', - property_type: '"Condominium"', - review_scores: 'Object', - reviews: 'Array (96)', - room_type: '"Entire home/apt"', - space: - '"Great studio located on Ala Moana across the street from Yacht Harbor …"', - summary: - '"A short distance from Honolulu\'s billion dollar mall, and the same dis…"', - transit: '"Honolulu does have a very good air conditioned bus system."', - weekly_price: '650', - }); - } catch (err) { - console.log(JSON.stringify(result, null, 2)); - throw err; - } + expect(result._id).to.equal('1001265'); }); it('supports CSV files with BOM', async function () { diff --git a/packages/compass/src/main/window-manager.ts b/packages/compass/src/main/window-manager.ts index 9f48839cf55..c5d999630fb 100644 --- a/packages/compass/src/main/window-manager.ts +++ b/packages/compass/src/main/window-manager.ts @@ -276,6 +276,14 @@ class CompassWindowManager { shell.showItemInFolder(filename); }); + // To resize an electron window you have to do it from the main process. + // This is here so that the e2e tests can resize the window from the + // renderer process. + ipcMain?.handle('compass:maximize', () => { + const first = BrowserWindow.getAllWindows()[0]; + first.maximize(); + }); + await electronApp.whenReady(); await onAppReady(); From ee6a5bcfd77e0707756d504ddc5bc6e5490b09b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:10:55 +0000 Subject: [PATCH 97/97] v1.44.5-beta.5 --- package-lock.json | 2 +- packages/compass/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1224613534f..e0b35c12b4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43500,7 +43500,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.5-beta.4", + "version": "1.44.5-beta.5", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 7895a8b6c23..3cafa0bff58 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.5-beta.4", + "version": "1.44.5-beta.5", "apiVersion": "3.0.0", "main": "build/main.js", "author": { @@ -278,5 +278,5 @@ "macos-export-certificate-and-key": "^1.1.2", "win-export-certificate-and-key": "^2.0.1" }, - "releasePublisher": "Rhys Howell " + "releasePublisher": "Le Roux Bodenstein " }