Feat: bot
This commit is contained in:
parent
b3e47f098f
commit
1c8645039e
24 changed files with 1474 additions and 376 deletions
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
|
|
@ -2,5 +2,6 @@
|
|||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/great-big-angular2-example" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
667
.idea/workspace.xml
generated
667
.idea/workspace.xml
generated
|
|
@ -5,10 +5,26 @@
|
|||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="603d916b-6d0f-43a7-809c-21ce2bcb2533" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/DataGatherer/src/shared/Data.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/tsconfig.json" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/index.html" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/main.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/main.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/package-lock.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" afterDir="false" />
|
||||
</list>
|
||||
<ignored path="$PROJECT_DIR$/.tmp/" />
|
||||
|
|
@ -20,13 +36,64 @@
|
|||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FavoritesManager">
|
||||
<favorites_list name="UserflowPredictorSystem" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="1" selection-start-line="10" selection-start-column="1" selection-end-line="10" selection-end-column="1" />
|
||||
<folding>
|
||||
<element signature="e#0#32#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="425">
|
||||
<caret line="25" column="22" selection-start-line="25" selection-start-column="22" selection-end-line="25" selection-end-column="22" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="191">
|
||||
<caret line="122" column="35" selection-start-line="122" selection-start-column="35" selection-end-line="122" selection-end-column="35" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="187">
|
||||
<caret line="11" selection-start-line="11" selection-end-line="11" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1530">
|
||||
<caret line="96" column="5" selection-start-line="96" selection-start-column="5" selection-end-line="96" selection-end-column="5" />
|
||||
<state relative-caret-position="777">
|
||||
<caret line="77" column="20" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="e#0#30#0" expanded="true" />
|
||||
</folding>
|
||||
|
|
@ -35,7 +102,7 @@
|
|||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
|
||||
|
|
@ -44,79 +111,10 @@
|
|||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="15" selection-start-line="19" selection-start-column="11" selection-end-line="19" selection-end-column="15" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="136">
|
||||
<caret line="8" column="80" selection-start-line="8" selection-start-column="80" selection-end-line="8" selection-end-column="80" />
|
||||
<folding>
|
||||
<element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#2;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#3;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#4;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#5;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#6;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#7;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#8;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#9;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#10;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#11;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#12;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="204">
|
||||
<caret line="12" column="11" selection-start-line="12" selection-start-column="11" selection-end-line="12" selection-end-column="11" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="204">
|
||||
<caret line="12" column="59" selection-start-line="12" selection-start-column="59" selection-end-line="12" selection-end-column="59" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
|
||||
<folding>
|
||||
<element signature="e#0#48#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="425">
|
||||
<caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
|
||||
<state relative-caret-position="497">
|
||||
<caret line="44" column="39" selection-start-line="44" selection-start-column="39" selection-end-line="44" selection-end-column="39" />
|
||||
<folding>
|
||||
<element signature="e#0#41#0" expanded="true" />
|
||||
</folding>
|
||||
|
|
@ -125,10 +123,25 @@
|
|||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="255">
|
||||
<caret line="15" selection-start-line="15" selection-end-line="15" />
|
||||
<state relative-caret-position="510">
|
||||
<caret line="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" />
|
||||
<folding>
|
||||
<element signature="e#0#48#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="54" selection-start-line="5" selection-start-column="54" selection-end-line="5" selection-end-column="54" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
|
@ -138,11 +151,34 @@
|
|||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>CanvasRenderer</find>
|
||||
<find>new Data</find>
|
||||
<find>stroke</find>
|
||||
<find>window</find>
|
||||
<find>req</find>
|
||||
<find>getTi</find>
|
||||
<find>json</find>
|
||||
<find>MAth.max</find>
|
||||
<find>ctx:</find>
|
||||
<find>console.log</find>
|
||||
<find>Data sa</find>
|
||||
<find>backgr</find>
|
||||
<find>white</find>
|
||||
<find>setInte</find>
|
||||
<find>sender.sta</find>
|
||||
<find>random</find>
|
||||
<find>'move</find>
|
||||
<find>flow</find>
|
||||
<find>get</find>
|
||||
<find>gl</find>
|
||||
<find>console.l</find>
|
||||
<find>MouseEventF</find>
|
||||
<find>docum</find>
|
||||
<find>.style</find>
|
||||
<find>new Data</find>
|
||||
<find>flowName</find>
|
||||
</findStrings>
|
||||
<replaceStrings>
|
||||
<replace />
|
||||
</replaceStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
|
|
@ -150,41 +186,51 @@
|
|||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/great-big-angular2-example/README.md" />
|
||||
<option value="$PROJECT_DIR$/great-big-angular2-example/src/index.html" />
|
||||
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.ts" />
|
||||
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/index.html" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/generator/Generator.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/shared/Flow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/shared/EventFlow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/shared/event-flow/EventFlow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/datas/flow.json" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/shared/event-flow/MouseEventFlow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/datas/flow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/DataGeneratorPuppets.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/DataGeneratorPuppets.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/index.html" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/shared/Data.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/keyboard/Keyboard.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" />
|
||||
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" />
|
||||
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts" />
|
||||
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts" />
|
||||
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectConfigurationFiles">
|
||||
<option name="files">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/.idea/UserflowPredictorSystem.iml" />
|
||||
<option value="$PROJECT_DIR$/.idea/misc.xml" />
|
||||
<option value="$PROJECT_DIR$/.idea/modules.xml" />
|
||||
<option value="$PROJECT_DIR$/.idea/vcs.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="1939" />
|
||||
<option name="y" value="163" />
|
||||
<option name="width" value="1800" />
|
||||
<option name="height" value="1036" />
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="x" value="1981" />
|
||||
<option name="y" value="263" />
|
||||
<option name="width" value="1936" />
|
||||
<option name="height" value="1130" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||
<component name="ProjectView">
|
||||
<navigator proportions="" version="1">
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
|
|
@ -210,6 +256,13 @@
|
|||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="sender" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="shared" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
|
|
@ -236,10 +289,27 @@
|
|||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="source" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="screen" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="datas" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="event-flow" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
|
|
@ -259,6 +329,14 @@
|
|||
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="Predictor" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="image-creator" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
|
||||
|
|
@ -271,16 +349,30 @@
|
|||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scope" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$USER_HOME$/Work/proman-web" />
|
||||
<property name="editor.config.ad.shown" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../Work/proman-web" />
|
||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
||||
<property name="nodejs_package_manager_path" value="npm" />
|
||||
<property name="ts.external.directory.path" value="C:\Users\Lorenzo\UserflowPredictorSystem\DataGatherer\node_modules\typescript\lib" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGeneratorPuppets" />
|
||||
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\Predictor\PredictorWebService\src\image-creator" />
|
||||
</key>
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGeneratorPuppets\src" />
|
||||
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGatherer\src\shared\event-flow" />
|
||||
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\Predictor\PredictorWebService\src\predictor-web-service" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
|
|
@ -293,6 +385,67 @@
|
|||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="npm.dev:puppet">
|
||||
<configuration name="build" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/DataGatherer/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="build" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="build:puppet" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="build:puppet" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="dev:imageCreator" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="dev:imageCreator" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="dev:puppet" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="dev:puppet" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="dev:ws" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="dev:ws" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="npm.dev:imageCreator" />
|
||||
<item itemvalue="npm.dev:puppet" />
|
||||
<item itemvalue="npm.dev:ws" />
|
||||
<item itemvalue="npm.build" />
|
||||
<item itemvalue="npm.build:puppet" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
|
|
@ -305,23 +458,36 @@
|
|||
<updated>1554914345509</updated>
|
||||
<workItem from="1554914346687" duration="15585000" />
|
||||
<workItem from="1554967067169" duration="1271000" />
|
||||
<workItem from="1554973527251" duration="5966000" />
|
||||
<workItem from="1554973527251" duration="6045000" />
|
||||
<workItem from="1555143288258" duration="4490000" />
|
||||
<workItem from="1555313308004" duration="29103000" />
|
||||
<workItem from="1555399989669" duration="1765000" />
|
||||
<workItem from="1555518427859" duration="877000" />
|
||||
<workItem from="1555582279420" duration="45000" />
|
||||
<workItem from="1556285810803" duration="12320000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Feat: Added websocket comm. for DataGatherer and PredictorWebService">
|
||||
<created>1554992034761</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1554992034761</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="2" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="22822000" />
|
||||
<option name="totallyTimeSpent" value="71501000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="1912" y="-318" width="1936" height="1176" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.09957851" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info id="Favorites" order="2" side_tool="true" />
|
||||
<window_info content_ui="combo" id="Project" order="0" sideWeight="0.49818182" visible="true" weight="0.19125395" />
|
||||
<window_info id="Structure" order="1" sideWeight="0.5018182" side_tool="true" weight="0.19125395" />
|
||||
<window_info id="Favorites" order="2" sideWeight="0.50060606" side_tool="true" weight="0.24868283" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" />
|
||||
<window_info anchor="bottom" id="Run" order="2" />
|
||||
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.20901246" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||
|
|
@ -339,14 +505,11 @@
|
|||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="Feat: Added websocket comm. for DataGatherer and PredictorWebService" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Feat: Added websocket comm. for DataGatherer and PredictorWebService" />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/package.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="26" lean-forward="true" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/html2canvas/dist/html2canvas.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="209">
|
||||
|
|
@ -364,38 +527,141 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/package.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="255">
|
||||
<caret line="15" column="41" selection-start-line="15" selection-start-column="41" selection-end-line="15" selection-end-column="41" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/data/Data.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="22" lean-forward="true" selection-start-line="5" selection-start-column="22" selection-end-line="5" selection-end-column="22" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/great-big-angular2-example/src/index.html" />
|
||||
<entry file="file://$PROJECT_DIR$/great-big-angular2-example/README.md" />
|
||||
<entry file="file://$PROJECT_DIR$/great-big-angular2-example/package.json" />
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/node_modules/canvas/types/index.d.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2856">
|
||||
<caret line="169" column="35" selection-start-line="169" selection-start-column="29" selection-end-line="169" selection-end-column="35" />
|
||||
<state relative-caret-position="267">
|
||||
<caret line="224" column="13" selection-start-line="224" selection-start-column="13" selection-end-line="224" selection-end-column="13" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/typescript/lib/lib.dom.d.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="259">
|
||||
<caret line="18265" column="5" selection-start-line="18265" selection-start-column="5" selection-end-line="18265" selection-end-column="5" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/generator/Generator.ts" />
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/Flow.ts" />
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/event-flow/EventFlow.ts" />
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/rxios/dist/index.d.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="153">
|
||||
<caret line="10" column="4" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/tsconfig.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="1" selection-end-line="19" selection-end-column="1" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/tsconfig.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="1" selection-start-line="19" selection-start-column="1" selection-end-line="19" selection-end-column="1" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/dist/bundle.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<caret column="16" lean-forward="true" selection-start-column="16" selection-end-column="16" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/dist/DataGeneratorPuppets/src/event-flow/MouseEventFlow.js" />
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/tsconfig.json">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/Predictor.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="9" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/datas/train/cat/cat.440.jpg">
|
||||
<provider selected="true" editor-type-id="images" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/datas/train/cat/cat.445.jpg">
|
||||
<provider selected="true" editor-type-id="images" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/package.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="391">
|
||||
<caret line="23" selection-start-line="23" selection-end-line="23" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/package.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="14" selection-start-line="5" selection-start-column="14" selection-end-line="5" selection-end-column="14" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/package.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="442">
|
||||
<caret line="26" column="53" selection-start-line="26" selection-start-column="53" selection-end-line="26" selection-end-column="53" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="55" lean-forward="true" selection-start-line="19" selection-start-column="55" selection-end-line="19" selection-end-column="55" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="51">
|
||||
<caret line="3" column="46" selection-start-line="3" selection-start-column="46" selection-end-line="3" selection-end-column="46" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="153">
|
||||
<caret line="9" lean-forward="true" selection-start-line="9" selection-end-line="9" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/Data.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="34">
|
||||
<caret line="2" column="21" selection-start-line="2" selection-start-column="21" selection-end-line="2" selection-end-column="21" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/keyboard/Keyboard.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="51">
|
||||
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" />
|
||||
<state relative-caret-position="68">
|
||||
<caret line="4" column="16" selection-start-line="4" selection-start-column="16" selection-end-line="4" selection-end-column="16" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" selection-start-line="5" selection-end-line="5" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="136">
|
||||
<caret line="8" column="80" selection-start-line="8" selection-start-column="80" selection-end-line="8" selection-end-column="80" />
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="62" selection-start-line="10" selection-start-column="62" selection-end-line="10" selection-end-column="62" />
|
||||
<folding>
|
||||
<element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
<element signature="n#style#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
|
||||
|
|
@ -414,68 +680,10 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="204">
|
||||
<caret line="12" column="11" selection-start-line="12" selection-start-column="11" selection-end-line="12" selection-end-column="11" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="204">
|
||||
<caret line="12" column="59" selection-start-line="12" selection-start-column="59" selection-end-line="12" selection-end-column="59" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="255">
|
||||
<caret line="15" selection-start-line="15" selection-end-line="15" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/typescript/lib/lib.dom.d.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="227">
|
||||
<caret line="2283" column="4" selection-start-line="2283" selection-start-column="4" selection-end-line="2283" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1530">
|
||||
<caret line="96" column="5" selection-start-line="96" selection-start-column="5" selection-end-line="96" selection-end-column="5" />
|
||||
<folding>
|
||||
<element signature="e#0#30#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
|
||||
<folding>
|
||||
<element signature="e#0#48#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="15" selection-start-line="19" selection-start-column="11" selection-end-line="19" selection-end-column="15" />
|
||||
<caret line="5" column="54" selection-start-line="5" selection-start-column="54" selection-end-line="5" selection-end-column="54" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
|
|
@ -484,13 +692,78 @@
|
|||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="425">
|
||||
<caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
|
||||
<state relative-caret-position="497">
|
||||
<caret line="44" column="39" selection-start-line="44" selection-start-column="39" selection-end-line="44" selection-end-column="39" />
|
||||
<folding>
|
||||
<element signature="e#0#41#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="777">
|
||||
<caret line="77" column="20" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="e#0#30#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="191">
|
||||
<caret line="122" column="35" selection-start-line="122" selection-start-column="35" selection-end-line="122" selection-end-column="35" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="1" selection-start-line="10" selection-start-column="1" selection-end-line="10" selection-end-column="1" />
|
||||
<folding>
|
||||
<element signature="e#0#32#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="425">
|
||||
<caret line="25" column="22" selection-start-line="25" selection-start-column="22" selection-end-line="25" selection-end-column="22" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="510">
|
||||
<caret line="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" />
|
||||
<folding>
|
||||
<element signature="e#0#48#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="187">
|
||||
<caret line="11" selection-start-line="11" selection-end-line="11" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
export class Data {
|
||||
private name: string;
|
||||
private data: any;
|
||||
private timestamp: number;
|
||||
private size: {
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
|
||||
constructor(name: string, data: any, size: any, timestamp?: number) {
|
||||
this.name = name;
|
||||
this.data = data;
|
||||
this.timestamp = timestamp ? timestamp : Date.now();
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public getData() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
public getTimestamp() {
|
||||
return this.timestamp;
|
||||
}
|
||||
|
||||
public getSize() {
|
||||
return this.size;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<head>
|
||||
<script src="../dist/bundle.js"></script>
|
||||
<script>
|
||||
const interval = setInterval(() => {
|
||||
/* const interval = setInterval(() => {
|
||||
let i = 1;
|
||||
for( i = 1; i <= 13; i++){
|
||||
const el = document.getElementById(i.toString());
|
||||
|
|
@ -12,23 +12,23 @@
|
|||
el.style.left = Math.floor(Math.random() * 1000) + 10 + 'px';
|
||||
}
|
||||
clearInterval(interval);
|
||||
}, 200);
|
||||
}, 200);*/
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<button>ciao</button>
|
||||
<div id="1" style="width: 50px; height: 70px; background-color:red; position: absolute"></div>
|
||||
<div id="2" style="width: 30px; height: 30px; background-color:blue; position: absolute"></div>
|
||||
<div id="3" style="width: 40px; height: 20px; background-color:pink; position: absolute"></div>
|
||||
<div id="4" style="width: 30px; height: 30px; background-color:black; position: absolute"></div>
|
||||
<div id="5" style="width: 30px; height: 30px; background-color:cyan; position: absolute"></div>
|
||||
<div id="6" style="width: 30px; height: 30px; background-color:yellow; position: absolute"></div>
|
||||
<div id="7" style="width: 30px; height: 30px; background-color:limegreen; position: absolute"></div>
|
||||
<div id="8" style="width: 30px; height: 30px; background-color:darkmagenta; position: absolute"></div>
|
||||
<div id="9" style="width: 30px; height: 30px; background-color:darkslategray; position: absolute"></div>
|
||||
<div id="10" style="width: 30px; height: 30px; background-color:fuchsia; position: absolute"></div>
|
||||
<div id="11" style="width: 30px; height: 30px; background-color:purple; position: absolute"></div>
|
||||
<div id="12" style="width: 30px; height: 30px; background-color:sienna; position: absolute"></div>
|
||||
<div id="13" style="width: 30px; height: 30px; background-color:darkturquoise; position: absolute"></div>
|
||||
<div id="1" style="width: 50px; height: 70px; background-color:red; position: absolute; top: 20px; left: 100px;"></div>
|
||||
<div id="2" style="width: 30px; height: 500px; background-color:blue; position: absolute; top: 465px; left: 33px;"></div>
|
||||
<div id="3" style="width: 40px; height: 20px; background-color:pink; position: absolute; top: 765px; left: 46px;"></div>
|
||||
<div id="4" style="width: 90px; height: 220px; background-color:black; position: absolute; top: 233px; left: 35px;"></div>
|
||||
<div id="5" style="width: 30px; height: 30px; background-color:cyan; position: absolute; top: 40px; left: 234px;"></div>
|
||||
<div id="6" style="width: 30px; height: 300px; background-color:yellow; position: absolute; top: 66px; left: 5px;"></div>
|
||||
<div id="7" style="width: 120px; height: 20px; background-color:limegreen; position: absolute; top: 123px; left: 45px;"></div>
|
||||
<div id="8" style="width: 30px; height: 10px; background-color:darkmagenta; position: absolute; top: 362px; left: 456px;"></div>
|
||||
<div id="9" style="width: 220px; height: 30px; background-color:darkslategray; position: absolute; top: 43px; left: 222px;"></div>
|
||||
<div id="10" style="width: 300px; height: 30px; background-color:fuchsia; position: absolute; top: 201px; left: 100px;"></div>
|
||||
<div id="11" style="width: 230px; height: 120px; background-color:purple; position: absolute; top: 201px; left: 344px;"></div>
|
||||
<div id="12" style="width: 80px; height: 230px; background-color:sienna; position: absolute; top: 324px; left: 23px;"></div>
|
||||
<div id="13" style="width: 30px; height: 100px; background-color:darkturquoise; position: absolute; top: 130px; left: 320px;"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -5,16 +5,26 @@ import { Keyboard } from "./source/keyboard/Keyboard";
|
|||
import { Screen } from "./source/screen/Screen";
|
||||
|
||||
function main() {
|
||||
const gatherer: Gatherer = new Gatherer([
|
||||
const humanGatherer: Gatherer = new Gatherer([
|
||||
new Screen('screen'),
|
||||
new Keyboard('keyboard', ['keydown']),
|
||||
new Mouse('mouse', ['click', 'mousemove'])
|
||||
]);
|
||||
|
||||
gatherer.start();
|
||||
//startPrediction(gatherer);
|
||||
startGathering(gatherer);
|
||||
|
||||
//startPrediction(gatherer);
|
||||
// startGathering([humanGatherer, botGatherer]);
|
||||
startGathering([humanGatherer])
|
||||
}
|
||||
|
||||
function getFlowName() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get('flowName');
|
||||
}
|
||||
|
||||
function getAgentName() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get('agentName');
|
||||
}
|
||||
|
||||
function startPrediction(gatherer: Gatherer) {
|
||||
|
|
@ -28,8 +38,11 @@ function startPrediction(gatherer: Gatherer) {
|
|||
}
|
||||
|
||||
|
||||
function startGathering(gatherer: Gatherer) {
|
||||
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4100/', 3000);
|
||||
function startGathering(gatherers: Array<Gatherer>) {
|
||||
for(const gatherer of gatherers ) {
|
||||
gatherer.start();
|
||||
|
||||
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4100/' + '?agentName='+getAgentName()+'&flowName='+getFlowName(), 1000);
|
||||
sender.start('ws')
|
||||
.subscribe(
|
||||
val => {
|
||||
|
|
@ -37,5 +50,6 @@ function startGathering(gatherer: Gatherer) {
|
|||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { interval, Observable, of } from 'rxjs';
|
||||
import { filter, flatMap, delay } from 'rxjs/operators';
|
||||
import { Rxios } from 'rxios';
|
||||
import {Data} from "../data/Data";
|
||||
import {Data} from "../shared/Data";
|
||||
|
||||
export class Sender {
|
||||
private url: string;
|
||||
|
|
@ -36,7 +36,6 @@ export class Sender {
|
|||
this.wsConnect.send(JSON.stringify(data));
|
||||
return new Observable((observer) => {
|
||||
this.wsConnect.onmessage = (msg) => {
|
||||
console.log(msg);
|
||||
observer.next(msg);
|
||||
};
|
||||
});
|
||||
|
|
|
|||
17
DataGatherer/src/shared/Data.ts
Normal file
17
DataGatherer/src/shared/Data.ts
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
export class Data {
|
||||
public name: string;
|
||||
public data: any;
|
||||
public timestamp: number;
|
||||
public size: {
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
|
||||
constructor(name: string, data: any, size: any, timestamp?: number) {
|
||||
this.name = name;
|
||||
this.data = data;
|
||||
this.timestamp = timestamp ? timestamp : Date.now();
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { Data } from "./../data/Data";
|
||||
import { Data } from "../shared/Data";
|
||||
|
||||
export class Source {
|
||||
private name: string;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Source } from '../Source';
|
||||
import {Data} from "../../data/Data";
|
||||
import {Data} from "../../shared/Data";
|
||||
|
||||
export class Mouse extends Source {
|
||||
|
||||
|
|
@ -8,11 +8,139 @@ export class Mouse extends Source {
|
|||
}
|
||||
|
||||
startCollect() {
|
||||
this.collectHumanDatas();
|
||||
}
|
||||
|
||||
collectHumanDatas() {
|
||||
for(const event of this.events){
|
||||
document.addEventListener(event, (e: MouseEvent) => {
|
||||
this.data.push(new Data(event, {x: e.x, y: e.y}, {width: window.innerWidth, height: window.innerHeight}));
|
||||
this.data.push(
|
||||
new Data(
|
||||
event,
|
||||
{
|
||||
x: e.x,
|
||||
y: e.y,
|
||||
target: {
|
||||
id: e.target['id'],
|
||||
innerText: e.target['innerText'],
|
||||
style: {
|
||||
backgroundColor: e.target['style'].backgroundColor
|
||||
},
|
||||
rect: e.target['getBoundingClientRect']()
|
||||
}
|
||||
}, {
|
||||
width: window.innerWidth,
|
||||
height: window.innerHeight
|
||||
}
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/*collectBotDatas(flow: Array<MouseEventFlow>) {
|
||||
|
||||
function getIntersectedElement(position: {x: number, y: number}) {
|
||||
//for()
|
||||
}
|
||||
|
||||
function computeMovement(startingPoint: {x: number, y: number}, targetId: string): Promise<Array<Data>> {
|
||||
return new Promise( (resolve, reject) => {
|
||||
let movements = [];
|
||||
|
||||
const target = document.getElementById(targetId);
|
||||
const targetCenterCoords = {x: target.getBoundingClientRect().left + target.getBoundingClientRect().width / 2, y: target.getBoundingClientRect().top + target.getBoundingClientRect().height / 2};
|
||||
|
||||
const distance_x = Math.abs(startingPoint.x - targetCenterCoords.x);
|
||||
const distance_y = Math.abs(startingPoint.y - targetCenterCoords.y);
|
||||
const distance = Math.sqrt(Math.pow(distance_x, 2) + Math.pow(distance_y, 2));
|
||||
|
||||
const movementTime = Math.random() * 5000 + 1000;
|
||||
|
||||
if(distance) {
|
||||
const trance = Math.floor(distance / 20);
|
||||
const step_x = distance_x / trance;
|
||||
const step_y = distance_y / trance;
|
||||
let i = 1;
|
||||
const interval = setInterval(() => {
|
||||
movements.push(new Data(
|
||||
'mousemove',
|
||||
{
|
||||
x: startingPoint.x > targetCenterCoords.x ? startingPoint.x - step_x * i : startingPoint.x + step_x * i ,
|
||||
y: startingPoint.y > targetCenterCoords.y ? startingPoint.y - step_y * i : startingPoint.y + step_y * i ,
|
||||
target: {
|
||||
id: '',
|
||||
innerText: '',
|
||||
style: {},
|
||||
rect: {}
|
||||
}
|
||||
}, {
|
||||
width: window.innerWidth,
|
||||
height: window.innerHeight
|
||||
})
|
||||
);
|
||||
i++;
|
||||
if(i > trance) {
|
||||
console.log(target);
|
||||
clearInterval(interval);
|
||||
resolve(movements);
|
||||
}
|
||||
}, movementTime / trance);
|
||||
} else {
|
||||
movements = [];
|
||||
resolve(movements);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function computeInit(): Data {
|
||||
return new Data(
|
||||
'mousemove',
|
||||
{
|
||||
x: Math.floor(Math.random() * window.innerWidth) + 1,
|
||||
y: Math.floor(Math.random() * window.innerHeight) + 1,
|
||||
target: {
|
||||
id: '',
|
||||
innerText: '',
|
||||
style: {},
|
||||
rect: {}
|
||||
}
|
||||
}, {
|
||||
width: window.innerWidth,
|
||||
height: window.innerHeight
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
let evt = flow[i];
|
||||
const interval = setInterval( () => {
|
||||
evt = flow[i];
|
||||
if(evt.type === 'init') {
|
||||
this.data.push(computeInit());
|
||||
i++;
|
||||
}
|
||||
|
||||
if(evt.type === 'mousemove') {
|
||||
computeMovement({x: this.data[this.data.length-1].data.x, y: this.data[this.data.length-1].data.y}, evt.target)
|
||||
.then(
|
||||
movements => {
|
||||
console.log(movements);
|
||||
this.data.push(...movements);
|
||||
i++;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if(evt.type === 'click') {
|
||||
i++;
|
||||
}
|
||||
|
||||
if(i === flow.length) {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, 20);
|
||||
|
||||
}*/
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Source } from '../Source';
|
||||
import Html2CanvasStatic from "html2canvas";
|
||||
import {Data} from "../../data/Data";
|
||||
import {Data} from "../../shared/Data";
|
||||
|
||||
export class Screen extends Source {
|
||||
|
||||
|
|
@ -9,7 +9,7 @@ export class Screen extends Source {
|
|||
}
|
||||
|
||||
public startCollect() {
|
||||
const interval = setInterval(() => {
|
||||
/* const interval = setInterval(() => {
|
||||
if (document.body) {
|
||||
Html2CanvasStatic(document.body, {logging: false})
|
||||
.then((canvas) => {
|
||||
|
|
@ -17,6 +17,6 @@ export class Screen extends Source {
|
|||
this.data.push(new Data('screen', imgData, {width: window.innerWidth, height: window.innerHeight}))
|
||||
});
|
||||
}
|
||||
}, 5000);
|
||||
}, 500);*/
|
||||
}
|
||||
}
|
||||
|
|
|
|||
462
DataGeneratorPuppets/package-lock.json
generated
Normal file
462
DataGeneratorPuppets/package-lock.json
generated
Normal file
|
|
@ -0,0 +1,462 @@
|
|||
{
|
||||
"name": "datageneratorpuppets",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@types/events": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
||||
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "11.13.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.4.tgz",
|
||||
"integrity": "sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/ws": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz",
|
||||
"integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/events": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
|
||||
"integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
|
||||
"requires": {
|
||||
"es6-promisify": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"arg": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
|
||||
"integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==",
|
||||
"dev": true
|
||||
},
|
||||
"async-limiter": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"buffer-from": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
},
|
||||
"concat-stream": {
|
||||
"version": "1.6.2",
|
||||
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
|
||||
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
|
||||
"requires": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"inherits": "^2.0.3",
|
||||
"readable-stream": "^2.2.2",
|
||||
"typedarray": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"diff": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
||||
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
|
||||
"dev": true
|
||||
},
|
||||
"es6-promise": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
|
||||
"integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q=="
|
||||
},
|
||||
"es6-promisify": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
|
||||
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
|
||||
"requires": {
|
||||
"es6-promise": "^4.0.3"
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
|
||||
"integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esrecurse": "^4.1.0",
|
||||
"estraverse": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
|
||||
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
|
||||
"dev": true
|
||||
},
|
||||
"esrecurse": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
|
||||
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
|
||||
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
|
||||
"dev": true
|
||||
},
|
||||
"extract-zip": {
|
||||
"version": "1.6.7",
|
||||
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
|
||||
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
|
||||
"requires": {
|
||||
"concat-stream": "1.6.2",
|
||||
"debug": "2.6.9",
|
||||
"mkdirp": "0.5.1",
|
||||
"yauzl": "2.4.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
}
|
||||
}
|
||||
},
|
||||
"fd-slicer": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
|
||||
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
|
||||
"requires": {
|
||||
"pend": "~1.2.0"
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
|
||||
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
|
||||
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
|
||||
"requires": {
|
||||
"agent-base": "^4.1.0",
|
||||
"debug": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"requires": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"lodash.unescape": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
|
||||
"integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=",
|
||||
"dev": true
|
||||
},
|
||||
"make-error": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
|
||||
"integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
|
||||
"dev": true
|
||||
},
|
||||
"mime": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz",
|
||||
"integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg=="
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
||||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||
},
|
||||
"pend": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
|
||||
},
|
||||
"progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
|
||||
},
|
||||
"proxy-from-env": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
|
||||
"integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4="
|
||||
},
|
||||
"puppeteer": {
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.14.0.tgz",
|
||||
"integrity": "sha512-SayS2wUX/8LF8Yo2Rkpc5nkAu4Jg3qu+OLTDSOZtisVQMB2Z5vjlY2TdPi/5CgZKiZroYIiyUN3sRX63El9iaw==",
|
||||
"requires": {
|
||||
"debug": "^4.1.0",
|
||||
"extract-zip": "^1.6.6",
|
||||
"https-proxy-agent": "^2.2.1",
|
||||
"mime": "^2.0.3",
|
||||
"progress": "^2.0.1",
|
||||
"proxy-from-env": "^1.0.0",
|
||||
"rimraf": "^2.6.1",
|
||||
"ws": "^6.1.0"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
||||
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
||||
"requires": {
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
|
||||
"dev": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
},
|
||||
"source-map-support": {
|
||||
"version": "0.5.12",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
|
||||
"integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"source-map": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"ts-node": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.0.tgz",
|
||||
"integrity": "sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"arg": "^4.1.0",
|
||||
"diff": "^3.1.0",
|
||||
"make-error": "^1.1.1",
|
||||
"source-map-support": "^0.5.6",
|
||||
"yn": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
|
||||
},
|
||||
"typescript": {
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz",
|
||||
"integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==",
|
||||
"dev": true
|
||||
},
|
||||
"typescript-eslint-parser": {
|
||||
"version": "22.0.0",
|
||||
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-22.0.0.tgz",
|
||||
"integrity": "sha512-pD8D7oTeRwWvFVxK3PaY6FYAiZsuRXFkIc2+1xkwCT3NduySgCgjeAkR5/dnIWecOiFVcEHf4ypXurF02Q6Z3Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-scope": "^4.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"typescript-estree": "18.0.0"
|
||||
}
|
||||
},
|
||||
"typescript-estree": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/typescript-estree/-/typescript-estree-18.0.0.tgz",
|
||||
"integrity": "sha512-HxTWrzFyYOPWA91Ij7xL9mNUVpGTKLH2KiaBn28CMbYgX2zgWdJqU9hO7Are+pAPAqY91NxAYoaAyDDZ3rLj2A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash.unescape": "4.0.1",
|
||||
"semver": "5.5.0"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"ws": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
||||
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
|
||||
"requires": {
|
||||
"async-limiter": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"yauzl": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
|
||||
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
|
||||
"requires": {
|
||||
"fd-slicer": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"yn": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz",
|
||||
"integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
||||
22
DataGeneratorPuppets/package.json
Normal file
22
DataGeneratorPuppets/package.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"name": "datageneratorpuppets",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"build:puppet": "tsc -w",
|
||||
"dev:puppet": "ts-node src/main.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^11.13.0",
|
||||
"@types/ws": "^6.0.1",
|
||||
"ts-node": "^8.0.3",
|
||||
"typescript": "^3.4.2",
|
||||
"typescript-eslint-parser": "^22.0.0"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"puppeteer": "^1.14.0"
|
||||
}
|
||||
}
|
||||
50
DataGeneratorPuppets/src/Puppet.ts
Normal file
50
DataGeneratorPuppets/src/Puppet.ts
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import puppeteer from 'puppeteer';
|
||||
|
||||
export class Puppet {
|
||||
public flow: { type: string; target: {x: number, y: number, width: number, height: number} }[];
|
||||
public url: string;
|
||||
public flowName: string;
|
||||
public agentName: string;
|
||||
|
||||
mousePosition: {x: number, y: number} = {x:0, y:0};
|
||||
|
||||
constructor(url: string, flowName: string, agentName: string, flow: { type: string; target: {x: number, y: number, width: number, height: number}}[]){
|
||||
this.url = url;
|
||||
this.flow = flow;
|
||||
this.flowName = flowName;
|
||||
this.agentName = agentName;
|
||||
}
|
||||
|
||||
async execMovements(page, flow: {type: string; target: {x: number, y: number, width: number, height: number} }[]){
|
||||
|
||||
function humanize(val: number, bounduaries: {min: number, max: number}) {
|
||||
console.log(val);
|
||||
console.log(Math.random() * Math.abs(bounduaries.max));
|
||||
return val + (Math.random() * Math.abs(bounduaries.max));
|
||||
}
|
||||
|
||||
try {
|
||||
await page.goto('file:///C:/Users/Lorenzo/UserflowPredictorSystem/DataGatherer/src/index.html?flowName='+this.flowName+'&agentName=' + this.agentName, {waitUntil: 'load'});
|
||||
for(const movement of flow){
|
||||
let boundariesX = {min: movement.target.x, max: movement.target.width};
|
||||
let boundariesY = {min: movement.target.y, max: movement.target.height};
|
||||
if(movement.type === 'click') {
|
||||
await page.mouse.click(humanize(movement.target.x, boundariesX), humanize(movement.target.y, boundariesY), {delay: Math.random() * 500 + 100});
|
||||
}
|
||||
if(movement.type === 'mousemove') {
|
||||
await page.mouse.move(humanize(movement.target.x, boundariesX), humanize(movement.target.y, boundariesY), {steps: Math.random() * 100 + 50});
|
||||
}
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.log('ERR:', err.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async run() {
|
||||
const browser = await puppeteer.launch({headless: false});
|
||||
const page = await browser.newPage();
|
||||
await this.execMovements(page, this.flow);
|
||||
}
|
||||
}
|
||||
9
DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts
Normal file
9
DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
export class MouseEventFlow {
|
||||
public type: 'mousemove' | 'click' | 'init';
|
||||
public target: string;
|
||||
|
||||
constructor(type: 'mousemove' | 'click', target: string) {
|
||||
this.type = name;
|
||||
this.target = target;
|
||||
}
|
||||
}
|
||||
13
DataGeneratorPuppets/src/main.ts
Normal file
13
DataGeneratorPuppets/src/main.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import {Puppet} from "./Puppet";
|
||||
import {flows} from "../../DataGeneratorPuppets/src/datas/flow";
|
||||
|
||||
function main() {
|
||||
|
||||
for(let i = 0; i < 30; i++) {
|
||||
let flowIndex = Math.floor(Math.random() * flows.length + 0);
|
||||
const puppet = new Puppet('', flows[flowIndex].name, 'bot_'+i, flows[flowIndex].data);
|
||||
puppet.run();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
20
DataGeneratorPuppets/tsconfig.json
Normal file
20
DataGeneratorPuppets/tsconfig.json
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"sourceMap": true,
|
||||
"module": "commonjs",
|
||||
"esModuleInterop": true,
|
||||
"resolveJsonModule": true,
|
||||
"outDir": "dist",
|
||||
"experimentalDecorators": true,
|
||||
"target": "es5",
|
||||
"jsx": "react",
|
||||
"lib": [
|
||||
"dom",
|
||||
"es6"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"compileOnSave": true
|
||||
}
|
||||
16
Predictor/PredictorWebService/package-lock.json
generated
16
Predictor/PredictorWebService/package-lock.json
generated
|
|
@ -988,8 +988,7 @@
|
|||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
|
|
@ -1100,8 +1099,7 @@
|
|||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
|
|
@ -1111,7 +1109,6 @@
|
|||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
|
|
@ -1223,8 +1220,7 @@
|
|||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
|
|
@ -1339,7 +1335,6 @@
|
|||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
|
|
@ -2346,6 +2341,11 @@
|
|||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||
},
|
||||
"query-string-parser": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/query-string-parser/-/query-string-parser-0.2.3.tgz",
|
||||
"integrity": "sha512-t8us5B2sj4pnMXxRkRE0B5NM7YeevFPew1ijr3uiv8AXVY4I6LwQRECxe6ZRmMJarmihhzgcjJmjbPGrMWg7iA=="
|
||||
},
|
||||
"range-parser": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
"cors": "^2.8.5",
|
||||
"express": "^4.16.4",
|
||||
"nodemon": "^1.18.10",
|
||||
"query-string-parser": "^0.2.3",
|
||||
"ws": "^6.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -20,10 +21,11 @@
|
|||
"typescript-eslint-parser": "^22.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc -w",
|
||||
"dev": "ts-node ./src/main.ts",
|
||||
"start": "nodemon ./dist/main.js",
|
||||
"prod": "npm run build && npm run start"
|
||||
"build:ws": "tsc -w",
|
||||
"dev:ws": "ts-node src/predictor-web-service/main.ts",
|
||||
"dev:imageCreator": "ts-node src/image-creator/main.ts",
|
||||
"start:ws": "nodemon ./dist/main.js",
|
||||
"prod:ws": "npm run build:ws && npm run start:ws"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,158 @@
|
|||
import {Data} from "../../../../DataGatherer/src/shared/Data";
|
||||
import {createCanvas, Image} from "canvas";
|
||||
import fs from "fs";
|
||||
|
||||
export class ImageCreatorService {
|
||||
|
||||
createImageFromData(data: Array<Data>, name: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const htmlElements = data.filter( val => {
|
||||
return val.name !== 'screen';
|
||||
});
|
||||
const mouseClicks = data.filter(val => {
|
||||
return val.name === 'click';
|
||||
});
|
||||
|
||||
const mouseMovements = data.filter(val => {
|
||||
return val.name === 'mousemove';
|
||||
});
|
||||
|
||||
const keyboard = data.filter(val => {
|
||||
return val.name === 'keydown';
|
||||
});
|
||||
|
||||
//todo da cambiare le dimensioni e renderle dinamiche
|
||||
const canvas = createCanvas(1000, 800);
|
||||
const ctx = canvas.getContext('2d');
|
||||
this.printHTMLElements(htmlElements, ctx);
|
||||
this.printMouseClick(mouseClicks, ctx);
|
||||
this.printMouseMove(mouseMovements, ctx);
|
||||
this.printKeyboard(keyboard, ctx);
|
||||
const base64data = canvas.toBuffer();
|
||||
resolve({data: base64data, name: name});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
saveImage(base64datas: any, path: string) {
|
||||
fs.writeFile(path, base64datas, 'base64', function (err) {
|
||||
if (err) throw err;
|
||||
console.log('Image saved');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
applyDataToImage(data: Array<Data>, name: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const mouseClicks = data.filter(val => {
|
||||
return val.name === 'click';
|
||||
});
|
||||
const mouseMovements = data.filter(val => {
|
||||
return val.name === 'mousemove';
|
||||
});
|
||||
const keyboard = data.filter(val => {
|
||||
return val.name === 'keydown';
|
||||
});
|
||||
const image: any = data.filter(val => {
|
||||
return val.name === 'screen';
|
||||
})[0];
|
||||
|
||||
if (image) {
|
||||
const canvas = createCanvas(image.size.width, image.size.height);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const img = new Image();
|
||||
img.onload = () => {
|
||||
this.printImage(img, ctx);
|
||||
this.printMouseClick(mouseClicks, ctx);
|
||||
this.printMouseMove(mouseMovements, ctx);
|
||||
this.printKeyboard(keyboard, ctx);
|
||||
const base64data = canvas.toBuffer();
|
||||
resolve({data: base64data, name: name});
|
||||
};
|
||||
img.onerror = err => {
|
||||
throw err
|
||||
};
|
||||
img.src = image.data;
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
printMouseClick(mouseclicks: Array<Data>, ctx: CanvasRenderingContext2D) {
|
||||
ctx.strokeStyle = 'rgba(219, 10, 91, 0.5)';
|
||||
ctx.lineWidth = 5;
|
||||
ctx.beginPath();
|
||||
for(const move of mouseclicks){
|
||||
ctx.strokeRect(move.data.x, move.data.y,10, 10);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
printHTMLElements(htmlElements: Array<Data>, ctx: CanvasRenderingContext2D) {
|
||||
ctx.strokeStyle = 'rgba(33, 123, 22, 0.5)';
|
||||
ctx.lineWidth = 2;
|
||||
ctx.beginPath();
|
||||
for(const element of htmlElements){
|
||||
ctx.fillStyle = element.data.target.style.backgroundColor !== '' ? element.data.target.style.backgroundColor : 'transparent';
|
||||
ctx.fillRect(element.data.target.rect.x, element.data.target.rect.y, element.data.target.rect.width, element.data.target.rect.height);
|
||||
ctx.strokeRect(element.data.target.rect.x, element.data.target.rect.y, element.data.target.rect.width, element.data.target.rect.height);
|
||||
ctx.font = "10px Arial";
|
||||
ctx.fillStyle = 'black';
|
||||
ctx.textAlign = "center";
|
||||
ctx.fillText(element.data.target.id, element.data.target.rect.x + element.data.target.rect.width/2, element.data.target.rect.y + element.data.target.rect.height/2);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
printMouseMove(mousemoves: Array<Data>, ctx: CanvasRenderingContext2D) {
|
||||
ctx.strokeStyle = 'rgba(0,0,0,0.8)';
|
||||
ctx.lineWidth = 5;
|
||||
ctx.beginPath();
|
||||
for(const move of mousemoves){
|
||||
ctx.lineTo(move.data.x, move.data.y);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
printKeyboard(keyboard: Array<Data>, ctx: CanvasRenderingContext2D) {
|
||||
|
||||
}
|
||||
|
||||
printImage(image: any, ctx: CanvasRenderingContext2D){
|
||||
ctx.drawImage(image, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
public startProcessing(srcPath: string, destPath: string) {
|
||||
const that = this;
|
||||
fs.readdir(srcPath, function(err, items) {
|
||||
|
||||
for (var i=0; i<items.length; i++) {
|
||||
const data = fs.readFileSync(srcPath + '/' + items[i]);
|
||||
try {
|
||||
const jsonData = JSON.parse(data.toString('utf8'));
|
||||
fs.mkdirSync('./trainingImages/virtual/' + destPath, {recursive: true});
|
||||
that.createImageFromData(jsonData, items[i].split('.')[0])
|
||||
.then(res => {
|
||||
if(res) {
|
||||
console.log('virtual image ' + ' processed');
|
||||
that.saveImage(res['data'], './trainingImages/virtual/' + destPath + '/' + res['name'] + '.png');
|
||||
}
|
||||
});
|
||||
|
||||
that.applyDataToImage(jsonData, items[i].split('.')[0])
|
||||
.then(res => {
|
||||
if(res) {
|
||||
console.log('real image ' + ' processed');
|
||||
that.saveImage(res['data'], './trainingImages/real/' + destPath + '/' + res['name'] + '.png');
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('file not valid');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
11
Predictor/PredictorWebService/src/image-creator/main.ts
Normal file
11
Predictor/PredictorWebService/src/image-creator/main.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import {ImageCreatorService} from "./ImageCreatorService";
|
||||
|
||||
function main() {
|
||||
const imageCreatorService = new ImageCreatorService();
|
||||
imageCreatorService.startProcessing('./trainingDatas/flow1', 'flow1');
|
||||
imageCreatorService.startProcessing('./trainingDatas/flow2', 'flow2');
|
||||
imageCreatorService.startProcessing('./trainingDatas/flow3', 'flow3');
|
||||
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
import { PredictorWebService } from "./predictor-web-service/PredictorWebService";
|
||||
|
||||
function main() {
|
||||
const predictorWebService = new PredictorWebService('/', 4000, 4100);
|
||||
predictorWebService.startExpress();
|
||||
predictorWebService.startWebSocket();
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
@ -4,8 +4,8 @@ import * as http from 'http';
|
|||
import cors from 'cors';
|
||||
import * as bodyParser from "body-parser";
|
||||
import fs from 'fs';
|
||||
import {Data} from "../../../../DataGatherer/src/data/Data";
|
||||
import {createCanvas, Image} from "canvas";
|
||||
import {Data} from "../../../../DataGatherer/src/shared/Data";
|
||||
import parser from 'query-string-parser';
|
||||
|
||||
export class PredictorWebService {
|
||||
|
||||
|
|
@ -16,44 +16,40 @@ export class PredictorWebService {
|
|||
private httpServer: http.Server;
|
||||
private wss: WebSocket.Server;
|
||||
|
||||
private counter: number = 0;
|
||||
|
||||
private oldImageData: Data;
|
||||
constructor(url: string, portApi: number, portWebSocket: number) {
|
||||
this.url = url;
|
||||
this.portApi = portApi;
|
||||
this.portWebSocket = portWebSocket;
|
||||
}
|
||||
|
||||
public startWebSocket() {
|
||||
public startTrainer() {
|
||||
this.httpServer = http.createServer(this.app);
|
||||
this.wss = new WebSocket.Server({port: this.portWebSocket});
|
||||
|
||||
this.wss.on('connection', (ws: WebSocket) => {
|
||||
this.wss.on('connection', (ws: WebSocket, req: any) => {
|
||||
let url = require('url').parse(req.url).query;
|
||||
const queryObj = parser.fromQuery(url);
|
||||
const that = this;
|
||||
ws.on('message', (message: string) => {
|
||||
const jsonMsg = JSON.parse(message);
|
||||
const data: Array<Data> = jsonMsg.map(d => new Data(d.name, d.data, d.size, d.timestamp));
|
||||
let image = data.find(val => {
|
||||
return val.getName() === 'screen';
|
||||
});
|
||||
if(image) {
|
||||
that.saveImage(image);
|
||||
that.applyDataToImage(image, data)
|
||||
.then(val => {
|
||||
ws.send(val);
|
||||
});
|
||||
} else {
|
||||
that.applyDataToImage(that.oldImageData, data)
|
||||
.then(val => {
|
||||
ws.send(val);
|
||||
});
|
||||
that.counter++;
|
||||
that.saveData(data, queryObj.flowName, queryObj.agentName)
|
||||
.then( (msg) => {
|
||||
if(msg === 'ok') {
|
||||
ws.send('trainer - Data saved');
|
||||
}
|
||||
})
|
||||
.catch( (err) => {
|
||||
ws.send('trainer - Error while saving data');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public startExpress() {
|
||||
const that = this;
|
||||
public startPredictor() {
|
||||
this.app = express();
|
||||
this.app.use(cors());
|
||||
this.app.use(bodyParser.json());
|
||||
|
|
@ -63,83 +59,38 @@ export class PredictorWebService {
|
|||
function generateFakeResponse() {
|
||||
return Array.from({length: 20}, () => Math.random().toPrecision(2));
|
||||
}
|
||||
console.log('Request prediction');
|
||||
console.log('predictor - Request prediction');
|
||||
res.send(generateFakeResponse());
|
||||
});
|
||||
|
||||
this.app.listen(this.portApi, () => {
|
||||
console.log('PredictorWebService is up and running on port: %d', this.portApi);
|
||||
console.log('predictor - up and running on port: %d', this.portApi);
|
||||
});
|
||||
}
|
||||
|
||||
printMouseClick(mouseclicks: Array<Data>, ctx: any) {
|
||||
ctx.strokeStyle = 'rgba(219, 10, 91, 0.5)';
|
||||
ctx.lineWidth = 5;
|
||||
ctx.beginPath();
|
||||
for(const move of mouseclicks){
|
||||
ctx.strokeRect(move.getData().x, move.getData().y,10, 10);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
printMouseMove(mousemoves: Array<Data>, ctx: any) {
|
||||
ctx.strokeStyle = 'rgba(0,0,0,0.8)';
|
||||
ctx.lineWidth = 5;
|
||||
ctx.beginPath();
|
||||
for(const move of mousemoves){
|
||||
ctx.lineTo(move.getData().x, move.getData().y);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
printKeyboard(keyboard: Array<Data>, ctx: any) {
|
||||
|
||||
}
|
||||
|
||||
printImage(image: Image, ctx: any){
|
||||
ctx.drawImage(image, 0, 0);
|
||||
}
|
||||
|
||||
applyDataToImage(image: Data, data: Array<Data>) {
|
||||
saveData(data: Array<Data>, flowName: string, agentName: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const mouseClicks = data.filter(val => {
|
||||
return val.getName() === 'click';
|
||||
});
|
||||
const mouseMovements = data.filter(val => {
|
||||
return val.getName() === 'mousemove';
|
||||
});
|
||||
const keyboard = data.filter(val => {
|
||||
return val.getName() === 'keydown';
|
||||
});
|
||||
if (image) {
|
||||
const canvas = createCanvas(image.getSize().width, image.getSize().height);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const img = new Image();
|
||||
img.onload = () => {
|
||||
this.printImage(img, ctx);
|
||||
this.printMouseClick(mouseClicks, ctx);
|
||||
this.printMouseMove(mouseMovements, ctx);
|
||||
this.printKeyboard(keyboard, ctx);
|
||||
const base64data = canvas.toBuffer();
|
||||
fs.writeFile('./trainingDatas/' + image.getTimestamp() + '-' + Date.now() + '.png', base64data, 'base64', function (err) {
|
||||
if (err) throw err;
|
||||
console.log('File saved.');
|
||||
resolve('ok - image received');
|
||||
})
|
||||
};
|
||||
img.onerror = err => {
|
||||
throw err
|
||||
};
|
||||
img.src = image.getData();
|
||||
console.log(flowName);
|
||||
console.log(agentName);
|
||||
if(flowName && agentName) {
|
||||
fs.mkdirSync('./trainingDatas/' + flowName + '/', { recursive: true });
|
||||
} else {
|
||||
resolve('ok - only datas');
|
||||
fs.mkdirSync('./trainingDatas/undefined', { recursive: true });
|
||||
}
|
||||
if(!flowName && !agentName) {
|
||||
fs.writeFile('./trainingDatas/undefined/' + this.counter + '.json', JSON.stringify(data), 'utf8', function (err) {
|
||||
if (err) reject('err');
|
||||
console.log('Data saved');
|
||||
resolve('ok');
|
||||
});
|
||||
} else {
|
||||
fs.writeFile('./trainingDatas/' + flowName + '/' + agentName + '_' + this.counter + '.json', JSON.stringify(data), 'utf8', function (err) {
|
||||
if (err) reject('err');
|
||||
console.log('Data saved');
|
||||
resolve('ok');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
saveImage(image: Data) {
|
||||
if(image) {
|
||||
this.oldImageData = image;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
import { PredictorWebService } from "./PredictorWebService";
|
||||
|
||||
function main() {
|
||||
const predictorWebService = new PredictorWebService('/', 4000, 4100);
|
||||
predictorWebService.startPredictor();
|
||||
predictorWebService.startTrainer();
|
||||
}
|
||||
|
||||
main();
|
||||
Loading…
Add table
Add a link
Reference in a new issue