From 348232f4afd1567b381dd2be99ac018c40f648b0 Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Thu, 22 Nov 2018 23:16:41 +0800 Subject: [PATCH 01/15] update file upload size config --- server/crm/src/main/resources/application_dev.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/crm/src/main/resources/application_dev.properties b/server/crm/src/main/resources/application_dev.properties index 6331826..d19e2fc 100644 --- a/server/crm/src/main/resources/application_dev.properties +++ b/server/crm/src/main/resources/application_dev.properties @@ -14,8 +14,8 @@ database.restore-shell=/data/program/mysql-backup/bin/mysql_restore.sh # Shiro shiro.session.validation.scheduler.enabled=true -spring.http.multipart.max-file-size=1024MB -spring.http.multipart.max-request-size=1024MB +spring.servlet.multipart.max-file-size=512MB +spring.servlet.multipart.max-request-size=512MB # File file.base-path=http://127.0.0.1:1217/lm-f/ From 0ab913e0a99430d4bdb152a62f5c7b661dc27187 Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Fri, 23 Nov 2018 22:49:43 +0800 Subject: [PATCH 02/15] add name prefix filter --- .../crm/controller/ApplicationController.java | 12 ++++++++-- .../crm/service/ApplicationService.java | 10 ++++++++- .../support/ApplicationServiceSupport.java | 19 ++++++++++++++++ .../pudonghot/ambition/crm/TestDriver.java | 22 +++++++++++++------ .../crm/mapper/ApplicationMapper.java | 7 ++++++ .../ambition/crm/mapper/ApplicationMapper.xml | 7 ++++++ .../ambition/crm/model/Application.java | 8 ++----- .../templates/customer-application/list.hbs | 10 +++++++-- 8 files changed, 77 insertions(+), 18 deletions(-) diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java index 81d6151..9a78c44 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java @@ -11,9 +11,9 @@ import me.chyxion.tigon.model.ViewModel; import me.chyxion.tigon.model.ListResult; import com.pudonghot.ambition.crm.model.*; import org.apache.commons.lang3.tuple.Pair; +import javax.validation.constraints.NotBlank; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; -import org.hibernate.validator.constraints.NotBlank; import com.pudonghot.ambition.crm.service.UserService; import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.web.bind.annotation.RequestParam; @@ -63,6 +63,8 @@ public class ApplicationController start, limit, strSearch, null, filters, null); result.setAttr("users", userService.listViewModels( new Search().asc(User.EMPLOYEE_ID))); + result.setAttr("namePrefixes", + ((ApplicationService) queryService).listNamePrefixes()); return result; } @@ -167,6 +169,12 @@ public class ApplicationController */ @Override protected Pair> filterCol(final String field) { - return Application.OWNER.equals(field) ? Pair.of(field, String.class) : null; + if (Application.OWNER.equals(field)) { + return Pair.of(field, String.class); + } + if (Application.NAME_PREFIX.equals(field)) { + return Pair.of(field, String.class); + } + return null; } } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java index 5c47523..e141281 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java @@ -1,8 +1,10 @@ package com.pudonghot.ambition.crm.service; +import java.util.Map; +import java.util.List; import javax.validation.Valid; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.Application; -import org.hibernate.validator.constraints.NotBlank; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.model.ApplicationImage; import com.pudonghot.ambition.crm.model.ApplicationAttachment; @@ -61,5 +63,11 @@ public interface ApplicationService * @param form form */ void updateAttachment(@Valid ApplicationAttachmentFormForUpdate form); + + /** + * list name prefixes + * @return name prefixes + */ + List> listNamePrefixes(); } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java index 2334c0c..b7b441d 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java @@ -2,6 +2,7 @@ package com.pudonghot.ambition.crm.service.support; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.ArrayList; import java.io.IOException; import java.io.InputStream; @@ -67,6 +68,7 @@ public class ApplicationServiceSupport final String id = idSeq.get(); final Application application = form.copy(new Application()); application.setId(id); + application.setNamePrefix(namePrefix(application.getName())); final Date now = new Date(); application.setDateUpdated(now); @@ -118,6 +120,7 @@ public class ApplicationServiceSupport else { application.setOwner(updatedBy); } + application.setNamePrefix(namePrefix(application.getName())); return update(application); } @@ -194,6 +197,14 @@ public class ApplicationServiceSupport updateFile(form, attachmentMapper::find, attachmentMapper::listSort, attachmentMapper::update); } + /** + * {@inheritDoc} + */ + @Override + public List> listNamePrefixes() { + return mapper.listNamePrefixes(); + } + /** * {@inheritDoc} */ @@ -359,4 +370,12 @@ public class ApplicationServiceSupport return false; }); } + + private String namePrefix(final String name) { + int i = name.indexOf("-"); + if (i > 0) { + return name.substring(0, i); + } + return null; + } } diff --git a/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java b/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java index 4dd9154..09a8dd5 100644 --- a/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java +++ b/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java @@ -1,17 +1,16 @@ package com.pudonghot.ambition.crm; -import com.pudonghot.ambition.crm.model.ApplicationImage; -import com.pudonghot.ambition.crm.util.AmDateUtil; -import org.apache.commons.lang3.time.DateFormatUtils; -import org.apache.commons.lang3.time.DateUtils; +import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; -import org.joda.time.DateTimeConstants; import org.joda.time.Interval; import org.joda.time.Period; import org.junit.Test; - -import java.text.ParseException; import java.util.Date; +import java.text.ParseException; +import org.joda.time.DateTimeConstants; +import org.apache.commons.lang3.time.DateUtils; +import com.pudonghot.ambition.crm.util.AmDateUtil; +import com.pudonghot.ambition.crm.model.ApplicationImage; /** * @version 0.0.1 @@ -20,6 +19,7 @@ import java.util.Date; * chyxion@163.com
* Sep 1, 2015 2:34:08 PM */ +@Slf4j public class TestDriver { @Test @@ -102,4 +102,12 @@ public class TestDriver { image.setSort(sortOld - 1.5f); System.err.println(image); } + + @Test + public void testNamePrefix() { + String name = "AT-Foo"; + int i = name.indexOf('-'); + log.info("index [{}].", i); + log.info("prefix [{}].", name.substring(0, i)); + } } diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.java index 297fbbd..eb2e9a8 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.java +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.java @@ -1,5 +1,7 @@ package com.pudonghot.ambition.crm.mapper; +import java.util.List; +import java.util.Map; import me.chyxion.tigon.mybatis.BaseMapper; import com.pudonghot.ambition.crm.model.Application; @@ -10,4 +12,9 @@ import com.pudonghot.ambition.crm.model.Application; */ public interface ApplicationMapper extends BaseMapper { + /** + * list name prefixes + * @return name prefixes + */ + List> listNamePrefixes(); } diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml index bb11e73..e2c3f11 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml @@ -39,4 +39,11 @@ + diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Application.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Application.java index 1d8b446..a383b7d 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Application.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Application.java @@ -5,6 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.Transient; +import lombok.experimental.FieldNameConstants; /** * @author Donghuang
@@ -14,15 +15,10 @@ import me.chyxion.tigon.mybatis.Transient; @Getter @Setter @Table("crm_application") +@FieldNameConstants(prefix = "") public class Application extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String NAME = "name"; - public static final String NAME_PREFIX = "name_prefix"; - public static final String CONTENT = "content"; - public static final String OWNER = "owner"; - // Properties private String name; private String namePrefix; diff --git a/web/app/templates/customer-application/list.hbs b/web/app/templates/customer-application/list.hbs index 9c8ed88..f53246c 100644 --- a/web/app/templates/customer-application/list.hbs +++ b/web/app/templates/customer-application/list.hbs @@ -20,7 +20,13 @@ - Name + {{th-filter name='namePrefix' + text='Name' + label='Name Filter' + options=model.namePrefixes + value-field='value' + text-field='text' + }} @@ -40,7 +46,7 @@ Enabled - + Settings From 3f009235437b41119019e58dd922343a49673949 Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Sat, 24 Nov 2018 13:27:31 +0800 Subject: [PATCH 03/15] rename table to attached_file, attached_image --- .../crm/controller/ApplicationController.java | 4 +- .../crm/controller/AuthController.java | 2 +- .../crm/controller/BaseQueryController.java | 2 +- .../crm/controller/HomePageController.java | 2 +- .../crm/controller/UserController.java | 2 +- .../crm/service/ApplicationService.java | 8 +- .../crm/service/CustomerIssueService.java | 2 +- .../crm/service/CustomerPropertyService.java | 2 +- .../ambition/crm/service/CustomerService.java | 2 +- .../CustomerYearToDateSaleService.java | 2 +- .../ambition/crm/service/HomePageService.java | 2 +- .../ambition/crm/service/UserService.java | 2 +- .../ambition/crm/service/WeekGoalService.java | 2 +- .../support/ApplicationServiceSupport.java | 34 ++++---- .../support/CustomerIssueServiceSupport.java | 2 +- .../service/support/UserServiceSupport.java | 2 +- .../pudonghot/ambition/crm/TestDriver.java | 4 +- server/deploy | 27 +++--- .../ambition/file/AmbitionFileApi.java | 2 +- .../pudonghot/ambition/file/ImageTool.java | 2 +- .../pudonghot/ambition/file/DiskFileApi.java | 2 +- server/mapper/pom.xml | 87 ++----------------- .../mapper/ApplicationAttachmentMapper.java | 14 --- .../crm/mapper/ApplicationFileMapper.java | 38 -------- .../crm/mapper/ApplicationImageMapper.java | 14 --- .../ambition/crm/mapper/ApplicationMapper.xml | 24 ++--- .../crm/mapper/AttachedFileMapper.java | 14 +++ ...hmentMapper.xml => AttachedFileMapper.xml} | 11 +-- .../crm/mapper/AttachedImageMapper.java | 14 +++ ...mageMapper.xml => AttachedImageMapper.xml} | 11 +-- .../ambition/crm/mapper/AttachmentMapper.java | 38 ++++++++ ...ionFileMapper.xml => AttachmentMapper.xml} | 12 +-- .../crm/mapper/CustomerIssueMapper.java | 2 +- .../ambition/crm/mapper/CustomerMapper.java | 2 +- .../ambition/crm/mapper/UserMapper.java | 2 +- .../main/resources/codegen/config.properties | 6 -- .../src/main/resources/config_dev.properties | 8 -- ...Test.java => AttachedImageMapperTest.java} | 12 ++- .../ambition/crm/mapper/TestDriver.java | 18 ++++ .../ApplicationAttachmentFormForCreate.java | 2 +- .../form/create/ApplicationFormForCreate.java | 2 +- .../create/ApplicationImageFormForCreate.java | 2 +- .../create/AuthFailedLogFormForCreate.java | 2 +- .../crm/form/create/AuthLogFormForCreate.java | 2 +- .../form/create/CustomerFormForCreate.java | 2 +- .../create/CustomerIssueFormForCreate.java | 2 +- .../create/CustomerPropertyFormForCreate.java | 2 +- .../CustomerYearToDateSaleFormForCreate.java | 2 +- .../form/create/HomePageFormForCreate.java | 2 +- .../crm/form/create/UserFormForCreate.java | 2 +- .../form/update/ApplicationFormForUpdate.java | 2 +- .../update/CustomerIssueFormForUpdate.java | 2 +- .../update/CustomerPropertyFormForUpdate.java | 2 +- .../CustomerYearToDateSaleFormForUpdate.java | 2 +- .../form/update/HomePageFormForUpdate.java | 2 +- .../crm/form/update/UserFormForUpdate.java | 2 +- .../update/UserFormForUpdatePassword.java | 2 +- ...ationAttachment.java => AttachedFile.java} | 4 +- ...plicationImage.java => AttachedImage.java} | 4 +- .../{ApplicationFile.java => Attachment.java} | 12 +-- server/pom.xml | 6 ++ 61 files changed, 218 insertions(+), 280 deletions(-) delete mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.java delete mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.java delete mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.java create mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.java rename server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/{ApplicationAttachmentMapper.xml => AttachedFileMapper.xml} (53%) create mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.java rename server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/{ApplicationImageMapper.xml => AttachedImageMapper.xml} (54%) create mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.java rename server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/{ApplicationFileMapper.xml => AttachmentMapper.xml} (77%) delete mode 100644 server/mapper/src/main/resources/codegen/config.properties delete mode 100644 server/mapper/src/main/resources/config_dev.properties rename server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/{ApplicationImageMapperTest.java => AttachedImageMapperTest.java} (64%) create mode 100644 server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/TestDriver.java rename server/model/src/main/java/com/pudonghot/ambition/crm/model/{ApplicationAttachment.java => AttachedFile.java} (74%) rename server/model/src/main/java/com/pudonghot/ambition/crm/model/{ApplicationImage.java => AttachedImage.java} (76%) rename server/model/src/main/java/com/pudonghot/ambition/crm/model/{ApplicationFile.java => Attachment.java} (54%) diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java index 9a78c44..8cc0ff9 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java @@ -111,7 +111,7 @@ public class ApplicationController } @RequestMapping(value = "/add-image", method = RequestMethod.POST) - public ViewModel addImage( + public ViewModel addImage( @Valid ApplicationImageFormForCreate form) { Assert.state(!form.getImage().isEmpty(), "Image content is empty"); form.setAdmin(getAuthUser().getUser().getData().isAdmin()); @@ -131,7 +131,7 @@ public class ApplicationController } @RequestMapping(value = "/add-attachment", method = RequestMethod.POST) - public ViewModel addAttachment( + public ViewModel addAttachment( @Valid ApplicationAttachmentFormForCreate form) { Assert.state(!form.getAttachment().isEmpty(), "Image content is empty"); form.setAdmin(getAuthUser().getUser().getData().isAdmin()); diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AuthController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AuthController.java index 8297e54..9a133e3 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AuthController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AuthController.java @@ -6,7 +6,7 @@ import me.chyxion.tigon.model.ViewModel; import com.pudonghot.ambition.crm.model.User; import org.springframework.stereotype.Controller; import me.chyxion.tigon.shiro.service.AuthService; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.service.UserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestParam; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/BaseQueryController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/BaseQueryController.java index 24832a4..fc9d128 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/BaseQueryController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/BaseQueryController.java @@ -6,7 +6,7 @@ import me.chyxion.tigon.model.BaseModel; import me.chyxion.tigon.model.ViewModel; import me.chyxion.tigon.model.ListResult; import me.chyxion.tigon.service.BaseQueryService; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/HomePageController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/HomePageController.java index 4754ec4..af2f5f1 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/HomePageController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/HomePageController.java @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Param; import com.pudonghot.ambition.crm.model.User; import com.pudonghot.ambition.crm.model.HomePage; import org.springframework.stereotype.Controller; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.apache.shiro.authz.annotation.RequiresRoles; import com.pudonghot.ambition.crm.service.HomePageService; import org.springframework.web.bind.annotation.RequestParam; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/UserController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/UserController.java index 6b52e89..486071e 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/UserController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/UserController.java @@ -14,7 +14,7 @@ import org.apache.ibatis.annotations.Param; import javax.validation.constraints.NotNull; import com.pudonghot.ambition.crm.model.User; import org.springframework.stereotype.Controller; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.service.UserService; import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.web.bind.annotation.RequestParam; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java index e141281..be2b43e 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java @@ -5,9 +5,9 @@ import java.util.List; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.Application; +import com.pudonghot.ambition.crm.model.AttachedImage; import me.chyxion.tigon.service.BaseCrudByFormService; -import com.pudonghot.ambition.crm.model.ApplicationImage; -import com.pudonghot.ambition.crm.model.ApplicationAttachment; +import com.pudonghot.ambition.crm.model.AttachedFile; import com.pudonghot.ambition.crm.form.update.ApplicationFormForUpdate; import com.pudonghot.ambition.crm.form.create.ApplicationFormForCreate; import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate; @@ -27,7 +27,7 @@ public interface ApplicationService * add image * @param form form */ - ApplicationImage addImage(@Valid ApplicationImageFormForCreate form); + AttachedImage addImage(@Valid ApplicationImageFormForCreate form); /** * remove image @@ -48,7 +48,7 @@ public interface ApplicationService * add attachment * @param form form */ - ApplicationAttachment addAttachment(@Valid ApplicationAttachmentFormForCreate form); + AttachedFile addAttachment(@Valid ApplicationAttachmentFormForCreate form); /** * remove attachment diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerIssueService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerIssueService.java index 1a78bf8..b3a4a38 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerIssueService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerIssueService.java @@ -3,7 +3,7 @@ package com.pudonghot.ambition.crm.service; import java.util.List; import me.chyxion.tigon.model.ViewModel; import javax.validation.constraints.Min; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.CustomerIssue; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.form.create.CustomerIssueFormForCreate; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerPropertyService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerPropertyService.java index 202878d..00bd77a 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerPropertyService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerPropertyService.java @@ -1,7 +1,7 @@ package com.pudonghot.ambition.crm.service; import com.alibaba.fastjson.JSONArray; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.model.CustomerProperty; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerService.java index a9321e9..b24c073 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerService.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.InputStream; import javax.validation.constraints.NotNull; import com.pudonghot.ambition.crm.model.Customer; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.form.create.CustomerFormForCreate; import com.pudonghot.ambition.crm.form.update.CustomerFormForUpdate; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerYearToDateSaleService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerYearToDateSaleService.java index f00b43f..357d92e 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerYearToDateSaleService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/CustomerYearToDateSaleService.java @@ -2,7 +2,7 @@ package com.pudonghot.ambition.crm.service; import java.io.InputStream; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.model.CustomerYearToDateSale; import com.pudonghot.ambition.crm.form.create.CustomerYearToDateSaleFormForCreate; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/HomePageService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/HomePageService.java index 13476e5..9fcbe09 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/HomePageService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/HomePageService.java @@ -2,7 +2,7 @@ package com.pudonghot.ambition.crm.service; import me.chyxion.tigon.model.ViewModel; import com.pudonghot.ambition.crm.model.HomePage; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.form.create.HomePageFormForCreate; import com.pudonghot.ambition.crm.form.update.HomePageFormForUpdate; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/UserService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/UserService.java index d0b709f..3141895 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/UserService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/UserService.java @@ -5,7 +5,7 @@ import javax.validation.Valid; import me.chyxion.tigon.model.ViewModel; import javax.validation.constraints.NotNull; import com.pudonghot.ambition.crm.model.User; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.service.BaseCrudByFormService; import com.pudonghot.ambition.crm.form.create.UserFormForCreate; import com.pudonghot.ambition.crm.form.update.UserFormForUpdate; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/WeekGoalService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/WeekGoalService.java index d3a31ad..b56afb7 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/WeekGoalService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/WeekGoalService.java @@ -11,7 +11,7 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import me.chyxion.tigon.service.BaseCrudService; import com.pudonghot.ambition.crm.model.WeekGoal; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.form.update.WeekGoalFormForUpdate; /** diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java index b7b441d..5227509 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java @@ -46,9 +46,9 @@ public class ApplicationServiceSupport implements ApplicationService { @Autowired - private ApplicationImageMapper imageMapper; + private AttachedImageMapper imageMapper; @Autowired - private ApplicationAttachmentMapper attachmentMapper; + private AttachedFileMapper attachmentMapper; @Autowired private DiskFileApi fileApi; @Autowired @@ -72,8 +72,8 @@ public class ApplicationServiceSupport final Date now = new Date(); application.setDateUpdated(now); - uploadFiles(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy(), ApplicationImage::new, imageMapper::insert); - uploadFiles(id, 1, form.getAttachments(), form.getAttachmentTitles(), form.getCreatedBy(), ApplicationAttachment::new, attachmentMapper::insert); + uploadFiles(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy(), AttachedImage::new, imageMapper::insert); + uploadFiles(id, 1, form.getAttachments(), form.getAttachmentTitles(), form.getCreatedBy(), AttachedFile::new, attachmentMapper::insert); mapper.insert(application); return toViewModel(application); } @@ -130,8 +130,8 @@ public class ApplicationServiceSupport @Override public ViewModel findViewModel(final String id) { final Search search = - new Search(ApplicationImage.APPLICATION_ID, id) - .asc(ApplicationImage.SORT); + new Search(AttachedImage.OWNER_ID, id) + .asc(AttachedImage.SORT); return super.findViewModel(id) .setAttr("images", imageMapper.list(search)) @@ -142,7 +142,7 @@ public class ApplicationServiceSupport * {@inheritDoc} */ @Override - public ApplicationImage addImage(final ApplicationImageFormForCreate form) { + public AttachedImage addImage(final ApplicationImageFormForCreate form) { final String applicationId = form.getApplicationId(); final String createdBy = form.getCreatedBy(); validatePerm(applicationId, createdBy, form.isAdmin()); @@ -151,7 +151,7 @@ public class ApplicationServiceSupport new MultipartFile[] {form.getImage()}, new String[] {form.getNote()}, createdBy, - ApplicationImage::new, + AttachedImage::new, imageMapper::insert).iterator().next(); } @@ -176,7 +176,7 @@ public class ApplicationServiceSupport * {@inheritDoc} */ @Override - public ApplicationAttachment addAttachment(final ApplicationAttachmentFormForCreate form) { + public AttachedFile addAttachment(final ApplicationAttachmentFormForCreate form) { final String applicationId = form.getApplicationId(); final String createdBy = form.getCreatedBy(); validatePerm(applicationId, createdBy, form.isAdmin()); @@ -185,7 +185,7 @@ public class ApplicationServiceSupport new MultipartFile[] {form.getAttachment()}, new String[] {form.getNote()}, createdBy, - ApplicationAttachment::new, + AttachedFile::new, attachmentMapper::insert).iterator().next(); } @@ -227,7 +227,7 @@ public class ApplicationServiceSupport Assert.state(customerApplicationMapper.count( new Search(CustomerApplication.APPLICATION_ID, id)) == 0, "Application [" + id + "] is in using"); - final Search appFileSearch = new Search(ApplicationImage.APPLICATION_ID, id); + final Search appFileSearch = new Search(AttachedImage.OWNER_ID, id); imageMapper.list(appFileSearch).forEach( image -> fileApi.deleteById(image.getFileId())); imageMapper.delete(appFileSearch); @@ -239,7 +239,7 @@ public class ApplicationServiceSupport return app; } - private List uploadFiles( + private List uploadFiles( final String applicationId, int sort, final MultipartFile[] files, @@ -266,7 +266,7 @@ public class ApplicationServiceSupport FilenameUtils.getExtension(originalFilename), originalFilename); appFile.setId(fileId); - appFile.setApplicationId(applicationId); + appFile.setOwnerId(applicationId); appFile.setFileId(fileInfo.getId()); appFile.setUrl(fileInfo.getUrl()); appFile.setSort(sort++); @@ -291,7 +291,7 @@ public class ApplicationServiceSupport return appFiles; } - private void updateFile( + private void updateFile( final ApplicationFileFormForUpdate form, final Function finder, final Function> listSort, @@ -300,7 +300,7 @@ public class ApplicationServiceSupport final String id = form.getId(); final T appImage = finder.apply(id); Assert.state(appImage != null, "No application file [" + id + "] found"); - final String applicationId = appImage.getApplicationId(); + final String applicationId = appImage.getOwnerId(); final String updatedBy = form.getUpdatedBy(); validatePerm(applicationId, updatedBy, form.isAdmin()); @@ -326,7 +326,7 @@ public class ApplicationServiceSupport } } - private void removeFile( + private void removeFile( final String id, final String userId, final boolean admin, @@ -335,7 +335,7 @@ public class ApplicationServiceSupport final Function sortUpdater) { final T appFile = finder.apply(id); Assert.state(appFile != null, "No application file [" + id + "] found"); - final String applicationId = appFile.getApplicationId(); + final String applicationId = appFile.getOwnerId(); validatePerm(applicationId, userId, admin); fileApi.delete(fileFolder(applicationId) + "/" + id); deleter.apply(id); diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerIssueServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerIssueServiceSupport.java index 7669d37..49c9384 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerIssueServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerIssueServiceSupport.java @@ -7,7 +7,7 @@ import javax.validation.constraints.Min; import me.chyxion.tigon.model.ViewModel; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.CustomerIssue; import com.pudonghot.ambition.crm.service.UserService; import com.pudonghot.ambition.crm.mapper.CustomerIssueMapper; diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/UserServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/UserServiceSupport.java index f9200f0..cb13005 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/UserServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/UserServiceSupport.java @@ -8,7 +8,7 @@ import org.apache.commons.lang3.StringUtils; import com.pudonghot.ambition.crm.model.User; import org.springframework.stereotype.Service; import com.pudonghot.ambition.crm.util.Sha512Utils; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.mapper.UserMapper; import com.pudonghot.ambition.crm.service.UserService; import com.pudonghot.ambition.crm.form.create.UserFormForCreate; diff --git a/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java b/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java index 09a8dd5..ab281b0 100644 --- a/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java +++ b/server/crm/src/test/java/com/pudonghot/ambition/crm/TestDriver.java @@ -1,5 +1,6 @@ package com.pudonghot.ambition.crm; +import com.pudonghot.ambition.crm.model.AttachedImage; import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; import org.joda.time.Interval; @@ -10,7 +11,6 @@ import java.text.ParseException; import org.joda.time.DateTimeConstants; import org.apache.commons.lang3.time.DateUtils; import com.pudonghot.ambition.crm.util.AmDateUtil; -import com.pudonghot.ambition.crm.model.ApplicationImage; /** * @version 0.0.1 @@ -96,7 +96,7 @@ public class TestDriver { @Test public void testFloat() { - ApplicationImage image = new ApplicationImage(); + AttachedImage image = new AttachedImage(); image.setUrl("http://www.image.com"); int sortOld = 2; image.setSort(sortOld - 1.5f); diff --git a/server/deploy b/server/deploy index 1bbb898..4f08f9b 100755 --- a/server/deploy +++ b/server/deploy @@ -12,10 +12,17 @@ get_real_path() { f=`dirname "$f"`/"$link" fi done - eval "$2"="'$f'" + echo "$f" } -get_real_path "$0" prg_path +if [ "$1" = "prod" ]; then + SERVER=lemo@116.62.189.211 +else + echo "Profile required." + exit 1 +fi + +prg_path=$(get_real_path "$0") echo "Script Path [$prg_path]" PROJECT_HOME=$(dirname $prg_path) echo "Project Home [$PROJECT_HOME]" @@ -23,18 +30,7 @@ cd "$PROJECT_HOME" mvn clean package -o -pl crm -am -DskipTests -Ptest SERVICE_HOME=/data/program/lemo-crm -echo "Service Home [$SERVICE_HOME]" -# SERVER=ambition@101.236.35.13 -# SERVER=root@116.62.189.211 - -if [ "$1" = "prod" ]; then - SERVER=lemo@116.62.189.211 -else - SERVER=ambition@101.236.35.13 -fi - -echo "$SERVER $SERVICE_HOME/bin/stop.sh" -ssh "$SERVER" "$SERVICE_HOME/bin/stop.sh" +echo "Service Home [$SERVICE_HOME], Server [$SERVER]" echo "$SERVER [ -f $SERVICE_HOME/lib/main.jar ] && mv $SERVICE_HOME/lib/main.jar $SERVICE_HOME/main_prev.jar" ssh "$SERVER" "[ -f $SERVICE_HOME/lib/main.jar ] && mv $SERVICE_HOME/lib/main.jar $SERVICE_HOME/main_prev.jar" @@ -42,6 +38,9 @@ ssh "$SERVER" "[ -f $SERVICE_HOME/lib/main.jar ] && mv $SERVICE_HOME/lib/main.ja echo "$PROJECT_HOME/crm/target/ambition-crm.jar $SERVER:$SERVICE_HOME/lib/main.jar" scp "$PROJECT_HOME/crm/target/ambition-crm.jar" "$SERVER:$SERVICE_HOME/lib/main.jar" +echo "$SERVER $SERVICE_HOME/bin/stop.sh" +ssh "$SERVER" "$SERVICE_HOME/bin/stop.sh" + echo "$SERVER $SERVICE_HOME/bin/start.sh" ssh "$SERVER" "$SERVICE_HOME/bin/start.sh" diff --git a/server/file-api/src/main/java/com/pudonghot/ambition/file/AmbitionFileApi.java b/server/file-api/src/main/java/com/pudonghot/ambition/file/AmbitionFileApi.java index 42ee7bb..b5df097 100644 --- a/server/file-api/src/main/java/com/pudonghot/ambition/file/AmbitionFileApi.java +++ b/server/file-api/src/main/java/com/pudonghot/ambition/file/AmbitionFileApi.java @@ -5,7 +5,7 @@ import java.util.List; import java.io.InputStream; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.springframework.validation.annotation.Validated; /** diff --git a/server/file-api/src/main/java/com/pudonghot/ambition/file/ImageTool.java b/server/file-api/src/main/java/com/pudonghot/ambition/file/ImageTool.java index 3dac987..7ce0c6f 100644 --- a/server/file-api/src/main/java/com/pudonghot/ambition/file/ImageTool.java +++ b/server/file-api/src/main/java/com/pudonghot/ambition/file/ImageTool.java @@ -6,7 +6,7 @@ import java.io.InputStream; import java.util.Collection; import java.awt.image.BufferedImage; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.springframework.validation.annotation.Validated; /** diff --git a/server/file-disk/src/main/java/com/pudonghot/ambition/file/DiskFileApi.java b/server/file-disk/src/main/java/com/pudonghot/ambition/file/DiskFileApi.java index 6c6675a..fa24be7 100644 --- a/server/file-disk/src/main/java/com/pudonghot/ambition/file/DiskFileApi.java +++ b/server/file-disk/src/main/java/com/pudonghot/ambition/file/DiskFileApi.java @@ -1,7 +1,7 @@ package com.pudonghot.ambition.file; import com.pudonghot.ambition.crm.model.FileInfo; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import java.io.File; diff --git a/server/mapper/pom.xml b/server/mapper/pom.xml index 6320587..76256e7 100644 --- a/server/mapper/pom.xml +++ b/server/mapper/pom.xml @@ -6,11 +6,7 @@ 4.0.0 crm-mapper Ambition Mapper - ${packaging} - - - jar - + jar com.pudonghot.ambition @@ -20,11 +16,6 @@ - - javax.servlet - javax.servlet-api - provided - com.pudonghot.ambition crm-model @@ -54,11 +45,6 @@ - - javax.el - javax.el-api - test - org.springframework spring-test @@ -69,35 +55,19 @@ junit test + + org.springframework.boot + spring-boot-starter-log4j2 + test + org.aspectj aspectjrt - 1.8.0 - true + test org.aspectj aspectjweaver - true - - - cglib - cglib - test - - - org.apache.logging.log4j - log4j-slf4j-impl - test - - - org.apache.logging.log4j - log4j-core - test - - - org.slf4j - jcl-over-slf4j test @@ -123,49 +93,6 @@ true - - war - 8088 - ${project.basedir}/.log - DEBUG - - - - ]]> - - - - - me.chyxion.tigon - tigon-codegen - - - me.chyxion.tigon - tigon-props-config - - - me.chyxion.tigon - tigon-web - - - org.apache.logging.log4j - log4j-slf4j-impl - - - org.apache.logging.log4j - log4j-core - - - - - - - org.apache.tomcat.maven - tomcat7-maven-plugin - - - dep diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.java deleted file mode 100644 index 0c360f8..0000000 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.pudonghot.ambition.crm.mapper; - -import me.chyxion.tigon.mybatis.BaseMapper; -import com.pudonghot.ambition.crm.model.ApplicationAttachment; - -/** - * @author Shaun Chyxion
- * chyxion@163.com
- * Mar 11, 2018 11:39:49 - */ -public interface ApplicationAttachmentMapper - extends ApplicationFileMapper, - BaseMapper { -} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.java deleted file mode 100644 index 3b75811..0000000 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.pudonghot.ambition.crm.mapper; - -import java.util.List; -import org.apache.ibatis.annotations.Param; -import org.hibernate.validator.constraints.NotBlank; -import com.pudonghot.ambition.crm.model.ApplicationFile; - -/** - * @author Shaun Chyxion
- * chyxion@163.com
- * Mar 11, 2018 11:39:49 - */ -interface ApplicationFileMapper { - - /** - * find next sort - * @param applicationId application id - * @return next sort - */ - int nextSort(@NotBlank @Param("applicationId") String applicationId); - - /** - * update sort - * @param applicationId application id - * @return effected rows - */ - int updateSort(@NotBlank @Param("applicationId") String applicationId); - - /** - * list application files - * @param applicationId - * @return images - */ - List listSort( - @NotBlank - @Param("applicationId") - String applicationId); -} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.java deleted file mode 100644 index a807e36..0000000 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.pudonghot.ambition.crm.mapper; - -import me.chyxion.tigon.mybatis.BaseMapper; -import com.pudonghot.ambition.crm.model.ApplicationImage; - -/** - * @author Shaun Chyxion
- * chyxion@163.com
- * Mar 11, 2018 11:39:49 - */ -public interface ApplicationImageMapper - extends ApplicationFileMapper, - BaseMapper { -} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml index e2c3f11..57187ef 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml @@ -15,24 +15,24 @@ select , (select group_concat(url order by sort separator 0x1d) from - crm_application_image - where application_id = a.id - group by application_id) images, + crm_attached_image + where owner_id = a.id + group by owner_id) images, (select group_concat(note order by sort separator 0x1d) from - crm_application_image - where application_id = a.id - group by application_id) image_titles, + crm_attached_image + where owner_id = a.id + group by owner_id) image_titles, (select group_concat(url order by sort separator 0x1d) from - crm_application_attachment - where application_id = a.id - group by application_id) attachments, + crm_attached_file + where owner_id = a.id + group by owner_id) attachments, (select group_concat(note order by sort separator 0x1d) from - crm_application_attachment - where application_id = a.id - group by application_id) attachment_titles + crm_attached_file + where owner_id = a.id + group by owner_id) attachment_titles from a diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.java new file mode 100644 index 0000000..a3c98a6 --- /dev/null +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.java @@ -0,0 +1,14 @@ +package com.pudonghot.ambition.crm.mapper; + +import me.chyxion.tigon.mybatis.BaseMapper; +import com.pudonghot.ambition.crm.model.AttachedFile; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Mar 11, 2018 11:39:49 + */ +public interface AttachedFileMapper + extends AttachmentMapper, + BaseMapper { +} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.xml similarity index 53% rename from server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.xml rename to server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.xml index 7883827..3879014 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationAttachmentMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedFileMapper.xml @@ -9,17 +9,18 @@ - + - + - + + diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.java new file mode 100644 index 0000000..2b301ff --- /dev/null +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.java @@ -0,0 +1,14 @@ +package com.pudonghot.ambition.crm.mapper; + +import me.chyxion.tigon.mybatis.BaseMapper; +import com.pudonghot.ambition.crm.model.AttachedImage; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Mar 11, 2018 11:39:49 + */ +public interface AttachedImageMapper + extends AttachmentMapper, + BaseMapper { +} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.xml similarity index 54% rename from server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.xml rename to server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.xml index e8c0ff5..2f1959a 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapper.xml @@ -9,17 +9,18 @@ - + - + - + + diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.java new file mode 100644 index 0000000..edc2e32 --- /dev/null +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.java @@ -0,0 +1,38 @@ +package com.pudonghot.ambition.crm.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import javax.validation.constraints.NotBlank; +import com.pudonghot.ambition.crm.model.Attachment; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Mar 11, 2018 11:39:49 + */ +interface AttachmentMapper { + + /** + * find next sort + * @param ownerId owner id + * @return next sort + */ + int nextSort(@NotBlank @Param("ownerId") String ownerId); + + /** + * update sort + * @param ownerId owner id + * @return effected rows + */ + int updateSort(@NotBlank @Param("ownerId") String ownerId); + + /** + * list owner attachments + * @param ownerId owner id + * @return attachments + */ + List listSort( + @NotBlank + @Param("ownerId") + String ownerId); +} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.xml similarity index 77% rename from server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.xml rename to server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.xml index 8d6a876..aa07764 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationFileMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/AttachmentMapper.xml @@ -9,12 +9,12 @@ - + - select if (application_id, max(sort) + 1, 1) + select if (owner_id, max(sort) + 1, 1) from - where application_id = #{applicationId} + where owner_id = #{ownerId} @@ -23,7 +23,7 @@ select id, @cur_row := @cur_row + 1 sort from join (select @cur_row := 0) r - where application_id = #{applicationId} + where owner_id = #{ownerId} order by .sort) s on a.id = s.id set a.sort = s.sort @@ -31,14 +31,14 @@ select id, file_id, - url, application_id, + url, owner_id, created_by, date_created, updated_by, date_updated, enabled, note, @cur_row := @cur_row + 1 sort from join (select @cur_row := 0) r - where application_id = #{applicationId} + where owner_id = #{ownerId} order by .sort diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerIssueMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerIssueMapper.java index 5342238..df53696 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerIssueMapper.java +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerIssueMapper.java @@ -4,7 +4,7 @@ import java.util.List; import javax.validation.constraints.Min; import me.chyxion.tigon.mybatis.BaseMapper; import org.apache.ibatis.annotations.Param; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.CustomerIssue; /** diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.java index baeb0ad..716b6d7 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.java +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/CustomerMapper.java @@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Param; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import com.pudonghot.ambition.crm.model.Customer; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/UserMapper.java b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/UserMapper.java index ad56321..e5eb8d7 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/UserMapper.java +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/UserMapper.java @@ -4,7 +4,7 @@ import java.util.List; import me.chyxion.tigon.mybatis.BaseMapper; import org.apache.ibatis.annotations.Param; import com.pudonghot.ambition.crm.model.User; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/mapper/src/main/resources/codegen/config.properties b/server/mapper/src/main/resources/codegen/config.properties deleted file mode 100644 index 59f65ad..0000000 --- a/server/mapper/src/main/resources/codegen/config.properties +++ /dev/null @@ -1,6 +0,0 @@ -# CodeGen Config -base.cols=enabled,note,date_created,date_updated,created_by,updated_by -base.package=com.pudonghot.ambition.crm -super.base.model.name=M3 -super.base.model.full.name=me.chyxion.tigon.model.M3 -table.prefix=crm diff --git a/server/mapper/src/main/resources/config_dev.properties b/server/mapper/src/main/resources/config_dev.properties deleted file mode 100644 index 0ecab35..0000000 --- a/server/mapper/src/main/resources/config_dev.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Config Dev - -# Database -datasource.host=127.0.0.1 -datasource.port=63306 -datasource.database-name=ambition_crm_test -datasource.username=root -datasource.password=696@2^~)oZ@^#*Q diff --git a/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapperTest.java b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapperTest.java similarity index 64% rename from server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapperTest.java rename to server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapperTest.java index 66276d2..f4ea89d 100644 --- a/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/ApplicationImageMapperTest.java +++ b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/AttachedImageMapperTest.java @@ -4,7 +4,7 @@ import org.junit.Test; import java.util.List; import org.junit.runner.RunWith; import lombok.extern.slf4j.Slf4j; -import com.pudonghot.ambition.crm.model.ApplicationImage; +import com.pudonghot.ambition.crm.model.AttachedImage; import org.springframework.test.context.ContextConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -19,14 +19,18 @@ import org.springframework.test.context.junit4.AbstractTransactionalJUnit4Spring @Slf4j @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:spring/spring-*.xml") -public class ApplicationImageMapperTest extends AbstractTransactionalJUnit4SpringContextTests { +public class AttachedImageMapperTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired - private ApplicationImageMapper mapper; + private AttachedImageMapper mapper; + @Autowired + private AttachedFileMapper fileMapper; @Test public void testListSort() { - final List images = + final List images = mapper.listSort("5aadc3be13987ee957e00caf"); log.info("Images: [{}].", images); + log.info("Next attached file sort: [{}].", fileMapper.nextSort("5aadc3be13987ee957e00caf")); + log.info("Next attached image sort: [{}].", mapper.nextSort("5aadc3be13987ee957e00caf")); } } diff --git a/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/TestDriver.java b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/TestDriver.java new file mode 100644 index 0000000..a98d081 --- /dev/null +++ b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/TestDriver.java @@ -0,0 +1,18 @@ +package com.pudonghot.ambition.crm.mapper; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Nov 24, 2018 12:44:25 + */ +@Slf4j +public class TestDriver { + + @Test + public void run() { + log.info("Run."); + } +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java index 4508f5c..1de99f7 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationFormForCreate.java index 6f6f621..cc40e95 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import me.chyxion.tigon.format.annotation.Trim; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.format.annotation.EmptyToNull; import org.springframework.web.multipart.MultipartFile; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationImageFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationImageFormForCreate.java index 368bae5..3a77f08 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationImageFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationImageFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthFailedLogFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthFailedLogFormForCreate.java index 8d225a6..535e810 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthFailedLogFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthFailedLogFormForCreate.java @@ -3,7 +3,7 @@ package com.pudonghot.ambition.crm.form.create; import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.BaseForm; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthLogFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthLogFormForCreate.java index 72d8b1b..3e619a0 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthLogFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/AuthLogFormForCreate.java @@ -3,7 +3,7 @@ package com.pudonghot.ambition.crm.form.create; import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerFormForCreate.java index c0a10cd..91a95d5 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.format.annotation.EmptyToNull; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerIssueFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerIssueFormForCreate.java index 628a205..dc96f56 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerIssueFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerIssueFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerPropertyFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerPropertyFormForCreate.java index d4fd04b..6615d22 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerPropertyFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerPropertyFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import com.pudonghot.ambition.crm.model.CustomerProperty; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerYearToDateSaleFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerYearToDateSaleFormForCreate.java index 68dc1de..4c87983 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerYearToDateSaleFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/CustomerYearToDateSaleFormForCreate.java @@ -5,7 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.form.FC2; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/HomePageFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/HomePageFormForCreate.java index 0c3ab76..3094ce1 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/HomePageFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/HomePageFormForCreate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FC2; import me.chyxion.tigon.format.annotation.Trim; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/UserFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/UserFormForCreate.java index f75512e..4472298 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/UserFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/UserFormForCreate.java @@ -7,7 +7,7 @@ import javax.validation.constraints.Pattern; import me.chyxion.tigon.format.annotation.Trim; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import static com.pudonghot.ambition.crm.common.Constants.GENDER_REGEXP; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFormForUpdate.java index efd1cfd..f5548b7 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFormForUpdate.java @@ -3,9 +3,9 @@ package com.pudonghot.ambition.crm.form.update; import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FU2; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.format.annotation.Trim; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; import me.chyxion.tigon.format.annotation.EmptyToNull; /** diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerIssueFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerIssueFormForUpdate.java index a76e821..04b9f7a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerIssueFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerIssueFormForUpdate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FU2; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerPropertyFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerPropertyFormForUpdate.java index 72627ea..0e81658 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerPropertyFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerPropertyFormForUpdate.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FU2; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerYearToDateSaleFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerYearToDateSaleFormForUpdate.java index 0725dde..65de88a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerYearToDateSaleFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/CustomerYearToDateSaleFormForUpdate.java @@ -5,7 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.form.FU2; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/HomePageFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/HomePageFormForUpdate.java index b9e34e5..c2ed0d9 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/HomePageFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/HomePageFormForUpdate.java @@ -3,7 +3,7 @@ package com.pudonghot.ambition.crm.form.update; import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.form.FU2; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdate.java index 1e6dcdd..7653a2d 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdate.java @@ -8,7 +8,7 @@ import javax.validation.constraints.Pattern; import me.chyxion.tigon.format.annotation.Trim; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; import me.chyxion.tigon.format.annotation.EmptyToNull; import static com.pudonghot.ambition.crm.common.Constants.GENDER_REGEXP; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdatePassword.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdatePassword.java index 323f126..f169bc0 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdatePassword.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/UserFormForUpdatePassword.java @@ -3,7 +3,7 @@ package com.pudonghot.ambition.crm.form.update; import lombok.Getter; import lombok.Setter; import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotBlank; /** * @version 0.0.1 diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationAttachment.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedFile.java similarity index 74% rename from server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationAttachment.java rename to server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedFile.java index 7b04be5..19a0790 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationAttachment.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedFile.java @@ -11,7 +11,7 @@ import me.chyxion.tigon.mybatis.Table; */ @Getter @Setter -@Table("crm_application_attachment") -public class ApplicationAttachment extends ApplicationFile { +@Table("crm_attached_file") +public class AttachedFile extends Attachment { private static final long serialVersionUID = 1L; } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationImage.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedImage.java similarity index 76% rename from server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationImage.java rename to server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedImage.java index 74cfd32..a5b7463 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationImage.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AttachedImage.java @@ -11,7 +11,7 @@ import me.chyxion.tigon.mybatis.Table; */ @Getter @Setter -@Table("crm_application_image") -public class ApplicationImage extends ApplicationFile { +@Table("crm_attached_image") +public class AttachedImage extends Attachment { private static final long serialVersionUID = 1L; } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationFile.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Attachment.java similarity index 54% rename from server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationFile.java rename to server/model/src/main/java/com/pudonghot/ambition/crm/model/Attachment.java index 1eaeb8b..cbd001a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ApplicationFile.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Attachment.java @@ -3,6 +3,7 @@ package com.pudonghot.ambition.crm.model; import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; +import lombok.experimental.FieldNameConstants; /** * @author Donghuang
@@ -11,18 +12,13 @@ import me.chyxion.tigon.model.M3; */ @Getter @Setter -public class ApplicationFile extends M3 { +@FieldNameConstants(prefix = "") +public class Attachment extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String FILE_ID = "file_id"; - public static final String URL = "url"; - public static final String APPLICATION_ID = "application_id"; - public static final String SORT = "sort"; - // Properties + private String ownerId; private String fileId; private String url; - private String applicationId; private float sort; } diff --git a/server/pom.xml b/server/pom.xml index 24cd92c..3fa7f83 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -98,6 +98,12 @@ commons-beanutils 1.8.3 + + + commons-logging + commons-logging + + org.jdom From 3b291c04fa776f66b1ea016ec41749e4173d61fe Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Sat, 24 Nov 2018 15:32:40 +0800 Subject: [PATCH 04/15] extract attachment service --- .../ambition/crm/auth/AuthRealmSupport.java | 19 +- .../crm/controller/ApplicationController.java | 12 +- .../controller/LocalProductController.java | 162 +++++++++++++++ .../crm/service/ApplicationService.java | 9 +- .../crm/service/AttachmentService.java | 47 +++++ .../crm/service/LocalProductService.java | 68 ++++++ .../support/ApplicationServiceSupport.java | 171 +++------------ .../support/AttachmentServiceSupport.java | 196 ++++++++++++++++++ .../support/LocalProductServiceSupport.java | 180 ++++++++++++++++ .../ambition/crm/mapper/ApplicationMapper.xml | 26 +-- .../ambition/crm/mapper/AttachmentMapper.xml | 28 +++ .../crm/mapper/LocalProductMapper.java | 20 ++ .../crm/mapper/LocalProductMapper.xml | 25 +++ ...ApplicationAttachedFileFormForCreate.java} | 2 +- ...LocalProductAttachedFileFormForCreate.java | 26 +++ .../create/LocalProductFormForCreate.java | 32 +++ .../LocalProductImageFormForCreate.java | 25 +++ .../ApplicationAttachedFileFormForUpdate.java | 15 ++ .../ApplicationAttachmentFormForUpdate.java | 12 +- .../update/ApplicationImageFormForUpdate.java | 2 +- ...date.java => AttachmentFormForUpdate.java} | 4 +- ...LocalProductAttachedFileFormForUpdate.java | 15 ++ .../LocalProductAttachmentFormForUpdate.java | 15 ++ .../update/LocalProductFormForUpdate.java | 29 +++ .../LocalProductImageFormForUpdate.java | 18 ++ .../ambition/crm/model/LocalProduct.java | 37 ++++ .../pudonghot/ambition/crm/model/User.java | 2 + 27 files changed, 1005 insertions(+), 192 deletions(-) create mode 100644 server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java create mode 100644 server/crm/src/main/java/com/pudonghot/ambition/crm/service/AttachmentService.java create mode 100644 server/crm/src/main/java/com/pudonghot/ambition/crm/service/LocalProductService.java create mode 100644 server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/AttachmentServiceSupport.java create mode 100644 server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/LocalProductServiceSupport.java create mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.java create mode 100644 server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.xml rename server/model/src/main/java/com/pudonghot/ambition/crm/form/create/{ApplicationAttachmentFormForCreate.java => ApplicationAttachedFileFormForCreate.java} (89%) create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductAttachedFileFormForCreate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductImageFormForCreate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachedFileFormForUpdate.java rename server/model/src/main/java/com/pudonghot/ambition/crm/form/update/{ApplicationFileFormForUpdate.java => AttachmentFormForUpdate.java} (70%) create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachedFileFormForUpdate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachmentFormForUpdate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductImageFormForUpdate.java create mode 100644 server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java index 0d44eac..76a434a 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java @@ -1,11 +1,10 @@ package com.pudonghot.ambition.crm.auth; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; +import java.util.*; import me.chyxion.tigon.mybatis.Search; import me.chyxion.tigon.model.ViewModel; import me.chyxion.tigon.shiro.AuthRealm; +import org.apache.commons.lang3.ArrayUtils; import com.pudonghot.ambition.crm.model.User; import org.springframework.stereotype.Service; import me.chyxion.tigon.shiro.model.Credential; @@ -56,8 +55,20 @@ public class AuthRealmSupport extends AuthRealm { new String((char[])password)); } + /** + * {@inheritDoc} + */ + @Override public Collection roles(Object principal) { final User user = userService.find(new Search(User.EMPLOYEE_ID, principal)); - return user.isAdmin() ? Arrays.asList(User.ROLE_ADMIN) : Collections.emptyList(); + final List roles = new ArrayList<>(4); + if (user.isAdmin()) { + roles.add(User.ROLE_ADMIN); + } + final String account = user.getAccount(); + if (ArrayUtils.contains(new String[] {User.ROLE_LELI, User.ROLE_CHYXION}, account)) { + roles.add(account); + } + return roles; } } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java index 8cc0ff9..b708349 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/ApplicationController.java @@ -25,8 +25,8 @@ import com.pudonghot.ambition.crm.form.create.ApplicationFormForCreate; import com.pudonghot.ambition.crm.form.update.ApplicationFormForUpdate; import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate; import com.pudonghot.ambition.crm.form.update.ApplicationImageFormForUpdate; -import com.pudonghot.ambition.crm.form.create.ApplicationAttachmentFormForCreate; -import com.pudonghot.ambition.crm.form.update.ApplicationAttachmentFormForUpdate; +import com.pudonghot.ambition.crm.form.create.ApplicationAttachedFileFormForCreate; +import com.pudonghot.ambition.crm.form.update.ApplicationAttachedFileFormForUpdate; /** * @author Shaun Chyxion
@@ -41,8 +41,8 @@ public class ApplicationController @Autowired private UserService userService; private final List SEARCH_COLS = - Arrays.asList(CustomerProperty.NAME, - CustomerProperty.NOTE); + Arrays.asList(Application.NAME, + Application.NOTE); @RequestMapping("/list") public ListResult> list( @@ -132,7 +132,7 @@ public class ApplicationController @RequestMapping(value = "/add-attachment", method = RequestMethod.POST) public ViewModel addAttachment( - @Valid ApplicationAttachmentFormForCreate form) { + @Valid ApplicationAttachedFileFormForCreate form) { Assert.state(!form.getAttachment().isEmpty(), "Image content is empty"); form.setAdmin(getAuthUser().getUser().getData().isAdmin()); return new ViewModel<>(((ApplicationService) queryService).addAttachment(form)); @@ -145,7 +145,7 @@ public class ApplicationController } @RequestMapping(value = "/update-attachment", method = RequestMethod.POST) - public void updateImage(@Valid ApplicationAttachmentFormForUpdate form) { + public void updateImage(@Valid ApplicationAttachedFileFormForUpdate form) { form.setAdmin(getAuthUser().getUser().getData().isAdmin()); ((ApplicationService) queryService).updateAttachment(form); } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java new file mode 100644 index 0000000..90574df --- /dev/null +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java @@ -0,0 +1,162 @@ +package com.pudonghot.ambition.crm.controller; + +import java.util.List; +import java.util.Arrays; +import javax.validation.Valid; +import org.springframework.util.Assert; +import me.chyxion.tigon.mybatis.Search; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import me.chyxion.tigon.model.ViewModel; +import me.chyxion.tigon.model.ListResult; +import com.pudonghot.ambition.crm.model.*; +import org.apache.commons.lang3.tuple.Pair; +import javax.validation.constraints.NotBlank; +import org.springframework.stereotype.Controller; +import org.apache.shiro.authz.annotation.Logical; +import com.pudonghot.ambition.crm.service.UserService; +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestMethod; +import com.pudonghot.ambition.crm.service.LocalProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import com.pudonghot.ambition.crm.form.create.LocalProductFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductImageFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductImageFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductAttachedFileFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductAttachedFileFormForUpdate; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Jun 23, 2017 21:39:49 + */ +@Controller +@RequestMapping("/local-product") +public class LocalProductController + extends BaseQueryController { + + @Autowired + private UserService userService; + private final List SEARCH_COLS = + Arrays.asList(CustomerProperty.NAME, + CustomerProperty.NOTE); + + @RequestMapping("/list") + public ListResult> list( + @Min(0) + @RequestParam(value = "start", defaultValue = "0") + final int start, + @Min(1) + @Max(2048) + @RequestParam(value = "limit", defaultValue = "16") + final int limit, + @RequestParam(value = "filters", required = false) + final String filters, + @RequestParam(value = "search", required = false) + final String strSearch) { + + final ListResult> result = + listViewModels(new Search().asc(LocalProduct.NAME), + start, limit, strSearch, null, filters, null); + result.setAttr("namePrefixes", + ((LocalProductService) queryService).listNamePrefixes()); + return result; + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/create", method = RequestMethod.POST) + public void create( + @Valid LocalProductFormForCreate form) { + ((LocalProductService) queryService).create(form); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/update", method = RequestMethod.POST) + public void update( + @Valid LocalProductFormForUpdate form) { + ((LocalProductService) queryService).update(form); + } + + /** + * {@inheritDoc} + */ + @Override + public ViewModel find(final String id) { + final ViewModel viewModel = queryService.findViewModel(id); + if (getAuthUser().getUser().getData().isAdmin()) { + viewModel.setAttr("users", userService.listViewModels( + new Search().asc(User.EMPLOYEE_ID))); + } + return viewModel; + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/add-image", method = RequestMethod.POST) + public ViewModel addImage( + @Valid LocalProductImageFormForCreate form) { + Assert.state(!form.getImage().isEmpty(), "Image content is empty"); + return new ViewModel<>(((LocalProductService) queryService).addImage(form)); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/remove-image", method = RequestMethod.POST) + public void removeImage(@NotBlank @RequestParam("id") String id) { + ((LocalProductService) queryService).removeImage(id); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/update-image", method = RequestMethod.POST) + public void updateImage(@Valid LocalProductImageFormForUpdate form) { + ((LocalProductService) queryService).updateImage(form); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/add-attachment", method = RequestMethod.POST) + public ViewModel addAttachment( + @Valid LocalProductAttachedFileFormForCreate form) { + Assert.state(!form.getAttachment().isEmpty(), "Image content is empty"); + return new ViewModel<>(((LocalProductService) queryService).addAttachment(form)); + } + + @RequestMapping(value = "/remove-attachment", method = RequestMethod.POST) + public void removeAttachment(@NotBlank @RequestParam("id") String id) { + ((LocalProductService) queryService).removeAttachment(id); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/update-attachment", method = RequestMethod.POST) + public void updateImage(@Valid LocalProductAttachedFileFormForUpdate form) { + ((LocalProductService) queryService).updateAttachment(form); + } + + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + public void delete(@NotBlank @RequestParam("id") String id) { + ((LocalProductService) queryService).delete(id); + } + + /** + * {@inheritDoc} + */ + @Override + protected List searchCols() { + return SEARCH_COLS; + } + + /** + * {@inheritDoc} + */ + @Override + protected Pair> filterCol(final String field) { + if (LocalProduct.OWNER.equals(field)) { + return Pair.of(field, String.class); + } + if (LocalProduct.NAME_PREFIX.equals(field)) { + return Pair.of(field, String.class); + } + return null; + } +} diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java index be2b43e..af93bce 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/ApplicationService.java @@ -12,8 +12,8 @@ import com.pudonghot.ambition.crm.form.update.ApplicationFormForUpdate; import com.pudonghot.ambition.crm.form.create.ApplicationFormForCreate; import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate; import com.pudonghot.ambition.crm.form.update.ApplicationImageFormForUpdate; -import com.pudonghot.ambition.crm.form.create.ApplicationAttachmentFormForCreate; -import com.pudonghot.ambition.crm.form.update.ApplicationAttachmentFormForUpdate; +import com.pudonghot.ambition.crm.form.create.ApplicationAttachedFileFormForCreate; +import com.pudonghot.ambition.crm.form.update.ApplicationAttachedFileFormForUpdate; /** * @author Shaun Chyxion
@@ -43,12 +43,11 @@ public interface ApplicationService */ void updateImage(@Valid ApplicationImageFormForUpdate form); - /** * add attachment * @param form form */ - AttachedFile addAttachment(@Valid ApplicationAttachmentFormForCreate form); + AttachedFile addAttachment(@Valid ApplicationAttachedFileFormForCreate form); /** * remove attachment @@ -62,7 +61,7 @@ public interface ApplicationService * update attachment * @param form form */ - void updateAttachment(@Valid ApplicationAttachmentFormForUpdate form); + void updateAttachment(@Valid ApplicationAttachedFileFormForUpdate form); /** * list name prefixes diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/AttachmentService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/AttachmentService.java new file mode 100644 index 0000000..3537d7a --- /dev/null +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/AttachmentService.java @@ -0,0 +1,47 @@ +package com.pudonghot.ambition.crm.service; + +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; +import com.pudonghot.ambition.crm.model.Attachment; +import me.chyxion.tigon.model.M2; +import me.chyxion.tigon.mybatis.BaseMapper; +import org.springframework.web.multipart.MultipartFile; +import com.pudonghot.ambition.crm.form.update.AttachmentFormForUpdate; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Jun 23, 2017 21:35:24 + */ +public interface AttachmentService { + + List upload( + String ownerId, + int sort, + MultipartFile[] files, + String[] titles, + String createdBy, + Supplier constructor, + Consumer insert); + + void update( + AttachmentFormForUpdate form, + Function finder, + Function> listSort, + Consumer updater); + + void remove( + String id, + Function finder, + Function deleter, + Function sortUpdater, + Consumer validator); + + > M deleteOwner( + Key id, + BaseMapper mapper, + Consumer validator); +} + diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/LocalProductService.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/LocalProductService.java new file mode 100644 index 0000000..ae4d64b --- /dev/null +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/LocalProductService.java @@ -0,0 +1,68 @@ +package com.pudonghot.ambition.crm.service; + +import java.util.Map; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import com.pudonghot.ambition.crm.model.LocalProduct; +import com.pudonghot.ambition.crm.model.AttachedFile; +import com.pudonghot.ambition.crm.model.AttachedImage; +import me.chyxion.tigon.service.BaseCrudByFormService; +import com.pudonghot.ambition.crm.form.create.LocalProductFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductImageFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductImageFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductAttachedFileFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductAttachedFileFormForUpdate; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Jun 23, 2017 21:35:24 + */ +public interface LocalProductService + extends BaseCrudByFormService { + + /** + * add image + * @param form form + */ + AttachedImage addImage(@Valid LocalProductImageFormForCreate form); + + /** + * remove image + * @param id image id + */ + void removeImage(@NotBlank String id); + + /** + * update image + * @param form form + */ + void updateImage(@Valid LocalProductImageFormForUpdate form); + + /** + * add attachment + * @param form form + */ + AttachedFile addAttachment(@Valid LocalProductAttachedFileFormForCreate form); + + /** + * remove attachment + * @param id attachment id + */ + void removeAttachment(@NotBlank String id); + + /** + * update attachment + * @param form form + */ + void updateAttachment(@Valid LocalProductAttachedFileFormForUpdate form); + + /** + * list name prefixes + * @return name prefixes + */ + List> listNamePrefixes(); +} + diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java index 5227509..3d33e0b 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/ApplicationServiceSupport.java @@ -3,24 +3,19 @@ package com.pudonghot.ambition.crm.service.support; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.ArrayList; -import java.io.IOException; -import java.io.InputStream; import lombok.extern.slf4j.Slf4j; import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Supplier; import me.chyxion.tigon.mybatis.Search; import org.springframework.util.Assert; import me.chyxion.tigon.model.ViewModel; import com.pudonghot.ambition.crm.model.*; -import org.apache.commons.io.FilenameUtils; import com.pudonghot.ambition.crm.mapper.*; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import com.pudonghot.ambition.file.DiskFileApi; import com.pudonghot.ambition.crm.service.UserService; import org.springframework.web.multipart.MultipartFile; +import com.pudonghot.ambition.crm.service.AttachmentService; import com.pudonghot.ambition.crm.service.ApplicationService; import org.springframework.beans.factory.annotation.Autowired; import me.chyxion.tigon.service.support.BaseCrudServiceSupport; @@ -28,11 +23,10 @@ import org.springframework.transaction.annotation.Transactional; import com.pudonghot.ambition.crm.service.CustomerPermissionService; import com.pudonghot.ambition.crm.form.update.ApplicationFormForUpdate; import com.pudonghot.ambition.crm.form.create.ApplicationFormForCreate; -import com.pudonghot.ambition.crm.form.update.ApplicationFileFormForUpdate; import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate; import com.pudonghot.ambition.crm.form.update.ApplicationImageFormForUpdate; -import com.pudonghot.ambition.crm.form.create.ApplicationAttachmentFormForCreate; -import com.pudonghot.ambition.crm.form.update.ApplicationAttachmentFormForUpdate; +import com.pudonghot.ambition.crm.form.create.ApplicationAttachedFileFormForCreate; +import com.pudonghot.ambition.crm.form.update.ApplicationAttachedFileFormForUpdate; /** * @author Shaun Chyxion
@@ -59,6 +53,8 @@ public class ApplicationServiceSupport private UserService userService; @Autowired private CustomerPermissionService customerPermissionService; + @Autowired + private AttachmentService attachmentService; /** * {@inheritDoc} @@ -72,8 +68,8 @@ public class ApplicationServiceSupport final Date now = new Date(); application.setDateUpdated(now); - uploadFiles(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy(), AttachedImage::new, imageMapper::insert); - uploadFiles(id, 1, form.getAttachments(), form.getAttachmentTitles(), form.getCreatedBy(), AttachedFile::new, attachmentMapper::insert); + attachmentService.upload(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy(), AttachedImage::new, imageMapper::insert); + attachmentService.upload(id, 1, form.getAttachments(), form.getAttachmentTitles(), form.getCreatedBy(), AttachedFile::new, attachmentMapper::insert); mapper.insert(application); return toViewModel(application); } @@ -146,7 +142,7 @@ public class ApplicationServiceSupport final String applicationId = form.getApplicationId(); final String createdBy = form.getCreatedBy(); validatePerm(applicationId, createdBy, form.isAdmin()); - return uploadFiles(applicationId, + return attachmentService.upload(applicationId, imageMapper.nextSort(applicationId), new MultipartFile[] {form.getImage()}, new String[] {form.getNote()}, @@ -160,7 +156,7 @@ public class ApplicationServiceSupport */ @Override public void updateImage(final ApplicationImageFormForUpdate form) { - updateFile(form, imageMapper::find, imageMapper::listSort, imageMapper::update); + attachmentService.update(form, imageMapper::find, imageMapper::listSort, imageMapper::update); } /** @@ -169,18 +165,22 @@ public class ApplicationServiceSupport @Override @Transactional(rollbackFor = Throwable.class) public void removeImage(final String id, final String userId, final boolean admin) { - removeFile(id, userId, admin, imageMapper::find, imageMapper::delete, imageMapper::updateSort); + attachmentService.remove(id, + imageMapper::find, + imageMapper::delete, + imageMapper::updateSort, + attachment -> validatePerm(attachment.getOwnerId(), userId, admin)); } /** * {@inheritDoc} */ @Override - public AttachedFile addAttachment(final ApplicationAttachmentFormForCreate form) { + public AttachedFile addAttachment(final ApplicationAttachedFileFormForCreate form) { final String applicationId = form.getApplicationId(); final String createdBy = form.getCreatedBy(); validatePerm(applicationId, createdBy, form.isAdmin()); - return uploadFiles(applicationId, + return attachmentService.upload(applicationId, attachmentMapper.nextSort(applicationId), new MultipartFile[] {form.getAttachment()}, new String[] {form.getNote()}, @@ -193,8 +193,8 @@ public class ApplicationServiceSupport * {@inheritDoc} */ @Override - public void updateAttachment(final ApplicationAttachmentFormForUpdate form) { - updateFile(form, attachmentMapper::find, attachmentMapper::listSort, attachmentMapper::update); + public void updateAttachment(final ApplicationAttachedFileFormForUpdate form) { + attachmentService.update(form, attachmentMapper::find, attachmentMapper::listSort, attachmentMapper::update); } /** @@ -211,7 +211,11 @@ public class ApplicationServiceSupport @Override @Transactional(rollbackFor = Throwable.class) public void removeAttachment(final String id, final String userId, final boolean admin) { - removeFile(id, userId, admin, attachmentMapper::find, attachmentMapper::delete, attachmentMapper::updateSort); + attachmentService.remove(id, + attachmentMapper::find, + attachmentMapper::delete, + attachmentMapper::updateSort, + attachment -> validatePerm(attachment.getOwnerId(), userId, admin)); } /** @@ -220,130 +224,11 @@ public class ApplicationServiceSupport @Override @Transactional(rollbackFor = Throwable.class) public Application delete(final String id) { - log.info("Delete application [{}].", id); - final Application app = find(id); - Assert.state(app != null, "No application [" + id + "] found"); - Assert.state(!app.isEnabled(), "Application [" + id + "] is enabled"); - Assert.state(customerApplicationMapper.count( - new Search(CustomerApplication.APPLICATION_ID, id)) == 0, - "Application [" + id + "] is in using"); - final Search appFileSearch = new Search(AttachedImage.OWNER_ID, id); - imageMapper.list(appFileSearch).forEach( - image -> fileApi.deleteById(image.getFileId())); - imageMapper.delete(appFileSearch); - - attachmentMapper.list(appFileSearch).forEach( - attachment -> fileApi.deleteById(attachment.getFileId())); - attachmentMapper.delete(appFileSearch); - mapper.delete(id); - return app; - } - - private List uploadFiles( - final String applicationId, - int sort, - final MultipartFile[] files, - final String[] titles, - final String createdBy, - Supplier constructor, - Consumer insert) { - - final List appFiles = new ArrayList<>(); - final Date now = new Date(); - final String fileFolder = fileFolder(applicationId); - int i = 0; - for (final MultipartFile file : files) { - if (!file.isEmpty()) { - final String originalFilename = file.getOriginalFilename(); - try (final InputStream ins = file.getInputStream()) { - final String fileId = idSeq.get(); - final T appFile = constructor.get(); - final FileInfo fileInfo = fileApi.upload(ins, - file.getSize(), - fileFolder, - fileId, - file.getContentType(), - FilenameUtils.getExtension(originalFilename), - originalFilename); - appFile.setId(fileId); - appFile.setOwnerId(applicationId); - appFile.setFileId(fileInfo.getId()); - appFile.setUrl(fileInfo.getUrl()); - appFile.setSort(sort++); - appFile.setEnabled(true); - appFile.setNote(StringUtils.defaultIfBlank(titles[i], originalFilename)); - appFile.setCreatedBy(createdBy); - appFile.setDateCreated(now); - // insert - insert.accept(appFile); - appFiles.add(appFile); - } - catch (final IOException e) { - throw new IllegalStateException( - "Read upload file [" + originalFilename + "] error cased", e); - } - } - else { - log.info("Application file [{}] is empty, ignore.", file); - } - ++i; - } - return appFiles; - } - - private void updateFile( - final ApplicationFileFormForUpdate form, - final Function finder, - final Function> listSort, - final Consumer updater) { - - final String id = form.getId(); - final T appImage = finder.apply(id); - Assert.state(appImage != null, "No application file [" + id + "] found"); - final String applicationId = appImage.getOwnerId(); - final String updatedBy = form.getUpdatedBy(); - validatePerm(applicationId, updatedBy, form.isAdmin()); - - boolean sortUpdated = false; - final float sort = form.getSort(); - final float sortOld = appImage.getSort(); - if (sort < sortOld) { - sortUpdated = true; - appImage.setSort(sortOld - 1.5f); - } - else if (sort > sortOld) { - sortUpdated = true; - appImage.setSort(sortOld + 1.5f); - } - appImage.setNote(form.getNote()); - appImage.setDateUpdated(new Date()); - appImage.setUpdatedBy(updatedBy); - - updater.accept(appImage); - - if (sortUpdated) { - listSort.apply(applicationId).forEach(updater); - } - } - - private void removeFile( - final String id, - final String userId, - final boolean admin, - final Function finder, - final Function deleter, - final Function sortUpdater) { - final T appFile = finder.apply(id); - Assert.state(appFile != null, "No application file [" + id + "] found"); - final String applicationId = appFile.getOwnerId(); - validatePerm(applicationId, userId, admin); - fileApi.delete(fileFolder(applicationId) + "/" + id); - deleter.apply(id); - sortUpdater.apply(applicationId); - } - - private String fileFolder(final String appId) { - return "app/" + appId; + return attachmentService.deleteOwner(id, + mapper, application -> + Assert.state(customerApplicationMapper.count( + new Search(CustomerApplication.APPLICATION_ID, id)) == 0, + "Application [" + id + "] is in using")); } private Application validatePerm(final String appId, final String userId, final boolean admin) { diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/AttachmentServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/AttachmentServiceSupport.java new file mode 100644 index 0000000..43551f3 --- /dev/null +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/AttachmentServiceSupport.java @@ -0,0 +1,196 @@ +package com.pudonghot.ambition.crm.service.support; + +import java.util.Date; +import java.util.List; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import lombok.extern.slf4j.Slf4j; +import me.chyxion.tigon.model.M2; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; +import me.chyxion.tigon.mybatis.Search; +import me.chyxion.tigon.sequence.IdSequence; +import org.springframework.util.Assert; +import me.chyxion.tigon.mybatis.BaseMapper; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import com.pudonghot.ambition.file.DiskFileApi; +import com.pudonghot.ambition.crm.model.FileInfo; +import com.pudonghot.ambition.crm.model.Attachment; +import com.pudonghot.ambition.crm.model.AttachedImage; +import org.springframework.web.multipart.MultipartFile; +import com.pudonghot.ambition.crm.service.AttachmentService; +import com.pudonghot.ambition.crm.mapper.AttachedFileMapper; +import com.pudonghot.ambition.crm.mapper.AttachedImageMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import com.pudonghot.ambition.crm.form.update.AttachmentFormForUpdate; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Jun 23, 2017 21:36:31 + */ +@Slf4j +@Service +public class AttachmentServiceSupport + implements AttachmentService { + + @Autowired + private IdSequence idSeq; + @Autowired + private AttachedImageMapper imageMapper; + @Autowired + private AttachedFileMapper attachmentMapper; + @Autowired + private DiskFileApi fileApi; + + /** + * {@inheritDoc} + */ + public List upload( + final String ownerId, + int sort, + final MultipartFile[] files, + final String[] titles, + final String createdBy, + final Supplier constructor, + final Consumer insert) { + + final List appFiles = new ArrayList<>(); + final Date now = new Date(); + final String fileFolder = fileFolder(ownerId); + int i = 0; + for (final MultipartFile file : files) { + if (!file.isEmpty()) { + final String originalFilename = file.getOriginalFilename(); + try (final InputStream ins = file.getInputStream()) { + final String fileId = idSeq.get(); + final T appFile = constructor.get(); + final FileInfo fileInfo = fileApi.upload(ins, + file.getSize(), + fileFolder, + fileId, + file.getContentType(), + FilenameUtils.getExtension(originalFilename), + originalFilename); + appFile.setId(fileId); + appFile.setOwnerId(ownerId); + appFile.setFileId(fileInfo.getId()); + appFile.setUrl(fileInfo.getUrl()); + appFile.setSort(sort++); + appFile.setEnabled(true); + appFile.setNote(StringUtils.defaultIfBlank(titles[i], originalFilename)); + appFile.setCreatedBy(createdBy); + appFile.setDateCreated(now); + // insert + insert.accept(appFile); + appFiles.add(appFile); + } + catch (final IOException e) { + throw new IllegalStateException( + "Read upload file [" + originalFilename + "] error cased", e); + } + } + else { + log.info("LocalProduct file [{}] is empty, ignore.", file); + } + ++i; + } + return appFiles; + } + + /** + * {@inheritDoc} + */ + public void update( + final AttachmentFormForUpdate form, + final Function finder, + final Function> listSort, + final Consumer updater) { + + final String id = form.getId(); + final T appImage = finder.apply(id); + Assert.state(appImage != null, "No local product file [" + id + "] found"); + final String ownerId = appImage.getOwnerId(); + final String updatedBy = form.getUpdatedBy(); + + boolean sortUpdated = false; + final float sort = form.getSort(); + final float sortOld = appImage.getSort(); + if (sort < sortOld) { + sortUpdated = true; + appImage.setSort(sortOld - 1.5f); + } + else if (sort > sortOld) { + sortUpdated = true; + appImage.setSort(sortOld + 1.5f); + } + appImage.setNote(form.getNote()); + appImage.setDateUpdated(new Date()); + appImage.setUpdatedBy(updatedBy); + + updater.accept(appImage); + + if (sortUpdated) { + listSort.apply(ownerId).forEach(updater); + } + } + + /** + * {@inheritDoc} + */ + @Transactional(rollbackFor = Throwable.class) + public void remove( + final String id, + final Function finder, + final Function deleter, + final Function sortUpdater, + final Consumer validator) { + final T attachment = finder.apply(id); + Assert.state(attachment != null, "No file [" + id + "] found"); + if (validator != null) { + validator.accept(attachment); + } + final String ownerId = attachment.getOwnerId(); + fileApi.delete(fileFolder(ownerId) + "/" + id); + deleter.apply(id); + sortUpdater.apply(ownerId); + } + + /** + * {@inheritDoc} + */ + @Transactional(rollbackFor = Throwable.class) + public > M deleteOwner(final Key ownerId, + final BaseMapper mapper, + final Consumer validator) { + + log.info("Delete attachment owner [{}].", ownerId); + final M owner = mapper.find(ownerId); + Assert.state(owner != null, "No attachment owner [" + ownerId + "] found"); + Assert.state(!owner.isEnabled(), "Attachment owner [" + ownerId + "] is enabled"); + + if (validator != null) { + validator.accept(owner); + } + + final Search search = new Search(AttachedImage.OWNER_ID, ownerId); + imageMapper.list(search).forEach( + image -> fileApi.deleteById(image.getFileId())); + imageMapper.delete(search); + + attachmentMapper.list(search).forEach( + attachment -> fileApi.deleteById(attachment.getFileId())); + attachmentMapper.delete(search); + mapper.delete(ownerId); + return owner; + } + + private String fileFolder(final String appId) { + return "app/" + appId; + } +} diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/LocalProductServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/LocalProductServiceSupport.java new file mode 100644 index 0000000..114c6f7 --- /dev/null +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/LocalProductServiceSupport.java @@ -0,0 +1,180 @@ +package com.pudonghot.ambition.crm.service.support; + +import java.util.Map; +import java.util.Date; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import me.chyxion.tigon.mybatis.Search; +import org.springframework.util.Assert; +import me.chyxion.tigon.model.ViewModel; +import com.pudonghot.ambition.crm.model.*; +import com.pudonghot.ambition.crm.mapper.*; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import com.pudonghot.ambition.crm.service.AttachmentService; +import org.springframework.beans.factory.annotation.Autowired; +import com.pudonghot.ambition.crm.service.LocalProductService; +import me.chyxion.tigon.service.support.BaseCrudServiceSupport; +import org.springframework.transaction.annotation.Transactional; +import com.pudonghot.ambition.crm.form.create.LocalProductFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductImageFormForCreate; +import com.pudonghot.ambition.crm.form.update.LocalProductImageFormForUpdate; +import com.pudonghot.ambition.crm.form.update.LocalProductAttachedFileFormForUpdate; +import com.pudonghot.ambition.crm.form.create.LocalProductAttachedFileFormForCreate; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Jun 23, 2017 21:36:31 + */ +@Slf4j +@Service +public class LocalProductServiceSupport + extends BaseCrudServiceSupport + implements LocalProductService { + + @Autowired + private AttachedImageMapper imageMapper; + @Autowired + private AttachedFileMapper attachmentMapper; + @Autowired + private AttachmentService attachmentService; + + /** + * {@inheritDoc} + */ + @Override + public ViewModel create(final LocalProductFormForCreate form) { + final String id = idSeq.get(); + final LocalProduct product = form.copy(new LocalProduct()); + product.setId(id); + product.setNamePrefix(namePrefix(product.getName())); + final Date now = new Date(); + product.setDateUpdated(now); + + attachmentService.upload(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy(), AttachedImage::new, imageMapper::insert); + attachmentService.upload(id, 1, form.getAttachments(), form.getAttachmentTitles(), form.getCreatedBy(), AttachedFile::new, attachmentMapper::insert); + mapper.insert(product); + return toViewModel(product); + } + + /** + * {@inheritDoc} + */ + @Override + public ViewModel update(final LocalProductFormForUpdate form) { + final LocalProduct product = find(form.getId()); + Assert.state(product != null, "No local product found"); + form.copy(product); + product.setNamePrefix(namePrefix(product.getName())); + return update(product); + } + + /** + * {@inheritDoc} + */ + @Override + public ViewModel findViewModel(final String id) { + final Search search = + new Search(AttachedImage.OWNER_ID, id) + .asc(AttachedImage.SORT); + + return super.findViewModel(id) + .setAttr("images", imageMapper.list(search)) + .setAttr("attachments", attachmentMapper.list(search)); + } + + /** + * {@inheritDoc} + */ + @Override + public AttachedImage addImage(final LocalProductImageFormForCreate form) { + final String productId = form.getProductId(); + final String createdBy = form.getCreatedBy(); + return attachmentService.upload(productId, + imageMapper.nextSort(productId), + new MultipartFile[] {form.getImage()}, + new String[] {form.getNote()}, + createdBy, + AttachedImage::new, + imageMapper::insert).iterator().next(); + } + + /** + * {@inheritDoc} + */ + @Override + public void updateImage(final LocalProductImageFormForUpdate form) { + attachmentService.update(form, imageMapper::find, imageMapper::listSort, imageMapper::update); + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional(rollbackFor = Throwable.class) + public void removeImage(final String id) { + attachmentService.remove(id, imageMapper::find, imageMapper::delete, imageMapper::updateSort, null); + } + + /** + * {@inheritDoc} + */ + @Override + public AttachedFile addAttachment(final LocalProductAttachedFileFormForCreate form) { + final String productId = form.getProductId(); + final String createdBy = form.getCreatedBy(); + return attachmentService.upload(productId, + attachmentMapper.nextSort(productId), + new MultipartFile[] {form.getAttachment()}, + new String[] {form.getNote()}, + createdBy, + AttachedFile::new, + attachmentMapper::insert).iterator().next(); + } + + /** + * {@inheritDoc} + */ + @Override + public void updateAttachment(final LocalProductAttachedFileFormForUpdate form) { + attachmentService.update(form, attachmentMapper::find, attachmentMapper::listSort, attachmentMapper::update); + } + + /** + * {@inheritDoc} + */ + @Override + public List> listNamePrefixes() { + return mapper.listNamePrefixes(); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeAttachment(final String id) { + attachmentService.remove(id, + attachmentMapper::find, + attachmentMapper::delete, + attachmentMapper::updateSort, null); + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional(rollbackFor = Throwable.class) + public LocalProduct delete(final String id) { + return attachmentService.deleteOwner(id, mapper, null); + } + + private String namePrefix(final String name) { + int i = name.indexOf("-"); + if (i > 0) { + return name.substring(0, i); + } + return null; + } +} diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml index 57187ef..42287eb 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/ApplicationMapper.xml @@ -12,31 +12,7 @@ + + + + + diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachedFileFormForCreate.java similarity index 89% rename from server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java rename to server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachedFileFormForCreate.java index 1de99f7..54cf460 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachmentFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/ApplicationAttachedFileFormForCreate.java @@ -14,7 +14,7 @@ import org.springframework.web.multipart.MultipartFile; */ @Getter @Setter -public class ApplicationAttachmentFormForCreate extends FC2 { +public class ApplicationAttachedFileFormForCreate extends FC2 { private static final long serialVersionUID = 1L; // Properties diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductAttachedFileFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductAttachedFileFormForCreate.java new file mode 100644 index 0000000..ff6f4d6 --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductAttachedFileFormForCreate.java @@ -0,0 +1,26 @@ +package com.pudonghot.ambition.crm.form.create; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.form.FC2; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author Donghuang
+ * donghuang@wacai.com
+ * May 17, 2018 17:12:56 + */ +@Getter +@Setter +public class LocalProductAttachedFileFormForCreate extends FC2 { + private static final long serialVersionUID = 1L; + + // Properties + @NotBlank + private String productId; + @NotNull + private MultipartFile attachment; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java new file mode 100644 index 0000000..ca1948d --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java @@ -0,0 +1,32 @@ +package com.pudonghot.ambition.crm.form.create; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.form.FC2; +import javax.validation.constraints.NotBlank; +import me.chyxion.tigon.format.annotation.Trim; +import me.chyxion.tigon.format.annotation.EmptyToNull; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Mar 11, 2018 11:14:07 + */ +@Getter +@Setter +public class LocalProductFormForCreate extends FC2 { + private static final long serialVersionUID = 1L; + + // Properties + @Trim + @NotBlank + private String name; + @Trim + @EmptyToNull + private String content; + private String[] imageTitles; + private MultipartFile[] images; + private String[] attachmentTitles; + private MultipartFile[] attachments; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductImageFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductImageFormForCreate.java new file mode 100644 index 0000000..6e6f411 --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductImageFormForCreate.java @@ -0,0 +1,25 @@ +package com.pudonghot.ambition.crm.form.create; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.form.FC2; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Mar 11, 2018 11:14:07 + */ +@Getter +@Setter +public class LocalProductImageFormForCreate extends FC2 { + private static final long serialVersionUID = 1L; + + // Properties + @NotBlank + private String productId; + @NotNull + private MultipartFile image; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachedFileFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachedFileFormForUpdate.java new file mode 100644 index 0000000..1e825dd --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachedFileFormForUpdate.java @@ -0,0 +1,15 @@ +package com.pudonghot.ambition.crm.form.update; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author Donghuang
+ * donghuang@wacai.com
+ * May 17, 2018 17:12:46 + */ +@Getter +@Setter +public class ApplicationAttachedFileFormForUpdate extends ApplicationAttachmentFormForUpdate { + private static final long serialVersionUID = 1L; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachmentFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachmentFormForUpdate.java index 16c5ebb..381a531 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachmentFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationAttachmentFormForUpdate.java @@ -2,14 +2,18 @@ package com.pudonghot.ambition.crm.form.update; import lombok.Getter; import lombok.Setter; +import com.pudonghot.ambition.crm.model.Attachment; /** - * @author Donghuang
- * donghuang@wacai.com
- * May 17, 2018 17:12:46 + * @author Shaun Chyxion
+ * chyxion@163.com
+ * May 17, 2018 17:50:22 */ @Getter @Setter -public class ApplicationAttachmentFormForUpdate extends ApplicationFileFormForUpdate { +public class ApplicationAttachmentFormForUpdate extends AttachmentFormForUpdate { private static final long serialVersionUID = 1L; + + // current user is admin + private boolean admin; } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationImageFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationImageFormForUpdate.java index 4ecbf09..8d484cf 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationImageFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationImageFormForUpdate.java @@ -12,6 +12,6 @@ import lombok.Setter; */ @Getter @Setter -public class ApplicationImageFormForUpdate extends ApplicationFileFormForUpdate { +public class ApplicationImageFormForUpdate extends ApplicationAttachmentFormForUpdate { private static final long serialVersionUID = 1L; } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFileFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/AttachmentFormForUpdate.java similarity index 70% rename from server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFileFormForUpdate.java rename to server/model/src/main/java/com/pudonghot/ambition/crm/form/update/AttachmentFormForUpdate.java index 2c9c36b..92982b3 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/ApplicationFileFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/AttachmentFormForUpdate.java @@ -11,10 +11,8 @@ import me.chyxion.tigon.form.FU2; */ @Getter @Setter -public class ApplicationFileFormForUpdate extends FU2 { +public class AttachmentFormForUpdate extends FU2 { private static final long serialVersionUID = 1L; - // current user is admin - private boolean admin; private float sort; } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachedFileFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachedFileFormForUpdate.java new file mode 100644 index 0000000..c0f0460 --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachedFileFormForUpdate.java @@ -0,0 +1,15 @@ +package com.pudonghot.ambition.crm.form.update; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author Donghuang
+ * donghuang@wacai.com
+ * May 17, 2018 17:12:46 + */ +@Getter +@Setter +public class LocalProductAttachedFileFormForUpdate extends LocalProductAttachmentFormForUpdate { + private static final long serialVersionUID = 1L; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachmentFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachmentFormForUpdate.java new file mode 100644 index 0000000..adc2658 --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductAttachmentFormForUpdate.java @@ -0,0 +1,15 @@ +package com.pudonghot.ambition.crm.form.update; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * May 17, 2018 17:50:22 + */ +@Getter +@Setter +public class LocalProductAttachmentFormForUpdate extends AttachmentFormForUpdate { + private static final long serialVersionUID = 1L; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java new file mode 100644 index 0000000..1dd413b --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java @@ -0,0 +1,29 @@ +package com.pudonghot.ambition.crm.form.update; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.form.FU2; +import javax.validation.constraints.NotBlank; +import me.chyxion.tigon.format.annotation.Trim; +import org.hibernate.validator.constraints.Length; +import me.chyxion.tigon.format.annotation.EmptyToNull; + +/** + * @version 0.0.1 + * @since 0.0.1 + * @author Shaun Chyxion
+ * chyxion@163.com
+ * May 10, 2016 1:42:01 PM + */ +@Getter +@Setter +public class LocalProductFormForUpdate extends FU2 { + private static final long serialVersionUID = 1L; + + @NotBlank + @Length(max = 64) + private String name; + @Trim + @EmptyToNull + private String content; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductImageFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductImageFormForUpdate.java new file mode 100644 index 0000000..9a81ade --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductImageFormForUpdate.java @@ -0,0 +1,18 @@ +package com.pudonghot.ambition.crm.form.update; + +import com.pudonghot.ambition.crm.model.LocalProduct; +import lombok.Getter; +import lombok.Setter; + +/** + * @version 0.0.1 + * @since 0.0.1 + * @author Shaun Chyxion
+ * chyxion@163.com
+ * May 10, 2016 1:42:01 PM + */ +@Getter +@Setter +public class LocalProductImageFormForUpdate extends LocalProductAttachmentFormForUpdate { + private static final long serialVersionUID = 1L; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java new file mode 100644 index 0000000..b1f6183 --- /dev/null +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java @@ -0,0 +1,37 @@ +package com.pudonghot.ambition.crm.model; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.model.M3; +import me.chyxion.tigon.mybatis.Table; +import me.chyxion.tigon.mybatis.Transient; +import lombok.experimental.FieldNameConstants; + +/** + * @author Shaun Chyxion
+ * chyxion@163.com
+ * Nov 24, 2018 13:42:24 + */ +@Getter +@Setter +@Table("crm_local_product") +@FieldNameConstants(prefix = "") +public class LocalProduct extends M3 { + private static final long serialVersionUID = 1L; + + // Properties + private String name; + private String namePrefix; + private String content; + private String owner; + + // Transient Props + @Transient + private String images; + @Transient + private String imageTitles; + @Transient + private String attachments; + @Transient + private String attachmentTitles; +} diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java index 9594f1b..da9012b 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java @@ -22,6 +22,8 @@ public class User extends M3 { // roles public static final String ROLE_ADMIN = "ADMIN"; + public static final String ROLE_LELI = "leli"; + public static final String ROLE_CHYXION = "chyxion"; // Column Names public static final String ACCOUNT = "account"; From 20e191e73a4d3f4b202b1e4c6fdbe4eb1c2a66c1 Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Sat, 24 Nov 2018 17:03:51 +0800 Subject: [PATCH 05/15] add local product --- web/app/helpers/application/admin-or-owner.js | 8 + web/app/helpers/local-product/has-perm.js | 7 + web/app/router.js | 6 + web/app/routes/customer-application/create.js | 1 - web/app/routes/customer-application/edit.js | 1 - web/app/routes/customer-application/list.js | 15 -- web/app/routes/local-product/create.js | 34 ++++ web/app/routes/local-product/edit.js | 122 ++++++++++++ web/app/routes/local-product/list.js | 5 + .../services/customer-application/service.js | 1 - web/app/services/local-product/service.js | 15 ++ .../templates/components/main-container.hbs | 6 + .../templates/customer-application/list.hbs | 18 +- web/app/templates/local-product/create.hbs | 64 ++++++ web/app/templates/local-product/edit.hbs | 185 ++++++++++++++++++ web/app/templates/local-product/list.hbs | 109 +++++++++++ .../application/admin-or-owner-test.js | 17 ++ .../helpers/local-product/has-perm-test.js | 17 ++ .../unit/routes/local-product/create-test.js | 11 ++ .../unit/routes/local-product/edit-test.js | 11 ++ .../unit/routes/local-product/list-test.js | 11 ++ .../services/local-product/service-test.js | 12 ++ 22 files changed, 657 insertions(+), 19 deletions(-) create mode 100644 web/app/helpers/application/admin-or-owner.js create mode 100644 web/app/helpers/local-product/has-perm.js create mode 100644 web/app/routes/local-product/create.js create mode 100644 web/app/routes/local-product/edit.js create mode 100644 web/app/routes/local-product/list.js create mode 100644 web/app/services/local-product/service.js create mode 100644 web/app/templates/local-product/create.hbs create mode 100644 web/app/templates/local-product/edit.hbs create mode 100644 web/app/templates/local-product/list.hbs create mode 100644 web/tests/integration/helpers/application/admin-or-owner-test.js create mode 100644 web/tests/integration/helpers/local-product/has-perm-test.js create mode 100644 web/tests/unit/routes/local-product/create-test.js create mode 100644 web/tests/unit/routes/local-product/edit-test.js create mode 100644 web/tests/unit/routes/local-product/list-test.js create mode 100644 web/tests/unit/services/local-product/service-test.js diff --git a/web/app/helpers/application/admin-or-owner.js b/web/app/helpers/application/admin-or-owner.js new file mode 100644 index 0000000..4d2f4c2 --- /dev/null +++ b/web/app/helpers/application/admin-or-owner.js @@ -0,0 +1,8 @@ +import { helper } from '@ember/component/helper'; + +export function applicationAdminOrOwner(params/*, hash*/) { + const user = params[1]; + return user.admin || params[0].filterBy('owner', user.id).length; +} + +export default helper(applicationAdminOrOwner); diff --git a/web/app/helpers/local-product/has-perm.js b/web/app/helpers/local-product/has-perm.js new file mode 100644 index 0000000..40811a6 --- /dev/null +++ b/web/app/helpers/local-product/has-perm.js @@ -0,0 +1,7 @@ +import { helper } from '@ember/component/helper'; + +export function localProductHasPerm(params/*, hash*/) { + return ['leli', 'chyxion'].includes(params[0].account); +} + +export default helper(localProductHasPerm); diff --git a/web/app/router.js b/web/app/router.js index 2d8e8d4..d6a53e2 100644 --- a/web/app/router.js +++ b/web/app/router.js @@ -74,6 +74,12 @@ Router.map(function() { this.route('create'); this.route('edit', {path: '/:id/edit'}); }); + + this.route('local-product', function() { + this.route('list', {path: '/list/:page'}); + this.route('create'); + this.route('edit', {path: '/:id/edit'}); + }); }); export default Router; diff --git a/web/app/routes/customer-application/create.js b/web/app/routes/customer-application/create.js index d7c75f7..19603ea 100644 --- a/web/app/routes/customer-application/create.js +++ b/web/app/routes/customer-application/create.js @@ -1,4 +1,3 @@ -import Ember from 'ember'; import BaseRoute from '../base'; import EmberObject, { computed } from '@ember/object'; import RSVP from 'rsvp'; diff --git a/web/app/routes/customer-application/edit.js b/web/app/routes/customer-application/edit.js index bd222b6..b670e01 100644 --- a/web/app/routes/customer-application/edit.js +++ b/web/app/routes/customer-application/edit.js @@ -1,4 +1,3 @@ -import Ember from 'ember'; import BaseEditRoute from '../base-edit'; import $ from 'jquery'; diff --git a/web/app/routes/customer-application/list.js b/web/app/routes/customer-application/list.js index a1fdf4f..79d994b 100644 --- a/web/app/routes/customer-application/list.js +++ b/web/app/routes/customer-application/list.js @@ -1,20 +1,5 @@ -import Ember from 'ember'; import BaseListRoute from './../base-list'; export default BaseListRoute.extend({ breadcrumbs: [{text: 'Customer Application'}], - actions: { - showContent(app) { - this.get('dialog').dialog({ - title: app.name, - message: `

${app.content}

`, - buttons: { - ok: { - label: 'OK', - className: 'btn-info' - } - } - }); - } - } }); diff --git a/web/app/routes/local-product/create.js b/web/app/routes/local-product/create.js new file mode 100644 index 0000000..84d2fd5 --- /dev/null +++ b/web/app/routes/local-product/create.js @@ -0,0 +1,34 @@ +import BaseRoute from '../base'; +import EmberObject, { computed } from '@ember/object'; +import RSVP from 'rsvp'; + +export default BaseRoute.extend({ + breadcrumbs: [{route: 'local-product.list', params: 1, text: 'Local Product'}, + {text: 'Create Local Product'}], + modelClass: EmberObject.extend({ + hasImage: computed('images.@each.file', function() { + return this.get('images').filter(image => image.file).length > 0; + }) + }), + model() { + return RSVP.hash({ + enabled: true, + images: [{}], + attachments: [{}] + }); + }, + actions: { + addImage() { + this.get('controller.model.images').pushObject({}); + }, + removeImage(image) { + this.get('controller.model.images').removeObject(image); + }, + addAttachment() { + this.get('controller.model.attachments').pushObject({}); + }, + removeAttachment(attachment) { + this.get('controller.model.attachments').removeObject(attachment); + } + } +}); diff --git a/web/app/routes/local-product/edit.js b/web/app/routes/local-product/edit.js new file mode 100644 index 0000000..24e5b8f --- /dev/null +++ b/web/app/routes/local-product/edit.js @@ -0,0 +1,122 @@ +import BaseEditRoute from '../base-edit'; +import $ from 'jquery'; + +export default BaseEditRoute.extend({ + afterModel(model) { + const me = this; + me._super(...arguments); + this.set('breadcrumbs', + [{route: 'local-product.list', params: 1, text: 'Local Product'}, + {text: 'Edit Local Product [' + model.name + ']'}]); + }, + actions: { + addImage() { + const me = this; + me.set('controller.model.addImage', true); + me.set('controller.model.image', {}); + }, + submitAddImage() { + const me = this; + me.set('controller.errors', {}); + if (me.get('controller.model.image.file')) { + me.set('controller.errors', {}); + me.get('store').ajaxPost('local-product/add-image', + new FormData($('#form_' + me.get('controller.model.id'))[0])) + .then(image => { + me.get('controller.model.images').pushObject(image); + me.set('controller.model.addImage', false); + }); + } + else { + me.set('controller.errors.image', ['No image file selected']); + } + }, + closeAddImage() { + const me = this; + me.set('controller.model.addImage', false); + }, + removeImage(image) { + const me = this; + me.get('dialog').confirm('Are you sure to remove image?', () => { + me.get('store').ajaxPost('local-product/remove-image', image).then(() => { + me.get('message').alert('Image removed'); + me.get('controller.model.images').removeObject(image); + }); + }); + }, + moveImageUp(image) { + const me = this; + me.moveUp(me.get('controller.model.images'), image, 'updateImage'); + }, + moveImageDown(image) { + const me = this; + me.moveDown(me.get('controller.model.images'), image, 'updateImage'); + }, + // attachments + addAttachment() { + const me = this; + me.set('controller.model.addAttachment', true); + me.set('controller.model.attachment', {}); + }, + submitAddAttachment() { + const me = this; + me.set('controller.errors', {}); + if (me.get('controller.model.attachment.file')) { + me.get('store').ajaxPost('local-product/add-attachment', + new FormData($('#form_' + me.get('controller.model.id'))[0])) + .then(attachment => { + me.get('controller.model.attachments').pushObject(attachment); + me.set('controller.model.addAttachment', false); + }); + } + else { + me.set('controller.errors.attachment', ['No attachment file selected']); + } + }, + closeAddAttachment() { + const me = this; + me.set('controller.model.addAttachment', false); + }, + removeAttachment(attachment) { + const me = this; + me.get('dialog').confirm('Are you sure to remove attachment?', () => { + me.get('store').ajaxPost('local-product/remove-attachment', attachment).then(() => { + me.get('message').alert('Attachment removed'); + me.get('controller.model.attachments').removeObject(attachment); + }); + }); + }, + moveAttachmentUp(attachment) { + const me = this; + me.moveUp(me.get('controller.model.attachments'), attachment, 'updateAttachment'); + }, + moveAttachmentDown(attachment) { + const me = this; + me.moveDown(me.get('controller.model.attachments'), attachment, 'updateAttachment'); + } + }, + updateImage(image) { + this.get('ajax').doPost('local-product/update-image', image, false); + }, + updateAttachment(attachment) { + this.get('ajax').doPost('local-product/update-attachment', attachment, false); + }, + moveUp(files, file, update) { + if (files && files.length > 1) { + let index = files.indexOf(file); + files.removeObject(file); + files.insertAt(index - 1, file); + --file.sort; + this[update](file); + } + }, + moveDown(files, file, update) { + if (files && files.length > 1) { + let index = files.indexOf(file); + files.removeObject(file); + files.insertAt(index + 1, file); + ++file.sort; + this[update](file); + } + } +}); diff --git a/web/app/routes/local-product/list.js b/web/app/routes/local-product/list.js new file mode 100644 index 0000000..80bc694 --- /dev/null +++ b/web/app/routes/local-product/list.js @@ -0,0 +1,5 @@ +import BaseListRoute from './../base-list'; + +export default BaseListRoute.extend({ + breadcrumbs: [{text: 'Local Product'}] +}); diff --git a/web/app/services/customer-application/service.js b/web/app/services/customer-application/service.js index b0149a1..6c4665b 100644 --- a/web/app/services/customer-application/service.js +++ b/web/app/services/customer-application/service.js @@ -1,4 +1,3 @@ -import Ember from 'ember'; import BaseService from '../service'; export default BaseService.extend({ diff --git a/web/app/services/local-product/service.js b/web/app/services/local-product/service.js new file mode 100644 index 0000000..754a6be --- /dev/null +++ b/web/app/services/local-product/service.js @@ -0,0 +1,15 @@ +import BaseService from '../service'; + +export default BaseService.extend({ + pageSize: 128, + modelName: 'LocalProduct', + constraints: { + name: { + presence: true, + length: { + minimum: 1, + maximum: 128 + } + } + } +}); diff --git a/web/app/templates/components/main-container.hbs b/web/app/templates/components/main-container.hbs index be27b56..95491cf 100644 --- a/web/app/templates/components/main-container.hbs +++ b/web/app/templates/components/main-container.hbs @@ -71,6 +71,12 @@ Customer Application {{/link-to}} +
  • + {{#link-to 'local-product.list' 1}} + + Local Product + {{/link-to}} +
  • {{#if ajax.user.admin}}
  • {{#link-to 'import-record.list' 1}} diff --git a/web/app/templates/customer-application/list.hbs b/web/app/templates/customer-application/list.hbs index f53246c..f2435ff 100644 --- a/web/app/templates/customer-application/list.hbs +++ b/web/app/templates/customer-application/list.hbs @@ -32,6 +32,7 @@ Remark + {{#if ajax.user.admin}} {{th-filter name='owner' @@ -42,6 +43,8 @@ text-exp='$.employeeId ($.name)' }} + {{/if}} + {{#if (application/admin-or-owner model.data ajax.user)}} Enabled @@ -50,23 +53,34 @@ Settings + {{/if}} {{#each model.data as |it|}} + {{#if (or it.enabled (or ajax.user.admin (eq ajax.user.id it.owner)))}} {{customer-application/preview-btn model=it}} - {{editable-cell model=it field='note'}} + {{#if (or ajax.user.admin (eq ajax.user.id it.owner))}} + {{editable-cell model=it field='note'}} + {{else}} + {{it.note}} + {{/if}} + {{#if ajax.user.admin}} {{option-text model.users it.owner 'id' 'name' '$.employeeId ($.name)'}} + {{/if}} + {{#if (application/admin-or-owner model.data ajax.user)}} + {{#if (or ajax.user.admin (eq ajax.user.id it.owner))}} {{status-cell model=it enabledText='TRUE' disabledText='FALSE'}} + {{/if}} + {{/if}} + {{/if}} {{/each}} diff --git a/web/app/templates/local-product/create.hbs b/web/app/templates/local-product/create.hbs new file mode 100644 index 0000000..d369c06 --- /dev/null +++ b/web/app/templates/local-product/create.hbs @@ -0,0 +1,64 @@ +{{#form-content}} + {{form-input name='name' label='Name'}} + {{form-input name='note' label='Remark'}} + {{form-input name='content' label='Content' type='textarea'}} + + {{#form-input name='image' label='Images'}} +
    +
    +
    + + + +
    +
    +
    +
    + {{#each model.images as |image i|}} +
    +
    + {{input name=(concat 'imageTitles[' i ']') class='width-80' placeholder='Image title' value=image.title}} +   + + + +
    + {{image-input name=(concat 'images[' i ']') image=image}} +
    + {{/each}} +
    +
    +
    + {{/form-input}} + + {{#form-input name='attachment' label='Attachments'}} +
    +
    +
    + + + +
    +
    +
    +
    + {{#each model.attachments as |attachment i|}} +
    +
    + {{input name=(concat 'attachmentTitles[' i ']') class='width-80' placeholder='Attachment name' value=image.title}} +   + + + +
    + {{!input type='file'}} + {{file-input name=(concat 'attachments[' i ']') file=attachment}} +
    + {{/each}} +
    +
    +
    + {{/form-input}} +
    + {{form-footer-buttons}} +{{/form-content}} diff --git a/web/app/templates/local-product/edit.hbs b/web/app/templates/local-product/edit.hbs new file mode 100644 index 0000000..04c227e --- /dev/null +++ b/web/app/templates/local-product/edit.hbs @@ -0,0 +1,185 @@ +{{#form-content}} + {{input type='hidden' name='id' value=model.id}} + {{form-input name='name' label='Name'}} + {{form-input name='note' label='Remark'}} + + {{form-input name='content' label='Content' type='textarea'}} + {{!-- {{#form-input name='content' label='Content'}} + {{wysiwyg-editor model=model name='content'}} + {{/form-input}} --}} + + {{#form-input label='Images' name='images'}} +
    + +
    + {{!--
    + + Users +
    --}} +
    + + + +
    +
    + + +
    +
    + + + + + + + + + + + {{#each model.images as |image|}} + + + + + + {{/each}} + +
    + + Image + + + Description + + + Settings +
    + {{image-previews images=image.url}} + + {{editable-cell model=image field='note' post-url='local-product/update-image'}} + + {{!image.note}} +
    + + + + {{#if (not-eq model.images.firstObject.id image.id)}} + + + + {{/if}} + {{#if (not-eq model.images.lastObject.id image.id)}} + + + + {{/if}} +
    +
    +
    +
    +
    + {{/form-input}} + + {{#form-input label='Attachments' name='attachments'}} +
    + +
    +
    + + + +
    +
    + + +
    +
    + + + + + + + + + + + {{#each model.attachments as |attachment|}} + + + + + + {{/each}} + +
    + + Attachment + + + Description + + + Settings +
    + {{!image-previews images=image.url}} + + + Download + + + {{editable-cell model=attachment field='note' post-url='local-product/update-attachment'}} + +
    + + + + {{#if (not-eq model.images.firstObject.id attachment.id)}} + + + + {{/if}} + {{#if (not-eq model.images.lastObject.id attachment.id)}} + + + + {{/if}} +
    +
    +
    +
    +
    + {{/form-input}} + + {{form-input-enabled label='Enabled' enabledText='TRUE' disabledText='FALSE'}} +
    + {{form-footer-buttons type='update'}} +{{/form-content}} + +{{#if model.addImage}} + {{#modal-dialog title='Add Image' no-cancel=true submit=(route-action 'submitAddImage') on-close=(route-action 'closeAddImage') close-to-parent=false}} + {{#form-content form-id=(concat 'form_' model.id)}} + {{input type='hidden' name='productId' value=model.id}} + {{#form-input name='note' label='Description'}} + {{input name='note' value=model.image.note class='col-xs-12'}} + {{/form-input}} + {{#form-input name='image' label='Image'}} + {{image-input name='image' image=model.image}} + {{/form-input}} + {{/form-content}} + {{/modal-dialog}} +{{/if}} + +{{#if model.addAttachment}} + {{#modal-dialog title='Add Attachment' no-cancel=true submit=(route-action 'submitAddAttachment') on-close=(route-action 'closeAddAttachment') close-to-parent=false}} + {{#form-content form-id=(concat 'form_' model.id)}} + {{input type='hidden' name='productId' value=model.id}} + {{#form-input name='note' label='Description'}} + {{input name='note' value=model.attachment.note class='col-xs-12'}} + {{/form-input}} + {{#form-input name='attachment' label='Attachment'}} + {{file-input name='attachment' file=model.attachment}} + {{/form-input}} + {{/form-content}} + {{/modal-dialog}} +{{/if}} diff --git a/web/app/templates/local-product/list.hbs b/web/app/templates/local-product/list.hbs new file mode 100644 index 0000000..0ed6723 --- /dev/null +++ b/web/app/templates/local-product/list.hbs @@ -0,0 +1,109 @@ +{{#main-content}} +
    + {{#if (local-product/has-perm ajax.user)}} + {{#grid-header}} +
  • + {{#link-to 'local-product.create'}} + + Create Local Product + {{/link-to}} +
  • + {{/grid-header}} + {{else}} + {{grid-header}} + {{/if}} + +
    + +
    + + + + + + {{#if (local-product/has-perm ajax.user)}} + + + {{/if}} + + + + + {{#each model.data as |it|}} + + + + {{#if (local-product/has-perm ajax.user)}} + + + {{/if}} + + {{/each}} + +
    + {{th-filter name='namePrefix' + text='Name' + label='Name Filter' + options=model.namePrefixes + value-field='value' + text-field='text' + }} + + + Remark + + + Enabled + + + Settings +
    + {{customer-application/preview-btn model=it}} + + {{#if (local-product/has-perm ajax.user)}} + {{editable-cell model=it field='note'}} + {{else}} + {{it.note}} + {{/if}} + + {{status-cell model=it enabledText='TRUE' disabledText='FALSE'}} + + + +
    +
    + {{pagination-bar}} +
    + +{{/main-content}} diff --git a/web/tests/integration/helpers/application/admin-or-owner-test.js b/web/tests/integration/helpers/application/admin-or-owner-test.js new file mode 100644 index 0000000..b24ade6 --- /dev/null +++ b/web/tests/integration/helpers/application/admin-or-owner-test.js @@ -0,0 +1,17 @@ + +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('application/admin-or-owner', 'helper:application/admin-or-owner', { + integration: true +}); + +// Replace this with your real tests. +test('it renders', function(assert) { + this.set('inputValue', '1234'); + + this.render(hbs`{{application/admin-or-owner inputValue}}`); + + assert.equal(this.$().text().trim(), '1234'); +}); + diff --git a/web/tests/integration/helpers/local-product/has-perm-test.js b/web/tests/integration/helpers/local-product/has-perm-test.js new file mode 100644 index 0000000..af38ed1 --- /dev/null +++ b/web/tests/integration/helpers/local-product/has-perm-test.js @@ -0,0 +1,17 @@ + +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('local-product/has-perm', 'helper:local-product/has-perm', { + integration: true +}); + +// Replace this with your real tests. +test('it renders', function(assert) { + this.set('inputValue', '1234'); + + this.render(hbs`{{local-product/has-perm inputValue}}`); + + assert.equal(this.$().text().trim(), '1234'); +}); + diff --git a/web/tests/unit/routes/local-product/create-test.js b/web/tests/unit/routes/local-product/create-test.js new file mode 100644 index 0000000..ddb6f39 --- /dev/null +++ b/web/tests/unit/routes/local-product/create-test.js @@ -0,0 +1,11 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('route:local-product/create', 'Unit | Route | local product/create', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('it exists', function(assert) { + let route = this.subject(); + assert.ok(route); +}); diff --git a/web/tests/unit/routes/local-product/edit-test.js b/web/tests/unit/routes/local-product/edit-test.js new file mode 100644 index 0000000..affb44e --- /dev/null +++ b/web/tests/unit/routes/local-product/edit-test.js @@ -0,0 +1,11 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('route:local-product/edit', 'Unit | Route | local product/edit', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('it exists', function(assert) { + let route = this.subject(); + assert.ok(route); +}); diff --git a/web/tests/unit/routes/local-product/list-test.js b/web/tests/unit/routes/local-product/list-test.js new file mode 100644 index 0000000..8a1b16f --- /dev/null +++ b/web/tests/unit/routes/local-product/list-test.js @@ -0,0 +1,11 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('route:local-product/list', 'Unit | Route | local product/list', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('it exists', function(assert) { + let route = this.subject(); + assert.ok(route); +}); diff --git a/web/tests/unit/services/local-product/service-test.js b/web/tests/unit/services/local-product/service-test.js new file mode 100644 index 0000000..cea703e --- /dev/null +++ b/web/tests/unit/services/local-product/service-test.js @@ -0,0 +1,12 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('service:local-product/service', 'Unit | Service | local product/service', { + // Specify the other units that are required for this test. + // needs: ['service:foo'] +}); + +// Replace this with your real tests. +test('it exists', function(assert) { + let service = this.subject(); + assert.ok(service); +}); From ec8399fcd30e25cd65b5089cb4f66a42aadae0dc Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Sat, 24 Nov 2018 22:15:10 +0800 Subject: [PATCH 06/15] add adminOrOwner in afterModel --- web/app/helpers/application/admin-or-owner.js | 8 -------- web/app/routes/customer-application/list.js | 6 ++++++ web/app/templates/customer-application/list.hbs | 4 ++-- .../helpers/application/admin-or-owner-test.js | 17 ----------------- 4 files changed, 8 insertions(+), 27 deletions(-) delete mode 100644 web/app/helpers/application/admin-or-owner.js delete mode 100644 web/tests/integration/helpers/application/admin-or-owner-test.js diff --git a/web/app/helpers/application/admin-or-owner.js b/web/app/helpers/application/admin-or-owner.js deleted file mode 100644 index 4d2f4c2..0000000 --- a/web/app/helpers/application/admin-or-owner.js +++ /dev/null @@ -1,8 +0,0 @@ -import { helper } from '@ember/component/helper'; - -export function applicationAdminOrOwner(params/*, hash*/) { - const user = params[1]; - return user.admin || params[0].filterBy('owner', user.id).length; -} - -export default helper(applicationAdminOrOwner); diff --git a/web/app/routes/customer-application/list.js b/web/app/routes/customer-application/list.js index 79d994b..50fc78d 100644 --- a/web/app/routes/customer-application/list.js +++ b/web/app/routes/customer-application/list.js @@ -2,4 +2,10 @@ import BaseListRoute from './../base-list'; export default BaseListRoute.extend({ breadcrumbs: [{text: 'Customer Application'}], + afterModel(model) { + const me = this; + me._super(...arguments); + const user = me.get('ajax.user'); + model.adminOrOwner = user.admin || model.data.filterBy('owner', user.id).length > 0; + } }); diff --git a/web/app/templates/customer-application/list.hbs b/web/app/templates/customer-application/list.hbs index f2435ff..2505b95 100644 --- a/web/app/templates/customer-application/list.hbs +++ b/web/app/templates/customer-application/list.hbs @@ -44,7 +44,7 @@ }} {{/if}} - {{#if (application/admin-or-owner model.data ajax.user)}} + {{#if model.adminOrOwner}} Enabled @@ -76,7 +76,7 @@ {{option-text model.users it.owner 'id' 'name' '$.employeeId ($.name)'}} {{/if}} - {{#if (application/admin-or-owner model.data ajax.user)}} + {{#if model.adminOrOwner}} {{#if (or ajax.user.admin (eq ajax.user.id it.owner))}} {{status-cell model=it enabledText='TRUE' disabledText='FALSE'}} diff --git a/web/tests/integration/helpers/application/admin-or-owner-test.js b/web/tests/integration/helpers/application/admin-or-owner-test.js deleted file mode 100644 index b24ade6..0000000 --- a/web/tests/integration/helpers/application/admin-or-owner-test.js +++ /dev/null @@ -1,17 +0,0 @@ - -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('application/admin-or-owner', 'helper:application/admin-or-owner', { - integration: true -}); - -// Replace this with your real tests. -test('it renders', function(assert) { - this.set('inputValue', '1234'); - - this.render(hbs`{{application/admin-or-owner inputValue}}`); - - assert.equal(this.$().text().trim(), '1234'); -}); - From bbc816f7a32363087df302a988be5a630aec2ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87?= Date: Mon, 26 Nov 2018 19:44:47 +0800 Subject: [PATCH 07/15] pom cleanup --- server/pom.xml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/server/pom.xml b/server/pom.xml index 3fa7f83..0e957cf 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -54,16 +54,6 @@ - - com.pudonghot.ambition - web-parent - ${project.version} - - - com.pudonghot.ambition - web-common - ${project.version} - com.pudonghot.ambition crm-model @@ -110,11 +100,6 @@ jdom 1.1.3 - - org.apache.commons - commons-lang3 - 3.1 - commons-io commons-io From bfe56c2f5b11babf16fc03ae6433c18520be4ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87?= Date: Fri, 30 Nov 2018 11:21:56 +0800 Subject: [PATCH 08/15] Update Local & Products Menu --- web/app/templates/components/main-container.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/templates/components/main-container.hbs b/web/app/templates/components/main-container.hbs index 95491cf..bf8398a 100644 --- a/web/app/templates/components/main-container.hbs +++ b/web/app/templates/components/main-container.hbs @@ -74,7 +74,7 @@
  • {{#link-to 'local-product.list' 1}} - Local Product + Local & New Products {{/link-to}}
  • {{#if ajax.user.admin}} From f4b814942d97e8df8f2567f6fe5962a752a399eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87?= Date: Mon, 10 Dec 2018 20:43:41 +0800 Subject: [PATCH 09/15] add local product category --- .gitignore | 1 + .../controller/LocalProductController.java | 35 +- .../crm/mapper/LocalProductMapper.xml | 2 +- .../ambition/crm/mapper/UserMapperTest.java | 59 +- .../create/LocalProductFormForCreate.java | 3 + .../update/LocalProductFormForUpdate.java | 3 + .../ambition/crm/model/LocalProduct.java | 1 + web/app/helpers/local-product/has-perm.js | 3 +- web/app/services/local-product/service.js | 7 + web/app/templates/local-product/create.hbs | 5 +- web/app/templates/local-product/edit.hbs | 5 +- web/app/templates/local-product/list.hbs | 15 +- web/package-lock.json | 12854 ---------------- 13 files changed, 69 insertions(+), 12924 deletions(-) delete mode 100644 web/package-lock.json diff --git a/.gitignore b/.gitignore index 9fcd666..b64bbcf 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ /web/libpeerconnection.log /web/npm-debug.log /web/testem.log +/web/package-lock.json .* !.editorconfig diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java index 90574df..96a017c 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/LocalProductController.java @@ -10,7 +10,9 @@ import javax.validation.constraints.Min; import me.chyxion.tigon.model.ViewModel; import me.chyxion.tigon.model.ListResult; import com.pudonghot.ambition.crm.model.*; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.StringUtils; import javax.validation.constraints.NotBlank; import org.springframework.stereotype.Controller; import org.apache.shiro.authz.annotation.Logical; @@ -55,25 +57,26 @@ public class LocalProductController final int limit, @RequestParam(value = "filters", required = false) final String filters, + @RequestParam(value = "orders", required = false) + final String orders, @RequestParam(value = "search", required = false) final String strSearch) { final ListResult> result = - listViewModels(new Search().asc(LocalProduct.NAME), - start, limit, strSearch, null, filters, null); + listViewModels(start, limit, strSearch, null, filters, orders); result.setAttr("namePrefixes", ((LocalProductService) queryService).listNamePrefixes()); return result; } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/create", method = RequestMethod.POST) public void create( @Valid LocalProductFormForCreate form) { ((LocalProductService) queryService).create(form); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/update", method = RequestMethod.POST) public void update( @Valid LocalProductFormForUpdate form) { @@ -93,7 +96,7 @@ public class LocalProductController return viewModel; } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/add-image", method = RequestMethod.POST) public ViewModel addImage( @Valid LocalProductImageFormForCreate form) { @@ -101,19 +104,19 @@ public class LocalProductController return new ViewModel<>(((LocalProductService) queryService).addImage(form)); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/remove-image", method = RequestMethod.POST) public void removeImage(@NotBlank @RequestParam("id") String id) { ((LocalProductService) queryService).removeImage(id); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/update-image", method = RequestMethod.POST) public void updateImage(@Valid LocalProductImageFormForUpdate form) { ((LocalProductService) queryService).updateImage(form); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/add-attachment", method = RequestMethod.POST) public ViewModel addAttachment( @Valid LocalProductAttachedFileFormForCreate form) { @@ -126,13 +129,13 @@ public class LocalProductController ((LocalProductService) queryService).removeAttachment(id); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/update-attachment", method = RequestMethod.POST) public void updateImage(@Valid LocalProductAttachedFileFormForUpdate form) { ((LocalProductService) queryService).updateAttachment(form); } - @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR) + @RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR) @RequestMapping(value = "/delete", method = RequestMethod.POST) public void delete(@NotBlank @RequestParam("id") String id) { ((LocalProductService) queryService).delete(id); @@ -146,6 +149,18 @@ public class LocalProductController return SEARCH_COLS; } + /** + * {@inheritDoc} + */ + @Override + protected String orderCol(final String field) { + return StringUtils.isNotBlank(field) && + ArrayUtils.contains(new String[] { + LocalProduct.NAME, + LocalProduct.CATEGORY + }, field) ? field : null; + } + /** * {@inheritDoc} */ diff --git a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.xml b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.xml index ab0a9c5..9f12b1d 100644 --- a/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.xml +++ b/server/mapper/src/main/java/com/pudonghot/ambition/crm/mapper/LocalProductMapper.xml @@ -11,7 +11,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - diff --git a/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/UserMapperTest.java b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/UserMapperTest.java index 6288dbc..da94494 100644 --- a/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/UserMapperTest.java +++ b/server/mapper/src/test/java/com/pudonghot/ambition/crm/mapper/UserMapperTest.java @@ -1,5 +1,6 @@ package com.pudonghot.ambition.crm.mapper; +import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Test; import java.util.Date; @@ -17,64 +18,22 @@ import com.pudonghot.ambition.crm.model.User; * Tech Support Shaun Chyxion
    * Jun 7, 2017 8:55:14 PM */ +@Slf4j @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:spring/spring-*.xml") public class UserMapperTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired private UserMapper mapper; + @Autowired + private LocalProductMapper localProductMapper; @Test public void mapperTest() { - // String id = String.valueOf(new Date().getTime()); - // init model - User m = new User(); - String id = "id"; - m.setId(id); - m.setDateCreated(new Date()); - m.setAccount("s"); - m.setPassword("s"); - m.setMobile("s"); - m.setEmail("s"); - m.setName("s"); - m.setGender("s"); - mapper.insert(m); Assert.assertTrue(mapper.list(null).size() > 0); - /* - // Your Test Logics - User m1 = mapper.find(id); - // asserts - Assert.assertEquals(id, m1.getId()); - Assert.assertEquals("s", m.getLoginId()); - Assert.assertEquals("s", m.getPassword()); - Assert.assertEquals("s", m.getMobile()); - Assert.assertEquals("s", m.getEmail()); - Assert.assertEquals("s", m.getName()); - Assert.assertEquals("s", m.getGender()); - // update - m.setDateUpdated(new Date()); - m.setLoginId("S"); - m.setPassword("S"); - m.setMobile("S"); - m.setEmail("S"); - m.setName("S"); - m.setGender("S"); - mapper.update(m); - m1 = mapper.find(id); - // asserts - Assert.assertEquals(id, m1.getId()); - Assert.assertNotNull(m1.getDateUpdated()); - Assert.assertEquals("S", m.getLoginId()); - Assert.assertEquals("S", m.getPassword()); - Assert.assertEquals("S", m.getMobile()); - Assert.assertEquals("S", m.getEmail()); - Assert.assertEquals("S", m.getName()); - Assert.assertEquals("S", m.getGender()); - // list - Assert.assertTrue(mapper.list(null).size() > 0); - // delete - mapper.delete(id); - m1 = mapper.find(id); - Assert.assertNull(m1); - */ + } + + @Test + public void testListProducts() { + log.info("local products [{}].", localProductMapper.list(null)); } } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java index ca1948d..b6b6c86 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/create/LocalProductFormForCreate.java @@ -21,6 +21,9 @@ public class LocalProductFormForCreate extends FC2 { // Properties @Trim @NotBlank + private String category; + @Trim + @NotBlank private String name; @Trim @EmptyToNull diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java index 1dd413b..dff698a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/form/update/LocalProductFormForUpdate.java @@ -20,6 +20,9 @@ import me.chyxion.tigon.format.annotation.EmptyToNull; public class LocalProductFormForUpdate extends FU2 { private static final long serialVersionUID = 1L; + @Trim + @NotBlank + private String category; @NotBlank @Length(max = 64) private String name; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java index b1f6183..ac25ae6 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/LocalProduct.java @@ -20,6 +20,7 @@ public class LocalProduct extends M3 { private static final long serialVersionUID = 1L; // Properties + private String category; private String name; private String namePrefix; private String content; diff --git a/web/app/helpers/local-product/has-perm.js b/web/app/helpers/local-product/has-perm.js index 40811a6..e87c8e2 100644 --- a/web/app/helpers/local-product/has-perm.js +++ b/web/app/helpers/local-product/has-perm.js @@ -1,7 +1,8 @@ import { helper } from '@ember/component/helper'; export function localProductHasPerm(params/*, hash*/) { - return ['leli', 'chyxion'].includes(params[0].account); + const user = params[0]; + return user.admin || ['leli', 'chyxion'].includes(user.account); } export default helper(localProductHasPerm); diff --git a/web/app/services/local-product/service.js b/web/app/services/local-product/service.js index 754a6be..a07a926 100644 --- a/web/app/services/local-product/service.js +++ b/web/app/services/local-product/service.js @@ -4,6 +4,13 @@ export default BaseService.extend({ pageSize: 128, modelName: 'LocalProduct', constraints: { + category: { + presence: true, + length: { + minimum: 1, + maximum: 128 + } + }, name: { presence: true, length: { diff --git a/web/app/templates/local-product/create.hbs b/web/app/templates/local-product/create.hbs index d369c06..6ba6f83 100644 --- a/web/app/templates/local-product/create.hbs +++ b/web/app/templates/local-product/create.hbs @@ -1,7 +1,8 @@ {{#form-content}} - {{form-input name='name' label='Name'}} + {{form-input name='category' label='Category'}} + {{form-input name='name' label='Name & P.N.'}} {{form-input name='note' label='Remark'}} - {{form-input name='content' label='Content' type='textarea'}} + {{form-input name='content' label='Description' type='textarea'}} {{#form-input name='image' label='Images'}}
    diff --git a/web/app/templates/local-product/edit.hbs b/web/app/templates/local-product/edit.hbs index 04c227e..cc0c844 100644 --- a/web/app/templates/local-product/edit.hbs +++ b/web/app/templates/local-product/edit.hbs @@ -1,9 +1,10 @@ {{#form-content}} {{input type='hidden' name='id' value=model.id}} - {{form-input name='name' label='Name'}} + {{form-input name='category' label='Category'}} + {{form-input name='name' label='Name & P.N.'}} {{form-input name='note' label='Remark'}} - {{form-input name='content' label='Content' type='textarea'}} + {{form-input name='content' label='Description' type='textarea'}} {{!-- {{#form-input name='content' label='Content'}} {{wysiwyg-editor model=model name='content'}} {{/form-input}} --}} diff --git a/web/app/templates/local-product/list.hbs b/web/app/templates/local-product/list.hbs index 0ed6723..59b1bd5 100644 --- a/web/app/templates/local-product/list.hbs +++ b/web/app/templates/local-product/list.hbs @@ -19,15 +19,19 @@ - + {{/sortable-th}} {{#each model.data as |it|}} + diff --git a/web/package-lock.json b/web/package-lock.json deleted file mode 100644 index e1c4706..0000000 --- a/web/package-lock.json +++ /dev/null @@ -1,12854 +0,0 @@ -{ - "name": "ambition-crm", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@glimmer/di": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/@glimmer/di/download/@glimmer/di-0.2.0.tgz", - "integrity": "sha1-c7/Upu5BSKgL8JLopdKbysnUzn4=", - "dev": true - }, - "@glimmer/resolver": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/@glimmer/resolver/download/@glimmer/resolver-0.4.1.tgz", - "integrity": "sha1-zZZEVyxVbn55neHPjv8rmZz1uHg=", - "dev": true, - "requires": { - "@glimmer/di": "0.2.0" - } - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, - "accepts": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.1.2", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.1.2.tgz", - "integrity": "sha1-kRy1PgNoB88Pp3jcXTcPvYZCRtc=", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "after": { - "version": "0.8.1", - "resolved": "http://registry.npm.taobao.org/after/download/after-0.8.1.tgz", - "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", - "dev": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "alter": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/alter/download/alter-0.2.0.tgz", - "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", - "dev": true, - "requires": { - "stable": "0.1.6" - } - }, - "amd-name-resolver": { - "version": "0.0.7", - "resolved": "http://registry.npm.taobao.org/amd-name-resolver/download/amd-name-resolver-0.0.7.tgz", - "integrity": "sha1-gUMBrf6KLxCfboTV6TUZbvtmlhU=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "ansicolors": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/ansicolors/download/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz", - "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "aot-test-generators": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/aot-test-generators/download/aot-test-generators-0.1.0.tgz", - "integrity": "sha1-Q/D2Ffl8spjXkZwbC05rcxCwPNA=", - "dev": true, - "requires": { - "jsesc": "2.5.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.1", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", - "dev": true - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-to-error": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/array-to-error/download/array-to-error-1.1.1.tgz", - "integrity": "sha1-1ogSkm0UCXogVXmmZ+6vGFakTAc=", - "dev": true, - "requires": { - "array-to-sentence": "1.1.0" - } - }, - "array-to-sentence": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/array-to-sentence/download/array-to-sentence-1.1.0.tgz", - "integrity": "sha1-yASVba+lMjJJWyBalFJ1OiWNOfw=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "asn1.js": { - "version": "4.9.1", - "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "ast-traverse": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/ast-traverse/download/ast-traverse-0.1.1.tgz", - "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "http://registry.npm.taobao.org/ast-types/download/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true - }, - "astw": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/astw/download/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "async": { - "version": "2.5.0", - "resolved": "http://registry.npm.taobao.org/async/download/async-2.5.0.tgz", - "integrity": "sha1-hDGQ/WtzV6C54clW7d3V7IRitU0=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "async-disk-cache": { - "version": "1.3.3", - "resolved": "http://registry.npm.taobao.org/async-disk-cache/download/async-disk-cache-1.3.3.tgz", - "integrity": "sha1-YEBIZmCzcOQFHNn6n+4nXh+uNyg=", - "dev": true, - "requires": { - "debug": "2.6.9", - "heimdalljs": "0.2.5", - "istextorbinary": "2.1.0", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "username-sync": "1.0.1" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-promise-queue": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/async-promise-queue/download/async-promise-queue-1.0.4.tgz", - "integrity": "sha1-MIuq+8dK/2agu25/ShjU/oQ0RAw=", - "dev": true, - "requires": { - "async": "2.5.0", - "debug": "2.6.9" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-constant-folding": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-constant-folding/download/babel-plugin-constant-folding-1.0.1.tgz", - "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", - "dev": true - }, - "babel-plugin-dead-code-elimination": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/babel-plugin-dead-code-elimination/download/babel-plugin-dead-code-elimination-1.0.2.tgz", - "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", - "dev": true - }, - "babel-plugin-debug-macros": { - "version": "0.1.11", - "resolved": "http://registry.npm.taobao.org/babel-plugin-debug-macros/download/babel-plugin-debug-macros-0.1.11.tgz", - "integrity": "sha1-bFYr9WH8zUBs4UqwT0LCGM+VZgU=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "babel-plugin-ember-modules-api-polyfill": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-ember-modules-api-polyfill/download/babel-plugin-ember-modules-api-polyfill-2.1.0.tgz", - "integrity": "sha1-eISMxPzCJ0iCpsFcuyP+/Nx3EwE=", - "dev": true, - "requires": { - "ember-rfc176-data": "0.3.0" - } - }, - "babel-plugin-eval": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-eval/download/babel-plugin-eval-1.0.1.tgz", - "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", - "dev": true - }, - "babel-plugin-htmlbars-inline-precompile": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/babel-plugin-htmlbars-inline-precompile/download/babel-plugin-htmlbars-inline-precompile-0.2.3.tgz", - "integrity": "sha1-zTZeJ4r0Cb+mvncExDVL7udCRGs=", - "dev": true - }, - "babel-plugin-inline-environment-variables": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-inline-environment-variables/download/babel-plugin-inline-environment-variables-1.0.1.tgz", - "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", - "dev": true - }, - "babel-plugin-jscript": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/babel-plugin-jscript/download/babel-plugin-jscript-1.0.4.tgz", - "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", - "dev": true - }, - "babel-plugin-member-expression-literals": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-member-expression-literals/download/babel-plugin-member-expression-literals-1.0.1.tgz", - "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", - "dev": true - }, - "babel-plugin-property-literals": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-property-literals/download/babel-plugin-property-literals-1.0.1.tgz", - "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", - "dev": true - }, - "babel-plugin-proto-to-assign": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/babel-plugin-proto-to-assign/download/babel-plugin-proto-to-assign-1.0.4.tgz", - "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", - "dev": true, - "requires": { - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "babel-plugin-react-constant-elements": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/babel-plugin-react-constant-elements/download/babel-plugin-react-constant-elements-1.0.3.tgz", - "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", - "dev": true - }, - "babel-plugin-react-display-name": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/babel-plugin-react-display-name/download/babel-plugin-react-display-name-1.0.3.tgz", - "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", - "dev": true - }, - "babel-plugin-remove-console": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-remove-console/download/babel-plugin-remove-console-1.0.1.tgz", - "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", - "dev": true - }, - "babel-plugin-remove-debugger": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-remove-debugger/download/babel-plugin-remove-debugger-1.0.1.tgz", - "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", - "dev": true - }, - "babel-plugin-runtime": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/babel-plugin-runtime/download/babel-plugin-runtime-1.0.7.tgz", - "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", - "dev": true - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-undeclared-variables-check": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/babel-plugin-undeclared-variables-check/download/babel-plugin-undeclared-variables-check-1.0.2.tgz", - "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", - "dev": true, - "requires": { - "leven": "1.0.2" - } - }, - "babel-plugin-undefined-to-void": { - "version": "1.1.6", - "resolved": "http://registry.npm.taobao.org/babel-plugin-undefined-to-void/download/babel-plugin-undefined-to-void-1.1.6.tgz", - "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", - "dev": true - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-polyfill/download/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/babel-preset-env/download/babel-preset-env-1.6.0.tgz", - "integrity": "sha1-LeHHgqeAoKXWBdGZyVdZbaQ8ROQ=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.5.1", - "invariant": "2.2.2", - "semver": "5.4.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", - "dev": true - }, - "backbone": { - "version": "1.3.3", - "resolved": "http://registry.npm.taobao.org/backbone/download/backbone-1.3.3.tgz", - "integrity": "sha1-TMgOp8sWMaxHSInOQPL4vGg7KZk=", - "dev": true, - "requires": { - "underscore": "1.8.3" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.1.tgz", - "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=", - "dev": true - }, - "base64id": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/base64id/download/base64id-0.1.0.tgz", - "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", - "dev": true - }, - "basic-auth": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true - }, - "binaryextensions": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/binaryextensions/download/binaryextensions-2.0.0.tgz", - "integrity": "sha1-5ZfRp6ajVYotHHJBoWyZll5qpA8=", - "dev": true - }, - "blank-object": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/blank-object/download/blank-object-1.0.2.tgz", - "integrity": "sha1-+ZB5P76ajI3QE/syGUIL7IHV9Lk=", - "dev": true - }, - "blob": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/blob/download/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", - "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", - "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", - "dev": true - }, - "body": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/body/download/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "0.3.1", - "error": "7.0.2", - "raw-body": "1.1.7", - "safe-json-parse": "1.0.1" - }, - "dependencies": { - "bytes": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1.0.0", - "string_decoder": "0.10.31" - } - } - } - }, - "body-parser": { - "version": "1.18.2", - "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "bower-config": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/bower-config/download/bower-config-1.4.1.tgz", - "integrity": "sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mout": "1.1.0", - "optimist": "0.6.1", - "osenv": "0.1.4", - "untildify": "2.1.0" - } - }, - "bower-endpoint-parser": { - "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/bower-endpoint-parser/download/bower-endpoint-parser-0.2.2.tgz", - "integrity": "sha1-ALVlrb+rby01rd3pd+l5Yqy8s/Y=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "breakable": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/breakable/download/breakable-1.0.0.tgz", - "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", - "dev": true - }, - "broccoli-asset-rev": { - "version": "2.6.0", - "resolved": "http://registry.npm.taobao.org/broccoli-asset-rev/download/broccoli-asset-rev-2.6.0.tgz", - "integrity": "sha1-BjP8OgsroMLB1W+p/rezMfyDvm0=", - "dev": true, - "requires": { - "broccoli-asset-rewrite": "1.1.0", - "broccoli-filter": "1.2.4", - "json-stable-stringify": "1.0.1", - "minimatch": "3.0.4", - "rsvp": "3.6.2" - } - }, - "broccoli-asset-rewrite": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/broccoli-asset-rewrite/download/broccoli-asset-rewrite-1.1.0.tgz", - "integrity": "sha1-d6XaVhV6oxjFkRMkXouvtGF/iDA=", - "dev": true, - "requires": { - "broccoli-filter": "1.2.4" - } - }, - "broccoli-babel-transpiler": { - "version": "6.1.2", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-6.1.2.tgz", - "integrity": "sha1-JgGcBFteo+RM/vYoITAvm9SDyr0=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "2.1.1", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - } - }, - "broccoli-brocfile-loader": { - "version": "0.18.0", - "resolved": "http://registry.npm.taobao.org/broccoli-brocfile-loader/download/broccoli-brocfile-loader-0.18.0.tgz", - "integrity": "sha1-LoYCHIBcNP/I0povtyHPJz6Bnks=", - "dev": true, - "requires": { - "findup-sync": "0.4.3" - } - }, - "broccoli-builder": { - "version": "0.18.8", - "resolved": "http://registry.npm.taobao.org/broccoli-builder/download/broccoli-builder-0.18.8.tgz", - "integrity": "sha1-/lRpTVRMPN/bAQKOgC7spldJqHk=", - "dev": true, - "requires": { - "heimdalljs": "0.2.5", - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "silent-error": "1.1.0" - } - }, - "broccoli-caching-writer": { - "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/broccoli-caching-writer/download/broccoli-caching-writer-3.0.3.tgz", - "integrity": "sha1-C9LJapc41qarWQ8HujXFFX19tHY=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "broccoli-plugin": "1.3.0", - "debug": "2.6.9", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "walk-sync": "0.3.2" - } - }, - "broccoli-clean-css": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/broccoli-clean-css/download/broccoli-clean-css-1.1.0.tgz", - "integrity": "sha1-nbFD2a9+CuecJuOsWpuy1yDqGfo=", - "dev": true, - "requires": { - "broccoli-persistent-filter": "1.4.3", - "clean-css-promise": "0.1.1", - "inline-source-map-comment": "1.0.5", - "json-stable-stringify": "1.0.1" - } - }, - "broccoli-concat": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/broccoli-concat/download/broccoli-concat-3.2.2.tgz", - "integrity": "sha1-hv/cUmButZC6n2uJTF7HoBb1t7k=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "broccoli-plugin": "1.3.0", - "broccoli-stew": "1.5.0", - "ensure-posix-path": "1.0.2", - "fast-sourcemap-concat": "1.2.3", - "find-index": "1.1.0", - "fs-extra": "1.0.0", - "fs-tree-diff": "0.5.6", - "lodash.merge": "4.6.0", - "lodash.omit": "4.5.0", - "lodash.uniq": "4.5.0", - "walk-sync": "0.3.2" - }, - "dependencies": { - "fs-extra": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" - } - } - } - }, - "broccoli-config-loader": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/broccoli-config-loader/download/broccoli-config-loader-1.0.1.tgz", - "integrity": "sha1-0QqvjrwMtFwdpbqoJyDh2I0oyAo=", - "dev": true, - "requires": { - "broccoli-caching-writer": "3.0.3" - } - }, - "broccoli-config-replace": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/broccoli-config-replace/download/broccoli-config-replace-1.1.2.tgz", - "integrity": "sha1-bqh52SpbrWNNETKbUfxfSq/anAA=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "broccoli-plugin": "1.3.0", - "debug": "2.6.9", - "fs-extra": "0.24.0" - }, - "dependencies": { - "fs-extra": { - "version": "0.24.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.24.0.tgz", - "integrity": "sha1-1OQ0KpZnXLeEZjOmCZJJMytTmVI=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - } - } - }, - "broccoli-debug": { - "version": "0.6.3", - "resolved": "http://registry.npm.taobao.org/broccoli-debug/download/broccoli-debug-0.6.3.tgz", - "integrity": "sha1-HzO7Dqy124E2bwSSUkyCsSF+tXg=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "fs-tree-diff": "0.5.6", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "minimatch": "3.0.4", - "symlink-or-copy": "1.1.8", - "tree-sync": "1.2.2" - } - }, - "broccoli-filter": { - "version": "1.2.4", - "resolved": "http://registry.npm.taobao.org/broccoli-filter/download/broccoli-filter-1.2.4.tgz", - "integrity": "sha1-QJr7lLmjptqfrIE06R4gX0DMczA=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "broccoli-plugin": "1.3.0", - "copy-dereference": "1.0.0", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "promise-map-series": "0.2.3", - "rsvp": "3.6.2", - "symlink-or-copy": "1.1.8", - "walk-sync": "0.3.2" - } - }, - "broccoli-funnel": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/broccoli-funnel/download/broccoli-funnel-1.2.0.tgz", - "integrity": "sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=", - "dev": true, - "requires": { - "array-equal": "1.0.0", - "blank-object": "1.0.2", - "broccoli-plugin": "1.3.0", - "debug": "2.6.9", - "exists-sync": "0.0.4", - "fast-ordered-set": "1.0.3", - "fs-tree-diff": "0.5.6", - "heimdalljs": "0.2.5", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "path-posix": "1.0.0", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8", - "walk-sync": "0.3.2" - } - }, - "broccoli-funnel-reducer": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-funnel-reducer/download/broccoli-funnel-reducer-1.0.0.tgz", - "integrity": "sha1-ETZbKnha7JsXlyo234fu8kxcwOo=", - "dev": true - }, - "broccoli-jshint": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/broccoli-jshint/download/broccoli-jshint-1.2.0.tgz", - "integrity": "sha1-jNVl0RoEv9MsuPhaD37eHlvnpqI=", - "dev": true, - "requires": { - "broccoli-persistent-filter": "1.4.3", - "chalk": "0.4.0", - "findup-sync": "0.3.0", - "jshint": "2.9.5", - "json-stable-stringify": "1.0.1", - "mkdirp": "0.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/findup-sync/download/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "5.0.15" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "mkdirp": { - "version": "0.4.2", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.4.2.tgz", - "integrity": "sha1-QnyMGOzjmLky9vZm9OHlt3QOeMg=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, - "broccoli-kitchen-sink-helpers": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/broccoli-kitchen-sink-helpers/download/broccoli-kitchen-sink-helpers-0.3.1.tgz", - "integrity": "sha1-d8fBgZS5ZkFj7E/O4nk0RJJuDAY=", - "dev": true, - "requires": { - "glob": "5.0.15", - "mkdirp": "0.5.1" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "broccoli-less-single": { - "version": "0.6.4", - "resolved": "http://registry.npm.taobao.org/broccoli-less-single/download/broccoli-less-single-0.6.4.tgz", - "integrity": "sha1-IAMW9BRrjPfmq5f8ZhuAhcyJvbk=", - "dev": true, - "requires": { - "broccoli-caching-writer": "2.3.1", - "include-path-searcher": "0.1.0", - "less": "2.7.3", - "lodash.merge": "3.3.2", - "mkdirp": "0.5.1" - }, - "dependencies": { - "broccoli-caching-writer": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/broccoli-caching-writer/download/broccoli-caching-writer-2.3.1.tgz", - "integrity": "sha1-uTz1j5Jk8AMHWGjbBXdPTn8lvQc=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.2.9", - "broccoli-plugin": "1.1.0", - "debug": "2.6.9", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "walk-sync": "0.2.7" - } - }, - "broccoli-kitchen-sink-helpers": { - "version": "0.2.9", - "resolved": "http://registry.npm.taobao.org/broccoli-kitchen-sink-helpers/download/broccoli-kitchen-sink-helpers-0.2.9.tgz", - "integrity": "sha1-peCYbtjXb7WYS2jD8EUNOpbjbsw=", - "dev": true, - "requires": { - "glob": "5.0.15", - "mkdirp": "0.5.1" - } - }, - "broccoli-plugin": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/broccoli-plugin/download/broccoli-plugin-1.1.0.tgz", - "integrity": "sha1-c+LPoF+OoeP8FCDEDD2efcckvwI=", - "dev": true, - "requires": { - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.merge": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/lodash.merge/download/lodash.merge-3.3.2.tgz", - "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=", - "dev": true, - "requires": { - "lodash._arraycopy": "3.0.0", - "lodash._arrayeach": "3.0.0", - "lodash._createassigner": "3.1.1", - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4", - "lodash.isplainobject": "3.2.0", - "lodash.istypedarray": "3.0.6", - "lodash.keys": "3.1.2", - "lodash.keysin": "3.0.8", - "lodash.toplainobject": "3.0.0" - } - }, - "walk-sync": { - "version": "0.2.7", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.2.7.tgz", - "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - } - } - }, - "broccoli-lint-eslint": { - "version": "3.3.1", - "resolved": "http://registry.npm.taobao.org/broccoli-lint-eslint/download/broccoli-lint-eslint-3.3.1.tgz", - "integrity": "sha1-NcZ1VGpaetjzMZ7dcy46rYyiQd4=", - "dev": true, - "requires": { - "aot-test-generators": "0.1.0", - "broccoli-concat": "3.2.2", - "broccoli-persistent-filter": "1.4.3", - "eslint": "3.19.0", - "json-stable-stringify": "1.0.1", - "lodash.defaultsdeep": "4.6.0", - "md5-hex": "2.0.0" - }, - "dependencies": { - "md5-hex": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/md5-hex/download/md5-hex-2.0.0.tgz", - "integrity": "sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM=", - "dev": true, - "requires": { - "md5-o-matic": "0.1.1" - } - } - } - }, - "broccoli-merge-trees": { - "version": "1.2.4", - "resolved": "http://registry.npm.taobao.org/broccoli-merge-trees/download/broccoli-merge-trees-1.2.4.tgz", - "integrity": "sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "can-symlink": "1.0.0", - "fast-ordered-set": "1.0.3", - "fs-tree-diff": "0.5.6", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8" - } - }, - "broccoli-middleware": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-middleware/download/broccoli-middleware-1.0.0.tgz", - "integrity": "sha1-kvTh+5p5HqmGJFpwd/NcxkjasJc=", - "dev": true, - "requires": { - "handlebars": "4.0.10", - "mime": "1.4.1" - } - }, - "broccoli-persistent-filter": { - "version": "1.4.3", - "resolved": "http://registry.npm.taobao.org/broccoli-persistent-filter/download/broccoli-persistent-filter-1.4.3.tgz", - "integrity": "sha1-NRG8UvxTdAzaUWIfWKKBUtmRG8E=", - "dev": true, - "requires": { - "async-disk-cache": "1.3.3", - "async-promise-queue": "1.0.4", - "broccoli-plugin": "1.3.0", - "fs-tree-diff": "0.5.6", - "hash-for-dep": "1.2.0", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "mkdirp": "0.5.1", - "promise-map-series": "0.2.3", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "symlink-or-copy": "1.1.8", - "walk-sync": "0.3.2" - } - }, - "broccoli-plugin": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/broccoli-plugin/download/broccoli-plugin-1.3.0.tgz", - "integrity": "sha1-vucEqOQtoIy1jlE6qkNu+38O8e4=", - "dev": true, - "requires": { - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8" - } - }, - "broccoli-slow-trees": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/broccoli-slow-trees/download/broccoli-slow-trees-3.0.1.tgz", - "integrity": "sha1-m/Kp4vjrPtOj8qvd6YjaQ3zNybQ=", - "dev": true, - "requires": { - "heimdalljs": "0.2.5" - } - }, - "broccoli-source": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/broccoli-source/download/broccoli-source-1.1.0.tgz", - "integrity": "sha1-VPDoLItz9GWAy7xPV48LMvyo+Ak=", - "dev": true - }, - "broccoli-sri-hash": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/broccoli-sri-hash/download/broccoli-sri-hash-2.1.2.tgz", - "integrity": "sha1-vGmQXtejga0yXMDQLe0HEyjr8/M=", - "dev": true, - "requires": { - "broccoli-caching-writer": "2.3.1", - "mkdirp": "0.5.1", - "rsvp": "3.6.2", - "sri-toolbox": "0.2.0", - "symlink-or-copy": "1.1.8" - }, - "dependencies": { - "broccoli-caching-writer": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/broccoli-caching-writer/download/broccoli-caching-writer-2.3.1.tgz", - "integrity": "sha1-uTz1j5Jk8AMHWGjbBXdPTn8lvQc=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.2.9", - "broccoli-plugin": "1.1.0", - "debug": "2.6.9", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "walk-sync": "0.2.7" - } - }, - "broccoli-kitchen-sink-helpers": { - "version": "0.2.9", - "resolved": "http://registry.npm.taobao.org/broccoli-kitchen-sink-helpers/download/broccoli-kitchen-sink-helpers-0.2.9.tgz", - "integrity": "sha1-peCYbtjXb7WYS2jD8EUNOpbjbsw=", - "dev": true, - "requires": { - "glob": "5.0.15", - "mkdirp": "0.5.1" - } - }, - "broccoli-plugin": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/broccoli-plugin/download/broccoli-plugin-1.1.0.tgz", - "integrity": "sha1-c+LPoF+OoeP8FCDEDD2efcckvwI=", - "dev": true, - "requires": { - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "walk-sync": { - "version": "0.2.7", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.2.7.tgz", - "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - } - } - }, - "broccoli-stew": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/broccoli-stew/download/broccoli-stew-1.5.0.tgz", - "integrity": "sha1-16+MGFEdzlEOSdMIpi5Zd/RhiDw=", - "dev": true, - "requires": { - "broccoli-debug": "0.6.3", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "broccoli-plugin": "1.3.0", - "chalk": "1.1.3", - "debug": "2.6.9", - "ensure-posix-path": "1.0.2", - "fs-extra": "2.1.2", - "minimatch": "3.0.4", - "resolve": "1.4.0", - "rsvp": "3.6.2", - "symlink-or-copy": "1.1.8", - "walk-sync": "0.3.2" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - } - } - }, - "broccoli-uglify-sourcemap": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/broccoli-uglify-sourcemap/download/broccoli-uglify-sourcemap-1.5.2.tgz", - "integrity": "sha1-BPhKsNtTkDH6hozPpWPJky1Qzts=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "debug": "2.6.9", - "lodash.merge": "4.6.0", - "matcher-collection": "1.0.5", - "mkdirp": "0.5.1", - "source-map-url": "0.3.0", - "symlink-or-copy": "1.1.8", - "uglify-js": "2.8.29", - "walk-sync": "0.1.3" - }, - "dependencies": { - "walk-sync": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.1.3.tgz", - "integrity": "sha1-igcmGgC9ps+xviXp8QD61XVG9YM=", - "dev": true - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-pack": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/browser-pack/download/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "defined": "1.0.0", - "through2": "2.0.3", - "umd": "3.0.1" - } - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify": { - "version": "13.3.0", - "resolved": "http://registry.npm.taobao.org/browserify/download/browserify-13.3.0.tgz", - "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "assert": "1.4.1", - "browser-pack": "6.0.2", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "0.0.1", - "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.1.2", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.3", - "resolve": "1.4.0", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "subarg": "1.0.0", - "syntax-error": "1.3.0", - "through2": "2.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "browserify-aes": { - "version": "1.0.8", - "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.0.8.tgz", - "integrity": "sha1-yPo7G3WFu3unfFVgtgmW3extUwk=", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.0.8", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "browserslist": { - "version": "2.5.1", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-2.5.1.tgz", - "integrity": "sha1-aOS8U2u8xghtYoQ6L/zOqDloIcY=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000745", - "electron-to-chromium": "1.3.24" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/bser/download/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "0.4.0" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cached-path-relative": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/cached-path-relative/download/cached-path-relative-1.0.1.tgz", - "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", - "dev": true - }, - "calculate-cache-key-for-tree": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/calculate-cache-key-for-tree/download/calculate-cache-key-for-tree-1.1.0.tgz", - "integrity": "sha1-DD5CycE088neU1jA8WeTYn6pdtY=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "can-symlink": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/can-symlink/download/can-symlink-1.0.0.tgz", - "integrity": "sha1-l7YH2KhLtsbiKLkC2GTstZS50hk=", - "dev": true, - "requires": { - "tmp": "0.0.28" - } - }, - "caniuse-lite": { - "version": "1.0.30000745", - "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000745.tgz", - "integrity": "sha1-INb+3hFXpJNRM1ApRvx+DmuIDaU=", - "dev": true - }, - "capture-exit": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/capture-exit/download/capture-exit-1.2.0.tgz", - "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", - "dev": true, - "requires": { - "rsvp": "3.6.2" - } - }, - "cardinal": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/cardinal/download/cardinal-1.0.0.tgz", - "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "dev": true, - "requires": { - "ansicolors": "0.2.1", - "redeyed": "1.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "charm": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/charm/download/charm-1.0.2.tgz", - "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "chokidar": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-1.6.1.tgz", - "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz", - "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", - "dev": true - }, - "clean-base-url": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/clean-base-url/download/clean-base-url-1.0.0.tgz", - "integrity": "sha1-yQHPCiC5ckNbDszVLQVoJKQ1G3s=", - "dev": true - }, - "clean-css": { - "version": "3.4.28", - "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", - "dev": true, - "requires": { - "commander": "2.8.1", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "clean-css-promise": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/clean-css-promise/download/clean-css-promise-0.1.1.tgz", - "integrity": "sha1-Q/PSyN/LK/BxSBJSzZt2QzwI7ss=", - "dev": true, - "requires": { - "array-to-error": "1.1.1", - "clean-css": "3.4.28", - "pinkie-promise": "2.0.1" - } - }, - "cli": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/cli/download/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/cli-table/download/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/colors/download/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - } - } - }, - "cli-table2": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/cli-table2/download/cli-table2-0.2.0.tgz", - "integrity": "sha1-LR738hig54biFFQFYtS9F3/jLZc=", - "dev": true, - "requires": { - "colors": "1.1.2", - "lodash": "3.10.1", - "string-width": "1.0.2" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.0", - "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true, - "optional": true - }, - "combine-source-map": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/combine-source-map/download/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - } - } - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "commoner": { - "version": "0.10.8", - "resolved": "http://registry.npm.taobao.org/commoner/download/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "dev": true, - "requires": { - "commander": "2.8.1", - "detective": "4.5.0", - "glob": "5.0.15", - "graceful-fs": "4.1.11", - "iconv-lite": "0.4.19", - "mkdirp": "0.5.1", - "private": "0.1.7", - "q": "1.5.0", - "recast": "0.11.23" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.11", - "resolved": "http://registry.npm.taobao.org/compressible/download/compressible-2.0.11.tgz", - "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "compression": { - "version": "1.7.1", - "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.11", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - } - } - }, - "configstore": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/configstore/download/configstore-3.1.1.tgz", - "integrity": "sha1-CU7mYquD+tmRdnjeEU+q6o/NypA=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.0.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "console-ui": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/console-ui/download/console-ui-1.0.3.tgz", - "integrity": "sha1-McUkRhtjQidp+eicFzSV2ROTchw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "inquirer": "1.2.3", - "ora": "0.2.3", - "through": "2.3.8" - } - }, - "consolidate": { - "version": "0.14.5", - "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz", - "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", - "dev": true, - "requires": { - "bluebird": "3.5.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", - "dev": true - }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/continuable-cache/download/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-dereference": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/copy-dereference/download/copy-dereference-1.0.0.tgz", - "integrity": "sha1-axMYZUIP2BtBO6mUtE02VTERUrY=", - "dev": true - }, - "core-js": { - "version": "2.5.1", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "dev": true - }, - "core-object": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/core-object/download/core-object-1.1.0.tgz", - "integrity": "sha1-htY5GHM8+doaWq5ynmLAqI5mrQo=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.11.1.tgz", - "integrity": "sha1-lIlF78Z1ekANbl5a9HGU0QBkJ58=", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/d/download/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.30" - } - }, - "dag-map": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/dag-map/download/dag-map-2.0.2.tgz", - "integrity": "sha1-lxS0ct6CoYQ94vuptodpOMq0TGg=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defined": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "defs": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/defs/download/defs-1.1.1.tgz", - "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", - "dev": true, - "requires": { - "alter": "0.2.0", - "ast-traverse": "0.1.1", - "breakable": "1.0.0", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "simple-fmt": "0.1.0", - "simple-is": "0.2.0", - "stringmap": "0.2.2", - "stringset": "0.2.1", - "tryor": "0.1.2", - "yargs": "3.27.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "http://registry.npm.taobao.org/esprima-fb/download/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - }, - "window-size": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.27.0", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.27.0.tgz", - "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "window-size": "0.1.4", - "y18n": "3.2.1" - } - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "http://registry.npm.taobao.org/del/download/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "deps-sort": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/deps-sort/download/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.3" - } - }, - "derequire": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/derequire/download/derequire-2.0.6.tgz", - "integrity": "sha1-MaQUu3yhdiOfp4sRZjbvd9UX52g=", - "dev": true, - "requires": { - "acorn": "4.0.13", - "concat-stream": "1.5.2", - "escope": "3.6.0", - "through2": "2.0.3", - "yargs": "6.6.0" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/detect-file/download/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "0.1.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "detective": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/detective/download/detective-4.5.0.tgz", - "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", - "dev": true, - "requires": { - "acorn": "4.0.13", - "defined": "1.0.0" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "diff": { - "version": "3.4.0", - "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.4.0.tgz", - "integrity": "sha1-sdhVB9rzlkgo3lSzfQ1zumfdpWw=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" - } - }, - "doctrine": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", - "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "editions": { - "version": "1.3.3", - "resolved": "http://registry.npm.taobao.org/editions/download/editions-1.3.3.tgz", - "integrity": "sha1-CQcQG92iD6w8vjNMJ8vQaI3Jmls=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.24", - "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.24.tgz", - "integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "ember-ajax": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/ember-ajax/download/ember-ajax-3.0.0.tgz", - "integrity": "sha1-jyHp2gwdQzz4eaqFX85GTVF+mrU=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2" - } - }, - "ember-browserify": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/ember-browserify/download/ember-browserify-1.2.0.tgz", - "integrity": "sha1-x3SJbcRKssXGCCJvMWKJlDSKP9U=", - "dev": true, - "requires": { - "acorn": "5.1.2", - "broccoli-caching-writer": "3.0.3", - "broccoli-kitchen-sink-helpers": "0.3.1", - "broccoli-merge-trees": "1.2.4", - "broccoli-plugin": "1.3.0", - "browserify": "13.3.0", - "core-object": "1.1.0", - "debug": "2.6.9", - "derequire": "2.0.6", - "ember-cli-version-checker": "1.3.1", - "fs-tree": "1.0.0", - "fs-tree-diff": "0.5.6", - "lodash": "4.17.4", - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "symlink-or-copy": "1.1.8", - "through2": "2.0.3", - "walk-sync": "0.2.7" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "walk-sync": { - "version": "0.2.7", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.2.7.tgz", - "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - } - } - }, - "ember-cli": { - "version": "2.14.2", - "resolved": "http://registry.npm.taobao.org/ember-cli/download/ember-cli-2.14.2.tgz", - "integrity": "sha1-8sjHXUhs5sxrf/vCLr74syuyQrc=", - "dev": true, - "requires": { - "amd-name-resolver": "0.0.6", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "bower-config": "1.4.1", - "bower-endpoint-parser": "0.2.2", - "broccoli-babel-transpiler": "6.1.2", - "broccoli-brocfile-loader": "0.18.0", - "broccoli-builder": "0.18.8", - "broccoli-concat": "3.2.2", - "broccoli-config-loader": "1.0.1", - "broccoli-config-replace": "1.1.2", - "broccoli-funnel": "1.2.0", - "broccoli-funnel-reducer": "1.0.0", - "broccoli-merge-trees": "2.0.0", - "broccoli-middleware": "1.0.0", - "broccoli-source": "1.1.0", - "broccoli-stew": "1.5.0", - "calculate-cache-key-for-tree": "1.1.0", - "capture-exit": "1.2.0", - "chalk": "1.1.3", - "clean-base-url": "1.0.0", - "compression": "1.7.1", - "configstore": "3.1.1", - "console-ui": "1.0.3", - "core-object": "3.1.5", - "dag-map": "2.0.2", - "diff": "3.4.0", - "ember-cli-broccoli-sane-watcher": "2.0.4", - "ember-cli-get-component-path-option": "1.0.0", - "ember-cli-is-package-missing": "1.0.0", - "ember-cli-legacy-blueprints": "0.1.5", - "ember-cli-lodash-subset": "1.0.12", - "ember-cli-normalize-entity-name": "1.0.0", - "ember-cli-preprocess-registry": "3.1.1", - "ember-cli-string-utils": "1.1.0", - "ember-try": "0.2.17", - "ensure-posix-path": "1.0.2", - "escape-string-regexp": "1.0.5", - "execa": "0.6.3", - "exists-sync": "0.0.4", - "exit": "0.1.2", - "express": "4.16.1", - "filesize": "3.5.10", - "find-up": "2.1.0", - "fs-extra": "3.0.1", - "fs-tree-diff": "0.5.6", - "get-caller-file": "1.0.2", - "git-repo-info": "1.4.1", - "glob": "7.1.1", - "heimdalljs": "0.2.5", - "heimdalljs-fs-monitor": "0.1.0", - "heimdalljs-graph": "0.3.3", - "heimdalljs-logger": "0.1.9", - "http-proxy": "1.16.2", - "inflection": "1.12.0", - "is-git-url": "0.2.3", - "isbinaryfile": "3.0.2", - "js-yaml": "3.10.0", - "json-stable-stringify": "1.0.1", - "leek": "0.0.24", - "lodash.template": "4.4.0", - "markdown-it": "8.4.0", - "markdown-it-terminal": "0.1.0", - "minimatch": "3.0.4", - "morgan": "1.9.0", - "node-modules-path": "1.0.1", - "nopt": "3.0.6", - "npm-package-arg": "4.2.1", - "portfinder": "1.0.13", - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "resolve": "1.4.0", - "rsvp": "3.6.2", - "sane": "1.7.0", - "semver": "5.4.1", - "silent-error": "1.1.0", - "sort-package-json": "1.7.1", - "symlink-or-copy": "1.1.8", - "temp": "0.8.3", - "testem": "1.18.4", - "tiny-lr": "1.0.5", - "tree-sync": "1.2.2", - "uuid": "3.1.0", - "validate-npm-package-name": "3.0.0", - "walk-sync": "0.3.2", - "yam": "0.0.22" - }, - "dependencies": { - "amd-name-resolver": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/amd-name-resolver/download/amd-name-resolver-0.0.6.tgz", - "integrity": "sha1-0+S6Lfyqsdggwb6d6UfGeCjP5ZU=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2" - } - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", - "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "broccoli-merge-trees": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-merge-trees/download/broccoli-merge-trees-2.0.0.tgz", - "integrity": "sha1-EK6kbdXOvMi499WlTwqEpPC7kLk=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "merge-trees": "1.0.1" - } - }, - "core-object": { - "version": "3.1.5", - "resolved": "http://registry.npm.taobao.org/core-object/download/core-object-3.1.5.tgz", - "integrity": "sha1-+mJ7h1Aq3JgEXkRnjpqOw7nA0qk=", - "dev": true, - "requires": { - "chalk": "2.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.1.0.tgz", - "integrity": "sha1-rFvs8U+iG5nGySynp9fP1bF+dD4=", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "glob": { - "version": "7.1.1", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.4.0.tgz", - "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "ember-cli-app-version": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-app-version/download/ember-cli-app-version-3.1.0.tgz", - "integrity": "sha1-B0sDMFgae4qwlP8H/vs04NAlS/0=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2", - "git-repo-version": "0.4.1" - } - }, - "ember-cli-babel": { - "version": "6.8.2", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-6.8.2.tgz", - "integrity": "sha1-6sJ4WWT0dD9MgVzVPGKI8AzAh9c=", - "dev": true, - "requires": { - "amd-name-resolver": "0.0.7", - "babel-plugin-debug-macros": "0.1.11", - "babel-plugin-ember-modules-api-polyfill": "2.1.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-polyfill": "6.26.0", - "babel-preset-env": "1.6.0", - "broccoli-babel-transpiler": "6.1.2", - "broccoli-debug": "0.6.3", - "broccoli-funnel": "1.2.0", - "broccoli-source": "1.1.0", - "clone": "2.1.1", - "ember-cli-version-checker": "2.1.0" - } - }, - "ember-cli-broccoli-sane-watcher": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-broccoli-sane-watcher/download/ember-cli-broccoli-sane-watcher-2.0.4.tgz", - "integrity": "sha1-9D9C91t1CcIS+5Js2a6oauGSZMY=", - "dev": true, - "requires": { - "broccoli-slow-trees": "3.0.1", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "rsvp": "3.6.2", - "sane": "1.7.0" - } - }, - "ember-cli-dependency-checker": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-dependency-checker/download/ember-cli-dependency-checker-1.4.0.tgz", - "integrity": "sha1-KxP5d+HuqEP8GiGgAb5spdTvGUI=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "is-git-url": "0.2.3", - "semver": "4.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "http://registry.npm.taobao.org/semver/download/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - } - } - }, - "ember-cli-eslint": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-eslint/download/ember-cli-eslint-3.1.0.tgz", - "integrity": "sha1-jZ4qhnZUg1rBskhY2RF+FD+lS9Q=", - "dev": true, - "requires": { - "broccoli-lint-eslint": "3.3.1", - "ember-cli-version-checker": "1.3.1", - "rsvp": "3.6.2", - "walk-sync": "0.3.2" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - } - } - }, - "ember-cli-get-component-path-option": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-get-component-path-option/download/ember-cli-get-component-path-option-1.0.0.tgz", - "integrity": "sha1-DXtZVVni+QUKvtgE8djv8bCLx3E=", - "dev": true - }, - "ember-cli-get-dependency-depth": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-get-dependency-depth/download/ember-cli-get-dependency-depth-1.0.0.tgz", - "integrity": "sha1-4K/s+CotUvAPKKtGgpUoGuw2jRE=", - "dev": true - }, - "ember-cli-htmlbars": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/ember-cli-htmlbars/download/ember-cli-htmlbars-2.0.3.tgz", - "integrity": "sha1-4RbhUA26EvKclLBbnskPUsuLsEI=", - "dev": true, - "requires": { - "broccoli-persistent-filter": "1.4.3", - "hash-for-dep": "1.2.0", - "json-stable-stringify": "1.0.1", - "strip-bom": "3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "ember-cli-htmlbars-inline-precompile": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-htmlbars-inline-precompile/download/ember-cli-htmlbars-inline-precompile-0.4.4.tgz", - "integrity": "sha1-JKdhcVJjDWSgR+VTty4AljpPjXM=", - "dev": true, - "requires": { - "babel-plugin-htmlbars-inline-precompile": "0.2.3", - "ember-cli-version-checker": "2.1.0", - "hash-for-dep": "1.2.0", - "silent-error": "1.1.0" - } - }, - "ember-cli-inject-live-reload": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-inject-live-reload/download/ember-cli-inject-live-reload-1.7.0.tgz", - "integrity": "sha1-r5QzbgFTNhJ9+5gICtRCuyM+N+0=", - "dev": true - }, - "ember-cli-is-package-missing": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-is-package-missing/download/ember-cli-is-package-missing-1.0.0.tgz", - "integrity": "sha1-bmGEyvuSY13ZPKbJRrEEKS1OM5A=", - "dev": true - }, - "ember-cli-jshint": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/ember-cli-jshint/download/ember-cli-jshint-1.0.5.tgz", - "integrity": "sha1-igGF8Zy9cTaZXuaskpQaVg4mW5E=", - "dev": true, - "requires": { - "broccoli-jshint": "1.2.0" - } - }, - "ember-cli-legacy-blueprints": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/ember-cli-legacy-blueprints/download/ember-cli-legacy-blueprints-0.1.5.tgz", - "integrity": "sha1-k8FcokLsUQfWKor37DD2rFOPOtk=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "ember-cli-get-component-path-option": "1.0.0", - "ember-cli-get-dependency-depth": "1.0.0", - "ember-cli-is-package-missing": "1.0.0", - "ember-cli-lodash-subset": "1.0.12", - "ember-cli-normalize-entity-name": "1.0.0", - "ember-cli-path-utils": "1.0.0", - "ember-cli-string-utils": "1.1.0", - "ember-cli-test-info": "1.0.0", - "ember-cli-valid-component-name": "1.0.0", - "ember-cli-version-checker": "1.3.1", - "ember-router-generator": "1.2.3", - "exists-sync": "0.0.3", - "fs-extra": "0.24.0", - "inflection": "1.12.0", - "rsvp": "3.6.2", - "silent-error": "1.1.0" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "exists-sync": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/exists-sync/download/exists-sync-0.0.3.tgz", - "integrity": "sha1-uRAAC+27ETs3i4L19adjgQdiLc8=", - "dev": true - }, - "fs-extra": { - "version": "0.24.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.24.0.tgz", - "integrity": "sha1-1OQ0KpZnXLeEZjOmCZJJMytTmVI=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - } - } - }, - "ember-cli-less": { - "version": "1.5.5", - "resolved": "http://registry.npm.taobao.org/ember-cli-less/download/ember-cli-less-1.5.5.tgz", - "integrity": "sha1-TRVEepEwoNfEHbX/tNg6c/gtCQM=", - "dev": true, - "requires": { - "broccoli-less-single": "0.6.4", - "broccoli-merge-trees": "1.2.4", - "ember-cli-version-checker": "1.3.1", - "lodash.merge": "3.3.2" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.merge": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/lodash.merge/download/lodash.merge-3.3.2.tgz", - "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=", - "dev": true, - "requires": { - "lodash._arraycopy": "3.0.0", - "lodash._arrayeach": "3.0.0", - "lodash._createassigner": "3.1.1", - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4", - "lodash.isplainobject": "3.2.0", - "lodash.istypedarray": "3.0.6", - "lodash.keys": "3.1.2", - "lodash.keysin": "3.0.8", - "lodash.toplainobject": "3.0.0" - } - } - } - }, - "ember-cli-lodash-subset": { - "version": "1.0.12", - "resolved": "http://registry.npm.taobao.org/ember-cli-lodash-subset/download/ember-cli-lodash-subset-1.0.12.tgz", - "integrity": "sha1-ry5366XcsNd/MwjTpv19NFD25Tc=", - "dev": true - }, - "ember-cli-moment-shim": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-moment-shim/download/ember-cli-moment-shim-1.2.0.tgz", - "integrity": "sha1-UUHGDP5LKCuUIdMsGYtESqveMLQ=", - "dev": true, - "requires": { - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-stew": "1.5.0", - "chalk": "1.1.3", - "ember-cli-babel": "5.2.4", - "exists-sync": "0.0.3", - "lodash.defaults": "3.1.2", - "moment": "2.18.1", - "moment-timezone": "0.5.14" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.4", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.4.tgz", - "integrity": "sha1-KwYRzp5dmLjY0rSa4SGa8vUnZ+M=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.4", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "exists-sync": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/exists-sync/download/exists-sync-0.0.3.tgz", - "integrity": "sha1-uRAAC+27ETs3i4L19adjgQdiLc8=", - "dev": true - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.defaults/download/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "dev": true, - "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-cli-normalize-entity-name": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-normalize-entity-name/download/ember-cli-normalize-entity-name-1.0.0.tgz", - "integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=", - "dev": true, - "requires": { - "silent-error": "1.1.0" - } - }, - "ember-cli-path-utils": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-path-utils/download/ember-cli-path-utils-1.0.0.tgz", - "integrity": "sha1-Tjmvi1UwHN3FAXc5t3qAT7ogce0=", - "dev": true - }, - "ember-cli-preprocess-registry": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-preprocess-registry/download/ember-cli-preprocess-registry-3.1.1.tgz", - "integrity": "sha1-OEVsIcTStklFhQz57Gjba6dpKIo=", - "dev": true, - "requires": { - "broccoli-clean-css": "1.1.0", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "debug": "2.6.9", - "ember-cli-lodash-subset": "1.0.12", - "exists-sync": "0.0.3", - "process-relative-require": "1.0.0", - "silent-error": "1.1.0" - }, - "dependencies": { - "exists-sync": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/exists-sync/download/exists-sync-0.0.3.tgz", - "integrity": "sha1-uRAAC+27ETs3i4L19adjgQdiLc8=", - "dev": true - } - } - }, - "ember-cli-qunit": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-qunit/download/ember-cli-qunit-4.0.1.tgz", - "integrity": "sha1-kFqgdiCun9tBfH5I1FvSJ3ti+GQ=", - "dev": true, - "requires": { - "broccoli-funnel": "2.0.1", - "broccoli-merge-trees": "2.0.0", - "ember-cli-babel": "6.8.2", - "ember-cli-test-loader": "2.2.0", - "ember-cli-version-checker": "2.1.0", - "ember-qunit": "2.2.0", - "qunit-notifications": "0.1.1", - "qunitjs": "2.4.0", - "resolve": "1.4.0", - "silent-error": "1.1.0" - }, - "dependencies": { - "broccoli-funnel": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/broccoli-funnel/download/broccoli-funnel-2.0.1.tgz", - "integrity": "sha1-aCPHO2de94//p6uADwg+dotR1Ek=", - "dev": true, - "requires": { - "array-equal": "1.0.0", - "blank-object": "1.0.2", - "broccoli-plugin": "1.3.0", - "debug": "2.6.9", - "fast-ordered-set": "1.0.3", - "fs-tree-diff": "0.5.6", - "heimdalljs": "0.2.5", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "path-posix": "1.0.0", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8", - "walk-sync": "0.3.2" - } - }, - "broccoli-merge-trees": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-merge-trees/download/broccoli-merge-trees-2.0.0.tgz", - "integrity": "sha1-EK6kbdXOvMi499WlTwqEpPC7kLk=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "merge-trees": "1.0.1" - } - } - } - }, - "ember-cli-release": { - "version": "0.2.8", - "resolved": "http://registry.npm.taobao.org/ember-cli-release/download/ember-cli-release-0.2.8.tgz", - "integrity": "sha1-6f3dBgWMDzvC6lerJmfpYR+PsgU=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "git-tools": "0.1.4", - "make-array": "0.1.2", - "merge": "1.2.0", - "moment-timezone": "0.3.1", - "nopt": "3.0.6", - "rsvp": "3.6.2", - "semver": "4.3.6", - "silent-error": "1.1.0" - }, - "dependencies": { - "moment-timezone": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/moment-timezone/download/moment-timezone-0.3.1.tgz", - "integrity": "sha1-PvR4VrAtU7cYoQpewgI6opnge/U=", - "dev": true, - "requires": { - "moment": "2.18.1" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "http://registry.npm.taobao.org/semver/download/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - } - } - }, - "ember-cli-shims": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-shims/download/ember-cli-shims-1.1.0.tgz", - "integrity": "sha1-DjuKBIvoZbT4HMgdOX/x7rE/dbY=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2", - "ember-cli-version-checker": "1.3.1", - "silent-error": "1.1.0" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - } - } - }, - "ember-cli-sri": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-sri/download/ember-cli-sri-2.1.1.tgz", - "integrity": "sha1-lxYgk0pLkYPPeSPMA+F4uDqpB/0=", - "dev": true, - "requires": { - "broccoli-sri-hash": "2.1.2" - } - }, - "ember-cli-string-utils": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-string-utils/download/ember-cli-string-utils-1.1.0.tgz", - "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", - "dev": true - }, - "ember-cli-test-info": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-test-info/download/ember-cli-test-info-1.0.0.tgz", - "integrity": "sha1-7U6WDySel1I8+JHkrtIHLOhFd7Q=", - "dev": true, - "requires": { - "ember-cli-string-utils": "1.1.0" - } - }, - "ember-cli-test-loader": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-test-loader/download/ember-cli-test-loader-2.2.0.tgz", - "integrity": "sha1-P7jV0TV+RGDT8KCS9Tdecbb3wkM=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2" - } - }, - "ember-cli-uglify": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-uglify/download/ember-cli-uglify-1.2.0.tgz", - "integrity": "sha1-MgjDK1S8J4MFbouw1c/pu68X/7I=", - "dev": true, - "requires": { - "broccoli-uglify-sourcemap": "1.5.2" - } - }, - "ember-cli-valid-component-name": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-valid-component-name/download/ember-cli-valid-component-name-1.0.0.tgz", - "integrity": "sha1-cVUM44fgIzBl8wswsVEKot++h+8=", - "dev": true, - "requires": { - "silent-error": "1.1.0" - } - }, - "ember-cli-version-checker": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-2.1.0.tgz", - "integrity": "sha1-/HmlYDLzcXz4RK2ny97BoG/ttgQ=", - "dev": true, - "requires": { - "resolve": "1.4.0", - "semver": "5.4.1" - } - }, - "ember-export-application-global": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ember-export-application-global/download/ember-export-application-global-2.0.0.tgz", - "integrity": "sha1-jW12GayKGj+MQwA1Sesh6+1oW9I=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2" - } - }, - "ember-factory-for-polyfill": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/ember-factory-for-polyfill/download/ember-factory-for-polyfill-1.2.0.tgz", - "integrity": "sha1-4ndSp9nb1TNui0cDQbwcVbvj5NI=", - "dev": true, - "requires": { - "ember-cli-version-checker": "1.3.1" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - } - } - }, - "ember-getowner-polyfill": { - "version": "1.2.5", - "resolved": "http://registry.npm.taobao.org/ember-getowner-polyfill/download/ember-getowner-polyfill-1.2.5.tgz", - "integrity": "sha1-zv+KCYl9DX4FyCG7cWZqlesm3JI=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4", - "ember-cli-version-checker": "1.3.1", - "ember-factory-for-polyfill": "1.2.0" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.2", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.2.tgz", - "integrity": "sha1-dWwwVEd1FE6YQzO3EV9CyRa6COA=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.2", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-load-initializers": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ember-load-initializers/download/ember-load-initializers-1.0.0.tgz", - "integrity": "sha1-SRnq8G9t/sp+E0Yz2MBabJkh5uc=", - "dev": true, - "requires": { - "ember-cli-babel": "6.8.2" - } - }, - "ember-moment": { - "version": "6.1.0", - "resolved": "http://registry.npm.taobao.org/ember-moment/download/ember-moment-6.1.0.tgz", - "integrity": "sha1-XC50SOIgB/mDnEHgW9MBOp66KoI=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.4", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.4.tgz", - "integrity": "sha1-KwYRzp5dmLjY0rSa4SGa8vUnZ+M=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.4", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-qunit": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/ember-qunit/download/ember-qunit-2.2.0.tgz", - "integrity": "sha1-PN9AADHJOjjeeBpzBIGXOHU7f5k=", - "dev": true, - "requires": { - "ember-test-helpers": "0.6.3" - } - }, - "ember-radio-button": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/ember-radio-button/download/ember-radio-button-1.1.1.tgz", - "integrity": "sha1-5a6DYf8DKk8b6RqBApXhlusqz5c=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4", - "ember-cli-htmlbars": "1.3.4" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.2", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.2.tgz", - "integrity": "sha1-dWwwVEd1FE6YQzO3EV9CyRa6COA=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.2", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-htmlbars": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-htmlbars/download/ember-cli-htmlbars-1.3.4.tgz", - "integrity": "sha1-RhKJcks0rzcqagxLZjWBkVaWM1M=", - "dev": true, - "requires": { - "broccoli-persistent-filter": "1.4.3", - "ember-cli-version-checker": "1.3.1", - "hash-for-dep": "1.2.0", - "json-stable-stringify": "1.0.1", - "strip-bom": "2.0.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-resolver": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/ember-resolver/download/ember-resolver-4.5.0.tgz", - "integrity": "sha1-kki/U038GX+v4xGP/1ONQ2B4v5k=", - "dev": true, - "requires": { - "@glimmer/resolver": "0.4.1", - "babel-plugin-debug-macros": "0.1.11", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "2.0.0", - "ember-cli-babel": "6.8.2", - "ember-cli-version-checker": "2.1.0", - "resolve": "1.4.0" - }, - "dependencies": { - "broccoli-merge-trees": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-merge-trees/download/broccoli-merge-trees-2.0.0.tgz", - "integrity": "sha1-EK6kbdXOvMi499WlTwqEpPC7kLk=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "merge-trees": "1.0.1" - } - } - } - }, - "ember-rfc176-data": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/ember-rfc176-data/download/ember-rfc176-data-0.3.0.tgz", - "integrity": "sha1-au5yjLUhxfgHEJkJZQJ7nDIPbwg=", - "dev": true - }, - "ember-route-action-helper": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/ember-route-action-helper/download/ember-route-action-helper-2.0.3.tgz", - "integrity": "sha1-tfhf65D/mvNlZbsVLFuiWbu19ls=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4", - "ember-getowner-polyfill": "1.2.5" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.2", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.2.tgz", - "integrity": "sha1-dWwwVEd1FE6YQzO3EV9CyRa6COA=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.2", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-router-generator": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/ember-router-generator/download/ember-router-generator-1.2.3.tgz", - "integrity": "sha1-jtLKhv8yM2MSD8FCeBkeno8TFe4=", - "dev": true, - "requires": { - "recast": "0.11.23" - } - }, - "ember-source": { - "version": "2.16.2", - "resolved": "http://registry.npm.taobao.org/ember-source/download/ember-source-2.16.2.tgz", - "integrity": "sha1-68Kc423sPsyA9rGwIhjWPKUEEIg=", - "dev": true, - "requires": { - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "2.0.0", - "ember-cli-get-component-path-option": "1.0.0", - "ember-cli-is-package-missing": "1.0.0", - "ember-cli-normalize-entity-name": "1.0.0", - "ember-cli-path-utils": "1.0.0", - "ember-cli-string-utils": "1.1.0", - "ember-cli-test-info": "1.0.0", - "ember-cli-valid-component-name": "1.0.0", - "ember-cli-version-checker": "1.3.1", - "ember-router-generator": "1.2.3", - "fs-extra": "4.0.3", - "inflection": "1.12.0", - "jquery": "3.3.1", - "resolve": "1.4.0" - }, - "dependencies": { - "broccoli-merge-trees": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/broccoli-merge-trees/download/broccoli-merge-trees-2.0.0.tgz", - "integrity": "sha1-EK6kbdXOvMi499WlTwqEpPC7kLk=", - "dev": true, - "requires": { - "broccoli-plugin": "1.3.0", - "merge-trees": "1.0.1" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz", - "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - } - } - }, - "ember-test-helpers": { - "version": "0.6.3", - "resolved": "http://registry.npm.taobao.org/ember-test-helpers/download/ember-test-helpers-0.6.3.tgz", - "integrity": "sha1-+GTN9vTnXz+HaNZTd4W1q26C2Qc=", - "dev": true - }, - "ember-truth-helpers": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ember-truth-helpers/download/ember-truth-helpers-1.1.0.tgz", - "integrity": "sha1-fP9Z+mPiW2njRe9YvqqklRLK9Jk=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.2", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.2.tgz", - "integrity": "sha1-dWwwVEd1FE6YQzO3EV9CyRa6COA=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.2", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "ember-try": { - "version": "0.2.17", - "resolved": "http://registry.npm.taobao.org/ember-try/download/ember-try-0.2.17.tgz", - "integrity": "sha1-D//2h2MCkbTPlPWxlucowaktiuw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-table2": "0.2.0", - "core-object": "1.1.0", - "debug": "2.6.9", - "ember-cli-version-checker": "1.3.1", - "ember-try-config": "2.1.0", - "extend": "3.0.1", - "fs-extra": "0.26.7", - "promise-map-series": "0.2.3", - "resolve": "1.4.0", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "semver": "5.4.1" - }, - "dependencies": { - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "fs-extra": { - "version": "0.26.7", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - } - } - }, - "ember-try-config": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/ember-try-config/download/ember-try-config-2.1.0.tgz", - "integrity": "sha1-4OFWIppUI0aljub2rWBRBMmO3+A=", - "dev": true, - "requires": { - "lodash": "4.17.4", - "node-fetch": "1.7.3", - "rsvp": "3.6.2", - "semver": "5.4.1" - } - }, - "emberx-select": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/emberx-select/download/emberx-select-3.0.1.tgz", - "integrity": "sha1-jayij3q4NS5gowzGF6+kWzww84g=", - "dev": true, - "requires": { - "ember-cli-babel": "5.2.4", - "ember-cli-htmlbars": "1.3.4", - "ember-cli-version-checker": "1.3.1" - }, - "dependencies": { - "babel-core": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", - "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.4.0", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" - } - }, - "babylon": { - "version": "5.8.38", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "broccoli-babel-transpiler": { - "version": "5.7.4", - "resolved": "http://registry.npm.taobao.org/broccoli-babel-transpiler/download/broccoli-babel-transpiler-5.7.4.tgz", - "integrity": "sha1-KwYRzp5dmLjY0rSa4SGa8vUnZ+M=", - "dev": true, - "requires": { - "babel-core": "5.8.38", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "0.2.0", - "hash-for-dep": "1.2.0", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-babel/download/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "5.7.4", - "broccoli-funnel": "1.2.0", - "clone": "2.1.1", - "ember-cli-version-checker": "1.3.1", - "resolve": "1.4.0" - } - }, - "ember-cli-htmlbars": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/ember-cli-htmlbars/download/ember-cli-htmlbars-1.3.4.tgz", - "integrity": "sha1-RhKJcks0rzcqagxLZjWBkVaWM1M=", - "dev": true, - "requires": { - "broccoli-persistent-filter": "1.4.3", - "ember-cli-version-checker": "1.3.1", - "hash-for-dep": "1.2.0", - "json-stable-stringify": "1.0.1", - "strip-bom": "2.0.0" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/ember-cli-version-checker/download/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "globals": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" - } - }, - "js-tokens": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "source-map": { - "version": "0.1.32", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - } - } - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "http://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "engine.io": { - "version": "1.8.0", - "resolved": "http://registry.npm.taobao.org/engine.io/download/engine.io-1.8.0.tgz", - "integrity": "sha1-PutfJky3XbvsG6rqJtYfWk6s4qo=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "0.1.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.1", - "ws": "1.1.1" - }, - "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "debug": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.0", - "resolved": "http://registry.npm.taobao.org/engine.io-client/download/engine.io-client-1.8.0.tgz", - "integrity": "sha1-e3MOQSdBQIdZbZvjyI0rxf22z1w=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.1", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-1.3.1.tgz", - "integrity": "sha1-lVTxrjMQfW+9FwylRm0vgz9qB88=", - "dev": true, - "requires": { - "after": "0.8.1", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.6", - "wtf-8": "1.0.0" - }, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/has-binary/download/has-binary-0.1.6.tgz", - "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "ensure-posix-path": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/ensure-posix-path/download/ensure-posix-path-1.0.2.tgz", - "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/errno/download/errno-0.1.6.tgz", - "integrity": "sha1-w4bOimKD8U/AlWO3FWCQjJv1MCY=", - "dev": true, - "optional": true, - "requires": { - "prr": "1.0.1" - } - }, - "error": { - "version": "7.0.2", - "resolved": "http://registry.npm.taobao.org/error/download/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es5-ext": { - "version": "0.10.30", - "resolved": "http://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.30.tgz", - "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", - "dev": true, - "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "http://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "http://registry.npm.taobao.org/eslint/download/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.5.2", - "debug": "2.6.9", - "doctrine": "2.0.0", - "escope": "3.6.0", - "espree": "3.5.1", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.1", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "espree": { - "version": "3.5.1", - "resolved": "http://registry.npm.taobao.org/espree/download/espree-3.5.1.tgz", - "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", - "dev": true, - "requires": { - "acorn": "5.1.2", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/esquery/download/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "http://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/eventemitter3/download/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/events-to-array/download/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "exec-sh": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.1.tgz", - "integrity": "sha1-FjuYpuiea2W0fCoo0hW8H2OYnDg=", - "dev": true, - "requires": { - "merge": "1.2.0" - } - }, - "execa": { - "version": "0.6.3", - "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.6.3.tgz", - "integrity": "sha1-V7aaWU8IF1nGnlNw8NF7nLEWWP4=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "exists-stat": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/exists-stat/download/exists-stat-1.0.0.tgz", - "integrity": "sha1-BmDjUlouidnkRhKUQMJy7foktSk=", - "dev": true - }, - "exists-sync": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/exists-sync/download/exists-sync-0.0.4.tgz", - "integrity": "sha1-l0TCxCjMA7AQYNtFTUsS8O88iHk=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/expand-tilde/download/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "express": { - "version": "4.16.1", - "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.1.tgz", - "integrity": "sha1-azO1YBg8myU7e2IUTfM6RlSsntA=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "external-editor": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "dev": true, - "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" - }, - "dependencies": { - "tmp": { - "version": "0.0.29", - "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - } - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-ordered-set": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/fast-ordered-set/download/fast-ordered-set-1.0.3.tgz", - "integrity": "sha1-P7s2Y097555PftvbSjV97iXRhOs=", - "dev": true, - "requires": { - "blank-object": "1.0.2" - } - }, - "fast-sourcemap-concat": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/fast-sourcemap-concat/download/fast-sourcemap-concat-1.2.3.tgz", - "integrity": "sha1-IvFOktc543kgM0N27IQzv2deqgQ=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "fs-extra": "0.30.0", - "heimdalljs-logger": "0.1.9", - "memory-streams": "0.1.2", - "mkdirp": "0.5.1", - "rsvp": "3.6.2", - "source-map": "0.4.4", - "source-map-url": "0.3.0", - "sourcemap-validator": "1.0.6" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - } - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filesize": { - "version": "3.5.10", - "resolved": "http://registry.npm.taobao.org/filesize/download/filesize-3.5.10.tgz", - "integrity": "sha1-/I+iPdtO+eXgq24eZPZ5okpWdh8=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "find-index": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/find-index/download/find-index-1.1.0.tgz", - "integrity": "sha1-UwB8ec0wBA1oFteUWOiDfVxXBe8=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "http://registry.npm.taobao.org/findup-sync/download/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fireworm": { - "version": "0.7.1", - "resolved": "http://registry.npm.taobao.org/fireworm/download/fireworm-0.7.1.tgz", - "integrity": "sha1-zPIPeUHxCIg/zduZOD2+bhhhx1g=", - "dev": true, - "requires": { - "async": "0.2.10", - "is-type": "0.0.1", - "lodash.debounce": "3.1.1", - "lodash.flatten": "3.0.2", - "minimatch": "3.0.4" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/fs-exists-sync/download/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" - }, - "dependencies": { - "jsonfile": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - } - } - }, - "fs-readdir-recursive": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/fs-readdir-recursive/download/fs-readdir-recursive-0.1.2.tgz", - "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", - "dev": true - }, - "fs-tree": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/fs-tree/download/fs-tree-1.0.0.tgz", - "integrity": "sha1-72TaPm3TLMDfJ8Oz4MKZ/6V1wCY=", - "dev": true, - "requires": { - "mkdirp": "0.5.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "fs-tree-diff": { - "version": "0.5.6", - "resolved": "http://registry.npm.taobao.org/fs-tree-diff/download/fs-tree-diff-0.5.6.tgz", - "integrity": "sha1-NCZldJ6NykBoALZyJoyPUHPz5iM=", - "dev": true, - "requires": { - "heimdalljs-logger": "0.1.9", - "object-assign": "4.1.1", - "path-posix": "1.0.0", - "symlink-or-copy": "1.1.8" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.1.2.tgz", - "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=", - "dev": true, - "optional": true, - "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "git-repo-info": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/git-repo-info/download/git-repo-info-1.4.1.tgz", - "integrity": "sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM=", - "dev": true - }, - "git-repo-version": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/git-repo-version/download/git-repo-version-0.4.1.tgz", - "integrity": "sha1-dfq5oKTshHB1Ww7qf9qm+dQUU78=", - "dev": true, - "requires": { - "git-repo-info": "1.2.0" - }, - "dependencies": { - "git-repo-info": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/git-repo-info/download/git-repo-info-1.2.0.tgz", - "integrity": "sha1-Q9hRPgSiTdRBMwovfGZVpwn9uvI=", - "dev": true - } - } - }, - "git-tools": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/git-tools/download/git-tools-0.1.4.tgz", - "integrity": "sha1-XkPllEO4pd7bOdumY9pJ55+UOXg=", - "dev": true, - "requires": { - "spawnback": "1.0.0" - } - }, - "glob": { - "version": "4.5.3", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" - }, - "dependencies": { - "minimatch": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/global-modules/download/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/global-prefix/download/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.3.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz", - "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "http://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.0.10", - "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/has-binary/download/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/has-color/download/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "has-cors": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hash-base": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "hash-for-dep": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/hash-for-dep/download/hash-for-dep-1.2.0.tgz", - "integrity": "sha1-O9uIOu8NNOggl+8vcQmxtAHK2ms=", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "resolve": "1.4.0" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.3.tgz", - "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "heimdalljs": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/heimdalljs/download/heimdalljs-0.2.5.tgz", - "integrity": "sha1-aqVDCO7nk7ZCz/nPlHgURfN3MKw=", - "dev": true, - "requires": { - "rsvp": "3.2.1" - }, - "dependencies": { - "rsvp": { - "version": "3.2.1", - "resolved": "http://registry.npm.taobao.org/rsvp/download/rsvp-3.2.1.tgz", - "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=", - "dev": true - } - } - }, - "heimdalljs-fs-monitor": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/heimdalljs-fs-monitor/download/heimdalljs-fs-monitor-0.1.0.tgz", - "integrity": "sha1-1ASmVojGcUxIVGntNJXaSFNEAnI=", - "dev": true, - "requires": { - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9" - } - }, - "heimdalljs-graph": { - "version": "0.3.3", - "resolved": "http://registry.npm.taobao.org/heimdalljs-graph/download/heimdalljs-graph-0.3.3.tgz", - "integrity": "sha1-6oAdu6ZZyNUi/hy4Oy1gVybkkY8=", - "dev": true - }, - "heimdalljs-logger": { - "version": "0.1.9", - "resolved": "http://registry.npm.taobao.org/heimdalljs-logger/download/heimdalljs-logger-0.1.9.tgz", - "integrity": "sha1-12raTkW3u294b8nAEKaOsuL68XY=", - "dev": true, - "requires": { - "debug": "2.6.9", - "heimdalljs": "0.2.5" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.5.0.tgz", - "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/htmlescape/download/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" - }, - "dependencies": { - "entities": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - } - } - }, - "http-errors": { - "version": "1.6.2", - "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "setprototypeof": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.4.9", - "resolved": "http://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "http://registry.npm.taobao.org/http-proxy/download/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", - "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "ignore": { - "version": "3.3.5", - "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-3.3.5.tgz", - "integrity": "sha1-xOcVRV9gc6jX5drnLS/J1xZj26Y=", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "http://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "include-path-searcher": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/include-path-searcher/download/include-path-searcher-0.1.0.tgz", - "integrity": "sha1-wM8t36Fk+y6uB7x8pDp/GRy0170=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflection": { - "version": "1.12.0", - "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "http://registry.npm.taobao.org/inline-source-map/download/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "inline-source-map-comment": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/inline-source-map-comment/download/inline-source-map-comment-1.0.5.tgz", - "integrity": "sha1-UKikTCp5DfrEQbXJTszVRiY1+vY=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "sum-up": "1.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "inquirer": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.4", - "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "insert-module-globals": { - "version": "7.0.1", - "resolved": "http://registry.npm.taobao.org/insert-module-globals/download/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "1.1.5", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/interpret/download/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-git-url": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/is-git-url/download/is-git-url-0.2.3.tgz", - "integrity": "sha1-RFIA1vvW2gKPteAUQNmvyT88y2Q=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-integer": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/is-integer/download/is-integer-1.0.7.tgz", - "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "http://registry.npm.taobao.org/is-my-json-valid/download/is-my-json-valid-2.16.1.tgz", - "integrity": "sha1-WoRnd+LCYg0eaRBOXToDsfYIjxE=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-type": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/is-type/download/is-type-0.0.1.tgz", - "integrity": "sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=", - "dev": true, - "requires": { - "core-util-is": "1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "istextorbinary": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/istextorbinary/download/istextorbinary-2.1.0.tgz", - "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", - "dev": true, - "requires": { - "binaryextensions": "2.0.0", - "editions": "1.3.3", - "textextensions": "2.1.0" - } - }, - "jquery": { - "version": "3.3.1", - "resolved": "http://registry.npm.taobao.org/jquery/download/jquery-3.3.1.tgz", - "integrity": "sha1-lYzinoHJeQ8xvneS311NlfxX+8o=", - "dev": true - }, - "js-reporters": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/js-reporters/download/js-reporters-1.2.0.tgz", - "integrity": "sha1-fPLLaYGWaEeQNQ0MTKB/Su2ewX4=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.10.0.tgz", - "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.0.tgz", - "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "jshint": { - "version": "2.9.5", - "resolved": "http://registry.npm.taobao.org/jshint/download/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", - "dev": true, - "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" - }, - "dependencies": { - "lodash": { - "version": "3.7.0", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/shelljs/download/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - } - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "json3": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/klaw/download/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/labeled-stream-splicer/download/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "leek": { - "version": "0.0.24", - "resolved": "http://registry.npm.taobao.org/leek/download/leek-0.0.24.tgz", - "integrity": "sha1-5ADlfw5g2O8r1NBo3EKKVDRdvNo=", - "dev": true, - "requires": { - "debug": "2.6.9", - "lodash.assign": "3.2.0", - "rsvp": "3.6.2" - } - }, - "less": { - "version": "2.7.3", - "resolved": "http://registry.npm.taobao.org/less/download/less-2.7.3.tgz", - "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=", - "dev": true, - "requires": { - "errno": "0.1.6", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" - } - }, - "leven": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/leven/download/leven-1.0.2.tgz", - "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/lexical-scope/download/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "2.2.0" - } - }, - "linkify-it": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/linkify-it/download/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "dev": true, - "requires": { - "uc.micro": "1.0.3" - } - }, - "livereload-js": { - "version": "2.2.2", - "resolved": "http://registry.npm.taobao.org/livereload-js/download/livereload-js-2.2.2.tgz", - "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "loader.js": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/loader.js/download/loader.js-4.6.0.tgz", - "integrity": "sha1-uWVmPdvi2A2kgkVMuGXv5JbpPiI=", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/lodash._arraycopy/download/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/lodash._arrayeach/download/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - }, - "dependencies": { - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - } - } - }, - "lodash._basebind": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._basebind/download/lodash._basebind-2.3.0.tgz", - "integrity": "sha1-K1vEUqDhBhQ7IYafIzvbWHQX0kg=", - "dev": true, - "requires": { - "lodash._basecreate": "2.3.0", - "lodash._setbinddata": "2.3.0", - "lodash.isobject": "2.3.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._basecreate/download/lodash._basecreate-2.3.0.tgz", - "integrity": "sha1-m4ioak3P97fzxh2Dovz8BnHsneA=", - "dev": true, - "requires": { - "lodash._renative": "2.3.0", - "lodash.isobject": "2.3.0", - "lodash.noop": "2.3.0" - } - }, - "lodash._basecreatecallback": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._basecreatecallback/download/lodash._basecreatecallback-2.3.0.tgz", - "integrity": "sha1-N7KrF1kaM56YjbMln81GAZ16w2I=", - "dev": true, - "requires": { - "lodash._setbinddata": "2.3.0", - "lodash.bind": "2.3.0", - "lodash.identity": "2.3.0", - "lodash.support": "2.3.0" - } - }, - "lodash._basecreatewrapper": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._basecreatewrapper/download/lodash._basecreatewrapper-2.3.0.tgz", - "integrity": "sha1-qgxhrZYETDkzN2ExSDqXWcNlEkc=", - "dev": true, - "requires": { - "lodash._basecreate": "2.3.0", - "lodash._setbinddata": "2.3.0", - "lodash._slice": "2.3.0", - "lodash.isobject": "2.3.0" - } - }, - "lodash._baseflatten": { - "version": "3.1.4", - "resolved": "http://registry.npm.taobao.org/lodash._baseflatten/download/lodash._baseflatten-3.1.4.tgz", - "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", - "dev": true, - "requires": { - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/lodash._basefor/download/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/lodash._bindcallback/download/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/lodash._createassigner/download/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true, - "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" - } - }, - "lodash._createwrapper": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._createwrapper/download/lodash._createwrapper-2.3.0.tgz", - "integrity": "sha1-0arhEC2t9EDo4G/BM6bt1/4UYHU=", - "dev": true, - "requires": { - "lodash._basebind": "2.3.0", - "lodash._basecreatewrapper": "2.3.0", - "lodash.isfunction": "2.3.0" - } - }, - "lodash._escapehtmlchar": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._escapehtmlchar/download/lodash._escapehtmlchar-2.3.0.tgz", - "integrity": "sha1-0D2mvYLu3zjcCltQPXQOzQ6JRZI=", - "dev": true, - "requires": { - "lodash._htmlescapes": "2.3.0" - } - }, - "lodash._escapestringchar": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._escapestringchar/download/lodash._escapestringchar-2.3.0.tgz", - "integrity": "sha1-zOc65g/G2lXSv4oGecI8orqxSfw=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._htmlescapes": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._htmlescapes/download/lodash._htmlescapes-2.3.0.tgz", - "integrity": "sha1-HKmIY8rfH6HYLITzXzHkBVagTzo=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._objecttypes": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._objecttypes/download/lodash._objecttypes-2.3.0.tgz", - "integrity": "sha1-aj6jmH3W7rgCGy1cnDA1Scwrrh4=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._reinterpolate/download/lodash._reinterpolate-2.3.0.tgz", - "integrity": "sha1-A+6dhcDlXL1ZDXFgiilb3aURKOw=", - "dev": true - }, - "lodash._renative": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._renative/download/lodash._renative-2.3.0.tgz", - "integrity": "sha1-d9jt1M7SbdWXH54Vpfdy5OMX+9M=", - "dev": true - }, - "lodash._reunescapedhtml": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._reunescapedhtml/download/lodash._reunescapedhtml-2.3.0.tgz", - "integrity": "sha1-25ILVax/P/glk5rOubosIxcT0k0=", - "dev": true, - "requires": { - "lodash._htmlescapes": "2.3.0", - "lodash.keys": "2.3.0" - } - }, - "lodash._setbinddata": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._setbinddata/download/lodash._setbinddata-2.3.0.tgz", - "integrity": "sha1-5WEEkKzRMnfVmFjZW18nJ/FQjwQ=", - "dev": true, - "requires": { - "lodash._renative": "2.3.0", - "lodash.noop": "2.3.0" - } - }, - "lodash._shimkeys": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._shimkeys/download/lodash._shimkeys-2.3.0.tgz", - "integrity": "sha1-YR+TFJ4+bHIQlrSHae8pU3rai6k=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.3.0" - } - }, - "lodash._slice": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash._slice/download/lodash._slice-2.3.0.tgz", - "integrity": "sha1-FHGYEyhZly5GgMoppZkshVZpqlw=", - "dev": true - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/lodash.assign/download/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" - }, - "dependencies": { - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - } - } - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/lodash.assignin/download/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.bind/download/lodash.bind-2.3.0.tgz", - "integrity": "sha1-wqjhi2jl7MFS4rFoJmEW/qWwFsw=", - "dev": true, - "requires": { - "lodash._createwrapper": "2.3.0", - "lodash._renative": "2.3.0", - "lodash._slice": "2.3.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-3.1.1.tgz", - "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1" - } - }, - "lodash.defaults": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.defaults/download/lodash.defaults-2.3.0.tgz", - "integrity": "sha1-qDKwAfE487uXIcKBmip8xa4h7SU=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.3.0", - "lodash.keys": "2.3.0" - } - }, - "lodash.defaultsdeep": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.0.tgz", - "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=", - "dev": true - }, - "lodash.escape": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.escape/download/lodash.escape-2.3.0.tgz", - "integrity": "sha1-hEw4xY+EThNi6+lnJhWbYs9fKlg=", - "dev": true, - "requires": { - "lodash._escapehtmlchar": "2.3.0", - "lodash._reunescapedhtml": "2.3.0", - "lodash.keys": "2.3.0" - } - }, - "lodash.find": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.find/download/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", - "dev": true - }, - "lodash.flatten": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/lodash.flatten/download/lodash.flatten-3.0.2.tgz", - "integrity": "sha1-3hz1d1j49EeTGdNcPpzGDEUBk4w=", - "dev": true, - "requires": { - "lodash._baseflatten": "3.1.4", - "lodash._isiterateecall": "3.0.9" - } - }, - "lodash.foreach": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.foreach/download/lodash.foreach-2.3.0.tgz", - "integrity": "sha1-CDQEyR6EbudyRf3512UZxosq8Wg=", - "dev": true, - "requires": { - "lodash._basecreatecallback": "2.3.0", - "lodash.forown": "2.3.0" - } - }, - "lodash.forown": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.forown/download/lodash.forown-2.3.0.tgz", - "integrity": "sha1-JPtKr4ANRfwtxgv+w84EyDajrX8=", - "dev": true, - "requires": { - "lodash._basecreatecallback": "2.3.0", - "lodash._objecttypes": "2.3.0", - "lodash.keys": "2.3.0" - } - }, - "lodash.identity": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.identity/download/lodash.identity-2.3.0.tgz", - "integrity": "sha1-awGiEMlIU1XCqRO0i2cRIZoXPe0=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isfunction": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.isfunction/download/lodash.isfunction-2.3.0.tgz", - "integrity": "sha1-aylz5HpkfPEucNZ2rqE2Q3BuUmc=", - "dev": true - }, - "lodash.isobject": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.isobject/download/lodash.isobject-2.3.0.tgz", - "integrity": "sha1-LhbT/Fg9qYMZaJU/LY5tc0NPZ5k=", - "dev": true, - "requires": { - "lodash._objecttypes": "2.3.0" - } - }, - "lodash.isplainobject": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-3.2.0.tgz", - "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=", - "dev": true, - "requires": { - "lodash._basefor": "3.0.3", - "lodash.isarguments": "3.1.0", - "lodash.keysin": "3.0.8" - } - }, - "lodash.istypedarray": { - "version": "3.0.6", - "resolved": "http://registry.npm.taobao.org/lodash.istypedarray/download/lodash.istypedarray-3.0.6.tgz", - "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", - "dev": true - }, - "lodash.keys": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-2.3.0.tgz", - "integrity": "sha1-s1D0+Syqn0WkouzwGEVM8vKK4lM=", - "dev": true, - "requires": { - "lodash._renative": "2.3.0", - "lodash._shimkeys": "2.3.0", - "lodash.isobject": "2.3.0" - } - }, - "lodash.keysin": { - "version": "3.0.8", - "resolved": "http://registry.npm.taobao.org/lodash.keysin/download/lodash.keysin-3.0.8.tgz", - "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", - "dev": true, - "requires": { - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.merge/download/lodash.merge-4.6.0.tgz", - "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", - "dev": true - }, - "lodash.noop": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.noop/download/lodash.noop-2.3.0.tgz", - "integrity": "sha1-MFnWKNUbv5N80qC2/Dp/ISpmnCw=", - "dev": true - }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/lodash.omit/download/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "http://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.support": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.support/download/lodash.support-2.3.0.tgz", - "integrity": "sha1-fq8DivTw1qq3drRKptz8gDNMm/0=", - "dev": true, - "requires": { - "lodash._renative": "2.3.0" - } - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "http://registry.npm.taobao.org/lodash.template/download/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" - }, - "dependencies": { - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/lodash.templatesettings/download/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0" - } - } - } - }, - "lodash.templatesettings": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.templatesettings/download/lodash.templatesettings-2.3.0.tgz", - "integrity": "sha1-MD0TLDQnEAQNWhjvqi1XL9A/jNw=", - "dev": true, - "requires": { - "lodash._reinterpolate": "2.3.0", - "lodash.escape": "2.3.0" - } - }, - "lodash.toplainobject": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/lodash.toplainobject/download/lodash.toplainobject-3.0.0.tgz", - "integrity": "sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keysin": "3.0.8" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "http://registry.npm.taobao.org/lodash.uniqby/download/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true - }, - "lodash.values": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.values/download/lodash.values-2.3.0.tgz", - "integrity": "sha1-ypb75gogsLDsK6K6X8anZb0Uo7o=", - "dev": true, - "requires": { - "lodash.keys": "2.3.0" - } - }, - "longest": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", - "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "make-array": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/make-array/download/make-array-0.1.2.tgz", - "integrity": "sha1-M14267DFpDFU0hIToeyuriobs+8=", - "dev": true - }, - "make-dir": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.4" - } - }, - "markdown-it": { - "version": "8.4.0", - "resolved": "http://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.0.tgz", - "integrity": "sha1-4kAIgb8XH3AY7RvZ2kQdrIr2MG0=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "entities": "1.1.1", - "linkify-it": "2.0.3", - "mdurl": "1.0.1", - "uc.micro": "1.0.3" - } - }, - "markdown-it-terminal": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/markdown-it-terminal/download/markdown-it-terminal-0.1.0.tgz", - "integrity": "sha1-VFq9jdAcPWI1O/zqcdtYC1HSK9k=", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "cardinal": "1.0.0", - "cli-table": "0.3.1", - "lodash.merge": "4.6.0", - "markdown-it": "8.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", - "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - } - } - }, - "matcher-collection": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/matcher-collection/download/matcher-collection-1.0.5.tgz", - "integrity": "sha1-LuCVQ4Nyy4iE8FgjQTjAXGROwzk=", - "dev": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "md5-hex": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/md5-hex/download/md5-hex-1.3.0.tgz", - "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", - "dev": true, - "requires": { - "md5-o-matic": "0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/md5-o-matic/download/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", - "dev": true - }, - "md5.js": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-streams": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/memory-streams/download/memory-streams-0.1.2.tgz", - "integrity": "sha1-Jz/3d6tg/sWZsRY1UlUoLMosUMI=", - "dev": true, - "requires": { - "readable-stream": "1.0.34" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - } - } - }, - "merge": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-trees": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/merge-trees/download/merge-trees-1.0.1.tgz", - "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", - "dev": true, - "requires": { - "can-symlink": "1.0.0", - "fs-tree-diff": "0.5.6", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "rimraf": "2.6.2", - "symlink-or-copy": "1.1.8" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", - "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", - "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mktemp": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/mktemp/download/mktemp-0.4.0.tgz", - "integrity": "sha1-bQUVYRyKjITkhKogABKbmOmB/ws=", - "dev": true - }, - "module-deps": { - "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/module-deps/download/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.5.0", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.4.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "moment": { - "version": "2.18.1", - "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", - "dev": true - }, - "moment-timezone": { - "version": "0.5.14", - "resolved": "http://registry.npm.taobao.org/moment-timezone/download/moment-timezone-0.5.14.tgz", - "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", - "dev": true, - "requires": { - "moment": "2.18.1" - } - }, - "morgan": { - "version": "1.9.0", - "resolved": "http://registry.npm.taobao.org/morgan/download/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "dev": true, - "requires": { - "basic-auth": "2.0.0", - "debug": "2.6.9", - "depd": "1.1.1", - "on-finished": "2.3.0", - "on-headers": "1.0.1" - } - }, - "mout": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/mout/download/mout-1.1.0.tgz", - "integrity": "sha1-CynUHmqA+p4tSlvp1gLh2dAhd/Y=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mustache": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/mustache/download/mustache-2.3.0.tgz", - "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=", - "dev": true - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "http://registry.npm.taobao.org/node-fetch/download/node-fetch-1.7.3.tgz", - "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", - "dev": true, - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-path": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/node-modules-path/download/node-modules-path-1.0.1.tgz", - "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", - "dev": true - }, - "node-notifier": { - "version": "5.1.2", - "resolved": "http://registry.npm.taobao.org/node-notifier/download/node-notifier-5.1.2.tgz", - "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", - "dev": true, - "requires": { - "growly": "1.3.0", - "semver": "5.4.1", - "shellwords": "0.1.1", - "which": "1.3.0" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-package-arg": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-4.2.1.tgz", - "integrity": "sha1-WTMD/eqF98Qid18X+et2cPaA4+w=", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "semver": "5.4.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/options/download/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "ora": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" - } - }, - "os-browserify": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/os-shim/download/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/osenv/download/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/output-file-sync/download/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "pako": { - "version": "0.2.9", - "resolved": "http://registry.npm.taobao.org/pako/download/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parents": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/parents/download/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.8", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/parsejson/download/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "http://registry.npm.taobao.org/path-platform/download/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-posix": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/path-posix/download/path-posix-1.0.0.tgz", - "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.14.tgz", - "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/pluralize/download/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "portfinder": { - "version": "1.0.13", - "resolved": "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "printf": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/printf/download/printf-0.2.5.tgz", - "integrity": "sha1-xDjKLKM+OSdnHbSracDlL5NqTw8=", - "dev": true - }, - "private": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "process-relative-require": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/process-relative-require/download/process-relative-require-1.0.0.tgz", - "integrity": "sha1-FZDfz1uPKYO6U+OYRGtoJAtMxoo=", - "dev": true, - "requires": { - "node-modules-path": "1.0.1" - } - }, - "progress": { - "version": "1.1.8", - "resolved": "http://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", - "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", - "dev": true, - "optional": true, - "requires": { - "asap": "2.0.6" - } - }, - "promise-map-series": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/promise-map-series/download/promise-map-series-0.2.3.tgz", - "integrity": "sha1-wtN3r8kyU/a9A9u3d1XriKsgqEc=", - "dev": true, - "requires": { - "rsvp": "3.6.2" - } - }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/q/download/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", - "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quick-temp": { - "version": "0.1.8", - "resolved": "http://registry.npm.taobao.org/quick-temp/download/quick-temp-0.1.8.tgz", - "integrity": "sha1-urAqJCq4+w3XWKPJd2sy+aXZRAg=", - "dev": true, - "requires": { - "mktemp": "0.4.0", - "rimraf": "2.6.2", - "underscore.string": "3.3.4" - } - }, - "qunit-notifications": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/qunit-notifications/download/qunit-notifications-0.1.1.tgz", - "integrity": "sha1-MAGvxqanffvZYsy83d4S3sUobAk=", - "dev": true - }, - "qunitjs": { - "version": "2.4.0", - "resolved": "http://registry.npm.taobao.org/qunitjs/download/qunitjs-2.4.0.tgz", - "integrity": "sha1-WPOoHoRmh/Ln9jfFvtycJn+IcmE=", - "dev": true, - "requires": { - "chokidar": "1.6.1", - "commander": "2.9.0", - "exists-stat": "1.0.0", - "findup-sync": "0.4.3", - "js-reporters": "1.2.0", - "resolve": "1.3.2", - "walk-sync": "0.3.1" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "resolve": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.3.2.tgz", - "integrity": "sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU=", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "walk-sync": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.3.1.tgz", - "integrity": "sha1-VYoWrqyMDbWcAotzxm85doTs5GU=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - } - } - }, - "randomatic": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", - "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "randombytes": { - "version": "2.0.5", - "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.5.tgz", - "integrity": "sha1-3ACaJGuNCaF3tLegrne8Vw9LG3k=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/read-only-stream/download/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "string_decoder": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/readline2/download/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - }, - "dependencies": { - "mute-stream": { - "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - } - } - }, - "recast": { - "version": "0.11.23", - "resolved": "http://registry.npm.taobao.org/recast/download/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dev": true, - "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.7", - "source-map": "0.5.7" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "http://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.4.0" - } - }, - "redeyed": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/redeyed/download/redeyed-1.0.1.tgz", - "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "dev": true, - "requires": { - "esprima": "3.0.0" - }, - "dependencies": { - "esprima": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.0.0.tgz", - "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=", - "dev": true - } - } - }, - "regenerate": { - "version": "1.3.3", - "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.3.3.tgz", - "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38=", - "dev": true - }, - "regenerator": { - "version": "0.8.40", - "resolved": "http://registry.npm.taobao.org/regenerator/download/regenerator-0.8.40.tgz", - "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", - "dev": true, - "requires": { - "commoner": "0.10.8", - "defs": "1.1.1", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.7", - "recast": "0.10.33", - "through": "2.3.8" - }, - "dependencies": { - "ast-types": { - "version": "0.8.12", - "resolved": "http://registry.npm.taobao.org/ast-types/download/ast-types-0.8.12.tgz", - "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", - "dev": true - }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "http://registry.npm.taobao.org/esprima-fb/download/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - }, - "recast": { - "version": "0.10.33", - "resolved": "http://registry.npm.taobao.org/recast/download/recast-0.10.33.tgz", - "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", - "dev": true, - "requires": { - "ast-types": "0.8.12", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.7", - "source-map": "0.5.7" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.0.tgz", - "integrity": "sha1-flT+W1zNXWYk6mJVw0c74JC4AuE=", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.10.1.tgz", - "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.7" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", - "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regexpu": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/regexpu/download/regexpu-1.3.0.tgz", - "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "recast": "0.10.43", - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - }, - "dependencies": { - "ast-types": { - "version": "0.8.15", - "resolved": "http://registry.npm.taobao.org/ast-types/download/ast-types-0.8.15.tgz", - "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "recast": { - "version": "0.10.43", - "resolved": "http://registry.npm.taobao.org/recast/download/recast-0.10.43.tgz", - "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=", - "dev": true, - "requires": { - "ast-types": "0.8.15", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.7", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "http://registry.npm.taobao.org/esprima-fb/download/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - } - } - } - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "http://registry.npm.taobao.org/request/download/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "qs": { - "version": "6.4.0", - "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.4.0.tgz", - "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/resolve-dir/download/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", - "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", - "dev": true, - "requires": { - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "rsvp": { - "version": "3.6.2", - "resolved": "http://registry.npm.taobao.org/rsvp/download/rsvp-3.6.2.tgz", - "integrity": "sha1-LpZJFZmpbN4bUV1WdKj3qRRSkmo=", - "dev": true - }, - "run-async": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/rx/download/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/rx-lite/download/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", - "dev": true - }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/safe-json-parse/download/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, - "sane": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/sane/download/sane-1.7.0.tgz", - "integrity": "sha1-s1ebzLRclM8gNVzIESSZDf00bjA=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "exec-sh": "0.2.1", - "fb-watchman": "2.0.0", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.10.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "semver": { - "version": "5.4.1", - "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", - "dev": true - }, - "send": { - "version": "0.16.1", - "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.1.tgz", - "integrity": "sha1-pw4coh0TgsEdDZ9iMd6ygQgNerM=", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - } - }, - "serve-static": { - "version": "1.13.1", - "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.1.tgz", - "integrity": "sha1-TFfVNASnYdjy58HooYpH2/J4pxk=", - "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", - "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", - "dev": true - }, - "sha.js": { - "version": "2.4.9", - "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.9.tgz", - "integrity": "sha1-mPZIgEdLdPSji42p08Dy0QRjPn0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/shasum/download/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.9" - }, - "dependencies": { - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "http://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.1.2", - "interpret": "1.0.4", - "rechoir": "0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "shellwords": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz", - "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "silent-error": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/silent-error/download/silent-error-1.1.0.tgz", - "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", - "dev": true, - "requires": { - "debug": "2.6.9" - } - }, - "simple-fmt": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/simple-fmt/download/simple-fmt-0.1.0.tgz", - "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", - "dev": true - }, - "simple-is": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/simple-is/download/simple-is-0.2.0.tgz", - "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "socket.io": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/socket.io/download/socket.io-1.6.0.tgz", - "integrity": "sha1-PkDZMmN+a9kjmBslyvfFPoO24uE=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.0", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.6.0", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/socket.io-client/download/socket.io-client-1.6.0.tgz", - "integrity": "sha1-W2aPT3cTBN/u0XkGRwg4b6ZxeFM=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.0", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "sort-object-keys": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/sort-object-keys/download/sort-object-keys-1.1.2.tgz", - "integrity": "sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI=", - "dev": true - }, - "sort-package-json": { - "version": "1.7.1", - "resolved": "http://registry.npm.taobao.org/sort-package-json/download/sort-package-json-1.7.1.tgz", - "integrity": "sha1-8uX7/+hCDMG7BEhfRQnwXnO0wPI=", - "dev": true, - "requires": { - "sort-object-keys": "1.1.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "source-map-url": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", - "dev": true - }, - "sourcemap-validator": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/sourcemap-validator/download/sourcemap-validator-1.0.6.tgz", - "integrity": "sha1-q9Lx7Nrmo8RsLJbF8lZwWyFHycA=", - "dev": true, - "requires": { - "jsesc": "0.3.0", - "lodash.foreach": "2.3.0", - "lodash.template": "2.3.0", - "source-map": "0.1.43" - }, - "dependencies": { - "jsesc": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.3.0.tgz", - "integrity": "sha1-G/XuY7RTn+LibQwemcJAuXpFeXI=", - "dev": true - }, - "lodash.template": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.template/download/lodash.template-2.3.0.tgz", - "integrity": "sha1-Tj4pxDO0z+pnXsg15vEjkcYf0is=", - "dev": true, - "requires": { - "lodash._escapestringchar": "2.3.0", - "lodash._reinterpolate": "2.3.0", - "lodash.defaults": "2.3.0", - "lodash.escape": "2.3.0", - "lodash.keys": "2.3.0", - "lodash.templatesettings": "2.3.0", - "lodash.values": "2.3.0" - } - }, - "source-map": { - "version": "0.1.43", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "spawn-args": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/spawn-args/download/spawn-args-0.2.0.tgz", - "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", - "dev": true - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "http://registry.npm.taobao.org/spawn-sync/download/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true, - "requires": { - "concat-stream": "1.5.2", - "os-shim": "0.1.3" - } - }, - "spawnback": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/spawnback/download/spawnback-1.0.0.tgz", - "integrity": "sha1-9zZi9+VNlTZ+ynTWQmxnfdfqaG8=", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "sprintf-js": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", - "dev": true - }, - "sri-toolbox": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/sri-toolbox/download/sri-toolbox-0.2.0.tgz", - "integrity": "sha1-p/6lw/3lXmdc8cjAbz67XCk1g14=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "stable": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/stable/download/stable-0.1.6.tgz", - "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "stream-http": { - "version": "2.7.2", - "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.7.2.tgz", - "integrity": "sha1-QKBQ7I3DtTsz2ZCUFcAsC/Gr+60=", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/stream-splicer/download/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "string-template": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/string-template/download/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringmap": { - "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/stringmap/download/stringmap-0.2.2.tgz", - "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", - "dev": true - }, - "stringset": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/stringset/download/stringset-0.2.1.tgz", - "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "styled_string": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/styled_string/download/styled_string-0.0.1.tgz", - "integrity": "sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=", - "dev": true - }, - "subarg": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/subarg/download/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "sum-up": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/sum-up/download/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symlink-or-copy": { - "version": "1.1.8", - "resolved": "http://registry.npm.taobao.org/symlink-or-copy/download/symlink-or-copy-1.1.8.tgz", - "integrity": "sha1-yr5h4AEMHAI8Fzsl7lEIs39LSqM=", - "dev": true - }, - "syntax-error": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/syntax-error/download/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "table": { - "version": "3.8.3", - "resolved": "http://registry.npm.taobao.org/table/download/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tap-parser": { - "version": "5.4.0", - "resolved": "http://registry.npm.taobao.org/tap-parser/download/tap-parser-5.4.0.tgz", - "integrity": "sha1-aQfolyXXt/pq5B7ixGTD20MYiuw=", - "dev": true, - "requires": { - "events-to-array": "1.1.2", - "js-yaml": "3.10.0", - "readable-stream": "2.3.3" - } - }, - "temp": { - "version": "0.8.3", - "resolved": "http://registry.npm.taobao.org/temp/download/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "testem": { - "version": "1.18.4", - "resolved": "http://registry.npm.taobao.org/testem/download/testem-1.18.4.tgz", - "integrity": "sha1-5F/tkivsL1SmFsQ/EZIlmKyX60E=", - "dev": true, - "requires": { - "backbone": "1.3.3", - "bluebird": "3.5.1", - "charm": "1.0.2", - "commander": "2.8.1", - "consolidate": "0.14.5", - "cross-spawn": "5.1.0", - "express": "4.16.1", - "fireworm": "0.7.1", - "glob": "7.1.2", - "http-proxy": "1.16.2", - "js-yaml": "3.10.0", - "lodash.assignin": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.find": "4.6.0", - "lodash.uniqby": "4.7.0", - "mkdirp": "0.5.1", - "mustache": "2.3.0", - "node-notifier": "5.1.2", - "npmlog": "4.1.2", - "printf": "0.2.5", - "rimraf": "2.6.2", - "socket.io": "1.6.0", - "spawn-args": "0.2.0", - "styled_string": "0.0.1", - "tap-parser": "5.4.0", - "xmldom": "0.1.27" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "textextensions": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/textextensions/download/textextensions-2.1.0.tgz", - "integrity": "sha1-G+DcKg3CRNRL6KCa9qha+5PE28M=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "0.11.10" - } - }, - "tiny-lr": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/tiny-lr/download/tiny-lr-1.0.5.tgz", - "integrity": "sha1-IfQL+E69H4UwVmgDde7xZwwzQRI=", - "dev": true, - "requires": { - "body": "5.1.0", - "debug": "2.6.9", - "faye-websocket": "0.10.0", - "livereload-js": "2.2.2", - "object-assign": "4.1.1", - "qs": "6.5.1" - } - }, - "tmp": { - "version": "0.0.28", - "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-array": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tree-sync": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/tree-sync/download/tree-sync-1.2.2.tgz", - "integrity": "sha1-LPdrhYn1n/7bWNtaOsfLAT0BWLc=", - "dev": true, - "requires": { - "debug": "2.6.9", - "fs-tree-diff": "0.5.6", - "mkdirp": "0.5.1", - "quick-temp": "0.1.8", - "walk-sync": "0.2.7" - }, - "dependencies": { - "walk-sync": { - "version": "0.2.7", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.2.7.tgz", - "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "try-resolve": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/try-resolve/download/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", - "dev": true - }, - "tryit": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/tryit/download/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tryor": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/tryor/download/tryor-0.1.2.tgz", - "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.15", - "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uc.micro": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.3.tgz", - "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/ultron/download/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "umd": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/umd/download/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "http://registry.npm.taobao.org/underscore/download/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "http://registry.npm.taobao.org/underscore.string/download/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "untildify": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/untildify/download/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "url": { - "version": "0.11.0", - "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "user-home": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "username-sync": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/username-sync/download/username-sync-1.0.1.tgz", - "integrity": "sha1-HN6H7vz5S4gimE2Ti6K3l0Jtrh8=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz", - "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "walk-sync": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/walk-sync/download/walk-sync-0.3.2.tgz", - "integrity": "sha1-SCcoCvxC0OA1NnxKTjHurA0Tb3U=", - "dev": true, - "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.11" - } - }, - "watch": { - "version": "0.10.0", - "resolved": "http://registry.npm.taobao.org/watch/download/watch-0.10.0.tgz", - "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", - "dev": true - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.2" - } - }, - "websocket-extensions": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.2.tgz", - "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "workerpool": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/workerpool/download/workerpool-2.3.0.tgz", - "integrity": "sha1-hsXL6Ua1Xn3J0SsZNsiAGm4tdE0=", - "dev": true, - "requires": { - "object-assign": "4.1.1" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/write/download/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", - "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "ws": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/ws/download/ws-1.1.1.tgz", - "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/wtf-8/download/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xmldom": { - "version": "0.1.27", - "resolved": "http://registry.npm.taobao.org/xmldom/download/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "http://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yam": { - "version": "0.0.22", - "resolved": "http://registry.npm.taobao.org/yam/download/yam-0.0.22.tgz", - "integrity": "sha1-OKdst5oZKE2SBu1JAx41mhNAvQY=", - "dev": true, - "requires": { - "fs-extra": "0.30.0", - "lodash.merge": "4.6.0" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - } - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } -} From d7e7d88fd647064e612e4fb9bd12540196036c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87?= Date: Wed, 20 Feb 2019 15:52:35 +0800 Subject: [PATCH 10/15] remove customer application owner perm --- web/app/templates/customer-application/list.hbs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/app/templates/customer-application/list.hbs b/web/app/templates/customer-application/list.hbs index 2505b95..7b774e9 100644 --- a/web/app/templates/customer-application/list.hbs +++ b/web/app/templates/customer-application/list.hbs @@ -32,7 +32,6 @@ Remark - {{#if ajax.user.admin}} - {{/if}} {{#if model.adminOrOwner}} - {{/if}} {{#if model.adminOrOwner}} @@ -299,6 +299,10 @@ {{#link-to 'customer.edit' it.id class='btn btn-xs btn-info' data-rel='tooltip' title='Edit Customer'}} {{/link-to}} + + {{#if ajax.user.admin}} + {{delete-btn model=it}} + {{/if}} diff --git a/web/app/templates/user/list.hbs b/web/app/templates/user/list.hbs index b6556b6..7a8f596 100644 --- a/web/app/templates/user/list.hbs +++ b/web/app/templates/user/list.hbs @@ -32,7 +32,7 @@ Status - diff --git a/web/bower.json b/web/bower.json index 93fd643..836ea82 100644 --- a/web/bower.json +++ b/web/bower.json @@ -8,7 +8,7 @@ "license": "MIT", "homepage": "", "dependencies": { - "bootstrap": "~3.3.5", + "bootstrap": "3.4.1", "bootbox": "~4.4.0", "moment": ">= 2.8.0", "moment-timezone": ">= 0.1.0", From 5c843c837c03172aa02e356551989d327bd213df Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Tue, 10 Nov 2020 23:44:18 +0800 Subject: [PATCH 14/15] Add customer ID2 --- .../crm/auth/AuthCallbackSupport.java | 41 ++++++++++--------- .../ambition/crm/auth/AuthRealmSupport.java | 9 ++-- .../controller/AbstractBaseController.java | 34 +++++++-------- .../crm/controller/CustomerController.java | 7 ++-- .../support/CustomerServiceSupport.java | 28 +++++++++---- .../CustomerYearToDateSaleServiceSupport.java | 35 +++++++++++----- .../ambition/crm/model/Customer.java | 4 +- web/app/routes/customer/edit.js | 2 +- web/app/routes/customer/show.js | 2 +- web/app/templates/customer/list.hbs | 2 +- 10 files changed, 97 insertions(+), 67 deletions(-) diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthCallbackSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthCallbackSupport.java index e3c4602..8b4483e 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthCallbackSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthCallbackSupport.java @@ -1,8 +1,8 @@ package com.pudonghot.ambition.crm.auth; +import lombok.val; import lombok.extern.slf4j.Slf4j; import me.chyxion.tigon.model.ViewModel; -import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import me.chyxion.tigon.shiro.AuthCallback; import me.chyxion.tigon.shiro.model.AuthUser; @@ -43,23 +43,23 @@ public class AuthCallbackSupport implements AuthCallback { public void onSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject) { - WebSubject ws = (WebSubject) subject; - Session session = ws.getSession(false); - HttpServletRequest request = (HttpServletRequest) ws.getServletRequest(); + val ws = (WebSubject) subject; + val session = ws.getSession(false); + val request = (HttpServletRequest) ws.getServletRequest(); - AuthUser> authUser = new AuthUser>(); - String ip = HttpServletRequestUtils.getClientIP(request); + val authUser = new AuthUser>(); + val ip = HttpServletRequestUtils.getClientIP(request); authUser.setAttr("ip", ip); - String userAgent = request.getHeader("User-Agent"); + val userAgent = request.getHeader("User-Agent"); authUser.setAttr("userAgent", userAgent); - ViewModel user = (ViewModel) ((AuthInfo) info).getExtra(); - final String userId = user.getData().getId(); + val user = (ViewModel) ((AuthInfo) info).getExtra(); + val userId = user.getData().getId(); authUser.setUserId(userId); authUser.setUser(user); log.info("Save Auth User [{}] To Session [{}].", user, session.getId()); authUser.save(session); - AuthLogFormForCreate alForm = new AuthLogFormForCreate(); + val alForm = new AuthLogFormForCreate(); alForm.setUserId(userId); alForm.setIp(ip); alForm.setUserAgent(userAgent); @@ -68,7 +68,6 @@ public class AuthCallbackSupport implements AuthCallback { authLogService.create(alForm); // HttpServletResponse response = (HttpServletResponse) ws.getServletResponse(); log.info("User [{}] Logined.", userId); - } /** @@ -76,14 +75,16 @@ public class AuthCallbackSupport implements AuthCallback { */ @Override public void onFailedLogin(AuthenticationToken token, - AuthenticationException ae, Subject subject) { - String loginId = (String) token.getPrincipal(); - String password = new String((char[]) token.getCredentials()); + AuthenticationException ae, + Subject subject) { + + val loginId = (String) token.getPrincipal(); + val password = new String((char[]) token.getCredentials()); log.info("Login Id [{}] Password [{}] Login Failed.", loginId, password); - WebSubject ws = (WebSubject) subject; - HttpServletRequest request = (HttpServletRequest) ws.getServletRequest(); - AuthFailedLogFormForCreate form = new AuthFailedLogFormForCreate(); + val ws = (WebSubject) subject; + val request = (HttpServletRequest) ws.getServletRequest(); + val form = new AuthFailedLogFormForCreate(); form.setLoginId(loginId); form.setPassword(password); form.setIp(HttpServletRequestUtils.getClientIP(request)); @@ -95,9 +96,9 @@ public class AuthCallbackSupport implements AuthCallback { * {@inheritDoc} */ @Override - public void beforeLogout(Subject subject) { - final WebSubject ws = (WebSubject) subject; - final Session session = ws.getSession(false); + public void beforeLogout(final Subject subject) { + val ws = (WebSubject) subject; + val session = ws.getSession(false); if (session != null) { log.warn("Session [{}] Logout.", session); } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java index 76a434a..3ad4ec3 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/auth/AuthRealmSupport.java @@ -1,6 +1,7 @@ package com.pudonghot.ambition.crm.auth; import java.util.*; +import lombok.val; import me.chyxion.tigon.mybatis.Search; import me.chyxion.tigon.model.ViewModel; import me.chyxion.tigon.shiro.AuthRealm; @@ -31,7 +32,7 @@ public class AuthRealmSupport extends AuthRealm { @Override public Credential credential(Object principal) { Credential credential = null; - final ViewModel userViewModel = + val userViewModel = userService.findViewModel(new Search(User.EMPLOYEE_ID, principal)); if (userViewModel != null) { User admin = userViewModel.getData(); @@ -60,12 +61,12 @@ public class AuthRealmSupport extends AuthRealm { */ @Override public Collection roles(Object principal) { - final User user = userService.find(new Search(User.EMPLOYEE_ID, principal)); - final List roles = new ArrayList<>(4); + val user = userService.find(new Search(User.EMPLOYEE_ID, principal)); + val roles = new ArrayList(4); if (user.isAdmin()) { roles.add(User.ROLE_ADMIN); } - final String account = user.getAccount(); + val account = user.getAccount(); if (ArrayUtils.contains(new String[] {User.ROLE_LELI, User.ROLE_CHYXION}, account)) { roles.add(account); } diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AbstractBaseController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AbstractBaseController.java index 22efa31..65f41f9 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AbstractBaseController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/AbstractBaseController.java @@ -1,5 +1,6 @@ package com.pudonghot.ambition.crm.controller; +import lombok.val; import java.util.*; import java.net.URLDecoder; import java.io.IOException; @@ -87,7 +88,7 @@ public abstract class AbstractBaseController { } catch (IOException e) { throw new IllegalStateException( - "Read Stream Bytes Error Caused", e); + "Read stream bytes error caused", e); } } @@ -176,7 +177,7 @@ public abstract class AbstractBaseController { search.limit(limit); } if (StringUtils.isNotBlank(strSearch)) { - final Search orSearch = new Search(); + val orSearch = new Search(); for (final String col : searchCols()) { orSearch.or(new Search().like(col, decodeLike(strSearch))); } @@ -203,15 +204,16 @@ public abstract class AbstractBaseController { "Invalid criteria [" + strCriteria + "]", e); } - for (final Object[] criterion : criteria) { + for (val criterion : criteria) { if (criterion.length == 3) { final String field = (String) criterion[0]; if (StringUtils.isNotBlank(field)) { - final Pair> colProp = criterionCol(field); - final String col = colProp.getKey(); + val colProp = criterionCol(field); + val col = colProp.getKey(); + if (StringUtils.isNotBlank(col)) { - final String op = (String) criterion[1]; - final Object val = TypeUtils.castToJavaBean(criterion[2], colProp.getValue()); + val op = (String) criterion[1]; + val val = TypeUtils.castToJavaBean(criterion[2], colProp.getValue()); if (StringUtils.isNotBlank(op) && val != null && val instanceof String ? StringUtils.isNotBlank((String) val) : true) { @@ -274,12 +276,12 @@ public abstract class AbstractBaseController { } final JSONObject joFilters = filters(strFilters); - for (Map.Entry filter : joFilters.entrySet()) { - final String field = filter.getKey(); - final Pair> colProp = filterCol(filter.getKey()); + for (val filter : joFilters.entrySet()) { + val field = filter.getKey(); + val colProp = filterCol(filter.getKey()); if (colProp != null) { - final String col = colProp.getKey(); - final Object filterVal = filter.getValue(); + val col = colProp.getKey(); + val filterVal = filter.getValue(); if (filterVal != null) { if (onSearch(search, col, filterVal)) { continue; @@ -308,12 +310,12 @@ public abstract class AbstractBaseController { throw new IllegalStateException( "Invalid orders params [" + strOrders + "]", e); } - for (final Object objOrder : jaOrders) { - final JSONObject joSorter = (JSONObject) objOrder; + for (val objOrder : jaOrders) { + val joSorter = (JSONObject) objOrder; if (!joSorter.isEmpty()) { - final Map.Entry sortEntry = + val sortEntry = joSorter.entrySet().iterator().next(); - final String col = orderCol(sortEntry.getKey()); + val col = orderCol(sortEntry.getKey()); if (StringUtils.isNotBlank(col)) { final String dir = (String) sortEntry.getValue(); if ("asc".equalsIgnoreCase(dir)) { diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java index cee4c07..0bf37cd 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java @@ -1,5 +1,6 @@ package com.pudonghot.ambition.crm.controller; +import lombok.val; import java.util.*; import javax.validation.Valid; import lombok.extern.slf4j.Slf4j; @@ -41,7 +42,7 @@ public class CustomerController extends BaseQueryController { private static final List SEARCH_COLS = Arrays.asList( - "customer.id", + "customer.id2", "customer.name", "customer.city", "customer.country_code", @@ -124,8 +125,8 @@ public class CustomerController @RequestParam(value = "orders", required = false) final String orders) { - final Search search = new Search(); - User user = getUser().getData(); + val search = new Search(); + val user = getUser().getData(); search.setAttr(User.ACCOUNT, user.getAccount()); // search year diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java index 223fbd7..779fec8 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java @@ -16,6 +16,7 @@ import com.pudonghot.ambition.crm.mapper.*; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import com.pudonghot.ambition.crm.util.CSVUtils; +import org.apache.commons.lang3.RandomStringUtils; import com.pudonghot.ambition.crm.common.Constants; import org.apache.commons.lang3.time.DateFormatUtils; import com.pudonghot.ambition.crm.service.UserService; @@ -237,7 +238,7 @@ public class CustomerServiceSupport val lastIssue = model.getLastIssue(); if (StringUtils.isNotBlank(lastIssue)) { val issueParts = lastIssue.split(SPLITTER); - CustomerIssue issue = new CustomerIssue(); + val issue = new CustomerIssue(); issue.setId(issueParts[0]); issue.setIssue(issueParts[1]); issue.setDateCreated(new Date(Long.parseLong(issueParts[2]))); @@ -278,20 +279,23 @@ public class CustomerServiceSupport log.info("Blank customer id found, ignore."); return; } - customer.setId(customerId); + + customer.setId2(customerId); customer.setName(record.get(1).trim()); customer.setCountryCode(record.get(2).trim()); customer.setState(record.get(3).trim()); customer.setCity(record.get(4).trim()); customer.setMs(record.get(5).trim()); customer.setRegion(record.get(6).trim()); - val employeeId = StringUtils.defaultIfBlank(record.get(7).trim(), null); + + val employeeId = StringUtils.defaultIfBlank( + record.get(7).trim(), null); customer.setSalesperson(employeeId); log.info("Customer [{}] read.", customer); createUserIfNotExist(operator, employeeId, now); createOrUpdateCustomer(operator, customer, now); - createOrUpdateCustomerPermissions(operator, customerId, record.get(8), now); + createOrUpdateCustomerPermissions(operator, customer, record.get(8), now); } /** @@ -325,7 +329,7 @@ public class CustomerServiceSupport user.setAccount(employeeId); user.setEmployeeId(employeeId); - val password = idSeq.get(); + val password = RandomStringUtils.randomAlphanumeric(8); user.setPassword(password); user.setGender(Constants.GENDER_MALE); user.setEnabled(true); @@ -340,14 +344,17 @@ public class CustomerServiceSupport private void createOrUpdateCustomer(final String operator, final Customer customer, final Date date) { log.info("User [{}] create or update customer [{}].", operator, customer); - val customerId = customer.getId(); val ms = customer.getMs(); - val customerExisted = mapper.find(customerId); + val customerExisted = mapper.find( + new Search(Customer.ID2, customer.getId2()) + .eq(Customer.COUNTRY_CODE, customer.getCountryCode())); + if (customerExisted != null) { log.info("Customer existed [{}] found, update.", customerExisted); + customer.setId(customerExisted.getId()); // basic props - customerExisted.setName(customer.getName()); + // customerExisted.setName(customer.getName()); customerExisted.setCountryCode(customer.getCountryCode()); customerExisted.setState(customer.getState()); customerExisted.setCity(customer.getCity()); @@ -364,6 +371,7 @@ public class CustomerServiceSupport mapper.update(customerExisted); } else { + customer.setId(idSeq.get()); customer.setEnabled(true); customer.setCreatedBy(operator); customer.setDateCreated(date); @@ -371,6 +379,7 @@ public class CustomerServiceSupport mapper.insert(customer); } + val customerId = customer.getId(); // no issues if (customerIssueMapper.count( new Search(CustomerIssue.CUSTOMER_ID, customerId) @@ -389,7 +398,8 @@ public class CustomerServiceSupport } } - private void createOrUpdateCustomerPermissions(final String operator, final String customerId, final String strAccounts, Date date) { + private void createOrUpdateCustomerPermissions(final String operator, final Customer customer, final String strAccounts, Date date) { + val customerId = customer.getId(); log.info("User [{}] create or update customer [{}] permissions [{}].", operator, customerId, strAccounts); if (StringUtils.isNotBlank(strAccounts)) { diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java index 6eb2d66..69c8fc1 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java @@ -1,5 +1,6 @@ package com.pudonghot.ambition.crm.service.support; +import lombok.val; import java.util.Date; import java.io.InputStream; import java.text.ParseException; @@ -51,10 +52,9 @@ public class CustomerYearToDateSaleServiceSupport */ @Override public void importCSV(final String operator, final InputStream csvIn) { + val now = new Date(); - final Date now = new Date(); - - final ImportRecord importRecord = new ImportRecord(); + val importRecord = new ImportRecord(); importRecord.setId(idSeq.get()); importRecord.setType(ImportRecord.TYPE_YTD_SALES); importRecord.setCompleted(false); @@ -62,6 +62,7 @@ public class CustomerYearToDateSaleServiceSupport importRecord.setEnabled(true); importRecord.setCreatedBy(operator); importRecord.setDateCreated(now); + try { CSVUtils.eachRecord(csvIn, CSVUtils.GBK, new CSVUtils.RecordReader() { private final CustomerYearToDateSale customerYtdSale = @@ -89,17 +90,26 @@ public class CustomerYearToDateSaleServiceSupport */ @Override public void read(final CSVRecord record) { - final String customerId = StringUtils.trim(record.get(0)); - if (StringUtils.isBlank(customerId)) { - log.info("Blank customer id found, ignore."); + val customerName = StringUtils.trim(record.get(1)); + if (StringUtils.isBlank(customerName)) { + log.warn("Record [{}] blank customer name found, ignore.", record); return; } + + val customer = customerMapper.find( + new Search(Customer.NAME, customerName)); + if (customer == null) { + log.warn("No customer [{}] found, ignore.", customerName); + return; + } + + val customerId = customer.getId(); customerYtdSale.setCustomerId(customerId); customerYtdSale.setYear(StringUtils.trim(record.get(3))); customerYtdSale.setYtdSale(Long.parseLong(StringUtils.trim(record.get(6)).replace(",", ""))); // update date added - final String strDateAdded = StringUtils.trim(record.get(5)); + val strDateAdded = StringUtils.trim(record.get(5)); if (StringUtils.isNotBlank(strDateAdded)) { log.info("Update customer [{}] date added [{}].", customerId, strDateAdded); Date dateAdded = null; @@ -112,8 +122,8 @@ public class CustomerYearToDateSaleServiceSupport catch (ParseException e) { log.warn("Parse date [{}] error caused, ignore.", strDateAdded, e); } + if (dateAdded != null) { - final Customer customer = customerMapper.find(customerId); customer.setDateAdded(dateAdded); customer.setUpdatedBy(operator); customer.setDateUpdated(now); @@ -126,6 +136,7 @@ public class CustomerYearToDateSaleServiceSupport createOrUpdateCustomerYTDSale(operator, customerYtdSale, now); } }, true); + // update customer's status customerPropertyService.initSystemStatus(operator); customerMapper.listStatusSleeping().forEach(customer -> { @@ -162,10 +173,14 @@ public class CustomerYearToDateSaleServiceSupport } } - private void createOrUpdateCustomerYTDSale(final String operator, final CustomerYearToDateSale customerYtdSale, final Date date) { + private void createOrUpdateCustomerYTDSale( + final String operator, + final CustomerYearToDateSale customerYtdSale, + final Date date) { + log.info("User [{}] create or update customer YTD sale [{}].", operator, customerYtdSale); - final CustomerYearToDateSale customerYtdSaleExisted = + val customerYtdSaleExisted = mapper.find(new Search(CustomerYearToDateSale.CUSTOMER_ID, customerYtdSale.getCustomerId()) .eq(CustomerYearToDateSale.YEAR, diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java index 794b2ed..d60f6e8 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java @@ -2,12 +2,11 @@ package com.pudonghot.ambition.crm.model; import lombok.Getter; import lombok.Setter; -import lombok.experimental.FieldNameConstants; - import java.util.Date; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.Transient; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -25,6 +24,7 @@ public class Customer extends M3 { // Properties private String salesperson; private Date dateAdded; + private String id2; private String name; private String countryCode; private String state; diff --git a/web/app/routes/customer/edit.js b/web/app/routes/customer/edit.js index 4978bb7..2b4fb7f 100644 --- a/web/app/routes/customer/edit.js +++ b/web/app/routes/customer/edit.js @@ -8,7 +8,7 @@ export default BaseEditRoute.extend({ me.set('breadcrumbs', [{route: 'customer.list', params: 1, text: 'Customers'}, - {text: 'Edit Customer [' + model.id + ']'}]); + {text: 'Edit Customer [' + model.id2 + ']'}]); if (model.applications) { let selected = model.applications.split(String.fromCharCode(0x1d)); diff --git a/web/app/routes/customer/show.js b/web/app/routes/customer/show.js index f3b4b72..533a91a 100644 --- a/web/app/routes/customer/show.js +++ b/web/app/routes/customer/show.js @@ -9,7 +9,7 @@ export default BaseEditRoute.extend({ me.set('breadcrumbs', [{route: 'customer.list', params: 1, text: 'Customers'}, - {text: 'Show Customer [' + model.id + ']'}]); + {text: 'Show Customer [' + model.id2 + ']'}]); if (model.applications) { let selected = model.applications.split(String.fromCharCode(0x1d)); diff --git a/web/app/templates/customer/list.hbs b/web/app/templates/customer/list.hbs index 9af760d..563b2fe 100644 --- a/web/app/templates/customer/list.hbs +++ b/web/app/templates/customer/list.hbs @@ -154,7 +154,7 @@ {{#if tableOptions.showId}} {{/if}} From 071055a74bab5062581f58d2ed54a191c1d4636e Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Thu, 19 Nov 2020 22:32:32 +0800 Subject: [PATCH 15/15] export customer ID 2 --- .../crm/service/support/CustomerServiceSupport.java | 2 +- .../support/CustomerYearToDateSaleServiceSupport.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java index 779fec8..f351b10 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java @@ -488,7 +488,7 @@ public class CustomerServiceSupport try { log.info("Export Customer [{}].", c); - printer.printRecord(c.getId(), + printer.printRecord(c.getId2(), c.getName(), c.getSumYtdSales(), joinYtdSales(c.getYears(), c.getYtdSales()), diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java index 69c8fc1..aa47dd6 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerYearToDateSaleServiceSupport.java @@ -90,6 +90,12 @@ public class CustomerYearToDateSaleServiceSupport */ @Override public void read(final CSVRecord record) { + val customerId2 = StringUtils.trim(record.get(0)); + if (StringUtils.isBlank(customerId2)) { + log.info("Blank customer id found, ignore."); + return; + } + val customerName = StringUtils.trim(record.get(1)); if (StringUtils.isBlank(customerName)) { log.warn("Record [{}] blank customer name found, ignore.", record); @@ -97,7 +103,9 @@ public class CustomerYearToDateSaleServiceSupport } val customer = customerMapper.find( - new Search(Customer.NAME, customerName)); + new Search(Customer.ID2, customerId2) + .eq(Customer.NAME, customerName)); + if (customer == null) { log.warn("No customer [{}] found, ignore.", customerName); return;
    + {{#sortable-th name='category'}} + + Category + {{/sortable-th}} + {{#sortable-th name='name'}} {{th-filter name='namePrefix' - text='Name' - label='Name Filter' + text='Name & P.N.' + label='Name & P.N. Filter' options=model.namePrefixes value-field='value' text-field='text' }} - Remark @@ -48,6 +52,9 @@
    + {{it.category}} + {{customer-application/preview-btn model=it}} {{th-filter name='owner' @@ -43,7 +42,6 @@ text-exp='$.employeeId ($.name)' }} @@ -71,11 +69,9 @@ {{it.note}} {{/if}} - {{#if ajax.user.admin}} {{option-text model.users it.owner 'id' 'name' '$.employeeId ($.name)'}} {{#if (or ajax.user.admin (eq ajax.user.id it.owner))}} From 79c184df88cce5f087637059a9c0dd5b972a841c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87=E5=A4=A7=E5=8F=94?= Date: Mon, 10 Jun 2019 16:32:29 +0800 Subject: [PATCH 11/15] default not show issue1 --- web/app/routes/customer/list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/web/app/routes/customer/list.js b/web/app/routes/customer/list.js index be0f553..91a25e8 100644 --- a/web/app/routes/customer/list.js +++ b/web/app/routes/customer/list.js @@ -46,6 +46,7 @@ const config = { cols.forEach((col) => { config[col] = ![ + 'showIssue1', // 'showIssue2', // 'showIssue3', 'showDateAdded', From aebbfa65ce4e5c404e8514cdb0a31a4a44ae6abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E7=9A=87=E5=A4=A7=E5=8F=94?= Date: Mon, 9 Sep 2019 17:38:49 +0800 Subject: [PATCH 12/15] remove week goal --- web/app/templates/components/main-container.hbs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/app/templates/components/main-container.hbs b/web/app/templates/components/main-container.hbs index bf8398a..3b3cfc6 100644 --- a/web/app/templates/components/main-container.hbs +++ b/web/app/templates/components/main-container.hbs @@ -45,6 +45,7 @@ Customers {{/link-to}} + {{!--
  • {{#link-to 'week-goal.mine'}} @@ -57,6 +58,7 @@ Week Goals {{/link-to}}
  • + --}} {{#if ajax.user.admin}}
  • {{#link-to 'customer-status.list' 1}} From bf25b7489f54f920c700001705e5bfa587a9422b Mon Sep 17 00:00:00 2001 From: Shaun Chyxion Date: Sun, 8 Nov 2020 14:34:10 +0800 Subject: [PATCH 13/15] add delete customer --- server/crm/pom.xml | 6 +- .../crm/controller/CustomerController.java | 8 + .../support/CustomerServiceSupport.java | 159 +++++++++--------- server/launch.sh | 28 +++ server/lib/tigon | 2 +- server/model/pom.xml | 6 +- .../ambition/crm/model/AuthFailedLog.java | 9 +- .../pudonghot/ambition/crm/model/AuthLog.java | 9 +- .../ambition/crm/model/Customer.java | 16 +- .../crm/model/CustomerApplication.java | 8 +- .../ambition/crm/model/CustomerIssue.java | 7 +- .../crm/model/CustomerPermission.java | 7 +- .../ambition/crm/model/CustomerProperty.java | 10 +- .../crm/model/CustomerYearToDateSale.java | 7 +- .../ambition/crm/model/FileInfo.java | 10 +- .../ambition/crm/model/HomePage.java | 7 +- .../ambition/crm/model/ImportRecord.java | 7 +- .../pudonghot/ambition/crm/model/User.java | 13 +- .../ambition/crm/model/WeekGoal.java | 14 +- server/pom.xml | 24 ++- web/app/templates/components/delete-btn.hbs | 2 +- .../components/form-input-select2.hbs | 2 +- web/app/templates/customer/edit.hbs | 1 + web/app/templates/customer/list.hbs | 11 +- web/app/templates/user/list.hbs | 2 +- web/bower.json | 2 +- 26 files changed, 196 insertions(+), 181 deletions(-) create mode 100755 server/launch.sh diff --git a/server/crm/pom.xml b/server/crm/pom.xml index ab3935d..4ca0c80 100644 --- a/server/crm/pom.xml +++ b/server/crm/pom.xml @@ -17,7 +17,7 @@ ambition-crm - com.pudonghot.ambition.crm.AmbitionCRM + com.pudonghot.ambition.crm.AmbitionCRM @@ -99,6 +99,10 @@ org.springframework.boot spring-boot-maven-plugin + + false + true + diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java index 9b1a834..cee4c07 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/controller/CustomerController.java @@ -11,6 +11,7 @@ import javax.validation.constraints.Min; import me.chyxion.tigon.model.ListResult; import org.apache.commons.lang3.tuple.Pair; import me.chyxion.tigon.webmvc.ResourceModel; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import org.apache.commons.lang3.StringUtils; import com.pudonghot.ambition.crm.model.User; @@ -20,6 +21,7 @@ import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.web.multipart.MultipartFile; import com.pudonghot.ambition.crm.model.CustomerProperty; import com.pudonghot.ambition.crm.service.CustomerService; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMapping; @@ -163,6 +165,12 @@ public class CustomerController "text/csv; charset=gbk", null); } + @RequiresRoles(User.ROLE_ADMIN) + @PostMapping("/delete") + public void delete(@NotBlank @RequestParam("id") String id) { + ((CustomerService) queryService).delete(id); + } + /** * {@inheritDoc} */ diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java index b238770..223fbd7 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java @@ -2,6 +2,7 @@ package com.pudonghot.ambition.crm.service.support; import java.io.*; import java.util.*; +import lombok.val; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.util.Assert; @@ -9,7 +10,6 @@ import me.chyxion.tigon.mybatis.Search; import me.chyxion.tigon.model.ViewModel; import org.apache.commons.csv.CSVRecord; import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVPrinter; import com.pudonghot.ambition.crm.model.*; import me.chyxion.tigon.model.ListResult; import com.pudonghot.ambition.crm.mapper.*; @@ -82,20 +82,21 @@ public class CustomerServiceSupport /** * override find by id with find by search + * * {@inheritDoc} */ @Override public ViewModel findViewModel(final String id) { - final Customer customer = mapper.findForShow(id); + val customer = mapper.findForShow(id); ViewModel viewModel = null; if (customer != null) { viewModel = toViewModel(customer); // accounts - final List permissions = customerPermissionMapper.list( + val permissions = customerPermissionMapper.list( new Search(CustomerPermission.CUSTOMER_ID, id) .eq(CustomerPermission.ENABLED, true)); - final List accounts = new ArrayList<>(permissions.size()); + val accounts = new ArrayList<>(permissions.size()); for (CustomerPermission permission : permissions) { accounts.add(permission.getUserAccount()); } @@ -113,6 +114,7 @@ public class CustomerServiceSupport applicationMapper.list(new Search().asc(Application.NAME))); } + return viewModel; } @@ -122,7 +124,7 @@ public class CustomerServiceSupport @Override public ListResult> listViewModelsPage(Search search) { final String account = search.getAttr(User.ACCOUNT); - final ListResult> result = + val result = new ListResult<>(toViewModel( mapper.listForShow(search, account)), mapper.countForShow(search, account)); @@ -136,12 +138,12 @@ public class CustomerServiceSupport result.setAttr("cityList", mapper.listCity()); result.setAttr("salespersonList", mapper.listSalesperson()); - final List statusList = + val statusList = customerPropertyMapper.list( new Search(CustomerProperty.TYPE, CustomerProperty.Type.STATUS) .asc(CustomerProperty.SORT)); - final CustomerProperty noneStatus = new CustomerProperty(); + val noneStatus = new CustomerProperty(); noneStatus.setId("null"); noneStatus.setName("None"); noneStatus.setEnabled(true); @@ -161,26 +163,25 @@ public class CustomerServiceSupport */ @Override public ViewModel update(final CustomerFormForUpdate form) { - final String customerId = form.getId(); + val customerId = form.getId(); customerApplicationMapper.delete( new Search(CustomerApplication.CUSTOMER_ID, customerId)); customerPermissionMapper.delete( new Search(CustomerPermission.CUSTOMER_ID, customerId) .eq(CustomerPermission.TYPE, CustomerPermission.Type.APPLICATION)); - final String[] applications = form.getApplications(); + val applications = form.getApplications(); if (applications != null && applications.length > 0) { - final String operator = form.getUpdatedBy(); - final Date now = new Date(); - for (final String applicationId : applications) { - final Application application = - applicationMapper.find(applicationId); + val operator = form.getUpdatedBy(); + val now = new Date(); + for (val applicationId : applications) { + val application = applicationMapper.find(applicationId); Assert.state(application != null, "No application [" + applicationId + "] found"); Assert.state(application.isEnabled(), "Application [" + application.getName() + "] is disabled"); - final CustomerApplication customerApplication = new CustomerApplication(); + val customerApplication = new CustomerApplication(); customerApplication.setId(idSeq.get()); customerApplication.setEnabled(true); customerApplication.setCustomerId(customerId); @@ -189,7 +190,7 @@ public class CustomerServiceSupport customerApplication.setDateCreated(now); customerApplicationMapper.insert(customerApplication); - final String applicationOwner = application.getOwner(); + val applicationOwner = application.getOwner(); if (StringUtils.isNotBlank(applicationOwner)) { log.info("Add application owner [{}] customer [{}] permission.", applicationOwner, customerId); @@ -210,15 +211,15 @@ public class CustomerServiceSupport List> ytdSales = null; - final String strYears = model.getYears(); - final String strYtdSales = model.getYtdSales(); + val strYears = model.getYears(); + val strYtdSales = model.getYtdSales(); String[] years = null; if (StringUtils.isNotBlank(strYears) && StringUtils.isNotBlank(strYtdSales)) { years = strYears.split(SPLITTER); - final String[] sales = strYtdSales.split(SPLITTER); + val sales = strYtdSales.split(SPLITTER); ytdSales = new ArrayList<>(years.length); int i = 0; for (final String year : years) { @@ -233,26 +234,15 @@ public class CustomerServiceSupport viewModel.setAttr("ytdSales", ytdSales != null ? ytdSales : Collections.emptyList()); - // recent 3 issues - // final List> recentIssues = - // customerIssueService.listRecent(model.getId(), 3); - - final String lastIssue = model.getLastIssue(); + val lastIssue = model.getLastIssue(); if (StringUtils.isNotBlank(lastIssue)) { - final String[] issueParts = lastIssue.split(SPLITTER); + val issueParts = lastIssue.split(SPLITTER); CustomerIssue issue = new CustomerIssue(); issue.setId(issueParts[0]); issue.setIssue(issueParts[1]); issue.setDateCreated(new Date(Long.parseLong(issueParts[2]))); viewModel.setAttr("issue1", issue); } -// if (!recentIssues.isEmpty()) { -// int i = 0; -// final Iterator> it = recentIssues.iterator(); -// while (it.hasNext()) { -// viewModel.setAttr("issue" + (++i), it.next()); -// } -// } } /** @@ -262,9 +252,8 @@ public class CustomerServiceSupport @Override public void importCSV(final String operator, final InputStream csvIn) { - final Date now = new Date(); - - final ImportRecord importRecord = new ImportRecord(); + val now = new Date(); + val importRecord = new ImportRecord(); importRecord.setId(idSeq.get()); importRecord.setType(ImportRecord.TYPE_CUSTOMER); importRecord.setCompleted(false); @@ -279,6 +268,32 @@ public class CustomerServiceSupport private final User user = new User(); private final CustomerPermission permission = new CustomerPermission(); + /** + * {@inheritDoc} + */ + @Override + public void read(final CSVRecord record) { + val customerId = record.get(0).trim(); + if (StringUtils.isBlank(customerId)) { + log.info("Blank customer id found, ignore."); + return; + } + customer.setId(customerId); + customer.setName(record.get(1).trim()); + customer.setCountryCode(record.get(2).trim()); + customer.setState(record.get(3).trim()); + customer.setCity(record.get(4).trim()); + customer.setMs(record.get(5).trim()); + customer.setRegion(record.get(6).trim()); + val employeeId = StringUtils.defaultIfBlank(record.get(7).trim(), null); + customer.setSalesperson(employeeId); + log.info("Customer [{}] read.", customer); + + createUserIfNotExist(operator, employeeId, now); + createOrUpdateCustomer(operator, customer, now); + createOrUpdateCustomerPermissions(operator, customerId, record.get(8), now); + } + /** * {@inheritDoc} */ @@ -298,32 +313,6 @@ public class CustomerServiceSupport */ } - /** - * {@inheritDoc} - */ - @Override - public void read(final CSVRecord record) { - final String customerId = record.get(0).trim(); - if (StringUtils.isBlank(customerId)) { - log.info("Blank customer id found, ignore."); - return; - } - customer.setId(customerId); - customer.setName(record.get(1).trim()); - customer.setCountryCode(record.get(2).trim()); - customer.setState(record.get(3).trim()); - customer.setCity(record.get(4).trim()); - customer.setMs(record.get(5).trim()); - customer.setRegion(record.get(6).trim()); - final String employeeId = StringUtils.defaultIfBlank(record.get(7).trim(), null); - customer.setSalesperson(employeeId); - log.info("Customer [{}] read.", customer); - - createUserIfNotExist(operator, employeeId, now); - createOrUpdateCustomer(operator, customer, now); - createOrUpdateCustomerPermissions(operator, customerId, record.get(8), now); - } - // -- // private methods @@ -336,7 +325,7 @@ public class CustomerServiceSupport user.setAccount(employeeId); user.setEmployeeId(employeeId); - final String password = idSeq.get(); + val password = idSeq.get(); user.setPassword(password); user.setGender(Constants.GENDER_MALE); user.setEnabled(true); @@ -351,10 +340,10 @@ public class CustomerServiceSupport private void createOrUpdateCustomer(final String operator, final Customer customer, final Date date) { log.info("User [{}] create or update customer [{}].", operator, customer); - final String customerId = customer.getId(); - final String ms = customer.getMs(); + val customerId = customer.getId(); + val ms = customer.getMs(); - final Customer customerExisted = mapper.find(customerId); + val customerExisted = mapper.find(customerId); if (customerExisted != null) { log.info("Customer existed [{}] found, update.", customerExisted); // basic props @@ -386,7 +375,7 @@ public class CustomerServiceSupport if (customerIssueMapper.count( new Search(CustomerIssue.CUSTOMER_ID, customerId) .eq(CustomerIssue.ENABLED, true)) < 1) { - final CustomerIssue ci = new CustomerIssue(); + val ci = new CustomerIssue(); ci.setId(idSeq.get()); ci.setArtificial(false); ci.setCustomerId(customerId); @@ -404,11 +393,11 @@ public class CustomerServiceSupport log.info("User [{}] create or update customer [{}] permissions [{}].", operator, customerId, strAccounts); if (StringUtils.isNotBlank(strAccounts)) { - for (final String account : new HashSet<>( + for (val account : new HashSet<>( Arrays.asList(strAccounts.trim().split("\\s*,\\s*")))) { if (StringUtils.isNotBlank(account)) { - final CustomerPermission permOld = customerPermissionMapper.find( + val permOld = customerPermissionMapper.find( new Search(CustomerPermission.CUSTOMER_ID, customerId) .eq(CustomerPermission.USER_ACCOUNT, account)); if (permOld != null) { @@ -458,12 +447,12 @@ public class CustomerServiceSupport */ @Override public File exportCSV(final String operator) { - final File file = new File(FileUtils.getTempDirectory(), + val file = new File(FileUtils.getTempDirectory(), "Customers_" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd_HHmmss") + ".csv"); - try (final OutputStreamWriter fileWriter = + try (val fileWriter = new OutputStreamWriter(new FileOutputStream(file), CSVUtils.GBK); - final CSVPrinter printer = EXPORT_FORMAT.print(fileWriter)) { + val printer = EXPORT_FORMAT.print(fileWriter)) { scan(512, new Search() // .setAttr("APPLICATION_NOT_NULL", true) @@ -545,12 +534,12 @@ public class CustomerServiceSupport private String joinYtdSales(final String strYears, final String strYtdSales) { if (StringUtils.isNotBlank(strYears) && StringUtils.isNotBlank(strYtdSales)) { - final String[] years = strYears.split(SPLITTER); - final String[] sales = strYtdSales.split(SPLITTER); - final List ytdSales = new ArrayList<>(years.length); + val years = strYears.split(SPLITTER); + val sales = strYtdSales.split(SPLITTER); + val ytdSales = new ArrayList<>(years.length); int i = 0; - for (final String year : years) { + for (val year : years) { ytdSales.add(year + ": " + sales[i++]); } return StringUtils.join(ytdSales, "\n"); @@ -561,4 +550,24 @@ public class CustomerServiceSupport private String dateFormat(Date date, String pattern) { return date != null ? DateFormatUtils.format(date, pattern) : ""; } + + /** + * {@inheritDoc} + */ + @Override + public Customer delete(final String id) { + val customer = super.delete(id); + Assert.state(customer != null, + "No customer [" + id + "] found"); + customerPermissionMapper.delete( + new Search(CustomerPermission.CUSTOMER_ID, id)); + customerIssueMapper.delete( + new Search(CustomerIssue.CUSTOMER_ID, id)); + customerYearToDateSaleMapper.delete( + new Search(CustomerYearToDateSale.CUSTOMER_ID, id)); + customerApplicationMapper.delete( + new Search(CustomerApplication.CUSTOMER_ID, id)); + + return customer; + } } diff --git a/server/launch.sh b/server/launch.sh new file mode 100755 index 0000000..6ff853a --- /dev/null +++ b/server/launch.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# get real path of softlink +get_real_path() { + local f="$1" + while [ -h "$f" ]; do + ls=`ls -ld "$f"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + f="$link" + else + f=`dirname "$f"`/"$link" + fi + done + echo "$f" +} + +prg_path=$(get_real_path "$0") +echo "Script path [$prg_path]" + +# Service Home +pushd $(dirname "$prg_path") +WORK_DIR=$(pwd) +echo "Work dir [$WORK_DIR]" + +mvn -T 4C clean -pl crm -am -DskipTests \ + spring-boot:run + diff --git a/server/lib/tigon b/server/lib/tigon index 7a0c14b..40acef8 160000 --- a/server/lib/tigon +++ b/server/lib/tigon @@ -1 +1 @@ -Subproject commit 7a0c14ba3f821049872595609dbf278cf410cbd5 +Subproject commit 40acef80b8af560cbf19a0a841748c0d63406dde diff --git a/server/model/pom.xml b/server/model/pom.xml index 2080bba..cc1be06 100644 --- a/server/model/pom.xml +++ b/server/model/pom.xml @@ -10,7 +10,7 @@ jar - provided + provided @@ -36,7 +36,7 @@ me.chyxion.tigon tigon-web - ${tigon.webmvc.scrope} + ${tigon.webmvc.scope} org.projectlombok @@ -67,7 +67,7 @@ war - compile + compile 8088 DEBUG ${project.basedir}/.logs diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthFailedLog.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthFailedLog.java index 0e07bb7..c8f7bba 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthFailedLog.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthFailedLog.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; import me.chyxion.tigon.mybatis.UseGeneratedKeys; /** @@ -15,17 +16,11 @@ import me.chyxion.tigon.mybatis.UseGeneratedKeys; @Getter @Setter @UseGeneratedKeys +@FieldNameConstants(prefix = "") @Table("crm_auth_failed_log") public class AuthFailedLog extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String LOGIN_ID = "login_id"; - public static final String PASSWORD = "password"; - public static final String IP = "ip"; - public static final String USER_AGENT = "user_agent"; - public static final String EXT = "ext"; - // Properties private String loginId; private String password; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthLog.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthLog.java index c9924b3..d5de75a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthLog.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/AuthLog.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; import me.chyxion.tigon.mybatis.UseGeneratedKeys; /** @@ -16,19 +17,13 @@ import me.chyxion.tigon.mybatis.UseGeneratedKeys; @Setter @UseGeneratedKeys @Table("crm_auth_log") +@FieldNameConstants(prefix = "") public class AuthLog extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String USER_ID = "user_id"; - public static final String USER_AGENT = "user_agent"; - public static final String IP = "ip"; - public static final String EXT = "ext"; - // Properties private String userId; private String userAgent; private String ip; private String ext; - } diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java index 7ccabf2..794b2ed 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/Customer.java @@ -2,6 +2,8 @@ package com.pudonghot.ambition.crm.model; import lombok.Getter; import lombok.Setter; +import lombok.experimental.FieldNameConstants; + import java.util.Date; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; @@ -16,22 +18,10 @@ import me.chyxion.tigon.mybatis.Transient; @Getter @Setter @Table("crm_customer") +@FieldNameConstants(prefix = "") public class Customer extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String SALESPERSON = "salesperson"; - public static final String DATE_ADDED = "date_added"; - public static final String NAME = "name"; - public static final String COUNTRY_CODE = "country_code"; - public static final String STATE = "state"; - public static final String CITY = "city"; - public static final String MS = "ms"; - public static final String REGION = "region"; - public static final String STATUS = "status"; - public static final String SUM_YTD_SALES = "sum_ytd_sales"; - public static final String COUNT_YTD_SALES = "count_ytd_sales"; - // Properties private String salesperson; private Date dateAdded; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerApplication.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerApplication.java index 485c1f1..585725d 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerApplication.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerApplication.java @@ -2,8 +2,9 @@ package com.pudonghot.ambition.crm.model; import lombok.Getter; import lombok.Setter; -import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.model.M3; +import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -13,14 +14,11 @@ import me.chyxion.tigon.model.M3; */ @Getter @Setter +@FieldNameConstants(prefix = "") @Table("crm_customer_application") public class CustomerApplication extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String CUSTOMER_ID = "customer_id"; - public static final String APPLICATION_ID = "application_id"; - // Properties private String customerId; private String applicationId; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerIssue.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerIssue.java index f4cc23e..902d43c 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerIssue.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerIssue.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -13,15 +14,11 @@ import me.chyxion.tigon.mybatis.Table; */ @Getter @Setter +@FieldNameConstants(prefix = "") @Table("crm_customer_issue") public class CustomerIssue extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String CUSTOMER_ID = "customer_id"; - public static final String ISSUE = "issue"; - public static final String ARTIFICIAL = "artificial"; - // Properties private String customerId; private String issue; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerPermission.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerPermission.java index 3b60a0c..cf4d190 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerPermission.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerPermission.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -13,15 +14,11 @@ import me.chyxion.tigon.mybatis.Table; */ @Getter @Setter +@FieldNameConstants(prefix = "") @Table("crm_customer_permission") public class CustomerPermission extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String USER_ACCOUNT = "user_account"; - public static final String CUSTOMER_ID = "customer_id"; - public static final String TYPE = "type"; - public enum Type { SYSTEM, APPLICATION diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerProperty.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerProperty.java index c268463..ca715fc 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerProperty.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerProperty.java @@ -5,6 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.NotUpdate; +import lombok.experimental.FieldNameConstants; import me.chyxion.tigon.mybatis.NotUpdateWhenNull; /** @@ -15,6 +16,7 @@ import me.chyxion.tigon.mybatis.NotUpdateWhenNull; */ @Getter @Setter +@FieldNameConstants(prefix = "") @Table("crm_customer_property") public class CustomerProperty extends M3 { private static final long serialVersionUID = 1L; @@ -24,8 +26,7 @@ public class CustomerProperty extends M3 { */ // public static final String TYPE_STATUS = "STATUS"; public enum Type { - STATUS, - // APPLICATION, + STATUS } // system status @@ -38,11 +39,6 @@ public class CustomerProperty extends M3 { public static final String STATUS_NA_ID = "STATUS_NA"; public static final String STATUS_NA_NAME = "NA"; - // Column Names - public static final String TYPE = "type"; - public static final String NAME = "name"; - public static final String SORT = "sort"; - // Properties @NotUpdate private Type type; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerYearToDateSale.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerYearToDateSale.java index 6720d10..8b2e64a 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerYearToDateSale.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/CustomerYearToDateSale.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -13,15 +14,11 @@ import me.chyxion.tigon.mybatis.Table; */ @Getter @Setter +@FieldNameConstants(prefix = "") @Table("crm_customer_year_to_date_sale") public class CustomerYearToDateSale extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String CUSTOMER_ID = "customer_id"; - public static final String YEAR = "year"; - public static final String YTD_SALE = "ytd_sale"; - // Properties private String customerId; private String year; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/FileInfo.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/FileInfo.java index e1f779b..c2d2845 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/FileInfo.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/FileInfo.java @@ -5,6 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.Transient; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -16,17 +17,10 @@ import me.chyxion.tigon.mybatis.Transient; @Getter @Setter @Table("crm_file_info") +@FieldNameConstants(prefix = "") public class FileInfo extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String NAME = "name"; - public static final String FILE_PATH = "file_path"; - public static final String FORMAT = "format"; - public static final String DOWNLOAD_NAME = "download_name"; - public static final String CONTENT_LENGTH = "content_length"; - public static final String CONTENT_TYPE = "content_type"; - // Properties private String name; private String filePath; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/HomePage.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/HomePage.java index ef483ed..f53c787 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/HomePage.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/HomePage.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; +import lombok.experimental.FieldNameConstants; /** * @version 0.0.1 @@ -14,14 +15,10 @@ import me.chyxion.tigon.mybatis.Table; @Getter @Setter @Table("crm_home_page") +@FieldNameConstants(prefix = "") public class HomePage extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String NAME = "name"; - public static final String CONTENT = "content"; - public static final String APPLYING = "applying"; - // Properties private String name; private String content; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ImportRecord.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/ImportRecord.java index 92c9b5b..15c4dc9 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/ImportRecord.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/ImportRecord.java @@ -6,6 +6,7 @@ import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.NotUpdate; import me.chyxion.tigon.mybatis.Transient; +import lombok.experimental.FieldNameConstants; /** * @author Shaun Chyxion
    @@ -15,6 +16,7 @@ import me.chyxion.tigon.mybatis.Transient; @Getter @Setter @Table("crm_import_record") +@FieldNameConstants(prefix = "") public class ImportRecord extends M3 { private static final long serialVersionUID = 1L; @@ -22,11 +24,6 @@ public class ImportRecord extends M3 { public static final String TYPE_CUSTOMER = "CUSTOMER"; public static final String TYPE_YTD_SALES = "YTD_SALES"; - // Column Names - public static final String TYPE = "type"; - public static final String COMPLETED = "completed"; - public static final String SUCCESS = "success"; - // Properties @NotUpdate private String type; diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java index da9012b..972f810 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/User.java @@ -5,6 +5,7 @@ import lombok.Setter; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.NotUpdate; +import lombok.experimental.FieldNameConstants; import com.alibaba.fastjson.annotation.JSONField; import me.chyxion.tigon.mybatis.NotUpdateWhenNull; @@ -17,6 +18,7 @@ import me.chyxion.tigon.mybatis.NotUpdateWhenNull; @Getter @Setter @Table("crm_user") +@FieldNameConstants(prefix = "") public class User extends M3 { private static final long serialVersionUID = 1L; @@ -25,17 +27,6 @@ public class User extends M3 { public static final String ROLE_LELI = "leli"; public static final String ROLE_CHYXION = "chyxion"; - // Column Names - public static final String ACCOUNT = "account"; - public static final String EMPLOYEE_ID = "employee_id"; - public static final String PASSWORD = "password"; - public static final String MOBILE = "mobile"; - public static final String EMAIL = "email"; - public static final String NAME = "name"; - public static final String EN_NAME = "en_name"; - public static final String GENDER = "gender"; - public static final String ADMIN = "admin"; - // Properties private String account; @NotUpdate diff --git a/server/model/src/main/java/com/pudonghot/ambition/crm/model/WeekGoal.java b/server/model/src/main/java/com/pudonghot/ambition/crm/model/WeekGoal.java index 17f11d8..dbd883d 100644 --- a/server/model/src/main/java/com/pudonghot/ambition/crm/model/WeekGoal.java +++ b/server/model/src/main/java/com/pudonghot/ambition/crm/model/WeekGoal.java @@ -2,6 +2,8 @@ package com.pudonghot.ambition.crm.model; import lombok.Getter; import lombok.Setter; +import lombok.experimental.FieldNameConstants; + import java.util.Date; import me.chyxion.tigon.model.M3; import me.chyxion.tigon.mybatis.Table; @@ -16,20 +18,10 @@ import me.chyxion.tigon.mybatis.Transient; @Getter @Setter @Table("crm_week_goal") +@FieldNameConstants(prefix = "") public class WeekGoal extends M3 { private static final long serialVersionUID = 1L; - // Column Names - public static final String USER_ID = "user_id"; - public static final String YEAR = "year"; - public static final String QUARTER = "quarter"; - public static final String DATE_START = "date_start"; - public static final String DATE_END = "date_end"; - public static final String MONTH_START = "month_start"; - public static final String MONTH_END = "month_end"; - public static final String GOAL = "goal"; - public static final String DONE = "done"; - // Properties @NotUpdate private String userId; diff --git a/server/pom.xml b/server/pom.xml index 0e957cf..017bbd9 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -16,8 +16,10 @@ 1.8 1.8 utf-8 - 0.0.1-SNAPSHOT + + + 2.0.3.RELEASE 1.8.10
    @@ -54,6 +56,11 @@ + + org.projectlombok + lombok + 1.18.2 + com.pudonghot.ambition crm-model @@ -170,6 +177,13 @@ org.apache.maven.plugins maven-dependency-plugin + + org.springframework.boot + spring-boot-maven-plugin + + true + + @@ -179,8 +193,14 @@ ${spring-boot.version} true - ${start-class} ZIP + true + + + org.projectlombok + lombok + + diff --git a/web/app/templates/components/delete-btn.hbs b/web/app/templates/components/delete-btn.hbs index 3494592..5430e3c 100644 --- a/web/app/templates/components/delete-btn.hbs +++ b/web/app/templates/components/delete-btn.hbs @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/web/app/templates/components/form-input-select2.hbs b/web/app/templates/components/form-input-select2.hbs index 212e2ef..cdbfbab 100644 --- a/web/app/templates/components/form-input-select2.hbs +++ b/web/app/templates/components/form-input-select2.hbs @@ -1,7 +1,7 @@
    -
    +
  • Settings + Settings {{#link-to 'customer.show' it.id title='Show Customer'}} - {{it.id}} + {{it.id2}} {{/link-to}}