convert-csv-to-json 1.1.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,67 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ master ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ master ]
20
+ schedule:
21
+ - cron: '16 4 * * 6'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ language: [ 'javascript' ]
32
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
33
+ # Learn more:
34
+ # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
35
+
36
+ steps:
37
+ - name: Checkout repository
38
+ uses: actions/checkout@v2
39
+
40
+ # Initializes the CodeQL tools for scanning.
41
+ - name: Initialize CodeQL
42
+ uses: github/codeql-action/init@v1
43
+ with:
44
+ languages: ${{ matrix.language }}
45
+ # If you wish to specify custom queries, you can do so here or in a config file.
46
+ # By default, queries listed here will override any specified in a config file.
47
+ # Prefix the list here with "+" to use these queries and those in the config file.
48
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
49
+
50
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
51
+ # If this step fails, then you should remove it and run the build manually (see below)
52
+ - name: Autobuild
53
+ uses: github/codeql-action/autobuild@v1
54
+
55
+ # ℹ️ Command-line programs to run using the OS shell.
56
+ # 📚 https://git.io/JvXDl
57
+
58
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
59
+ # and modify them (or add more) to build your code if your project
60
+ # uses a compiled language
61
+
62
+ #- run: |
63
+ # make bootstrap
64
+ # make release
65
+
66
+ - name: Perform CodeQL Analysis
67
+ uses: github/codeql-action/analyze@v1
@@ -9,7 +9,7 @@ jobs:
9
9
 
10
10
  strategy:
11
11
  matrix:
12
- node-version: [10.x, 12.x]
12
+ node-version: [10.x, 12.x, 14.x]
13
13
 
14
14
  steps:
15
15
  - uses: actions/checkout@v1
package/.idea/misc.xml CHANGED
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
- <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
3
+ <component name="ProjectRootManager">
4
4
  <output url="file://$PROJECT_DIR$/out" />
5
5
  </component>
