diff --git a/examples/CONTRIBUTING.md b/examples/CONTRIBUTING.md index d7353f77a..6f79ac586 100644 --- a/examples/CONTRIBUTING.md +++ b/examples/CONTRIBUTING.md @@ -57,6 +57,7 @@ Make some changes, fix bugs and submit a new pull request! We encourage everyone to contribute to this project. If you have never contributed to open source before this might be a good place to start! Just open a new issue! + # Local Development You can start a server or your machine to view a local version of the ml5 examples index web page that links to every example in the project. You can use this local version of the examples index to test new and old examples against changes you're making to the core library. diff --git a/examples/LICENSE b/examples/LICENSE new file mode 100644 index 000000000..9cc9e9894 --- /dev/null +++ b/examples/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2018 ml5 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/examples/examples.json b/examples/examples.json index 2c2001ae5..0e3ac7988 100644 --- a/examples/examples.json +++ b/examples/examples.json @@ -1 +1 @@ -{"BodyPix":{"p5js":[{"name":"BodyPix_Image","url":"../p5js/BodyPix/BodyPix_Image"},{"name":"BodyPix_Preload","url":"../p5js/BodyPix/BodyPix_Preload"},{"name":"BodyPix_Webcam","url":"../p5js/BodyPix/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"../p5js/BodyPix/BodyPix_Webcam_Parts"},{"name":"BodyPix_p5Instance","url":"../p5js/BodyPix/BodyPix_p5Instance"}],"p5webeditor":[{"name":"BodyPix_Image","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Image"},{"name":"BodyPix_Preload","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Preload"},{"name":"BodyPix_Webcam","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Webcam_Parts"},{"name":"BodyPix_p5Instance","url":"https://editor.p5js.org/ml5/sketches/BodyPix_p5Instance"}],"javascript":[{"name":"BodyPix_Image","url":"../javascript/BodyPix/BodyPix_Image"},{"name":"BodyPix_Webcam","url":"../javascript/BodyPix/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"../javascript/BodyPix/BodyPix_Webcam_Parts"}]},"CVAE":{"p5js":[{"name":"CVAE_QuickDraw","url":"../p5js/CVAE/CVAE_QuickDraw"}],"p5webeditor":[{"name":"CVAE_QuickDraw","url":"https://editor.p5js.org/ml5/sketches/CVAE_QuickDraw"}],"javascript":[{"name":"CVAE_QuickDraw","url":"../javascript/CVAE/CVAE_QuickDraw"}]},"CharRNN":{"p5js":[{"name":"CharRNN_Interactive","url":"../p5js/CharRNN/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"../p5js/CharRNN/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"../p5js/CharRNN/CharRNN_Text_Stateful"}],"p5webeditor":[{"name":"CharRNN_Interactive","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Text_Stateful"}],"javascript":[{"name":"CharRNN_Interactive","url":"../javascript/CharRNN/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"../javascript/CharRNN/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"../javascript/CharRNN/CharRNN_Text_Stateful"}]},"DCGAN":{"p5js":[{"name":"DCGAN_LatentVector_RandomWalk","url":"../p5js/DCGAN/DCGAN_LatentVector_RandomWalk"},{"name":"DCGAN_LatentVector_Slider","url":"../p5js/DCGAN/DCGAN_LatentVector_Slider"},{"name":"DCGAN_Random","url":"../p5js/DCGAN/DCGAN_Random"},{"name":"model","url":"../p5js/DCGAN/model"}],"p5webeditor":[{"name":"DCGAN_LatentVector_RandomWalk","url":"https://editor.p5js.org/ml5/sketches/DCGAN_LatentVector_RandomWalk"},{"name":"DCGAN_LatentVector_Slider","url":"https://editor.p5js.org/ml5/sketches/DCGAN_LatentVector_Slider"},{"name":"DCGAN_Random","url":"https://editor.p5js.org/ml5/sketches/DCGAN_Random"},{"name":"model","url":"https://editor.p5js.org/ml5/sketches/model"}],"javascript":[{"name":"DCGAN_Random","url":"../javascript/DCGAN/DCGAN_Random"}]},"FaceApi":{"p5js":[{"name":"FaceApi_Image_Landmarks","url":"../p5js/FaceApi/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"../p5js/FaceApi/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"../p5js/FaceApi/FaceApi_Video_Landmarks_LocalModels"}],"p5webeditor":[{"name":"FaceApi_Image_Landmarks","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Video_Landmarks_LocalModels"}],"javascript":[{"name":"FaceApi_Image_Landmarks","url":"../javascript/FaceApi/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"../javascript/FaceApi/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"../javascript/FaceApi/FaceApi_Video_Landmarks_LocalModels"}]},"FeatureExtractor":{"p5js":[{"name":"FeatureExtractor_Image_Classification","url":"../p5js/FeatureExtractor/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"../p5js/FeatureExtractor/FeatureExtractor_Image_Regression"}],"p5webeditor":[{"name":"FeatureExtractor_Image_Classification","url":"https://editor.p5js.org/ml5/sketches/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"https://editor.p5js.org/ml5/sketches/FeatureExtractor_Image_Regression"}],"javascript":[{"name":"FeatureExtractor_Image_Classification","url":"../javascript/FeatureExtractor/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"../javascript/FeatureExtractor/FeatureExtractor_Image_Regression"}]},"ImageClassification":{"p5js":[{"name":"ImageClassification","url":"../p5js/ImageClassification/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"../p5js/ImageClassification/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"../p5js/ImageClassification/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"../p5js/ImageClassification/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"../p5js/ImageClassification/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"../p5js/ImageClassification/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"../p5js/ImageClassification/ImageClassification_VideoSound"},{"name":"ImageClassification_VideoSoundTranslate","url":"../p5js/ImageClassification/ImageClassification_VideoSoundTranslate"},{"name":"ImageClassification_Video_Load","url":"../p5js/ImageClassification/ImageClassification_Video_Load"}],"p5webeditor":[{"name":"ImageClassification","url":"https://editor.p5js.org/ml5/sketches/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoSound"},{"name":"ImageClassification_VideoSoundTranslate","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoSoundTranslate"},{"name":"ImageClassification_Video_Load","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_Video_Load"}],"javascript":[{"name":"ImageClassification","url":"../javascript/ImageClassification/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"../javascript/ImageClassification/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"../javascript/ImageClassification/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"../javascript/ImageClassification/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"../javascript/ImageClassification/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"../javascript/ImageClassification/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"../javascript/ImageClassification/ImageClassification_VideoSound"},{"name":"ImageClassification_Video_Load","url":"../javascript/ImageClassification/ImageClassification_Video_Load"}]},"KMeans":{"p5js":[{"name":"KMeans_imageSegmentation","url":"../p5js/KMeans/KMeans_imageSegmentation"}],"p5webeditor":[{"name":"KMeans_imageSegmentation","url":"https://editor.p5js.org/ml5/sketches/KMeans_imageSegmentation"}],"d3":[{"name":"KMeans_GaussianClusterDemo","url":"../d3/KMeans/KMeans_GaussianClusterDemo"}]},"KNNClassification":{"p5js":[{"name":"KNNClassification_PoseNet","url":"../p5js/KNNClassification/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"../p5js/KNNClassification/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"../p5js/KNNClassification/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"../p5js/KNNClassification/KNNClassification_VideoSquare"}],"p5webeditor":[{"name":"KNNClassification_PoseNet","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_VideoSquare"}],"javascript":[{"name":"KNNClassification_PoseNet","url":"../javascript/KNNClassification/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"../javascript/KNNClassification/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"../javascript/KNNClassification/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"../javascript/KNNClassification/KNNClassification_VideoSquare"}]},"NeuralNetwork":{"p5js":[{"name":"NeuralNetwork_ImageClassifier_Colors","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Colors"},{"name":"NeuralNetwork_ImageClassifier_Letters","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Letters"},{"name":"NeuralNetwork_ImageClassifier_Letters2","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Letters2"},{"name":"NeuralNetwork_ImageClassifier_Video","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Video"},{"name":"NeuralNetwork_Simple_AorB","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_AorB"},{"name":"NeuralNetwork_Simple_Classification","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_Classification"},{"name":"NeuralNetwork_Simple_Regression","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_Regression"},{"name":"NeuralNetwork_XOR","url":"../p5js/NeuralNetwork/NeuralNetwork_XOR"},{"name":"NeuralNetwork_basics","url":"../p5js/NeuralNetwork/NeuralNetwork_basics"},{"name":"NeuralNetwork_co2net","url":"../p5js/NeuralNetwork/NeuralNetwork_co2net"},{"name":"NeuralNetwork_color_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_color_classifier"},{"name":"NeuralNetwork_load_model","url":"../p5js/NeuralNetwork/NeuralNetwork_load_model"},{"name":"NeuralNetwork_load_saved_data","url":"../p5js/NeuralNetwork/NeuralNetwork_load_saved_data"},{"name":"NeuralNetwork_lowres_pixels","url":"../p5js/NeuralNetwork/NeuralNetwork_lowres_pixels"},{"name":"NeuralNetwork_multiple_layers","url":"../p5js/NeuralNetwork/NeuralNetwork_multiple_layers"},{"name":"NeuralNetwork_musical_face","url":"../p5js/NeuralNetwork/NeuralNetwork_musical_face"},{"name":"NeuralNetwork_musical_mouse","url":"../p5js/NeuralNetwork/NeuralNetwork_musical_mouse"},{"name":"NeuralNetwork_pose_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_pose_classifier"},{"name":"NeuralNetwork_titanic","url":"../p5js/NeuralNetwork/NeuralNetwork_titanic"},{"name":"NeuralNetwork_xy_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_xy_classifier"}],"p5webeditor":[{"name":"NeuralNetwork_ImageClassifier_Colors","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Colors"},{"name":"NeuralNetwork_ImageClassifier_Letters","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Letters"},{"name":"NeuralNetwork_ImageClassifier_Letters2","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Letters2"},{"name":"NeuralNetwork_ImageClassifier_Video","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Video"},{"name":"NeuralNetwork_Simple_AorB","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_AorB"},{"name":"NeuralNetwork_Simple_Classification","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_Classification"},{"name":"NeuralNetwork_Simple_Regression","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_Regression"},{"name":"NeuralNetwork_XOR","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_XOR"},{"name":"NeuralNetwork_basics","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_basics"},{"name":"NeuralNetwork_co2net","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_co2net"},{"name":"NeuralNetwork_color_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_color_classifier"},{"name":"NeuralNetwork_load_model","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_load_model"},{"name":"NeuralNetwork_load_saved_data","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_load_saved_data"},{"name":"NeuralNetwork_lowres_pixels","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_lowres_pixels"},{"name":"NeuralNetwork_multiple_layers","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_multiple_layers"},{"name":"NeuralNetwork_musical_face","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_musical_face"},{"name":"NeuralNetwork_musical_mouse","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_musical_mouse"},{"name":"NeuralNetwork_pose_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_pose_classifier"},{"name":"NeuralNetwork_titanic","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_titanic"},{"name":"NeuralNetwork_xy_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_xy_classifier"}]},"ObjectDetector":{"p5js":[{"name":"ObjectDetector_COCOSSD_Video","url":"../p5js/ObjectDetector/ObjectDetector_COCOSSD_Video"},{"name":"ObjectDetector_COCOSSD_single_image","url":"../p5js/ObjectDetector/ObjectDetector_COCOSSD_single_image"},{"name":"ObjectDetector_YOLO_Video","url":"../p5js/ObjectDetector/ObjectDetector_YOLO_Video"},{"name":"ObjectDetector_YOLO_single_image","url":"../p5js/ObjectDetector/ObjectDetector_YOLO_single_image"}],"p5webeditor":[{"name":"ObjectDetector_COCOSSD_Video","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_COCOSSD_Video"},{"name":"ObjectDetector_COCOSSD_single_image","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_COCOSSD_single_image"},{"name":"ObjectDetector_YOLO_Video","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_YOLO_Video"},{"name":"ObjectDetector_YOLO_single_image","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_YOLO_single_image"}],"javascript":[{"name":"COCOSSD_single_image","url":"../javascript/ObjectDetector/COCOSSD_single_image"},{"name":"COCOSSD_webcam","url":"../javascript/ObjectDetector/COCOSSD_webcam"},{"name":"YOLO_single_image","url":"../javascript/ObjectDetector/YOLO_single_image"},{"name":"YOLO_webcam","url":"../javascript/ObjectDetector/YOLO_webcam"}]},"PitchDetection":{"p5js":[{"name":"PitchDetection","url":"../p5js/PitchDetection/PitchDetection"},{"name":"PitchDetection_Game","url":"../p5js/PitchDetection/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"../p5js/PitchDetection/PitchDetection_Piano"}],"p5webeditor":[{"name":"PitchDetection","url":"https://editor.p5js.org/ml5/sketches/PitchDetection"},{"name":"PitchDetection_Game","url":"https://editor.p5js.org/ml5/sketches/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"https://editor.p5js.org/ml5/sketches/PitchDetection_Piano"}],"javascript":[{"name":"PitchDetection","url":"../javascript/PitchDetection/PitchDetection"},{"name":"PitchDetection_Game","url":"../javascript/PitchDetection/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"../javascript/PitchDetection/PitchDetection_Piano"}]},"Pix2Pix":{"p5js":[{"name":"Pix2Pix_callback","url":"../p5js/Pix2Pix/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"../p5js/Pix2Pix/Pix2Pix_promise"}],"p5webeditor":[{"name":"Pix2Pix_callback","url":"https://editor.p5js.org/ml5/sketches/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"https://editor.p5js.org/ml5/sketches/Pix2Pix_promise"}],"javascript":[{"name":"Pix2Pix_callback","url":"../javascript/Pix2Pix/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"../javascript/Pix2Pix/Pix2Pix_promise"}]},"PoseNet":{"p5js":[{"name":"PoseNet_image_single","url":"../p5js/PoseNet/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"../p5js/PoseNet/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"../p5js/PoseNet/PoseNet_webcam"}],"p5webeditor":[{"name":"PoseNet_image_single","url":"https://editor.p5js.org/ml5/sketches/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"https://editor.p5js.org/ml5/sketches/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"https://editor.p5js.org/ml5/sketches/PoseNet_webcam"}],"javascript":[{"name":"PoseNet_image_single","url":"../javascript/PoseNet/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"../javascript/PoseNet/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"../javascript/PoseNet/PoseNet_webcam"}]},"Sentiment":{"p5js":[{"name":"Sentiment_Interactive","url":"../p5js/Sentiment/Sentiment_Interactive"}],"p5webeditor":[{"name":"Sentiment_Interactive","url":"https://editor.p5js.org/ml5/sketches/Sentiment_Interactive"}],"javascript":[{"name":"Sentiment_Interactive","url":"../javascript/Sentiment/Sentiment_Interactive"}]},"SketchRNN":{"p5js":[{"name":"SketchRNN_basic","url":"../p5js/SketchRNN/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"../p5js/SketchRNN/SketchRNN_interactive"}],"p5webeditor":[{"name":"SketchRNN_basic","url":"https://editor.p5js.org/ml5/sketches/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"https://editor.p5js.org/ml5/sketches/SketchRNN_interactive"}],"javascript":[{"name":"SketchRNN_basic","url":"../javascript/SketchRNN/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"../javascript/SketchRNN/SketchRNN_interactive"}]},"SoundClassification":{"p5js":[{"name":"SoundClassification_speechcommand","url":"../p5js/SoundClassification/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"../p5js/SoundClassification/SoundClassification_speechcommand_load"}],"p5webeditor":[{"name":"SoundClassification_speechcommand","url":"https://editor.p5js.org/ml5/sketches/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"https://editor.p5js.org/ml5/sketches/SoundClassification_speechcommand_load"}],"javascript":[{"name":"SoundClassification_speechcommand","url":"../javascript/SoundClassification/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"../javascript/SoundClassification/SoundClassification_speechcommand_load"}]},"StyleTransfer":{"p5js":[{"name":"StyleTransfer_Image","url":"../p5js/StyleTransfer/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"../p5js/StyleTransfer/StyleTransfer_Video"}],"p5webeditor":[{"name":"StyleTransfer_Image","url":"https://editor.p5js.org/ml5/sketches/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"https://editor.p5js.org/ml5/sketches/StyleTransfer_Video"}],"javascript":[{"name":"StyleTransfer_Image","url":"../javascript/StyleTransfer/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"../javascript/StyleTransfer/StyleTransfer_Video"}]},"TeachableMachine":{"p5js":[{"name":"ImageModel_TM","url":"../p5js/TeachableMachine/ImageModel_TM"},{"name":"SoundModel_TM","url":"../p5js/TeachableMachine/SoundModel_TM"}],"p5webeditor":[{"name":"ImageModel_TM","url":"https://editor.p5js.org/ml5/sketches/ImageModel_TM"},{"name":"SoundModel_TM","url":"https://editor.p5js.org/ml5/sketches/SoundModel_TM"}]},"UNET":{"p5js":[{"name":"UNET_webcam","url":"../p5js/UNET/UNET_webcam"}],"p5webeditor":[{"name":"UNET_webcam","url":"https://editor.p5js.org/ml5/sketches/UNET_webcam"}],"javascript":[{"name":"UNET_webcam","url":"../javascript/UNET/UNET_webcam"}]},"Word2Vec":{"p5js":[{"name":"Word2Vec_Interactive","url":"../p5js/Word2Vec/Word2Vec_Interactive"}],"p5webeditor":[{"name":"Word2Vec_Interactive","url":"https://editor.p5js.org/ml5/sketches/Word2Vec_Interactive"}],"javascript":[{"name":"Word2Vec_Interactive","url":"../javascript/Word2Vec/Word2Vec_Interactive"}]},"YOLO":{"p5js":[{"name":"YOLO_single_image","url":"../p5js/YOLO/YOLO_single_image"},{"name":"YOLO_webcam","url":"../p5js/YOLO/YOLO_webcam"}],"p5webeditor":[{"name":"YOLO_single_image","url":"https://editor.p5js.org/ml5/sketches/YOLO_single_image"},{"name":"YOLO_webcam","url":"https://editor.p5js.org/ml5/sketches/YOLO_webcam"}],"javascript":[{"name":"YOLO_single_image","url":"../javascript/YOLO/YOLO_single_image"},{"name":"YOLO_webcam","url":"../javascript/YOLO/YOLO_webcam"}]},"ml5_boilerplate":{"p5js":[],"p5webeditor":[],"javascript":[]}} \ No newline at end of file +{"BodyPix":{"p5js":[{"name":"BodyPix_Image","url":"../p5js/BodyPix/BodyPix_Image"},{"name":"BodyPix_Preload","url":"../p5js/BodyPix/BodyPix_Preload"},{"name":"BodyPix_Webcam","url":"../p5js/BodyPix/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"../p5js/BodyPix/BodyPix_Webcam_Parts"},{"name":"BodyPix_p5Instance","url":"../p5js/BodyPix/BodyPix_p5Instance"}],"p5webeditor":[{"name":"BodyPix_Image","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Image"},{"name":"BodyPix_Preload","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Preload"},{"name":"BodyPix_Webcam","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"https://editor.p5js.org/ml5/sketches/BodyPix_Webcam_Parts"},{"name":"BodyPix_p5Instance","url":"https://editor.p5js.org/ml5/sketches/BodyPix_p5Instance"}],"javascript":[{"name":"BodyPix_Image","url":"../javascript/BodyPix/BodyPix_Image"},{"name":"BodyPix_Webcam","url":"../javascript/BodyPix/BodyPix_Webcam"},{"name":"BodyPix_Webcam_Parts","url":"../javascript/BodyPix/BodyPix_Webcam_Parts"}]},"CVAE":{"p5js":[{"name":"CVAE_QuickDraw","url":"../p5js/CVAE/CVAE_QuickDraw"}],"p5webeditor":[{"name":"CVAE_QuickDraw","url":"https://editor.p5js.org/ml5/sketches/CVAE_QuickDraw"}],"javascript":[{"name":"CVAE_QuickDraw","url":"../javascript/CVAE/CVAE_QuickDraw"}]},"CharRNN":{"p5js":[{"name":"CharRNN_Interactive","url":"../p5js/CharRNN/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"../p5js/CharRNN/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"../p5js/CharRNN/CharRNN_Text_Stateful"}],"p5webeditor":[{"name":"CharRNN_Interactive","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"https://editor.p5js.org/ml5/sketches/CharRNN_Text_Stateful"}],"javascript":[{"name":"CharRNN_Interactive","url":"../javascript/CharRNN/CharRNN_Interactive"},{"name":"CharRNN_Text","url":"../javascript/CharRNN/CharRNN_Text"},{"name":"CharRNN_Text_Stateful","url":"../javascript/CharRNN/CharRNN_Text_Stateful"}]},"DCGAN":{"p5js":[{"name":"DCGAN_LatentVector_RandomWalk","url":"../p5js/DCGAN/DCGAN_LatentVector_RandomWalk"},{"name":"DCGAN_LatentVector_Slider","url":"../p5js/DCGAN/DCGAN_LatentVector_Slider"},{"name":"DCGAN_Random","url":"../p5js/DCGAN/DCGAN_Random"},{"name":"model","url":"../p5js/DCGAN/model"}],"p5webeditor":[{"name":"DCGAN_LatentVector_RandomWalk","url":"https://editor.p5js.org/ml5/sketches/DCGAN_LatentVector_RandomWalk"},{"name":"DCGAN_LatentVector_Slider","url":"https://editor.p5js.org/ml5/sketches/DCGAN_LatentVector_Slider"},{"name":"DCGAN_Random","url":"https://editor.p5js.org/ml5/sketches/DCGAN_Random"},{"name":"model","url":"https://editor.p5js.org/ml5/sketches/model"}],"javascript":[{"name":"DCGAN_Random","url":"../javascript/DCGAN/DCGAN_Random"}]},"FaceApi":{"p5js":[{"name":"FaceApi_Image_Landmarks","url":"../p5js/FaceApi/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"../p5js/FaceApi/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"../p5js/FaceApi/FaceApi_Video_Landmarks_LocalModels"}],"p5webeditor":[{"name":"FaceApi_Image_Landmarks","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"https://editor.p5js.org/ml5/sketches/FaceApi_Video_Landmarks_LocalModels"}],"javascript":[{"name":"FaceApi_Image_Landmarks","url":"../javascript/FaceApi/FaceApi_Image_Landmarks"},{"name":"FaceApi_Video_Landmarks","url":"../javascript/FaceApi/FaceApi_Video_Landmarks"},{"name":"FaceApi_Video_Landmarks_LocalModels","url":"../javascript/FaceApi/FaceApi_Video_Landmarks_LocalModels"}]},"FeatureExtractor":{"p5js":[{"name":"FeatureExtractor_Image_Classification","url":"../p5js/FeatureExtractor/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"../p5js/FeatureExtractor/FeatureExtractor_Image_Regression"}],"p5webeditor":[{"name":"FeatureExtractor_Image_Classification","url":"https://editor.p5js.org/ml5/sketches/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"https://editor.p5js.org/ml5/sketches/FeatureExtractor_Image_Regression"}],"javascript":[{"name":"FeatureExtractor_Image_Classification","url":"../javascript/FeatureExtractor/FeatureExtractor_Image_Classification"},{"name":"FeatureExtractor_Image_Regression","url":"../javascript/FeatureExtractor/FeatureExtractor_Image_Regression"}]},"ImageClassification":{"p5js":[{"name":"ImageClassification","url":"../p5js/ImageClassification/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"../p5js/ImageClassification/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"../p5js/ImageClassification/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"../p5js/ImageClassification/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"../p5js/ImageClassification/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"../p5js/ImageClassification/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"../p5js/ImageClassification/ImageClassification_VideoSound"},{"name":"ImageClassification_VideoSoundTranslate","url":"../p5js/ImageClassification/ImageClassification_VideoSoundTranslate"},{"name":"ImageClassification_Video_Load","url":"../p5js/ImageClassification/ImageClassification_Video_Load"}],"p5webeditor":[{"name":"ImageClassification","url":"https://editor.p5js.org/ml5/sketches/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoSound"},{"name":"ImageClassification_VideoSoundTranslate","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_VideoSoundTranslate"},{"name":"ImageClassification_Video_Load","url":"https://editor.p5js.org/ml5/sketches/ImageClassification_Video_Load"}],"javascript":[{"name":"ImageClassification","url":"../javascript/ImageClassification/ImageClassification"},{"name":"ImageClassification_DoodleNet_Canvas","url":"../javascript/ImageClassification/ImageClassification_DoodleNet_Canvas"},{"name":"ImageClassification_DoodleNet_Video","url":"../javascript/ImageClassification/ImageClassification_DoodleNet_Video"},{"name":"ImageClassification_MultipleImages","url":"../javascript/ImageClassification/ImageClassification_MultipleImages"},{"name":"ImageClassification_Video","url":"../javascript/ImageClassification/ImageClassification_Video"},{"name":"ImageClassification_VideoScavengerHunt","url":"../javascript/ImageClassification/ImageClassification_VideoScavengerHunt"},{"name":"ImageClassification_VideoSound","url":"../javascript/ImageClassification/ImageClassification_VideoSound"},{"name":"ImageClassification_Video_Load","url":"../javascript/ImageClassification/ImageClassification_Video_Load"}]},"KMeans":{"p5js":[{"name":"KMeans_imageSegmentation","url":"../p5js/KMeans/KMeans_imageSegmentation"}],"p5webeditor":[{"name":"KMeans_imageSegmentation","url":"https://editor.p5js.org/ml5/sketches/KMeans_imageSegmentation"}],"d3":[{"name":"KMeans_GaussianClusterDemo","url":"../d3/KMeans/KMeans_GaussianClusterDemo"}]},"KNNClassification":{"p5js":[{"name":"KNNClassification_PoseNet","url":"../p5js/KNNClassification/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"../p5js/KNNClassification/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"../p5js/KNNClassification/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"../p5js/KNNClassification/KNNClassification_VideoSquare"}],"p5webeditor":[{"name":"KNNClassification_PoseNet","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"https://editor.p5js.org/ml5/sketches/KNNClassification_VideoSquare"}],"javascript":[{"name":"KNNClassification_PoseNet","url":"../javascript/KNNClassification/KNNClassification_PoseNet"},{"name":"KNNClassification_Video","url":"../javascript/KNNClassification/KNNClassification_Video"},{"name":"KNNClassification_VideoSound","url":"../javascript/KNNClassification/KNNClassification_VideoSound"},{"name":"KNNClassification_VideoSquare","url":"../javascript/KNNClassification/KNNClassification_VideoSquare"}]},"NeuralNetwork":{"p5js":[{"name":"NeuralNetwork_ImageClassifier_Colors","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Colors"},{"name":"NeuralNetwork_ImageClassifier_Letters","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Letters"},{"name":"NeuralNetwork_ImageClassifier_Letters2","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Letters2"},{"name":"NeuralNetwork_ImageClassifier_Video","url":"../p5js/NeuralNetwork/NeuralNetwork_ImageClassifier_Video"},{"name":"NeuralNetwork_Simple_AorB","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_AorB"},{"name":"NeuralNetwork_Simple_Classification","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_Classification"},{"name":"NeuralNetwork_Simple_Regression","url":"../p5js/NeuralNetwork/NeuralNetwork_Simple_Regression"},{"name":"NeuralNetwork_XOR","url":"../p5js/NeuralNetwork/NeuralNetwork_XOR"},{"name":"NeuralNetwork_basics","url":"../p5js/NeuralNetwork/NeuralNetwork_basics"},{"name":"NeuralNetwork_co2net","url":"../p5js/NeuralNetwork/NeuralNetwork_co2net"},{"name":"NeuralNetwork_color_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_color_classifier"},{"name":"NeuralNetwork_load_model","url":"../p5js/NeuralNetwork/NeuralNetwork_load_model"},{"name":"NeuralNetwork_load_saved_data","url":"../p5js/NeuralNetwork/NeuralNetwork_load_saved_data"},{"name":"NeuralNetwork_lowres_pixels","url":"../p5js/NeuralNetwork/NeuralNetwork_lowres_pixels"},{"name":"NeuralNetwork_multiple_layers","url":"../p5js/NeuralNetwork/NeuralNetwork_multiple_layers"},{"name":"NeuralNetwork_musical_face","url":"../p5js/NeuralNetwork/NeuralNetwork_musical_face"},{"name":"NeuralNetwork_musical_mouse","url":"../p5js/NeuralNetwork/NeuralNetwork_musical_mouse"},{"name":"NeuralNetwork_pose_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_pose_classifier"},{"name":"NeuralNetwork_titanic","url":"../p5js/NeuralNetwork/NeuralNetwork_titanic"},{"name":"NeuralNetwork_xy_classifier","url":"../p5js/NeuralNetwork/NeuralNetwork_xy_classifier"}],"p5webeditor":[{"name":"NeuralNetwork_ImageClassifier_Colors","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Colors"},{"name":"NeuralNetwork_ImageClassifier_Letters","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Letters"},{"name":"NeuralNetwork_ImageClassifier_Letters2","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Letters2"},{"name":"NeuralNetwork_ImageClassifier_Video","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_ImageClassifier_Video"},{"name":"NeuralNetwork_Simple_AorB","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_AorB"},{"name":"NeuralNetwork_Simple_Classification","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_Classification"},{"name":"NeuralNetwork_Simple_Regression","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_Simple_Regression"},{"name":"NeuralNetwork_XOR","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_XOR"},{"name":"NeuralNetwork_basics","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_basics"},{"name":"NeuralNetwork_co2net","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_co2net"},{"name":"NeuralNetwork_color_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_color_classifier"},{"name":"NeuralNetwork_load_model","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_load_model"},{"name":"NeuralNetwork_load_saved_data","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_load_saved_data"},{"name":"NeuralNetwork_lowres_pixels","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_lowres_pixels"},{"name":"NeuralNetwork_multiple_layers","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_multiple_layers"},{"name":"NeuralNetwork_musical_face","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_musical_face"},{"name":"NeuralNetwork_musical_mouse","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_musical_mouse"},{"name":"NeuralNetwork_pose_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_pose_classifier"},{"name":"NeuralNetwork_titanic","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_titanic"},{"name":"NeuralNetwork_xy_classifier","url":"https://editor.p5js.org/ml5/sketches/NeuralNetwork_xy_classifier"}]},"ObjectDetector":{"p5js":[{"name":"ObjectDetector_COCOSSD_Video","url":"../p5js/ObjectDetector/ObjectDetector_COCOSSD_Video"},{"name":"ObjectDetector_COCOSSD_single_image","url":"../p5js/ObjectDetector/ObjectDetector_COCOSSD_single_image"},{"name":"ObjectDetector_YOLO_Video","url":"../p5js/ObjectDetector/ObjectDetector_YOLO_Video"},{"name":"ObjectDetector_YOLO_single_image","url":"../p5js/ObjectDetector/ObjectDetector_YOLO_single_image"}],"p5webeditor":[{"name":"ObjectDetector_COCOSSD_Video","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_COCOSSD_Video"},{"name":"ObjectDetector_COCOSSD_single_image","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_COCOSSD_single_image"},{"name":"ObjectDetector_YOLO_Video","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_YOLO_Video"},{"name":"ObjectDetector_YOLO_single_image","url":"https://editor.p5js.org/ml5/sketches/ObjectDetector_YOLO_single_image"}],"javascript":[{"name":"COCOSSD_single_image","url":"../javascript/ObjectDetector/COCOSSD_single_image"},{"name":"COCOSSD_webcam","url":"../javascript/ObjectDetector/COCOSSD_webcam"},{"name":"YOLO_single_image","url":"../javascript/ObjectDetector/YOLO_single_image"},{"name":"YOLO_webcam","url":"../javascript/ObjectDetector/YOLO_webcam"}]},"PitchDetection":{"p5js":[{"name":"PitchDetection","url":"../p5js/PitchDetection/PitchDetection"},{"name":"PitchDetection_Game","url":"../p5js/PitchDetection/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"../p5js/PitchDetection/PitchDetection_Piano"}],"p5webeditor":[{"name":"PitchDetection","url":"https://editor.p5js.org/ml5/sketches/PitchDetection"},{"name":"PitchDetection_Game","url":"https://editor.p5js.org/ml5/sketches/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"https://editor.p5js.org/ml5/sketches/PitchDetection_Piano"}],"javascript":[{"name":"PitchDetection","url":"../javascript/PitchDetection/PitchDetection"},{"name":"PitchDetection_Game","url":"../javascript/PitchDetection/PitchDetection_Game"},{"name":"PitchDetection_Piano","url":"../javascript/PitchDetection/PitchDetection_Piano"}]},"Pix2Pix":{"p5js":[{"name":"Pix2Pix_callback","url":"../p5js/Pix2Pix/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"../p5js/Pix2Pix/Pix2Pix_promise"}],"p5webeditor":[{"name":"Pix2Pix_callback","url":"https://editor.p5js.org/ml5/sketches/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"https://editor.p5js.org/ml5/sketches/Pix2Pix_promise"}],"javascript":[{"name":"Pix2Pix_callback","url":"../javascript/Pix2Pix/Pix2Pix_callback"},{"name":"Pix2Pix_promise","url":"../javascript/Pix2Pix/Pix2Pix_promise"}]},"PoseNet":{"p5js":[{"name":"PoseNet_image_single","url":"../p5js/PoseNet/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"../p5js/PoseNet/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"../p5js/PoseNet/PoseNet_webcam"}],"p5webeditor":[{"name":"PoseNet_image_single","url":"https://editor.p5js.org/ml5/sketches/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"https://editor.p5js.org/ml5/sketches/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"https://editor.p5js.org/ml5/sketches/PoseNet_webcam"}],"javascript":[{"name":"PoseNet_image_single","url":"../javascript/PoseNet/PoseNet_image_single"},{"name":"PoseNet_part_selection","url":"../javascript/PoseNet/PoseNet_part_selection"},{"name":"PoseNet_webcam","url":"../javascript/PoseNet/PoseNet_webcam"}]},"Sentiment":{"p5js":[{"name":"Sentiment_Interactive","url":"../p5js/Sentiment/Sentiment_Interactive"}],"p5webeditor":[{"name":"Sentiment_Interactive","url":"https://editor.p5js.org/ml5/sketches/Sentiment_Interactive"}],"javascript":[{"name":"Sentiment_Interactive","url":"../javascript/Sentiment/Sentiment_Interactive"}]},"SketchRNN":{"p5js":[{"name":"SketchRNN_basic","url":"../p5js/SketchRNN/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"../p5js/SketchRNN/SketchRNN_interactive"}],"p5webeditor":[{"name":"SketchRNN_basic","url":"https://editor.p5js.org/ml5/sketches/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"https://editor.p5js.org/ml5/sketches/SketchRNN_interactive"}],"javascript":[{"name":"SketchRNN_basic","url":"../javascript/SketchRNN/SketchRNN_basic"},{"name":"SketchRNN_interactive","url":"../javascript/SketchRNN/SketchRNN_interactive"}]},"SoundClassification":{"p5js":[{"name":"SoundClassification_speechcommand","url":"../p5js/SoundClassification/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"../p5js/SoundClassification/SoundClassification_speechcommand_load"}],"p5webeditor":[{"name":"SoundClassification_speechcommand","url":"https://editor.p5js.org/ml5/sketches/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"https://editor.p5js.org/ml5/sketches/SoundClassification_speechcommand_load"}],"javascript":[{"name":"SoundClassification_speechcommand","url":"../javascript/SoundClassification/SoundClassification_speechcommand"},{"name":"SoundClassification_speechcommand_load","url":"../javascript/SoundClassification/SoundClassification_speechcommand_load"}]},"StyleTransfer":{"p5js":[{"name":"StyleTransfer_Image","url":"../p5js/StyleTransfer/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"../p5js/StyleTransfer/StyleTransfer_Video"}],"p5webeditor":[{"name":"StyleTransfer_Image","url":"https://editor.p5js.org/ml5/sketches/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"https://editor.p5js.org/ml5/sketches/StyleTransfer_Video"}],"javascript":[{"name":"StyleTransfer_Image","url":"../javascript/StyleTransfer/StyleTransfer_Image"},{"name":"StyleTransfer_Video","url":"../javascript/StyleTransfer/StyleTransfer_Video"}]},"TeachableMachine":{"p5js":[{"name":"ImageModel_TM","url":"../p5js/TeachableMachine/ImageModel_TM"},{"name":"SoundModel_TM","url":"../p5js/TeachableMachine/SoundModel_TM"}],"p5webeditor":[{"name":"ImageModel_TM","url":"https://editor.p5js.org/ml5/sketches/ImageModel_TM"},{"name":"SoundModel_TM","url":"https://editor.p5js.org/ml5/sketches/SoundModel_TM"}]},"UNET":{"p5js":[{"name":"UNET_webcam","url":"../p5js/UNET/UNET_webcam"}],"p5webeditor":[{"name":"UNET_webcam","url":"https://editor.p5js.org/ml5/sketches/UNET_webcam"}],"javascript":[{"name":"UNET_webcam","url":"../javascript/UNET/UNET_webcam"}]},"Word2Vec":{"p5js":[{"name":"Word2Vec_Interactive","url":"../p5js/Word2Vec/Word2Vec_Interactive"}],"p5webeditor":[{"name":"Word2Vec_Interactive","url":"https://editor.p5js.org/ml5/sketches/Word2Vec_Interactive"}],"javascript":[{"name":"Word2Vec_Interactive","url":"../javascript/Word2Vec/Word2Vec_Interactive"}]},"YOLO":{"p5js":[{"name":"YOLO_single_image","url":"../p5js/YOLO/YOLO_single_image"},{"name":"YOLO_webcam","url":"../p5js/YOLO/YOLO_webcam"}],"p5webeditor":[{"name":"YOLO_single_image","url":"https://editor.p5js.org/ml5/sketches/YOLO_single_image"},{"name":"YOLO_webcam","url":"https://editor.p5js.org/ml5/sketches/YOLO_webcam"}],"javascript":[{"name":"YOLO_single_image","url":"../javascript/YOLO/YOLO_single_image"},{"name":"YOLO_webcam","url":"../javascript/YOLO/YOLO_webcam"}]},"ml5_boilerplate":{"p5js":[],"p5webeditor":[],"javascript":[]}} diff --git a/examples/package-lock.json b/examples/package-lock.json new file mode 100644 index 000000000..0f09c2c0a --- /dev/null +++ b/examples/package-lock.json @@ -0,0 +1,2869 @@ +{ + "name": "ml5-examples", + "version": "0.4.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "apache-crypt": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz", + "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.0.0" + } + }, + "apache-md5": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz", + "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cross-env": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz", + "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0" + } + }, + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "http-auth": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", + "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "live-server": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz", + "integrity": "sha512-Yn2XCVjErTkqnM3FfTmM7/kWy3zP7+cEtC7x6u+wUzlQ+1UW3zEYbbyJrc0jNDwiMDZI0m4a0i3dxlGHVyXczw==", + "dev": true, + "requires": { + "chokidar": "^2.0.4", + "colors": "^1.4.0", + "connect": "^3.6.6", + "cors": "^2.8.5", + "event-stream": "3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.9.1", + "object-assign": "^4.1.1", + "opn": "^6.0.0", + "proxy-middleware": "^0.15.0", + "send": "^0.17.1", + "serve-index": "^1.9.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "dev": true, + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "node-html-parser": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.1.14.tgz", + "integrity": "sha512-UcvX5vo3vqlDUpOVvy67Qdp8um0cYc30blTI1yLArF7g8SD3Ci1xomIkPBg1+AKZ8LgrYixvOQ9G2PkOFk2AEg==", + "requires": { + "he": "1.1.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "opn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", + "dev": true + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.4.tgz", + "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unix-crypt-td-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz", + "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz", + "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } +} diff --git a/examples/package.json b/examples/package.json new file mode 100644 index 000000000..c5e593046 --- /dev/null +++ b/examples/package.json @@ -0,0 +1,39 @@ +{ + "name": "ml5-examples", + "version": "0.4.3", + "description": "ml5-examples repo", + "main": "index.js", + "scripts": { + "develop": "live-server --port=8082", + "test": "echo \"Error: no test specified\" && exit 1", + "update:ml5": "node scripts/update-ml5-reference.js", + "update:ml5-dev": "NODE_ENV=dev node scripts/update-ml5-reference.js", + "create:example-index": "node scripts/create-examples-index.js", + "update:example-json": "node scripts/update-examples-json.js", + "merge:release:ours": "git merge --strategy-option ours release", + "merge:release:dev": "git checkout release-dev && git merge --strategy-option theirs release && npm run update:ml5-dev && git add . && git commit -m 'sets ml5 url to dev'", + "merge:dev:release": "git checkout dev-release && npm run update:ml5 && git add . && git commit -m 'sets ml5 url to release' && git checkout release && git merge dev-release" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ml5js/ml5-examples.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ml5js/ml5-examples/issues" + }, + "homepage": "https://github.com/ml5js/ml5-examples#readme", + "dependencies": { + "node-html-parser": "^1.1.14", + "recursive-readdir": "^2.2.2" + }, + "devDependencies": { + "cross-env": "^6.0.3", + "dotenv": "^8.2.0", + "live-server": "^1.2.1", + "q": "^1.5.1", + "request": "^2.88.0", + "request-promise": "^4.2.4" + } +} diff --git a/examples/scripts/batch-update-p5webeditor.js b/examples/scripts/batch-update-p5webeditor.js new file mode 100644 index 000000000..91b9a60c2 --- /dev/null +++ b/examples/scripts/batch-update-p5webeditor.js @@ -0,0 +1,416 @@ +require('dotenv').config(); +const fs = require('fs'); +const rp = require('request-promise'); +const Q = require('q'); +const { ok } = require('assert'); + +// TODO: Change branchName if necessary +const branchName = 'release'; +const branchRef = `?ref=${branchName}`; +const baseUrl = 'https://api.github.com/repos/ml5js/ml5-examples/contents'; +const clientId = process.env.GITHUB_ID; +const clientSecret = process.env.GITHUB_SECRET; +const editorUsername = process.env.ML5_EXAMPLES_USERNAME; +const personalAccessToken = process.env.EDITOR_API_ACCESS_TOKEN; +const editorApiUrl = process.env.EDITOR_API_URL; +const headers = { + 'User-Agent': 'p5js-web-editor/0.0.1' +}; + +ok(clientId, 'GITHUB_ID is required'); +ok(clientSecret, 'GITHUB_SECRET is required'); +ok(editorUsername, 'ML5_EXAMPLES_USERNAME is required'); +ok(personalAccessToken, 'EDITOR_API_ACCESS_TOKEN is required'); +ok(editorApiUrl, 'EDITOR_API_URL is required'); + +// +const githubRequestOptions = { + url: baseUrl, + qs: { + client_id: clientId, + client_secret: clientSecret + }, + method: 'GET', + headers, + json: true +}; + +const editorRequestOptions = { + url: `${editorApiUrl}/${editorUsername}`, + method: 'GET', + headers: { + ...headers, + Authorization: `Basic ${Buffer.from(`${editorUsername}:${personalAccessToken}`).toString('base64')}` + }, + json: true +}; + +console.log('------', editorRequestOptions) +/** + * --------------------------------------------------------- + * --------------------- helper functions -------------------- + * --------------------------------------------------------- + */ + +/** + * fatten a nested array + */ +function flatten(list) { + return list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []); +} + +/** + * Fetch data for a single HTML/JS file, or return + * an url to the file's CDN location + */ +async function fetchFileContent(item) { + const { name } = item; + const file = { url: item.url }; + + // if it is an html or js file + if ( + (file.url != null && name.endsWith('.html')) || + name.endsWith('.js') + ) { + const options = Object.assign({}, githubRequestOptions); + options.url = `${file.url}`; + + if ( + options.url !== undefined || + options.url !== null || + options.url !== '' + ) { + file.content = await rp(options); + // NOTE: remove the URL property if there's content + // Otherwise the p5 editor will try to pull from that url + if (file.content !== null) delete file.url; + } + + return file; + // if it is NOT an html or js file + } + + if (file.url) { + const cdnRef = `https://cdn.jsdelivr.net/gh/ml5js/ml5-examples@${branchName}${file.url.split(branchName)[1]}`; + file.url = cdnRef; + } + + return file; +} + + +/** + * STEP 1: Get the top level cateogories + */ +async function getCategories() { + try { + const options = Object.assign({}, githubRequestOptions); + options.url = `${options.url}/p5js${branchRef}`; + const results = await rp(options); + + return results; + } catch (err) { + return err; + } +} + +/** + * STEP 2: Get the examples for each category + * e.g. Posenet: + * - /posenet_image_single + * - /posenet_part_selection + */ +async function getCategoryExamples(sketchRootList) { + const output = []; + const sketchRootCategories = sketchRootList.map(async (categories) => { + // let options = Object.assign({url: `${requestOptions.url}/${categories.path}${branchRef}`}, requestOptions) + const options = Object.assign({}, githubRequestOptions); + options.url = `${options.url}${categories.path}${branchRef}`; + // console.log(options) + const sketchDirs = await rp(options); + + try { + const result = flatten(sketchDirs); + + return result; + } catch (err) { + return []; + } + }); + + const sketchList = await Q.all(sketchRootCategories); + + sketchList.forEach((sketch) => { + sketch.forEach((item) => { + if (item.type === 'dir') output.push(item); + }); + }); + + return output; +} + +/** + * STEP 3.1: Recursively get the tree of files for each directory + * @param parentObject - one sketch directory object + */ +async function traverseSketchTree(parentObject) { + const output = Object.assign({}, parentObject); + + if (parentObject.type !== 'dir') { + return output; + } + // let options = `https://api.github.com/repos/ml5js/ml5-examples/contents/${sketches.path}${branchRef}` + const options = Object.assign({}, githubRequestOptions); + options.url = `${options.url}${parentObject.path}${branchRef}`; + + output.tree = await rp(options); + + output.tree = output.tree.map(file => traverseSketchTree(file)); + + output.tree = await Q.all(output.tree); + + return output; +} + +/** + * STEP 3.2: Traverse the sketchtree for all of the sketches + * @param {*} categoryExamples - all of the categories in an array + */ +async function traverseSketchTreeAll(categoryExamples) { + const sketches = categoryExamples.map(async sketch => traverseSketchTree(sketch)); + + const result = await Q.all(sketches); + return result; +} + +/** + * Traverse the tree and format into parent child relation + * @param {*} parentObject + */ +function traverseAndFormat(parentObject) { + const parent = Object.assign({}, parentObject); + + if (!parentObject.tree) { + // returns the files + return { + name: parent.name, + url: parent.download_url + }; + } + + const subdir = parentObject.tree.map((item) => { + if (!item.tree) { + // returns the files + return { + name: item.name, + url: item.download_url + }; + } + + const feat = { + name: item.name, + children: traverseAndFormat(item) + }; + return feat; + }); + return subdir; +} + +/** + * Traverse the tree and download all the content, + * transforming into an object keyed by file/directory name + * @param {*} projectFileTree + */ +async function traverseAndDownload(projectFileTree) { + return projectFileTree.reduce( + async (previousPromise, item, idx) => { + const result = await previousPromise; + + if (Array.isArray(item.children)) { + result[item.name] = { + files: await traverseAndDownload(item.children) + }; + } else { + result[item.name] = await fetchFileContent(item); + } + + return result; + }, + {} + ); +} + +/** + * STEP 4 + * Take a parent directory and prepare it for injestion! + * @param {*} sketch + * @param {*} user + */ +async function formatSketchForStorage(sketch, user) { + const newProject = { + name: sketch.name, + files: {} // <== add files to this object + }; + + let projectFiles = traverseAndFormat(sketch); + projectFiles = await traverseAndDownload(projectFiles); + newProject.files = projectFiles; + return newProject; +} + +/** + * format all the sketches using the formatSketchForStorage() + */ +function formatSketchForStorageAll(sketchWithItems, user) { + let sketchList = sketchWithItems.slice(0); + + sketchList = sketchList.map(sketch => formatSketchForStorage(sketch, user)); + + return Promise.all(sketchList); +} + +/** + * Fetch a list of all projects from the API + */ +async function getProjectsList() { + const options = Object.assign({}, editorRequestOptions); + options.url = `${options.url}/sketches`; + + const results = await rp(options); + console.log(results) + + return results.sketches; +} + +/** + * Delete a project + */ +async function deleteProject(project) { + const options = Object.assign({}, editorRequestOptions); + options.method = 'DELETE'; + options.url = `${options.url}/sketches/${project.id}`; + + const results = await rp(options); + + return results; +} + +/** + * Create a new project + */ +async function createProject(project) { + try { + const options = Object.assign({}, editorRequestOptions); + options.method = 'POST'; + options.url = `${options.url}/sketches`; + options.body = project; + + const results = await rp(options); + + return results; + } catch (err) { + throw err; + } +} + +/** + * STEP 6 + * Remove existing projects, then fill the db + * @param {*} filledProjectList + * @param {*} user + */ +async function createProjectsInP5User(filledProjectList, user) { + console.log('Finding existing projects...'); + + const existingProjects = await getProjectsList(); + + console.log(`Will delete ${existingProjects.length} projects`); + + try { + await Q.all(existingProjects.map(deleteProject)); + console.log('deleted old projects!'); + } catch (error) { + console.log('Problem deleting projects'); + console.log(error); + process.exit(1); + } + + try { + const newProjects = filledProjectList.map(async (project) => { + console.log(`saving ${project.name}`); + await createProject(project); + }); + await Q.all(newProjects); + console.log(`Projects saved to User: ${editorUsername}!`); + } catch (error) { + console.log('Error saving projects'); + console.log(error); + } +} + +/** + * --------------------------------------------------------- + * --------------------- main ------------------------------ + * --------------------------------------------------------- + */ + +/** + * MAKE + * Get all the sketches from the ml5-examples repo + * Get the p5 examples + * Dive down into each sketch and get all the files + * Format the sketch files to be save to the db + * Delete existing and save + */ +async function make() { + // Get the categories and their examples + const categories = await getCategories(); + const categoryExamples = await getCategoryExamples(categories); + + const examplesWithResourceTree = await traverseSketchTreeAll(categoryExamples); + const formattedSketchList = await formatSketchForStorageAll(examplesWithResourceTree); + + await createProjectsInP5User(formattedSketchList); + console.log('done!'); + process.exit(); +} + +/** + * TEST - same as make except reads from file for testing purposes + * Get all the sketches from the ml5-examples repo + * Get the p5 examples + * Dive down into each sketch and get all the files + * Format the sketch files to be save to the db + * Delete existing and save + */ +// eslint-disable-next-line no-unused-vars +async function test() { + // read from file while testing + const examplesWithResourceTree = JSON.parse(fs.readFileSync('./ml5-examplesWithResourceTree.json')); + + const formattedSketchList = await formatSketchForStorageAll(examplesWithResourceTree); + + await createProjectsInP5User(formattedSketchList); + console.log('done!'); + process.exit(); +} + +/** + * --------------------------------------------------------- + * --------------------- Run ------------------------------- + * --------------------------------------------------------- + * Usage: + * If you're testing, change the make() function to test() + * ensure when testing that you've saved some JSON outputs to + * read from so you don't have to make a billion requests all the time + * + * $ GITHUB_ID=<....> GITHUB_SECRET=<...> NODE_ENV=development npm run fetch-examples-ml5 + * $ GITHUB_ID=<....> GITHUB_SECRET=<...> npm run fetch-examples-ml5 + */ + +if (process.env.NODE_ENV === 'development') { + // test() + make(); // replace with test() if you don't want to run all the fetch functions over and over +} else { + make(); +} \ No newline at end of file diff --git a/examples/scripts/update-examples-json.js b/examples/scripts/update-examples-json.js new file mode 100644 index 000000000..31de34267 --- /dev/null +++ b/examples/scripts/update-examples-json.js @@ -0,0 +1,93 @@ +const fs = require('fs'); +const path = require('path'); +const recursive = require("recursive-readdir"); +const { parse } = require('node-html-parser'); + +const baseurl = path.resolve(__dirname, ".."); + +const ghUrl = 'https://ml5js.github.io/ml5-examples'; +const weUrl = 'https://editor.p5js.org/ml5/sketches'; + +// Get all the references +const p5Examples = getReferences(`${baseurl}/p5js`, 'p5js', ghUrl, weUrl); +const plainJsExamples = getReferences(`${baseurl}/javascript`, 'javascript', ghUrl); +const d3Examples = getReferences(`${baseurl}/d3`, 'd3', ghUrl); + + +appendToSource(p5Examples, plainJsExamples); +appendToSource(p5Examples, d3Examples); +console.log(`Created/update examples index json!!`) + +// flatten the array to a json where each example parent is the key +let output = {}; +p5Examples.forEach(item => { + output[item.parent] = item.children +}); + +// write out to file +fs.writeFileSync(`${baseurl}/examples.json`, JSON.stringify(output), 'utf8') + + +// TODO: functional javascription would be great! +function appendToSource(_source,_arr){ + // Merge all of these examples to one file + _arr.forEach(item => { + const {parent, children} = item; + + // check if it exists + const match = _source.map( proj => proj.parent ).indexOf(parent); + if(match >= 0){ + Object.entries(children).forEach( child => { + const k = child[0]; + const v = child[1]; + _source[match].children[k] = v; + }) + } + }) +} + + +function getDirectories(path) { + return fs.readdirSync(path).filter(function (file) { + return fs.statSync(path+'/'+file).isDirectory(); + }); +} + +function getReferences(_examplesRoot, _rootName, _ghUrl, _weUrl = null){ + const dirs = getDirectories(_examplesRoot); + + const subdirs = dirs.map(dir => { + let items = getDirectories(`${_examplesRoot}/${dir}`); + + const ghItems = items.map(item => { + return { + name: item, + url:`${_ghUrl}/${_rootName}/${dir}/${item}`} + }); + + if(_weUrl !== null){ + const weItems = items.map(item => { + return { + name: item, + url: `${_weUrl}/${item}` + } + }); + + return { + parent: dir, + children: { + [_rootName]: ghItems, + "p5webeditor": weItems + }} + } else { + return { + parent: dir, + children: { + [_rootName]: ghItems + }} + } + + }); + + return subdirs; +} diff --git a/examples/scripts/update-ml5-reference.js b/examples/scripts/update-ml5-reference.js new file mode 100644 index 000000000..5bb34215d --- /dev/null +++ b/examples/scripts/update-ml5-reference.js @@ -0,0 +1,61 @@ +const fs = require('fs'); +const path = require('path'); +const recursive = require("recursive-readdir"); +const { parse } = require('node-html-parser'); + +const baseurl = path.resolve(__dirname, ".."); + +let ml5src; +if(process.env.NODE_ENV && ['development', 'dev', 'DEVELOPMENT'].includes(process.env.NODE_ENV) === true ){ + console.log(`setting src for ${process.env.NODE_ENV}`) + ml5src = `src="http://localhost:8080/ml5.js" type="text/javascript"` +} else { + console.log(`setting src for production`) + ml5src = `src="https://unpkg.com/ml5@latest/dist/ml5.min.js" type="text/javascript"` +} + +// run the functions +make("/javascript", ml5src); +make("/p5js", ml5src); +make("/d3", ml5src); + +/** + * Take the relative path to the examples directory and + * runs the process + * @param {*} examplesDir + */ +function make(examplesDir, ml5src){ + recursive(baseurl + examplesDir, (err, files) => { + // let indexFiles = []; + files.forEach(file => { + const fileName = file.split('/').pop() + if(fileName.endsWith('.html')){ + // indexFiles.push(file) + updateMl5Reference(file, ml5src) + } + }) + console.log('🌈 done!') + }) +} + + +/** + * takes the filepath to the index.hml file + * works the DOM to put in our script + * @param {*} filePath + */ +function updateMl5Reference(filePath, ml5src){ + let pos; + let el = parse(fs.readFileSync(filePath, 'utf8')); + let scripts = el.querySelectorAll('script') + let selectedRef = scripts.find((item, idx) => { + if(item.rawAttrs.includes('ml5')){ + pos = idx; + return item + } + }) + selectedRef.rawAttrs = ml5src + scripts[pos] = selectedRef; + + fs.writeFileSync(filePath, el, 'utf8'); +} \ No newline at end of file