@haibun/core 1.41.2 → 1.41.3

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.
Files changed (72) hide show
  1. package/build/currentVersion.d.ts +1 -1
  2. package/build/currentVersion.js +1 -1
  3. package/build/lib/LogHistory.d.ts +1 -1
  4. package/build/lib/LogHistory.d.ts.map +1 -1
  5. package/build/lib/LogHistory.js +1 -1
  6. package/build/lib/LogHistory.js.map +1 -1
  7. package/build/lib/Logger.d.ts +7 -7
  8. package/build/lib/Logger.d.ts.map +1 -1
  9. package/build/lib/Logger.js.map +1 -1
  10. package/build/lib/contexts.d.ts +1 -1
  11. package/build/lib/contexts.d.ts.map +1 -1
  12. package/build/lib/contexts.js +1 -1
  13. package/build/lib/contexts.js.map +1 -1
  14. package/build/lib/defs.d.ts +20 -50
  15. package/build/lib/defs.d.ts.map +1 -1
  16. package/build/lib/defs.js +19 -0
  17. package/build/lib/defs.js.map +1 -1
  18. package/build/lib/interfaces/logger.d.ts +11 -11
  19. package/build/lib/interfaces/logger.d.ts.map +1 -1
  20. package/build/lib/interfaces/logger.js.map +1 -1
  21. package/build/lib/namedVars.d.ts +4 -4
  22. package/build/lib/namedVars.d.ts.map +1 -1
  23. package/build/lib/namedVars.js +2 -2
  24. package/build/lib/namedVars.js.map +1 -1
  25. package/build/lib/test/TestSteps.d.ts +2 -12
  26. package/build/lib/test/TestSteps.d.ts.map +1 -1
  27. package/build/lib/test/TestSteps.js +0 -12
  28. package/build/lib/test/TestSteps.js.map +1 -1
  29. package/build/lib/test/TestStepsWithOptions.d.ts +2 -2
  30. package/build/lib/test/lib.d.ts +4 -6
  31. package/build/lib/test/lib.d.ts.map +1 -1
  32. package/build/lib/test/lib.js +14 -16
  33. package/build/lib/test/lib.js.map +1 -1
  34. package/build/lib/util/index.d.ts.map +1 -1
  35. package/build/lib/util/index.js +2 -3
  36. package/build/lib/util/index.js.map +1 -1
  37. package/build/lib/util/workspace-lib.d.ts +1 -2
  38. package/build/lib/util/workspace-lib.d.ts.map +1 -1
  39. package/build/lib/util/workspace-lib.js +0 -22
  40. package/build/lib/util/workspace-lib.js.map +1 -1
  41. package/build/phases/Executor.d.ts +8 -8
  42. package/build/phases/Executor.d.ts.map +1 -1
  43. package/build/phases/Executor.js +49 -50
  44. package/build/phases/Executor.js.map +1 -1
  45. package/build/phases/Resolver.d.ts +7 -8
  46. package/build/phases/Resolver.d.ts.map +1 -1
  47. package/build/phases/Resolver.js +17 -31
  48. package/build/phases/Resolver.js.map +1 -1
  49. package/build/runner.d.ts +8 -3
  50. package/build/runner.d.ts.map +1 -1
  51. package/build/runner.js +28 -10
  52. package/build/runner.js.map +1 -1
  53. package/build/steps/conformance.d.ts +1 -1
  54. package/build/steps/credentials.d.ts +1 -1
  55. package/build/steps/haibun.d.ts +8 -4
  56. package/build/steps/haibun.d.ts.map +1 -1
  57. package/build/steps/haibun.js +32 -7
  58. package/build/steps/haibun.js.map +1 -1
  59. package/build/steps/parse.d.ts +2 -2
  60. package/build/steps/vars.d.ts +15 -15
  61. package/build/steps/vars.d.ts.map +1 -1
  62. package/build/steps/vars.js +16 -16
  63. package/build/steps/vars.js.map +1 -1
  64. package/package.json +1 -1
  65. package/build/lib/run-with-options.o.d.ts +0 -2
  66. package/build/lib/run-with-options.o.d.ts.map +0 -1
  67. package/build/lib/run-with-options.o.js +0 -113
  68. package/build/lib/run-with-options.o.js.map +0 -1
  69. package/build/lib/run.o.d.ts +0 -19
  70. package/build/lib/run.o.d.ts.map +0 -1
  71. package/build/lib/run.o.js +0 -62
  72. package/build/lib/run.o.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-with-options.o.d.ts","sourceRoot":"","sources":["../../src/lib/run-with-options.o.ts"],"names":[],"mappings":""}
