-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathscaffold.js
106 lines (100 loc) · 2.43 KB
/
scaffold.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
/**
* External dependencies
*/
const { writeFile } = require( 'fs' ).promises;
const { snakeCase } = require( 'lodash' );
const makeDir = require( 'make-dir' );
const { render } = require( 'mustache' );
const { dirname } = require( 'path' );
/**
* Internal dependencies
*/
const initWPScripts = require( './init-wp-scripts' );
const { code, info, success } = require( './log' );
const { hasWPScriptsEnabled } = require( './templates' );
module.exports = async function(
blockTemplate,
{
namespace,
slug,
title,
description,
dashicon,
category,
author,
license,
licenseURI,
version,
}
) {
slug = slug.toLowerCase();
namespace = namespace.toLowerCase();
info( '' );
info( `Creating a new WordPress block in "${ slug }" folder.` );
const { outputTemplates } = blockTemplate;
const view = {
namespace,
namespaceSnakeCase: snakeCase( namespace ),
slug,
slugSnakeCase: snakeCase( slug ),
title,
description,
dashicon,
category,
version,
author,
license,
licenseURI,
textdomain: namespace,
};
await Promise.all(
Object.keys( outputTemplates ).map( async ( outputFile ) => {
// Output files can have names that depend on the slug provided.
const outputFilePath = `${ slug }/${ outputFile.replace(
/\$slug/g,
slug
) }`;
await makeDir( dirname( outputFilePath ) );
writeFile(
outputFilePath,
render( outputTemplates[ outputFile ], view )
);
} )
);
if ( hasWPScriptsEnabled( blockTemplate ) ) {
await initWPScripts( view );
}
info( '' );
success(
`Done: block "${ title }" bootstrapped in the "${ slug }" folder.`
);
if ( hasWPScriptsEnabled( blockTemplate ) ) {
info( '' );
info( 'Inside that directory, you can run several commands:' );
info( '' );
code( ' $ npm start' );
info( ' Starts the build for development.' );
info( '' );
code( ' $ npm run build' );
info( ' Builds the code for production.' );
info( '' );
code( ' $ npm run format:js' );
info( ' Formats JavaScript files.' );
info( '' );
code( ' $ npm run lint:css' );
info( ' Lints CSS files.' );
info( '' );
code( ' $ npm run lint:js' );
info( ' Lints JavaScript files.' );
info( '' );
code( ' $ npm run packages-update' );
info( ' Updates WordPress packages to the latest version.' );
info( '' );
info( 'You can start by typing:' );
info( '' );
code( ` $ cd ${ slug }` );
code( ` $ npm start` );
}
info( '' );
info( 'Code is Poetry' );
};