├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .htaccess
├── .npmrc
├── LICENSE
├── README.md
├── assets
├── DamagedHelmet-13-37-27.usdz
├── DamagedHelmet.obj
├── DamagedHelmet.usda
├── DamagedHelmet
│ ├── DamagedHelmet.bin
│ ├── DamagedHelmet.glb
│ ├── DamagedHelmet.gltf
│ ├── Default_AO.jpg
│ ├── Default_albedo.jpg
│ ├── Default_emissive.jpg
│ ├── Default_metalRoughness.jpg
│ ├── Default_normal.jpg
│ └── LICENSE.md
├── DamagedHelmet_baseColorTexture.jpg
├── DamagedHelmet_emissiveTexture.jpg
├── DamagedHelmet_metallicTexture.jpg
├── DamagedHelmet_normalTexture.jpg
├── DamagedHelmet_occlusionTexture.jpg
├── DamagedHelmet_roughnessTexture.jpg
├── DamagedHelmet_usda_from_usdc.usda
├── helmet_including_preview.jpg
└── preview.jpg
├── bin
└── gltf-to-usdz.js
├── index.html
├── lib
├── argsHandler.js
├── constants.js
├── converter
│ ├── constructOBJ.js
│ ├── constructUSDA.js
│ ├── handleTextures.js
│ ├── index.js
│ └── parseGLTF.js
├── fileLoader.js
├── index.js
└── utilities.js
├── package.json
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | insert_final_newline = true
5 | trim_trailing_whitespace = true
6 | indent_style = space
7 | indent_size = 2
8 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: 'airbnb-base',
3 | rules: {
4 | 'import/prefer-default-export': 0,
5 | 'no-bitwise': 0,
6 | 'no-underscore-dangle': 0,
7 | 'sort-imports': [
8 | 'error',
9 | {
10 | ignoreCase: false,
11 | ignoreMemberSort: false,
12 | memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
13 | },
14 | ],
15 | },
16 | };
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | node_modules
4 |
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | AddType model/vnd.pixar.usd .usdz
3 | AddType model/usd usdz
4 |
5 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Tim van Scherpenzeel
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # glTF to USDZ research
2 |
3 | Research and proof of concept of converting glTF to USDZ for AR Quick Look (iOS 12+).
4 |
5 | ## Reasoning
6 |
7 | Even though I think the intentions of Apple / Pixar are great with the open source [USD](https://github.com/PixarAnimationStudios/USD) pipeline I think we as an industry should be relying more on truly open formats that are not controlled by a single entity. Installing `USD` is cumbersome, requires a lot of disk space and is completely overkill for most situations (if your goal is to convert some 3D models to USDZ and show them using `AR Quick Look`). I'm hoping that as we get closer to the public release of `iOS 12` more tools will pop up that directly convert to `USDZ` so that we can get cross-platform support.
8 |
9 | In order to move away from using the [USD](https://github.com/PixarAnimationStudios/USD) pipeline solution offered by Pixar I think it would be wise to try and manipulate the intermediary readeable `USDA` format. Unfortunately there are very little examples available of `USDA` files.
10 |
11 | The general idea is to dynamically generate / manipulate the intermediary a general `USDA` file-structure and pass that to the `usdz-converter` to handle the further conversion to `USDZ`.
12 |
13 | After some work, debugging and friendly help from [@domenicopanacea](https://twitter.com/domenicopanacea/status/1011577221310447618) and [@virakri](https://twitter.com/virakri/status/1010356558742589440) I got it to work. Most of the findings on `OBJ` support come from `@trayser` who posted details regarding `OBJ` to `USDZ` conversion on [developers.apple.com](https://forums.developer.apple.com/thread/104042). The `OBJ` files that are generated by `gltf-to-usdz` only use the supported tags as mentioned by `@trayser`.
14 |
15 | Please note that this is just an experimental setup and should be seen as a proof of concept. As it stands I've only tested it with the `DamagedHelmet` glTF asset included in `/assets/`. You will very likely run into issues with the current code.
16 |
17 | My goal of this research is to inspire others to make proper converters that handle all the complexities.
18 |
19 | ## Live demo
20 |
21 | [Live demo](https://timvanscherpenzeel.github.io/gltf-to-usdz-research/)
22 |
23 | 
24 |
25 | ## Limitations
26 |
27 | - `.glb` files are not yet accepted. Please use `glTF` files with seperate textures.
28 |
29 | - Only the first mesh in the `glTF` file will be parsed and exported. Make sure you merge all meshes.
30 |
31 | - Only `glTF` files with external textures are currently handled (as opposed to embedded base64 encoded textures).
32 |
33 | - Animations from the glTF are not yet transferred, it seems possible to transfer skeleton animation and regular transformations. Unfortunately due to the shadow being baked on the first frame of the animation you can't really do large moving animations. Besides that the filesize increases quite dramatically. It is not recommended to have animations that move a character away from the origin as it results in tracking problems. Your best bet are micro-animations that enhance a character or model instead of large animations.
34 |
35 | ## To do
36 |
37 | - ~~Convert the example `USDZ` examples to `USDA` structures by converting `USDC` to `USDA`. Unfortunately I think this requires the installation of the [USD pipeline](https://github.com/PixarAnimationStudios/USD) and the use of [usdcat](https://github.com/PixarAnimationStudios/USD/blob/e6ce9e884a65e7d6acd762e9dbc961dcf9aa36bb/pxr/usd/bin/usdcat/usdcat.py).~~
38 |
39 | Thanks to [@wave-electron](https://github.com/wave-electron) the `USDC`'s of the examples of the AR Quick Look gallery have been converted to `USDA`. Due to copyright concerns I unfortunately won't be able to upload them to this repo. I've had a look at them and for the most part look very similar compared to the USDA file generated by `gltf-to-usdz`. I've since also been able to convert the examples myself using `usdcat`.
40 |
41 | ## Installation
42 |
43 | - Make sure you have [Node.js](http://nodejs.org/) installed
44 |
45 | - Upgrade your operating system to macOS High Sierra 10.13.4 or newer
46 |
47 | - Download Xcode 10 beta and put it in `/Applications/`
48 |
49 | ```
50 | https://developer.apple.com/download/
51 | ```
52 |
53 | - Link to the beta version instead of the normal version
54 |
55 | ```
56 | sudo xcode-select --switch /Applications/Xcode-beta.app
57 | ```
58 |
59 | - Construct a new `.usda` using `gltf-to-usdz` and run it through the `usdz_converter`
60 |
61 | ```
62 | node ./bin/gltf-to-usdz.js -i ./assets/DamagedHelmet/DamagedHelmet.gltf -o ./assets/DamagedHelmet.usda -s 10.0 && xcrun usdz_converter ./assets/DamagedHelmet.usda ./assets/DamagedHelmet-`date +"%H-%M-%S"`.usdz
63 | ```
64 |
65 | - On succes the following should be outputted to the console
66 |
67 | ```
68 | 2018-06-20 17:21:23.364 usdz_converter[82749:13335731]
69 |
70 |
71 | Converting asset file 'DamagedHelmet.usda' ...
72 | ```
73 |
74 | In order to see the contents of the outputted `USDZ` change the extension to `.zip` and unzip it. You will see a `.usdc` and several textures (if the original glTF file had textures).
75 |
76 | ## Development
77 |
78 | In order to install [USD](https://github.com/PixarAnimationStudios/USD) on MacOS please follow the following instructions:
79 |
80 | - Upgrade your operating system to macOS High Sierra 10.13.4 or newer
81 |
82 | - Download Xcode 10 beta and put it in `/Applications/`
83 |
84 | ```
85 | https://developer.apple.com/download/
86 | ```
87 |
88 | - Link to the beta version instead of the normal version
89 |
90 | ```
91 | sudo xcode-select --switch /Applications/Xcode-beta.app
92 | ```
93 |
94 | - Install Cmake and QT. If you get any [issues](https://github.com/TimvanScherpenzeel/gltf-to-usdz-research/issues/1) during compiling or installing you might have to install QT5.
95 |
96 | ```
97 | brew install cmake
98 | brew install qt@4
99 | ```
100 |
101 | - Install PyOpenGL
102 |
103 | ```
104 | pip install PyOpenGL
105 | ```
106 |
107 | - Install PySide2
108 |
109 | ```
110 | pip install --index-url=http://download.qt.io/snapshots/ci/pyside/5.9/latest/ pyside2 --trusted-host download.qt.io
111 | ```
112 |
113 | - Update OpenImageIO release version from `Release-1.7.14.zip` to `Release-1.8.12.zip` and add the following section in `build_scripts/build_usd.py` as mentioned as a [solution](https://github.com/PixarAnimationStudios/USD/issues/19#issuecomment-399918369) by `@robpieke` to an earlier Python crash I was experiencing.
114 |
115 | ```diff
116 | diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py
117 | index 37fb2a5e..3c940b3b 100644
118 | --- a/build_scripts/build_usd.py
119 | +++ b/build_scripts/build_usd.py
120 | @@ -692,7 +692,7 @@ PTEX = Dependency("Ptex", InstallPtex, "include/PtexVersion.h")
121 | ############################################################
122 | # OpenImageIO
123 |
124 | -OIIO_URL = "https://github.com/OpenImageIO/oiio/archive/Release-1.7.14.zip"
125 | +OIIO_URL = "https://github.com/OpenImageIO/oiio/archive/Release-1.8.12.zip"
126 |
127 | def InstallOpenImageIO(context, force):
128 | with CurrentWorkingDirectory(DownloadURL(OIIO_URL, context, force)):
129 | @@ -855,6 +855,12 @@ def InstallUSD(context):
130 |
131 | if context.buildPython:
132 | extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=ON')
133 | + if MacOS():
134 | + import distutils.sysconfig
135 | + pyLibPath = distutils.sysconfig.get_config_var('LIBDIR')
136 | + pyIncPath = distutils.sysconfig.get_config_var('INCLUDEPY')
137 | + extraArgs.append('-DPYTHON_LIBRARY=' + pyLibPath + '/libpython2.7.dylib')
138 | + extraArgs.append('-DPYTHON_INCLUDE_DIR=' + pyIncPath)
139 | else:
140 | extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=OFF')
141 | ```
142 |
143 | - Run `python USD/build_scripts/build_usd.py BUILD`, it will take roughly 1 hour the first time you build because of all the dependencies that need to be compiled, resulting in the following output if succesfully installed:
144 |
145 | ```
146 | ➜ pixar python USD/build_scripts/build_usd.py BUILD
147 |
148 | Building with settings:
149 | USD source directory /Users/timvanscherpenzeel/Projects/pixar/USD
150 | USD install directory /Users/timvanscherpenzeel/Projects/pixar/BUILD
151 | 3rd-party source directory /Users/timvanscherpenzeel/Projects/pixar/BUILD/src
152 | 3rd-party install directory /Users/timvanscherpenzeel/Projects/pixar/BUILD
153 | Build directory /Users/timvanscherpenzeel/Projects/pixar/BUILD/build
154 | CMake generator Default
155 | Downloader curl
156 |
157 | Building Shared libraries
158 | Imaging On
159 | Ptex support: Off
160 | UsdImaging On
161 | Python support On
162 | Documentation Off
163 | Tests Off
164 | Alembic Plugin Off
165 | HDF5 support: Off
166 | Maya Plugin Off
167 | Katana Plugin Off
168 | Houdini Plugin Off
169 |
170 | Dependencies zlib, boost, TBB, JPEG, TIFF, PNG, OpenEXR, GLEW, OpenImageIO, OpenSubdiv
171 |
172 | STATUS: Installing zlib...
173 | STATUS: Installing boost...
174 | STATUS: Installing TBB...
175 | STATUS: Installing JPEG...
176 | STATUS: Installing TIFF...
177 | STATUS: Installing PNG...
178 | STATUS: Installing OpenEXR...
179 | STATUS: Installing GLEW...
180 | STATUS: Installing OpenImageIO...
181 | STATUS: Installing OpenSubdiv...
182 | STATUS: Installing USD...
183 |
184 | Success! To use USD, please ensure that you have:
185 |
186 | The following in your PYTHONPATH environment variable:
187 | /Users/timvanscherpenzeel/Projects/pixar/BUILD/lib/python
188 |
189 | The following in your PATH environment variable:
190 | /Users/timvanscherpenzeel/Projects/pixar/BUILD/bin
191 | ```
192 |
193 | ## Taking apart a USDZ file
194 |
195 | To take apart a `USDZ` file one should follow the following steps:
196 |
197 | 1. Follow the steps mentioned in `Development` to install USD
198 | 2. Change the extension of the `usdz` file from `.usdz` to `.zip`
199 | 3. Unzip the file using `Archive Utility` (comes with MacOS) or likely any other unzipping tool
200 |
201 | The folder will contain the included textures seperated out and a `.udsc` file.
202 |
203 | 4. Now use `usdcat` to convert the `USDC` file to readeable `USDA`: `usdcat input.usdc -o output.usda`
204 |
205 | The resulting `USDA` file will contain the mesh data.
206 |
207 | ## Resources
208 |
209 | - https://graphics.pixar.com/usd/docs/Converting-Between-Layer-Formats.html
210 |
211 | - https://forums.developer.apple.com/thread/104042
212 |
213 | - https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
214 |
215 | - https://developer.apple.com/videos/play/wwdc2018/603/
216 |
217 | - https://devstreaming-cdn.apple.com/videos/wwdc/2018/603augiuv41xoowslk8/603/603_integrating_apps_and_content_with_ar_quick_look.pdf?dl=1
218 |
219 | ## Contributing
220 |
221 | As it is my goal to create a community project I welcome you to submit any pull requests or open a ticket if you spot an issue. Please be aware that as of now the project is in a very experimental state and only serves as a proof of concept so there are probably lots of things wrong and the code is far from clean.
222 |
223 | ## Licence
224 |
225 | `gltf-to-usdz` is released under the [MIT licence](https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/master/LICENSE).
226 |
--------------------------------------------------------------------------------
/assets/DamagedHelmet-13-37-27.usdz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet-13-37-27.usdz
--------------------------------------------------------------------------------
/assets/DamagedHelmet.usda:
--------------------------------------------------------------------------------
1 | #usda 1.0
2 | (
3 | endTimeCode = 200
4 | startTimeCode = 1
5 | timeCodesPerSecond = 24
6 | upAxis = "Y"
7 | )
8 |
9 | def Scope "Materials"
10 | {
11 |
12 | def Material "StingrayPBS_0"
13 | {
14 | token inputs:frame:stPrimvarName = "Texture_uv"
15 | token outputs:displacement.connect =
16 | token outputs:surface.connect =
17 |
18 | def Shader "pbrMat1"
19 | {
20 | uniform token info:id = "UsdPreviewSurface"
21 | float inputs:clearcoat = 0
22 | float inputs:clearcoatRoughness = 0
23 | color3f inputs:diffuseColor.connect =
24 | float inputs:displacement = 0
25 | color3f inputs:emissiveColor.connect =
26 | float inputs:ior = 1.5
27 | float inputs:metallic.connect =
28 | normal3f inputs:normal.connect =
29 | float inputs:occlusion.connect =
30 | float inputs:opacity = 1
31 | float inputs:roughness.connect =
32 | color3f inputs:specularColor = (1, 1, 1)
33 | int inputs:useSpecularWorkflow = 0
34 | token outputs:displacement
35 | token outputs:surface
36 | }
37 |
38 | def Shader "Primvar"
39 | {
40 | uniform token info:id = "UsdPrimvarReader_float2"
41 | float2 inputs:default = (0, 0)
42 | token inputs:varname.connect =
43 | float2 outputs:result
44 | }
45 |
46 | def Shader "color_map"
47 | {
48 | uniform token info:id = "UsdUVTexture"
49 | float4 inputs:default = (0, 0, 0, 1)
50 | asset inputs:file = @DamagedHelmet_baseColorTexture.jpg@
51 | float2 inputs:st.connect =
52 | token inputs:wrapS = "repeat"
53 | token inputs:wrapT = "repeat"
54 | float3 outputs:rgb
55 | }
56 |
57 | def Shader "emissive_map"
58 | {
59 | uniform token info:id = "UsdUVTexture"
60 | float4 inputs:default = (0, 0, 0, 1)
61 | asset inputs:file = @DamagedHelmet_emissiveTexture.jpg@
62 | float2 inputs:st.connect =
63 | token inputs:wrapS = "repeat"
64 | token inputs:wrapT = "repeat"
65 | float3 outputs:rgb
66 | }
67 |
68 | def Shader "metallic_map"
69 | {
70 | uniform token info:id = "UsdUVTexture"
71 | float4 inputs:default = (0, 0, 0, 1)
72 | asset inputs:file = @DamagedHelmet_metallicTexture.jpg@
73 | float2 inputs:st.connect =
74 | token inputs:wrapS = "repeat"
75 | token inputs:wrapT = "repeat"
76 | float3 outputs:rgb
77 | }
78 |
79 | def Shader "normal_map"
80 | {
81 | uniform token info:id = "UsdUVTexture"
82 | float4 inputs:default = (0, 0, 0, 1)
83 | asset inputs:file = @DamagedHelmet_normalTexture.jpg@
84 | float2 inputs:st.connect =
85 | token inputs:wrapS = "repeat"
86 | token inputs:wrapT = "repeat"
87 | float3 outputs:rgb
88 | }
89 |
90 | def Shader "ao_map"
91 | {
92 | uniform token info:id = "UsdUVTexture"
93 | float4 inputs:default = (0, 0, 0, 1)
94 | asset inputs:file = @DamagedHelmet_occlusionTexture.jpg@
95 | float2 inputs:st.connect =
96 | token inputs:wrapS = "repeat"
97 | token inputs:wrapT = "repeat"
98 | float3 outputs:rgb
99 | }
100 |
101 | def Shader "roughness_map"
102 | {
103 | uniform token info:id = "UsdUVTexture"
104 | float4 inputs:default = (0, 0, 0, 1)
105 | asset inputs:file = @DamagedHelmet_roughnessTexture.jpg@
106 | float2 inputs:st.connect =
107 | token inputs:wrapS = "repeat"
108 | token inputs:wrapT = "repeat"
109 | float3 outputs:rgb
110 | }
111 | }
112 | }
113 | def "Mesh_0" (
114 | add references = @DamagedHelmet.obj@
115 | )
116 | {
117 | rel material:binding =
118 | float3 xformOp:scale = (10.0, 10.0, 10.0)
119 | uniform token[] xformOpOrder = ["xformOp:scale"]
120 | }
--------------------------------------------------------------------------------
/assets/DamagedHelmet/DamagedHelmet.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/DamagedHelmet.bin
--------------------------------------------------------------------------------
/assets/DamagedHelmet/DamagedHelmet.glb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/DamagedHelmet.glb
--------------------------------------------------------------------------------
/assets/DamagedHelmet/DamagedHelmet.gltf:
--------------------------------------------------------------------------------
1 | {
2 | "accessors" : [
3 | {
4 | "bufferView" : 0,
5 | "componentType" : 5123,
6 | "count" : 46356,
7 | "max" : [
8 | 14555
9 | ],
10 | "min" : [
11 | 0
12 | ],
13 | "type" : "SCALAR"
14 | },
15 | {
16 | "bufferView" : 1,
17 | "componentType" : 5126,
18 | "count" : 14556,
19 | "max" : [
20 | 0.9424954056739807,
21 | 0.8128451108932495,
22 | 0.900973916053772
23 | ],
24 | "min" : [
25 | -0.9474585652351379,
26 | -1.18715500831604,
27 | -0.9009949564933777
28 | ],
29 | "type" : "VEC3"
30 | },
31 | {
32 | "bufferView" : 2,
33 | "componentType" : 5126,
34 | "count" : 14556,
35 | "max" : [
36 | 1.0,
37 | 1.0,
38 | 1.0
39 | ],
40 | "min" : [
41 | -1.0,
42 | -1.0,
43 | -1.0
44 | ],
45 | "type" : "VEC3"
46 | },
47 | {
48 | "bufferView" : 3,
49 | "componentType" : 5126,
50 | "count" : 14556,
51 | "max" : [
52 | 0.9999759793281555,
53 | 1.998665988445282
54 | ],
55 | "min" : [
56 | 0.002448640065267682,
57 | 1.0005531199858524
58 | ],
59 | "type" : "VEC2"
60 | }
61 | ],
62 | "asset" : {
63 | "generator" : "Khronos Blender glTF 2.0 exporter",
64 | "version" : "2.0"
65 | },
66 | "bufferViews" : [
67 | {
68 | "buffer" : 0,
69 | "byteLength" : 92712,
70 | "byteOffset" : 0,
71 | "target" : 34963
72 | },
73 | {
74 | "buffer" : 0,
75 | "byteLength" : 174672,
76 | "byteOffset" : 92712,
77 | "target" : 34962
78 | },
79 | {
80 | "buffer" : 0,
81 | "byteLength" : 174672,
82 | "byteOffset" : 267384,
83 | "target" : 34962
84 | },
85 | {
86 | "buffer" : 0,
87 | "byteLength" : 116448,
88 | "byteOffset" : 442056,
89 | "target" : 34962
90 | }
91 | ],
92 | "buffers" : [
93 | {
94 | "byteLength" : 558504,
95 | "uri" : "DamagedHelmet.bin"
96 | }
97 | ],
98 | "images" : [
99 | {
100 | "uri" : "Default_albedo.jpg"
101 | },
102 | {
103 | "uri" : "Default_metalRoughness.jpg"
104 | },
105 | {
106 | "uri" : "Default_emissive.jpg"
107 | },
108 | {
109 | "uri" : "Default_AO.jpg"
110 | },
111 | {
112 | "uri" : "Default_normal.jpg"
113 | }
114 | ],
115 | "materials" : [
116 | {
117 | "emissiveFactor" : [
118 | 1.0,
119 | 1.0,
120 | 1.0
121 | ],
122 | "emissiveTexture" : {
123 | "index" : 2
124 | },
125 | "name" : "Material_MR",
126 | "normalTexture" : {
127 | "index" : 4
128 | },
129 | "occlusionTexture" : {
130 | "index" : 3
131 | },
132 | "pbrMetallicRoughness" : {
133 | "baseColorTexture" : {
134 | "index" : 0
135 | },
136 | "metallicRoughnessTexture" : {
137 | "index" : 1
138 | }
139 | }
140 | }
141 | ],
142 | "meshes" : [
143 | {
144 | "name" : "mesh_helmet_LP_13930damagedHelmet",
145 | "primitives" : [
146 | {
147 | "attributes" : {
148 | "NORMAL" : 2,
149 | "POSITION" : 1,
150 | "TEXCOORD_0" : 3
151 | },
152 | "indices" : 0,
153 | "material" : 0
154 | }
155 | ]
156 | }
157 | ],
158 | "nodes" : [
159 | {
160 | "mesh" : 0,
161 | "name" : "node_damagedHelmet_-6514",
162 | "rotation" : [
163 | 0.7071068286895752,
164 | 0.0,
165 | -0.0,
166 | 0.7071068286895752
167 | ]
168 | }
169 | ],
170 | "samplers" : [
171 | {}
172 | ],
173 | "scene" : 0,
174 | "scenes" : [
175 | {
176 | "name" : "Scene",
177 | "nodes" : [
178 | 0
179 | ]
180 | }
181 | ],
182 | "textures" : [
183 | {
184 | "sampler" : 0,
185 | "source" : 0
186 | },
187 | {
188 | "sampler" : 0,
189 | "source" : 1
190 | },
191 | {
192 | "sampler" : 0,
193 | "source" : 2
194 | },
195 | {
196 | "sampler" : 0,
197 | "source" : 3
198 | },
199 | {
200 | "sampler" : 0,
201 | "source" : 4
202 | }
203 | ]
204 | }
205 |
--------------------------------------------------------------------------------
/assets/DamagedHelmet/Default_AO.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/Default_AO.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet/Default_albedo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/Default_albedo.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet/Default_emissive.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/Default_emissive.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet/Default_metalRoughness.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/Default_metalRoughness.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet/Default_normal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet/Default_normal.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet/LICENSE.md:
--------------------------------------------------------------------------------
1 | Battle Damaged Sci-fi Helmet - PBR by [theblueturtle_](https://sketchfab.com/theblueturtle_), published under
2 | a Creative Commons Attribution-NonCommercial license
3 |
4 | https://sketchfab.com/models/b81008d513954189a063ff901f7abfe4
5 |
--------------------------------------------------------------------------------
/assets/DamagedHelmet_baseColorTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_baseColorTexture.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet_emissiveTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_emissiveTexture.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet_metallicTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_metallicTexture.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet_normalTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_normalTexture.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet_occlusionTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_occlusionTexture.jpg
--------------------------------------------------------------------------------
/assets/DamagedHelmet_roughnessTexture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/DamagedHelmet_roughnessTexture.jpg
--------------------------------------------------------------------------------
/assets/helmet_including_preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/helmet_including_preview.jpg
--------------------------------------------------------------------------------
/assets/preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TimvanScherpenzeel/gltf-to-usdz-research/4baa7859dfcea95a74eb8375a6d14842811ab286/assets/preview.jpg
--------------------------------------------------------------------------------
/bin/gltf-to-usdz.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | require('../lib/index');
3 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | USDZ
8 |
31 |
32 |
33 |
34 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/lib/argsHandler.js:
--------------------------------------------------------------------------------
1 | // Vendor
2 | const { ArgumentParser } = require('argparse');
3 |
4 | // Package
5 | const pkg = require('../package.json');
6 |
7 | const createParserArguments = () => {
8 | const parser = new ArgumentParser({
9 | version: pkg.version,
10 | addHelp: true,
11 | description: pkg.description,
12 | });
13 |
14 | // File input flag
15 | parser.addArgument(['-i', '--input'], {
16 | help: 'Input file including path',
17 | required: true,
18 | });
19 |
20 | // File output flag
21 | parser.addArgument(['-o', '--output'], {
22 | help: 'Output file including path',
23 | required: true,
24 | });
25 |
26 | // Model scale
27 | parser.addArgument(['-s', '--scale'], {
28 | help: 'Scale of the model',
29 | defaultValue: '1.0',
30 | required: false,
31 | });
32 |
33 | return parser.parseArgs();
34 | };
35 |
36 | const args = createParserArguments();
37 |
38 | module.exports = args;
39 |
--------------------------------------------------------------------------------
/lib/constants.js:
--------------------------------------------------------------------------------
1 | const constants = {
2 | SUPPORTED_INPUT_TYPES: ['.gltf'],
3 | SUPPORTED_OUTPUT_TYPES: ['.usda'],
4 | };
5 |
6 | module.exports = constants;
7 |
--------------------------------------------------------------------------------
/lib/converter/constructOBJ.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const fs = require('fs');
3 | const path = require('path');
4 |
5 | // Arguments
6 | const { input, output } = require('./../argsHandler');
7 |
8 | // Utilities
9 | const { getFilename } = require('../utilities');
10 |
11 | function constructOBJ(mesh) {
12 | const {
13 | vertices, uvs, normals, indices,
14 | } = mesh;
15 |
16 | const verticesData = vertices.bufferData;
17 | const verticesMax = vertices.max;
18 | const uvsData = uvs.bufferData;
19 | const normalsData = normals.bufferData;
20 | const indicesData = indices.bufferData;
21 |
22 | function packToUInt16Array(data) {
23 | const uintArray = new Uint16Array(data.length / 2);
24 | let byteOffset = 0;
25 |
26 | for (let i = 0; i < uintArray.length; i += 1) {
27 | [uintArray[i]] = new Uint16Array(
28 | new Uint8Array([data[byteOffset], data[byteOffset + 1]]).buffer,
29 | );
30 | byteOffset += 2;
31 | }
32 | return uintArray;
33 | }
34 |
35 | function packToFloat32Array(data) {
36 | const floatArray = new Float32Array(data.length / 4);
37 | let byteOffset = 0;
38 |
39 | for (let i = 0; i < floatArray.length; i += 1) {
40 | [floatArray[i]] = new Float32Array(
41 | new Uint8Array([
42 | data[byteOffset],
43 | data[byteOffset + 1],
44 | data[byteOffset + 2],
45 | data[byteOffset + 3],
46 | ]).buffer,
47 | );
48 |
49 | byteOffset += 4;
50 | }
51 |
52 | return floatArray;
53 | }
54 |
55 | const inputFileName = path.basename(input);
56 | const outputFilePath = path.resolve(path.dirname(output));
57 |
58 | let objData = '# gltf-to-usdz\n';
59 | objData += '#\n';
60 | objData += '# https://github.com/TimvanScherpenzeel/gltf-to-usdz\n';
61 | objData += '#\n';
62 | objData += 'g model\n';
63 |
64 | // vertices: Float32Array; (3)
65 | if (verticesData) {
66 | const verticesFloatArray = packToFloat32Array(verticesData);
67 |
68 | // Order and sign is normally wrong (due to different coordinate system?) (x, y, z)
69 | // v 0.646051287651062 -0.6916618943214417 -0.047537729144096375
70 |
71 | // Which should be (x, z, y)
72 | // v 0.646051287651062 0.0475378284621125 -0.6916619808652279
73 |
74 | for (let i = 0; i < verticesFloatArray.length; i += 3) {
75 | const x = verticesFloatArray[i];
76 | const y = verticesFloatArray[i + 1];
77 |
78 | // Move pivot point to the bottom of the model (from the center)
79 | // I originally thought this would be verticesMax[2] / 2 as you would
80 | // move from the center to the bottom but when testing it shows lower
81 | // than the reference apple.obj model (which was confirmed to be correct)
82 | const z = verticesFloatArray[i + 2] - verticesMax[2];
83 |
84 | objData += `v ${x} ${z * -1.0} ${y}\n`;
85 | }
86 | }
87 |
88 | // uvs: Float32Array; (2)
89 | if (uvsData) {
90 | const uvsFloatArray = packToFloat32Array(uvsData);
91 |
92 | for (let i = 0; i < uvsFloatArray.length; i += 2) {
93 | const x = uvsFloatArray[i];
94 | const y = uvsFloatArray[i + 1];
95 |
96 | objData += `vt ${x} ${y}\n`;
97 | }
98 | }
99 |
100 | // normals: Float32Array; (3)
101 | if (normalsData) {
102 | const normalsFloatArray = packToFloat32Array(normalsData);
103 |
104 | // Order and sign is normally wrong (due to different coordinate system?) (x, y, z)
105 | // vn 0 -0.5976134538650513 0.8017517328262329
106 |
107 | // Which should be (x, z, y)
108 | // vn 0 -0.8017515448091482 -0.5976134812928081
109 |
110 | for (let i = 0; i < normalsFloatArray.length; i += 3) {
111 | const x = normalsFloatArray[i];
112 | const y = normalsFloatArray[i + 1];
113 | const z = normalsFloatArray[i + 2];
114 |
115 | objData += `vn ${x} ${z * -1.0} ${y}\n`;
116 | }
117 | }
118 |
119 | // indices: Uint16Array; (3)
120 | if (indicesData) {
121 | const indicesFloatArray = packToUInt16Array(indicesData);
122 |
123 | for (let i = 0; i < indicesFloatArray.length; i += 3) {
124 | const v1 = indicesFloatArray[i] + 1;
125 | const v2 = indicesFloatArray[i + 1] + 1;
126 | const v3 = indicesFloatArray[i + 2] + 1;
127 |
128 | objData += `f ${v1}/${v1}/${v1} ${v2}/${v2}/${v2} ${v3}/${v3}/${v3}\n`;
129 | }
130 | }
131 |
132 | const objFullpath = `${outputFilePath}/${getFilename(inputFileName)}.obj`;
133 |
134 | try {
135 | fs.writeFileSync(objFullpath, objData);
136 | } catch (err) {
137 | return Promise.reject(err);
138 | }
139 |
140 | console.log('Written file to', objFullpath);
141 |
142 | return Promise.resolve({
143 | objPath: `${getFilename(inputFileName)}.obj`,
144 | });
145 | }
146 |
147 | module.exports = constructOBJ;
148 |
--------------------------------------------------------------------------------
/lib/converter/constructUSDA.js:
--------------------------------------------------------------------------------
1 | function constructUSDA(options = {}) {
2 | Object.assign(this, options);
3 |
4 | // glTF 2.0 uses lower left corner as origin
5 | // USD also user lower left corner as origin
6 | // [(0, 0), (1, 0), (1,1), (0, 1)]
7 | function createMapSection(fileName, filePath) {
8 | return `def Shader "${fileName}"
9 | {
10 | uniform token info:id = "UsdUVTexture"
11 | float4 inputs:default = (0, 0, 0, 1)
12 | asset inputs:file = @${filePath}@
13 | float2 inputs:st.connect =
14 | token inputs:wrapS = "repeat"
15 | token inputs:wrapT = "repeat"
16 | float3 outputs:rgb
17 | }`;
18 | }
19 |
20 | return `#usda 1.0
21 | (
22 | endTimeCode = 200
23 | startTimeCode = 1
24 | timeCodesPerSecond = 24
25 | upAxis = "Y"
26 | )
27 |
28 | def Scope "Materials"
29 | {
30 |
31 | def Material "StingrayPBS_0"
32 | {
33 | token inputs:frame:stPrimvarName = "Texture_uv"
34 | token outputs:displacement.connect =
35 | token outputs:surface.connect =
36 |
37 | def Shader "pbrMat1"
38 | {
39 | uniform token info:id = "UsdPreviewSurface"
40 | float inputs:clearcoat = 0
41 | float inputs:clearcoatRoughness = 0
42 | color3f inputs:diffuseColor.connect =
43 | float inputs:displacement = 0
44 | color3f inputs:emissiveColor.connect =
45 | float inputs:ior = 1.5
46 | float inputs:metallic.connect =
47 | normal3f inputs:normal.connect =
48 | float inputs:occlusion.connect =
49 | float inputs:opacity = 1
50 | float inputs:roughness.connect =
51 | color3f inputs:specularColor = (1, 1, 1)
52 | int inputs:useSpecularWorkflow = 0
53 | token outputs:displacement
54 | token outputs:surface
55 | }
56 |
57 | def Shader "Primvar"
58 | {
59 | uniform token info:id = "UsdPrimvarReader_float2"
60 | float2 inputs:default = (0, 0)
61 | token inputs:varname.connect =
62 | float2 outputs:result
63 | }
64 |
65 | ${this.colorTexture ? createMapSection('color_map', this.colorTexture) : ''}
66 |
67 | ${this.emissiveTexture ? createMapSection('emissive_map', this.emissiveTexture) : ''}
68 |
69 | ${this.metallicTexture ? createMapSection('metallic_map', this.metallicTexture) : ''}
70 |
71 | ${this.normalTexture ? createMapSection('normal_map', this.normalTexture) : ''}
72 |
73 | ${this.aoTexture ? createMapSection('ao_map', this.aoTexture) : ''}
74 |
75 | ${this.roughnessTexture ? createMapSection('roughness_map', this.roughnessTexture) : ''}
76 | }
77 | }
78 | def "Mesh_0" (
79 | add references = @${this.objPath}@
80 | )
81 | {
82 | rel material:binding =
83 | float3 xformOp:scale = (${this.objScale})
84 | uniform token[] xformOpOrder = ["xformOp:scale"]
85 | }`;
86 | }
87 |
88 | module.exports = constructUSDA;
89 |
--------------------------------------------------------------------------------
/lib/converter/handleTextures.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const fs = require('fs');
3 | const path = require('path');
4 |
5 | // Vendor
6 | const sharp = require('sharp');
7 |
8 | // Arguments
9 | const { input, output } = require('./../argsHandler');
10 |
11 | // Utilities
12 | const { getFilename } = require('../utilities');
13 |
14 | function handleTextures(textures) {
15 | const convertedTextures = Object.assign({}, textures);
16 | const inputFileName = path.basename(input);
17 | const inputFilePath = path.resolve(path.dirname(input));
18 | const outputFilePath = path.resolve(path.dirname(output));
19 |
20 | const convertTexture = ([texture, texturePath]) => {
21 | // skip metallicRoughnessTexture because we need to make 2 textures out of it
22 | if (texture === 'metallicRoughnessTexture' || !texturePath) {
23 | return Promise.resolve();
24 | }
25 |
26 | const inputTexturePath = path.join(inputFilePath, texturePath);
27 | if (!fs.existsSync(inputTexturePath)) {
28 | const err = new Error(`${texture} texture (${inputTexturePath}) does not exist`);
29 |
30 | return Promise.reject(err);
31 | }
32 |
33 | const outTextureName = `${getFilename(inputFileName)}_${texture}.jpg`;
34 | const outputTexturePath = path.join(outputFilePath, outTextureName);
35 |
36 | sharp(inputTexturePath)
37 | .flip()
38 | .toFile(outputTexturePath);
39 |
40 | console.log(`Written file to ${outputTexturePath}`);
41 |
42 | convertedTextures[texture] = outTextureName;
43 |
44 | return Promise.resolve();
45 | };
46 |
47 | const { metallicRoughnessTexture } = textures;
48 |
49 | if (metallicRoughnessTexture) {
50 | // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.
51 | // This layout intentionally reserves the 'r' channel for (optional) occlusion map data
52 | const inputTexturePath = path.join(inputFilePath, metallicRoughnessTexture);
53 |
54 | if (!fs.existsSync(inputTexturePath)) {
55 | const err = new Error(
56 | `metallicRoughnessTexture texture (${inputTexturePath}) does not exist`,
57 | );
58 |
59 | return Promise.reject(err);
60 | }
61 |
62 | const outputMetallicPath = path.join(
63 | outputFilePath,
64 | `${getFilename(inputFileName)}_metallicTexture.jpg`,
65 | );
66 |
67 | const outputRoughnessPath = path.join(
68 | outputFilePath,
69 | `${getFilename(inputFileName)}_roughnessTexture.jpg`,
70 | );
71 |
72 | sharp(inputTexturePath)
73 | .extractChannel('blue')
74 | .flip()
75 | .toFile(outputMetallicPath);
76 |
77 | console.log(`Written file to ${outputMetallicPath}`);
78 |
79 | convertedTextures.metallicTexture = `${getFilename(inputFileName)}_metallicTexture.jpg`;
80 |
81 | sharp(inputTexturePath)
82 | .extractChannel('green')
83 | .flip()
84 | .toFile(outputRoughnessPath);
85 |
86 | console.log(`Written file to ${outputRoughnessPath}`);
87 |
88 | convertedTextures.roughnessTexture = `${getFilename(inputFileName)}_roughnessTexture.jpg`;
89 | }
90 |
91 | return Promise.all(Object.entries(textures).map(convertTexture)).then(() => convertedTextures);
92 | }
93 |
94 | module.exports = handleTextures;
95 |
--------------------------------------------------------------------------------
/lib/converter/index.js:
--------------------------------------------------------------------------------
1 | // Arguments
2 | const { scale } = require('./../argsHandler');
3 |
4 | // Converter
5 | const constructOBJ = require('./constructOBJ');
6 | const constructUSDA = require('./constructUSDA');
7 | const handleTextures = require('./handleTextures');
8 | const parseGLTF = require('./parseGLTF');
9 |
10 | function convert(gltf) {
11 | return parseGLTF(gltf)
12 | .then((parsedGLTF) => {
13 | // Extract and write to disk all textures from the glTF file
14 | const textures = handleTextures(parsedGLTF.textures);
15 |
16 | // Construct and write to disk .obj file
17 | const objData = constructOBJ(parsedGLTF.meshes);
18 |
19 | return Promise.all([textures, objData]);
20 | })
21 | .then(([textures, objData]) => {
22 | const {
23 | baseColorTexture,
24 | emissiveTexture,
25 | occlusionTexture,
26 | normalTexture,
27 | metallicTexture,
28 | roughnessTexture,
29 | } = textures;
30 |
31 | const { objPath } = objData;
32 |
33 | const usdaData = constructUSDA({
34 | objPath: `${objPath}`,
35 | objScale: `${scale}, ${scale}, ${scale}`,
36 | colorTexture: baseColorTexture,
37 | emissiveTexture,
38 | metallicTexture,
39 | normalTexture,
40 | aoTexture: occlusionTexture,
41 | roughnessTexture,
42 | });
43 |
44 | return usdaData;
45 | });
46 | }
47 |
48 | module.exports = convert;
49 |
--------------------------------------------------------------------------------
/lib/converter/parseGLTF.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const path = require('path');
3 |
4 | // Arguments
5 | const { input } = require('./../argsHandler');
6 |
7 | // File loader
8 | const fileLoader = require('./../fileLoader');
9 |
10 | function parseGLTF(gltf) {
11 | const inputFilePath = path.resolve(path.dirname(input));
12 |
13 | const {
14 | accessors, buffers, bufferViews, images, materials, textures, meshes,
15 | } = gltf;
16 |
17 | // Geometry attributes
18 | // need to loop over all primitives since they each can use their own materials
19 | const meshAttributesData = meshes[0].primitives[0].attributes;
20 |
21 | // Geometry data
22 | const meshDataIndicesIndex = meshes[0].primitives[0].indices;
23 | const meshDataNormalIndex = meshAttributesData.NORMAL;
24 | const meshDataPositionIndex = meshAttributesData.POSITION;
25 | const meshDataTexcoordIndex = meshAttributesData.TEXCOORD_0;
26 |
27 | const meshList = fileLoader(path.join(inputFilePath, buffers[0].uri)).then((bin) => {
28 | const accessorFn = ({
29 | min, max, componentType, bufferView,
30 | }) => {
31 | const ret = {};
32 |
33 | if (min) {
34 | ret.min = min
35 | .toString()
36 | .split(',')
37 | .map(v => parseFloat(v));
38 | }
39 |
40 | if (max) {
41 | ret.max = max
42 | .toString()
43 | .split(',')
44 | .map(v => parseFloat(v));
45 | }
46 |
47 | const bufferViewData = bufferViews[bufferView];
48 | const slicedBuffer = bin.slice(
49 | bufferViewData.byteOffset,
50 | bufferViewData.byteOffset + bufferViewData.byteLength,
51 | );
52 |
53 | if (componentType === 5126) {
54 | ret.bufferData = new Float32Array(slicedBuffer);
55 | } else if (componentType === 5123) {
56 | ret.bufferData = new Uint16Array(slicedBuffer);
57 | } else {
58 | console.warn(`componentType ${componentType} is unknown`);
59 | }
60 |
61 | return ret;
62 | };
63 |
64 | return accessors.map(accessorFn);
65 | });
66 |
67 | // Texture data
68 | let textureList;
69 | let baseColorTexture = false;
70 | let metallicRoughnessTexture = false;
71 | let emissiveTexture = false;
72 | let occlusionTexture = false;
73 | let normalTexture = false;
74 |
75 | if (textures) {
76 | textureList = textures.map(texture => images[texture.source].uri);
77 |
78 | if (materials[0].pbrMetallicRoughness.baseColorTexture) {
79 | baseColorTexture = textureList[materials[0].pbrMetallicRoughness.baseColorTexture.index];
80 | }
81 |
82 | if (materials[0].pbrMetallicRoughness.metallicRoughnessTexture) {
83 | // eslint-disable-next-line
84 | metallicRoughnessTexture =
85 | textureList[materials[0].pbrMetallicRoughness.metallicRoughnessTexture.index];
86 | }
87 |
88 | if (materials[0].emissiveTexture) {
89 | emissiveTexture = textureList[materials[0].emissiveTexture.index];
90 | }
91 |
92 | if (materials[0].occlusionTexture) {
93 | occlusionTexture = textureList[materials[0].occlusionTexture.index];
94 | }
95 |
96 | if (materials[0].normalTexture) {
97 | normalTexture = textureList[materials[0].normalTexture.index];
98 | }
99 | }
100 |
101 | return Promise.resolve(meshList).then((geometryData) => {
102 | const meshData = {
103 | textures: {
104 | baseColorTexture,
105 | metallicRoughnessTexture,
106 | emissiveTexture,
107 | occlusionTexture,
108 | normalTexture,
109 | },
110 | meshes: {
111 | vertices: geometryData[meshDataPositionIndex],
112 | normals: geometryData[meshDataNormalIndex],
113 | indices: geometryData[meshDataIndicesIndex],
114 | uvs: geometryData[meshDataTexcoordIndex],
115 | },
116 | };
117 |
118 | return meshData;
119 | });
120 | }
121 |
122 | module.exports = parseGLTF;
123 |
--------------------------------------------------------------------------------
/lib/fileLoader.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const fs = require('fs');
3 |
4 | const fileLoader = (filename, type = '') => new Promise((resolve, reject) => {
5 | fs.readFile(filename, type, (error, data) => {
6 | if (error) {
7 | reject(error);
8 | }
9 |
10 | resolve(data);
11 | });
12 | });
13 |
14 | module.exports = fileLoader;
15 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const fs = require('fs');
3 | const path = require('path');
4 |
5 | // Vendor
6 | const gltfValidator = require('gltf-validator');
7 |
8 | // Converter
9 | const converter = require('./converter');
10 |
11 | // Arguments
12 | const { input, output } = require('./argsHandler');
13 |
14 | // Constants
15 | const { SUPPORTED_INPUT_TYPES, SUPPORTED_OUTPUT_TYPES } = require('./constants');
16 |
17 | // File loader
18 | const fileLoader = require('./fileLoader');
19 |
20 | const inputFileExtension = path.extname(input);
21 | const outputFileExtension = path.extname(output);
22 |
23 | if (!SUPPORTED_OUTPUT_TYPES.includes(outputFileExtension)) {
24 | console.error(`${outputFileExtension} is not supported.`);
25 | console.error(`The supported filetypes are: [${SUPPORTED_OUTPUT_TYPES}]`);
26 |
27 | process.exit(1);
28 | }
29 |
30 | if (!SUPPORTED_INPUT_TYPES.includes(inputFileExtension)) {
31 | console.error(`${inputFileExtension} is not supported.`);
32 | console.error(`The supported file extensions are: [${SUPPORTED_INPUT_TYPES}]`);
33 | }
34 |
35 | fileLoader(input, 'utf8')
36 | .then((gltf) => {
37 | const parsedGltf = JSON.parse(gltf);
38 |
39 | gltfValidator
40 | .validateBytes(new Uint8Array(Buffer.from(JSON.stringify(parsedGltf))))
41 | .catch((error) => {
42 | console.warn('Validation failed: ', error);
43 |
44 | process.exit(1);
45 | });
46 |
47 | return converter(parsedGltf);
48 | })
49 | .then((data) => {
50 | try {
51 | fs.writeFileSync(output, data);
52 | } catch (err) {
53 | return Promise.reject(err);
54 | }
55 |
56 | console.log(`Written file to ${output}`);
57 |
58 | return Promise.resolve();
59 | })
60 | .catch((error) => {
61 | console.error(error);
62 |
63 | process.exit(1);
64 | });
65 |
--------------------------------------------------------------------------------
/lib/utilities.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const path = require('path');
3 |
4 | const utilities = {
5 | getFilename: filename => path.parse(filename).name,
6 | };
7 |
8 | module.exports = utilities;
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gltf-to-usdz-research",
3 | "version": "0.0.1",
4 | "description": "Proof of concept of converting glTF to USDZ for AR Quick Look (iOS 12+).",
5 | "main": "index.js",
6 | "bin": {
7 | "gltf-to-usdz": "gltf-to-usdz.js"
8 | },
9 | "directories": {
10 | "lib": "lib"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/TimvanScherpenzeel/gltf-to-usdz-research.git"
15 | },
16 | "author": "Tim van Scherpenzeel",
17 | "license": "MIT",
18 | "bugs": {
19 | "url": "https://github.com/TimvanScherpenzeel/gltf-to-usdz-research/issues"
20 | },
21 | "homepage": "https://github.com/TimvanScherpenzeel/gltf-to-usdz-research#readme",
22 | "scripts": {
23 | "lint": "eslint './**/*.js' --ignore-pattern '!.eslintrc.js' .eslintrc.js"
24 | },
25 | "dependencies": {
26 | "argparse": "^1.0.10",
27 | "gltf-validator": "^2.0.0-dev.2.5",
28 | "sharp": "^0.20.8"
29 | },
30 | "devDependencies": {
31 | "eslint": "^5.5.0",
32 | "eslint-config-airbnb-base": "^13.1.0",
33 | "eslint-plugin-import": "^2.14.0",
34 | "prettier": "^1.14.2",
35 | "prettier-eslint": "^8.8.2"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.0.0"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
8 | dependencies:
9 | "@babel/highlight" "^7.0.0"
10 |
11 | "@babel/highlight@^7.0.0":
12 | version "7.0.0"
13 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
14 | dependencies:
15 | chalk "^2.0.0"
16 | esutils "^2.0.2"
17 | js-tokens "^4.0.0"
18 |
19 | acorn-jsx@^3.0.0:
20 | version "3.0.1"
21 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
22 | dependencies:
23 | acorn "^3.0.4"
24 |
25 | acorn-jsx@^4.1.1:
26 | version "4.1.1"
27 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e"
28 | dependencies:
29 | acorn "^5.0.3"
30 |
31 | acorn@^3.0.4:
32 | version "3.3.0"
33 | resolved "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
34 |
35 | acorn@^5.0.3, acorn@^5.5.0, acorn@^5.6.0:
36 | version "5.7.3"
37 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
38 |
39 | ajv-keywords@^2.1.0:
40 | version "2.1.1"
41 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
42 |
43 | ajv-keywords@^3.0.0:
44 | version "3.2.0"
45 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
46 |
47 | ajv@^5.2.3, ajv@^5.3.0:
48 | version "5.5.2"
49 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
50 | dependencies:
51 | co "^4.6.0"
52 | fast-deep-equal "^1.0.0"
53 | fast-json-stable-stringify "^2.0.0"
54 | json-schema-traverse "^0.3.0"
55 |
56 | ajv@^6.0.1, ajv@^6.5.3:
57 | version "6.5.3"
58 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9"
59 | dependencies:
60 | fast-deep-equal "^2.0.1"
61 | fast-json-stable-stringify "^2.0.0"
62 | json-schema-traverse "^0.4.1"
63 | uri-js "^4.2.2"
64 |
65 | ansi-escapes@^3.0.0:
66 | version "3.1.0"
67 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
68 |
69 | ansi-regex@^2.0.0:
70 | version "2.1.1"
71 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
72 |
73 | ansi-regex@^3.0.0:
74 | version "3.0.0"
75 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
76 |
77 | ansi-styles@^2.2.1:
78 | version "2.2.1"
79 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
80 |
81 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
82 | version "3.2.1"
83 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
84 | dependencies:
85 | color-convert "^1.9.0"
86 |
87 | aproba@^1.0.3:
88 | version "1.2.0"
89 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
90 |
91 | are-we-there-yet@~1.1.2:
92 | version "1.1.5"
93 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
94 | dependencies:
95 | delegates "^1.0.0"
96 | readable-stream "^2.0.6"
97 |
98 | argparse@^1.0.10, argparse@^1.0.7:
99 | version "1.0.10"
100 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
101 | dependencies:
102 | sprintf-js "~1.0.2"
103 |
104 | array-union@^1.0.1:
105 | version "1.0.2"
106 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
107 | dependencies:
108 | array-uniq "^1.0.1"
109 |
110 | array-uniq@^1.0.1:
111 | version "1.0.3"
112 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
113 |
114 | arrify@^1.0.0:
115 | version "1.0.1"
116 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
117 |
118 | babel-code-frame@^6.22.0:
119 | version "6.26.0"
120 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
121 | dependencies:
122 | chalk "^1.1.3"
123 | esutils "^2.0.2"
124 | js-tokens "^3.0.2"
125 |
126 | babel-runtime@^6.26.0:
127 | version "6.26.0"
128 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
129 | dependencies:
130 | core-js "^2.4.0"
131 | regenerator-runtime "^0.11.0"
132 |
133 | balanced-match@^1.0.0:
134 | version "1.0.0"
135 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
136 |
137 | bl@^1.0.0:
138 | version "1.2.2"
139 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
140 | dependencies:
141 | readable-stream "^2.3.5"
142 | safe-buffer "^5.1.1"
143 |
144 | brace-expansion@^1.1.7:
145 | version "1.1.11"
146 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
147 | dependencies:
148 | balanced-match "^1.0.0"
149 | concat-map "0.0.1"
150 |
151 | buffer-alloc-unsafe@^1.1.0:
152 | version "1.1.0"
153 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
154 |
155 | buffer-alloc@^1.1.0:
156 | version "1.2.0"
157 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
158 | dependencies:
159 | buffer-alloc-unsafe "^1.1.0"
160 | buffer-fill "^1.0.0"
161 |
162 | buffer-fill@^1.0.0:
163 | version "1.0.0"
164 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
165 |
166 | buffer-from@^1.0.0:
167 | version "1.1.1"
168 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
169 |
170 | builtin-modules@^1.0.0:
171 | version "1.1.1"
172 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
173 |
174 | caller-path@^0.1.0:
175 | version "0.1.0"
176 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
177 | dependencies:
178 | callsites "^0.2.0"
179 |
180 | callsites@^0.2.0:
181 | version "0.2.0"
182 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
183 |
184 | chalk@^1.1.3:
185 | version "1.1.3"
186 | resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
187 | dependencies:
188 | ansi-styles "^2.2.1"
189 | escape-string-regexp "^1.0.2"
190 | has-ansi "^2.0.0"
191 | strip-ansi "^3.0.0"
192 | supports-color "^2.0.0"
193 |
194 | chalk@^2.0.0, chalk@^2.1.0:
195 | version "2.4.1"
196 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
197 | dependencies:
198 | ansi-styles "^3.2.1"
199 | escape-string-regexp "^1.0.5"
200 | supports-color "^5.3.0"
201 |
202 | chardet@^0.4.0:
203 | version "0.4.2"
204 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
205 |
206 | chardet@^0.7.0:
207 | version "0.7.0"
208 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
209 |
210 | chownr@^1.0.1:
211 | version "1.0.1"
212 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
213 |
214 | circular-json@^0.3.1:
215 | version "0.3.3"
216 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
217 |
218 | cli-cursor@^2.1.0:
219 | version "2.1.0"
220 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
221 | dependencies:
222 | restore-cursor "^2.0.0"
223 |
224 | cli-width@^2.0.0:
225 | version "2.2.0"
226 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
227 |
228 | co@^4.6.0:
229 | version "4.6.0"
230 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
231 |
232 | code-point-at@^1.0.0:
233 | version "1.1.0"
234 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
235 |
236 | color-convert@^1.9.0, color-convert@^1.9.1:
237 | version "1.9.3"
238 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
239 | dependencies:
240 | color-name "1.1.3"
241 |
242 | color-name@1.1.3, color-name@^1.0.0:
243 | version "1.1.3"
244 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
245 |
246 | color-string@^1.5.2:
247 | version "1.5.3"
248 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
249 | dependencies:
250 | color-name "^1.0.0"
251 | simple-swizzle "^0.2.2"
252 |
253 | color@^3.0.0:
254 | version "3.0.0"
255 | resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
256 | dependencies:
257 | color-convert "^1.9.1"
258 | color-string "^1.5.2"
259 |
260 | common-tags@^1.4.0:
261 | version "1.8.0"
262 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
263 |
264 | concat-map@0.0.1:
265 | version "0.0.1"
266 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
267 |
268 | concat-stream@^1.6.0:
269 | version "1.6.2"
270 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
271 | dependencies:
272 | buffer-from "^1.0.0"
273 | inherits "^2.0.3"
274 | readable-stream "^2.2.2"
275 | typedarray "^0.0.6"
276 |
277 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
278 | version "1.1.0"
279 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
280 |
281 | contains-path@^0.1.0:
282 | version "0.1.0"
283 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
284 |
285 | core-js@^2.4.0:
286 | version "2.5.7"
287 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
288 |
289 | core-util-is@~1.0.0:
290 | version "1.0.2"
291 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
292 |
293 | cross-spawn@^5.1.0:
294 | version "5.1.0"
295 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
296 | dependencies:
297 | lru-cache "^4.0.1"
298 | shebang-command "^1.2.0"
299 | which "^1.2.9"
300 |
301 | cross-spawn@^6.0.5:
302 | version "6.0.5"
303 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
304 | dependencies:
305 | nice-try "^1.0.4"
306 | path-key "^2.0.1"
307 | semver "^5.5.0"
308 | shebang-command "^1.2.0"
309 | which "^1.2.9"
310 |
311 | debug@^2.6.8, debug@^2.6.9:
312 | version "2.6.9"
313 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
314 | dependencies:
315 | ms "2.0.0"
316 |
317 | debug@^3.1.0:
318 | version "3.2.5"
319 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407"
320 | dependencies:
321 | ms "^2.1.1"
322 |
323 | decompress-response@^3.3.0:
324 | version "3.3.0"
325 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
326 | dependencies:
327 | mimic-response "^1.0.0"
328 |
329 | deep-extend@^0.6.0:
330 | version "0.6.0"
331 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
332 |
333 | deep-is@~0.1.3:
334 | version "0.1.3"
335 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
336 |
337 | define-properties@^1.1.2:
338 | version "1.1.3"
339 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
340 | dependencies:
341 | object-keys "^1.0.12"
342 |
343 | del@^2.0.2:
344 | version "2.2.2"
345 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
346 | dependencies:
347 | globby "^5.0.0"
348 | is-path-cwd "^1.0.0"
349 | is-path-in-cwd "^1.0.0"
350 | object-assign "^4.0.1"
351 | pify "^2.0.0"
352 | pinkie-promise "^2.0.0"
353 | rimraf "^2.2.8"
354 |
355 | delegates@^1.0.0:
356 | version "1.0.0"
357 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
358 |
359 | detect-libc@^1.0.3:
360 | version "1.0.3"
361 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
362 |
363 | dlv@^1.1.0:
364 | version "1.1.2"
365 | resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.2.tgz#270f6737b30d25b6657a7e962c784403f85137e5"
366 |
367 | doctrine@1.5.0:
368 | version "1.5.0"
369 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
370 | dependencies:
371 | esutils "^2.0.2"
372 | isarray "^1.0.0"
373 |
374 | doctrine@^2.1.0:
375 | version "2.1.0"
376 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
377 | dependencies:
378 | esutils "^2.0.2"
379 |
380 | end-of-stream@^1.0.0, end-of-stream@^1.1.0:
381 | version "1.4.1"
382 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
383 | dependencies:
384 | once "^1.4.0"
385 |
386 | error-ex@^1.2.0:
387 | version "1.3.2"
388 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
389 | dependencies:
390 | is-arrayish "^0.2.1"
391 |
392 | es-abstract@^1.6.1:
393 | version "1.12.0"
394 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
395 | dependencies:
396 | es-to-primitive "^1.1.1"
397 | function-bind "^1.1.1"
398 | has "^1.0.1"
399 | is-callable "^1.1.3"
400 | is-regex "^1.0.4"
401 |
402 | es-to-primitive@^1.1.1:
403 | version "1.1.1"
404 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
405 | dependencies:
406 | is-callable "^1.1.1"
407 | is-date-object "^1.0.1"
408 | is-symbol "^1.0.1"
409 |
410 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
411 | version "1.0.5"
412 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
413 |
414 | eslint-config-airbnb-base@^13.1.0:
415 | version "13.1.0"
416 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c"
417 | dependencies:
418 | eslint-restricted-globals "^0.1.1"
419 | object.assign "^4.1.0"
420 | object.entries "^1.0.4"
421 |
422 | eslint-import-resolver-node@^0.3.1:
423 | version "0.3.2"
424 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
425 | dependencies:
426 | debug "^2.6.9"
427 | resolve "^1.5.0"
428 |
429 | eslint-module-utils@^2.2.0:
430 | version "2.2.0"
431 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746"
432 | dependencies:
433 | debug "^2.6.8"
434 | pkg-dir "^1.0.0"
435 |
436 | eslint-plugin-import@^2.14.0:
437 | version "2.14.0"
438 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8"
439 | dependencies:
440 | contains-path "^0.1.0"
441 | debug "^2.6.8"
442 | doctrine "1.5.0"
443 | eslint-import-resolver-node "^0.3.1"
444 | eslint-module-utils "^2.2.0"
445 | has "^1.0.1"
446 | lodash "^4.17.4"
447 | minimatch "^3.0.3"
448 | read-pkg-up "^2.0.0"
449 | resolve "^1.6.0"
450 |
451 | eslint-restricted-globals@^0.1.1:
452 | version "0.1.1"
453 | resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
454 |
455 | eslint-scope@^3.7.1:
456 | version "3.7.3"
457 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
458 | dependencies:
459 | esrecurse "^4.1.0"
460 | estraverse "^4.1.1"
461 |
462 | eslint-scope@^4.0.0:
463 | version "4.0.0"
464 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
465 | dependencies:
466 | esrecurse "^4.1.0"
467 | estraverse "^4.1.1"
468 |
469 | eslint-utils@^1.3.1:
470 | version "1.3.1"
471 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
472 |
473 | eslint-visitor-keys@^1.0.0:
474 | version "1.0.0"
475 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
476 |
477 | eslint@^4.0.0:
478 | version "4.19.1"
479 | resolved "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
480 | dependencies:
481 | ajv "^5.3.0"
482 | babel-code-frame "^6.22.0"
483 | chalk "^2.1.0"
484 | concat-stream "^1.6.0"
485 | cross-spawn "^5.1.0"
486 | debug "^3.1.0"
487 | doctrine "^2.1.0"
488 | eslint-scope "^3.7.1"
489 | eslint-visitor-keys "^1.0.0"
490 | espree "^3.5.4"
491 | esquery "^1.0.0"
492 | esutils "^2.0.2"
493 | file-entry-cache "^2.0.0"
494 | functional-red-black-tree "^1.0.1"
495 | glob "^7.1.2"
496 | globals "^11.0.1"
497 | ignore "^3.3.3"
498 | imurmurhash "^0.1.4"
499 | inquirer "^3.0.6"
500 | is-resolvable "^1.0.0"
501 | js-yaml "^3.9.1"
502 | json-stable-stringify-without-jsonify "^1.0.1"
503 | levn "^0.3.0"
504 | lodash "^4.17.4"
505 | minimatch "^3.0.2"
506 | mkdirp "^0.5.1"
507 | natural-compare "^1.4.0"
508 | optionator "^0.8.2"
509 | path-is-inside "^1.0.2"
510 | pluralize "^7.0.0"
511 | progress "^2.0.0"
512 | regexpp "^1.0.1"
513 | require-uncached "^1.0.3"
514 | semver "^5.3.0"
515 | strip-ansi "^4.0.0"
516 | strip-json-comments "~2.0.1"
517 | table "4.0.2"
518 | text-table "~0.2.0"
519 |
520 | eslint@^5.5.0:
521 | version "5.5.0"
522 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.5.0.tgz#8557fcceab5141a8197da9ffd9904f89f64425c6"
523 | dependencies:
524 | "@babel/code-frame" "^7.0.0"
525 | ajv "^6.5.3"
526 | chalk "^2.1.0"
527 | cross-spawn "^6.0.5"
528 | debug "^3.1.0"
529 | doctrine "^2.1.0"
530 | eslint-scope "^4.0.0"
531 | eslint-utils "^1.3.1"
532 | eslint-visitor-keys "^1.0.0"
533 | espree "^4.0.0"
534 | esquery "^1.0.1"
535 | esutils "^2.0.2"
536 | file-entry-cache "^2.0.0"
537 | functional-red-black-tree "^1.0.1"
538 | glob "^7.1.2"
539 | globals "^11.7.0"
540 | ignore "^4.0.6"
541 | imurmurhash "^0.1.4"
542 | inquirer "^6.1.0"
543 | is-resolvable "^1.1.0"
544 | js-yaml "^3.12.0"
545 | json-stable-stringify-without-jsonify "^1.0.1"
546 | levn "^0.3.0"
547 | lodash "^4.17.5"
548 | minimatch "^3.0.4"
549 | mkdirp "^0.5.1"
550 | natural-compare "^1.4.0"
551 | optionator "^0.8.2"
552 | path-is-inside "^1.0.2"
553 | pluralize "^7.0.0"
554 | progress "^2.0.0"
555 | regexpp "^2.0.0"
556 | require-uncached "^1.0.3"
557 | semver "^5.5.1"
558 | strip-ansi "^4.0.0"
559 | strip-json-comments "^2.0.1"
560 | table "^4.0.3"
561 | text-table "^0.2.0"
562 |
563 | espree@^3.5.2, espree@^3.5.4:
564 | version "3.5.4"
565 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
566 | dependencies:
567 | acorn "^5.5.0"
568 | acorn-jsx "^3.0.0"
569 |
570 | espree@^4.0.0:
571 | version "4.0.0"
572 | resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634"
573 | dependencies:
574 | acorn "^5.6.0"
575 | acorn-jsx "^4.1.1"
576 |
577 | esprima@^4.0.0:
578 | version "4.0.1"
579 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
580 |
581 | esquery@^1.0.0, esquery@^1.0.1:
582 | version "1.0.1"
583 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
584 | dependencies:
585 | estraverse "^4.0.0"
586 |
587 | esrecurse@^4.1.0:
588 | version "4.2.1"
589 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
590 | dependencies:
591 | estraverse "^4.1.0"
592 |
593 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
594 | version "4.2.0"
595 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
596 |
597 | esutils@^2.0.2:
598 | version "2.0.2"
599 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
600 |
601 | expand-template@^1.0.2:
602 | version "1.1.1"
603 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd"
604 |
605 | external-editor@^2.0.4:
606 | version "2.2.0"
607 | resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
608 | dependencies:
609 | chardet "^0.4.0"
610 | iconv-lite "^0.4.17"
611 | tmp "^0.0.33"
612 |
613 | external-editor@^3.0.0:
614 | version "3.0.3"
615 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
616 | dependencies:
617 | chardet "^0.7.0"
618 | iconv-lite "^0.4.24"
619 | tmp "^0.0.33"
620 |
621 | fast-deep-equal@^1.0.0:
622 | version "1.1.0"
623 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
624 |
625 | fast-deep-equal@^2.0.1:
626 | version "2.0.1"
627 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
628 |
629 | fast-json-stable-stringify@^2.0.0:
630 | version "2.0.0"
631 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
632 |
633 | fast-levenshtein@~2.0.4:
634 | version "2.0.6"
635 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
636 |
637 | figures@^2.0.0:
638 | version "2.0.0"
639 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
640 | dependencies:
641 | escape-string-regexp "^1.0.5"
642 |
643 | file-entry-cache@^2.0.0:
644 | version "2.0.0"
645 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
646 | dependencies:
647 | flat-cache "^1.2.1"
648 | object-assign "^4.0.1"
649 |
650 | find-up@^1.0.0:
651 | version "1.1.2"
652 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
653 | dependencies:
654 | path-exists "^2.0.0"
655 | pinkie-promise "^2.0.0"
656 |
657 | find-up@^2.0.0:
658 | version "2.1.0"
659 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
660 | dependencies:
661 | locate-path "^2.0.0"
662 |
663 | flat-cache@^1.2.1:
664 | version "1.3.0"
665 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
666 | dependencies:
667 | circular-json "^0.3.1"
668 | del "^2.0.2"
669 | graceful-fs "^4.1.2"
670 | write "^0.2.1"
671 |
672 | fs-constants@^1.0.0:
673 | version "1.0.0"
674 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
675 |
676 | fs-copy-file-sync@^1.1.1:
677 | version "1.1.1"
678 | resolved "https://registry.yarnpkg.com/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz#11bf32c096c10d126e5f6b36d06eece776062918"
679 |
680 | fs-minipass@^1.2.5:
681 | version "1.2.5"
682 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
683 | dependencies:
684 | minipass "^2.2.1"
685 |
686 | fs.realpath@^1.0.0:
687 | version "1.0.0"
688 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
689 |
690 | function-bind@^1.1.0, function-bind@^1.1.1:
691 | version "1.1.1"
692 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
693 |
694 | functional-red-black-tree@^1.0.1:
695 | version "1.0.1"
696 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
697 |
698 | gauge@~2.7.3:
699 | version "2.7.4"
700 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
701 | dependencies:
702 | aproba "^1.0.3"
703 | console-control-strings "^1.0.0"
704 | has-unicode "^2.0.0"
705 | object-assign "^4.1.0"
706 | signal-exit "^3.0.0"
707 | string-width "^1.0.1"
708 | strip-ansi "^3.0.1"
709 | wide-align "^1.1.0"
710 |
711 | github-from-package@0.0.0:
712 | version "0.0.0"
713 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
714 |
715 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
716 | version "7.1.3"
717 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
718 | dependencies:
719 | fs.realpath "^1.0.0"
720 | inflight "^1.0.4"
721 | inherits "2"
722 | minimatch "^3.0.4"
723 | once "^1.3.0"
724 | path-is-absolute "^1.0.0"
725 |
726 | globals@^11.0.1, globals@^11.7.0:
727 | version "11.7.0"
728 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673"
729 |
730 | globby@^5.0.0:
731 | version "5.0.0"
732 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
733 | dependencies:
734 | array-union "^1.0.1"
735 | arrify "^1.0.0"
736 | glob "^7.0.3"
737 | object-assign "^4.0.1"
738 | pify "^2.0.0"
739 | pinkie-promise "^2.0.0"
740 |
741 | gltf-validator@^2.0.0-dev.2.5:
742 | version "2.0.0-dev.2.5"
743 | resolved "https://registry.yarnpkg.com/gltf-validator/-/gltf-validator-2.0.0-dev.2.5.tgz#88c1507b99bae244dcd70605460551ba35b95b9e"
744 |
745 | graceful-fs@^4.1.2:
746 | version "4.1.11"
747 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
748 |
749 | has-ansi@^2.0.0:
750 | version "2.0.0"
751 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
752 | dependencies:
753 | ansi-regex "^2.0.0"
754 |
755 | has-flag@^3.0.0:
756 | version "3.0.0"
757 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
758 |
759 | has-symbols@^1.0.0:
760 | version "1.0.0"
761 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
762 |
763 | has-unicode@^2.0.0:
764 | version "2.0.1"
765 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
766 |
767 | has@^1.0.1:
768 | version "1.0.3"
769 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
770 | dependencies:
771 | function-bind "^1.1.1"
772 |
773 | hosted-git-info@^2.1.4:
774 | version "2.7.1"
775 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
776 |
777 | iconv-lite@^0.4.17, iconv-lite@^0.4.24:
778 | version "0.4.24"
779 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
780 | dependencies:
781 | safer-buffer ">= 2.1.2 < 3"
782 |
783 | ignore@^3.3.3:
784 | version "3.3.10"
785 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
786 |
787 | ignore@^4.0.6:
788 | version "4.0.6"
789 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
790 |
791 | imurmurhash@^0.1.4:
792 | version "0.1.4"
793 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
794 |
795 | indent-string@^3.2.0:
796 | version "3.2.0"
797 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
798 |
799 | inflight@^1.0.4:
800 | version "1.0.6"
801 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
802 | dependencies:
803 | once "^1.3.0"
804 | wrappy "1"
805 |
806 | inherits@2, inherits@^2.0.3, inherits@~2.0.3:
807 | version "2.0.3"
808 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
809 |
810 | ini@~1.3.0:
811 | version "1.3.5"
812 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
813 |
814 | inquirer@^3.0.6:
815 | version "3.3.0"
816 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
817 | dependencies:
818 | ansi-escapes "^3.0.0"
819 | chalk "^2.0.0"
820 | cli-cursor "^2.1.0"
821 | cli-width "^2.0.0"
822 | external-editor "^2.0.4"
823 | figures "^2.0.0"
824 | lodash "^4.3.0"
825 | mute-stream "0.0.7"
826 | run-async "^2.2.0"
827 | rx-lite "^4.0.8"
828 | rx-lite-aggregates "^4.0.8"
829 | string-width "^2.1.0"
830 | strip-ansi "^4.0.0"
831 | through "^2.3.6"
832 |
833 | inquirer@^6.1.0:
834 | version "6.2.0"
835 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8"
836 | dependencies:
837 | ansi-escapes "^3.0.0"
838 | chalk "^2.0.0"
839 | cli-cursor "^2.1.0"
840 | cli-width "^2.0.0"
841 | external-editor "^3.0.0"
842 | figures "^2.0.0"
843 | lodash "^4.17.10"
844 | mute-stream "0.0.7"
845 | run-async "^2.2.0"
846 | rxjs "^6.1.0"
847 | string-width "^2.1.0"
848 | strip-ansi "^4.0.0"
849 | through "^2.3.6"
850 |
851 | is-arrayish@^0.2.1:
852 | version "0.2.1"
853 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
854 |
855 | is-arrayish@^0.3.1:
856 | version "0.3.2"
857 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
858 |
859 | is-builtin-module@^1.0.0:
860 | version "1.0.0"
861 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
862 | dependencies:
863 | builtin-modules "^1.0.0"
864 |
865 | is-callable@^1.1.1, is-callable@^1.1.3:
866 | version "1.1.4"
867 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
868 |
869 | is-date-object@^1.0.1:
870 | version "1.0.1"
871 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
872 |
873 | is-fullwidth-code-point@^1.0.0:
874 | version "1.0.0"
875 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
876 | dependencies:
877 | number-is-nan "^1.0.0"
878 |
879 | is-fullwidth-code-point@^2.0.0:
880 | version "2.0.0"
881 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
882 |
883 | is-path-cwd@^1.0.0:
884 | version "1.0.0"
885 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
886 |
887 | is-path-in-cwd@^1.0.0:
888 | version "1.0.1"
889 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
890 | dependencies:
891 | is-path-inside "^1.0.0"
892 |
893 | is-path-inside@^1.0.0:
894 | version "1.0.1"
895 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
896 | dependencies:
897 | path-is-inside "^1.0.1"
898 |
899 | is-promise@^2.1.0:
900 | version "2.1.0"
901 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
902 |
903 | is-regex@^1.0.4:
904 | version "1.0.4"
905 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
906 | dependencies:
907 | has "^1.0.1"
908 |
909 | is-resolvable@^1.0.0, is-resolvable@^1.1.0:
910 | version "1.1.0"
911 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
912 |
913 | is-symbol@^1.0.1:
914 | version "1.0.1"
915 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
916 |
917 | isarray@^1.0.0, isarray@~1.0.0:
918 | version "1.0.0"
919 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
920 |
921 | isexe@^2.0.0:
922 | version "2.0.0"
923 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
924 |
925 | js-tokens@^3.0.2:
926 | version "3.0.2"
927 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
928 |
929 | js-tokens@^4.0.0:
930 | version "4.0.0"
931 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
932 |
933 | js-yaml@^3.12.0, js-yaml@^3.9.1:
934 | version "3.12.0"
935 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
936 | dependencies:
937 | argparse "^1.0.7"
938 | esprima "^4.0.0"
939 |
940 | json-schema-traverse@^0.3.0:
941 | version "0.3.1"
942 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
943 |
944 | json-schema-traverse@^0.4.1:
945 | version "0.4.1"
946 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
947 |
948 | json-stable-stringify-without-jsonify@^1.0.1:
949 | version "1.0.1"
950 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
951 |
952 | levn@^0.3.0, levn@~0.3.0:
953 | version "0.3.0"
954 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
955 | dependencies:
956 | prelude-ls "~1.1.2"
957 | type-check "~0.3.2"
958 |
959 | load-json-file@^2.0.0:
960 | version "2.0.0"
961 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
962 | dependencies:
963 | graceful-fs "^4.1.2"
964 | parse-json "^2.2.0"
965 | pify "^2.0.0"
966 | strip-bom "^3.0.0"
967 |
968 | locate-path@^2.0.0:
969 | version "2.0.0"
970 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
971 | dependencies:
972 | p-locate "^2.0.0"
973 | path-exists "^3.0.0"
974 |
975 | lodash.merge@^4.6.0:
976 | version "4.6.1"
977 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
978 |
979 | lodash.unescape@4.0.1:
980 | version "4.0.1"
981 | resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
982 |
983 | lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
984 | version "4.17.11"
985 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
986 |
987 | loglevel-colored-level-prefix@^1.0.0:
988 | version "1.0.0"
989 | resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e"
990 | dependencies:
991 | chalk "^1.1.3"
992 | loglevel "^1.4.1"
993 |
994 | loglevel@^1.4.1:
995 | version "1.6.1"
996 | resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
997 |
998 | lru-cache@^4.0.1:
999 | version "4.1.3"
1000 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
1001 | dependencies:
1002 | pseudomap "^1.0.2"
1003 | yallist "^2.1.2"
1004 |
1005 | mimic-fn@^1.0.0:
1006 | version "1.2.0"
1007 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
1008 |
1009 | mimic-response@^1.0.0:
1010 | version "1.0.1"
1011 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
1012 |
1013 | minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
1014 | version "3.0.4"
1015 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1016 | dependencies:
1017 | brace-expansion "^1.1.7"
1018 |
1019 | minimist@0.0.8:
1020 | version "0.0.8"
1021 | resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1022 |
1023 | minimist@^1.2.0:
1024 | version "1.2.0"
1025 | resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1026 |
1027 | minipass@^2.2.1, minipass@^2.3.3:
1028 | version "2.3.4"
1029 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957"
1030 | dependencies:
1031 | safe-buffer "^5.1.2"
1032 | yallist "^3.0.0"
1033 |
1034 | minizlib@^1.1.0:
1035 | version "1.1.0"
1036 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
1037 | dependencies:
1038 | minipass "^2.2.1"
1039 |
1040 | mkdirp@^0.5.0, mkdirp@^0.5.1:
1041 | version "0.5.1"
1042 | resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1043 | dependencies:
1044 | minimist "0.0.8"
1045 |
1046 | ms@2.0.0:
1047 | version "2.0.0"
1048 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1049 |
1050 | ms@^2.1.1:
1051 | version "2.1.1"
1052 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1053 |
1054 | mute-stream@0.0.7:
1055 | version "0.0.7"
1056 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
1057 |
1058 | nan@^2.11.0:
1059 | version "2.11.0"
1060 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099"
1061 |
1062 | natural-compare@^1.4.0:
1063 | version "1.4.0"
1064 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1065 |
1066 | nice-try@^1.0.4:
1067 | version "1.0.5"
1068 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
1069 |
1070 | node-abi@^2.2.0:
1071 | version "2.4.3"
1072 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.3.tgz#43666b7b17e57863e572409edbb82115ac7af28b"
1073 | dependencies:
1074 | semver "^5.4.1"
1075 |
1076 | noop-logger@^0.1.1:
1077 | version "0.1.1"
1078 | resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
1079 |
1080 | normalize-package-data@^2.3.2:
1081 | version "2.4.0"
1082 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
1083 | dependencies:
1084 | hosted-git-info "^2.1.4"
1085 | is-builtin-module "^1.0.0"
1086 | semver "2 || 3 || 4 || 5"
1087 | validate-npm-package-license "^3.0.1"
1088 |
1089 | npmlog@^4.0.1, npmlog@^4.1.2:
1090 | version "4.1.2"
1091 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1092 | dependencies:
1093 | are-we-there-yet "~1.1.2"
1094 | console-control-strings "~1.1.0"
1095 | gauge "~2.7.3"
1096 | set-blocking "~2.0.0"
1097 |
1098 | number-is-nan@^1.0.0:
1099 | version "1.0.1"
1100 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1101 |
1102 | object-assign@^4.0.1, object-assign@^4.1.0:
1103 | version "4.1.1"
1104 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1105 |
1106 | object-keys@^1.0.11, object-keys@^1.0.12:
1107 | version "1.0.12"
1108 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
1109 |
1110 | object.assign@^4.1.0:
1111 | version "4.1.0"
1112 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
1113 | dependencies:
1114 | define-properties "^1.1.2"
1115 | function-bind "^1.1.1"
1116 | has-symbols "^1.0.0"
1117 | object-keys "^1.0.11"
1118 |
1119 | object.entries@^1.0.4:
1120 | version "1.0.4"
1121 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
1122 | dependencies:
1123 | define-properties "^1.1.2"
1124 | es-abstract "^1.6.1"
1125 | function-bind "^1.1.0"
1126 | has "^1.0.1"
1127 |
1128 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1129 | version "1.4.0"
1130 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1131 | dependencies:
1132 | wrappy "1"
1133 |
1134 | onetime@^2.0.0:
1135 | version "2.0.1"
1136 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
1137 | dependencies:
1138 | mimic-fn "^1.0.0"
1139 |
1140 | optionator@^0.8.2:
1141 | version "0.8.2"
1142 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1143 | dependencies:
1144 | deep-is "~0.1.3"
1145 | fast-levenshtein "~2.0.4"
1146 | levn "~0.3.0"
1147 | prelude-ls "~1.1.2"
1148 | type-check "~0.3.2"
1149 | wordwrap "~1.0.0"
1150 |
1151 | os-homedir@^1.0.1:
1152 | version "1.0.2"
1153 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1154 |
1155 | os-tmpdir@~1.0.2:
1156 | version "1.0.2"
1157 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1158 |
1159 | p-limit@^1.1.0:
1160 | version "1.3.0"
1161 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1162 | dependencies:
1163 | p-try "^1.0.0"
1164 |
1165 | p-locate@^2.0.0:
1166 | version "2.0.0"
1167 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1168 | dependencies:
1169 | p-limit "^1.1.0"
1170 |
1171 | p-try@^1.0.0:
1172 | version "1.0.0"
1173 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1174 |
1175 | parse-json@^2.2.0:
1176 | version "2.2.0"
1177 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1178 | dependencies:
1179 | error-ex "^1.2.0"
1180 |
1181 | path-exists@^2.0.0:
1182 | version "2.1.0"
1183 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1184 | dependencies:
1185 | pinkie-promise "^2.0.0"
1186 |
1187 | path-exists@^3.0.0:
1188 | version "3.0.0"
1189 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1190 |
1191 | path-is-absolute@^1.0.0:
1192 | version "1.0.1"
1193 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1194 |
1195 | path-is-inside@^1.0.1, path-is-inside@^1.0.2:
1196 | version "1.0.2"
1197 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1198 |
1199 | path-key@^2.0.1:
1200 | version "2.0.1"
1201 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1202 |
1203 | path-parse@^1.0.5:
1204 | version "1.0.6"
1205 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1206 |
1207 | path-type@^2.0.0:
1208 | version "2.0.0"
1209 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
1210 | dependencies:
1211 | pify "^2.0.0"
1212 |
1213 | pify@^2.0.0:
1214 | version "2.3.0"
1215 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1216 |
1217 | pinkie-promise@^2.0.0:
1218 | version "2.0.1"
1219 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1220 | dependencies:
1221 | pinkie "^2.0.0"
1222 |
1223 | pinkie@^2.0.0:
1224 | version "2.0.4"
1225 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1226 |
1227 | pkg-dir@^1.0.0:
1228 | version "1.0.0"
1229 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
1230 | dependencies:
1231 | find-up "^1.0.0"
1232 |
1233 | pluralize@^7.0.0:
1234 | version "7.0.0"
1235 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
1236 |
1237 | prebuild-install@^4.0.0:
1238 | version "4.0.0"
1239 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-4.0.0.tgz#206ce8106ce5efa4b6cf062fc8a0a7d93c17f3a8"
1240 | dependencies:
1241 | detect-libc "^1.0.3"
1242 | expand-template "^1.0.2"
1243 | github-from-package "0.0.0"
1244 | minimist "^1.2.0"
1245 | mkdirp "^0.5.1"
1246 | node-abi "^2.2.0"
1247 | noop-logger "^0.1.1"
1248 | npmlog "^4.0.1"
1249 | os-homedir "^1.0.1"
1250 | pump "^2.0.1"
1251 | rc "^1.1.6"
1252 | simple-get "^2.7.0"
1253 | tar-fs "^1.13.0"
1254 | tunnel-agent "^0.6.0"
1255 | which-pm-runs "^1.0.0"
1256 |
1257 | prelude-ls@~1.1.2:
1258 | version "1.1.2"
1259 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1260 |
1261 | prettier-eslint@^8.8.2:
1262 | version "8.8.2"
1263 | resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.8.2.tgz#fcb29a48ab4524e234680797fe70e9d136ccaf0b"
1264 | dependencies:
1265 | babel-runtime "^6.26.0"
1266 | common-tags "^1.4.0"
1267 | dlv "^1.1.0"
1268 | eslint "^4.0.0"
1269 | indent-string "^3.2.0"
1270 | lodash.merge "^4.6.0"
1271 | loglevel-colored-level-prefix "^1.0.0"
1272 | prettier "^1.7.0"
1273 | pretty-format "^23.0.1"
1274 | require-relative "^0.8.7"
1275 | typescript "^2.5.1"
1276 | typescript-eslint-parser "^16.0.0"
1277 | vue-eslint-parser "^2.0.2"
1278 |
1279 | prettier@^1.14.2, prettier@^1.7.0:
1280 | version "1.14.2"
1281 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9"
1282 |
1283 | pretty-format@^23.0.1:
1284 | version "23.6.0"
1285 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
1286 | dependencies:
1287 | ansi-regex "^3.0.0"
1288 | ansi-styles "^3.2.0"
1289 |
1290 | process-nextick-args@~2.0.0:
1291 | version "2.0.0"
1292 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1293 |
1294 | progress@^2.0.0:
1295 | version "2.0.0"
1296 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
1297 |
1298 | pseudomap@^1.0.2:
1299 | version "1.0.2"
1300 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1301 |
1302 | pump@^1.0.0:
1303 | version "1.0.3"
1304 | resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
1305 | dependencies:
1306 | end-of-stream "^1.1.0"
1307 | once "^1.3.1"
1308 |
1309 | pump@^2.0.1:
1310 | version "2.0.1"
1311 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
1312 | dependencies:
1313 | end-of-stream "^1.1.0"
1314 | once "^1.3.1"
1315 |
1316 | punycode@^2.1.0:
1317 | version "2.1.1"
1318 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1319 |
1320 | rc@^1.1.6:
1321 | version "1.2.8"
1322 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1323 | dependencies:
1324 | deep-extend "^0.6.0"
1325 | ini "~1.3.0"
1326 | minimist "^1.2.0"
1327 | strip-json-comments "~2.0.1"
1328 |
1329 | read-pkg-up@^2.0.0:
1330 | version "2.0.0"
1331 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
1332 | dependencies:
1333 | find-up "^2.0.0"
1334 | read-pkg "^2.0.0"
1335 |
1336 | read-pkg@^2.0.0:
1337 | version "2.0.0"
1338 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
1339 | dependencies:
1340 | load-json-file "^2.0.0"
1341 | normalize-package-data "^2.3.2"
1342 | path-type "^2.0.0"
1343 |
1344 | readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5:
1345 | version "2.3.6"
1346 | resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1347 | dependencies:
1348 | core-util-is "~1.0.0"
1349 | inherits "~2.0.3"
1350 | isarray "~1.0.0"
1351 | process-nextick-args "~2.0.0"
1352 | safe-buffer "~5.1.1"
1353 | string_decoder "~1.1.1"
1354 | util-deprecate "~1.0.1"
1355 |
1356 | regenerator-runtime@^0.11.0:
1357 | version "0.11.1"
1358 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
1359 |
1360 | regexpp@^1.0.1:
1361 | version "1.1.0"
1362 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
1363 |
1364 | regexpp@^2.0.0:
1365 | version "2.0.0"
1366 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365"
1367 |
1368 | require-relative@^0.8.7:
1369 | version "0.8.7"
1370 | resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
1371 |
1372 | require-uncached@^1.0.3:
1373 | version "1.0.3"
1374 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1375 | dependencies:
1376 | caller-path "^0.1.0"
1377 | resolve-from "^1.0.0"
1378 |
1379 | resolve-from@^1.0.0:
1380 | version "1.0.1"
1381 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1382 |
1383 | resolve@^1.5.0, resolve@^1.6.0:
1384 | version "1.8.1"
1385 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
1386 | dependencies:
1387 | path-parse "^1.0.5"
1388 |
1389 | restore-cursor@^2.0.0:
1390 | version "2.0.0"
1391 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
1392 | dependencies:
1393 | onetime "^2.0.0"
1394 | signal-exit "^3.0.2"
1395 |
1396 | rimraf@^2.2.8:
1397 | version "2.6.2"
1398 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
1399 | dependencies:
1400 | glob "^7.0.5"
1401 |
1402 | run-async@^2.2.0:
1403 | version "2.3.0"
1404 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
1405 | dependencies:
1406 | is-promise "^2.1.0"
1407 |
1408 | rx-lite-aggregates@^4.0.8:
1409 | version "4.0.8"
1410 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
1411 | dependencies:
1412 | rx-lite "*"
1413 |
1414 | rx-lite@*, rx-lite@^4.0.8:
1415 | version "4.0.8"
1416 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
1417 |
1418 | rxjs@^6.1.0:
1419 | version "6.3.2"
1420 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f"
1421 | dependencies:
1422 | tslib "^1.9.0"
1423 |
1424 | safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1425 | version "5.1.2"
1426 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1427 |
1428 | "safer-buffer@>= 2.1.2 < 3":
1429 | version "2.1.2"
1430 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1431 |
1432 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1:
1433 | version "5.5.1"
1434 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
1435 |
1436 | semver@5.5.0:
1437 | version "5.5.0"
1438 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
1439 |
1440 | set-blocking@~2.0.0:
1441 | version "2.0.0"
1442 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1443 |
1444 | sharp@^0.20.8:
1445 | version "0.20.8"
1446 | resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.20.8.tgz#e853f10b53b730824f0c3c5e453c79fa0812a48b"
1447 | dependencies:
1448 | color "^3.0.0"
1449 | detect-libc "^1.0.3"
1450 | fs-copy-file-sync "^1.1.1"
1451 | nan "^2.11.0"
1452 | npmlog "^4.1.2"
1453 | prebuild-install "^4.0.0"
1454 | semver "^5.5.1"
1455 | simple-get "^2.8.1"
1456 | tar "^4.4.6"
1457 | tunnel-agent "^0.6.0"
1458 |
1459 | shebang-command@^1.2.0:
1460 | version "1.2.0"
1461 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1462 | dependencies:
1463 | shebang-regex "^1.0.0"
1464 |
1465 | shebang-regex@^1.0.0:
1466 | version "1.0.0"
1467 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1468 |
1469 | signal-exit@^3.0.0, signal-exit@^3.0.2:
1470 | version "3.0.2"
1471 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1472 |
1473 | simple-concat@^1.0.0:
1474 | version "1.0.0"
1475 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
1476 |
1477 | simple-get@^2.7.0, simple-get@^2.8.1:
1478 | version "2.8.1"
1479 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"
1480 | dependencies:
1481 | decompress-response "^3.3.0"
1482 | once "^1.3.1"
1483 | simple-concat "^1.0.0"
1484 |
1485 | simple-swizzle@^0.2.2:
1486 | version "0.2.2"
1487 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
1488 | dependencies:
1489 | is-arrayish "^0.3.1"
1490 |
1491 | slice-ansi@1.0.0:
1492 | version "1.0.0"
1493 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
1494 | dependencies:
1495 | is-fullwidth-code-point "^2.0.0"
1496 |
1497 | spdx-correct@^3.0.0:
1498 | version "3.0.0"
1499 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
1500 | dependencies:
1501 | spdx-expression-parse "^3.0.0"
1502 | spdx-license-ids "^3.0.0"
1503 |
1504 | spdx-exceptions@^2.1.0:
1505 | version "2.1.0"
1506 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
1507 |
1508 | spdx-expression-parse@^3.0.0:
1509 | version "3.0.0"
1510 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
1511 | dependencies:
1512 | spdx-exceptions "^2.1.0"
1513 | spdx-license-ids "^3.0.0"
1514 |
1515 | spdx-license-ids@^3.0.0:
1516 | version "3.0.1"
1517 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f"
1518 |
1519 | sprintf-js@~1.0.2:
1520 | version "1.0.3"
1521 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1522 |
1523 | string-width@^1.0.1:
1524 | version "1.0.2"
1525 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1526 | dependencies:
1527 | code-point-at "^1.0.0"
1528 | is-fullwidth-code-point "^1.0.0"
1529 | strip-ansi "^3.0.0"
1530 |
1531 | "string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1:
1532 | version "2.1.1"
1533 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1534 | dependencies:
1535 | is-fullwidth-code-point "^2.0.0"
1536 | strip-ansi "^4.0.0"
1537 |
1538 | string_decoder@~1.1.1:
1539 | version "1.1.1"
1540 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1541 | dependencies:
1542 | safe-buffer "~5.1.0"
1543 |
1544 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1545 | version "3.0.1"
1546 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1547 | dependencies:
1548 | ansi-regex "^2.0.0"
1549 |
1550 | strip-ansi@^4.0.0:
1551 | version "4.0.0"
1552 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1553 | dependencies:
1554 | ansi-regex "^3.0.0"
1555 |
1556 | strip-bom@^3.0.0:
1557 | version "3.0.0"
1558 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1559 |
1560 | strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
1561 | version "2.0.1"
1562 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1563 |
1564 | supports-color@^2.0.0:
1565 | version "2.0.0"
1566 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1567 |
1568 | supports-color@^5.3.0:
1569 | version "5.5.0"
1570 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1571 | dependencies:
1572 | has-flag "^3.0.0"
1573 |
1574 | table@4.0.2:
1575 | version "4.0.2"
1576 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
1577 | dependencies:
1578 | ajv "^5.2.3"
1579 | ajv-keywords "^2.1.0"
1580 | chalk "^2.1.0"
1581 | lodash "^4.17.4"
1582 | slice-ansi "1.0.0"
1583 | string-width "^2.1.1"
1584 |
1585 | table@^4.0.3:
1586 | version "4.0.3"
1587 | resolved "http://registry.npmjs.org/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
1588 | dependencies:
1589 | ajv "^6.0.1"
1590 | ajv-keywords "^3.0.0"
1591 | chalk "^2.1.0"
1592 | lodash "^4.17.4"
1593 | slice-ansi "1.0.0"
1594 | string-width "^2.1.1"
1595 |
1596 | tar-fs@^1.13.0:
1597 | version "1.16.3"
1598 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
1599 | dependencies:
1600 | chownr "^1.0.1"
1601 | mkdirp "^0.5.1"
1602 | pump "^1.0.0"
1603 | tar-stream "^1.1.2"
1604 |
1605 | tar-stream@^1.1.2:
1606 | version "1.6.1"
1607 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395"
1608 | dependencies:
1609 | bl "^1.0.0"
1610 | buffer-alloc "^1.1.0"
1611 | end-of-stream "^1.0.0"
1612 | fs-constants "^1.0.0"
1613 | readable-stream "^2.3.0"
1614 | to-buffer "^1.1.0"
1615 | xtend "^4.0.0"
1616 |
1617 | tar@^4.4.6:
1618 | version "4.4.6"
1619 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
1620 | dependencies:
1621 | chownr "^1.0.1"
1622 | fs-minipass "^1.2.5"
1623 | minipass "^2.3.3"
1624 | minizlib "^1.1.0"
1625 | mkdirp "^0.5.0"
1626 | safe-buffer "^5.1.2"
1627 | yallist "^3.0.2"
1628 |
1629 | text-table@^0.2.0, text-table@~0.2.0:
1630 | version "0.2.0"
1631 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1632 |
1633 | through@^2.3.6:
1634 | version "2.3.8"
1635 | resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1636 |
1637 | tmp@^0.0.33:
1638 | version "0.0.33"
1639 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
1640 | dependencies:
1641 | os-tmpdir "~1.0.2"
1642 |
1643 | to-buffer@^1.1.0:
1644 | version "1.1.1"
1645 | resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
1646 |
1647 | tslib@^1.9.0:
1648 | version "1.9.3"
1649 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
1650 |
1651 | tunnel-agent@^0.6.0:
1652 | version "0.6.0"
1653 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
1654 | dependencies:
1655 | safe-buffer "^5.0.1"
1656 |
1657 | type-check@~0.3.2:
1658 | version "0.3.2"
1659 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1660 | dependencies:
1661 | prelude-ls "~1.1.2"
1662 |
1663 | typedarray@^0.0.6:
1664 | version "0.0.6"
1665 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1666 |
1667 | typescript-eslint-parser@^16.0.0:
1668 | version "16.0.1"
1669 | resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz#b40681c7043b222b9772748b700a000b241c031b"
1670 | dependencies:
1671 | lodash.unescape "4.0.1"
1672 | semver "5.5.0"
1673 |
1674 | typescript@^2.5.1:
1675 | version "2.9.2"
1676 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
1677 |
1678 | uri-js@^4.2.2:
1679 | version "4.2.2"
1680 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
1681 | dependencies:
1682 | punycode "^2.1.0"
1683 |
1684 | util-deprecate@~1.0.1:
1685 | version "1.0.2"
1686 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1687 |
1688 | validate-npm-package-license@^3.0.1:
1689 | version "3.0.4"
1690 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
1691 | dependencies:
1692 | spdx-correct "^3.0.0"
1693 | spdx-expression-parse "^3.0.0"
1694 |
1695 | vue-eslint-parser@^2.0.2:
1696 | version "2.0.3"
1697 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
1698 | dependencies:
1699 | debug "^3.1.0"
1700 | eslint-scope "^3.7.1"
1701 | eslint-visitor-keys "^1.0.0"
1702 | espree "^3.5.2"
1703 | esquery "^1.0.0"
1704 | lodash "^4.17.4"
1705 |
1706 | which-pm-runs@^1.0.0:
1707 | version "1.0.0"
1708 | resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
1709 |
1710 | which@^1.2.9:
1711 | version "1.3.1"
1712 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1713 | dependencies:
1714 | isexe "^2.0.0"
1715 |
1716 | wide-align@^1.1.0:
1717 | version "1.1.3"
1718 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
1719 | dependencies:
1720 | string-width "^1.0.2 || 2"
1721 |
1722 | wordwrap@~1.0.0:
1723 | version "1.0.0"
1724 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1725 |
1726 | wrappy@1:
1727 | version "1.0.2"
1728 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1729 |
1730 | write@^0.2.1:
1731 | version "0.2.1"
1732 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1733 | dependencies:
1734 | mkdirp "^0.5.1"
1735 |
1736 | xtend@^4.0.0:
1737 | version "4.0.1"
1738 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1739 |
1740 | yallist@^2.1.2:
1741 | version "2.1.2"
1742 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
1743 |
1744 | yallist@^3.0.0, yallist@^3.0.2:
1745 | version "3.0.2"
1746 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
1747 |
--------------------------------------------------------------------------------