@verdnatura/myt 1.5.19 → 1.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.dockerignore +2 -2
  2. package/LICENSE +17 -17
  3. package/README.md +284 -278
  4. package/assets/db.ini +5 -5
  5. package/assets/myt.default.yml +28 -11
  6. package/assets/structure.sql +24 -24
  7. package/cli.js +4 -4
  8. package/exporters/event.ejs +18 -18
  9. package/exporters/event.js +31 -31
  10. package/exporters/event.sql +19 -19
  11. package/exporters/function.ejs +17 -17
  12. package/exporters/function.js +27 -27
  13. package/exporters/function.sql +16 -16
  14. package/exporters/procedure.ejs +11 -11
  15. package/exporters/procedure.js +23 -23
  16. package/exporters/procedure.sql +14 -14
  17. package/exporters/trigger.ejs +4 -4
  18. package/exporters/trigger.js +10 -10
  19. package/exporters/trigger.sql +13 -13
  20. package/exporters/view.ejs +7 -7
  21. package/exporters/view.js +29 -29
  22. package/exporters/view.sql +12 -12
  23. package/helpers/local-fixtures.js +79 -0
  24. package/lib/command.js +19 -13
  25. package/lib/conn.js +141 -141
  26. package/lib/docker.js +133 -133
  27. package/lib/dumper.js +104 -83
  28. package/lib/exporter-engine.js +112 -112
  29. package/lib/exporter.js +86 -86
  30. package/lib/repo.js +29 -29
  31. package/lib/server.js +71 -71
  32. package/lib/util.js +7 -7
  33. package/myt-clean.js +58 -58
  34. package/myt-create.js +74 -74
  35. package/myt-dump.js +134 -75
  36. package/myt-fixtures.js +28 -29
  37. package/myt-init.js +36 -36
  38. package/myt-pull.js +183 -183
  39. package/myt-push.js +575 -568
  40. package/myt-run.js +190 -177
  41. package/myt-start.js +54 -54
  42. package/myt-version.js +218 -218
  43. package/myt.js +378 -361
  44. package/package.json +41 -41
  45. package/server/Dockerfile.base +1 -1
  46. package/server/Dockerfile.client +14 -14
  47. package/server/Dockerfile.dump +13 -16
  48. package/server/Dockerfile.server +25 -25
  49. package/server/docker-dump.sh +4 -4
  50. package/server/docker-fixtures.sh +5 -4
  51. package/server/docker-import.sh +10 -6
  52. package/server/docker-init.sh +23 -20
  53. package/server/docker-start.sh +10 -10
  54. package/server/docker.cnf +9 -9
  55. package/template/dump/Dockerfile.base +1 -1
  56. package/template/dump/dump.after.sql +1 -0
  57. package/template/dump/dump.before.sql +1 -0
  58. package/template/dump/fixtures.after.sql +1 -0
  59. package/template/dump/fixtures.before.sql +1 -0
  60. package/template/myt.config.yml +11 -11
  61. package/template/package.json +13 -13
  62. package/template/remotes/docker.ini +4 -4
  63. package/template/remotes/local.ini +5 -5
  64. package/template/routines/README.md +1 -1
  65. package/template/versions/00001-firstVersion/00-firstScript.sql +1 -1
  66. package/template/versions/README.md +1 -1
  67. package/template/dump/afterDump.sql +0 -1
  68. package/template/dump/beforeDump.sql +0 -1
  69. package/template/dump/fixtures.sql +0 -1
