UNPKG

16.3 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7require("babel/polyfill");
8
9"use strict";
10
11exports["default"] = function (grunt) {
12 grunt.registerTask("db:version", "Show the current migration version", function () {
13 var done;
14 done = this.async();
15 return grunt.startActionhero(function (api) {
16 return api.bookshelf.utils.db.version().then(function (version) {
17 grunt.log.oklns("Migrate version: " + version);
18 return done();
19 })["catch"](function (err) {
20 return done(err);
21 });
22 });
23 });
24
25 grunt.registerTask("db:rollback", "Rollback the database", function () {
26 var done;
27 done = this.async();
28 return grunt.startActionhero(function (api) {
29 return api.bookshelf.utils.db.version().then(function (oldVersion) {
30 return api.bookshelf.utils.db.rollback().then(function () {
31 return api.bookshelf.utils.db.version().then(function (newVersion) {
32 grunt.log.oklns(oldVersion + " to " + newVersion);
33 return done();
34 });
35 });
36 })["catch"](function (err) {
37 return done(err);
38 });
39 });
40 });
41
42 grunt.registerTask("db:migrate:make", "Make migrate file (:name)", function (name) {
43 var done;
44 done = this.async();
45 if (name == null) {
46 return done(new Error("The file name is required.\nExample: grunt db:migrate:make:create_users"));
47 }
48 return grunt.startActionhero(function (api) {
49 return api.bookshelf.utils.db.migrate.make(name).then(function (name) {
50 grunt.log.oklns("Make " + name);
51 return done();
52 })["catch"](function (err) {
53 return done(err);
54 });
55 });
56 });
57
58 grunt.registerTask("db:migrate", "Migrate the database", function () {
59 var done;
60 done = this.async();
61 return grunt.startActionhero(function (api) {
62 return api.bookshelf.utils.db.migrate.run().then(function () {
63 grunt.log.oklns("Migrate database " + api.config.bookshelf.connection.database + ".");
64 return done();
65 })["catch"](function (err) {
66 return done(err);
67 });
68 });
69 });
70
71 grunt.registerTask("db:seed:make", "Make seed file (:name)", function (name) {
72 var done;
73 done = this.async();
74 if (name == null) {
75 return done(new Error("The file name is required.\nExample: grunt db:seed:make:countries"));
76 }
77 return grunt.startActionhero(function (api) {
78 return api.bookshelf.utils.db.seed.make(name).then(function (name) {
79 grunt.log.oklns("Make " + name);
80 return done();
81 })["catch"](function (err) {
82 return done(err);
83 });
84 });
85 });
86
87 grunt.registerTask("db:seed", "Create the seed data", function () {
88 var done;
89 done = this.async();
90 return grunt.startActionhero(function (api) {
91 return api.bookshelf.utils.db.seed.run().then(function () {
92 grunt.log.oklns("Seed database " + api.config.bookshelf.connection.database + ".");
93 return done();
94 })["catch"](function (err) {
95 return done(err);
96 });
97 });
98 });
99
100 grunt.registerTask("db:create", "Create the database", function () {
101 var done, ok;
102 done = this.async();
103 return grunt.startActionhero(function (api) {
104 var ok = "Create database " + api.config.bookshelf.connection.database + ".";
105 return api.bookshelf.utils.db.create().then(function () {
106 grunt.log.oklns(ok);
107 return done();
108 })["catch"](function (err) {
109 return done(err);
110 });
111 });
112 });
113
114 grunt.registerTask("db:drop", "Drop the database", function () {
115 var done, ok;
116 done = this.async();
117 return grunt.startActionhero(function (api) {
118 ok = "Drop database " + api.config.bookshelf.connection.database + ".";
119 return api.bookshelf.utils.db.create().then(function () {
120 grunt.log.oklns(ok);
121 return done();
122 })["catch"](function (err) {
123 return done(err);
124 });
125 });
126 });
127
128 grunt.registerTask("db:migrate:reset", "Runs db:drop db:create db:migrate", ["db:drop", "db:create", "db:migrate"]);
129 grunt.registerTask("db:reset", "Runs db:migrate:reset db:seed", ["db:migrate:reset", "db:seed"]);
130
131 return true;
132};
133
134;
135module.exports = exports["default"];
136//# sourceMappingURL=data:application/json;base64,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T0FBSyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNwSCxPQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSwrQkFBK0IsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0FBRWpHLFNBQU8sSUFBSSxDQUFDO0NBQ2I7O0FBQUEsQ0FBQyIsImZpbGUiOiJncnVudC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCJiYWJlbC9wb2x5ZmlsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncnVudCkge1xuICBncnVudC5yZWdpc3RlclRhc2soJ2RiOnZlcnNpb24nLCAnU2hvdyB0aGUgY3VycmVudCBtaWdyYXRpb24gdmVyc2lvbicsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb25lO1xuICAgIGRvbmUgPSB0aGlzLmFzeW5jKCk7XG4gICAgcmV0dXJuIGdydW50LnN0YXJ0QWN0aW9uaGVybyhmdW5jdGlvbihhcGkpIHtcbiAgICAgIHJldHVybiBhcGkuYm9va3NoZWxmLnV0aWxzLmRiLnZlcnNpb24oKS50aGVuKGZ1bmN0aW9uKHZlcnNpb24pIHtcbiAgICAgICAgZ3J1bnQubG9nLm9rbG5zKFwiTWlncmF0ZSB2ZXJzaW9uOiBcIiArIHZlcnNpb24pO1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHJldHVybiBkb25lKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZ3J1bnQucmVnaXN0ZXJUYXNrKCdkYjpyb2xsYmFjaycsICdSb2xsYmFjayB0aGUgZGF0YWJhc2UnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9uZTtcbiAgICBkb25lID0gdGhpcy5hc3luYygpO1xuICAgIHJldHVybiBncnVudC5zdGFydEFjdGlvbmhlcm8oZnVuY3Rpb24oYXBpKSB7XG4gICAgICByZXR1cm4gYXBpLmJvb2tzaGVsZi51dGlscy5kYi52ZXJzaW9uKCkudGhlbihmdW5jdGlvbihvbGRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBhcGkuYm9va3NoZWxmLnV0aWxzLmRiLnJvbGxiYWNrKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXBpLmJvb2tzaGVsZi51dGlscy5kYi52ZXJzaW9uKCkudGhlbihmdW5jdGlvbihuZXdWZXJzaW9uKSB7XG4gICAgICAgICAgICBncnVudC5sb2cub2tsbnMob2xkVmVyc2lvbiArIFwiIHRvIFwiICsgbmV3VmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGdydW50LnJlZ2lzdGVyVGFzaygnZGI6bWlncmF0ZTptYWtlJywgJ01ha2UgbWlncmF0ZSBmaWxlICg6bmFtZSknLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGRvbmU7XG4gICAgZG9uZSA9IHRoaXMuYXN5bmMoKTtcbiAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZG9uZShuZXcgRXJyb3IoXCJUaGUgZmlsZSBuYW1lIGlzIHJlcXVpcmVkLlxcbkV4YW1wbGU6IGdydW50IGRiOm1pZ3JhdGU6bWFrZTpjcmVhdGVfdXNlcnNcIikpO1xuICAgIH1cbiAgICByZXR1cm4gZ3J1bnQuc3RhcnRBY3Rpb25oZXJvKGZ1bmN0aW9uKGFwaSkge1xuICAgICAgcmV0dXJuIGFwaS5ib29rc2hlbGYudXRpbHMuZGIubWlncmF0ZS5tYWtlKG5hbWUpLnRoZW4oZnVuY3Rpb24obmFtZSkge1xuICAgICAgICBncnVudC5sb2cub2tsbnMoXCJNYWtlIFwiICsgbmFtZSk7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBncnVudC5yZWdpc3RlclRhc2soJ2RiOm1pZ3JhdGUnLCAnTWlncmF0ZSB0aGUgZGF0YWJhc2UnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9uZTtcbiAgICBkb25lID0gdGhpcy5hc3luYygpO1xuICAgIHJldHVybiBncnVudC5zdGFydEFjdGlvbmhlcm8oZnVuY3Rpb24oYXBpKSB7XG4gICAgICByZXR1cm4gYXBpLmJvb2tzaGVsZi51dGlscy5kYi5taWdyYXRlLnJ1bigpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIGdydW50LmxvZy5va2xucyhcIk1pZ3JhdGUgZGF0YWJhc2UgXCIgKyBhcGkuY29uZmlnLmJvb2tzaGVsZi5jb25uZWN0aW9uLmRhdGFiYXNlICsgXCIuXCIpO1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHJldHVybiBkb25lKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZ3J1bnQucmVnaXN0ZXJUYXNrKCdkYjpzZWVkOm1ha2UnLCAnTWFrZSBzZWVkIGZpbGUgKDpuYW1lKScsIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgZG9uZTtcbiAgICBkb25lID0gdGhpcy5hc3luYygpO1xuICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIlRoZSBmaWxlIG5hbWUgaXMgcmVxdWlyZWQuXFxuRXhhbXBsZTogZ3J1bnQgZGI6c2VlZDptYWtlOmNvdW50cmllc1wiKSk7XG4gICAgfVxuICAgIHJldHVybiBncnVudC5zdGFydEFjdGlvbmhlcm8oZnVuY3Rpb24oYXBpKSB7XG4gICAgICByZXR1cm4gYXBpLmJvb2tzaGVsZi51dGlscy5kYi5zZWVkLm1ha2UobmFtZSkudGhlbihmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGdydW50LmxvZy5va2xucyhcIk1ha2UgXCIgKyBuYW1lKTtcbiAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGdydW50LnJlZ2lzdGVyVGFzaygnZGI6c2VlZCcsICdDcmVhdGUgdGhlIHNlZWQgZGF0YScsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb25lO1xuICAgIGRvbmUgPSB0aGlzLmFzeW5jKCk7XG4gICAgcmV0dXJuIGdydW50LnN0YXJ0QWN0aW9uaGVybyhmdW5jdGlvbihhcGkpIHtcbiAgICAgIHJldHVybiBhcGkuYm9va3NoZWxmLnV0aWxzLmRiLnNlZWQucnVuKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgZ3J1bnQubG9nLm9rbG5zKFwiU2VlZCBkYXRhYmFzZSBcIiArIGFwaS5jb25maWcuYm9va3NoZWxmLmNvbm5lY3Rpb24uZGF0YWJhc2UgKyBcIi5cIik7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBncnVudC5yZWdpc3RlclRhc2soJ2RiOmNyZWF0ZScsICdDcmVhdGUgdGhlIGRhdGFiYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvbmUsIG9rO1xuICAgIGRvbmUgPSB0aGlzLmFzeW5jKCk7XG4gICAgcmV0dXJuIGdydW50LnN0YXJ0QWN0aW9uaGVybyhmdW5jdGlvbihhcGkpIHtcbiAgICAgIHZhciBvayA9IFwiQ3JlYXRlIGRhdGFiYXNlIFwiICsgYXBpLmNvbmZpZy5ib29rc2hlbGYuY29ubmVjdGlvbi5kYXRhYmFzZSArIFwiLlwiO1xuICAgICAgcmV0dXJuIGFwaS5ib29rc2hlbGYudXRpbHMuZGIuY3JlYXRlKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgZ3J1bnQubG9nLm9rbG5zKG9rKTtcbiAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGdydW50LnJlZ2lzdGVyVGFzaygnZGI6ZHJvcCcsICdEcm9wIHRoZSBkYXRhYmFzZScsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb25lLCBvaztcbiAgICBkb25lID0gdGhpcy5hc3luYygpO1xuICAgIHJldHVybiBncnVudC5zdGFydEFjdGlvbmhlcm8oZnVuY3Rpb24oYXBpKSB7XG4gICAgICBvayA9IFwiRHJvcCBkYXRhYmFzZSBcIiArIGFwaS5jb25maWcuYm9va3NoZWxmLmNvbm5lY3Rpb24uZGF0YWJhc2UgKyBcIi5cIjtcbiAgICAgIHJldHVybiBhcGkuYm9va3NoZWxmLnV0aWxzLmRiLmNyZWF0ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIGdydW50LmxvZy5va2xucyhvayk7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBncnVudC5yZWdpc3RlclRhc2soJ2RiOm1pZ3JhdGU6cmVzZXQnLCAnUnVucyBkYjpkcm9wIGRiOmNyZWF0ZSBkYjptaWdyYXRlJywgWydkYjpkcm9wJywgJ2RiOmNyZWF0ZScsICdkYjptaWdyYXRlJ10pO1xuICBncnVudC5yZWdpc3RlclRhc2soJ2RiOnJlc2V0JywgJ1J1bnMgZGI6bWlncmF0ZTpyZXNldCBkYjpzZWVkJywgWydkYjptaWdyYXRlOnJlc2V0JywgJ2RiOnNlZWQnXSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
\No newline at end of file