├── .gitignore ├── README.md ├── backend ├── .dockerignore ├── Dockerfile ├── README.md ├── app │ ├── application.go │ ├── database │ │ └── database.go │ └── todolist │ │ ├── handler.go │ │ ├── handler_test.go │ │ ├── model.go │ │ ├── service.go │ │ └── service_test.go └── main.go ├── build.sh ├── docker-compose.yml ├── frontend ├── Caddyfile ├── Dockerfile ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ └── main.js └── tests ├── .dockerignore ├── Dockerfile ├── cypress.json ├── cypress ├── fixtures │ └── example.json ├── integration │ └── todolist_spec.js ├── plugins │ └── index.js └── support │ ├── commands.js │ └── index.js ├── package-lock.json ├── package.json └── resetdb.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw* 22 | tests/cypress/videos 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | E2E tests running Cypress on Docker 2 | 3 | ## Running 4 | 5 | ``` 6 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres.git 7 | cd e2e-tests-using-docker-cypress-vuejs-golang-postgres 8 | docker-compose up --exit-code-from tests --force-recreate 9 | ``` 10 | 11 | ## License 12 | 13 | MIT -------------------------------------------------------------------------------- /backend/.dockerignore: -------------------------------------------------------------------------------- 1 | .vscode -------------------------------------------------------------------------------- /backend/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.11-stretch 2 | 3 | COPY . /go/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend 4 | WORKDIR /go/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend 5 | 6 | ENV PORT 11080 7 | 8 | RUN sh -c "go get -u github.com/gorilla/mux \ 9 | && go get -u github.com/gorilla/handlers \ 10 | && go get -u github.com/jmoiron/sqlx \ 11 | && go get -u github.com/lib/pq" 12 | 13 | RUN sh -c "go build -i -v -o api main.go \ 14 | && mv api /usr/local/bin" 15 | 16 | CMD ["api"] 17 | -------------------------------------------------------------------------------- /backend/README.md: -------------------------------------------------------------------------------- 1 | ## Running local 2 | 3 | Clone this repo: 4 | 5 | ``` 6 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres.git 7 | mkdir -p $GOPATH/src/github.com/gustavohenrique 8 | mv e2e-tests-using-docker-cypress-vuejs-golang-postgres $GOPATH/src/github.com/gustavohenrique/ 9 | ``` 10 | 11 | Create the database container: 12 | 13 | ``` 14 | docker run -d --name todos_test -p 5434:5432 -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=password -e POSTGRES_DB=todos gustavohenrique/postgis:11 15 | ``` 16 | 17 | Create the table: 18 | 19 | ``` 20 | docker exec todos_test bash -c 'psql -U admin todos_test -c "DROP TABLE IF EXISTS tasks;"' 21 | docker exec todos_test bash -c 'psql -U admin todos_test -c "CREATE TABLE tasks (id SERIAL NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, description VARCHAR, done BOOL NOT NULL DEFAULT false, CONSTRAINT id_pk PRIMARY KEY (id));"' 22 | ``` 23 | 24 | Run the server: 25 | 26 | ``` 27 | cd $GOPATH/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend 28 | DATABASE_URL=postgres://admin:password@127.0.0.1:5434/todos_test?sslmode=disable go run main.go 29 | ``` 30 | 31 | ## Unit Tests 32 | 33 | ``` 34 | cd $GOPATH/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend 35 | go test -cover -v github.com/gustavohenrique/e2e-tests-using-docker-vuejs-golang-postgres/backend/app/todolist -------------------------------------------------------------------------------- /backend/app/application.go: -------------------------------------------------------------------------------- 1 | package app 2 | 3 | import ( 4 | "fmt" 5 | "net/http" 6 | 7 | "github.com/gorilla/handlers" 8 | "github.com/gorilla/mux" 9 | 10 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database" 11 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist" 12 | ) 13 | 14 | type Application struct { 15 | Router *mux.Router 16 | Handler *todolist.TaskHandler 17 | } 18 | 19 | func New() *Application { 20 | router := mux.NewRouter() 21 | router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 22 | fmt.Fprintf(w, "It is working.") 23 | }) 24 | 25 | app := &Application{} 26 | app.Router = router 27 | return app 28 | } 29 | 30 | func (app *Application) EnableCORS() http.Handler { 31 | headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"}) 32 | originsOk := handlers.AllowedOrigins([]string{"*"}) 33 | methodsOk := handlers.AllowedMethods([]string{"GET", "POST", "PUT", "OPTIONS"}) 34 | app.Router.Use(mux.CORSMethodMiddleware(app.Router)) 35 | return handlers.CORS(originsOk, headersOk, methodsOk)(app.Router) 36 | } 37 | 38 | func (app *Application) Initialize(params map[string]string) { 39 | databaseURL := params["databaseURL"] 40 | db := database.NewDB(databaseURL) 41 | service := todolist.NewService(db) 42 | handler := app.Handler 43 | if handler == nil { 44 | h := todolist.NewHandler(service) 45 | handler = &h 46 | } 47 | app.Router.HandleFunc("/todos", handler.FindAll).Methods("GET") 48 | app.Router.HandleFunc("/todos", handler.Create).Methods("POST", "OPTIONS") 49 | app.Router.HandleFunc("/todos/{id}", handler.Done).Methods("PUT", "OPTIONS") 50 | } 51 | -------------------------------------------------------------------------------- /backend/app/database/database.go: -------------------------------------------------------------------------------- 1 | package database 2 | 3 | import ( 4 | "time" 5 | 6 | "github.com/jmoiron/sqlx" 7 | _ "github.com/lib/pq" 8 | ) 9 | 10 | type Database struct { 11 | Instance *sqlx.DB 12 | ConnStr string 13 | } 14 | 15 | type Connection func() *sqlx.DB 16 | 17 | func NewDB(connStr string) Database { 18 | d := Database{} 19 | d.ConnStr = connStr 20 | return d 21 | } 22 | 23 | func (d Database) Connect() (*sqlx.DB, error) { 24 | var err error 25 | if d.Instance == nil { 26 | d.Instance, err = d.getInstance() 27 | } 28 | return d.Instance, err 29 | } 30 | 31 | func (d Database) getInstance() (*sqlx.DB, error) { 32 | db, err := sqlx.Connect("postgres", d.ConnStr) 33 | if err != nil { 34 | return db, err 35 | } 36 | db.SetMaxOpenConns(1) 37 | db.SetMaxIdleConns(1) 38 | db.SetConnMaxLifetime(time.Nanosecond) 39 | return db, err 40 | } 41 | -------------------------------------------------------------------------------- /backend/app/todolist/handler.go: -------------------------------------------------------------------------------- 1 | package todolist 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "log" 8 | "net/http" 9 | "strconv" 10 | 11 | "github.com/gorilla/mux" 12 | ) 13 | 14 | type TaskHandler struct { 15 | service ServiceInterface 16 | } 17 | 18 | func NewHandler(service ServiceInterface) TaskHandler { 19 | handler := TaskHandler{} 20 | handler.service = service 21 | return handler 22 | } 23 | 24 | func (this TaskHandler) FindAll(w http.ResponseWriter, r *http.Request) { 25 | tasks, err := this.service.FindAll() 26 | if err != nil { 27 | log.Println("#FindAll:", err) 28 | w.WriteHeader(http.StatusInternalServerError) 29 | w.Header().Set("Content-Type", "application/json") 30 | resp := map[string]string{ 31 | "error": fmt.Sprintf("%v", err), 32 | } 33 | json.NewEncoder(w).Encode(resp) 34 | return 35 | } 36 | json.NewEncoder(w).Encode(tasks) 37 | } 38 | 39 | func (this TaskHandler) Create(w http.ResponseWriter, r *http.Request) { 40 | w.Header().Set("Content-Type", "application/json") 41 | b, err := ioutil.ReadAll(r.Body) 42 | defer r.Body.Close() 43 | var task Task 44 | err = json.Unmarshal(b, &task) 45 | if err != nil { 46 | http.Error(w, err.Error(), http.StatusBadRequest) 47 | return 48 | } 49 | log.Printf("Creating task %v", task) 50 | saved, err := this.service.Create(task) 51 | if err != nil { 52 | log.Println("#Create:", err) 53 | w.WriteHeader(http.StatusInternalServerError) 54 | resp := map[string]string{ 55 | "error": fmt.Sprintf("%v", err), 56 | } 57 | json.NewEncoder(w).Encode(resp) 58 | return 59 | } 60 | w.WriteHeader(http.StatusCreated) 61 | json.NewEncoder(w).Encode(saved) 62 | } 63 | 64 | func (this TaskHandler) Done(w http.ResponseWriter, r *http.Request) { 65 | w.Header().Set("Content-Type", "application/json") 66 | vars := mux.Vars(r) 67 | id, err := strconv.Atoi(vars["id"]) 68 | task := Task{ID: id} 69 | saved, err := this.service.Done(task) 70 | if err != nil { 71 | log.Println("#Done:", err) 72 | w.WriteHeader(http.StatusInternalServerError) 73 | resp := map[string]string{ 74 | "error": fmt.Sprintf("%v", err), 75 | } 76 | json.NewEncoder(w).Encode(resp) 77 | return 78 | } 79 | json.NewEncoder(w).Encode(saved) 80 | } 81 | -------------------------------------------------------------------------------- /backend/app/todolist/handler_test.go: -------------------------------------------------------------------------------- 1 | package todolist_test 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "net/http" 7 | "net/http/httptest" 8 | "testing" 9 | "time" 10 | 11 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app" 12 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist" 13 | ) 14 | 15 | type MockService struct{} 16 | 17 | func (this MockService) FindAll() ([]todolist.Task, error) { 18 | layout := "2006-01-02T15:04:05.000Z" 19 | str := "2018-12-31T15:00:00.300Z" 20 | t, _ := time.Parse(layout, str) 21 | todos := []todolist.Task{ 22 | {ID: 1, Description: "Item 1", CreatedAt: t, Done: false}, 23 | {ID: 2, Description: "Item 2", CreatedAt: t, Done: true}, 24 | } 25 | return todos, nil 26 | } 27 | 28 | func (this MockService) Create(todo todolist.Task) (todolist.Task, error) { 29 | todos, err := this.FindAll() 30 | return todos[0], err 31 | } 32 | 33 | func (this MockService) Done(todo todolist.Task) (todolist.Task, error) { 34 | todos, err := this.FindAll() 35 | return todos[1], err 36 | } 37 | 38 | var application *app.Application 39 | 40 | func setUpHandler() { 41 | handler := todolist.NewHandler(MockService{}) 42 | application = app.New() 43 | application.Handler = &handler 44 | application.Initialize(map[string]string{ 45 | "databaseURL": "", 46 | }) 47 | } 48 | 49 | func TestFindAll(t *testing.T) { 50 | setUpHandler() 51 | req, _ := http.NewRequest("GET", "/todos", nil) 52 | rr := httptest.NewRecorder() 53 | application.Router.ServeHTTP(rr, req) 54 | 55 | if status := rr.Code; status != http.StatusOK { 56 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) 57 | } 58 | 59 | resp := rr.Body.String() 60 | results := []todolist.Task{} 61 | json.Unmarshal([]byte(resp), &results) 62 | expected := 2 63 | if len(results) != expected { 64 | t.Errorf("handler returned unexpected body: got %d want %d", len(results), expected) 65 | } 66 | } 67 | 68 | func TestCreate(t *testing.T) { 69 | setUpHandler() 70 | var jsonStr = []byte(`{"description": "Item 2"}`) 71 | req, _ := http.NewRequest("POST", "/todos", bytes.NewBuffer(jsonStr)) 72 | req.Header.Set("Content-Type", "application/json") 73 | rr := httptest.NewRecorder() 74 | application.Router.ServeHTTP(rr, req) 75 | 76 | if status := rr.Code; status != http.StatusCreated { 77 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusCreated) 78 | } 79 | 80 | resp := rr.Body.String() 81 | result := todolist.Task{} 82 | json.Unmarshal([]byte(resp), &result) 83 | expected := 1 84 | if result.ID != expected { 85 | t.Errorf("handler returned a wrong ID: got %d want %d", result.ID, expected) 86 | } 87 | } 88 | 89 | func TestDone(t *testing.T) { 90 | setUpHandler() 91 | req, _ := http.NewRequest("PUT", "/todos/2", nil) 92 | req.Header.Set("Content-Type", "application/json") 93 | rr := httptest.NewRecorder() 94 | application.Router.ServeHTTP(rr, req) 95 | 96 | if status := rr.Code; status != http.StatusOK { 97 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) 98 | } 99 | 100 | resp := rr.Body.String() 101 | result := todolist.Task{} 102 | json.Unmarshal([]byte(resp), &result) 103 | expected := 2 104 | if result.ID != expected { 105 | t.Errorf("handler returned a wrong ID: got %d want %d", result.ID, expected) 106 | } 107 | if !result.Done { 108 | t.Errorf("handler returned not completed: got done = %v want true", result.Done) 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /backend/app/todolist/model.go: -------------------------------------------------------------------------------- 1 | package todolist 2 | 3 | import "time" 4 | 5 | type Task struct { 6 | ID int `json:"id"` 7 | CreatedAt time.Time `json:"createdAt" db:"created_at"` 8 | Description string `json:"description"` 9 | Done bool `json:"done"` 10 | } 11 | -------------------------------------------------------------------------------- /backend/app/todolist/service.go: -------------------------------------------------------------------------------- 1 | package todolist 2 | 3 | import ( 4 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database" 5 | ) 6 | 7 | type ServiceInterface interface { 8 | FindAll() ([]Task, error) 9 | Create(task Task) (Task, error) 10 | Done(task Task) (Task, error) 11 | } 12 | 13 | type TaskService struct { 14 | DB database.Database 15 | } 16 | 17 | func NewService(db database.Database) TaskService { 18 | service := TaskService{} 19 | service.DB = db 20 | return service 21 | } 22 | 23 | func (this TaskService) FindAll() ([]Task, error) { 24 | tasks := []Task{} 25 | db, err := this.DB.Connect() 26 | if err == nil { 27 | db.Select(&tasks, "SELECT * FROM tasks") 28 | } 29 | return tasks, err 30 | } 31 | 32 | func (this TaskService) Create(task Task) (Task, error) { 33 | db, err := this.DB.Connect() 34 | if err == nil { 35 | query := "INSERT INTO tasks (description) VALUES ($1) RETURNING *" 36 | stmt, err := db.Preparex(query) 37 | var saved Task 38 | err = stmt.Get(&saved, task.Description) 39 | return saved, err 40 | } 41 | return task, err 42 | } 43 | 44 | func (this TaskService) Done(task Task) (Task, error) { 45 | db, err := this.DB.Connect() 46 | if err == nil { 47 | query := "UPDATE tasks SET done = true WHERE id = $1 RETURNING *" 48 | stmt, err := db.Preparex(query) 49 | var saved Task 50 | err = stmt.Get(&saved, task.ID) 51 | return saved, err 52 | } 53 | return task, err 54 | } 55 | -------------------------------------------------------------------------------- /backend/app/todolist/service_test.go: -------------------------------------------------------------------------------- 1 | package todolist_test 2 | 3 | import ( 4 | "log" 5 | "testing" 6 | 7 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database" 8 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist" 9 | ) 10 | 11 | var ( 12 | db database.Database 13 | service todolist.TaskService 14 | ) 15 | 16 | func setUpService() { 17 | db = database.NewDB("postgres://admin:password@127.0.0.1:5434/todos?sslmode=disable") 18 | conn, err := db.Connect() 19 | if err != nil { 20 | log.Fatal("Error connecting to the database test.", err) 21 | } 22 | conn.Exec("TRUNCATE tasks RESTART IDENTITY;") 23 | tx, _ := conn.Begin() 24 | stmt, _ := tx.Prepare("INSERT INTO tasks (description, done) VALUES ($1, $2)") 25 | stmt.Exec("Write a new post", false) 26 | stmt.Exec("Fix some bugs in my app", false) 27 | stmt.Exec("Install the new Linux Mint version", false) 28 | stmt.Exec("Create a TASK app as example of e2e testing", true) 29 | tx.Commit() 30 | 31 | service = todolist.NewService(db) 32 | } 33 | 34 | func TestFindAllShouldReturnsAllTasks(t *testing.T) { 35 | setUpService() 36 | tasks, _ := service.FindAll() 37 | expected := 4 38 | if len(tasks) != expected { 39 | t.Errorf("Oops, failed to find all tasks. Got %d but I want %d", len(tasks), expected) 40 | } 41 | } 42 | 43 | func TestCreateNewTaskShouldReturnsItWithID(t *testing.T) { 44 | setUpService() 45 | task := todolist.Task{ 46 | Description: "Testing create todo", 47 | } 48 | saved, _ := service.Create(task) 49 | expected := 5 50 | if expected != saved.ID { 51 | t.Errorf("The new todo ID is %d but the expected is %d", saved.ID, expected) 52 | } 53 | } 54 | 55 | func TestUpdateTaskAsDoneShouldReturnsItWithDoneEqualTrue(t *testing.T) { 56 | setUpService() 57 | task := todolist.Task{ 58 | ID: 3, 59 | } 60 | saved, _ := service.Done(task) 61 | if !saved.Done { 62 | t.Fail() 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /backend/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | "net/http" 7 | "os" 8 | 9 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app" 10 | ) 11 | 12 | func main() { 13 | port := "11080" 14 | if len(os.Args) > 1 { 15 | port = os.Args[1] 16 | } 17 | 18 | databaseURL := os.Getenv("DATABASE_URL") 19 | if databaseURL == "" { 20 | log.Fatalf("Please set the DATABASE_URL variable. Ex.:\nDATABASE_URL=postgres://admin:password@127.0.0.1:5432/todos?sslmode=disable") 21 | } 22 | 23 | var application *app.Application 24 | application = app.New() 25 | application.Initialize(map[string]string{ 26 | "databaseURL": databaseURL, 27 | }) 28 | 29 | fmt.Println("Server running on", port) 30 | http.ListenAndServe(":"+port, application.EnableCORS()) 31 | } 32 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres 3 | cd e2e-tests-using-docker-cypress-vuejs-golang-postgres 4 | docker-compose up --exit-code-from tests --force-recreate 5 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | frontend: 4 | build: 5 | context: ./frontend 6 | args: 7 | - VUE_APP_API_URL=http://backend:11080 8 | container_name: frontend 9 | hostname: frontend 10 | ports: 11 | - "2015:2015" 12 | expose: 13 | - "2015" 14 | depends_on: 15 | - backend 16 | environment: 17 | - VUE_APP_API_URL=http://backend:11080 18 | 19 | backend: 20 | build: ./backend 21 | container_name: backend 22 | hostname: backend 23 | ports: 24 | - "17000:17000" 25 | expose: 26 | - "11080" 27 | depends_on: 28 | - db 29 | environment: 30 | - DATABASE_URL=postgres://admin:password@db:5432/todos?sslmode=disable 31 | 32 | db: 33 | image: postgres:alpine 34 | container_name: db 35 | hostname: db 36 | ports: 37 | - "5432:5432" 38 | environment: 39 | - POSTGRES_USER=admin 40 | - POSTGRES_PASSWORD=password 41 | - POSTGRES_DB=todos 42 | 43 | tests: 44 | build: ./tests 45 | container_name: tests 46 | depends_on: 47 | - frontend 48 | - backend 49 | - db 50 | environment: 51 | - DATABASE_URL=postgres://admin:password@db:5432/todos?sslmode=disable 52 | - CYPRESS_FRONTEND_URL=http://frontend:2015 53 | volumes: 54 | - "./tests/cypress:/home/node/tests/cypress" 55 | - "./tests/report:/home/node/tests/report" -------------------------------------------------------------------------------- /frontend/Caddyfile: -------------------------------------------------------------------------------- 1 | 0.0.0.0:2015 2 | gzip 3 | root /app/dist 4 | rewrite { 5 | regexp .* 6 | to {path} / 7 | } 8 | -------------------------------------------------------------------------------- /frontend/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gustavohenrique/vue-cli:10-slim 2 | ADD . /app 3 | ADD Caddyfile /etc/Caddyfile 4 | ARG VUE_APP_API_URL 5 | 6 | RUN cd /app \ 7 | && npm install \ 8 | && VUE_APP_API_URL=${VUE_APP_API_URL} npm run build 9 | 10 | WORKDIR /app/dist 11 | CMD ["caddy", "-conf", "/etc/Caddyfile"] 12 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # frontend 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your tests 19 | ``` 20 | npm run test 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /frontend/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.18.0", 12 | "vue": "^2.5.17" 13 | }, 14 | "devDependencies": { 15 | "@vue/cli-plugin-babel": "^3.2.0", 16 | "@vue/cli-plugin-eslint": "^3.2.0", 17 | "@vue/cli-service": "^3.2.0", 18 | "babel-eslint": "^10.0.1", 19 | "eslint": "^5.8.0", 20 | "eslint-plugin-vue": "^5.0.0-0", 21 | "vue-template-compiler": "^2.5.17" 22 | }, 23 | "eslintConfig": { 24 | "root": true, 25 | "env": { 26 | "node": true 27 | }, 28 | "extends": [ 29 | "plugin:vue/essential", 30 | "eslint:recommended" 31 | ], 32 | "rules": {}, 33 | "parserOptions": { 34 | "parser": "babel-eslint" 35 | } 36 | }, 37 | "postcss": { 38 | "plugins": { 39 | "autoprefixer": {} 40 | } 41 | }, 42 | "browserslist": [ 43 | "> 1%", 44 | "last 2 versions", 45 | "not ie <= 8" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/0e1865dfaa33926b105c350362171dab552e690d/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | frontend 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /frontend/src/App.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 79 | 80 | 239 | -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | 4 | Vue.config.productionTip = false 5 | 6 | new Vue({ 7 | render: h => h(App), 8 | }).$mount('#app') 9 | -------------------------------------------------------------------------------- /tests/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | report 3 | cypress -------------------------------------------------------------------------------- /tests/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM cypress/base:10 2 | 3 | ADD . /home/node/tests 4 | WORKDIR /home/node/tests 5 | 6 | RUN bash -c 'apt-get update \ 7 | && apt-get install -y postgresql-client \ 8 | && npm install -g update \ 9 | && chown -Rf node:node /home/node/tests' 10 | 11 | USER node 12 | RUN bash -c 'npm install \ 13 | && npx cypress install' 14 | 15 | CMD ["npm", "test"] 16 | -------------------------------------------------------------------------------- /tests/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "reporter": "junit", 3 | "reporterOptions": { 4 | "mochaFile": "report/output.xml", 5 | "toConsole": false 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /tests/cypress/integration/todolist_spec.js: -------------------------------------------------------------------------------- 1 | describe('Todo tests', () => { 2 | 3 | const baseUrl = Cypress.env('FRONTEND_URL') 4 | 5 | beforeEach(() => { 6 | cy.exec('sh resetdb.sh') 7 | }) 8 | 9 | context('When page is opened', () => { 10 | it('Creates a new task and add it in top of the list', () => { 11 | const task = 'todo test 1 cypress' 12 | cy.visit(baseUrl) 13 | .get('input[type="text"]').clear().type(task) 14 | .get('button.button').click() 15 | 16 | cy.get('ul > li:first > .tasks__item__toggle') 17 | .should(($item) => { 18 | expect($item).to.contain(task) 19 | }) 20 | }) 21 | 22 | it('Clicks on the task to mark as complete and hide it from the list', () => { 23 | const selector = 'ul > li:first > .tasks__item__toggle' 24 | cy.visit(baseUrl) 25 | .get(selector) 26 | .then(($btn) => { 27 | const task = $btn.text() 28 | $btn.click() 29 | 30 | cy.get(selector).should('have.class', 'tasks__item__toggle--done') 31 | }) 32 | }) 33 | }) 34 | 35 | }) 36 | -------------------------------------------------------------------------------- /tests/cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | module.exports = (on, config) => { 15 | // `on` is used to hook into various events Cypress emits 16 | // `config` is the resolved Cypress config 17 | } 18 | -------------------------------------------------------------------------------- /tests/cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add("login", (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This is will overwrite an existing command -- 25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /tests/cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | -------------------------------------------------------------------------------- /tests/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "e2e-tests-using-docker-cypress-vuejs-golang-postgres", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@cypress/listr-verbose-renderer": { 8 | "version": "0.4.1", 9 | "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", 10 | "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=", 11 | "dev": true, 12 | "requires": { 13 | "chalk": "^1.1.3", 14 | "cli-cursor": "^1.0.2", 15 | "date-fns": "^1.27.2", 16 | "figures": "^1.7.0" 17 | }, 18 | "dependencies": { 19 | "chalk": { 20 | "version": "1.1.3", 21 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 22 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 23 | "dev": true, 24 | "requires": { 25 | "ansi-styles": "^2.2.1", 26 | "escape-string-regexp": "^1.0.2", 27 | "has-ansi": "^2.0.0", 28 | "strip-ansi": "^3.0.0", 29 | "supports-color": "^2.0.0" 30 | } 31 | }, 32 | "supports-color": { 33 | "version": "2.0.0", 34 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 35 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 36 | "dev": true 37 | } 38 | } 39 | }, 40 | "@cypress/xvfb": { 41 | "version": "1.2.3", 42 | "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.3.tgz", 43 | "integrity": "sha512-yYrK+/bgL3hwoRHMZG4r5fyLniCy1pXex5fimtewAY6vE/jsVs8Q37UsEO03tFlcmiLnQ3rBNMaZBYTi/+C1cw==", 44 | "dev": true, 45 | "requires": { 46 | "debug": "^3.1.0", 47 | "lodash.once": "^4.1.1" 48 | } 49 | }, 50 | "@types/blob-util": { 51 | "version": "1.3.3", 52 | "resolved": "https://registry.npmjs.org/@types/blob-util/-/blob-util-1.3.3.tgz", 53 | "integrity": "sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w==", 54 | "dev": true 55 | }, 56 | "@types/bluebird": { 57 | "version": "3.5.18", 58 | "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.18.tgz", 59 | "integrity": "sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w==", 60 | "dev": true 61 | }, 62 | "@types/chai": { 63 | "version": "4.0.8", 64 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.8.tgz", 65 | "integrity": "sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg==", 66 | "dev": true 67 | }, 68 | "@types/chai-jquery": { 69 | "version": "1.1.35", 70 | "resolved": "https://registry.npmjs.org/@types/chai-jquery/-/chai-jquery-1.1.35.tgz", 71 | "integrity": "sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ==", 72 | "dev": true, 73 | "requires": { 74 | "@types/chai": "*", 75 | "@types/jquery": "*" 76 | } 77 | }, 78 | "@types/jquery": { 79 | "version": "3.3.6", 80 | "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.6.tgz", 81 | "integrity": "sha512-403D4wN95Mtzt2EoQHARf5oe/jEPhzBOBNrunk+ydQGW8WmkQ/E8rViRAEB1qEt/vssfGfNVD6ujP4FVeegrLg==", 82 | "dev": true 83 | }, 84 | "@types/lodash": { 85 | "version": "4.14.87", 86 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.87.tgz", 87 | "integrity": "sha512-AqRC+aEF4N0LuNHtcjKtvF9OTfqZI0iaBoe3dA6m/W+/YZJBZjBmW/QIZ8fBeXC6cnytSY9tBoFBqZ9uSCeVsw==", 88 | "dev": true 89 | }, 90 | "@types/minimatch": { 91 | "version": "3.0.3", 92 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 93 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 94 | "dev": true 95 | }, 96 | "@types/mocha": { 97 | "version": "2.2.44", 98 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz", 99 | "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==", 100 | "dev": true 101 | }, 102 | "@types/sinon": { 103 | "version": "7.0.0", 104 | "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.0.tgz", 105 | "integrity": "sha512-kcYoPw0uKioFVC/oOqafk2yizSceIQXCYnkYts9vJIwQklFRsMubTObTDrjQamUyBRd47332s85074cd/hCwxg==", 106 | "dev": true 107 | }, 108 | "@types/sinon-chai": { 109 | "version": "2.7.29", 110 | "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.29.tgz", 111 | "integrity": "sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw==", 112 | "dev": true, 113 | "requires": { 114 | "@types/chai": "*", 115 | "@types/sinon": "*" 116 | } 117 | }, 118 | "ajv": { 119 | "version": "5.5.2", 120 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 121 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 122 | "dev": true, 123 | "requires": { 124 | "co": "^4.6.0", 125 | "fast-deep-equal": "^1.0.0", 126 | "fast-json-stable-stringify": "^2.0.0", 127 | "json-schema-traverse": "^0.3.0" 128 | } 129 | }, 130 | "ansi-escapes": { 131 | "version": "1.4.0", 132 | "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", 133 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", 134 | "dev": true 135 | }, 136 | "ansi-regex": { 137 | "version": "2.1.1", 138 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 139 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 140 | "dev": true 141 | }, 142 | "ansi-styles": { 143 | "version": "2.2.1", 144 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 145 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 146 | "dev": true 147 | }, 148 | "asn1": { 149 | "version": "0.2.4", 150 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 151 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 152 | "dev": true, 153 | "requires": { 154 | "safer-buffer": "~2.1.0" 155 | } 156 | }, 157 | "assert-plus": { 158 | "version": "1.0.0", 159 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 160 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 161 | "dev": true 162 | }, 163 | "async": { 164 | "version": "2.4.0", 165 | "resolved": "https://registry.npmjs.org/async/-/async-2.4.0.tgz", 166 | "integrity": "sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE=", 167 | "dev": true, 168 | "requires": { 169 | "lodash": "^4.14.0" 170 | } 171 | }, 172 | "asynckit": { 173 | "version": "0.4.0", 174 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 175 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 176 | "dev": true 177 | }, 178 | "aws-sign2": { 179 | "version": "0.7.0", 180 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 181 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 182 | "dev": true 183 | }, 184 | "aws4": { 185 | "version": "1.8.0", 186 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 187 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 188 | "dev": true 189 | }, 190 | "babel-runtime": { 191 | "version": "6.26.0", 192 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 193 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 194 | "dev": true, 195 | "requires": { 196 | "core-js": "^2.4.0", 197 | "regenerator-runtime": "^0.11.0" 198 | } 199 | }, 200 | "balanced-match": { 201 | "version": "1.0.0", 202 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 203 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 204 | "dev": true 205 | }, 206 | "bcrypt-pbkdf": { 207 | "version": "1.0.2", 208 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 209 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 210 | "dev": true, 211 | "requires": { 212 | "tweetnacl": "^0.14.3" 213 | } 214 | }, 215 | "bluebird": { 216 | "version": "3.5.0", 217 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 218 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", 219 | "dev": true 220 | }, 221 | "brace-expansion": { 222 | "version": "1.1.11", 223 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 224 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 225 | "dev": true, 226 | "requires": { 227 | "balanced-match": "^1.0.0", 228 | "concat-map": "0.0.1" 229 | } 230 | }, 231 | "buffer-crc32": { 232 | "version": "0.2.13", 233 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 234 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 235 | "dev": true 236 | }, 237 | "cachedir": { 238 | "version": "1.3.0", 239 | "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-1.3.0.tgz", 240 | "integrity": "sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg==", 241 | "dev": true, 242 | "requires": { 243 | "os-homedir": "^1.0.1" 244 | } 245 | }, 246 | "caseless": { 247 | "version": "0.12.0", 248 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 249 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 250 | "dev": true 251 | }, 252 | "chalk": { 253 | "version": "2.4.1", 254 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 255 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 256 | "dev": true, 257 | "requires": { 258 | "ansi-styles": "^3.2.1", 259 | "escape-string-regexp": "^1.0.5", 260 | "supports-color": "^5.3.0" 261 | }, 262 | "dependencies": { 263 | "ansi-styles": { 264 | "version": "3.2.1", 265 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 266 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 267 | "dev": true, 268 | "requires": { 269 | "color-convert": "^1.9.0" 270 | } 271 | }, 272 | "supports-color": { 273 | "version": "5.5.0", 274 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 275 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 276 | "dev": true, 277 | "requires": { 278 | "has-flag": "^3.0.0" 279 | } 280 | } 281 | } 282 | }, 283 | "check-more-types": { 284 | "version": "2.24.0", 285 | "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", 286 | "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", 287 | "dev": true 288 | }, 289 | "ci-info": { 290 | "version": "1.6.0", 291 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", 292 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", 293 | "dev": true 294 | }, 295 | "cli-cursor": { 296 | "version": "1.0.2", 297 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", 298 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", 299 | "dev": true, 300 | "requires": { 301 | "restore-cursor": "^1.0.1" 302 | } 303 | }, 304 | "cli-spinners": { 305 | "version": "0.1.2", 306 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", 307 | "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", 308 | "dev": true 309 | }, 310 | "cli-truncate": { 311 | "version": "0.2.1", 312 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", 313 | "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", 314 | "dev": true, 315 | "requires": { 316 | "slice-ansi": "0.0.4", 317 | "string-width": "^1.0.1" 318 | } 319 | }, 320 | "co": { 321 | "version": "4.6.0", 322 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 323 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 324 | "dev": true 325 | }, 326 | "code-point-at": { 327 | "version": "1.1.0", 328 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 329 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 330 | "dev": true 331 | }, 332 | "color-convert": { 333 | "version": "1.9.3", 334 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 335 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 336 | "dev": true, 337 | "requires": { 338 | "color-name": "1.1.3" 339 | } 340 | }, 341 | "color-name": { 342 | "version": "1.1.3", 343 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 344 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 345 | "dev": true 346 | }, 347 | "combined-stream": { 348 | "version": "1.0.7", 349 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 350 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 351 | "dev": true, 352 | "requires": { 353 | "delayed-stream": "~1.0.0" 354 | } 355 | }, 356 | "commander": { 357 | "version": "2.11.0", 358 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 359 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 360 | "dev": true 361 | }, 362 | "common-tags": { 363 | "version": "1.4.0", 364 | "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", 365 | "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", 366 | "dev": true, 367 | "requires": { 368 | "babel-runtime": "^6.18.0" 369 | } 370 | }, 371 | "concat-map": { 372 | "version": "0.0.1", 373 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 374 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 375 | "dev": true 376 | }, 377 | "concat-stream": { 378 | "version": "1.6.0", 379 | "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 380 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 381 | "dev": true, 382 | "requires": { 383 | "inherits": "^2.0.3", 384 | "readable-stream": "^2.2.2", 385 | "typedarray": "^0.0.6" 386 | } 387 | }, 388 | "core-js": { 389 | "version": "2.6.1", 390 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", 391 | "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==", 392 | "dev": true 393 | }, 394 | "core-util-is": { 395 | "version": "1.0.2", 396 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 397 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 398 | "dev": true 399 | }, 400 | "cross-spawn": { 401 | "version": "6.0.5", 402 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 403 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 404 | "dev": true, 405 | "requires": { 406 | "nice-try": "^1.0.4", 407 | "path-key": "^2.0.1", 408 | "semver": "^5.5.0", 409 | "shebang-command": "^1.2.0", 410 | "which": "^1.2.9" 411 | } 412 | }, 413 | "cypress": { 414 | "version": "3.1.4", 415 | "resolved": "https://registry.npmjs.org/cypress/-/cypress-3.1.4.tgz", 416 | "integrity": "sha512-8VJYtCAFqHXMnRDo4vdomR2CqfmhtReoplmbkXVspeKhKxU8WsZl0Nh5yeil8txxhq+YQwDrInItUqIm35Vw+g==", 417 | "dev": true, 418 | "requires": { 419 | "@cypress/listr-verbose-renderer": "0.4.1", 420 | "@cypress/xvfb": "1.2.3", 421 | "@types/blob-util": "1.3.3", 422 | "@types/bluebird": "3.5.18", 423 | "@types/chai": "4.0.8", 424 | "@types/chai-jquery": "1.1.35", 425 | "@types/jquery": "3.3.6", 426 | "@types/lodash": "4.14.87", 427 | "@types/minimatch": "3.0.3", 428 | "@types/mocha": "2.2.44", 429 | "@types/sinon": "7.0.0", 430 | "@types/sinon-chai": "2.7.29", 431 | "bluebird": "3.5.0", 432 | "cachedir": "1.3.0", 433 | "chalk": "2.4.1", 434 | "check-more-types": "2.24.0", 435 | "commander": "2.11.0", 436 | "common-tags": "1.4.0", 437 | "debug": "3.1.0", 438 | "execa": "0.10.0", 439 | "executable": "4.1.1", 440 | "extract-zip": "1.6.6", 441 | "fs-extra": "4.0.1", 442 | "getos": "3.1.0", 443 | "glob": "7.1.2", 444 | "is-ci": "1.0.10", 445 | "is-installed-globally": "0.1.0", 446 | "lazy-ass": "1.6.0", 447 | "listr": "0.12.0", 448 | "lodash": "4.17.11", 449 | "log-symbols": "2.2.0", 450 | "minimist": "1.2.0", 451 | "moment": "2.22.2", 452 | "ramda": "0.24.1", 453 | "request": "2.87.0", 454 | "request-progress": "0.3.1", 455 | "supports-color": "5.1.0", 456 | "tmp": "0.0.31", 457 | "url": "0.11.0", 458 | "yauzl": "2.8.0" 459 | } 460 | }, 461 | "dashdash": { 462 | "version": "1.14.1", 463 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 464 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 465 | "dev": true, 466 | "requires": { 467 | "assert-plus": "^1.0.0" 468 | } 469 | }, 470 | "date-fns": { 471 | "version": "1.30.1", 472 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", 473 | "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", 474 | "dev": true 475 | }, 476 | "debug": { 477 | "version": "3.1.0", 478 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 479 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 480 | "dev": true, 481 | "requires": { 482 | "ms": "2.0.0" 483 | } 484 | }, 485 | "delayed-stream": { 486 | "version": "1.0.0", 487 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 488 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 489 | "dev": true 490 | }, 491 | "ecc-jsbn": { 492 | "version": "0.1.2", 493 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 494 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 495 | "dev": true, 496 | "requires": { 497 | "jsbn": "~0.1.0", 498 | "safer-buffer": "^2.1.0" 499 | } 500 | }, 501 | "elegant-spinner": { 502 | "version": "1.0.1", 503 | "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", 504 | "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", 505 | "dev": true 506 | }, 507 | "escape-string-regexp": { 508 | "version": "1.0.5", 509 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 510 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 511 | "dev": true 512 | }, 513 | "execa": { 514 | "version": "0.10.0", 515 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", 516 | "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", 517 | "dev": true, 518 | "requires": { 519 | "cross-spawn": "^6.0.0", 520 | "get-stream": "^3.0.0", 521 | "is-stream": "^1.1.0", 522 | "npm-run-path": "^2.0.0", 523 | "p-finally": "^1.0.0", 524 | "signal-exit": "^3.0.0", 525 | "strip-eof": "^1.0.0" 526 | } 527 | }, 528 | "executable": { 529 | "version": "4.1.1", 530 | "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", 531 | "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", 532 | "dev": true, 533 | "requires": { 534 | "pify": "^2.2.0" 535 | } 536 | }, 537 | "exit-hook": { 538 | "version": "1.1.1", 539 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", 540 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", 541 | "dev": true 542 | }, 543 | "extend": { 544 | "version": "3.0.2", 545 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 546 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 547 | "dev": true 548 | }, 549 | "extract-zip": { 550 | "version": "1.6.6", 551 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", 552 | "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", 553 | "dev": true, 554 | "requires": { 555 | "concat-stream": "1.6.0", 556 | "debug": "2.6.9", 557 | "mkdirp": "0.5.0", 558 | "yauzl": "2.4.1" 559 | }, 560 | "dependencies": { 561 | "debug": { 562 | "version": "2.6.9", 563 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 564 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 565 | "dev": true, 566 | "requires": { 567 | "ms": "2.0.0" 568 | } 569 | }, 570 | "yauzl": { 571 | "version": "2.4.1", 572 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 573 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 574 | "dev": true, 575 | "requires": { 576 | "fd-slicer": "~1.0.1" 577 | } 578 | } 579 | } 580 | }, 581 | "extsprintf": { 582 | "version": "1.3.0", 583 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 584 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 585 | "dev": true 586 | }, 587 | "fast-deep-equal": { 588 | "version": "1.1.0", 589 | "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 590 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 591 | "dev": true 592 | }, 593 | "fast-json-stable-stringify": { 594 | "version": "2.0.0", 595 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 596 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 597 | "dev": true 598 | }, 599 | "fd-slicer": { 600 | "version": "1.0.1", 601 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 602 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 603 | "dev": true, 604 | "requires": { 605 | "pend": "~1.2.0" 606 | } 607 | }, 608 | "figures": { 609 | "version": "1.7.0", 610 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 611 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 612 | "dev": true, 613 | "requires": { 614 | "escape-string-regexp": "^1.0.5", 615 | "object-assign": "^4.1.0" 616 | } 617 | }, 618 | "forever-agent": { 619 | "version": "0.6.1", 620 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 621 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 622 | "dev": true 623 | }, 624 | "form-data": { 625 | "version": "2.3.3", 626 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 627 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 628 | "dev": true, 629 | "requires": { 630 | "asynckit": "^0.4.0", 631 | "combined-stream": "^1.0.6", 632 | "mime-types": "^2.1.12" 633 | } 634 | }, 635 | "fs-extra": { 636 | "version": "4.0.1", 637 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", 638 | "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", 639 | "dev": true, 640 | "requires": { 641 | "graceful-fs": "^4.1.2", 642 | "jsonfile": "^3.0.0", 643 | "universalify": "^0.1.0" 644 | } 645 | }, 646 | "fs.realpath": { 647 | "version": "1.0.0", 648 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 649 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 650 | "dev": true 651 | }, 652 | "get-stream": { 653 | "version": "3.0.0", 654 | "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 655 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 656 | "dev": true 657 | }, 658 | "getos": { 659 | "version": "3.1.0", 660 | "resolved": "https://registry.npmjs.org/getos/-/getos-3.1.0.tgz", 661 | "integrity": "sha512-i9vrxtDu5DlLVFcrbqUqGWYlZN/zZ4pGMICCAcZoYsX3JA54nYp8r5EThw5K+m2q3wszkx4Th746JstspB0H4Q==", 662 | "dev": true, 663 | "requires": { 664 | "async": "2.4.0" 665 | } 666 | }, 667 | "getpass": { 668 | "version": "0.1.7", 669 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 670 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 671 | "dev": true, 672 | "requires": { 673 | "assert-plus": "^1.0.0" 674 | } 675 | }, 676 | "glob": { 677 | "version": "7.1.2", 678 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 679 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 680 | "dev": true, 681 | "requires": { 682 | "fs.realpath": "^1.0.0", 683 | "inflight": "^1.0.4", 684 | "inherits": "2", 685 | "minimatch": "^3.0.4", 686 | "once": "^1.3.0", 687 | "path-is-absolute": "^1.0.0" 688 | } 689 | }, 690 | "global-dirs": { 691 | "version": "0.1.1", 692 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 693 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 694 | "dev": true, 695 | "requires": { 696 | "ini": "^1.3.4" 697 | } 698 | }, 699 | "graceful-fs": { 700 | "version": "4.1.15", 701 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 702 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 703 | "dev": true 704 | }, 705 | "har-schema": { 706 | "version": "2.0.0", 707 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 708 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 709 | "dev": true 710 | }, 711 | "har-validator": { 712 | "version": "5.0.3", 713 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 714 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 715 | "dev": true, 716 | "requires": { 717 | "ajv": "^5.1.0", 718 | "har-schema": "^2.0.0" 719 | } 720 | }, 721 | "has-ansi": { 722 | "version": "2.0.0", 723 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 724 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 725 | "dev": true, 726 | "requires": { 727 | "ansi-regex": "^2.0.0" 728 | } 729 | }, 730 | "has-flag": { 731 | "version": "3.0.0", 732 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 733 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 734 | "dev": true 735 | }, 736 | "http-signature": { 737 | "version": "1.2.0", 738 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 739 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 740 | "dev": true, 741 | "requires": { 742 | "assert-plus": "^1.0.0", 743 | "jsprim": "^1.2.2", 744 | "sshpk": "^1.7.0" 745 | } 746 | }, 747 | "indent-string": { 748 | "version": "2.1.0", 749 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 750 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 751 | "dev": true, 752 | "requires": { 753 | "repeating": "^2.0.0" 754 | } 755 | }, 756 | "inflight": { 757 | "version": "1.0.6", 758 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 759 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 760 | "dev": true, 761 | "requires": { 762 | "once": "^1.3.0", 763 | "wrappy": "1" 764 | } 765 | }, 766 | "inherits": { 767 | "version": "2.0.3", 768 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 769 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 770 | "dev": true 771 | }, 772 | "ini": { 773 | "version": "1.3.5", 774 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 775 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 776 | "dev": true 777 | }, 778 | "is-ci": { 779 | "version": "1.0.10", 780 | "resolved": "http://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", 781 | "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", 782 | "dev": true, 783 | "requires": { 784 | "ci-info": "^1.0.0" 785 | } 786 | }, 787 | "is-finite": { 788 | "version": "1.0.2", 789 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 790 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 791 | "dev": true, 792 | "requires": { 793 | "number-is-nan": "^1.0.0" 794 | } 795 | }, 796 | "is-fullwidth-code-point": { 797 | "version": "1.0.0", 798 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 799 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 800 | "dev": true, 801 | "requires": { 802 | "number-is-nan": "^1.0.0" 803 | } 804 | }, 805 | "is-installed-globally": { 806 | "version": "0.1.0", 807 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 808 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 809 | "dev": true, 810 | "requires": { 811 | "global-dirs": "^0.1.0", 812 | "is-path-inside": "^1.0.0" 813 | } 814 | }, 815 | "is-path-inside": { 816 | "version": "1.0.1", 817 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 818 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 819 | "dev": true, 820 | "requires": { 821 | "path-is-inside": "^1.0.1" 822 | } 823 | }, 824 | "is-promise": { 825 | "version": "2.1.0", 826 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 827 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 828 | "dev": true 829 | }, 830 | "is-stream": { 831 | "version": "1.1.0", 832 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 833 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 834 | "dev": true 835 | }, 836 | "is-typedarray": { 837 | "version": "1.0.0", 838 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 839 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 840 | "dev": true 841 | }, 842 | "isarray": { 843 | "version": "1.0.0", 844 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 845 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 846 | "dev": true 847 | }, 848 | "isexe": { 849 | "version": "2.0.0", 850 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 851 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 852 | "dev": true 853 | }, 854 | "isstream": { 855 | "version": "0.1.2", 856 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 857 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 858 | "dev": true 859 | }, 860 | "jsbn": { 861 | "version": "0.1.1", 862 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 863 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 864 | "dev": true 865 | }, 866 | "json-schema": { 867 | "version": "0.2.3", 868 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 869 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 870 | "dev": true 871 | }, 872 | "json-schema-traverse": { 873 | "version": "0.3.1", 874 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 875 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 876 | "dev": true 877 | }, 878 | "json-stringify-safe": { 879 | "version": "5.0.1", 880 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 881 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 882 | "dev": true 883 | }, 884 | "jsonfile": { 885 | "version": "3.0.1", 886 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", 887 | "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", 888 | "dev": true, 889 | "requires": { 890 | "graceful-fs": "^4.1.6" 891 | } 892 | }, 893 | "jsprim": { 894 | "version": "1.4.1", 895 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 896 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 897 | "dev": true, 898 | "requires": { 899 | "assert-plus": "1.0.0", 900 | "extsprintf": "1.3.0", 901 | "json-schema": "0.2.3", 902 | "verror": "1.10.0" 903 | } 904 | }, 905 | "lazy-ass": { 906 | "version": "1.6.0", 907 | "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", 908 | "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", 909 | "dev": true 910 | }, 911 | "listr": { 912 | "version": "0.12.0", 913 | "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", 914 | "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", 915 | "dev": true, 916 | "requires": { 917 | "chalk": "^1.1.3", 918 | "cli-truncate": "^0.2.1", 919 | "figures": "^1.7.0", 920 | "indent-string": "^2.1.0", 921 | "is-promise": "^2.1.0", 922 | "is-stream": "^1.1.0", 923 | "listr-silent-renderer": "^1.1.1", 924 | "listr-update-renderer": "^0.2.0", 925 | "listr-verbose-renderer": "^0.4.0", 926 | "log-symbols": "^1.0.2", 927 | "log-update": "^1.0.2", 928 | "ora": "^0.2.3", 929 | "p-map": "^1.1.1", 930 | "rxjs": "^5.0.0-beta.11", 931 | "stream-to-observable": "^0.1.0", 932 | "strip-ansi": "^3.0.1" 933 | }, 934 | "dependencies": { 935 | "chalk": { 936 | "version": "1.1.3", 937 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 938 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 939 | "dev": true, 940 | "requires": { 941 | "ansi-styles": "^2.2.1", 942 | "escape-string-regexp": "^1.0.2", 943 | "has-ansi": "^2.0.0", 944 | "strip-ansi": "^3.0.0", 945 | "supports-color": "^2.0.0" 946 | } 947 | }, 948 | "log-symbols": { 949 | "version": "1.0.2", 950 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", 951 | "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", 952 | "dev": true, 953 | "requires": { 954 | "chalk": "^1.0.0" 955 | } 956 | }, 957 | "supports-color": { 958 | "version": "2.0.0", 959 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 960 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 961 | "dev": true 962 | } 963 | } 964 | }, 965 | "listr-silent-renderer": { 966 | "version": "1.1.1", 967 | "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", 968 | "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", 969 | "dev": true 970 | }, 971 | "listr-update-renderer": { 972 | "version": "0.2.0", 973 | "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", 974 | "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", 975 | "dev": true, 976 | "requires": { 977 | "chalk": "^1.1.3", 978 | "cli-truncate": "^0.2.1", 979 | "elegant-spinner": "^1.0.1", 980 | "figures": "^1.7.0", 981 | "indent-string": "^3.0.0", 982 | "log-symbols": "^1.0.2", 983 | "log-update": "^1.0.2", 984 | "strip-ansi": "^3.0.1" 985 | }, 986 | "dependencies": { 987 | "chalk": { 988 | "version": "1.1.3", 989 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 990 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 991 | "dev": true, 992 | "requires": { 993 | "ansi-styles": "^2.2.1", 994 | "escape-string-regexp": "^1.0.2", 995 | "has-ansi": "^2.0.0", 996 | "strip-ansi": "^3.0.0", 997 | "supports-color": "^2.0.0" 998 | } 999 | }, 1000 | "indent-string": { 1001 | "version": "3.2.0", 1002 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", 1003 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", 1004 | "dev": true 1005 | }, 1006 | "log-symbols": { 1007 | "version": "1.0.2", 1008 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", 1009 | "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", 1010 | "dev": true, 1011 | "requires": { 1012 | "chalk": "^1.0.0" 1013 | } 1014 | }, 1015 | "supports-color": { 1016 | "version": "2.0.0", 1017 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1018 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1019 | "dev": true 1020 | } 1021 | } 1022 | }, 1023 | "listr-verbose-renderer": { 1024 | "version": "0.4.1", 1025 | "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", 1026 | "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", 1027 | "dev": true, 1028 | "requires": { 1029 | "chalk": "^1.1.3", 1030 | "cli-cursor": "^1.0.2", 1031 | "date-fns": "^1.27.2", 1032 | "figures": "^1.7.0" 1033 | }, 1034 | "dependencies": { 1035 | "chalk": { 1036 | "version": "1.1.3", 1037 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1038 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1039 | "dev": true, 1040 | "requires": { 1041 | "ansi-styles": "^2.2.1", 1042 | "escape-string-regexp": "^1.0.2", 1043 | "has-ansi": "^2.0.0", 1044 | "strip-ansi": "^3.0.0", 1045 | "supports-color": "^2.0.0" 1046 | } 1047 | }, 1048 | "supports-color": { 1049 | "version": "2.0.0", 1050 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1051 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1052 | "dev": true 1053 | } 1054 | } 1055 | }, 1056 | "lodash": { 1057 | "version": "4.17.11", 1058 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 1059 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 1060 | "dev": true 1061 | }, 1062 | "lodash.once": { 1063 | "version": "4.1.1", 1064 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1065 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", 1066 | "dev": true 1067 | }, 1068 | "log-symbols": { 1069 | "version": "2.2.0", 1070 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 1071 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 1072 | "dev": true, 1073 | "requires": { 1074 | "chalk": "^2.0.1" 1075 | } 1076 | }, 1077 | "log-update": { 1078 | "version": "1.0.2", 1079 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", 1080 | "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", 1081 | "dev": true, 1082 | "requires": { 1083 | "ansi-escapes": "^1.0.0", 1084 | "cli-cursor": "^1.0.2" 1085 | } 1086 | }, 1087 | "mime-db": { 1088 | "version": "1.37.0", 1089 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 1090 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", 1091 | "dev": true 1092 | }, 1093 | "mime-types": { 1094 | "version": "2.1.21", 1095 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 1096 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 1097 | "dev": true, 1098 | "requires": { 1099 | "mime-db": "~1.37.0" 1100 | } 1101 | }, 1102 | "minimatch": { 1103 | "version": "3.0.4", 1104 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1105 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1106 | "dev": true, 1107 | "requires": { 1108 | "brace-expansion": "^1.1.7" 1109 | } 1110 | }, 1111 | "minimist": { 1112 | "version": "1.2.0", 1113 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1114 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1115 | "dev": true 1116 | }, 1117 | "mkdirp": { 1118 | "version": "0.5.0", 1119 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", 1120 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", 1121 | "dev": true, 1122 | "requires": { 1123 | "minimist": "0.0.8" 1124 | }, 1125 | "dependencies": { 1126 | "minimist": { 1127 | "version": "0.0.8", 1128 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1129 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1130 | "dev": true 1131 | } 1132 | } 1133 | }, 1134 | "moment": { 1135 | "version": "2.22.2", 1136 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", 1137 | "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", 1138 | "dev": true 1139 | }, 1140 | "ms": { 1141 | "version": "2.0.0", 1142 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1143 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1144 | "dev": true 1145 | }, 1146 | "nice-try": { 1147 | "version": "1.0.5", 1148 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1149 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1150 | "dev": true 1151 | }, 1152 | "npm-run-path": { 1153 | "version": "2.0.2", 1154 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1155 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1156 | "dev": true, 1157 | "requires": { 1158 | "path-key": "^2.0.0" 1159 | } 1160 | }, 1161 | "number-is-nan": { 1162 | "version": "1.0.1", 1163 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1164 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1165 | "dev": true 1166 | }, 1167 | "oauth-sign": { 1168 | "version": "0.8.2", 1169 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1170 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 1171 | "dev": true 1172 | }, 1173 | "object-assign": { 1174 | "version": "4.1.1", 1175 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1176 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1177 | "dev": true 1178 | }, 1179 | "once": { 1180 | "version": "1.4.0", 1181 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1182 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1183 | "dev": true, 1184 | "requires": { 1185 | "wrappy": "1" 1186 | } 1187 | }, 1188 | "onetime": { 1189 | "version": "1.1.0", 1190 | "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", 1191 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", 1192 | "dev": true 1193 | }, 1194 | "ora": { 1195 | "version": "0.2.3", 1196 | "resolved": "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz", 1197 | "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", 1198 | "dev": true, 1199 | "requires": { 1200 | "chalk": "^1.1.1", 1201 | "cli-cursor": "^1.0.2", 1202 | "cli-spinners": "^0.1.2", 1203 | "object-assign": "^4.0.1" 1204 | }, 1205 | "dependencies": { 1206 | "chalk": { 1207 | "version": "1.1.3", 1208 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1209 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1210 | "dev": true, 1211 | "requires": { 1212 | "ansi-styles": "^2.2.1", 1213 | "escape-string-regexp": "^1.0.2", 1214 | "has-ansi": "^2.0.0", 1215 | "strip-ansi": "^3.0.0", 1216 | "supports-color": "^2.0.0" 1217 | } 1218 | }, 1219 | "supports-color": { 1220 | "version": "2.0.0", 1221 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1222 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1223 | "dev": true 1224 | } 1225 | } 1226 | }, 1227 | "os-homedir": { 1228 | "version": "1.0.2", 1229 | "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1230 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1231 | "dev": true 1232 | }, 1233 | "os-tmpdir": { 1234 | "version": "1.0.2", 1235 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1236 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1237 | "dev": true 1238 | }, 1239 | "p-finally": { 1240 | "version": "1.0.0", 1241 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1242 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1243 | "dev": true 1244 | }, 1245 | "p-map": { 1246 | "version": "1.2.0", 1247 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", 1248 | "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", 1249 | "dev": true 1250 | }, 1251 | "path-is-absolute": { 1252 | "version": "1.0.1", 1253 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1254 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1255 | "dev": true 1256 | }, 1257 | "path-is-inside": { 1258 | "version": "1.0.2", 1259 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1260 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1261 | "dev": true 1262 | }, 1263 | "path-key": { 1264 | "version": "2.0.1", 1265 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1266 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1267 | "dev": true 1268 | }, 1269 | "pend": { 1270 | "version": "1.2.0", 1271 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1272 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1273 | "dev": true 1274 | }, 1275 | "performance-now": { 1276 | "version": "2.1.0", 1277 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1278 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1279 | "dev": true 1280 | }, 1281 | "pify": { 1282 | "version": "2.3.0", 1283 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1284 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1285 | "dev": true 1286 | }, 1287 | "process-nextick-args": { 1288 | "version": "2.0.0", 1289 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1290 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1291 | "dev": true 1292 | }, 1293 | "punycode": { 1294 | "version": "1.4.1", 1295 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1296 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1297 | "dev": true 1298 | }, 1299 | "qs": { 1300 | "version": "6.5.2", 1301 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1302 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1303 | "dev": true 1304 | }, 1305 | "querystring": { 1306 | "version": "0.2.0", 1307 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1308 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 1309 | "dev": true 1310 | }, 1311 | "ramda": { 1312 | "version": "0.24.1", 1313 | "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", 1314 | "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=", 1315 | "dev": true 1316 | }, 1317 | "readable-stream": { 1318 | "version": "2.3.6", 1319 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1320 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1321 | "dev": true, 1322 | "requires": { 1323 | "core-util-is": "~1.0.0", 1324 | "inherits": "~2.0.3", 1325 | "isarray": "~1.0.0", 1326 | "process-nextick-args": "~2.0.0", 1327 | "safe-buffer": "~5.1.1", 1328 | "string_decoder": "~1.1.1", 1329 | "util-deprecate": "~1.0.1" 1330 | } 1331 | }, 1332 | "regenerator-runtime": { 1333 | "version": "0.11.1", 1334 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 1335 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", 1336 | "dev": true 1337 | }, 1338 | "repeating": { 1339 | "version": "2.0.1", 1340 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1341 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 1342 | "dev": true, 1343 | "requires": { 1344 | "is-finite": "^1.0.0" 1345 | } 1346 | }, 1347 | "request": { 1348 | "version": "2.87.0", 1349 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 1350 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 1351 | "dev": true, 1352 | "requires": { 1353 | "aws-sign2": "~0.7.0", 1354 | "aws4": "^1.6.0", 1355 | "caseless": "~0.12.0", 1356 | "combined-stream": "~1.0.5", 1357 | "extend": "~3.0.1", 1358 | "forever-agent": "~0.6.1", 1359 | "form-data": "~2.3.1", 1360 | "har-validator": "~5.0.3", 1361 | "http-signature": "~1.2.0", 1362 | "is-typedarray": "~1.0.0", 1363 | "isstream": "~0.1.2", 1364 | "json-stringify-safe": "~5.0.1", 1365 | "mime-types": "~2.1.17", 1366 | "oauth-sign": "~0.8.2", 1367 | "performance-now": "^2.1.0", 1368 | "qs": "~6.5.1", 1369 | "safe-buffer": "^5.1.1", 1370 | "tough-cookie": "~2.3.3", 1371 | "tunnel-agent": "^0.6.0", 1372 | "uuid": "^3.1.0" 1373 | } 1374 | }, 1375 | "request-progress": { 1376 | "version": "0.3.1", 1377 | "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", 1378 | "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", 1379 | "dev": true, 1380 | "requires": { 1381 | "throttleit": "~0.0.2" 1382 | } 1383 | }, 1384 | "restore-cursor": { 1385 | "version": "1.0.1", 1386 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", 1387 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", 1388 | "dev": true, 1389 | "requires": { 1390 | "exit-hook": "^1.0.0", 1391 | "onetime": "^1.0.0" 1392 | } 1393 | }, 1394 | "rxjs": { 1395 | "version": "5.5.12", 1396 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", 1397 | "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", 1398 | "dev": true, 1399 | "requires": { 1400 | "symbol-observable": "1.0.1" 1401 | } 1402 | }, 1403 | "safe-buffer": { 1404 | "version": "5.1.2", 1405 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1406 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1407 | "dev": true 1408 | }, 1409 | "safer-buffer": { 1410 | "version": "2.1.2", 1411 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1412 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1413 | "dev": true 1414 | }, 1415 | "semver": { 1416 | "version": "5.6.0", 1417 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 1418 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 1419 | "dev": true 1420 | }, 1421 | "shebang-command": { 1422 | "version": "1.2.0", 1423 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1424 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1425 | "dev": true, 1426 | "requires": { 1427 | "shebang-regex": "^1.0.0" 1428 | } 1429 | }, 1430 | "shebang-regex": { 1431 | "version": "1.0.0", 1432 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1433 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1434 | "dev": true 1435 | }, 1436 | "signal-exit": { 1437 | "version": "3.0.2", 1438 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1439 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1440 | "dev": true 1441 | }, 1442 | "slice-ansi": { 1443 | "version": "0.0.4", 1444 | "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", 1445 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", 1446 | "dev": true 1447 | }, 1448 | "sshpk": { 1449 | "version": "1.16.0", 1450 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", 1451 | "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", 1452 | "dev": true, 1453 | "requires": { 1454 | "asn1": "~0.2.3", 1455 | "assert-plus": "^1.0.0", 1456 | "bcrypt-pbkdf": "^1.0.0", 1457 | "dashdash": "^1.12.0", 1458 | "ecc-jsbn": "~0.1.1", 1459 | "getpass": "^0.1.1", 1460 | "jsbn": "~0.1.0", 1461 | "safer-buffer": "^2.0.2", 1462 | "tweetnacl": "~0.14.0" 1463 | } 1464 | }, 1465 | "stream-to-observable": { 1466 | "version": "0.1.0", 1467 | "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", 1468 | "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", 1469 | "dev": true 1470 | }, 1471 | "string-width": { 1472 | "version": "1.0.2", 1473 | "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1474 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1475 | "dev": true, 1476 | "requires": { 1477 | "code-point-at": "^1.0.0", 1478 | "is-fullwidth-code-point": "^1.0.0", 1479 | "strip-ansi": "^3.0.0" 1480 | } 1481 | }, 1482 | "string_decoder": { 1483 | "version": "1.1.1", 1484 | "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1485 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1486 | "dev": true, 1487 | "requires": { 1488 | "safe-buffer": "~5.1.0" 1489 | } 1490 | }, 1491 | "strip-ansi": { 1492 | "version": "3.0.1", 1493 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1494 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1495 | "dev": true, 1496 | "requires": { 1497 | "ansi-regex": "^2.0.0" 1498 | } 1499 | }, 1500 | "strip-eof": { 1501 | "version": "1.0.0", 1502 | "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 1503 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 1504 | "dev": true 1505 | }, 1506 | "supports-color": { 1507 | "version": "5.1.0", 1508 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", 1509 | "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", 1510 | "dev": true, 1511 | "requires": { 1512 | "has-flag": "^2.0.0" 1513 | }, 1514 | "dependencies": { 1515 | "has-flag": { 1516 | "version": "2.0.0", 1517 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1518 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1519 | "dev": true 1520 | } 1521 | } 1522 | }, 1523 | "symbol-observable": { 1524 | "version": "1.0.1", 1525 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", 1526 | "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", 1527 | "dev": true 1528 | }, 1529 | "throttleit": { 1530 | "version": "0.0.2", 1531 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 1532 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", 1533 | "dev": true 1534 | }, 1535 | "tmp": { 1536 | "version": "0.0.31", 1537 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", 1538 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", 1539 | "dev": true, 1540 | "requires": { 1541 | "os-tmpdir": "~1.0.1" 1542 | } 1543 | }, 1544 | "tough-cookie": { 1545 | "version": "2.3.4", 1546 | "resolved": "http://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1547 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1548 | "dev": true, 1549 | "requires": { 1550 | "punycode": "^1.4.1" 1551 | } 1552 | }, 1553 | "tunnel-agent": { 1554 | "version": "0.6.0", 1555 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1556 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1557 | "dev": true, 1558 | "requires": { 1559 | "safe-buffer": "^5.0.1" 1560 | } 1561 | }, 1562 | "tweetnacl": { 1563 | "version": "0.14.5", 1564 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1565 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1566 | "dev": true 1567 | }, 1568 | "typedarray": { 1569 | "version": "0.0.6", 1570 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1571 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1572 | "dev": true 1573 | }, 1574 | "universalify": { 1575 | "version": "0.1.2", 1576 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1577 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1578 | "dev": true 1579 | }, 1580 | "url": { 1581 | "version": "0.11.0", 1582 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1583 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1584 | "dev": true, 1585 | "requires": { 1586 | "punycode": "1.3.2", 1587 | "querystring": "0.2.0" 1588 | }, 1589 | "dependencies": { 1590 | "punycode": { 1591 | "version": "1.3.2", 1592 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1593 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 1594 | "dev": true 1595 | } 1596 | } 1597 | }, 1598 | "util-deprecate": { 1599 | "version": "1.0.2", 1600 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1601 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1602 | "dev": true 1603 | }, 1604 | "uuid": { 1605 | "version": "3.3.2", 1606 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1607 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 1608 | "dev": true 1609 | }, 1610 | "verror": { 1611 | "version": "1.10.0", 1612 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1613 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1614 | "dev": true, 1615 | "requires": { 1616 | "assert-plus": "^1.0.0", 1617 | "core-util-is": "1.0.2", 1618 | "extsprintf": "^1.2.0" 1619 | } 1620 | }, 1621 | "which": { 1622 | "version": "1.3.1", 1623 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1624 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1625 | "dev": true, 1626 | "requires": { 1627 | "isexe": "^2.0.0" 1628 | } 1629 | }, 1630 | "wrappy": { 1631 | "version": "1.0.2", 1632 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1633 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1634 | "dev": true 1635 | }, 1636 | "yauzl": { 1637 | "version": "2.8.0", 1638 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz", 1639 | "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", 1640 | "dev": true, 1641 | "requires": { 1642 | "buffer-crc32": "~0.2.3", 1643 | "fd-slicer": "~1.0.1" 1644 | } 1645 | } 1646 | } 1647 | } 1648 | -------------------------------------------------------------------------------- /tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "e2e-tests-using-docker-cypress-vuejs-golang-postgres", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "test": "npx cypress run", 7 | "open": "npx cypress open" 8 | }, 9 | "author": "Gustavo Henrique", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "cypress": "^3.1.4" 13 | }, 14 | "dependencies": {} 15 | } 16 | -------------------------------------------------------------------------------- /tests/resetdb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "Reseting database..." 3 | psql "${DATABASE_URL}" <