-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
127 lines (113 loc) · 3.92 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* eslint-env node */
'use strict';
var DeployPluginBase = require('ember-cli-deploy-plugin');
var path = require('path');
var push = require('couchdb-push');
var fs = require('fs');
var RSVP = require('rsvp');
var VersionChecker = require('ember-cli-version-checker');
module.exports = {
name: 'ember-cli-deploy-couchdb',
createDeployPlugin: function(options) {
var DeployPlugin = DeployPluginBase.extend({
name: options.name,
defaultConfig: {
couchDir: function(context) {
return context.couchDir;
},
db: function(context) {
return context.db;
},
ddocname: function(context) {
return context.ddocname || context.project.name();
},
couchappignore: function(context) {
return context.couchappignore || [];
},
distDir: function(context) {
return context.distDir;
},
distFiles: function(context) {
return context.distFiles || [];
}
},
willDeploy: function(/* context */) {
var distDir = this.readConfig('distDir');
return {
couchDir: distDir,
distDir: distDir + path.sep + '_attachments'
};
},
didBuild: function(/* context */) {
var couchDir = this.readConfig('couchDir');
var db = this.readConfig('db');
var ddocname = this.readConfig('ddocname');
var distFiles = this.readConfig('distFiles');
var couchappignore = this.readConfig('couchappignore');
var checker = new VersionChecker(this);
var url = "ENV.baseURL: '";
if (checker.for('ember-cli', 'npm').satisfies('>= 2.7.0')) {
url = "ENV.rootURL: '";
}
this.log('couchDir : ' + couchDir, { color: 'gray' });
db = db.replace( /\/\/.*\@/g ,'//'); // Strip username, password
this.log("Visit : " + db + "/_design/" + ddocname + "/_rewrite/ or vhost", { color: 'gray' });
db = db.replace( /^.*\/\/.*\//g ,'/'); // Strip domain
this.log(url + db + "/_design/" + ddocname + "/_rewrite/' or '/'", { color: 'gray' });
distFiles.sort();
var previous = "";
var rewrites = [];
distFiles.forEach(function (item) {
if (item === 'index.html') {
return;
}
item = item.replace( /\/.*$/g ,'/*');
if (item !== previous) {
rewrites.push(
{
"from": item,
"to": item,
"method": "GET"
}
);
previous = item;
}
}.bind(this));
rewrites.push(
{
"from": "*",
"to": "index.html",
"method": "GET"
},
{
"from": "",
"to": "index.html",
"method": "GET"
}
);
fs.writeFileSync(couchDir + path.sep + "_id", "_design/" + ddocname);
fs.writeFileSync(couchDir + path.sep + "rewrites.json", JSON.stringify(rewrites));
fs.writeFileSync(couchDir + path.sep + ".couchapprc", "{}");
fs.writeFileSync(couchDir + path.sep + ".couchappignore", JSON.stringify(couchappignore));
},
upload: function(/* context */) {
var couchDir = this.readConfig('couchDir');
var db = this.readConfig('db');
this.log('Start Upload', { color: 'green' });
var promise = new RSVP.Promise(function(resolve, reject) {
push(db, couchDir, function(error, response) {
if(error) {
this.log(error + ' ' + response, { color: 'red' });
reject(error);
} else {
this.log('OK', { color: 'green' });
resolve('OK');
}
}.bind(this));
}.bind(this));
return promise;
},
});
return new DeployPlugin();
}
};