@@ -1,113 +0,0 @@
1
- export {};
2
- /*
3
- import { TStartRunCallback, TProtoOptions, TSpecl, TWorld, TTag, TRunOptions, TRunResult, TTagValue, TEndFeatureCallback, TBase } from './defs.js';
4
- import { WorldContext } from './contexts.js';
5
- import Logger from './Logger.js';
6
-
7
- import { run } from './run.o.js';
8
- import { getRunTag } from './util/index.js';
9
- import { getOutputResult } from './util/workspace-lib.js';
10
- import { ILogOutput } from './interfaces/logger.js';
11
- import { Timer } from './Timer.js';
12
-
13
- export default async function runWithOptions(runOptions: TRunOptions) {
14
- const { loops, members, trace, startRunCallback, endFeatureCallback, featureFilter, specl, bases, splits, protoOptions } = runOptions;
15
- const { LOG_LEVEL: logLevel, LOG_FOLLOW: logFollow } = protoOptions.options;
16
-
17
- const logger = new Logger({ level: logLevel || 'debug', follow: logFollow });
18
-
19
- const timer = new Timer();
20
- let totalRan = 0;
21
- type TFailure = { sequence: TTagValue; runDuration: number; fromStart: number };
22
- const allFailures: { [message: string]: TFailure[] } = {};
23
- let allRunResults: PromiseSettledResult<TRunResult>[] = [];
24
-
25
- for (let loop = 1; loop < loops + 1; loop++) {
26
- loops > 1 && logger.log(`starting loop ${loop}/${loops}`);
27
- let groupRuns: Promise<TRunResult>[] = [];
28
- for (let member = 1; member < members + 1; member++) {
29
- members > 1 && logger.log(`starting member ${member + 1}/${members}`);
30
- const instances = splits.map(async (split) => {
31
- splits.length > 1 && logger.log(`starting instance ${split}`);
32
- const runtime = {};
33
- const tag: TTag = getRunTag(totalRan, loop, member, 0, split, trace);
34
- totalRan++;
35
-
36
- const res = await doInstanceRun(bases, specl, runtime, featureFilter, new WorldContext(tag, split), protoOptions, logger, tag, timer, startRunCallback, endFeatureCallback);
37
- return res;
38
- });
39
- groupRuns = groupRuns.concat(instances);
40
- }
41
-
42
- const theseValues = await Promise.allSettled(groupRuns);
43
- allRunResults = allRunResults.concat(theseValues);
44
- }
45
-
46
- const ranResults = allRunResults
47
- .filter((i) => i.status === 'fulfilled')
48
- .map((i) => <PromiseFulfilledResult<TRunResult>>i)
49
- .map((i) => i.value);
50
-
51
- let passed = 0;
52
- let failed = 0;
53
-
54
- const output = [];
55
- for (const r of ranResults) {
56
- output.push(r.output);
57
- if (r.result.ok) {
58
- passed++;
59
- } else {
60
- try {
61
- const errorMessage = r.result?.failure?.error?.message || JSON.stringify(r.result.failure);
62
- allFailures[errorMessage] = (allFailures[errorMessage] || []).concat({
63
- sequence: r.tag.sequence,
64
- runDuration: r.runDuration,
65
- fromStart: r.fromStart,
66
- });
67
- failed++;
68
- } catch (e) {
69
- console.error('fail message', e, '\nfrom:', r.result.failure, 'bailing');
70
- throw (e);
71
- }
72
- }
73
- }
74
-
75
- const exceptionResults = allRunResults
76
- .filter((i) => i.status === 'rejected')
77
- .map((i) => <PromiseRejectedResult>i)
78
- .map((i) => i.reason);
79
-
80
- const ok = ranResults.every((a) => a.result.ok);
81
- const runTime = timer.since();
82
- return { ok, output, exceptionResults, ranResults, allFailures, logger, passed, failed, totalRan, runTime };
83
- }
84
-
85
- async function doInstanceRun(
86
- bases: TBase,
87
- specl: TSpecl,
88
- runtime: object,
89
- featureFilter: string[] | undefined,
90
- shared: WorldContext,
91
- protoOptions: TProtoOptions,
92
- containerLogger: ILogOutput,
93
- tag: TTag,
94
- timer: Timer,
95
- startRunCallback?: TStartRunCallback,
96
- endFeatureCallback?: TEndFeatureCallback
97
- ) {
98
- const runStart = process.hrtime();
99
- const logger = new Logger({ output: containerLogger, tag });
100
-
101
- const world: TWorld = { options: protoOptions.options, moduleOptions: protoOptions.moduleOptions, shared, logger, runtime, domains: [], tag, timer, bases };
102
- if (startRunCallback) {
103
- startRunCallback(world);
104
- }
105
-
106
- const runResult = await run({ specl, bases, world, featureFilter, endFeatureCallback });
107
- const output = await getOutputResult(world.options.OUTPUT, runResult);
108
-
109
- return { result: runResult, shared, output, tag, runStart: runStart[0], runDuration: process.hrtime(runStart)[0], fromStart: timer.since() };
110
- }
111
-
112
- */
113
- //# sourceMappingURL=run-with-options.o.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-with-options.o.js","sourceRoot":"","sources":["../../src/lib/run-with-options.o.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8GE"}
@@ -1,19 +0,0 @@
1
- import { TSpecl, TExecutorResult, TWorld, TFeature, TEndFeatureCallback, CStepper, TBase } from './defs.js';
2
- type TBaseOptions = {
3
- specl: TSpecl;
4
- world: TWorld;
5
- addSteppers?: CStepper[];
6
- endFeatureCallback?: TEndFeatureCallback;
7
- };
8
- type TRunOptions = TBaseOptions & {
9
- bases: TBase;
10
- featureFilter: string[];
11
- };
12
- type TRunWithFeaturesBackgrounds = TBaseOptions & {
13
- features: TFeature[];
14
- backgrounds: TFeature[];
15
- };
16
- export declare function run({ specl, bases, world, addSteppers, featureFilter, endFeatureCallback }: TRunOptions): Promise<TExecutorResult>;
17
- export declare function runWith({ specl, world, features, backgrounds, addSteppers, endFeatureCallback }: TRunWithFeaturesBackgrounds): Promise<TExecutorResult>;
18
- export {};
19
- //# sourceMappingURL=run.o.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.o.d.ts","sourceRoot":"","sources":["../../src/lib/run.o.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAoB,mBAAmB,EAAE,QAAQ,EAAoC,KAAK,EAAa,MAAM,WAAW,CAAC;AAQ3K,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;IAAC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;CAAE,CAAC;AAE1H,KAAK,WAAW,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;AAE7E,KAAK,2BAA2B,GAAG,YAAY,GAAG;IAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;CAAE,CAAC;AAErG,wBAAsB,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAc7I;AAED,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAgB,EAAE,kBAAkB,EAAE,EAAE,2BAA2B,GAAG,OAAO,CAAC,eAAe,CAAC,CA+ClK"}
@@ -1,62 +0,0 @@
1
- import { expand } from './features.js';
2
- import { Executor } from '../phases/Executor.js';
3
- import { Resolver } from '../phases/Resolver.js';
4
- import { verifyExtraOptions, getRunTag, verifyRequiredOptions, createSteppers, setStepperWorlds } from './util/index.js';
5
- import { getSteppers } from './util/workspace-lib.js';
6
- import { getFeaturesAndBackgrounds } from '../phases/collector.js';
7
- export async function run({ specl, bases, world, addSteppers = [], featureFilter, endFeatureCallback }) {
8
- if (!world.options || !world.moduleOptions) {
9
- throw Error(`missing options ${world.options} moduleOptions ${world.moduleOptions}`);
10
- }
11
- let featuresBackgrounds;
12
- try {
13
- featuresBackgrounds = getFeaturesAndBackgrounds(bases, featureFilter);
14
- }
15
- catch (error) {
16
- return ({ ok: false, tag: getRunTag(-1, -1, {}, false), failure: { stage: 'Collect', error: { message: error.message, details: { stack: error.stack } } }, shared: world.shared });
17
- }
18
- const { features, backgrounds } = featuresBackgrounds;
19
- const res = await runWith({ specl, world, features, backgrounds, addSteppers, endFeatureCallback });
20
- return res;
21
- }
22
- export async function runWith({ specl, world, features, backgrounds, addSteppers = [], endFeatureCallback }) {
23
- const { tag } = world;
24
- let result = undefined;
25
- const errorBail = (phase, error, details) => {
26
- world.logger.error(`errorBail ${phase} ${error} ${details}`, error.stack);
27
- result = { ok: false, shared: world.shared, tag, failure: { stage: phase, error: { message: error.message, details: { stack: error.stack, details } } } };
28
- throw Error(error);
29
- };
30
- try {
31
- const baseSteppers = await getSteppers(specl.steppers).catch((error) => errorBail('Steppers', error));
32
- const csteppers = [...baseSteppers, ...addSteppers];
33
- await verifyRequiredOptions(csteppers, world.moduleOptions).catch((error) => errorBail('RequiredOptions', error));
34
- await verifyExtraOptions(world.moduleOptions, csteppers).catch((error) => errorBail('moduleOptions', error));
35
- const expandedFeatures = await expand(backgrounds, features).catch((error) => errorBail('Expand', error));
36
- const steppers = await createSteppers(csteppers);
37
- await setStepperWorlds(steppers, world).catch((error) => errorBail('StepperOptions', error));
38
- const resolver = new Resolver(steppers, world);
39
- const mappedValidatedSteps = await resolver.resolveStepsFromFeatures(expandedFeatures).catch((error) => errorBail('Resolve', error));
40
- // await builder.build(mappedValidatedSteps).catch((error) => errorBail('Build', error, { stack: error.stack, mappedValidatedSteps }));
41
- world.logger.log(`features: ${expandedFeatures.length} backgrounds: ${backgrounds.length} steps: (${expandedFeatures.map((e) => e.path)}), ${mappedValidatedSteps.length}`);
42
- result = await Executor.execute(csteppers, world, mappedValidatedSteps, endFeatureCallback)
43
- .catch((error) => errorBail('Execute', error));
44
- if (!result || !result.ok) {
45
- let message;
46
- try {
47
- message = result.featureResults[0].stepResults.find((s) => !s.ok)?.actionResults[0]?.message || result.featureResults;
48
- }
49
- catch (e) {
50
- message = e;
51
- }
52
- result.failure = { stage: 'Execute', error: { message, details: { stack: [], errors: result.featureResults?.filter((r) => !r.ok).map((r) => r.path) } } };
53
- }
54
- }
55
- catch (error) {
56
- if (!result) {
57
- errorBail('catch', error);
58
- }
59
- }
60
- return result;
61
- }
62
- //# sourceMappingURL=run.o.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.o.js","sourceRoot":"","sources":["../../src/lib/run.o.ts"],"names":[],"mappings":"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"}