package/myt-version.js CHANGED
@@ -1,218 +1,218 @@
1
- const Myt = require('./myt');
2
- const Command = require('./lib/command');
3
- const fs = require('fs-extra');
4
-
5
- /**
6
- * Creates a new version.
7
- */
8
- class Version extends Command {
9
- static usage = {
10
- description: 'Creates a new version',
11
- params: {
12
- name: 'Name for the new version'
13
- },
14
- operand: 'name'
15
- };
16
-
17
- static opts = {
18
- alias: {
19
- name: 'n'
20
- },
21
- string: [
22
- 'name'
23
- ],
24
- default: {
25
- remote: 'production'
26
- }
27
- };
28
-
29
- async run(myt, opts) {
30
- let newVersionDir;
31
-
32
- // Fetch last version number
33
-
34
- const conn = await myt.dbConnect();
35
-
36
- try {
37
- await conn.query('START TRANSACTION');
38
-
39
- const [[row]] = await conn.query(
40
- `SELECT number, lastNumber
41
- FROM version
42
- WHERE code = ?
43
- FOR UPDATE`,
44
- [opts.code]
45
- );
46
- const number = row && row.number;
47
- const lastNumber = row && row.lastNumber;
48
-
49
- console.log(
50
- `Database information:`
51
- + `\n -> Version: ${number}`
52
- + `\n -> Last version: ${lastNumber}`
53
- );
54
-
55
- let newVersion;
56
- if (lastNumber)
57
- newVersion = Math.max(
58
- parseInt(number) || 0,
59
- parseInt(lastNumber) || 0
60
- ) + 1;
61
- else
62
- newVersion = 1;
63
-
64
- const versionDigits = number
65
- ? number.length
66
- : opts.versionDigits;
67
-
68
- newVersion = String(newVersion).padStart(versionDigits, '0');
69
-
70
- // Get version name
71
-
72
- let versionName = opts.name;
73
-
74
- const versionNames = new Set();
75
- const versionDirs = await fs.readdir(opts.versionsDir);
76
- for (const versionDir of versionDirs) {
77
- const dirVersion = myt.parseVersionDir(versionDir);
78
- if (!dirVersion) continue;
79
- versionNames.add(dirVersion.name);
80
- }
81
-
82
- if (!versionName) {
83
- let attempts;
84
- const maxAttempts = 1000;
85
-
86
- for (attempts = 0; attempts < maxAttempts; attempts++) {
87
- versionName = randomName();
88
- if (!versionNames.has(versionName)) break;
89
- }
90
-
91
- if (attempts === maxAttempts)
92
- throw new Error(`Cannot create a unique version name after ${attempts} attempts`);
93
- } else {
94
- const isNameValid = typeof versionName === 'string'
95
- && /^[a-zA-Z0-9]+$/.test(versionName);
96
- if (!isNameValid)
97
- throw new Error('Version name can only contain letters or numbers');
98
- if (versionNames.has(versionName))
99
- throw new Error('Version with same name already exists');
100
- }
101
-
102
- // Create version
103
-
104
- const versionFolder = `${newVersion}-${versionName}`;
105
- newVersionDir = `${opts.versionsDir}/${versionFolder}`;
106
-
107
- await conn.query(
108
- `INSERT INTO version
109
- SET code = ?,
110
- lastNumber = ?
111
- ON DUPLICATE KEY UPDATE
112
- lastNumber = VALUES(lastNumber)`,
113
- [opts.code, newVersion]
114
- );
115
- await fs.mkdir(newVersionDir);
116
- await fs.writeFile(
117
- `${newVersionDir}/00-firstScript.sql`,
118
- '-- Place your SQL code here\n'
119
- );
120
- console.log(`New version created: ${versionFolder}`);
121
-
122
- await conn.query('COMMIT');
123
- } catch (err) {
124
- await conn.query('ROLLBACK');
125
- if (newVersionDir && await fs.pathExists(newVersionDir))
126
- await fs.remove(newVersionDir, {recursive: true});
127
- throw err;
128
- }
129
- }
130
- }
131
-
132
- function randomName() {
133
- const color = random(colors);
134
- let plant = random(plants);
135
- plant = plant.charAt(0).toUpperCase() + plant.slice(1);
136
- return color + plant;
137
- }
138
-
139
- function random(array) {
140
- return array[Math.floor(Math.random() * array.length)];
141
- }
142
-
143
- const colors = [
144
- 'aqua',
145
- 'azure',
146
- 'black',
147
- 'blue',
148
- 'bronze',
149
- 'brown',
150
- 'chocolate',
151
- 'crimson',
152
- 'golden',
153
- 'gray',
154
- 'green',
155
- 'lime',
156
- 'maroon',
157
- 'navy',
158
- 'orange',
159
- 'pink',
160
- 'purple',
161
- 'red',
162
- 'salmon',
163
- 'silver',
164
- 'teal',
165
- 'turquoise',
166
- 'yellow',
167
- 'wheat',
168
- 'white'
169
- ];
170
-
171
- const plants = [
172
- 'anthurium',
173
- 'aralia',
174
- 'arborvitae',
175
- 'asparagus',
176
- 'aspidistra',
177
- 'bamboo',
178
- 'birch',
179
- 'carnation',
180
- 'camellia',
181
- 'cataractarum',
182
- 'chico',
183
- 'chrysanthemum',
184
- 'cordyline',
185
- 'cyca',
186
- 'cymbidium',
187
- 'dendro',
188
- 'dracena',
189
- 'erica',
190
- 'eucalyptus',
191
- 'fern',
192
- 'galax',
193
- 'gerbera',
194
- 'hydrangea',
195
- 'ivy',
196
- 'laurel',
197
- 'lilium',
198
- 'mastic',
199
- 'medeola',
200
- 'monstera',
201
- 'moss',
202
- 'oak',
203
- 'orchid',
204
- 'palmetto',
205
- 'paniculata',
206
- 'phormium',
207
- 'raphis',
208
- 'roebelini',
209
- 'rose',
210
- 'ruscus',
211
- 'salal',
212
- 'tulip'
213
- ];
214
-
215
- module.exports = Version;
216
-
217
- if (require.main === module)
218
- new Myt().run(Version);
1
+ const Myt = require('./myt');
2
+ const Command = require('./lib/command');
3
+ const fs = require('fs-extra');
4
+
5
+ /**
6
+ * Creates a new version.
7
+ */
8
+ class Version extends Command {
9
+ static usage = {
10
+ description: 'Creates a new version',
11
+ params: {
12
+ name: 'Name for the new version'
13
+ },
14
+ operand: 'name'
15
+ };
16
+
17
+ static opts = {
18
+ alias: {
19
+ name: 'n'
20
+ },
21
+ string: [
22
+ 'name'
23
+ ],
24
+ default: {
25
+ remote: 'production'
26
+ }
27
+ };
28
+
29
+ async run(myt, opts) {
30
+ let newVersionDir;
31
+
32
+ // Fetch last version number
33
+
34
+ const conn = await myt.dbConnect();
35
+
36
+ try {
37
+ await conn.query('START TRANSACTION');
38
+
39
+ const [[row]] = await conn.query(
40
+ `SELECT number, lastNumber
41
+ FROM version
42
+ WHERE code = ?
43
+ FOR UPDATE`,
44
+ [opts.code]
45
+ );
46
+ const number = row && row.number;
47
+ const lastNumber = row && row.lastNumber;
48
+
49
+ console.log(
50
+ `Database information:`
51
+ + `\n -> Version: ${number}`
52
+ + `\n -> Last version: ${lastNumber}`
53
+ );
54
+
55
+ let newVersion;
56
+ if (lastNumber)
57
+ newVersion = Math.max(
58
+ parseInt(number) || 0,
59
+ parseInt(lastNumber) || 0
60
+ ) + 1;
61
+ else
62
+ newVersion = 1;
63
+
64
+ const versionDigits = number
65
+ ? number.length
66
+ : opts.versionDigits;
67
+
68
+ newVersion = String(newVersion).padStart(versionDigits, '0');
69
+
70
+ // Get version name
71
+
72
+ let versionName = opts.name;
73
+
74
+ const versionNames = new Set();
75
+ const versionDirs = await fs.readdir(opts.versionsDir);
76
+ for (const versionDir of versionDirs) {
77
+ const dirVersion = myt.parseVersionDir(versionDir);
78
+ if (!dirVersion) continue;
79
+ versionNames.add(dirVersion.name);
80
+ }
81
+
82
+ if (!versionName) {
83
+ let attempts;
84
+ const maxAttempts = 1000;
85
+
86
+ for (attempts = 0; attempts < maxAttempts; attempts++) {
87
+ versionName = randomName();
88
+ if (!versionNames.has(versionName)) break;
89
+ }
90
+
91
+ if (attempts === maxAttempts)
92
+ throw new Error(`Cannot create a unique version name after ${attempts} attempts`);
93
+ } else {
94
+ const isNameValid = typeof versionName === 'string'
95
+ && /^[a-zA-Z0-9]+$/.test(versionName);
96
+ if (!isNameValid)
97
+ throw new Error('Version name can only contain letters or numbers');
98
+ if (versionNames.has(versionName))
99
+ throw new Error('Version with same name already exists');
100
+ }
101
+
102
+ // Create version
103
+
104
+ const versionFolder = `${newVersion}-${versionName}`;
105
+ newVersionDir = `${opts.versionsDir}/${versionFolder}`;
106
+
107
+ await conn.query(
108
+ `INSERT INTO version
109
+ SET code = ?,
110
+ lastNumber = ?
111
+ ON DUPLICATE KEY UPDATE
112
+ lastNumber = VALUES(lastNumber)`,
113
+ [opts.code, newVersion]
114
+ );
115
+ await fs.mkdir(newVersionDir);
116
+ await fs.writeFile(
117
+ `${newVersionDir}/00-firstScript.sql`,
118
+ '-- Place your SQL code here\n'
119
+ );
120
+ console.log(`New version created: ${versionFolder}`);
121
+
122
+ await conn.query('COMMIT');
123
+ } catch (err) {
124
+ await conn.query('ROLLBACK');
125
+ if (newVersionDir && await fs.pathExists(newVersionDir))
126
+ await fs.remove(newVersionDir);
127
+ throw err;
128
+ }
129
+ }
130
+ }
131
+
132
+ function randomName() {
133
+ const color = random(colors);
134
+ let plant = random(plants);
135
+ plant = plant.charAt(0).toUpperCase() + plant.slice(1);
136
+ return color + plant;
137
+ }
138
+
139
+ function random(array) {
140
+ return array[Math.floor(Math.random() * array.length)];
141
+ }
142
+
143
+ const colors = [
144
+ 'aqua',
145
+ 'azure',
146
+ 'black',
147
+ 'blue',
148
+ 'bronze',
149
+ 'brown',
150
+ 'chocolate',
151
+ 'crimson',
152
+ 'golden',
153
+ 'gray',
154
+ 'green',
155
+ 'lime',
156
+ 'maroon',
157
+ 'navy',
158
+ 'orange',
159
+ 'pink',
160
+ 'purple',
161
+ 'red',
162
+ 'salmon',
163
+ 'silver',
164
+ 'teal',
165
+ 'turquoise',
166
+ 'yellow',
167
+ 'wheat',
168
+ 'white'
169
+ ];
170
+
171
+ const plants = [
172
+ 'anthurium',
173
+ 'aralia',
174
+ 'arborvitae',
175
+ 'asparagus',
176
+ 'aspidistra',
177
+ 'bamboo',
178
+ 'birch',
179
+ 'carnation',
180
+ 'camellia',
181
+ 'cataractarum',
182
+ 'chico',
183
+ 'chrysanthemum',
184
+ 'cordyline',
185
+ 'cyca',
186
+ 'cymbidium',
187
+ 'dendro',
188
+ 'dracena',
189
+ 'erica',
190
+ 'eucalyptus',
191
+ 'fern',
192
+ 'galax',
193
+ 'gerbera',
194
+ 'hydrangea',
195
+ 'ivy',
196
+ 'laurel',
197
+ 'lilium',
198
+ 'mastic',
199
+ 'medeola',
200
+ 'monstera',
201
+ 'moss',
202
+ 'oak',
203
+ 'orchid',
204
+ 'palmetto',
205
+ 'paniculata',
206
+ 'phormium',
207
+ 'raphis',
208
+ 'roebelini',
209
+ 'rose',
210
+ 'ruscus',
211
+ 'salal',
212
+ 'tulip'
213
+ ];
214
+
215
+ module.exports = Version;
216
+
217
+ if (require.main === module)
218
+ new Myt().run(Version);