@newlogic-digital/cli 0.0.5 → 0.0.6

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 (3) hide show
  1. package/index.mjs +47 -0
  2. package/package.json +3 -4
  3. package/index.cjs.js +0 -347
package/index.mjs ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+
3
+ import init from './src/commands/init/index.mjs'
4
+ import cms from './src/commands/cms/index.mjs'
5
+ import pc from 'picocolors'
6
+ import { version, name } from './src/utils.mjs'
7
+
8
+ const args = process.argv.slice(2)
9
+ const command = args[0]
10
+
11
+ if (!command) {
12
+ console.log(`
13
+ ${pc.blue(`${name} v${version}`)}
14
+
15
+ Usage:
16
+
17
+ -- init --
18
+ ${pc.green('newlogic init')} - Creates a new project in current directory
19
+ ${pc.green('newlogic init')} ${pc.yellow('<directory>')} - Creates a new project in new directory with the name ${pc.yellow('<directory>')}
20
+ ${pc.green('newlogic init ui')} - Creates a new ${pc.blue('@newlogic-digital/ui')} project in current directory
21
+ ${pc.green('newlogic init ui')} ${pc.yellow('<directory>')} - Creates a new ${pc.blue('@newlogic-digital/ui')} project in new directory with the name ${pc.yellow('<directory>')}
22
+ ${pc.green('newlogic init cms')} - Creates a new ${pc.blue('@newlogic-digital/cms')} project in current directory
23
+ ${pc.green('newlogic init cms')} ${pc.yellow('<directory>')} - Creates a new ${pc.blue('@newlogic-digital/cms')} project in new directory with the name ${pc.yellow('<directory>')}
24
+
25
+ -- cms --
26
+ ${pc.green('newlogic cms prepare')} - Copies templates and sections from ${pc.blue('@newlogic-digital/ui')} project to ${pc.blue('@newlogic-digital/cms')}
27
+ ${pc.green('newlogic cms prepare templates')} - Copies templates from ${pc.blue('@newlogic-digital/ui')} project to ${pc.blue('@newlogic-digital/cms')} even if they already exists
28
+ ${pc.green('newlogic cms prepare sections')} - Copies sections from ${pc.blue('@newlogic-digital/ui')} project to ${pc.blue('@newlogic-digital/cms')} even if they already exists
29
+ ${pc.green('newlogic cms new-section')} ${pc.yellow('<name>')} - Creates a new ${pc.blue('@newlogic-digital/cms')} section with name ${pc.yellow('<name>')}
30
+ `)
31
+ }
32
+
33
+ (async() => {
34
+ if (command === 'init') {
35
+ const action = args[1]
36
+ const name = args[2]
37
+
38
+ await init(action, name)
39
+ }
40
+
41
+ if (command === 'cms') {
42
+ const action = args[1]
43
+ const name = args[2]
44
+
45
+ await cms(action, name)
46
+ }
47
+ })()
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@newlogic-digital/cli",
3
- "version": "0.0.5",
4
- "main": "index.js",
3
+ "version": "0.0.6",
4
+ "main": "index.mjs",
5
5
  "bin": {
6
- "newlogic": "index.cjs.js"
6
+ "newlogic": "index.mjs"
7
7
  },
8
8
  "scripts": {
9
- "build": "rollup index.mjs --file index.cjs.js --format cjs",
10
9
  "eslint": "eslint '**/*.mjs' --fix"
11
10
  },
