@haibun/utils 1.55.2 → 1.55.4

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.
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ type TRunOptions = {
3
+ recreate: boolean;
4
+ tts: boolean;
5
+ capture: boolean;
6
+ res: string;
7
+ passEnv: string | undefined;
8
+ };
9
+ export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
10
+ runOptions: TRunOptions;
11
+ testToRun: string;
12
+ filter: string;
13
+ includeDirs: string[];
14
+ };
15
+ declare const TRunOptions: TRunOptions;
16
+ export {};
17
+ //# sourceMappingURL=index%20copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index copy.d.ts","sourceRoot":"","sources":["../../src/vcapture/index copy.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AA0FD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA8CvF;AAGD,QAAA,MAAoB,WAAW,aAAmF,CAAC"}
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+ import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
3
+ import { execSync } from 'child_process';
4
+ import { resolve } from 'path';
5
+ import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
6
+ import { tmpdir } from 'os';
7
+ import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
8
+ process.on('unhandledRejection', (err) => {
9
+ console.error('cli Unhandled Rejection:', err);
10
+ if (err && err.stack) {
11
+ console.error(err.stack);
12
+ }
13
+ else {
14
+ console.error(err);
15
+ }
16
+ });
17
+ const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
18
+ try {
19
+ const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
20
+ const projectDir = process.cwd();
21
+ const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
22
+ const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
23
+ if (thisRunOptions.passEnv) {
24
+ envs.push(thisRunOptions.passEnv);
25
+ }
26
+ const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
27
+ if (thisRunOptions.passEnv) {
28
+ haibunEnvc;
29
+ }
30
+ const captureDir = resolve(projectDir, 'capture');
31
+ console.info('vcapture running with options:', thisRunOptions);
32
+ if (!existsSync(captureDir)) {
33
+ console.log('Creating capture directory');
34
+ mkdirSync(captureDir, { recursive: true });
35
+ }
36
+ const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
37
+ mkdirSync(buildContextDir, { recursive: true });
38
+ execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
39
+ execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
40
+ const dirsToMount = [...includeDirs, 'capture'];
41
+ const composeVolumes = [
42
+ `${projectDir}/capture:/app/capture`,
43
+ `${projectDir}:/app/output`,
44
+ ...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
45
+ ];
46
+ const composeEnvironment = [
47
+ 'DISPLAY=:99',
48
+ `RES=${thisRunOptions.res}`,
49
+ `${HOST_PROJECT_DIR}=${projectDir}`,
50
+ `COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
51
+ ];
52
+ if (thisRunOptions.tts) {
53
+ composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
54
+ }
55
+ if (thisRunOptions.capture) {
56
+ composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
57
+ }
58
+ const composeFile = `
59
+ services:
60
+ haibun-recorder:
61
+ build:
62
+ context: ${buildContextDir}
63
+ dockerfile: ${utilDir}/Dockerfile
64
+ volumes:
65
+ ${asYamlOptions(composeVolumes)}
66
+ environment:
67
+ ${(asYamlOptions(composeEnvironment))}
68
+ `;
69
+ writeFileSync(tmpFile, composeFile);
70
+ console.log(`Building then starting vcapture container using ${utilDir}`);
71
+ console.log(`Mounting directories:\n${composeVolumes}`);
72
+ try {
73
+ const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
74
+ console.log('building with:', cmd);
75
+ execSync(cmd, {
76
+ cwd: utilDir,
77
+ stdio: 'inherit',
78
+ env: {
79
+ ...process.env,
80
+ CURRENT_DIR: projectDir,
81
+ }
82
+ });
83
+ }
84
+ finally {
85
+ unlinkSync(tmpFile);
86
+ execSync(`rm -rf ${buildContextDir}`);
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error('Error:', error.stderr?.toString() || error.message);
91
+ process.exit(1);
92
+ }
93
+ };
94
+ function asYamlOptions(options) {
95
+ return options.map(o => ` - ${o}`).join('\n');
96
+ }
97
+ export function parseVCaptureArgs(args, printHelp) {
98
+ const runOptions = {
99
+ recreate: false,
100
+ tts: false,
101
+ capture: true,
102
+ res: '1280x720',
103
+ passEnv: undefined
104
+ };
105
+ args.reduce((acc, arg) => {
106
+ if (arg.startsWith('--')) {
107
+ const [what, ...v] = arg.split('=');
108
+ const value = v.join('=');
109
+ if (what === '--recreate') {
110
+ runOptions.recreate = value !== 'false';
111
+ return acc;
112
+ }
113
+ else if (what === '--tts') {
114
+ runOptions.tts = value !== 'false';
115
+ return acc;
116
+ }
117
+ else if (what === '--no-capture') {
118
+ runOptions.capture = false;
119
+ return acc;
120
+ }
121
+ else if (what === '--pass-env') {
122
+ runOptions.passEnv = value || args.shift();
123
+ return acc;
124
+ }
125
+ else if (what === '--res') {
126
+ const res = value || args.shift();
127
+ if (res && res.match(/^\d+x\d+$/)) {
128
+ runOptions.res = res;
129
+ return acc;
130
+ }
131
+ console.error(`Missing or incorrect WxH value for --res: ${res}`);
132
+ printHelp();
133
+ }
134
+ else if (arg === '--help') {
135
+ printHelp(0);
136
+ }
137
+ console.error(`unknown -- arg ${arg}`);
138
+ printHelp();
139
+ }
140
+ return [...acc, arg];
141
+ }, []);
142
+ const [testToRun, filter, ...includeDirs] = args;
143
+ if (!testToRun || includeDirs.length === 0) {
144
+ printHelp();
145
+ }
146
+ return { runOptions, testToRun, filter, includeDirs };
147
+ }
148
+ const args = process.argv.slice(2);
149
+ const { runOptions: TRunOptions, testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
150
+ runContainer(testToRun, filter, includeDirs, runOptions);
151
+ function printHelp(exitCode = 1) {
152
+ console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
153
+ process.exit(exitCode);
154
+ }
155
+ //# sourceMappingURL=index%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index copy.js","sourceRoot":"","sources":["../../src/vcapture/index copy.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
3
- import { execSync } from 'child_process';
4
- import { resolve } from 'path';
5
- import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
6
- import { tmpdir } from 'os';
7
- import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
2
+ import { parseVCaptureArgs, runContainer } from "./vcapture-lib.js";
8
3
  process.on('unhandledRejection', (err) => {
9
4
  console.error('cli Unhandled Rejection:', err);
10
5
  if (err && err.stack) {
@@ -14,137 +9,11 @@ process.on('unhandledRejection', (err) => {
14
9
  console.error(err);
15
10
  }
16
11
  });
17
- const runOptions = {
18
- recreate: false,
19
- tts: false,
20
- capture: true,
21
- res: '1280x1024',
22
- passEnv: undefined
23
- };
24
- const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
25
- try {
26
- const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
27
- const projectDir = process.cwd();
28
- const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
29
- const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
30
- if (runOptions.passEnv) {
31
- envs.push(runOptions.passEnv);
32
- }
33
- const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
34
- if (runOptions.passEnv) {
35
- haibunEnvc;
36
- }
37
- const captureDir = resolve(projectDir, 'capture');
38
- console.info('vcapture running with options:', thisRunOptions);
39
- if (!existsSync(captureDir)) {
40
- console.log('Creating capture directory');
41
- mkdirSync(captureDir, { recursive: true });
42
- }
43
- const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
44
- mkdirSync(buildContextDir, { recursive: true });
45
- execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
46
- execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
47
- const dirsToMount = [...includeDirs, 'capture'];
48
- const composeVolumes = [
49
- `${projectDir}/capture:/app/capture`,
50
- `${projectDir}:/app/output`,
51
- ...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
52
- ];
53
- const composeEnvironment = [
54
- 'DISPLAY=:99',
55
- `RES=${thisRunOptions.res}`,
56
- `${HOST_PROJECT_DIR}=${projectDir}`,
57
- `COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
58
- ];
59
- if (thisRunOptions.tts) {
60
- composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
61
- }
62
- if (thisRunOptions.capture) {
63
- composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
64
- }
65
- const composeFile = `
66
- services:
67
- haibun-recorder:
68
- build:
69
- context: ${buildContextDir}
70
- dockerfile: ${utilDir}/Dockerfile
71
- volumes:
72
- ${asYamlOptions(composeVolumes)}
73
- environment:
74
- ${(asYamlOptions(composeEnvironment))}
75
- `;
76
- writeFileSync(tmpFile, composeFile);
77
- console.log(`Building then starting vcapture container using ${utilDir}`);
78
- console.log(`Mounting directories:\n${composeVolumes}`);
79
- try {
80
- const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
81
- console.log('building with:', cmd);
82
- execSync(cmd, {
83
- cwd: utilDir,
84
- stdio: 'inherit',
85
- env: {
86
- ...process.env,
87
- CURRENT_DIR: projectDir,
88
- }
89
- });
90
- }
91
- finally {
92
- unlinkSync(tmpFile);
93
- execSync(`rm -rf ${buildContextDir}`);
94
- }
95
- }
96
- catch (error) {
97
- console.error('Error:', error.stderr?.toString() || error.message);
98
- process.exit(1);
99
- }
100
- };
101
12
  const args = process.argv.slice(2);
