biz-a-cli 2.3.68 → 2.3.70

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.
package/bin/app.js CHANGED
@@ -138,8 +138,18 @@ Object
138
138
  }
139
139
  process.chdir(workDir);
140
140
 
141
- const child = spawn('npx', jestCommand, { shell: true });
142
- child.stderr.on('data', data => output += data?.toString())
141
+ const child = process.platform === 'win32'
142
+ ? spawn('cmd.exe', ['/d', '/s', '/c', 'npx', ...jestCommand])
143
+ : spawn('npx', jestCommand)
144
+ const collectOutput = data => {
145
+ output += data?.toString() || ''
146
+ }
147
+ child.stderr?.on('data', collectOutput)
148
+ child.stdout?.on('data', () => { }) // SCY BZ 4363, ref : https://nodejs.org/download/release/v22.19.0/docs/api/child_process.html
149
+
150
+ child.on('error', e => {
151
+ output += e?.message ? `\n${e.message}` : ''
152
+ });
143
153
  child.on('close', async code => {
144
154
  console.log('====================');
145
155
  console.log(output);
@@ -253,4 +263,6 @@ Object
253
263
  .strict()
254
264
  .parse();
255
265
 
256
- export { options, addCommandOptions, removeCommandOptions }
266
+ export { options, addCommandOptions, removeCommandOptions }
267
+
268
+
@@ -1,4 +1,4 @@
1
- import { apiRequestListener, RECONNECT_SOCKET_DELAY } from './hubEvent.js'
1
+ import { clientListener, RECONNECT_SOCKET_DELAY } from './hubEvent.js'
2
2
  import { deploymentListenerForVSCode } from './deployEvent.js'
3
3
  import { Tunnel as QuickTunnel } from 'cloudflared'
4
4
  import { Server as ioServer } from 'socket.io'
@@ -61,7 +61,7 @@ export function directHubEvent(serverSocket, argv){
61
61
 
62
62
  if (clientSocket.handshake.query.isClient) {
63
63
  setConnectListeners(clientSocket);
64
- apiRequestListener(clientSocket, argv);
64
+ clientListener(clientSocket, argv);
65
65
  clientSocket.join(CLIENT_ROOM);
66
66
  }
67
67
  else if (clientSocket.handshake.query.isDeploy) {
package/bin/hub.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  if (!process.env.NODE_ENV) {
4
4
  process.env.NODE_ENV = 'production';
@@ -6,9 +6,9 @@ if (!process.env.NODE_ENV) {
6
6
 
7
7
  import yargs from 'yargs';
8
8
  import { io as ioClient } from "socket.io-client";
9
- import { streamEvent, hubEvent, RECONNECT_SOCKET_DELAY } from './hubEvent.js'
9
+ import { streamEvent, hubEvent, RECONNECT_SOCKET_DELAY, status } from './hubEvent.js'
10
10
  import { createLogger, transports, format } from "winston";
11
- import os from 'node:os'
11
+ import os from 'os';
12
12
  import { directHubEvent, localhostTunnel, createSocketServer }from './directHubEvent.js'
13
13
  import { env } from "../envs/env.js"
14
14
 
@@ -138,7 +138,7 @@ app.use('/cb', (req, res)=>{
138
138
  });
139
139
 
140
140
  app.use('/status', (req, res)=>{
141
- res.status(200).json(argv.cliAddress());
141
+ res.status(200).json(status(argv));
142
142
  });
143
143
 
144
144
  // create HTTP(s) Server
@@ -150,8 +150,8 @@ const getProtocol = ()=>(isHttps ? 'Https://' : 'Http://')
150
150
  let server = isHttps ? https.createServer({key: fs.readFileSync(keyFile), cert: fs.readFileSync(certFile), ca: fs.readFileSync(rootFile),}, app) : http.createServer(app)
151
151
  argv.cliAddress = ()=>{
152
152
  const ip = Object.values(os.networkInterfaces()).flat().reduce((ip, {family, address, internal})=> ip || !internal && family==='IPv4' && address, undefined)
153
- return {ip, port: argv.serverport, address: `${ip}:${argv.serverport}`, publicUrl: argv.connectedPublicUrl, hubUrl: argv.connectedHubUrl}
154
- }
153
+ return {ip, port: argv.serverport, address: `${ip}:${argv.serverport}`, publicUrl: argv.connectedPublicUrl, hubUrl: argv.connectedHubUrl};
154
+ };
155
155
  server.listen(argv.serverport, () => {
156
156
  const info = argv.cliAddress()
157
157
  console.log(`${new Date()}: CLI is listening at ${getProtocol() + (process.env.HOST || info.ip || 'localhost')}:${info.port} `);
package/bin/hubEvent.js CHANGED
@@ -5,6 +5,8 @@ import { createRequire } from "module";
5
5
  const require = createRequire(import.meta.url);
6
6
  const ss = require('socket.io-stream'); //SCY: Temporary, next will be replaced with import
7
7
  import { Transform } from 'node:stream'
8
+ import os from 'node:os';
9
+ const packageJson = require('../package.json');
8
10
  // import { pipeline } from 'node:stream'
9
11
  import { deploymentListenerForHubServer } from './deployEvent.js';
10
12
 
@@ -146,12 +148,14 @@ export const hubEvent = (socket, argv, notifier)=>{
146
148
  socket.connect()
147
149
  }
148
150
  })
149
- const logError = msg=>{console.log(`${new Date()}: ${getIdText(id)}connection error to BizA Hub. Error : ${msg}`)}
151
+ const logError = msg=>{console.log(`${new Date()}: ${getIdText(id)}connection error to BizA Hub at ${argv['hubServer']} using sub domain "${argv['subdomain']}". Error : ${msg}`)}
150
152
  socket.on('connect_error', (error)=>{
153
+ // console.log('Connect Error :', error);
151
154
  notifier('')
152
155
  logError(error.message)
153
156
  })
154
157
  socket.on('error', (error)=>{
158
+ // console.log('Error :', error);
155
159
  notifier('')
156
160
  logError(error)
157
161
  })
@@ -159,13 +163,69 @@ export const hubEvent = (socket, argv, notifier)=>{
159
163
  notifier('')
160
164
  console.log(`${new Date()}: ${getIdText(id)}reconnecting to BizA Hub`)
161
165
  })
162
- apiRequestListener(socket, argv);
166
+ clientListener(socket, argv);
163
167
  deploymentListenerForHubServer(socket, argv);
164
168
  return socket
165
169
  }
166
170
 
167
- export const apiRequestListener = (socket, argv)=>{
168
- socket.on('apiRequest', (reqData, resCB)=>{
171
+ export const status = (argv)=>{
172
+ const cliAddress = argv.cliAddress();
173
+ const cpuArchitecture = os.arch();
174
+ const osArchitecture = (['x64', 'arm64', 'ppc64', 's390x'].includes(cpuArchitecture)) ? '64-bit' : (['ia32', 'arm', 'mips', 'mipsel', 's390'].includes(cpuArchitecture)) ? '32-bit' : `Unknown CPU architecture: ${cpuArchitecture}`;
175
+ const totalMemory = os.totalmem();
176
+ const freeMemory = os.freemem();
177
+ const usedMemoy = totalMemory - freeMemory;
178
+ const getUptime = ()=>{
179
+ let totalSeconds = Math.floor(process.uptime());
180
+ const days = Math.floor(totalSeconds / (24 * 3600));
181
+ totalSeconds %= (24 * 3600); // Remaining seconds after calculating days
182
+
183
+ const hours = Math.floor(totalSeconds / 3600);
184
+ totalSeconds %= 3600; // Remaining seconds after calculating hours
185
+
186
+ const minutes = Math.floor(totalSeconds / 60);
187
+ const seconds = totalSeconds % 60; // Remaining seconds after calculating minutes
188
+
189
+ return {
190
+ days: days,
191
+ hours: hours,
192
+ minutes: minutes,
193
+ seconds: seconds
194
+ };
195
+ };
196
+
197
+ return {
198
+ cli: {
199
+ address: cliAddress.address,
200
+ publicUrl: cliAddress.publicUrl,
201
+ hubUrl: cliAddress.hubUrl,
202
+ version: packageJson.version,
203
+ mode: process.env.NODE_ENV,
204
+ memoryUsage: `${(process.memoryUsage().rss / (1024 * 1024)).toFixed(2)} MB`,
205
+ nodeVersion: process.version,
206
+ uptime: getUptime()
207
+ },
208
+ api: {
209
+ address: `${argv.hostname}:${argv.port}`,
210
+ dbIndex: argv.dbindex,
211
+ },
212
+ os: {
213
+ name: os.type(),
214
+ architecture: osArchitecture,
215
+ cpuCount: os.cpus().length,
216
+ platform: os.platform(),
217
+ memory: {
218
+ total: (totalMemory / (1024 * 1024 * 1024)).toFixed(2) + ' GB',
219
+ free: (freeMemory / (1024 * 1024 * 1024)).toFixed(2) + ' GB',
220
+ used: (usedMemoy / (1024 * 1024 * 1024)).toFixed(2) + ' GB',
221
+ }
222
+ }
223
+ };
224
+ };
225
+
226
+ export const clientListener = (socket, argv)=>{
227
+ socket
228
+ .on('apiRequest', (reqData, resCB)=>{
169
229
  let apiAddress = `${argv['secure']==true ? 'https://' : 'http://'}${argv['hostname']}:${argv['port']}`
170
230
  let reqBody = reqData.body
171
231
  try{
@@ -217,4 +277,18 @@ export const apiRequestListener = (socket, argv)=>{
217
277
  resCB({status: 401, statusText: 'bad subdomain', url: apiAddress + reqData.path}, null)
218
278
  }
219
279
  })
220
- }
280
+ .on('cliCommand', async (data, cb)=>{
281
+ try {
282
+ const command = data.command.trim().toLowerCase();
283
+ switch (command) { //ensure case insensitive
284
+ case 'status':
285
+ cb(null, status(argv));
286
+ break;
287
+ default:
288
+ cb(`Unknown CLI command '${command}'`, null);
289
+ };
290
+ } catch (err) {
291
+ cb(err.message || err, null);
292
+ };
293
+ });
294
+ };
package/envs/env.dev.js CHANGED
@@ -6,5 +6,5 @@ export const envDev = {
6
6
  encodeURIComponent('imm@2019') + '@imm-cdm-dev.rf6wr.mongodb.net/?retryWrites=true&w=majority',
7
7
  COMPANY_REGISTER: 'companyregister-dev',
8
8
  BIZA_SERVER_LINK: 'https://biz-a-dev-41e7c93a25e5.herokuapp.com',
9
- BIZA_HUB_SERVER_LINK: 'https://hub.biz-a.id'
9
+ BIZA_HUB_SERVER_LINK: 'https://hub.biz-a.id' // https://biz-a-hub-ed77b066db87.herokuapp.com/
10
10
  };
package/envs/env.js CHANGED
@@ -7,4 +7,5 @@ export const env = {
7
7
  COMPANY_REGISTER: 'companyregister',
8
8
  BIZA_SERVER_LINK: 'https://server.biz-a.id',
9
9
  BIZA_HUB_SERVER_LINK: 'https://hub.biz-a.id'
10
+ // BIZA_HUB_SERVER_LINK: 'https://biz-a-hub-ed77b066db87.herokuapp.com'
10
11
  };
package/log/debug.log CHANGED
@@ -1,180 +0,0 @@
1
-
2
- {"level":"debug","message":"====================================="}
3
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 22:33:54 callbackprocess_id: 526"}
4
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.051 seconds"}
5
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.802 seconds"}
6
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.036 seconds"}
7
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.057 seconds"}
8
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.022 seconds"}
9
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 1.882 seconds"}
10
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.609 seconds"}
11
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 22:33:58 callbackprocess_id: 526"}
12
- {"level":"debug","message":"====================================="}
13
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 22:35:30 callbackprocess_id: 526"}
14
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.079 seconds"}
15
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.175 seconds"}
16
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.047 seconds"}
17
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.209 seconds"}
18
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.044 seconds"}
19
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.237 seconds"}
20
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.986 seconds"}
21
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 22:35:36 callbackprocess_id: 526"}
22
- {"level":"debug","message":"====================================="}
23
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 22:59:50 callbackprocess_id: 526"}
24
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.055 seconds"}
25
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.796 seconds"}
26
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.045 seconds"}
27
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.211 seconds"}
28
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.043 seconds"}
29
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 3.48 seconds"}
30
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.784 seconds"}
31
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 22:59:56 callbackprocess_id: 526"}
32
- {"level":"debug","message":"====================================="}
33
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:01:02 callbackprocess_id: 526"}
34
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.071 seconds"}
35
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.813 seconds"}
36
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.039 seconds"}
37
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.188 seconds"}
38
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.039 seconds"}
39
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 3.149 seconds"}
40
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.819 seconds"}
41
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:01:08 callbackprocess_id: 526"}
42
- {"level":"debug","message":"====================================="}
43
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:02:49 callbackprocess_id: 526"}
44
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.047 seconds"}
45
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.794 seconds"}
46
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.043 seconds"}
47
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.218 seconds"}
48
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.045 seconds"}
49
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.935 seconds"}
50
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.862 seconds"}
51
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:02:55 callbackprocess_id: 526"}
52
- {"level":"debug","message":"====================================="}
53
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:04:14 callbackprocess_id: 526"}
54
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.047 seconds"}
55
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.855 seconds"}
56
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.047 seconds"}
57
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.2 seconds"}
58
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.037 seconds"}
59
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 3.311 seconds"}
60
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.786 seconds"}
61
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:04:20 callbackprocess_id: 526"}
62
- {"level":"debug","message":"====================================="}
63
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:05:01 callbackprocess_id: 526"}
64
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.095 seconds"}
65
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.055 seconds"}
66
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.044 seconds"}
67
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.181 seconds"}
68
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.043 seconds"}
69
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 4.269 seconds"}
70
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 2.077 seconds"}
71
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:05:09 callbackprocess_id: 526"}
72
- {"level":"debug","message":"====================================="}
73
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:07:50 callbackprocess_id: 526"}
74
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.057 seconds"}
75
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 0.868 seconds"}
76
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.045 seconds"}
77
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.205 seconds"}
78
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.048 seconds"}
79
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.89 seconds"}
80
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.838 seconds"}
81
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:07:56 callbackprocess_id: 526"}
82
- {"level":"debug","message":"====================================="}
83
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:09:49 callbackprocess_id: 526"}
84
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.092 seconds"}
85
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.15 seconds"}
86
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.038 seconds"}
87
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.176 seconds"}
88
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.039 seconds"}
89
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 4.005 seconds"}
90
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 2.016 seconds"}
91
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:09:57 callbackprocess_id: 526"}
92
- {"level":"debug","message":"====================================="}
93
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:11:17 callbackprocess_id: 526"}
94
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.089 seconds"}
95
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.193 seconds"}
96
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.039 seconds"}
97
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.182 seconds"}
98
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.053 seconds"}
99
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 4.184 seconds"}
100
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 2.037 seconds"}
101
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:11:25 callbackprocess_id: 526"}
102
- {"level":"debug","message":"====================================="}
103
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:12:43 callbackprocess_id: 526"}
104
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.082 seconds"}
105
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.245 seconds"}
106
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.035 seconds"}
107
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.179 seconds"}
108
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.036 seconds"}
109
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 4.719 seconds"}
110
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.911 seconds"}
111
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:12:51 callbackprocess_id: 526"}
112
- {"level":"debug","message":"====================================="}
113
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:19:24 callbackprocess_id: 526"}
114
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.089 seconds"}
115
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.143 seconds"}
116
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.041 seconds"}
117
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.213 seconds"}
118
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.042 seconds"}
119
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.086 seconds"}
120
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 30.016 seconds"}
121
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:19:58 callbackprocess_id: 526"}
122
- {"level":"debug","message":"====================================="}
123
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:21:51 callbackprocess_id: 526"}
124
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.078 seconds"}
125
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.09 seconds"}
126
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.035 seconds"}
127
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.189 seconds"}
128
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.037 seconds"}
129
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.018 seconds"}
130
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 4.144 seconds"}
131
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:21:59 callbackprocess_id: 526"}
132
- {"level":"debug","message":"====================================="}
133
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:23:37 callbackprocess_id: 526"}
134
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.092 seconds"}
135
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.105 seconds"}
136
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.037 seconds"}
137
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.174 seconds"}
138
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.037 seconds"}
139
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.036 seconds"}
140
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 5.681 seconds"}
141
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:23:47 callbackprocess_id: 526"}
142
- {"level":"debug","message":"====================================="}
143
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:26:51 callbackprocess_id: 526"}
144
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.086 seconds"}
145
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 1.134 seconds"}
146
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.041 seconds"}
147
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.204 seconds"}
148
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.038 seconds"}
149
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.012 seconds"}
150
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 4.26 seconds"}
151
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:26:58 callbackprocess_id: 526"}
152
- {"level":"debug","message":"====================================="}
153
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:30:47 callbackprocess_id: 526"}
154
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.085 seconds"}
155
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 24.544 seconds"}
156
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.037 seconds"}
157
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.178 seconds"}
158
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.043 seconds"}
159
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 1.185 seconds"}
160
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 0.002 seconds"}
161
- {"level":"debug","message":"====================================="}
162
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:32:38 callbackprocess_id: 526"}
163
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.084 seconds"}
164
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 3.4 seconds"}
165
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.1 seconds"}
166
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.191 seconds"}
167
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.037 seconds"}
168
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.231 seconds"}
169
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 1.976 seconds"}
170
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:32:46 callbackprocess_id: 526"}
171
- {"level":"debug","message":"====================================="}
172
- {"level":"debug","message":"Mulai proses hasil produksi 2025-08-03 23:36:43 callbackprocess_id: 526"}
173
- {"level":"debug","message":"scheduleid: 122405 createRequestRM succeed 0.079 seconds"}
174
- {"level":"debug","message":"scheduleid: 122405 saveRMOutMarshal succeed 2.799 seconds"}
175
- {"level":"debug","message":"scheduleid: 122405 saveStartProductionMarshal succeed 0.049 seconds"}
176
- {"level":"debug","message":"scheduleid: 122405 saveProdResultMarshal succeed 0.193 seconds"}
177
- {"level":"debug","message":"scheduleid: 122405 saveQC succeed 0.041 seconds"}
178
- {"level":"debug","message":"scheduleid: 122405 saveFGInMarshal succeed 2.241 seconds"}
179
- {"level":"debug","message":"scheduleid: 122405 saveCloseWOMarshal succeed 2.052 seconds"}
180
- {"level":"debug","message":"Selesai proses hasil produksi 2025-08-03 23:36:50 callbackprocess_id: 526"}
package/log/error.log CHANGED
@@ -1,5 +0,0 @@
1
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
2
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
3
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
4
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
5
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
package/log/info.log CHANGED
@@ -1,5 +0,0 @@
1
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
2
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
3
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
4
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
5
- {"level":"error","message":"Unhandled Rejection: Error: connect ECONNREFUSED 127.0.0.1:212","stack":"Error: Error: connect ECONNREFUSED 127.0.0.1:212\n at runCliScript (file:///C:/SourceCode/biz-a/cli/callbackController.js:40:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "biz-a-cli",
3
3
  "nameDev": "biz-a-cli-dev",
4
- "version": "2.3.68",
4
+ "version": "2.3.70",
5
5
  "versionDev": "0.0.34",
6
6
  "description": "",
7
7
  "main": "bin/index.js",
package/tests/app.test.js CHANGED
@@ -418,7 +418,11 @@ describe('Biz-A Apps CLI', () => {
418
418
 
419
419
  function continueExpect(args) {
420
420
  expect(process.cwd()).toBe(absoluteFullTestPath);
421
- expect(child_process.spawn).toBeCalledWith("npx", args, { "shell": true });
421
+ if (process.platform === "win32") {
422
+ expect(child_process.spawn).toBeCalledWith("cmd.exe", ["/d", "/s", "/c", "npx", ...args]);
423
+ } else {
424
+ expect(child_process.spawn).toBeCalledWith("npx", args);
425
+ }
422
426
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL - 2][0]).toBe('====================');
423
427
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL - 1][0]).toBe(jestMessage);
424
428
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL][0]).toBe('====================');
@@ -427,7 +431,11 @@ describe('Biz-A Apps CLI', () => {
427
431
 
428
432
  function abortExpect(args) {
429
433
  expect(process.cwd()).toBe(absoluteFullTestPath);
430
- expect(child_process.spawn).toBeCalledWith("npx", args, { "shell": true });
434
+ if (process.platform === "win32") {
435
+ expect(child_process.spawn).toBeCalledWith("cmd.exe", ["/d", "/s", "/c", "npx", ...args]);
436
+ } else {
437
+ expect(child_process.spawn).toBeCalledWith("npx", args);
438
+ }
431
439
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL][0]).toBe('====================');
432
440
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL + 1][0]).toBe(jestMessage);
433
441
  expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL + 2][0]).toBe('====================');
@@ -536,6 +544,51 @@ describe('Biz-A Apps CLI', () => {
536
544
 
537
545
  continueExpect(jestArgsWithPassNoTest);
538
546
  })
547
+
548
+ it('Shall continue add biz a template, stdout exists and must be consumed for many unit test outputs', async () => {
549
+ returnedCode = 0;
550
+ const stdoutChunks = Array(300).fill('Passed');
551
+ let stdoutConsumed = false;
552
+
553
+ child_process.spawn.mockImplementationOnce(() => ({
554
+ on: jest.fn((event, callback) => {
555
+ if ((event === 'close') && stdoutConsumed) callback(returnedCode)
556
+ }),
557
+ stderr: {
558
+ on: jest.fn()
559
+ },
560
+ stdout: {
561
+ on: jest.fn((event, callback) => {
562
+ if (event === 'data') {
563
+ stdoutConsumed = true;
564
+ for (const chunk of stdoutChunks) {
565
+ callback(chunk)
566
+ }
567
+ }
568
+ })
569
+ }
570
+ }))
571
+
572
+ mockValidTemplates(appName, mockScripts);
573
+ fs.mkdirSync(fullTestPath + '/test', { recursive: true })
574
+ fs.writeFileSync(fullTestPath + '/test/a.test.js', `it('dummy test', () => {
575
+ expect(true).toBe(true);
576
+ })`)
577
+
578
+ await runJest();
579
+
580
+ expect(stdoutConsumed).toBe(true);
581
+ expect(process.cwd()).toBe(absoluteFullTestPath);
582
+ if (process.platform === "win32") {
583
+ expect(child_process.spawn).toBeCalledWith("cmd.exe", ["/d", "/s", "/c", "npx", ...jestArgs]);
584
+ } else {
585
+ expect(child_process.spawn).toBeCalledWith("npx", jestArgs);
586
+ }
587
+ expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL - 2][0]).toBe('====================');
588
+ expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL - 1][0]).toBe('');
589
+ expect(logSpy.mock.calls[logSpy.mock.calls.length - JEST_MESSAGE_TOTAL][0]).toBe('====================');
590
+ expect(errorSpy.mock.calls.length).toBe(0);
591
+ })
539
592
  })
540
593
  })
541
594
 
@@ -643,4 +696,8 @@ describe('Biz-A Apps CLI', () => {
643
696
  }
644
697
  })
645
698
  })
646
- })
699
+ })
700
+
701
+
702
+
703
+