@haibun/cli 1.26.1 → 1.26.2

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,147 @@
1
+ import { IHasOptions, TOptions } from "@haibun/core/build/lib/defs.js";
2
+ export declare class BaseOptions implements IHasOptions {
3
+ static options: {
4
+ SPLIT_SHARED: {
5
+ desc: string;
6
+ parse: (input: string) => {
7
+ error: string;
8
+ result?: undefined;
9
+ } | {
10
+ result: {
11
+ [x: string]: string;
12
+ }[];
13
+ error?: undefined;
14
+ };
15
+ };
16
+ TRACE: {
17
+ desc: string;
18
+ parse: (input: string) => {
19
+ error: string;
20
+ result?: undefined;
21
+ } | {
22
+ result: boolean;
23
+ error?: undefined;
24
+ };
25
+ };
26
+ TITLE: {
27
+ desc: string;
28
+ parse: (result: string) => {
29
+ result: string;
30
+ };
31
+ };
32
+ CLI: {
33
+ desc: string;
34
+ parse: (input: string) => {
35
+ error: string;
36
+ result?: undefined;
37
+ } | {
38
+ result: boolean;
39
+ error?: undefined;
40
+ };
41
+ };
42
+ SETTING: {
43
+ desc: string;
44
+ parse: (result: string) => {
45
+ result: string;
46
+ };
47
+ };
48
+ DEST: {
49
+ desc: string;
50
+ parse: (result: string) => {
51
+ result: string;
52
+ };
53
+ };
54
+ STAY: {
55
+ desc: string;
56
+ parse: (result: string) => {
57
+ result: string;
58
+ };
59
+ };
60
+ LOG_FOLLOW: {
61
+ desc: string;
62
+ parse: (result: string) => {
63
+ result: string;
64
+ };
65
+ };
66
+ LOG_LEVEL: {
67
+ desc: string;
68
+ parse: (result: string) => {
69
+ result: string;
70
+ error?: undefined;
71
+ } | {
72
+ error: string;
73
+ result?: undefined;
74
+ };
75
+ };
76
+ ENV: {
77
+ desc: string;
78
+ parse: (input: string, cur: TOptions) => {
79
+ error: string;
80
+ env?: undefined;
81
+ } | {
82
+ env: {
83
+ [name: string]: string;
84
+ };
85
+ error?: undefined;
86
+ };
87
+ };
88
+ ENVC: {
89
+ desc: string;
90
+ parse: (input: string, cur: TOptions) => {
91
+ error: string;
92
+ env?: undefined;
93
+ } | {
94
+ env: TOptions;
95
+ error?: undefined;
96
+ };
97
+ };
98
+ STEP_DELAY: {
99
+ desc: string;
100
+ parse: (input: string) => {
101
+ error: string;
102
+ result?: undefined;
103
+ } | {
104
+ result: number;
105
+ error?: undefined;
106
+ };
107
+ };
108
+ LOOPS: {
109
+ desc: string;
110
+ parse: (input: string) => {
111
+ error: string;
112
+ result?: undefined;
113
+ } | {
114
+ result: number;
115
+ error?: undefined;
116
+ };
117
+ };
118
+ MEMBERS: {
119
+ desc: string;
120
+ parse: (input: string) => {
121
+ error: string;
122
+ result?: undefined;
123
+ } | {
124
+ result: number;
125
+ error?: undefined;
126
+ };
127
+ };
128
+ OUTPUT: {
129
+ desc: string;
130
+ parse: (result: string) => {
131
+ result: string;
132
+ };
133
+ };
134
+ OUTPUT_DEST: {
135
+ desc: string;
136
+ parse: (result: string) => {
137
+ result: string;
138
+ };
139
+ };
140
+ PWDEBUG: {
141
+ desc: string;
142
+ parse: (input: string) => {
143
+ result: string;
144
+ };
145
+ };
146
+ };
147
+ }
@@ -0,0 +1,127 @@
1
+ import { DEFAULT_DEST } from "@haibun/core/build/lib/defs.js";
2
+ import { LOGGER_LEVELS } from "@haibun/core/build/lib/Logger.js";
3
+ import { boolOrError, intOrError } from "@haibun/core/build/lib/util/index.js";
4
+ export class BaseOptions {
5
+ static options = {
6
+ SPLIT_SHARED: {
7
+ desc: 'create instances based on variable options, for example, var=option1,option2',
8
+ parse: (input) => {
9
+ const [what, s] = input.split('=');
10
+ if (!what || !s) {
11
+ return { error: `var=option1,option2` };
12
+ }
13
+ else {
14
+ return { result: s.split(',').map((w) => ({ [what]: w })) };
15
+ }
16
+ }
17
+ },
18
+ TRACE: {
19
+ desc: 'save tracks data',
20
+ parse: (input) => boolOrError(input)
21
+ },
22
+ TITLE: {
23
+ desc: 'title for reports',
24
+ parse: (result) => ({ result })
25
+ },
26
+ CLI: {
27
+ desc: 'create a command interface for each member',
28
+ parse: (input) => boolOrError(input)
29
+ },
30
+ SETTING: {
31
+ desc: 'execution setting (eg dev, prod)',
32
+ parse: (result) => ({ result })
33
+ },
34
+ DEST: {
35
+ desc: 'destination for captures',
36
+ parse: (result) => ({ result })
37
+ },
38
+ STAY: {
39
+ desc: 'stay running after execution: always',
40
+ parse: (result) => ({ result })
41
+ },
42
+ LOG_FOLLOW: {
43
+ desc: 'filter for output',
44
+ parse: (result) => ({ result })
45
+ },
46
+ LOG_LEVEL: {
47
+ desc: Object.keys(LOGGER_LEVELS).join(', '),
48
+ parse: (result) => Object.keys(LOGGER_LEVELS).includes(result) ? { result } : { error: `${result} not in ${Object.keys(LOGGER_LEVELS).join(', ')}` }
49
+ },
50
+ ENV: {
51
+ desc: 'pass an environment variable: var=value[,var2=value]',
52
+ parse: (input, cur) => {
53
+ const pairs = input?.split(',');
54
+ const env = {};
55
+ for (const pair of pairs) {
56
+ const [k, v] = pair.split('=').map(i => i.trim());
57
+ if (cur[k] || env[k]) {
58
+ return { error: `ENV ${k} already defined` };
59
+ }
60
+ env[k] = v;
61
+ }
62
+ return { env };
63
+ },
64
+ },
65
+ ENVC: {
66
+ desc: 'pass multiple environment variables: var1=a,var2=b',
67
+ parse: (input, cur) => {
68
+ const pairs = new Set(input?.split(',').map(a => a.split('=')[0]));
69
+ const env = { DEST: DEFAULT_DEST };
70
+ for (const pair of pairs) {
71
+ const [k] = Array.from(new Set(pair.split('=')));
72
+ if (cur[k]) {
73
+ return { error: `ENVC ${k} already exists` };
74
+ }
75
+ env[k] = [];
76
+ }
77
+ for (const pair of (input || '').split(',')) {
78
+ const [k, v] = pair.split('=');
79
+ env[k].push(v);
80
+ }
81
+ return { env };
82
+ }
83
+ },
84
+ STEP_DELAY: {
85
+ desc: 'delay between steps',
86
+ parse: (input) => intOrError(input)
87
+ },
88
+ LOOPS: {
89
+ desc: 'how many loops',
90
+ parse: (input) => intOrError(input)
91
+ },
92
+ // LOOP_START: {
93
+ // desc: 'wip',
94
+ // parse: (input: string) => intOrError(input)
95
+ // },
96
+ // LOOP_INC: {
97
+ // desc: 'wip',
98
+ // parse: (input: string) => intOrError(input)
99
+ // },
100
+ MEMBERS: {
101
+ desc: 'number of members in each loop',
102
+ parse: (input) => intOrError(input)
103
+ },
104
+ // CONTINUE_ON_ERROR_IF_SCORED: {
105
+ // desc: 'wip',
106
+ // parse: (result: string) => ({ result })
107
+ // },
108
+ OUTPUT: {
109
+ desc: 'Output format (AsXUnit)',
110
+ parse: (result) => ({ result })
111
+ },
112
+ OUTPUT_DEST: {
113
+ desc: 'Output destination (results.xml)',
114
+ parse: (result) => ({ result })
115
+ },
116
+ PWDEBUG: {
117
+ desc: '(web) Enable Playwright debugging (0 or 1)',
118
+ parse: (input) => {
119
+ if (['true', '1'].includes(input)) {
120
+ process.env['PWDEBUG'] = 'true';
121
+ }
122
+ return { result: input };
123
+ }
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=BaseOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseOptions.js","sourceRoot":"","sources":["../src/BaseOptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import { DEFAULT_DEST } from '@haibun/core/build/lib/defs.js';
2
+ import { BaseOptions } from './BaseOptions.js';
3
+ describe('applyEnvCollections', () => {
4
+ it.skip('creates pairs', () => {
5
+ const p = { DEST: DEFAULT_DEST };
6
+ const res = BaseOptions.options.ENVC.parse('a=1,b=2,a=3,b=4', p);
7
+ expect(res.env).toEqual({
8
+ a: ["1", "3"],
9
+ b: ["2", "4"]
10
+ });
11
+ });
12
+ it('prevents collision', () => {
13
+ const p = { DEST: DEFAULT_DEST, a: 1 };
14
+ const res = BaseOptions.options.ENVC.parse('a=1', p);
15
+ expect(res.error).toBeDefined();
16
+ });
17
+ });
18
+ describe('apply ENV', () => {
19
+ it('creates env', () => {
20
+ const p = { DEST: DEFAULT_DEST };
21
+ const res = BaseOptions.options.ENV.parse('a=1', p);
22
+ expect(res.error).not.toBeDefined();
23
+ expect(res.env).toEqual({ a: "1" });
24
+ });
25
+ it('prevents collision', () => {
26
+ const p = { DEST: DEFAULT_DEST, a: 1 };
27
+ const res = BaseOptions.options.ENV.parse('a=1', p);
28
+ expect(res.error).toBeDefined();
29
+ });
30
+ });
31
+ //# sourceMappingURL=BaseOptions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseOptions.test.js","sourceRoot":"","sources":["../src/BaseOptions.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACtB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACb,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAC"}
package/build/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/build/cli.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import sourceMapSupport from 'source-map-support';
3
+ import repl from 'repl';
4
+ import { findStepper, getConfigFromBase, getDefaultOptions, basesFrom } from '@haibun/core/build/lib/util/index.js';
5
+ import runWithOptions from '@haibun/core/build/lib/run-with-options.js';
6
+ import { processArgs, processBaseEnvToOptionsAndErrors, usageThenExit } from './lib.js';
7
+ import { Timer } from '@haibun/core/build/lib/Timer.js';
8
+ import { writeFileSync } from 'fs';
9
+ sourceMapSupport.install();
10
+ process.on('unhandledRejection', console.error);
11
+ go();
12
+ async function go() {
13
+ const { params, configLoc, showHelp } = processArgs(process.argv.slice(2));
14
+ const featureFilter = params[1] ? params[1].split(',') : undefined;
15
+ const bases = basesFrom(params[0]?.replace(/\/$/, ''));
16
+ const specl = getSpeclOrExit(configLoc ? [configLoc] : bases);
17
+ if (showHelp) {
18
+ await usageThenExit(specl);
19
+ }
20
+ const { protoOptions, errors } = processBaseEnvToOptionsAndErrors(process.env, specl.options);
21
+ if (errors.length > 0) {
22
+ await usageThenExit(specl, errors.join('\n'));
23
+ }
24
+ const splits = protoOptions.options.SPLITS || [{}];
25
+ console.info('\n_________________________________ start');
26
+ const loops = protoOptions.options.LOOPS || 1;
27
+ const members = protoOptions.options.MEMBERS || 1;
28
+ const { TRACE: trace, OUTPUT: output, OUTPUT_DEST: outputDest } = protoOptions.options;
29
+ const title = protoOptions.options.TITLE || bases + ' ' + [...featureFilter || []].join(',');
30
+ if (outputDest && !output) {
31
+ await usageThenExit(specl, 'OUTPUT_DEST requires OUTPUT');
32
+ }
33
+ const startRunCallback = (world) => {
34
+ if (protoOptions.options.CLI)
35
+ repl.start().context.runtime = world.runtime;
36
+ };
37
+ let endFeatureCallback = undefined;
38
+ if (trace) {
39
+ endFeatureCallback = async (params) => {
40
+ const { world, result, steppers, startOffset } = params;
41
+ const tracker = findStepper(steppers, 'OutReviews');
42
+ const loc = { ...world };
43
+ await tracker.writeTracksFile({ ...loc, mediaType: "json" /* EMediaTypes.json */ }, title, result, Timer.startTime, startOffset);
44
+ };
45
+ }
46
+ const runOptions = { featureFilter, loops, members, splits, trace, specl, bases, protoOptions, startRunCallback, endFeatureCallback };
47
+ const { ok, exceptionResults, ranResults, allFailures, logger, passed, failed, totalRan, runTime, output: runOutput } = await runWithOptions(runOptions);
48
+ // FIXME
49
+ if (runOutput) {
50
+ if (outputDest) {
51
+ runOutput.map((a, i) => {
52
+ if (a) {
53
+ writeFileSync(outputDest.toString().replace('/', `/${i}-`), a);
54
+ }
55
+ });
56
+ }
57
+ else {
58
+ logger.log(runOutput.join('\n'));
59
+ }
60
+ }
61
+ if (ok && exceptionResults.length < 1) {
62
+ logger.log('OK ' + ranResults.every((r) => r.output));
63
+ }
64
+ else {
65
+ logger.error('failures:' + JSON.stringify(allFailures, null, 2));
66
+ }
67
+ console.info('\nRESULT>>>', { ok, startDate: Timer.startTime, startTime: Timer.startTime, passed, failed, totalRan, runTime, 'features/s:': totalRan / runTime });
68
+ if (ok && exceptionResults.length < 1 && protoOptions.options.STAY !== 'always') {
69
+ process.exit(0);
70
+ }
71
+ else if (protoOptions.options.STAY !== 'always') {
72
+ process.exit(1);
73
+ }
74
+ }
75
+ function getSpeclOrExit(bases) {
76
+ const specl = getConfigFromBase(bases);
77
+ if (specl === null || bases?.length < 1) {
78
+ if (specl === null) {
79
+ console.error(`missing or unusable config.json from ${bases}`);
80
+ }
81
+ usageThenExit(specl ? specl : getDefaultOptions());
82
+ }
83
+ return specl;
84
+ }
85
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/build/lib.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { TOptions, TProtoOptions, TRunResult, TSpecl } from "@haibun/core/build/lib/defs.js";
2
+ type TEnv = {
3
+ [name: string]: string | undefined;
4
+ };
5
+ export declare function usageThenExit(specl: TSpecl, message?: string): Promise<void>;
6
+ export declare function usage(specl: TSpecl, message?: string): Promise<string>;
7
+ export declare function ranResultError(ranResults: TRunResult[], exceptionResults: any[]): any;
8
+ export declare function processBaseEnvToOptionsAndErrors(env: TEnv, options: TOptions): {
9
+ protoOptions: TProtoOptions;
10
+ errors: string[];
11
+ };
12
+ export declare function processArgs(args: string[]): {
13
+ params: any[];
14
+ configLoc: any;
15
+ showHelp: boolean;
16
+ };
17
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@haibun/cli",
3
3
  "type": "module",
4
- "version": "1.26.1",
4
+ "version": "1.26.2",
5
5
  "description": "command line execution for @haibun",
6
6
  "bin": {
7
7
  "haibun-cli": "build/cli.js"
@@ -26,4 +26,4 @@
26
26
  "source-map-support": "^0.5.21"
27
27
  },
28
28
  "gitHead": "7cf9680bd922fb622fb59f1e6bf5b65284cb8fd5"
29
- }
29
+ }