mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(plugin-gis-viewer): CB-664 moved types to LeafletMap.tsx
This commit is contained in:
@@ -1,24 +1,24 @@
|
||||
const { resolve, join } = require('path');
|
||||
const ModuleDependencyWarning = require('webpack/lib/ModuleDependencyWarning');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
|
||||
const { resolve, join } = require('path')
|
||||
const ModuleDependencyWarning = require('webpack/lib/ModuleDependencyWarning')
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
||||
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
|
||||
// const ESLintPlugin = require('eslint-webpack-plugin');
|
||||
|
||||
class IgnoreNotFoundExportPlugin {
|
||||
apply(compiler) {
|
||||
const messageRegExp = /export '.*'( \(imported as '.*'\))? was not found in/
|
||||
function doneHook(stats) {
|
||||
apply (compiler) {
|
||||
const messageRegExp = /export '.*'( \(imported as '.*'\))? was not found in/;
|
||||
function doneHook (stats) {
|
||||
stats.compilation.warnings = stats.compilation.warnings.filter(warn => {
|
||||
if (warn instanceof ModuleDependencyWarning && messageRegExp.test(warn.message)) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
return true
|
||||
});
|
||||
}
|
||||
if (compiler.hooks) {
|
||||
compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook)
|
||||
compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook);
|
||||
} else {
|
||||
compiler.plugin('done', doneHook)
|
||||
compiler.plugin('done', doneHook);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,37 +27,37 @@ const nodeModules = [
|
||||
resolve('node_modules'), // product
|
||||
resolve('../../node_modules'), // workspace
|
||||
resolve('../../node_modules/@cloudbeaver/core-cli/node_modules'), // core-cli
|
||||
]
|
||||
];
|
||||
|
||||
module.exports = (env, argv) => {
|
||||
process.env.NODE_ENV = argv.mode;
|
||||
const devTool = 'source-map' in env && 'source-map';
|
||||
const devMode = argv.mode !== 'production';
|
||||
function getBaseStyleLoaders() {
|
||||
const loaders = [];
|
||||
process.env.NODE_ENV = argv.mode
|
||||
const devTool = 'source-map' in env && 'source-map'
|
||||
const devMode = argv.mode !== 'production'
|
||||
function getBaseStyleLoaders () {
|
||||
const loaders = []
|
||||
|
||||
// Broke styles order in dev mode
|
||||
// if (devMode) {
|
||||
// loaders.push('style-loader');
|
||||
// } else {
|
||||
loaders.push(MiniCssExtractPlugin.loader);
|
||||
loaders.push(MiniCssExtractPlugin.loader)
|
||||
// }
|
||||
|
||||
return loaders;
|
||||
return loaders
|
||||
}
|
||||
|
||||
function generateStyleLoaders(options = { hasModule: false }) {
|
||||
const moduleScope = options.hasModule ? 'local' : 'global';
|
||||
function generateStyleLoaders (options = { hasModule: false }) {
|
||||
const moduleScope = options.hasModule ? 'local' : 'global'
|
||||
const modules = {
|
||||
mode: moduleScope,
|
||||
localIdentName: '[local]___[hash:base64:5]',
|
||||
};
|
||||
}
|
||||
|
||||
const postCssPlugins = [
|
||||
require('postcss-preset-env')({ stage: 0 }),
|
||||
// require('postcss-discard-comments'),
|
||||
require('reshadow/postcss')({ scopeBehaviour: moduleScope }),
|
||||
];
|
||||
]
|
||||
|
||||
return [
|
||||
...getBaseStyleLoaders(),
|
||||
@@ -88,7 +88,7 @@ module.exports = (env, argv) => {
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
]
|
||||
}
|
||||
|
||||
var babelLoader = {
|
||||
@@ -96,7 +96,7 @@ module.exports = (env, argv) => {
|
||||
options: {
|
||||
configFile: join(__dirname, 'babel.config.js'),
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
// target: !devMode ? "web" : "browserslist",
|
||||
@@ -149,7 +149,7 @@ module.exports = (env, argv) => {
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.png$/,
|
||||
test: /\.(png|jpg|gif)$/i,
|
||||
use: [
|
||||
{
|
||||
loader: 'url-loader',
|
||||
@@ -178,5 +178,5 @@ module.exports = (env, argv) => {
|
||||
ignoreOrder: false, // Enable to remove warnings about conflicting order
|
||||
}),
|
||||
],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
-5
@@ -1,10 +1,8 @@
|
||||
import { IExecutor, Executor } from '@cloudbeaver/core-executor';
|
||||
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
|
||||
|
||||
import type { IDatabaseResultSet } from '../../IDatabaseResultSet';
|
||||
import { databaseDataAction } from '../DatabaseDataActionDecorator';
|
||||
import type { IDatabaseResultDataAction } from '../IDatabaseDataAction';
|
||||
import type { DatabaseDataEditorActionsData } from '../IDatabaseDataSelectAction';
|
||||
import type { IResultSetElementKey } from './IResultSetElementKey';
|
||||
|
||||
@databaseDataAction()
|
||||
@@ -12,12 +10,9 @@ export class ResultSetDataAction implements IDatabaseResultDataAction<IResultSet
|
||||
static dataFormat = ResultDataFormat.Resultset;
|
||||
result: IDatabaseResultSet;
|
||||
|
||||
readonly actions: IExecutor<DatabaseDataEditorActionsData<IResultSetElementKey>>;
|
||||
|
||||
constructor(
|
||||
result: IDatabaseResultSet) {
|
||||
this.result = result;
|
||||
this.actions = new Executor();
|
||||
}
|
||||
|
||||
getCellValue(cell: IResultSetElementKey): any {
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
*/
|
||||
|
||||
import { observer } from 'mobx-react-lite';
|
||||
import { useCallback } from 'react';
|
||||
import { useCallback, useMemo } from 'react';
|
||||
import wkt from 'terraformer-wkt-parser';
|
||||
|
||||
import { TabContainerPanelComponent, TextPlaceholder } from '@cloudbeaver/core-blocks';
|
||||
import { useTranslate } from '@cloudbeaver/core-localization';
|
||||
import { IDataValuePanelProps, IDatabaseResultSet, ResultSetSelectAction, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
import { LeafletMap } from './LeafletMap';
|
||||
import { IGeoJSONFeature, IAssociatedValue, LeafletMap } from './LeafletMap';
|
||||
import { ResultSetGISAction } from './ResultSetGISAction';
|
||||
import { useParseGISValues } from './useParseGISValues';
|
||||
import type { AssociatedValue } from './useParseGISValues';
|
||||
|
||||
export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelProps<any, IDatabaseResultSet>> = observer(function GISValuePresentation({
|
||||
model,
|
||||
@@ -26,7 +25,7 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
|
||||
|
||||
const modelResultData = model.getResult(resultIndex);
|
||||
const selection = model.source.getAction(resultIndex, ResultSetSelectAction);
|
||||
const GIS = model.source.getAction(resultIndex, ResultSetGISAction);
|
||||
const gis = model.source.getAction(resultIndex, ResultSetGISAction);
|
||||
|
||||
const focusedCell = selection.getFocusedElement() as Required<IResultSetElementKey> | null;
|
||||
const selectedCells = selection.getSelectedElements();
|
||||
@@ -35,18 +34,36 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
|
||||
selectedCells.push(focusedCell);
|
||||
}
|
||||
|
||||
const geoJSON = useParseGISValues(
|
||||
model, resultIndex, GIS.getGISDataFor(selectedCells)
|
||||
);
|
||||
const parsedGISData = useMemo(() => {
|
||||
const result: IGeoJSONFeature[] = [];
|
||||
|
||||
const getAssociatedValues = useCallback((cell: Required<IResultSetElementKey>): AssociatedValue[] => {
|
||||
for (let i = 0; i < selectedCells.length; i++) {
|
||||
try {
|
||||
const cell = selectedCells[i];
|
||||
const cellValue = gis.getCellValue(cell);
|
||||
|
||||
if (!cellValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const parsedCellValue = wkt.parse(cellValue.mapText || cellValue.text);
|
||||
result.push({ type: 'Feature', geometry: parsedCellValue, properties: { associatedCell: cell, srid: cellValue.srid } });
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}, [selectedCells, gis]);
|
||||
|
||||
const getAssociatedValues = useCallback((cell: Required<IResultSetElementKey>): IAssociatedValue[] => {
|
||||
if (!modelResultData?.data?.columns || !modelResultData?.data?.rows) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const { column: columnIndex, row: rowIndex } = cell;
|
||||
|
||||
return modelResultData.data.columns.reduce((result: AssociatedValue[], column, i) => {
|
||||
return modelResultData.data.columns.reduce((result: IAssociatedValue[], column, i) => {
|
||||
if (i !== columnIndex) {
|
||||
result.push({
|
||||
key: column.name!,
|
||||
@@ -60,11 +77,11 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
|
||||
}, []);
|
||||
}, [modelResultData, model, resultIndex]);
|
||||
|
||||
if (!geoJSON.length) {
|
||||
if (!parsedGISData.length) {
|
||||
return <TextPlaceholder>{translate('gis_presentation_placeholder')}</TextPlaceholder>;
|
||||
}
|
||||
|
||||
return (
|
||||
<LeafletMap geoJSON={geoJSON} getAssociatedValues={getAssociatedValues} />
|
||||
<LeafletMap geoJSON={parsedGISData} getAssociatedValues={getAssociatedValues} />
|
||||
);
|
||||
});
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
|
||||
import { DataValuePanelService, ResultSetDataAction, ResultSetSelectAction } from '@cloudbeaver/plugin-data-viewer';
|
||||
import { DataValuePanelService, ResultSetSelectAction } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
import { GISValuePresentation } from './GISValuePresentation';
|
||||
import { ResultSetGISAction } from './ResultSetGISAction';
|
||||
@@ -32,23 +32,20 @@ export class GISViewerBootstrap extends Bootstrap {
|
||||
}
|
||||
|
||||
const selection = context.model.source.getAction(context.resultIndex, ResultSetSelectAction);
|
||||
const GIS = context.model.source.getAction(context.resultIndex, ResultSetGISAction);
|
||||
const data = context.model.source.getAction(context.resultIndex, ResultSetDataAction);
|
||||
const gis = context.model.source.getAction(context.resultIndex, ResultSetGISAction);
|
||||
|
||||
const focusedElement = selection.getFocusedElement();
|
||||
|
||||
if (focusedElement) {
|
||||
const focusedElementValue = data.getCellValue(focusedElement);
|
||||
return !GIS.isGISFormat(focusedElementValue);
|
||||
return !gis.isGISFormat(focusedElement);
|
||||
}
|
||||
|
||||
const selectedCells = selection.getSelectedElements();
|
||||
|
||||
if (selectedCells.length > 0) {
|
||||
const firstSelectedCell = selectedCells[0];
|
||||
const firstSelectedCellValue = data.getCellValue(firstSelectedCell);
|
||||
|
||||
return !GIS.isGISFormat(firstSelectedCellValue);
|
||||
return !gis.isGISFormat(firstSelectedCell);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -8,8 +8,11 @@
|
||||
|
||||
import type { IDatabaseDataResult, IDatabaseDataAction, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
import type { IGISType } from './ResultSetGISAction';
|
||||
|
||||
export interface IDatabaseDataGISAction<TKey, TResult extends IDatabaseDataResult>
|
||||
extends IDatabaseDataAction<TResult> {
|
||||
getGISDataFor: (selectedCells: Array<Required<IResultSetElementKey>>) => Array<Required<IResultSetElementKey>>;
|
||||
isGISFormat: (value: any) => boolean;
|
||||
getCellValue: (cell: IResultSetElementKey) => IGISType | undefined;
|
||||
isGISFormat: (cell: IResultSetElementKey) => boolean;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
import 'leaflet/dist/leaflet.css';
|
||||
|
||||
import type geojson from 'geojson';
|
||||
import leaflet from 'leaflet';
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
import { MapContainer, GeoJSON, LayersControl, TileLayer } from 'react-leaflet';
|
||||
@@ -21,16 +22,29 @@ import { useSplit } from '@cloudbeaver/core-blocks';
|
||||
import { useTranslate } from '@cloudbeaver/core-localization';
|
||||
import type { IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
import type { AssociatedValue, IGeoJSONFeature } from './useParseGISValues';
|
||||
export interface IAssociatedValue {
|
||||
key: string;
|
||||
value: any;
|
||||
}
|
||||
|
||||
export interface IBaseTile extends TileLayerProps {
|
||||
interface IFeatureProperties {
|
||||
srid: number;
|
||||
associatedCell: Required<IResultSetElementKey>;
|
||||
}
|
||||
|
||||
export interface IGeoJSONFeature extends GeoJSON.Feature<GeoJSON.GeometryObject, IFeatureProperties> {
|
||||
type: 'Feature';
|
||||
bbox?: geojson.BBox;
|
||||
}
|
||||
|
||||
interface IBaseTile extends TileLayerProps {
|
||||
name: string;
|
||||
checked?: boolean;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
geoJSON: IGeoJSONFeature[];
|
||||
getAssociatedValues: (cell: Required<IResultSetElementKey>) => AssociatedValue[];
|
||||
getAssociatedValues: (cell: Required<IResultSetElementKey>) => IAssociatedValue[];
|
||||
}
|
||||
|
||||
const baseTiles: Record<'street' | 'topography', IBaseTile> = {
|
||||
@@ -90,7 +104,7 @@ function getCRS(feature?: IGeoJSONFeature): leaflet.CRS {
|
||||
}
|
||||
}
|
||||
|
||||
const LEAFLET_STYLES = css`
|
||||
const styles = css`
|
||||
MapContainer {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -160,7 +174,7 @@ export const LeafletMap: React.FC<Props> = function LeafletMap({ geoJSON, getAss
|
||||
}
|
||||
}, [splitContext.isResizing, splitContext.mode, mapRef, geoJSONLayerRef, crs, geoJSON]);
|
||||
|
||||
return styled(LEAFLET_STYLES)(
|
||||
return styled(styles)(
|
||||
<MapContainer crs={crs} whenCreated={setMapRef} zoom={12}>
|
||||
<GeoJSON
|
||||
// data is not optional property, see react-leaflet.d.ts
|
||||
|
||||
@@ -6,28 +6,37 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
|
||||
import { IExecutor, Executor } from '@cloudbeaver/core-executor';
|
||||
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
|
||||
import { databaseDataAction, IResultSetElementKey, IDatabaseResultSet, DatabaseDataEditorActionsData } from '@cloudbeaver/plugin-data-viewer';
|
||||
import { databaseDataAction, IResultSetElementKey, IDatabaseResultSet } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
import type { IDatabaseDataGISAction } from './IDatabaseDataGISAction';
|
||||
|
||||
export interface IGISType {
|
||||
$type: string;
|
||||
srid: number;
|
||||
text: string;
|
||||
mapText: string | null;
|
||||
properties: Record<string, any> | null;
|
||||
}
|
||||
@databaseDataAction()
|
||||
export class ResultSetGISAction implements IDatabaseDataGISAction<IResultSetElementKey, IDatabaseResultSet> {
|
||||
GISValueType = 'geometry';
|
||||
private readonly GISValueType = 'geometry';
|
||||
|
||||
static dataFormat = ResultDataFormat.Resultset;
|
||||
result: IDatabaseResultSet;
|
||||
|
||||
readonly actions: IExecutor<DatabaseDataEditorActionsData<IResultSetElementKey>>;
|
||||
|
||||
constructor(
|
||||
result: IDatabaseResultSet) {
|
||||
this.result = result;
|
||||
this.actions = new Executor();
|
||||
}
|
||||
|
||||
isGISFormat(value: any): boolean {
|
||||
isGISFormat(cell: IResultSetElementKey): boolean {
|
||||
if (cell.row === undefined || cell.column === undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const value = this.result?.data?.rows?.[cell.row][cell.column];
|
||||
|
||||
if (value !== null && typeof value === 'object' && '$type' in value) {
|
||||
return value.$type === this.GISValueType;
|
||||
}
|
||||
@@ -43,14 +52,21 @@ export class ResultSetGISAction implements IDatabaseDataGISAction<IResultSetElem
|
||||
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
const cell = cells[i];
|
||||
const cellValue = this.result.data?.rows[cell.row][cell.column];
|
||||
if (this.isGISFormat(cellValue)) {
|
||||
if (this.isGISFormat(cell)) {
|
||||
result.push(cell);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
getCellValue(cell: IResultSetElementKey): IGISType | undefined {
|
||||
if (cell.row === undefined || cell.column === undefined || !this.result.data?.rows || !this.isGISFormat(cell)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return this.result.data.rows[cell.row][cell.column];
|
||||
}
|
||||
|
||||
updateResult(result: IDatabaseResultSet) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export default [
|
||||
['gis_presentation_title', 'Карта'],
|
||||
['gis_presentation_placeholder', 'Нет доступных данных'],
|
||||
['gis_presentation_base_tile_street_name', 'Улица'],
|
||||
['gis_presentation_base_tile_topography_name', 'Рельеф'],
|
||||
['gis_presentation_base_tile_street_name', 'Схема'],
|
||||
['gis_presentation_base_tile_topography_name', 'Топографическая'],
|
||||
];
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2021 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
|
||||
import { useMemo } from 'react';
|
||||
import wkt from 'terraformer-wkt-parser';
|
||||
|
||||
import type { IDatabaseDataModel, IDatabaseResultSet, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
|
||||
import { ResultSetDataAction } from '@cloudbeaver/plugin-data-viewer';
|
||||
|
||||
interface GISType {
|
||||
$type: string;
|
||||
srid: number;
|
||||
text: string;
|
||||
mapText: string | null;
|
||||
properties: Record<string, any> | null;
|
||||
}
|
||||
|
||||
export interface AssociatedValue {
|
||||
key: string;
|
||||
value: any;
|
||||
}
|
||||
|
||||
interface IFeatureProperties {
|
||||
srid: number;
|
||||
associatedCell: Required<IResultSetElementKey>;
|
||||
}
|
||||
|
||||
export interface IGeoJSONFeature extends GeoJSON.Feature {
|
||||
properties: IFeatureProperties;
|
||||
}
|
||||
|
||||
export function useParseGISValues(
|
||||
model: IDatabaseDataModel<any, IDatabaseResultSet>,
|
||||
resultIndex: number,
|
||||
values: Array<Required<IResultSetElementKey>>
|
||||
) {
|
||||
const geoJSON = useMemo(() => {
|
||||
const result: IGeoJSONFeature[] = [];
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
try {
|
||||
const cell = values[i];
|
||||
const cellValue = data.getCellValue(cell) as GISType | undefined;
|
||||
if (!cellValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const parsedCellValue = wkt.parse(cellValue.mapText || cellValue.text);
|
||||
result.push({ type: 'Feature', geometry: parsedCellValue, properties: { associatedCell: cell, srid: cellValue.srid } });
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}, [model, resultIndex, values]);
|
||||
|
||||
return geoJSON;
|
||||
}
|
||||
@@ -2557,6 +2557,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.6.0.tgz#f022195afdfc942e088ee2101285a1d31c7d727f"
|
||||
integrity sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw==
|
||||
|
||||
"@react-leaflet/core@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-1.0.2.tgz#39c6a73f61c666d5dcf673741cea2672fa4bbae1"
|
||||
integrity sha512-QbleYZTMcgujAEyWGki8Lx6cXQqWkNtQlqf5c7NImlIp8bKW66bFpez/6EVatW7+p9WKBOEOVci/9W7WW70EZg==
|
||||
|
||||
"@reshadow/babel@^0.0.1-alpha.76", "@reshadow/babel@^0.0.1-issue-119.0":
|
||||
version "0.0.1-issue-119.0"
|
||||
resolved "https://registry.yarnpkg.com/@reshadow/babel/-/babel-0.0.1-issue-119.0.tgz#ef0e9228e06f821e3d2287f01569fb076153dbb5"
|
||||
@@ -2745,6 +2750,16 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
|
||||
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
|
||||
|
||||
"@types/geojson@*", "@types/geojson@^7946.0.0 || ^1.0.0":
|
||||
version "7946.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad"
|
||||
integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==
|
||||
|
||||
"@types/geojson@^1.0.0":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf"
|
||||
integrity sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==
|
||||
|
||||
"@types/glob@^7.1.1":
|
||||
version "7.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
|
||||
@@ -2792,6 +2807,13 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/leaflet@*":
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.0.tgz#3700fb5d29a8214fbd496565b08ec28e40cee808"
|
||||
integrity sha512-ltv5jR+VjKSMtoDkxH61Rsbo0zLU7iqyOXpVPkAX4F+79fg2eymC7t0msWsfNaEZO1FGTIQATCCCQe+ijWoicg==
|
||||
dependencies:
|
||||
"@types/geojson" "*"
|
||||
|
||||
"@types/md5@^2.2.1":
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.2.1.tgz#0e2d65d8f6cc91aafbc9be5a4c08fee9250406ce"
|
||||
@@ -2841,6 +2863,23 @@
|
||||
dependencies:
|
||||
"@types/react" "^16"
|
||||
|
||||
"@types/react-leaflet@^2.8.1":
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-leaflet/-/react-leaflet-2.8.1.tgz#acda592cf1b7dfe20ac81071c21c1e5521fe71a4"
|
||||
integrity sha512-BbFyH9R/MecfXaz1Yt29oGBG8AxIKILgAniO61/kv9/sRe5/qj9yDxf3PW7M+nDl5Wn3V7Mp9inKF0LflV+KkQ==
|
||||
dependencies:
|
||||
"@types/leaflet" "*"
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react@*":
|
||||
version "17.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79"
|
||||
integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
"@types/scheduler" "*"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/react@^16", "@types/react@^16.9.49":
|
||||
version "16.14.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c"
|
||||
@@ -2849,6 +2888,11 @@
|
||||
"@types/prop-types" "*"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/scheduler@*":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
|
||||
integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
|
||||
|
||||
"@types/tern@*":
|
||||
version "0.23.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460"
|
||||
@@ -8247,6 +8291,11 @@ latest-version@5.1.0:
|
||||
dependencies:
|
||||
package-json "^6.3.0"
|
||||
|
||||
leaflet@^1.7.1:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19"
|
||||
integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==
|
||||
|
||||
lerna@^3.22.1:
|
||||
version "3.22.1"
|
||||
resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62"
|
||||
@@ -11102,6 +11151,13 @@ react-is@^16.8.1:
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-leaflet@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-3.1.0.tgz#42deb5e454518016eff8bc85511ae58812f910f5"
|
||||
integrity sha512-kdZS8NYbYFPmkQr7zSDR2gkKGFeWvkxqoqcmZEckzHL4d5c85dJ2gbbqhaPDpmWWgaRw9O29uA/77qpKmK4mTQ==
|
||||
dependencies:
|
||||
"@react-leaflet/core" "^1.0.2"
|
||||
|
||||
react-popper@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.4.tgz#d2ad3d2474ac9f1abf93df3099d408e5aa6a2e22"
|
||||
@@ -12769,6 +12825,21 @@ temp-write@^3.4.0:
|
||||
temp-dir "^1.0.0"
|
||||
uuid "^3.0.1"
|
||||
|
||||
terraformer-wkt-parser@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz#8041e2aeb0c9f2b4cbbec8ec2c5c00c45ddfee02"
|
||||
integrity sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==
|
||||
dependencies:
|
||||
"@types/geojson" "^1.0.0"
|
||||
terraformer "~1.0.5"
|
||||
|
||||
terraformer@~1.0.5:
|
||||
version "1.0.12"
|
||||
resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.12.tgz#39e08f9c753606421acce02e122440c72dfa12d3"
|
||||
integrity sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==
|
||||
optionalDependencies:
|
||||
"@types/geojson" "^7946.0.0 || ^1.0.0"
|
||||
|
||||
terser-webpack-plugin@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673"
|
||||
@@ -13249,6 +13320,15 @@ urix@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
|
||||
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
||||
|
||||
url-loader@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
|
||||
integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
|
||||
dependencies:
|
||||
loader-utils "^2.0.0"
|
||||
mime-types "^2.1.27"
|
||||
schema-utils "^3.0.0"
|
||||
|
||||
url-parse-lax@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
|
||||
|
||||
Reference in New Issue
Block a user