UNPKG

5.28 kBJavaScriptView Raw
1#! /usr/bin/env node
2const fs = require('fs');
3const child_process = require('child_process');
4const chalk = require('chalk');
5const { dasherize } = require('ember-cli-string-utils');
6const { pluralize, singularize } = require('i')();
7
8const CLI = {
9 default(commandHandler) {
10 !process.argv[2] ? commandHandler() : null;
11 },
12 command(commandName, commandHandler) {
13 if (Array.isArray(commandName)) {
14 return commandName.includes(process.argv[2]) ? commandHandler() : null;
15 }
16
17 commandName === process.argv[2] ? commandHandler() : null;
18 }
19};
20
21CLI.default(printCommands);
22CLI.command('help', printCommands);
23CLI.command(['init', 'new'], generateInitialFolderStructure);
24CLI.command(['generate', 'g'], generateModelFiles);
25CLI.command(['console', 'c'], openConsole);
26CLI.command(['watch', 's', 'serve', 'server'], () => {
27 buildMemServerDist();
28 fs.watch(`${process.cwd()}/memserver`, { recursive: true }, () => buildMemServerDist());
29});
30CLI.command(['build', 'rollup'], buildMemServerDist);
31CLI.command(['version', 'v'], () => {
32 console.log(chalk.cyan('[MemServer CLI]'), require('./package.json').version);
33});
34
35function printCommands() {
36 console.log(`${chalk.cyan('[MemServer CLI] Usage:')} memserver ${chalk.yellow('<command (Default: help)>')}
37
38memserver init | new # Sets up the initial memserver folder structure
39memserver generate model ${chalk.yellow('[ModelName]')} # Generates the initial files for a MemServer Model ${chalk.cyan('[alias: "memserver g model"]')}
40memserver console # Starts a MemServer console in node.js ${chalk.cyan('[alias: "memserver c"]')}
41memserver serve | server ${chalk.yellow('[outputFile]')} # Builds an ES5 javascript bundle with all your memserver code continuosly on watch ${chalk.cyan('[alias: "memserver s"]')}
42memserver build | rollup ${chalk.yellow('[outputFile]')} # Builds an ES5 javascript bundle with all your memserver code
43memserver version | v # Displays memserver version
44`);
45}
46
47function generateInitialFolderStructure() {
48 let memServerDirectory = getMemServerDirectory();
49
50 if (!memServerDirectory) {
51 memServerDirectory = './memserver';
52 fs.mkdirSync(memServerDirectory);
53 }
54
55 if (!fs.existsSync(`${memServerDirectory}/server.js`)) {
56 fs.writeFileSync(`${memServerDirectory}/server.js`, `export default function(Models) {
57}`);
58 console.log(chalk.cyan('[MemServer CLI] /memserver/server.js created'));
59 }
60
61 if (!fs.existsSync(`${memServerDirectory}/initializer.js`)) {
62 fs.writeFileSync(`${memServerDirectory}/initializer.js`, `export default function(Models) {
63}`);
64 console.log(chalk.cyan('[MemServer CLI] /memserver/initializer.js created'));
65
66 }
67
68
69 createFixtureAndModelFoldersIfNeeded(memServerDirectory);
70}
71
72function createFixtureAndModelFoldersIfNeeded(memServerDirectory) {
73 if (!fs.existsSync(`${memServerDirectory}/fixtures`)) {
74 fs.mkdirSync(`${memServerDirectory}/fixtures`);
75 console.log(chalk.cyan('[MemServer CLI] /memserver/fixtures folder created'));
76 }
77
78 if (!fs.existsSync(`${memServerDirectory}/models`)) {
79 fs.mkdirSync(`${memServerDirectory}/models`);
80 console.log(chalk.cyan('[MemServer CLI] /memserver/models folder created'));
81 }
82}
83
84function generateModelFiles() {
85 const memServerDirectory = getMemServerDirectory();
86
87 if (!process.argv[3] || !process.argv[4]) {
88 throw new Error(chalk.red('[MemServer CLI] Please put a modelName to the memserver generate. Example: $ memserver generate model user'));
89 } else if (!memServerDirectory) {
90 throw new Error(chalk.red('[MemServer CLI] cannot find /memserver folder. Did you run $ memserver init ?'));
91 }
92
93 createFixtureAndModelFoldersIfNeeded(memServerDirectory);
94
95 const modelFileName = dasherize(singularize(process.argv[4]));
96 const fixtureFileName = dasherize(pluralize(process.argv[4]));
97
98 if (!fs.existsSync(`${memServerDirectory}/models/${modelFileName}.js`)) {
99 fs.writeFileSync(`${memServerDirectory}/models/${modelFileName}.js`, `import Model from 'memserver/model';
100
101export default Model({
102
103});`);
104 console.log(chalk.cyan(`[MemServer CLI] /memserver/models/${modelFileName}.js created`));
105 }
106
107 if (!fs.existsSync(`${memServerDirectory}/fixtures/${fixtureFileName}.js`)) {
108 fs.writeFileSync(`${memServerDirectory}/fixtures/${fixtureFileName}.js`, `export default [
109];`);
110 console.log(chalk.cyan(`[MemServer CLI] /memserver/fixtures/${fixtureFileName}.js created`));
111 }
112}
113
114function openConsole() {
115 const MemServer = require('./lib/index.js');
116 const repl = require('repl');
117
118 console.log(chalk.cyan('[MemServer CLI]'), 'Starting MemServer node.js console - Remember to MemServer.start() ;)');
119 repl.start('> ');
120}
121
122function buildMemServerDist() {
123 const outputFile = process.argv[3] || 'memserver.dist.js';
124 const rollup = child_process.spawnSync('rollup', [
125 '--config', `${require.resolve('memserver')}/../../rollup.config.js`, '-o', outputFile
126 ]);
127
128 console.log(rollup.stderr.toString());
129 console.log(chalk.cyan('[MemServer CLI]'), ` NEW BUILD: ${outputFile}`);
130}
131
132function getMemServerDirectory() {
133 const cwd = process.cwd();
134
135 if (cwd.includes('memserver')) {
136 const targetIndex = cwd.lastIndexOf('memserver') + 9;
137
138 return cwd.slice(0, targetIndex);
139 }
140}