diff options
| -rw-r--r-- | .gitignore | 6 | ||||
| -rw-r--r-- | cli/app/server/web.py | 8 | ||||
| -rw-r--r-- | cli/app/settings/app_cfg.py | 2 | ||||
| -rw-r--r-- | cli/app/sql/common.py | 8 | ||||
| -rw-r--r-- | cli/app/sql/env.py | 4 | ||||
| -rw-r--r-- | cli/app/sql/models/graph.py | 15 | ||||
| -rw-r--r-- | cli/app/sql/models/page.py | 27 | ||||
| -rw-r--r-- | cli/app/sql/models/tile.py | 13 | ||||
| -rw-r--r-- | cli/app/sql/models/upload.py | 10 | ||||
| -rw-r--r-- | cli/app/sql/script.py.mako | 1 | ||||
| -rw-r--r-- | cli/app/sql/versions/202006011943_adding_database.py | 66 | ||||
| -rw-r--r-- | cli/app/sql/versions/202006011944_adding_uploads.py | 37 | ||||
| -rw-r--r-- | cli/app/utils/file_utils.py | 3 | ||||
| -rwxr-xr-x | cli/cli.py | 6 | ||||
| -rw-r--r-- | environment.yml | 2 | ||||
| -rw-r--r-- | frontend/actions.js | 2 | ||||
| -rw-r--r-- | frontend/api/index.js | 10 | ||||
| -rw-r--r-- | frontend/index.js | 1 | ||||
| -rw-r--r-- | frontend/store.js | 1 | ||||
| -rw-r--r-- | frontend/types.js | 2 | ||||
| -rw-r--r-- | frontend/views/index.js | 10 | ||||
| -rw-r--r-- | frontend/views/upload/components/upload.index.js | 3 | ||||
| -rw-r--r-- | frontend/views/upload/upload.reducer.js | 3 | ||||
| -rw-r--r-- | package-lock.json | 20 | ||||
| -rw-r--r-- | package.json | 1 |
25 files changed, 180 insertions, 81 deletions
@@ -168,15 +168,11 @@ etc static/js/dist -data_store/docker/mysql/* -data_store/docker/redis/* data_store/media/* -data_store/models/* -data_store/indexes/* -data_store/incoming/* data_store/uploads/* data_store/features/* data_store/exports/* +data_store/db/* !data_store/.gitkeep !data_store/media/.gitkeep diff --git a/cli/app/server/web.py b/cli/app/server/web.py index 49618d2..739f271 100644 --- a/cli/app/server/web.py +++ b/cli/app/server/web.py @@ -16,7 +16,9 @@ from flask import Flask, Blueprint, send_from_directory, request from app.sql.common import db, connection_url from app.settings import app_cfg -from app.controllers.collection_controller import CollectionView +from app.controllers.graph_controller import GraphView +from app.controllers.page_controller import PageView +from app.controllers.tile_controller import TileView from app.controllers.upload_controller import UploadView def create_app(script_info=None): @@ -31,7 +33,9 @@ def create_app(script_info=None): db.init_app(app) - CollectionView.register(app, route_prefix='/api/v1/') + GraphView.register(app, route_prefix='/api/v1/') + PageView.register(app, route_prefix='/api/v1/') + TileView.register(app, route_prefix='/api/v1/') UploadView.register(app, route_prefix='/api/v1/') index_html = 'index.html' diff --git a/cli/app/settings/app_cfg.py b/cli/app/settings/app_cfg.py index 094f51e..758056e 100644 --- a/cli/app/settings/app_cfg.py +++ b/cli/app/settings/app_cfg.py @@ -6,7 +6,7 @@ import logging from dotenv import load_dotenv import yaml -from app.models import types +# from app.models import types from pathlib import Path import codecs diff --git a/cli/app/sql/common.py b/cli/app/sql/common.py index cf819e1..fab324d 100644 --- a/cli/app/sql/common.py +++ b/cli/app/sql/common.py @@ -2,7 +2,7 @@ import os import glob import time -import mysql.connector +# import mysql.connector from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base @@ -21,13 +21,17 @@ from app.settings import app_cfg os.makedirs(app_cfg.DIR_DATABASE, exist_ok=True) connection_url = "sqlite:///{}".format(os.path.join(app_cfg.DIR_DATABASE, 'swimmer.sqlite3')) +print(connection_url) engine = create_engine(connection_url, encoding="utf-8", pool_recycle=3600) Session = sessionmaker(bind=engine) Base = declarative_base() +Base.metadata.bind = engine db = SQLAlchemy() -from app.sql.models.collection import Collection +from app.sql.models.tile import Tile +from app.sql.models.page import Page +from app.sql.models.graph import Graph from app.sql.models.upload import Upload diff --git a/cli/app/sql/env.py b/cli/app/sql/env.py index a2815db..1bf717f 100644 --- a/cli/app/sql/env.py +++ b/cli/app/sql/env.py @@ -13,7 +13,9 @@ config.set_main_option("sqlalchemy.url", connection_url) target_metadata = Base.metadata -from app.sql.models.collection import Collection +from app.sql.models.tile import Tile +from app.sql.models.page import Page +from app.sql.models.graph import Graph from app.sql.models.upload import Upload def run_migrations_offline(): diff --git a/cli/app/sql/models/graph.py b/cli/app/sql/models/graph.py index ef5a817..1f553e9 100644 --- a/cli/app/sql/models/graph.py +++ b/cli/app/sql/models/graph.py @@ -1,9 +1,11 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.page import Page from app.settings import app_cfg @@ -11,16 +13,16 @@ from os.path import join class Graph(Base): """Table for storing references to graphs""" - __tablename__ = 'graphs' + __tablename__ = 'graph' id = Column(Integer, primary_key=True) path = Column(String(64, convert_unicode=True), nullable=False) title = Column(String(64, convert_unicode=True), nullable=False) description = Column(Text(convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) - # pages = relationship("Page", secondary="pages", lazy='dynamic') + # pages = relationship('Page', lazy='dynamic') def toJSON(self): return { @@ -33,6 +35,11 @@ class Graph(Base): 'updated_at': self.updated_at, } + def toFullJSON(self): + data = self.toJSON() + data['pages'] = [ page.toJSON() for page in self.pages ] + return data + class GraphForm(ModelForm): class Meta: model = Graph diff --git a/cli/app/sql/models/page.py b/cli/app/sql/models/page.py index 1362bb3..bad5568 100644 --- a/cli/app/sql/models/page.py +++ b/cli/app/sql/models/page.py @@ -1,15 +1,17 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.graph import Graph from app.settings import app_cfg class Page(Base): """Table for storing references to pages""" - __tablename__ = 'pages' + __tablename__ = 'page' id = Column(Integer, primary_key=True) graph_id = Column(Integer, ForeignKey('graph.id'), nullable=True) path = Column(String(64, convert_unicode=True), nullable=False) @@ -17,9 +19,9 @@ class Page(Base): description = Column(Text(convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) - tiles = relationship("Tile", secondary="tiles", lazy='dynamic') + # tiles = relationship("Tile", lazy='dynamic') def toJSON(self): return { @@ -33,9 +35,14 @@ class Page(Base): 'updated_at': self.updated_at, } -class PageForm(ModelForm): - class Meta: - model = Page - exclude = ['graph_id', 'settings', 'created_at', 'updated_at'] - def get_session(): - return Session() + def toFullJSON(self): + data = self.toJSON() + data['tiles'] = [ tile.toJSON() for tile in self.tiles ] + return data + +# class PageForm(ModelForm): +# class Meta: +# model = Page +# exclude = ['graph_id', 'settings', 'created_at', 'updated_at'] +# def get_session(): +# return Session() diff --git a/cli/app/sql/models/tile.py b/cli/app/sql/models/tile.py index 01b3fab..85ee1bf 100644 --- a/cli/app/sql/models/tile.py +++ b/cli/app/sql/models/tile.py @@ -1,18 +1,20 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.graph import Graph +# from app.sql.models.page import Page -from app.utils.file_utils import sha256_tree from app.settings import app_cfg from os.path import join class Tile(Base): """Table for storing references to tiles""" - __tablename__ = 'tiles' + __tablename__ = 'tile' id = Column(Integer, primary_key=True) graph_id = Column(Integer, ForeignKey('graph.id'), nullable=True) page_id = Column(Integer, ForeignKey('page.id'), nullable=True) @@ -20,7 +22,7 @@ class Tile(Base): type = Column(String(16, convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) def toJSON(self): return { @@ -34,10 +36,9 @@ class Tile(Base): 'updated_at': self.updated_at, } - class TileForm(ModelForm): class Meta: model = Tile - exclude = ['graph_id', 'page_id', 'target_page_id', 'settings', 'created_at', 'updated_at'] + # exclude = ['graph_id', 'page_id', 'target_page_id', 'settings', 'created_at', 'updated_at'] def get_session(): return Session() diff --git a/cli/app/sql/models/upload.py b/cli/app/sql/models/upload.py index f1e8108..5863b07 100644 --- a/cli/app/sql/models/upload.py +++ b/cli/app/sql/models/upload.py @@ -4,8 +4,6 @@ from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session -from app.sql.columns.hash_column import HashColumn -from app.sql.columns.media_type_column import MediaTypeColumn from app.utils.file_utils import sha256_tree from app.settings import app_cfg @@ -14,9 +12,10 @@ from os.path import join class Upload(Base): """Table for storing references to various media""" - __tablename__ = 'uploads' + __tablename__ = 'upload' id = Column(Integer, primary_key=True) - sha256 = Column(HashColumn(32), nullable=False) + sha256 = Column(String(256), nullable=False) + fn = Column(String(256), nullable=False) ext = Column(String(4, convert_unicode=True), nullable=False) username = Column(String(16, convert_unicode=True), nullable=False) created_at = Column(UtcDateTime(), default=utcnow()) @@ -25,6 +24,7 @@ class Upload(Base): return { 'id': self.id, 'sha256': self.sha256, + 'fn': self.fn, 'ext': self.ext, 'username': self.username, 'url': self.url(), @@ -32,7 +32,7 @@ class Upload(Base): } def filename(self): - return "{}{}".format(self.sha256, self.ext) + return "{}{}".format(self.fn) def filepath(self): return join(app_cfg.DIR_UPLOADS, sha256_tree(self.sha256)) diff --git a/cli/app/sql/script.py.mako b/cli/app/sql/script.py.mako index 94bb012..c4b86b8 100644 --- a/cli/app/sql/script.py.mako +++ b/cli/app/sql/script.py.mako @@ -8,7 +8,6 @@ Create Date: ${create_date} from alembic import op import sqlalchemy as sa import sqlalchemy_utc -import app.sql.columns ${imports if imports else ""} # revision identifiers, used by Alembic. diff --git a/cli/app/sql/versions/202006011943_adding_database.py b/cli/app/sql/versions/202006011943_adding_database.py new file mode 100644 index 0000000..4e5b0e6 --- /dev/null +++ b/cli/app/sql/versions/202006011943_adding_database.py @@ -0,0 +1,66 @@ +"""adding database + +Revision ID: 7acd0c82a048 +Revises: +Create Date: 2020-06-01 19:43:53.359855 + +""" +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utc + + +# revision identifiers, used by Alembic. +revision = '7acd0c82a048' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('graph', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('path', sa.String(length=64, _expect_unicode=True), nullable=False), + sa.Column('title', sa.String(length=64, _expect_unicode=True), nullable=False), + sa.Column('description', sa.Text(_expect_unicode=True), nullable=False), + sa.Column('settings', sa.JSON(), nullable=True), + sa.Column('created_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.Column('updated_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('page', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('graph_id', sa.Integer(), nullable=True), + sa.Column('path', sa.String(length=64, _expect_unicode=True), nullable=False), + sa.Column('title', sa.String(length=64, _expect_unicode=True), nullable=False), + sa.Column('description', sa.Text(_expect_unicode=True), nullable=False), + sa.Column('settings', sa.JSON(), nullable=True), + sa.Column('created_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.Column('updated_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.ForeignKeyConstraint(['graph_id'], ['graph.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('tile', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('graph_id', sa.Integer(), nullable=True), + sa.Column('page_id', sa.Integer(), nullable=True), + sa.Column('target_page_id', sa.Integer(), nullable=True), + sa.Column('type', sa.String(length=16, _expect_unicode=True), nullable=False), + sa.Column('settings', sa.JSON(), nullable=True), + sa.Column('created_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.Column('updated_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.ForeignKeyConstraint(['graph_id'], ['graph.id'], ), + sa.ForeignKeyConstraint(['page_id'], ['page.id'], ), + sa.ForeignKeyConstraint(['target_page_id'], ['page.id'], ), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('tile') + op.drop_table('page') + op.drop_table('graph') + # ### end Alembic commands ### diff --git a/cli/app/sql/versions/202006011944_adding_uploads.py b/cli/app/sql/versions/202006011944_adding_uploads.py new file mode 100644 index 0000000..f09f013 --- /dev/null +++ b/cli/app/sql/versions/202006011944_adding_uploads.py @@ -0,0 +1,37 @@ +"""adding uploads + +Revision ID: 5b926731a4ac +Revises: 7acd0c82a048 +Create Date: 2020-06-01 19:44:30.400513 + +""" +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utc + + +# revision identifiers, used by Alembic. +revision = '5b926731a4ac' +down_revision = '7acd0c82a048' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('upload', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('sha256', sa.String(length=256), nullable=False), + sa.Column('fn', sa.String(length=256), nullable=False), + sa.Column('ext', sa.String(length=4, _expect_unicode=True), nullable=False), + sa.Column('username', sa.String(length=16, _expect_unicode=True), nullable=False), + sa.Column('created_at', sqlalchemy_utc.sqltypes.UtcDateTime(timezone=True), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('upload') + # ### end Alembic commands ### diff --git a/cli/app/utils/file_utils.py b/cli/app/utils/file_utils.py index 904702c..7f1f417 100644 --- a/cli/app/utils/file_utils.py +++ b/cli/app/utils/file_utils.py @@ -29,9 +29,6 @@ import yaml import hashlib import click from tqdm import tqdm -import cv2 as cv -from PIL import Image -import imutils @@ -26,12 +26,8 @@ if __name__ == '__main__': from flask.cli import FlaskGroup from app.server.web import create_app - from app.server.socket import create_socket - if len(sys.argv) > 1 and sys.argv[1] == 'socket': - cli = create_socket - else: - cli = FlaskGroup(create_app=create_app) + cli = FlaskGroup(create_app=create_app) elif args.group == 'db': diff --git a/environment.yml b/environment.yml index 87442b8..5a4dfd5 100644 --- a/environment.yml +++ b/environment.yml @@ -33,7 +33,6 @@ dependencies: - dnspython==1.16.0 - flask==1.1.1 - flask-classful==0.14.2 - - flask-socketio==4.2.1 - flask-sqlalchemy==2.4.0 - flask-wtf==0.14.2 - imageio==2.5.0 @@ -43,7 +42,6 @@ dependencies: - itsdangerous==1.1.0 - jinja2==2.10.1 - joblib==0.13.2 - - kiwisolver==1.1.0 - kombu==4.6.3 - mako==1.1.0 - markdown==3.1.1 diff --git a/frontend/actions.js b/frontend/actions.js index fcbb6fc..31e0a52 100644 --- a/frontend/actions.js +++ b/frontend/actions.js @@ -13,6 +13,6 @@ export default ]) .map(p => [p[0], bindActionCreators(p[1], store.dispatch)]) .concat([ - ['socket', socketActions], + // ['socket', socketActions], ]) .reduce((a,b) => (a[b[0]] = b[1])&&a,{})
\ No newline at end of file diff --git a/frontend/api/index.js b/frontend/api/index.js index b33d2e6..26a8baa 100644 --- a/frontend/api/index.js +++ b/frontend/api/index.js @@ -17,12 +17,8 @@ so you can do ... export { util } export const actions = [ - 'collection', + 'graph', + 'page', + 'tile', 'upload', - 'media', - 'featureIndex', - 'detectionIndex', - 'detection', - 'modelzoo', - 'mediaImport', ].reduce((a,b) => (a[b] = crud_actions(b)) && a, {}) diff --git a/frontend/index.js b/frontend/index.js index 39bcf86..94cac35 100644 --- a/frontend/index.js +++ b/frontend/index.js @@ -4,7 +4,6 @@ import { Provider } from 'react-redux' import App from './app' -import * as socket from './socket' import { store, history } from './store' const container = document.createElement('div') diff --git a/frontend/store.js b/frontend/store.js index e3adb9e..445125b 100644 --- a/frontend/store.js +++ b/frontend/store.js @@ -10,6 +10,7 @@ import uploadReducer from './views/upload/upload.reducer' const createRootReducer = history => ( combineReducers({ auth: (state = {}) => state, + router: connectRouter(history), upload: uploadReducer, // collection: collectionReducer, }) diff --git a/frontend/types.js b/frontend/types.js index 2e948f4..cf48b67 100644 --- a/frontend/types.js +++ b/frontend/types.js @@ -1,9 +1,9 @@ import { with_type, crud_type } from './api/crud.types' +export const api = crud_type('api', []) export const graph = crud_type('graph', []) export const page = crud_type('page', []) export const tile = crud_type('tile', []) - export const upload = crud_type('upload', []) export const system = with_type('system', [ diff --git a/frontend/views/index.js b/frontend/views/index.js index d1e4243..5f88c96 100644 --- a/frontend/views/index.js +++ b/frontend/views/index.js @@ -1,11 +1 @@ -export { Container as detectionIndex } from './detectionIndex' -export { Container as featureIndex } from './featureIndex' -export { Container as import } from './mediaImport' -export { Container as collection } from './collection' -export { Container as dashboard } from './dashboard' -export { Container as detection } from './detection' -export { Container as modelzoo } from './modelzoo' -export { Container as search } from './search' export { Container as upload } from './upload' -export { Container as media } from './media' -export { Container as task } from './task' diff --git a/frontend/views/upload/components/upload.index.js b/frontend/views/upload/components/upload.index.js index 4435043..6123001 100644 --- a/frontend/views/upload/components/upload.index.js +++ b/frontend/views/upload/components/upload.index.js @@ -8,8 +8,6 @@ import actions from '../../../actions' import UploadIndexOptions from './upload.indexOptions' import UploadMenu from './upload.menu' -import CollectionMediaToggle from '../../collectionMedia/collectionMedia.toggle.js' - // const { result, collectionLookup } = this.props export default class UploadIndex extends Component { @@ -104,4 +102,3 @@ const UploadItem = ({ data }) => { ) } - // <CollectionMediaToggle collectionLookup={collectionLookup} id={result.media.id} /> diff --git a/frontend/views/upload/upload.reducer.js b/frontend/views/upload/upload.reducer.js index 674fcf8..98dc0a1 100644 --- a/frontend/views/upload/upload.reducer.js +++ b/frontend/views/upload/upload.reducer.js @@ -13,9 +13,6 @@ const reducer = crudReducer('upload') export default function uploadReducer(state = initialState, action) { // console.log(action.type, action) - if (action.type === types.search.loaded && action.tag === 'query') { - // console.log("infer:", action.data.infer) - } state = reducer(state, action) switch (action.type) { default: diff --git a/package-lock.json b/package-lock.json index 52debd4..d4bf57f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "vframe_search", + "name": "swimmer", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -4448,7 +4448,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "" + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -5242,7 +5243,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "schema-utils": { "version": "2.6.4", @@ -9994,7 +9996,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "" + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -10410,7 +10413,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "schema-utils": { "version": "2.6.4", @@ -11274,7 +11278,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "tapable": { "version": "1.1.3", @@ -11380,7 +11385,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "supports-color": { "version": "6.1.0", diff --git a/package.json b/package.json index 838eb70..a2844ab 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "react-router-dom": "^5.1.2", "redux": "^4.0.5", "redux-thunk": "^2.3.0", - "socket.io-client": "^2.3.0", "store2": "^2.10.0", "style-loader": "^1.1.3", "terser-webpack-plugin": "^2.3.5", |