6
6
  </project>
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # CSVtoJSON
2
- [![Build Status](https://travis-ci.org/iuccio/csvToJson.svg?branch=master)](https://travis-ci.org/iuccio/csvToJson) [![Code Climate](https://codeclimate.com/github/iuccio/csvToJson/badges/gpa.svg)](https://codeclimate.com/github/iuccio/csvToJson)
2
+ [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/iuccio/csvToJson/Node%20CI?label=Build)](https://github.com/iuccio/csvToJson/actions?query=workflow%3A%22Node+CI%22)
3
+ [![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/iuccio/csvToJson/CodeQL/master?label=CodeQL)](https://github.com/iuccio/csvToJson/actions?query=workflow%3ACodeQL)
4
+ [![Code Climate](https://codeclimate.com/github/iuccio/csvToJson/badges/gpa.svg)](https://codeclimate.com/github/iuccio/csvToJson)
3
5
  [![NPM Version](https://img.shields.io/npm/v/convert-csv-to-json.svg)](https://npmjs.org/package/convert-csv-to-json)
4
6
  [![Downloads](https://img.shields.io/npm/dm/convert-csv-to-json.svg)](https://npmjs.org/package/convert-csv-to-json)
5
7
 
@@ -12,6 +14,7 @@
12
14
  1. [Usage](#usage)
13
15
  * [Generate JSON file](#generate-json-file)
14
16
  * [Generate Array of Object in JSON format](#generate-array-of-object-in-json-format)
17
+ * [Generate Object with sub array](#generate-object-with-sub-array)
15
18
  * [Define field delimiter](#define-field-delimiter)
16
19
  * [Format property value by type](#format-property-value-by-type)
17
20
  * [Number](#number)
@@ -100,22 +103,49 @@ for(let i=0; i<json.length;i++){
100
103
  console.log(json[i]);
101
104
  }
102
105
  ```
106
+
107
+ #### Generate Object with sub array
108
+ ```
109
+ firstName;lastName;email;gender;age;birth;sons
110
+ Constantin;Langsdon;clangsdon0@hc360.com;Male;96;10.02.1965;*diego,marek,dries*
111
+ ```
112
+ Given the above CSV example, to generate a JSON Object with properties that contains sub Array, like the property **sons**
113
+ with the values <b>*diego,marek,dries*</b> you have to call the function ```parseSubArray(delimiter, separator)``` .
114
+ To generate the JSON Object with sub array from the above CSV example:
115
+ ```js
116
+ csvToJson.parseSubArray('*',',').getJsonFromCsv('myInputFile.csv');
117
+ ```
118
+ The result will be:
119
+ ```json
120
+ [
121
+ {
122
+ "firstName": "Constantin",
123
+ "lastName": "Langsdon",
124
+ "email": "clangsdon0@hc360.com",
125
+ "gender": "Male",
126
+ "age": "96",
127
+ "birth": "10.02.1965",
128
+ "sons": ["diego","marek","dries"]
129
+ }
130
+ ]
131
+ ```
132
+
103
133
  #### Define field delimiter
104
- As default the filed delimiter is the **semicolon** (**;**). You can define another field delimiter
105
- by call the function ```fieldDelimiter(myDilimiter)```.
106
- If you want that the field delimiter is a **~**:
134
+ A field delimiter is needed to split the parsed values. As default the field delimiter is the **semicolon** (**;**), this means that during the parsing when a **semicolon (;)** is matched a new JSON entry is created.
135
+ In case your CSV file has defined another field delimiter you have to call the function ```fieldDelimiter(myDelimiter)``` and pass it as parameter the field delimiter.
136
+
137
+ E.g. if your field delimiter is the comma **,** then:
107
138
 
108
139
  ```js
109
- csvToJson.fieldDelimiter('~').getJsonFromCsv(fileInputName);
140
+ csvToJson.fieldDelimiter(',').getJsonFromCsv(fileInputName);
110
141
  ```
111
142
 
112
-
113
143
  #### Format property value by type
114
- If you want that a number will be printed as a Number type, and values *true* or *false* is printed as a Boolean Type, use:
144
+ If you want that a number will be printed as a Number type, and values *true* or *false* is printed as a boolean Type, use:
115
145
  ```js
116
146
  csvToJson.formatValueByType().getJsonFromCsv(fileInputName);
117
147
  ```
118
- In this case the result will be:
148
+ For example:
119
149
 
120
150
  ```json
121
151
  [
package/index.js CHANGED
@@ -15,8 +15,8 @@ const encodingOps = {
15
15
  /**
16
16
  * Prints a digit as Number type (for example 32 instead of '32')
17
17
  */
18
- exports.formatValueByType = function () {
19
- csvToJson.formatValueByType();
18
+ exports.formatValueByType = function (active = true) {
19
+ csvToJson.formatValueByType(active);
20
20
  return this;
21
21
  };
22
22
 
@@ -28,6 +28,14 @@ exports.fieldDelimiter = function (delimiter) {
28
28
  return this;
29
29
  };
30
30
 
31
+ /**
32
+ * Defines how to match and parse a sub array
33
+ */
34
+ exports.parseSubArray = function (delimiter, separator) {
35
+ csvToJson.parseSubArray(delimiter, separator);
36
+ return this;
37
+ };
38
+
31
39
  /**
32
40
  * Defines a custom encoding to decode a file
33
41
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "convert-csv-to-json",
3
- "version": "1.1.0",
3
+ "version": "1.3.2",
4
4
  "description": "Convert CSV to JSON",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -35,8 +35,8 @@
35
35
  },
36
36
  "homepage": "https://github.com/iuccio/CSVtoJSON#readme",
37
37
  "devDependencies": {
38
- "chai": "^4.2.0",
38
+ "chai": "^4.3.6",
39
39
  "chai-fs": "^2.0.0",
40
- "mocha": "^8.2.1"
40
+ "mocha": "^9.2.0"
41
41
  }
42
42
  }
package/src/csvToJson.js CHANGED
@@ -9,8 +9,8 @@ const defaultFieldDelimiter = ";";
9
9
 
10
10
  class CsvToJson {
11
11
 
12
- formatValueByType() {
13
- this.printValueFormatByType = true;
12
+ formatValueByType(active) {
13
+ this.printValueFormatByType = active;
14
14
  return this;
15
15
  }
16
16
 
@@ -19,6 +19,11 @@ class CsvToJson {
19
19
  return this;
20
20
  }
21
21
 
22
+ parseSubArray(delimiter = '*',separator = ',') {
23
+ this.parseSubArrayDelimiter = delimiter;
24
+ this.parseSubArraySeparator = separator;
25
+ }
26
+
22
27
  encoding(encoding){
23
28
  this.encoding = encoding;
24
29
  return this;
@@ -71,16 +76,45 @@ class CsvToJson {
71
76
  let jsonObject = {};
72
77
  for (let j = 0; j < headers.length; j++) {
73
78
  let propertyName = stringUtils.trimPropertyName(headers[j]);
74
-
75
79
  let value = currentLine[j];
76
- if (this.printValueFormatByType) {
80
+
81
+ if(this.isParseSubArray(value)){
82
+ value = this.buildJsonSubArray(value);
83
+ }
84
+
85
+ if (this.printValueFormatByType && !Array.isArray(value)) {
77
86
  value = stringUtils.getValueFormatByType(currentLine[j]);
78
87
  }
88
+
79
89
  jsonObject[propertyName] = value;
80
90
  }
81
91
  return jsonObject;
82
92
  }
83
93
 
94
+ buildJsonSubArray(value) {
95
+ let extractedValues = value.substring(
96
+ value.indexOf(this.parseSubArrayDelimiter) + 1,
97
+ value.lastIndexOf(this.parseSubArrayDelimiter)
98
+ );
99
+ extractedValues.trim();
100
+ value = extractedValues.split(this.parseSubArraySeparator);
101
+ if(this.printValueFormatByType){
102
+ for(let i=0; i < value.length; i++){
103
+ value[i] = stringUtils.getValueFormatByType(value[i]);
104
+ }
105
+ }
106
+ return value;
107
+ }
108
+
109
+ isParseSubArray(value){
110
+ if(this.parseSubArrayDelimiter){
111
+ if (value && (value.indexOf(this.parseSubArrayDelimiter) === 0 && value.lastIndexOf(this.parseSubArrayDelimiter) === (value.length - 1))) {
112
+ return true;
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+
84
118
  }
85
119
 
86
120
  module.exports = new CsvToJson();
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="JSHint" enabled="true" level="ERROR" enabled_by_default="true" />
5
- </profile>
6
- </component>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="JavaScriptLibraryMappings">
4
- <file url="file://$PROJECT_DIR$" libraries="{Node.js Core}" />
5
- </component>
6
- </project>
@@ -1,16 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="JSHintConfiguration" version="2.11.1" use-config-file="true" use-custom-config-file="true" custom-config-file-path="$PROJECT_DIR$/.jshintrc">
4
- <option bitwise="true" />
5
- <option browser="true" />
6
- <option curly="true" />
7
- <option eqeqeq="true" />
8
- <option forin="true" />
9
- <option maxerr="50" />
10
- <option noarg="true" />
11
- <option noempty="true" />
12
- <option nonew="true" />
13
- <option strict="true" />
14
- <option undef="true" />
15
- </component>
16
- </project>
@@ -1,321 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="BranchesTreeState">
4
- <expand />
5
- <select />
6
- </component>
7
- <component name="ChangeListManager">
8
- <list default="true" id="63c6a5c0-49c2-42ce-813a-e2299b3d6afa" name="Default Changelist" comment="">
9
- <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
10
- </list>
11
- <option name="SHOW_DIALOG" value="false" />
12
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
13
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
14
- <option name="LAST_RESOLUTION" value="IGNORE" />
15
- </component>
16
- <component name="Git.Settings">
17
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
18
- </component>
19
- <component name="MavenImportPreferences">
20
- <option name="generalSettings">
21
- <MavenGeneralSettings>
22
- <option name="mavenHome" value="$APPLICATION_HOME_DIR$/plugins/maven/lib/maven3" />
23
- </MavenGeneralSettings>
24
- </option>
25
- </component>
26
- <component name="ProjectId" id="1lc9YTbmKvxlewVApsjcpht3Geq" />
27
- <component name="ProjectViewState">
28
- <option name="autoscrollFromSource" value="true" />
29
- <option name="hideEmptyMiddlePackages" value="true" />
30
- <option name="showLibraryContents" value="true" />
31
- </component>
32
- <component name="PropertiesComponent">
33
- <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
34
- <property name="WebServerToolWindowFactoryState" value="false" />
35
- <property name="aspect.path.notification.shown" value="true" />
36
- <property name="javascript.nodejs.core.library.configured.version" value="12.18.1" />
37
- <property name="javascript.nodejs.core.library.typings.version" value="12.19.9" />
38
- <property name="last_opened_file_path" value="$PROJECT_DIR$/test" />
39
- <property name="nodejs.mocha.mocha_node_package_dir" value="$PROJECT_DIR$/node_modules/mocha" />
40
- <property name="nodejs_package_manager_path" value="npm" />
41
- <property name="ts.external.directory.path" value="$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external" />
42
- </component>
43
- <component name="RecentsManager">
44
- <key name="CopyFile.RECENT_KEYS">
45
- <recent name="$PROJECT_DIR$/test" />
46
- </key>
47
- </component>
48
- <component name="RunManager" selected="Mocha.Encoding testing">
49
- <configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
50
- <option name="arquillianRunConfiguration">
51
- <value>
52
- <option name="containerStateName" value="" />
53
- </value>
54
- </option>
55
- <option name="TEST_OBJECT" value="CLASS" />
56
- <properties />
57
- <listeners />
58
- <method v="2">
59
- <option name="Make" enabled="true" />
60
- </method>
61
- </configuration>
62
- <configuration name="API testing" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
63
- <node-interpreter>project</node-interpreter>
64
- <node-options />
65
- <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
66
- <working-directory>$PROJECT_DIR$</working-directory>
67
- <pass-parent-env>true</pass-parent-env>
68
- <ui>bdd</ui>
69
- <extra-mocha-options />
70
- <test-kind>SUITE</test-kind>
71
- <test-file>$PROJECT_DIR$/test/index.spec.js</test-file>
72
- <test-names>
73
- <name value="API testing" />
74
- </test-names>
75
- <method v="2" />
76
- </configuration>
77
- <configuration name="API testing.Encoding testing" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
78
- <node-interpreter>project</node-interpreter>
79
- <node-options />
80
- <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
81
- <working-directory>$PROJECT_DIR$</working-directory>
82
- <pass-parent-env>true</pass-parent-env>
83
- <ui>bdd</ui>
84
- <extra-mocha-options />
85
- <test-kind>SUITE</test-kind>
86
- <test-file>$PROJECT_DIR$/test/index.spec.js</test-file>
87
- <test-names>
88
- <name value="API testing" />
89
- <name value="Encoding testing" />
90
- </test-names>
91
- <method v="2" />
92
- </configuration>
93
- <configuration name="API testing.getJsonFromCsv() testing.should return an object with latin1 encode decoded" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
94
- <node-interpreter>project</node-interpreter>
95
- <node-options />
96
- <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
97
- <working-directory>$PROJECT_DIR$</working-directory>
98
- <pass-parent-env>true</pass-parent-env>
99
- <ui>bdd</ui>
100
- <extra-mocha-options />
101
- <test-kind>TEST</test-kind>
102
- <test-file>$PROJECT_DIR$/test/index.spec.js</test-file>
103
- <test-names>
104
- <name value="API testing" />
105
- <name value="getJsonFromCsv() testing" />
106
- <name value="should return an object with latin1 encode decoded" />
107
- </test-names>
108
- <method v="2" />
109
- </configuration>
110
- <configuration name="Encoding testing" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
111
- <node-interpreter>project</node-interpreter>
112
- <node-options />
113
- <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
114
- <working-directory>$PROJECT_DIR$</working-directory>
115
- <pass-parent-env>true</pass-parent-env>
116
- <ui>bdd</ui>
117
- <extra-mocha-options />
118
- <test-kind>SUITE</test-kind>
119
- <test-file>$PROJECT_DIR$/test/encoding.spec.js</test-file>
120
- <test-names>
121
- <name value="Encoding testing" />
122
- </test-names>
123
- <method v="2" />
124
- </configuration>
125
- <configuration name="test/index.spec.js" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
126
- <node-interpreter>project</node-interpreter>
127
- <node-options />
128
- <mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
129
- <working-directory>$PROJECT_DIR$</working-directory>
130
- <pass-parent-env>true</pass-parent-env>
131
- <ui>bdd</ui>
132
- <extra-mocha-options />
133
- <test-kind>TEST_FILE</test-kind>
134
- <test-file>$PROJECT_DIR$/test/index.spec.js</test-file>
135
- <method v="2" />
136
- </configuration>
137
- <recent_temporary>
138
- <list>
139
- <item itemvalue="Mocha.Encoding testing" />
140
- <item itemvalue="Mocha.API testing" />
141
- <item itemvalue="Mocha.API testing.getJsonFromCsv() testing.should return an object with latin1 encode decoded" />
142
- <item itemvalue="Mocha.API testing.Encoding testing" />
143
- <item itemvalue="Mocha.test/index.spec.js" />
144
- </list>
145
- </recent_temporary>
146
- </component>
147
- <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
148
- <component name="TaskManager">
149
- <task active="true" id="Default" summary="Default task">
150
- <changelist id="63c6a5c0-49c2-42ce-813a-e2299b3d6afa" name="Default Changelist" comment="" />
151
- <created>1607885560145</created>
152
- <option name="number" value="Default" />
153
- <option name="presentableId" value="Default" />
154
- <updated>1607885560145</updated>
155
- <workItem from="1607885561560" duration="1759000" />
156
- <workItem from="1607887631649" duration="830000" />
157
- <workItem from="1607960113015" duration="1678000" />
158
- <workItem from="1608120823525" duration="1795000" />
159
- <workItem from="1608122632970" duration="1795000" />
160
- <workItem from="1608124444278" duration="1795000" />
161
- <workItem from="1608126266479" duration="905000" />
162
- <workItem from="1608128097190" duration="1274000" />
163
- <workItem from="1608130270796" duration="996000" />
164
- <workItem from="1609853316968" duration="1798000" />
165
- <workItem from="1609855129975" duration="1796000" />
166
- <workItem from="1609856941674" duration="1527000" />
167
- <workItem from="1609858753068" duration="561000" />
168
- </task>
169
- <servers />
170
- </component>
171
- <component name="TypeScriptGeneratedFilesManager">
172
- <option name="version" value="3" />
173
- </component>
174
- <component name="Vcs.Log.Tabs.Properties">
175
- <option name="TAB_STATES">
176
- <map>
177
- <entry key="1">
178
- <value>
179
- <State>
180
- <option name="SHOW_ONLY_AFFECTED_CHANGES" value="true" />
181
- <option name="FILTERS">
182
- <map>
183
- <entry key="branch">
184
- <value>
185
- <list>
186
- <option value="HEAD" />
187
- </list>
188
- </value>
189
- </entry>
190
- <entry key="roots">
191
- <value>
192
- <list>
193
- <option value="$PROJECT_DIR$" />
194
- </list>
195
- </value>
196
- </entry>
197
- </map>
198
- </option>
199
- </State>
200
- </value>
201
- </entry>
202
- <entry key="MAIN">
203
- <value>
204
- <State />
205
- </value>
206
- </entry>
207
- </map>
208
- </option>
209
- <option name="OPEN_GENERIC_TABS">
210
- <map>
211
- <entry key="1" value="TOOL_WINDOW" />
212
- </map>
213
- </option>
214
- <option name="oldMeFiltersMigrated" value="true" />
215
- </component>
216
- <component name="WindowStateProjectService">
217
- <state x="151" y="125" width="1669" height="855" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog" timestamp="1607961375794">
218
- <screen x="51" y="27" width="1869" height="1053" />
219
- </state>
220
- <state x="151" y="125" width="1669" height="855" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog/51.27.1869.1053@51.27.1869.1053" timestamp="1607961375794" />
221
- <state x="1112" y="418" key="#xdebugger.evaluate" timestamp="1609856071456">
222
- <screen x="51" y="27" width="1869" height="1053" />
223
- </state>
224
- <state x="1112" y="418" key="#xdebugger.evaluate/51.27.1869.1053@51.27.1869.1053" timestamp="1609856071456" />
225
- <state x="151" y="125" width="1669" height="855" key="DiffContextDialog" timestamp="1609859313587">
226
- <screen x="51" y="27" width="1869" height="1053" />
227
- </state>
228
- <state x="151" y="125" width="1669" height="855" key="DiffContextDialog/51.27.1869.1053@51.27.1869.1053" timestamp="1609859313587" />
229
- <state x="768" y="310" width="424" height="484" key="FileChooserDialogImpl" timestamp="1608127769554">
230
- <screen x="51" y="27" width="1869" height="1053" />
231
- </state>
232
- <state x="768" y="310" width="424" height="484" key="FileChooserDialogImpl/51.27.1869.1053@51.27.1869.1053" timestamp="1608127769554" />
233
- <state width="1823" height="278" key="GridCell.Tab.0.bottom" timestamp="1609857096517">
234
- <screen x="51" y="27" width="1869" height="1053" />
235
- </state>
236
- <state width="1823" height="278" key="GridCell.Tab.0.bottom/51.27.1869.1053@51.27.1869.1053" timestamp="1609857096517" />
237
- <state width="1823" height="278" key="GridCell.Tab.0.center" timestamp="1609857096516">
238
- <screen x="51" y="27" width="1869" height="1053" />
239
- </state>
240
- <state width="1823" height="278" key="GridCell.Tab.0.center/51.27.1869.1053@51.27.1869.1053" timestamp="1609857096516" />
241
- <state width="1823" height="278" key="GridCell.Tab.0.left" timestamp="1609857096516">
242
- <screen x="51" y="27" width="1869" height="1053" />
243
- </state>
244
- <state width="1823" height="278" key="GridCell.Tab.0.left/51.27.1869.1053@51.27.1869.1053" timestamp="1609857096516" />
245
- <state width="1823" height="278" key="GridCell.Tab.0.right" timestamp="1609857096517">
246
- <screen x="51" y="27" width="1869" height="1053" />
247
- </state>
248
- <state width="1823" height="278" key="GridCell.Tab.0.right/51.27.1869.1053@51.27.1869.1053" timestamp="1609857096517" />
249
- <state width="1823" height="344" key="GridCell.Tab.1.bottom" timestamp="1609856157108">
250
- <screen x="51" y="27" width="1869" height="1053" />
251
- </state>
252
- <state width="1823" height="344" key="GridCell.Tab.1.bottom/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
253
- <state width="1823" height="344" key="GridCell.Tab.1.center" timestamp="1609856157107">
254
- <screen x="51" y="27" width="1869" height="1053" />
255
- </state>
256
- <state width="1823" height="344" key="GridCell.Tab.1.center/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157107" />
257
- <state width="1823" height="344" key="GridCell.Tab.1.left" timestamp="1609856157107">
258
- <screen x="51" y="27" width="1869" height="1053" />
259
- </state>
260
- <state width="1823" height="344" key="GridCell.Tab.1.left/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157107" />
261
- <state width="1823" height="344" key="GridCell.Tab.1.right" timestamp="1609856157108">
262
- <screen x="51" y="27" width="1869" height="1053" />
263
- </state>
264
- <state width="1823" height="344" key="GridCell.Tab.1.right/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
265
- <state width="1823" height="344" key="GridCell.Tab.2.bottom" timestamp="1609856157108">
266
- <screen x="51" y="27" width="1869" height="1053" />
267
- </state>
268
- <state width="1823" height="344" key="GridCell.Tab.2.bottom/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
269
- <state width="1823" height="344" key="GridCell.Tab.2.center" timestamp="1609856157108">
270
- <screen x="51" y="27" width="1869" height="1053" />
271
- </state>
272
- <state width="1823" height="344" key="GridCell.Tab.2.center/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
273
- <state width="1823" height="344" key="GridCell.Tab.2.left" timestamp="1609856157108">
274
- <screen x="51" y="27" width="1869" height="1053" />
275
- </state>
276
- <state width="1823" height="344" key="GridCell.Tab.2.left/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
277
- <state width="1823" height="344" key="GridCell.Tab.2.right" timestamp="1609856157108">
278
- <screen x="51" y="27" width="1869" height="1053" />
279
- </state>
280
- <state width="1823" height="344" key="GridCell.Tab.2.right/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157108" />
281
- <state width="1823" height="344" key="GridCell.Tab.3.bottom" timestamp="1609856157109">
282
- <screen x="51" y="27" width="1869" height="1053" />
283
- </state>
284
- <state width="1823" height="344" key="GridCell.Tab.3.bottom/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157109" />
285
- <state width="1823" height="344" key="GridCell.Tab.3.center" timestamp="1609856157109">
286
- <screen x="51" y="27" width="1869" height="1053" />
287
- </state>
288
- <state width="1823" height="344" key="GridCell.Tab.3.center/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157109" />
289
- <state width="1823" height="344" key="GridCell.Tab.3.left" timestamp="1609856157109">
290
- <screen x="51" y="27" width="1869" height="1053" />
291
- </state>
292
- <state width="1823" height="344" key="GridCell.Tab.3.left/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157109" />
293
- <state width="1823" height="344" key="GridCell.Tab.3.right" timestamp="1609856157109">
294
- <screen x="51" y="27" width="1869" height="1053" />
295
- </state>
296
- <state width="1823" height="344" key="GridCell.Tab.3.right/51.27.1869.1053@51.27.1869.1053" timestamp="1609856157109" />
297
- <state x="812" y="269" width="337" height="566" key="VcsDiffUtil.ChangesDialog" timestamp="1609859205218">
298
- <screen x="51" y="27" width="1869" height="1053" />
299
- </state>
300
- <state x="812" y="269" width="337" height="566" key="VcsDiffUtil.ChangesDialog/51.27.1869.1053@51.27.1869.1053" timestamp="1609859205218" />
301
- <state x="675" y="161" width="620" height="783" key="find.popup" timestamp="1609854112384">
302
- <screen x="51" y="27" width="1869" height="1053" />
303
- </state>
304
- <state x="675" y="161" width="620" height="783" key="find.popup/51.27.1869.1053@51.27.1869.1053" timestamp="1609854112384" />
305
- <state x="648" y="257" width="672" height="678" key="search.everywhere.popup" timestamp="1609854130607">
306
- <screen x="51" y="27" width="1869" height="1053" />
307
- </state>
308
- <state x="648" y="257" width="672" height="678" key="search.everywhere.popup/51.27.1869.1053@51.27.1869.1053" timestamp="1609854130607" />
309
- </component>
310
- <component name="XDebuggerManager">
311
- <breakpoint-manager>
312
- <breakpoints>
313
- <line-breakpoint enabled="true" type="javascript">
314
- <url>file://$PROJECT_DIR$/test/stringUtils.spec.js</url>
315
- <line>115</line>
316
- <option name="timeStamp" value="10" />
317
- </line-breakpoint>
318
- </breakpoints>
319
- </breakpoint-manager>
320
- </component>
321
- </project>
package/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: node_js
2
- node_js:
3
- - "stable"