gdcore-tools 1.0.5 → 1.0.6

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gdcore-tools",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "A package that downloads and bootstraps any version of GDevelops Core library",
5
5
  "main": "src/index.js",
6
6
  "repository": {
package/src/WrappedGD.js CHANGED
@@ -1,138 +1,159 @@
1
- const EventEmitter = require("events");
2
- const loadExtensions = require("./JsExtensionsLoader/LocalJsExtensionsLoader");
3
- const projectLoader = require("./LocalProjectOpener");
4
- const { makeLoader } = require("./EventsFunctionsExtensionsLoader/index");
5
- const {
6
- makeLocalEventsFunctionCodeWriter,
7
- } = require("./EventsFunctionsExtensionsLoader/LocalEventsFunctionCodeWriter");
8
- const saveProject = require("./LocalProjectWriter");
9
- const assignIn = require("lodash/assignIn");
10
- const { getGD, getRuntimePath } = require("./downloadGD");
11
- const { join, resolve } = require("path");
12
- const { makeFS } = require("./LocalFileSystem");
13
-
14
- class WrappedGD extends EventEmitter {
15
- constructor(version) {
16
- super();
17
-
18
- /**
19
- * The raw gd namespace.
20
- */
21
- this.gd = null;
22
-
23
- /**
24
- * The GDevelop abstract file system.
25
- * @private
26
- */
27
- this.fs = null;
28
-
29
- /**
30
- * The Events Functions loader
31
- * @private
32
- */
33
- this.eventsFunctionsLoader = null;
34
-
35
- /**
36
- * The Events Functions loader.
37
- * @private
38
- */
39
- this.eventsFunctionsWriter = makeLocalEventsFunctionCodeWriter();
40
-
41
- /**
42
- * The path to the current version.
43
- * @private
44
- */
45
- this.versionPath = getRuntimePath(version);
46
-
47
- // Begin async loading of GDCore and extensions
48
- getGD(version, {
49
- print: (message) => this.emit("print", message),
50
- printErr: (e) => this.emit("error", e),
51
- onAbort: (e) => this.emit("error", e),
52
- })
53
- .then((gd) => {
54
- this.gd = gd;
55
- return loadExtensions(
56
- gd,
57
- join(this.versionPath, "Runtime", "Extensions")
58
- );
59
- })
60
- .then(() => {
61
- this.fs = assignIn(new this.gd.AbstractFileSystemJS(), makeFS(this.gd));
62
- this.eventsFunctionsLoader = makeLoader(
63
- this.gd
64
- ).loadProjectEventsFunctionsExtensions;
65
- })
66
- .then(() => this.emit("ready"))
67
- .catch((e) => this.emit("initError", e));
68
- }
69
-
70
- /**
71
- * Loads a project json file.
72
- * @param {string} projectLocation The path to the json file
73
- */
74
- loadProject(projectLocation) {
75
- return projectLoader
76
- .loadProjectFiles(projectLocation)
77
- .then((projectFile) => {
78
- projectFile.content.properties.projectFile = projectLocation;
79
- return projectLoader.loadSerializedProject(
80
- this.gd,
81
- projectFile.content
82
- );
83
- })
84
- .then(async (project) => {
85
- await this.reloadEventsFunctions(project);
86
- project.setProjectFile(resolve(projectLocation));
87
- return project;
88
- });
89
- }
90
-
91
- /**
92
- * Saves a project to a json file.
93
- * @param {*} project The loaded project
94
- * @param {string} [fileName] The name of the file to save. Defaults to "game.json".
95
- * @param {string} [pathName] The path to save to. Defaults to "./".
96
- */
97
- saveProject(project, fileName, pathName) {
98
- pathName = pathName || "./";
99
- fileName = join(pathName, fileName || "game.json");
100
- return saveProject(this.gd, project, fileName, pathName);
101
- }
102
-
103
- /**
104
- * Exports a project.
105
- * @param {*} project The loaded project.
106
- * @param {string} outputDir The output directory.
107
- * @param {Object<string>} options Options to pass to the exporter.
108
- */
109
- exportProject(project, outputDir, options) {
110
- const gd = this.gd;
111
- const exporter = new gd.Exporter(this.fs, this.versionPath);
112
- const exportOptions = new gd.MapStringBoolean();
113
- for (let key in options) {
114
- exportOptions.set(key, options[key]);
115
- }
116
- exporter.exportWholePixiProject(project, outputDir, exportOptions);
117
- exportOptions.delete();
118
- exporter.delete();
119
- }
120
-
121
- /**
122
- * Reload and generate events based extensions in a project.
123
- * @param {*} project
124
- */
125
- reloadEventsFunctions(project) {
126
- return this.eventsFunctionsLoader(project, this.eventsFunctionsWriter);
127
- }
128
-
129
- /**
130
- * Returns the path to the runtime files.
131
- * @returns {string}
132
- */
133
- getRuntimePath() {
134
- return join(this.versionPath, "Runtime");
135
- }
136
- }
137
-
138
- module.exports = WrappedGD;
1
+ const EventEmitter = require("events");
2
+ const loadExtensions = require("./JsExtensionsLoader/LocalJsExtensionsLoader");
3
+ const projectLoader = require("./LocalProjectOpener");
4
+ const { makeLoader } = require("./EventsFunctionsExtensionsLoader/index");
5
+ const {
6
+ makeLocalEventsFunctionCodeWriter,
7
+ } = require("./EventsFunctionsExtensionsLoader/LocalEventsFunctionCodeWriter");
8
+ const saveProject = require("./LocalProjectWriter");
9
+ const assignIn = require("lodash/assignIn");
10
+ const { getGD, getRuntimePath } = require("./downloadGD");
11
+ const { join, resolve } = require("path");
12
+ const { makeFS } = require("./LocalFileSystem");
13
+
14
+ class WrappedGD extends EventEmitter {
15
+ constructor(version) {
16
+ super();
17
+
18
+ /**
19
+ * The raw gd namespace.
20
+ */
21
+ this.gd = null;
22
+
23
+ /**
24
+ * The GDevelop abstract file system.
25
+ * @private
26
+ */
27
+ this.fs = null;
28
+
29
+ /**
30
+ * The Events Functions loader
31
+ * @private
32
+ */
33
+ this.eventsFunctionsLoader = null;
34
+
35
+ /**
36
+ * The Events Functions loader.
37
+ * @private
38
+ */
39
+ this.eventsFunctionsWriter = makeLocalEventsFunctionCodeWriter();
40
+
41
+ /**
42
+ * The path to the current version.
43
+ * @private
44
+ */
45
+ this.versionPath = getRuntimePath(version);
46
+
47
+ // Begin async loading of GDCore and extensions
48
+ getGD(version, {
49
+ print: (message) => this.emit("print", message),
50
+ printErr: (e) => this.emit("error", e),
51
+ onAbort: (e) => this.emit("error", e),
52
+ })
53
+ .then((gd) => {
54
+ this.gd = gd;
55
+ return loadExtensions(
56
+ gd,
57
+ join(this.versionPath, "Runtime", "Extensions")
58
+ );
59
+ })
60
+ .then(() => {
61
+ this.fs = assignIn(new this.gd.AbstractFileSystemJS(), makeFS(this.gd));
62
+ this.eventsFunctionsLoader = makeLoader(
63
+ this.gd
64
+ ).loadProjectEventsFunctionsExtensions;
65
+ })
66
+ .then(() => this.emit("ready"))
67
+ .catch((e) => this.emit("initError", e));
68
+ }
69
+
70
+ /**
71
+ * Loads a project json file.
72
+ * @param {string} projectLocation The path to the json file
73
+ */
74
+ loadProject(projectLocation) {
75
+ return projectLoader
76
+ .loadProjectFiles(projectLocation)
77
+ .then((projectFile) => {
78
+ projectFile.content.properties.projectFile = projectLocation;
79
+ return projectLoader.loadSerializedProject(
80
+ this.gd,
81
+ projectFile.content
82
+ );
83
+ })
84
+ .then(async (project) => {
85
+ await this.reloadEventsFunctions(project);
86
+ project.setProjectFile(resolve(projectLocation));
87
+ return project;
88
+ });
89
+ }
90
+
91
+ /**
92
+ * Saves a project to a json file.
93
+ * @param {*} project The loaded project
94
+ * @param {string} [fileName] The name of the file to save. Defaults to "game.json".
95
+ * @param {string} [pathName] The path to save to. Defaults to "./".
96
+ */
97
+ saveProject(project, fileName, pathName) {
98
+ pathName = pathName || "./";
99
+ fileName = join(pathName, fileName || "game.json");
100
+ return saveProject(this.gd, project, fileName, pathName);
101
+ }
102
+
103
+ /**
104
+ * Exports a project.
105
+ * @param {*} project The loaded project.
106
+ * @param {string} outputDir The output directory.
107
+ * @param {Object<string>} [options] Options to pass to the exporter.
108
+ */
109
+ exportProject(project, outputDir, options) {
110
+ const gd = this.gd;
111
+ const exporter = new gd.Exporter(this.fs, this.versionPath);
112
+
113
+ if (typeof gd.ExportOptions === "function") {
114
+ const exportOptions = new gd.ExportOptions(project, outputDir);
115
+ const exportTarget = !options
116
+ ? null
117
+ : options.exportForElectron
118
+ ? "electron"
119
+ : options.exportForCordova
120
+ ? "cordova"
121
+ : options.exportForFacebookInstantGames
122
+ ? "facebookInstantGames"
123
+ : null;
124
+ if (exportTarget) exportOptions.setTarget(exportTarget);
125
+ exporter.exportWholePixiProject(exportOptions);
126
+ exportOptions.delete();
127
+ } else {
128
+ // In older versions, exportOptions was another more generic class.
129
+ const exportOptions = new gd.MapStringBoolean();
130
+ if (options) {
131
+ for (let key in options) {
132
+ exportOptions.set(key, options[key]);
133
+ }
134
+ }
135
+ exporter.exportWholePixiProject(project, outputDir, exportOptions);
136
+ exportOptions.delete();
137
+ }
138
+
139
+ exporter.delete();
140
+ }
141
+
142
+ /**
143
+ * Reload and generate events based extensions in a project.
144
+ * @param {*} project
145
+ */
146
+ reloadEventsFunctions(project) {
147
+ return this.eventsFunctionsLoader(project, this.eventsFunctionsWriter);
148
+ }
149
+
150
+ /**
151
+ * Returns the path to the runtime files.
152
+ * @returns {string}
153
+ */
154
+ getRuntimePath() {
155
+ return join(this.versionPath, "Runtime");
156
+ }
157
+ }
158
+
159
+ module.exports = WrappedGD;
package/package-lock.json DELETED
@@ -1,223 +0,0 @@
1
- {
2
- "name": "gdcore-tools",
3
- "version": "1.0.3",
4
- "lockfileVersion": 1,
5
- "requires": true,
6
- "dependencies": {
7
- "@octokit/endpoint": {
8
- "version": "6.0.11",
9
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz",
10
- "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==",
11
- "requires": {
12
- "@octokit/types": "^6.0.3",
13
- "is-plain-object": "^5.0.0",
14
- "universal-user-agent": "^6.0.0"
15
- }
16
- },
17
- "@octokit/openapi-types": {
18
- "version": "4.0.1",
19
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-4.0.1.tgz",
20
- "integrity": "sha512-k2hRcfcLRyPJjtYfJLzg404n7HZ6sUpAWAR/uNI8tf96NgatWOpw1ocdF+WFfx/trO1ivBh7ckynO1rn+xAw/Q=="
21
- },
22
- "@octokit/request": {
23
- "version": "5.4.14",
24
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.14.tgz",
25
- "integrity": "sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==",
26
- "requires": {
27
- "@octokit/endpoint": "^6.0.1",
28
- "@octokit/request-error": "^2.0.0",
29
- "@octokit/types": "^6.7.1",
30
- "deprecation": "^2.0.0",
31
- "is-plain-object": "^5.0.0",
32
- "node-fetch": "^2.6.1",
33
- "once": "^1.4.0",
34
- "universal-user-agent": "^6.0.0"
35
- }
36
- },
37
- "@octokit/request-error": {
38
- "version": "2.0.5",
39
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz",
40
- "integrity": "sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==",
41
- "requires": {
42
- "@octokit/types": "^6.0.3",
43
- "deprecation": "^2.0.0",
44
- "once": "^1.4.0"
45
- }
46
- },
47
- "@octokit/types": {
48
- "version": "6.8.2",
49
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.8.2.tgz",
50
- "integrity": "sha512-RpG0NJd7OKSkWptiFhy1xCLkThs5YoDIKM21lEtDmUvSpbaIEfrxzckWLUGDFfF8RydSyngo44gDv8m2hHruUg==",
51
- "requires": {
52
- "@octokit/openapi-types": "^4.0.0",
53
- "@types/node": ">= 8"
54
- }
55
- },
56
- "@types/node": {
57
- "version": "14.14.25",
58
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
59
- "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ=="
60
- },
61
- "at-least-node": {
62
- "version": "1.0.0",
63
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
64
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
65
- },
66
- "balanced-match": {
67
- "version": "1.0.0",
68
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
69
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
70
- },
71
- "bluebird": {
72
- "version": "3.7.2",
73
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
74
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
75
- },
76
- "brace-expansion": {
77
- "version": "1.1.11",
78
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
79
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
80
- "requires": {
81
- "balanced-match": "^1.0.0",
82
- "concat-map": "0.0.1"
83
- }
84
- },
85
- "concat-map": {
86
- "version": "0.0.1",
87
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
88
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
89
- },
90
- "deprecation": {
91
- "version": "2.3.1",
92
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
93
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
94
- },
95
- "esbuild": {
96
- "version": "0.8.43",
97
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.43.tgz",
98
- "integrity": "sha512-ZVE2CpootS4jtnfV0bbtJdgRsHEXcMP0P7ZXGfTmNzzhBr2e5ag7Vp3ry0jmw8zduJz4iHzxg4m5jtPxWERz1w=="
99
- },
100
- "follow-redirects": {
101
- "version": "1.13.2",
102
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz",
103
- "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA=="
104
- },
105
- "fs-extra": {
106
- "version": "9.1.0",
107
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
108
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
109
- "requires": {
110
- "at-least-node": "^1.0.0",
111
- "graceful-fs": "^4.2.0",
112
- "jsonfile": "^6.0.1",
113
- "universalify": "^2.0.0"
114
- }
115
- },
116
- "fs-extra-promise": {
117
- "version": "1.0.1",
118
- "resolved": "https://registry.npmjs.org/fs-extra-promise/-/fs-extra-promise-1.0.1.tgz",
119
- "integrity": "sha1-tu0azpexDga5X0WNBRt/BcZhPuY=",
120
- "requires": {
121
- "bluebird": "^3.5.0",
122
- "fs-extra": "^2.1.2"
123
- },
124
- "dependencies": {
125
- "fs-extra": {
126
- "version": "2.1.2",
127
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
128
- "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
129
- "requires": {
130
- "graceful-fs": "^4.1.2",
131
- "jsonfile": "^2.1.0"
132
- }
133
- },
134
- "jsonfile": {
135
- "version": "2.4.0",
136
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
137
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
138
- "requires": {
139
- "graceful-fs": "^4.1.6"
140
- }
141
- }
142
- }
143
- },
144
- "graceful-fs": {
145
- "version": "4.2.5",
146
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.5.tgz",
147
- "integrity": "sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw=="
148
- },
149
- "is-plain-object": {
150
- "version": "5.0.0",
151
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
152
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
153
- },
154
- "jsonfile": {
155
- "version": "6.1.0",
156
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
157
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
158
- "requires": {
159
- "graceful-fs": "^4.1.6",
160
- "universalify": "^2.0.0"
161
- }
162
- },
163
- "lodash": {
164
- "version": "4.17.20",
165
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
166
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
167
- },
168
- "minimatch": {
169
- "version": "3.0.4",
170
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
171
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
172
- "requires": {
173
- "brace-expansion": "^1.1.7"
174
- }
175
- },
176
- "node-fetch": {
177
- "version": "2.6.1",
178
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
179
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
180
- },
181
- "node-stream-zip": {
182
- "version": "1.13.0",
183
- "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.0.tgz",
184
- "integrity": "sha512-dqOt0Zaex6I9PUd/yfh9G0GqjZuky2kkxQaxH4yylH0y3hdg4r9BfeH2SChwQslR+YOd6l7mU14ZJiVI6BbJ4A=="
185
- },
186
- "once": {
187
- "version": "1.4.0",
188
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
189
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
190
- "requires": {
191
- "wrappy": "1"
192
- }
193
- },
194
- "recursive-readdir": {
195
- "version": "2.2.2",
196
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
197
- "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
198
- "requires": {
199
- "minimatch": "3.0.4"
200
- }
201
- },
202
- "slugs": {
203
- "version": "0.1.3",
204
- "resolved": "https://registry.npmjs.org/slugs/-/slugs-0.1.3.tgz",
205
- "integrity": "sha1-aa+sUbv3ctuWhFGnGiAm5lQ1CDM="
206
- },
207
- "universal-user-agent": {
208
- "version": "6.0.0",
209
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
210
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
211
- },
212
- "universalify": {
213
- "version": "2.0.0",
214
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
215
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
216
- },
217
- "wrappy": {
218
- "version": "1.0.2",
219
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
220
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
221
- }
222
- }
223
- }