102
- args.reduce((acc, arg) => {
103
- if (arg.startsWith('--')) {
104
- const [what, value] = arg.split('=');
105
- if (what === '--recreate') {
106
- runOptions.recreate = value !== 'false';
107
- return acc;
108
- }
109
- else if (what === '--tts') {
110
- runOptions.tts = value !== 'false';
111
- return acc;
112
- }
113
- else if (what === '--no-capture') {
114
- runOptions.capture = false;
115
- return acc;
116
- }
117
- else if (what === '--pass-env') {
118
- runOptions.passEnv = value || args.shift();
119
- return acc;
120
- }
121
- else if (what === '--res') {
122
- const res = value || args.shift();
123
- if (res && res.match(/^\d+x\d+$/)) {
124
- runOptions.res = res;
125
- return acc;
126
- }
127
- console.error(`Missing or incorrect WxH value for --res: ${res}`);
128
- printHelp();
129
- }
130
- else if (arg === '--help') {
131
- printHelp(0);
132
- }
133
- console.error(`unknown -- arg ${arg}`);
134
- printHelp();
135
- }
136
- return [...acc, arg];
137
- }, []);
138
- const [testToRun, filter, ...includeDirs] = args;
139
- if (!testToRun || includeDirs.length === 0) {
140
- printHelp();
141
- }
13
+ const { testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
142
14
  runContainer(testToRun, filter, includeDirs, runOptions);
143
15
  function printHelp(exitCode = 1) {
144
16
  console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
145
17
  process.exit(exitCode);
146
18
  }
147
- function asYamlOptions(options) {
148
- return options.map(o => ` - ${o}`).join('\n');
149
- }
150
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAc,EAAE,EAAE;IACnD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAE1F,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAEzD,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,6HAA6H,CAAC,CAAC;IACtK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ type TRunOptions = {
3
+ recreate: boolean;
4
+ tts: boolean;
5
+ capture: boolean;
6
+ res: string;
7
+ passEnv: string | undefined;
8
+ };
9
+ export declare const runContainer: (testToRun: any, filter: any, includeDirs: any[], thisRunOptions: TRunOptions) => void;
10
+ export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
11
+ runOptions: TRunOptions;
12
+ testToRun: string;
13
+ filter: string;
14
+ includeDirs: string[];
15
+ };
16
+ declare const TRunOptions: TRunOptions;
17
+ export {};
18
+ //# sourceMappingURL=run-vcapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-vcapture.d.ts","sourceRoot":"","sources":["../../src/vcapture/run-vcapture.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,cAAS,EAAE,WAAM,EAAE,kBAAgB,EAAE,gBAAgB,WAAW,SAkF5F,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA8CvF;AAGD,QAAA,MAAoB,WAAW,aAAmF,CAAC"}
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+ import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
3
+ import { execSync } from 'child_process';
4
+ import { resolve } from 'path';
5
+ import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
6
+ import { tmpdir } from 'os';
7
+ import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
8
+ process.on('unhandledRejection', (err) => {
9
+ console.error('cli Unhandled Rejection:', err);
10
+ if (err && err.stack) {
11
+ console.error(err.stack);
12
+ }
13
+ else {
14
+ console.error(err);
15
+ }
16
+ });
17
+ export const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
18
+ try {
19
+ const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
20
+ const projectDir = process.cwd();
21
+ const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
22
+ const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
23
+ if (thisRunOptions.passEnv) {
24
+ envs.push(thisRunOptions.passEnv);
25
+ }
26
+ const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
27
+ if (thisRunOptions.passEnv) {
28
+ haibunEnvc;
29
+ }
30
+ const captureDir = resolve(projectDir, 'capture');
31
+ console.info('vcapture running with options:', thisRunOptions);
32
+ if (!existsSync(captureDir)) {
33
+ console.log('Creating capture directory');
34
+ mkdirSync(captureDir, { recursive: true });
35
+ }
36
+ const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
37
+ mkdirSync(buildContextDir, { recursive: true });
38
+ execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
39
+ execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
40
+ const dirsToMount = [...includeDirs, 'capture'];
41
+ const composeVolumes = [
42
+ `${projectDir}/capture:/app/capture`,
43
+ `${projectDir}:/app/output`,
44
+ ...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
45
+ ];
46
+ const composeEnvironment = [
47
+ 'DISPLAY=:99',
48
+ `RES=${thisRunOptions.res}`,
49
+ `${HOST_PROJECT_DIR}=${projectDir}`,
50
+ `COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
51
+ ];
52
+ if (thisRunOptions.tts) {
53
+ composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
54
+ }
55
+ if (thisRunOptions.capture) {
56
+ composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
57
+ }
58
+ const composeFile = `
59
+ services:
60
+ haibun-recorder:
61
+ build:
62
+ context: ${buildContextDir}
63
+ dockerfile: ${utilDir}/Dockerfile
64
+ volumes:
65
+ ${asYamlOptions(composeVolumes)}
66
+ environment:
67
+ ${(asYamlOptions(composeEnvironment))}
68
+ `;
69
+ writeFileSync(tmpFile, composeFile);
70
+ console.log(`Building then starting vcapture container using ${utilDir}`);
71
+ console.log(`Mounting directories:\n${composeVolumes}`);
72
+ try {
73
+ const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
74
+ console.log('building with:', cmd);
75
+ execSync(cmd, {
76
+ cwd: utilDir,
77
+ stdio: 'inherit',
78
+ env: {
79
+ ...process.env,
80
+ CURRENT_DIR: projectDir,
81
+ }
82
+ });
83
+ }
84
+ finally {
85
+ unlinkSync(tmpFile);
86
+ execSync(`rm -rf ${buildContextDir}`);
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error('Error:', error.stderr?.toString() || error.message);
91
+ process.exit(1);
92
+ }
93
+ };
94
+ function asYamlOptions(options) {
95
+ return options.map(o => ` - ${o}`).join('\n');
96
+ }
97
+ export function parseVCaptureArgs(args, printHelp) {
98
+ const runOptions = {
99
+ recreate: false,
100
+ tts: false,
101
+ capture: true,
102
+ res: '1280x720',
103
+ passEnv: undefined
104
+ };
105
+ args.reduce((acc, arg) => {
106
+ if (arg.startsWith('--')) {
107
+ const [what, ...v] = arg.split('=');
108
+ const value = v.join('=');
109
+ if (what === '--recreate') {
110
+ runOptions.recreate = value !== 'false';
111
+ return acc;
112
+ }
113
+ else if (what === '--tts') {
114
+ runOptions.tts = value !== 'false';
115
+ return acc;
116
+ }
117
+ else if (what === '--no-capture') {
118
+ runOptions.capture = false;
119
+ return acc;
120
+ }
121
+ else if (what === '--pass-env') {
122
+ runOptions.passEnv = value || args.shift();
123
+ return acc;
124
+ }
125
+ else if (what === '--res') {
126
+ const res = value || args.shift();
127
+ if (res && res.match(/^\d+x\d+$/)) {
128
+ runOptions.res = res;
129
+ return acc;
130
+ }
131
+ console.error(`Missing or incorrect WxH value for --res: ${res}`);
132
+ printHelp();
133
+ }
134
+ else if (arg === '--help') {
135
+ printHelp(0);
136
+ }
137
+ console.error(`unknown -- arg ${arg}`);
138
+ printHelp();
139
+ }
140
+ return [...acc, arg];
141
+ }, []);
142
+ const [testToRun, filter, ...includeDirs] = args;
143
+ if (!testToRun || includeDirs.length === 0) {
144
+ printHelp();
145
+ }
146
+ return { runOptions, testToRun, filter, includeDirs };
147
+ }
148
+ const args = process.argv.slice(2);
149
+ const { runOptions: TRunOptions, testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
150
+ runContainer(testToRun, filter, includeDirs, runOptions);
151
+ function printHelp(exitCode = 1) {
152
+ console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
153
+ process.exit(exitCode);
154
+ }
155
+ //# sourceMappingURL=run-vcapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-vcapture.js","sourceRoot":"","sources":["../../src/vcapture/run-vcapture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ type TRunOptions = {
3
+ recreate: boolean;
4
+ tts: boolean;
5
+ capture: boolean;
6
+ res: string;
7
+ passEnv: string | undefined;
8
+ };
9
+ export declare const runContainer: (testToRun: any, filter: any, includeDirs: any[], thisRunOptions: TRunOptions) => void;
10
+ export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
11
+ runOptions: TRunOptions;
12
+ testToRun: string;
13
+ filter: string;
14
+ includeDirs: string[];
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=vcapture-lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcapture-lib.d.ts","sourceRoot":"","sources":["../../src/vcapture/vcapture-lib.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,cAAS,EAAE,WAAM,EAAE,kBAAgB,EAAE,gBAAgB,WAAW,SAkF5F,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA+DvF"}
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+ import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
3
+ import { execSync } from 'child_process';
4
+ import { resolve } from 'path';
5
+ import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
6
+ import { tmpdir } from 'os';
7
+ import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
8
+ process.on('unhandledRejection', (err) => {
9
+ console.error('cli Unhandled Rejection:', err);
10
+ if (err && err.stack) {
11
+ console.error(err.stack);
12
+ }
13
+ else {
14
+ console.error(err);
15
+ }
16
+ });
17
+ export const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
18
+ try {
19
+ const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
20
+ const projectDir = process.cwd();
21
+ const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
22
+ const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
23
+ if (thisRunOptions.passEnv) {
24
+ envs.push(thisRunOptions.passEnv);
25
+ }
26
+ const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
27
+ if (thisRunOptions.passEnv) {
28
+ haibunEnvc;
29
+ }
30
+ const captureDir = resolve(projectDir, 'capture');
31
+ console.info('vcapture running with options:', thisRunOptions);
32
+ if (!existsSync(captureDir)) {
33
+ console.log('Creating capture directory');
34
+ mkdirSync(captureDir, { recursive: true });
35
+ }
36
+ const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
37
+ mkdirSync(buildContextDir, { recursive: true });
38
+ execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
39
+ execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
40
+ const dirsToMount = [...includeDirs, 'capture'];
41
+ const composeVolumes = [
42
+ `${projectDir}/capture:/app/capture`,
43
+ `${projectDir}:/app/output`,
44
+ ...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
45
+ ];
46
+ const composeEnvironment = [
47
+ 'DISPLAY=:99',
48
+ `RES=${thisRunOptions.res}`,
49
+ `${HOST_PROJECT_DIR}=${projectDir}`,
50
+ `COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
51
+ ];
52
+ if (thisRunOptions.tts) {
53
+ composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
54
+ }
55
+ if (thisRunOptions.capture) {
56
+ composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
57
+ }
58
+ const composeFile = `
59
+ services:
60
+ haibun-recorder:
61
+ build:
62
+ context: ${buildContextDir}
63
+ dockerfile: ${utilDir}/Dockerfile
64
+ volumes:
65
+ ${asYamlOptions(composeVolumes)}
66
+ environment:
67
+ ${(asYamlOptions(composeEnvironment))}
68
+ `;
69
+ writeFileSync(tmpFile, composeFile);
70
+ console.log(`Building then starting vcapture container using ${utilDir}`);
71
+ console.log(`Mounting directories:\n${composeVolumes}`);
72
+ try {
73
+ const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
74
+ console.log('building with:', cmd);
75
+ execSync(cmd, {
76
+ cwd: utilDir,
77
+ stdio: 'inherit',
78
+ env: {
79
+ ...process.env,
80
+ CURRENT_DIR: projectDir,
81
+ }
82
+ });
83
+ }
84
+ finally {
85
+ unlinkSync(tmpFile);
86
+ execSync(`rm -rf ${buildContextDir}`);
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error('Error:', error.stderr?.toString() || error.message);
91
+ process.exit(1);
92
+ }
93
+ };
94
+ function asYamlOptions(options) {
95
+ return options.map(o => ` - ${o}`).join('\n');
96
+ }
97
+ export function parseVCaptureArgs(args, printHelp) {
98
+ const runOptions = {
99
+ recreate: false,
100
+ tts: false,
101
+ capture: true,
102
+ res: '1280x720',
103
+ passEnv: undefined
104
+ };
105
+ const parsedArgs = [];
106
+ for (let i = 0; i < args.length; i++) {
107
+ const arg = args[i];
108
+ if (arg.startsWith('--')) {
109
+ const [what, ...v] = arg.split('=');
110
+ const value = v.join('=');
111
+ const getValue = (defaultValue) => value || (i + 1 < args.length && !args[i + 1].startsWith('--') ? args[++i] : defaultValue);
112
+ switch (what) {
113
+ case '--recreate':
114
+ runOptions.recreate = getValue('true') !== 'false';
115
+ break;
116
+ case '--tts':
117
+ runOptions.tts = getValue('true') !== 'false';
118
+ break;
119
+ case '--no-capture':
120
+ runOptions.capture = false;
121
+ break;
122
+ case '--pass-env': {
123
+ const passEnvValue = getValue();
124
+ if (passEnvValue) {
125
+ runOptions.passEnv = passEnvValue;
126
+ }
127
+ else {
128
+ console.error('Missing value for --pass-env');
129
+ printHelp();
130
+ }
131
+ break;
132
+ }
133
+ case '--res': {
134
+ const resValue = getValue();
135
+ if (resValue && resValue.match(/^\d+x\d+$/)) {
136
+ runOptions.res = resValue;
137
+ }
138
+ else {
139
+ console.error(`Missing or incorrect WxH value for --res: ${resValue}`);
140
+ printHelp();
141
+ }
142
+ break;
143
+ }
144
+ case '--help':
145
+ printHelp(0);
146
+ break;
147
+ default:
148
+ console.error(`unknown -- arg ${arg}`);
149
+ printHelp();
150
+ }
151
+ }
152
+ else {
153
+ parsedArgs.push(arg);
154
+ }
155
+ }
156
+ const [testToRun, filter, ...includeDirs] = parsedArgs;
157
+ if (!testToRun || includeDirs.length === 0) {
158
+ printHelp();
159
+ }
160
+ return { runOptions, testToRun, filter, includeDirs };
161
+ }
162
+ //# sourceMappingURL=vcapture-lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcapture-lib.js","sourceRoot":"","sources":["../../src/vcapture/vcapture-lib.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@haibun/utils",
3
3
  "type": "module",
4
- "version": "1.55.2",
4
+ "version": "1.55.4",
5
5
  "description": "",
6
6
  "main": "index.js",
7
7
  "files": ["ref.package.json", "build/**", "scaffold/**", "vcapture/**"],