12
11
  "dependencies": {
package/index.cjs.js DELETED
@@ -1,347 +0,0 @@
1
- 'use strict';
2
-
3
- var prompts = require('prompts');
4
- var childProcess = require('child_process');
5
- var path = require('path');
6
- var fs = require('fs');
7
- var os = require('os');
8
- var pc = require('picocolors');
9
- var fse = require('fs-extra');
10
- var FastGlob = require('fast-glob');
11
-
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var prompts__default = /*#__PURE__*/_interopDefaultLegacy(prompts);
15
- var childProcess__default = /*#__PURE__*/_interopDefaultLegacy(childProcess);
16
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
17
- var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
18
- var pc__default = /*#__PURE__*/_interopDefaultLegacy(pc);
19
- var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
20
- var FastGlob__default = /*#__PURE__*/_interopDefaultLegacy(FastGlob);
21
-
22
- const { version, name } = {
23
- version: '0.0.4',
24
- name: '@newlogic-digital/cli'
25
- };
26
-
27
- const execSync = (cmd) => {
28
- try {
29
- childProcess__default["default"].execSync(cmd, { stdio: [0, 1, 2] });
30
- } catch {
31
- process.exit(1);
32
- }
33
- };
34
-
35
- const stripIndent = (string) => {
36
- const indent = () => {
37
- const match = string.match(/^[ \t]*(?=\S)/gm);
38
-
39
- if (!match) {
40
- return 0
41
- }
42
-
43
- return match.reduce((r, a) => Math.min(r, a.length), Infinity)
44
- };
45
-
46
- if (indent() === 0) {
47
- return string
48
- }
49
-
50
- const regex = new RegExp(`^[ \\t]{${indent()}}`, 'gm');
51
-
52
- return string.replace(regex, '')
53
- };
54
-
55
- function ui(name, { branch }) {
56
- execSync(`git clone -b ${branch} --single-branch --depth 1 git@git.newlogic.cz:newlogic-dev/newlogic-ui.git ${name || '.'}`);
57
- }
58
-
59
- const tempDir = path.join(os__default["default"].tmpdir(), 'newlogic-cms-web');
60
-
61
- async function move(path$1) {
62
- await fse__default["default"].move(path.join(tempDir, path$1), path.resolve(process.cwd(), path$1)).catch(err => console.log(pc__default["default"].red(err)));
63
- }
64
-
65
- function clone(path, { variant, branch }) {
66
- if (variant === 'cms-web') {
67
- variant = 'newlogic-cms-next-web';
68
- } else if (variant === 'cms-eshop') {
69
- variant = 'newlogic-cms-next-eshop';
70
- }
71
-
72
- execSync(`git clone -b ${branch} --single-branch --depth 1 git@git.newlogic.cz:newlogic-dev/${variant}.git ${path}`);
73
- }
74
-
75
- async function cms$1(name, { variant, branch }) {
76
- if (name) {
77
- clone(name, { variant, branch });
78
- return
79
- }
80
-
81
- if (fs__default["default"].existsSync(tempDir)) {
82
- fse__default["default"].removeSync(tempDir);
83
- }
84
-
85
- clone(tempDir, { variant, branch });
86
-
87
- await move('.docker');
88
- await move('app');
89
- await move('config');
90
- await move('log');
91
- await move('public/.htaccess');
92
- await move('public/index.php');
93
- await move('temp');
94
- await move('.gitignore');
95
- await move('.htaccess');
96
- await move('Makefile');
97
- await move('composer.json');
98
- await move('composer.lock');
99
- await move('docker-compose.yml');
100
- await move('phpstan.neon');
101
- await move('pint.json');
102
-
103
- fse__default["default"].removeSync(tempDir);
104
- }
105
-
106
- async function init(project, name) {
107
- const nameAsProject = (project && !project.match(/^(ui|cms)$/));
108
-
109
- if (!project || nameAsProject) {
110
- const response = await prompts__default["default"]([
111
- {
112
- type: 'select',
113
- name: 'project',
114
- message: 'Select a project to init',
115
- choices: [
116
- { title: 'ui', value: 'ui' },
117
- { title: 'cms', value: 'cms' }
118
- ]
119
- }
120
- ]);
121
-
122
- name = nameAsProject ? project : name;
123
- project = response.project;
124
- }
125
-
126
- const { branch } = await prompts__default["default"]([
127
- {
128
- type: 'select',
129
- name: 'branch',
130
- message: 'Select a git branch',
131
- choices: [
132
- { title: 'main', value: 'main' },
133
- { title: 'dev', value: 'dev' }
134
- ]
135
- }
136
- ]);
137
-
138
- if (project === 'ui') {
139
- ui(name, { branch });
140
- }
141
-
142
- if (project === 'cms') {
143
- const { variant } = await prompts__default["default"]([
144
- {
145
- type: 'select',
146
- name: 'variant',
147
- message: 'Select a variant to install',
148
- choices: [
149
- { title: 'cms-web', value: 'cms-web' },
150
- { title: 'cms-eshop', value: 'cms-eshop' }
151
- ]
152
- }
153
- ]);
154
-
155
- await cms$1(name, { branch, variant });
156
- }
157
- }
158
-
159
- let sectionsCount = 0;
160
- let sectionsFactoryCount = 0;
161
- let templatesCount = 0;
162
-
163
- function prepare(options) {
164
- return {
165
- async copy(name) {
166
- if (!name || name === 'sections') {
167
- if (!fs__default["default"].existsSync(options.path.src.sections)) {
168
- console.log(`${pc__default["default"].red('✖')} path ${options.path.src.sections} doesn't exists`);
169
- process.exit(1);
170
- }
171
-
172
- if (!fs__default["default"].existsSync(options.path.app.sections)) {
173
- console.log(`${pc__default["default"].red('✖')} path ${options.path.app.sections} doesn't exists`);
174
- process.exit(1);
175
- }
176
-
177
- if (!fs__default["default"].existsSync(options.path.app.sectionsFactory)) {
178
- fs__default["default"].mkdirSync(options.path.app.sectionsFactory);
179
- }
180
-
181
- await this.copySections(name === 'sections');
182
- }
183
-
184
- if (!name || name === 'templates') {
185
- if (!fs__default["default"].existsSync(options.path.src.templates)) {
186
- console.log(`${pc__default["default"].red('✖')} path ${options.path.src.templates} doesn't exists`);
187
- process.exit(1);
188
- }
189
-
190
- if (!fs__default["default"].existsSync(options.path.app.sections)) {
191
- fs__default["default"].mkdirSync(options.path.app.sections);
192
- }
193
-
194
- await this.copyTemplates(name === 'templates');
195
- }
196
- },
197
- writeSection(name, path$1, force) {
198
- if (!path$1) {
199
- path$1 = path.join(path.relative(options.path.src.templates, options.path.src.sections), name) + '.latte';
200
- name = name.replaceAll('/', '');
201
- }
202
-
203
- if (!name.match(/(Ui)/)) {
204
- if (!fs__default["default"].existsSync(path.join(options.path.app.sections, `${name}.php`)) || force) {
205
- fs__default["default"].writeFileSync(path.join(options.path.app.sections, `${name}.php`),
206
- stripIndent(`
207
- <?php
208
-
209
- namespace App\\Sections;
210
-
211
- class ${name} extends BaseSection
212
- {
213
- public function render()
214
- {
215
- $this->getTemplate()->render(TEMPLATES_DIR . '/${path$1}');
216
- }
217
- }
218
- `).replace(/^\s*\n/g, '')
219
- );
220
-
221
- sectionsCount += 1;
222
- }
223
- }
224
- },
225
- writeSectionFactory(name, force) {
226
- if (!name.match(/(Ui)/)) {
227
- if (!fs__default["default"].existsSync(path.join(options.path.app.sectionsFactory, `${name}Factory.php`)) || force) {
228
- fs__default["default"].writeFileSync(path.join(options.path.app.sectionsFactory, `${name}Factory.php`),
229
- stripIndent(`
230
- <?php
231
-
232
- namespace App\\Sections\\Factory;
233
-
234
- use App\\Sections\\${name};
235
-
236
- interface ${name}Factory
237
- {
238
- public function create(): ${name};
239
- }
240
- `).replace(/^\s*\n/g, '')
241
- );
242
-
243
- sectionsFactoryCount += 1;
244
- }
245
- }
246
- },
247
- async copySections(force = false) {
248
- const sections = FastGlob__default["default"].sync(path.join(options.path.src.sections, '/**'));
249
-
250
- sections.forEach(path$1 => {
251
- const name = path.relative(options.path.src.sections, path$1).replace(path.extname(path.relative(options.path.src.sections, path$1)), '').replaceAll('/', '');
252
-
253
- this.writeSection(name, path.relative(options.path.src.templates, path$1), force);
254
- this.writeSectionFactory(name, force);
255
- });
256
-
257
- console.log(`${pc__default["default"].green('✔')} ${sectionsCount} sections and ${sectionsFactoryCount} factory files copied to app`);
258
- },
259
- async copyTemplates(force = false) {
260
- const templates = FastGlob__default["default"].sync(path.join(options.path.src.templates, '/**')).filter(entry => {
261
- return !fs__default["default"].existsSync(path.join(options.path.app.templates, path.relative(options.path.src.templates, entry))) || force
262
- });
263
-
264
- for (const path$1 of templates) {
265
- await fse__default["default"].copy(path$1, path.join(options.path.app.templates, path.relative(options.path.src.templates, path$1)));
266
- templatesCount += 1;
267
- }
268
-
269
- console.log(`${pc__default["default"].green('✔')} ${templatesCount} template files copied to app`);
270
- }
271
- }
272
- }
273
-
274
- const options = {
275
- path: {
276
- src: {
277
- templates: path.resolve(process.cwd(), 'playground/templates'),
278
- sections: path.resolve(process.cwd(), 'playground/templates/Sections')
279
- },
280
- app: {
281
- templates: path.resolve(process.cwd(), 'app/Templates'),
282
- sections: path.resolve(process.cwd(), 'app/Sections'),
283
- sectionsFactory: path.resolve(process.cwd(), 'app/Sections/Factory')
284
- }
285
- }
286
- };
287
-
288
- async function cms(action, name) {
289
- if (action === 'prepare') {
290
- await prepare(options).copy(name);
291
- }
292
-
293
- if (action === 'new-section') {
294
- const nameFormatted = name.replaceAll('/', '');
295
-
296
- if (fs__default["default"].existsSync(path.join(options.path.app.sections, `${nameFormatted}.php`))) {
297
- console.log(`${pc__default["default"].red('✖')} section ${nameFormatted} already exists`);
298
- process.exit(1);
299
- }
300
-
301
- prepare(options).writeSection(name);
302
- prepare(options).writeSectionFactory(nameFormatted);
303
-
304
- console.log(`${pc__default["default"].green('✔')} section ${nameFormatted} created`);
305
- }
306
- }
307
-
308
- const args = process.argv.slice(2);
309
- const command = args[0];
310
-
311
- if (!command) {
312
- console.log(`
313
- ${pc__default["default"].blue(`${name} v${version}`)}
314
-
315
- Usage:
316
-
317
- -- init --
318
- ${pc__default["default"].green('newlogic init')} - Creates a new project in current directory
319
- ${pc__default["default"].green('newlogic init')} ${pc__default["default"].yellow('<directory>')} - Creates a new project in new directory with the name ${pc__default["default"].yellow('<directory>')}
320
- ${pc__default["default"].green('newlogic init ui')} - Creates a new ${pc__default["default"].blue('@newlogic-digital/ui')} project in current directory
321
- ${pc__default["default"].green('newlogic init ui')} ${pc__default["default"].yellow('<directory>')} - Creates a new ${pc__default["default"].blue('@newlogic-digital/ui')} project in new directory with the name ${pc__default["default"].yellow('<directory>')}
322
- ${pc__default["default"].green('newlogic init cms')} - Creates a new ${pc__default["default"].blue('@newlogic-digital/cms')} project in current directory
323
- ${pc__default["default"].green('newlogic init cms')} ${pc__default["default"].yellow('<directory>')} - Creates a new ${pc__default["default"].blue('@newlogic-digital/cms')} project in new directory with the name ${pc__default["default"].yellow('<directory>')}
324
-
325
- -- cms --
326
- ${pc__default["default"].green('newlogic cms prepare')} - Copies templates and sections from ${pc__default["default"].blue('@newlogic-digital/ui')} project to ${pc__default["default"].blue('@newlogic-digital/cms')}
327
- ${pc__default["default"].green('newlogic cms prepare templates')} - Copies templates from ${pc__default["default"].blue('@newlogic-digital/ui')} project to ${pc__default["default"].blue('@newlogic-digital/cms')} even if they already exists
328
- ${pc__default["default"].green('newlogic cms prepare sections')} - Copies sections from ${pc__default["default"].blue('@newlogic-digital/ui')} project to ${pc__default["default"].blue('@newlogic-digital/cms')} even if they already exists
329
- ${pc__default["default"].green('newlogic cms new-section')} ${pc__default["default"].yellow('<name>')} - Creates a new ${pc__default["default"].blue('@newlogic-digital/cms')} section with name ${pc__default["default"].yellow('<name>')}
330
- `);
331
- }
332
-
333
- (async() => {
334
- if (command === 'init') {
335
- const action = args[1];
336
- const name = args[2];
337
-
338
- await init(action, name);
339
- }
340
-
341
- if (command === 'cms') {
342
- const action = args[1];
343
- const name = args[2];
344
-
345
- await cms(action, name);
346
- }
347
- })();