1- const fs = require ( 'fs' ) ;
21const path = require ( 'path' ) ;
3- const inquirer = require ( 'inquirer' ) ;
4- const yaml = require ( 'js-yaml' ) ;
2+ const autoconf = require ( "@backkit/autoconf" ) ;
53const beautifyjs = require ( 'js-beautify' ) . js ;
64
7- const skipPrompt = process . env . NO_INTERACTIVE || process . env . NO_PROMPT ? true : false ;
8- const skipAutoconf = process . env . NO_AUTOCONF ? true : false ;
9-
10- const generate = ( serviceName , moduleName , config ) => {
11- const serviceDir = `${ __dirname } /../../services` ;
12- const servicePath = `${ __dirname } /../../services/${ serviceName } .js` ;
13- const configDir = `${ __dirname } /../../config` ;
14- const configPath = `${ __dirname } /../../config/${ serviceName } .yml` ;
15- const resourceBaseDir = `${ __dirname } /../../res` ;
16- const resourceDir = `${ __dirname } /../../res/${ serviceName } ` ;
17-
18- console . log ( "" ) ;
19- console . log ( `${ serviceName } service config:` ) ;
20- console . log ( JSON . stringify ( config , null , ' ' ) ) ;
21- console . log ( "" ) ;
22-
23- // save service config
24- console . log ( `writing config: ${ configPath } ` ) ;
25- if ( ! fs . existsSync ( configDir ) ) {
26- fs . mkdirSync ( configDir , { recursive : true } ) ;
27- }
28- if ( ! fs . existsSync ( configPath ) ) {
29- fs . writeFileSync ( configPath , yaml . safeDump ( config , { skipInvalid : true } ) ) ;
30- }
31-
32- // enable service
33- console . log ( `creating service alias: ${ servicePath } ` ) ;
34- if ( ! fs . existsSync ( serviceDir ) ) {
35- fs . mkdirSync ( serviceDir , { recursive : true } ) ;
36- }
37- if ( ! fs . existsSync ( servicePath ) ) {
38- fs . writeFileSync ( servicePath , `module.exports = require('${ moduleName } ')` ) ;
39- }
40-
41- // ensure resource dir exist
42- console . log ( `creating resources folder: ${ resourceDir } ` ) ;
43- if ( ! fs . existsSync ( resourceBaseDir ) ) {
44- fs . mkdirSync ( resourceBaseDir , { recursive : true } ) ;
45- }
46- if ( ! fs . existsSync ( resourceDir ) ) {
47- fs . mkdirSync ( resourceDir , { recursive : true } ) ;
48- for ( let queueName in config ) {
49- fs . writeFileSync ( `${ resourceDir } /${ queueName } .js` ,
50- beautifyjs ( `
5+ autoconf ( 'bee' )
6+ . generator ( self => {
7+ let arr = [
8+ {
9+ putFileOnce : self . serviceConfigMainYML ,
10+ contentYml : self . config
11+ } ,
12+ {
13+ putFileOnce : self . serviceCodeMainJS ,
14+ content : `module.exports = require('${ self . npmModuleName } ')`
15+ }
16+ ] ;
17+ for ( let queueName in self . config ) {
18+ arr . push ( {
19+ putFileOnce : `${ self . serviceResourceDir } ${ path . sep } ${ queueName } .js` ,
20+ content : beautifyjs ( `
5121 module.exports = ({bee}) => bee.worker('${ queueName } ', async (job) => {
5222 return await true;
5323 });` ,
54- { indent_size : 2 } ) ) ;
55- }
24+ { indent_size : 2 } )
25+ } ) ;
5626 }
57- } ;
58-
59- if ( ! skipAutoconf ) {
60- const packageJson = require ( './package.json' ) ;
61- const serviceName = 'bee' ;
62- const moduleName = packageJson . name ;
63- const defaultConf = {
64- default : {
65- queue : {
66- redis : {
67- host : "127.0.0.1" ,
68- port : 6379 ,
69- db : 0 ,
70- options : { }
71- } ,
72- removeOnSuccess : false ,
73- removeOnFailure : false ,
74- stallInterval : 5000 ,
75- nearTermWindow : 60000 ,
76- delayedDebounce : 500
27+ return arr ;
28+ } )
29+ . default ( self => ( {
30+ default : {
31+ queue : {
32+ redis : {
33+ host : "127.0.0.1" ,
34+ port : 6379 ,
35+ db : 0 ,
36+ options : { }
7737 } ,
78- worker : {
79- concurrency : 100
80- }
38+ removeOnSuccess : false ,
39+ removeOnFailure : false ,
40+ stallInterval : 5000 ,
41+ nearTermWindow : 60000 ,
42+ delayedDebounce : 500
43+ } ,
44+ worker : {
45+ concurrency : 100
8146 }
82- } ;
83-
84- if ( ! skipPrompt ) {
85- const questions = [
86- {
87- type : 'input' ,
88- name : 'default_queue_name' ,
89- message : "default queue name" ,
90- default : 'default' ,
91- validate : function ( value ) {
92- return true ;
93- }
94- } ,
95- {
96- type : 'input' ,
97- name : 'default_queue_redis_host' ,
98- message : "redis host for default queue" ,
99- default : defaultConf . default . queue . redis . host ,
100- validate : function ( value ) {
101- return true ;
102- }
103- } ,
104- {
105- type : 'input' ,
106- name : 'default_queue_redis_port' ,
107- message : "redis port for default queue" ,
108- default : defaultConf . default . queue . redis . port ,
109- validate : function ( value ) {
110- return ~ ~ ( value ) > 0 ;
111- }
112- } ,
113- {
114- type : 'input' ,
115- name : 'default_queue_redis_db' ,
116- message : "redis database id for default queue" ,
117- default : defaultConf . default . queue . redis . db ,
118- validate : function ( value ) {
119- return ~ ~ ( value ) >= 0 ;
120- }
121- } ,
122- {
123- type : 'input' ,
124- name : 'default_worker_concurrency' ,
125- message : "concurrency for default worker" ,
126- default : defaultConf . default . worker . concurrency ,
127- validate : function ( value ) {
128- return ~ ~ ( value ) > 0 ;
129- }
130- } ,
131- {
132- type : 'confirm' ,
133- name : 'default_queue_remove_on_success' ,
134- message : "remove a job on success ?" ,
135- default : defaultConf . default . queue . removeOnSuccess ,
136- validate : function ( value ) {
137- console . log ( "default_queue_remove_on_success" , value ) ;
138- return true ;
139- }
140- } ,
141- {
142- type : 'confirm' ,
143- name : 'default_queue_remove_on_failure' ,
144- message : "remove a job on failure ?" ,
145- default : defaultConf . default . queue . removeOnFailure ,
146- validate : function ( value ) {
147- console . log ( "default_queue_remove_on_failure" , value ) ;
148- return true ;
149- }
150- }
151- ] ;
47+ }
48+ } ) )
49+ . prompt ( self => ( [
50+ {
51+ if : {
52+ fileNotFound : self . serviceConfigMainYML
53+ } ,
54+ type : 'input' ,
55+ name : 'default_queue_name' ,
56+ message : "default queue name" ,
57+ default : 'default' ,
58+ validate : function ( value ) {
59+ return true ;
60+ }
61+ } ,
62+ {
63+ if : {
64+ fileNotFound : self . serviceConfigMainYML
65+ } ,
66+ type : 'input' ,
67+ name : 'default_queue_redis_host' ,
68+ message : "redis host for default queue" ,
69+ default : self . defaultConfig . default . queue . redis . host ,
70+ validate : function ( value ) {
71+ return true ;
72+ }
73+ } ,
74+ {
75+ if : {
76+ fileNotFound : self . serviceConfigMainYML
77+ } ,
78+ type : 'input' ,
79+ name : 'default_queue_redis_port' ,
80+ message : "redis port for default queue" ,
81+ default : self . defaultConfig . default . queue . redis . port ,
82+ validate : function ( value ) {
83+ return ~ ~ ( value ) > 0 ;
84+ }
85+ } ,
86+ {
87+ if : {
88+ fileNotFound : self . serviceConfigMainYML
89+ } ,
90+ type : 'input' ,
91+ name : 'default_queue_redis_db' ,
92+ message : "redis database id for default queue" ,
93+ default : self . defaultConfig . default . queue . redis . db ,
94+ validate : function ( value ) {
95+ return ~ ~ ( value ) >= 0 ;
96+ }
97+ } ,
98+ {
99+ if : {
100+ fileNotFound : self . serviceConfigMainYML
101+ } ,
102+ type : 'input' ,
103+ name : 'default_worker_concurrency' ,
104+ message : "concurrency for default worker" ,
105+ default : self . defaultConfig . default . worker . concurrency ,
106+ validate : function ( value ) {
107+ return ~ ~ ( value ) > 0 ;
108+ }
109+ } ,
110+ {
111+ if : {
112+ fileNotFound : self . serviceConfigMainYML
113+ } ,
114+ type : 'confirm' ,
115+ name : 'default_queue_remove_on_success' ,
116+ message : "remove a job on success ?" ,
117+ default : self . defaultConfig . default . queue . removeOnSuccess ,
118+ validate : function ( value ) {
119+ console . log ( "default_queue_remove_on_success" , value ) ;
120+ return true ;
121+ }
122+ } ,
123+ {
124+ if : {
125+ fileNotFound : self . serviceConfigMainYML
126+ } ,
127+ type : 'confirm' ,
128+ name : 'default_queue_remove_on_failure' ,
129+ message : "remove a job on failure ?" ,
130+ default : self . defaultConfig . default . queue . removeOnFailure ,
131+ validate : function ( value ) {
132+ console . log ( "default_queue_remove_on_failure" , value ) ;
133+ return true ;
134+ }
135+ }
152136
153- inquirer . prompt ( questions ) . then ( conf => {
154- generate ( serviceName , moduleName , {
155- [ conf . default_queue_name ] : {
156- queue : {
157- redis : {
158- host : conf . default_queue_redis_host ,
159- port : ~ ~ ( conf . default_queue_redis_port ) ,
160- db : ~ ~ ( conf . default_queue_redis_db )
161- } ,
162- removeOnSuccess : conf . default_queue_remove_on_success ,
163- removeOnFailure : conf . default_queue_remove_on_failure ,
164- stallInterval : defaultConf . default . queue . stallInterval ,
165- nearTermWindow : defaultConf . default . queue . nearTermWindow ,
166- delayedDebounce : defaultConf . default . queue . delayedDebounce
137+ ] ) )
138+ . answersToConfig ( ( self , answers ) => {
139+ if ( answers . default_queue_name ) {
140+ return {
141+ [ answers . default_queue_name ] : {
142+ queue : {
143+ redis : {
144+ host : answers . default_queue_redis_host ,
145+ port : ~ ~ ( answers . default_queue_redis_port ) ,
146+ db : ~ ~ ( answers . default_queue_redis_db )
167147 } ,
168- worker : {
169- concurrency : ~ ~ ( conf . default_worker_concurrency )
170- }
148+ removeOnSuccess : answers . default_queue_remove_on_success ,
149+ removeOnFailure : answers . default_queue_remove_on_failure ,
150+ stallInterval : self . defaultConfig . default . queue . stallInterval ,
151+ nearTermWindow : self . defaultConfig . default . queue . nearTermWindow ,
152+ delayedDebounce : self . defaultConfig . default . queue . delayedDebounce
153+ } ,
154+ worker : {
155+ concurrency : ~ ~ ( answers . default_worker_concurrency )
171156 }
172- } ) ;
173- } ) ;
157+ }
158+ } ;
174159 } else {
175- generate ( serviceName , moduleName , defaultConf ) ;
160+ return { } ;
176161 }
177- }
162+ } )
163+ . run ( )
164+
0 commit comments