@git.zone/tstest 3.1.3 → 3.1.5

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 (43) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/tstest.classes.tap.parser.d.ts +9 -0
  3. package/dist_ts/tstest.classes.tap.parser.js +89 -32
  4. package/dist_ts/tstest.classes.tap.testresult.d.ts +6 -1
  5. package/dist_ts/tstest.classes.tap.testresult.js +10 -2
  6. package/dist_ts/tstest.logging.d.ts +2 -0
  7. package/dist_ts/tstest.logging.js +37 -2
  8. package/dist_ts_tapbundle/webhelpers.js +12 -2
  9. package/npmextra.json +11 -5
  10. package/package.json +12 -11
  11. package/readme.hints.md +46 -1
  12. package/ts/00_commitinfo_data.ts +1 -1
  13. package/ts/tstest.classes.tap.parser.ts +96 -33
  14. package/ts/tstest.classes.tap.testresult.ts +10 -1
  15. package/ts/tstest.logging.ts +39 -3
  16. package/dist_ts/tstest.classes.tap.parser.old.d.ts +0 -50
  17. package/dist_ts/tstest.classes.tap.parser.old.js +0 -332
  18. package/dist_ts_tapbundle/tapbundle.protocols.d.ts +0 -88
  19. package/dist_ts_tapbundle/tapbundle.protocols.js +0 -168
  20. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.d.ts +0 -8
  21. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.js +0 -9
  22. package/dist_ts_tapbundle/ts_tapbundle/index.d.ts +0 -6
  23. package/dist_ts_tapbundle/ts_tapbundle/index.js +0 -7
  24. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.d.ts +0 -10
  25. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.js +0 -13
  26. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.d.ts +0 -104
  27. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.js +0 -401
  28. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.d.ts +0 -38
  29. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.js +0 -110
  30. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.d.ts +0 -109
  31. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.js +0 -241
  32. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.d.ts +0 -8
  33. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.js +0 -7
  34. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.d.ts +0 -8
  35. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.js +0 -10
  36. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.d.ts +0 -3
  37. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.js +0 -5
  38. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.d.ts +0 -7
  39. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.js +0 -35
  40. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.d.ts +0 -5
  41. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.js +0 -13
  42. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.d.ts +0 -11
  43. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.js +0 -14
@@ -1,110 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- import { tapCreator } from './tapbundle.tapcreator.js';
3
- import { TapTools, SkipError } from './tapbundle.classes.taptools.js';
4
- // imported interfaces
5
- import { Deferred } from '@push.rocks/smartpromise';
6
- import { HrtMeasurement } from '@push.rocks/smarttime';
7
- export class TapTest {
8
- /**
9
- * constructor
10
- */
11
- constructor(optionsArg) {
12
- this.isTodo = false;
13
- this.tags = [];
14
- this.priority = 'medium';
15
- this.testDeferred = plugins.smartpromise.defer();
16
- this.testPromise = this.testDeferred.promise;
17
- this.testResultDeferred = plugins.smartpromise.defer();
18
- this.testResultPromise = this.testResultDeferred.promise;
19
- this.description = optionsArg.description;
20
- this.hrtMeasurement = new HrtMeasurement();
21
- this.parallel = optionsArg.parallel;
22
- this.status = 'pending';
23
- this.tapTools = new TapTools(this);
24
- this.testFunction = optionsArg.testFunction;
25
- }
26
- /**
27
- * run the test
28
- */
29
- async run(testKeyArg) {
30
- this.testKey = testKeyArg;
31
- const testNumber = testKeyArg + 1;
32
- // Handle todo tests
33
- if (this.isTodo) {
34
- const todoText = this.todoReason ? `# TODO ${this.todoReason}` : '# TODO';
35
- console.log(`ok ${testNumber} - ${this.description} ${todoText}`);
36
- this.status = 'success';
37
- this.testDeferred.resolve(this);
38
- return;
39
- }
40
- // Run test with retries
41
- let lastError;
42
- const maxRetries = this.tapTools.maxRetries;
43
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
44
- this.hrtMeasurement.start();
45
- try {
46
- // Set up timeout if specified
47
- let timeoutHandle;
48
- let timeoutPromise = null;
49
- if (this.timeoutMs) {
50
- timeoutPromise = new Promise((_, reject) => {
51
- timeoutHandle = setTimeout(() => {
52
- this.status = 'timeout';
53
- reject(new Error(`Test timed out after ${this.timeoutMs}ms`));
54
- }, this.timeoutMs);
55
- });
56
- }
57
- // Run the test function with potential timeout
58
- const testPromise = this.testFunction(this.tapTools);
59
- const testReturnValue = timeoutPromise
60
- ? await Promise.race([testPromise, timeoutPromise])
61
- : await testPromise;
62
- // Clear timeout if test completed
63
- if (timeoutHandle) {
64
- clearTimeout(timeoutHandle);
65
- }
66
- this.hrtMeasurement.stop();
67
- console.log(`ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
68
- this.status = 'success';
69
- this.testDeferred.resolve(this);
70
- this.testResultDeferred.resolve(testReturnValue);
71
- return; // Success, exit retry loop
72
- }
73
- catch (err) {
74
- this.hrtMeasurement.stop();
75
- // Handle skip
76
- if (err instanceof SkipError || err.name === 'SkipError') {
77
- console.log(`ok ${testNumber} - ${this.description} # SKIP ${err.message.replace('Skipped: ', '')}`);
78
- this.status = 'skipped';
79
- this.testDeferred.resolve(this);
80
- return;
81
- }
82
- lastError = err;
83
- // If we have retries left, try again
84
- if (attempt < maxRetries) {
85
- console.log(`# Retry ${attempt + 1}/${maxRetries} for test: ${this.description}`);
86
- this.tapTools._incrementRetryCount();
87
- continue;
88
- }
89
- // Final failure
90
- console.log(`not ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
91
- this.testDeferred.resolve(this);
92
- this.testResultDeferred.resolve(err);
93
- // if the test has already succeeded before
94
- if (this.status === 'success') {
95
- this.status = 'errorAfterSuccess';
96
- console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull');
97
- }
98
- else {
99
- this.status = 'error';
100
- }
101
- // if the test is allowed to fail
102
- if (this.failureAllowed) {
103
- console.log(`please note: failure allowed!`);
104
- }
105
- console.log(err);
106
- }
107
- }
108
- }
109
- }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUuY2xhc3Nlcy50YXB0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTdkQsTUFBTSxPQUFPLE9BQU87SUFtQmxCOztPQUVHO0lBQ0gsWUFBWSxVQUlYO1FBaEJNLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUNwQixhQUFRLEdBQThCLFFBQVEsQ0FBQztRQUU5QyxpQkFBWSxHQUF5QixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25FLGdCQUFXLEdBQXdCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzVELHVCQUFrQixHQUFnQixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hFLHNCQUFpQixHQUFlLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFTckUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFB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
@@ -1,109 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- import { TapTest } from './tapbundle.classes.taptest.js';
3
- export interface IPromiseFunc {
4
- (): Promise<any>;
5
- }
6
- export declare class SkipError extends Error {
7
- constructor(message: string);
8
- }
9
- export declare class TapTools {
10
- /**
11
- * the referenced TapTest
12
- */
13
- private _tapTest;
14
- private _retries;
15
- private _retryCount;
16
- testData: any;
17
- private static _sharedContext;
18
- private _snapshotPath;
19
- private static _pathHelpers;
20
- static setPathHelpers(helpers: typeof TapTools._pathHelpers): void;
21
- constructor(TapTestArg: TapTest<any>);
22
- /**
23
- * allow failure
24
- */
25
- allowFailure(): void;
26
- /**
27
- * skip the rest of the test
28
- */
29
- skip(reason?: string): never;
30
- /**
31
- * conditionally skip the rest of the test
32
- */
33
- skipIf(condition: boolean, reason?: string): void;
34
- /**
35
- * mark test as todo
36
- */
37
- todo(reason?: string): void;
38
- /**
39
- * set the number of retries for this test
40
- */
41
- retry(count: number): void;
42
- /**
43
- * get the current retry count
44
- */
45
- get retryCount(): number;
46
- /**
47
- * internal: increment retry count
48
- */
49
- _incrementRetryCount(): void;
50
- /**
51
- * get the maximum retries
52
- */
53
- get maxRetries(): number;
54
- /**
55
- * async/await delay method
56
- */
57
- delayFor(timeMilliArg: number): Promise<void>;
58
- delayForRandom(timeMilliMinArg: number, timeMilliMaxArg: number): Promise<void>;
59
- coloredString(...args: Parameters<typeof plugins.consolecolor.coloredString>): Promise<string>;
60
- /**
61
- * set a timeout for the test
62
- */
63
- timeout(timeMilliArg: number): void;
64
- /**
65
- * wait for a timeout (used internally)
66
- */
67
- waitForTimeout(timeMilliArg: number): Promise<void>;
68
- returnError(throwingFuncArg: IPromiseFunc): Promise<Error>;
69
- defer(): plugins.smartpromise.Deferred<unknown>;
70
- cumulativeDefer(): plugins.smartpromise.CumulativeDeferred;
71
- smartjson: typeof plugins.smartjson;
72
- /**
73
- * shared context for data sharing between tests
74
- */
75
- context: {
76
- get: (key: string) => any;
77
- set: (key: string, value: any) => void;
78
- delete: (key: string) => boolean;
79
- clear: () => void;
80
- };
81
- /**
82
- * Snapshot testing - compares output with saved snapshot
83
- */
84
- matchSnapshot(value: any, snapshotName?: string): Promise<void>;
85
- /**
86
- * Test fixtures - create test data instances
87
- */
88
- private static _fixtureData;
89
- private static _fixtureFactories;
90
- /**
91
- * Define a fixture factory
92
- */
93
- static defineFixture<T>(name: string, factory: (data?: Partial<T>) => T | Promise<T>): void;
94
- /**
95
- * Create a fixture instance
96
- */
97
- fixture<T>(name: string, data?: Partial<T>): Promise<T>;
98
- /**
99
- * Factory pattern for creating multiple fixtures
100
- */
101
- factory<T>(name: string): {
102
- create: (data?: Partial<T>) => Promise<T>;
103
- createMany: (count: number, dataOverrides?: Partial<T>[] | ((index: number) => Partial<T>)) => Promise<T[]>;
104
- };
105
- /**
106
- * Clear all fixtures (typically called in afterEach)
107
- */
108
- static cleanupFixtures(): Promise<void>;
109
- }
@@ -1,241 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- import { TapTest } from './tapbundle.classes.taptest.js';
3
- export class SkipError extends Error {
4
- constructor(message) {
5
- super(message);
6
- this.name = 'SkipError';
7
- }
8
- }
9
- export class TapTools {
10
- static { this._sharedContext = new Map(); }
11
- static { this._pathHelpers = null; }
12
- static setPathHelpers(helpers) {
13
- TapTools._pathHelpers = helpers;
14
- }
15
- constructor(TapTestArg) {
16
- this._retries = 0;
17
- this._retryCount = 0;
18
- this.testData = {};
19
- this._snapshotPath = '';
20
- this.smartjson = plugins.smartjson;
21
- /**
22
- * shared context for data sharing between tests
23
- */
24
- this.context = {
25
- get: (key) => {
26
- return TapTools._sharedContext.get(key);
27
- },
28
- set: (key, value) => {
29
- TapTools._sharedContext.set(key, value);
30
- },
31
- delete: (key) => {
32
- return TapTools._sharedContext.delete(key);
33
- },
34
- clear: () => {
35
- TapTools._sharedContext.clear();
36
- }
37
- };
38
- this._tapTest = TapTestArg;
39
- // Generate snapshot path based on test file and test name
40
- // Snapshot path will be set by Node.js environment if available
41
- if (TapTools._pathHelpers && typeof process !== 'undefined' && process.cwd) {
42
- const testFile = TapTestArg.fileName || 'unknown';
43
- const testName = TapTestArg.description.replace(/[^a-zA-Z0-9]/g, '_');
44
- this._snapshotPath = TapTools._pathHelpers.join(process.cwd(), '.nogit', 'test_snapshots', testFile, `${testName}.snap`);
45
- }
46
- }
47
- /**
48
- * allow failure
49
- */
50
- allowFailure() {
51
- this._tapTest.failureAllowed = true;
52
- }
53
- /**
54
- * skip the rest of the test
55
- */
56
- skip(reason) {
57
- const skipMessage = reason ? `Skipped: ${reason}` : 'Skipped';
58
- throw new SkipError(skipMessage);
59
- }
60
- /**
61
- * conditionally skip the rest of the test
62
- */
63
- skipIf(condition, reason) {
64
- if (condition) {
65
- this.skip(reason);
66
- }
67
- }
68
- /**
69
- * mark test as todo
70
- */
71
- todo(reason) {
72
- this._tapTest.isTodo = true;
73
- this._tapTest.todoReason = reason;
74
- }
75
- /**
76
- * set the number of retries for this test
77
- */
78
- retry(count) {
79
- this._retries = count;
80
- }
81
- /**
82
- * get the current retry count
83
- */
84
- get retryCount() {
85
- return this._retryCount;
86
- }
87
- /**
88
- * internal: increment retry count
89
- */
90
- _incrementRetryCount() {
91
- this._retryCount++;
92
- }
93
- /**
94
- * get the maximum retries
95
- */
96
- get maxRetries() {
97
- return this._retries;
98
- }
99
- /**
100
- * async/await delay method
101
- */
102
- async delayFor(timeMilliArg) {
103
- await plugins.smartdelay.delayFor(timeMilliArg);
104
- }
105
- async delayForRandom(timeMilliMinArg, timeMilliMaxArg) {
106
- await plugins.smartdelay.delayForRandom(timeMilliMinArg, timeMilliMaxArg);
107
- }
108
- async coloredString(...args) {
109
- return plugins.consolecolor.coloredString(...args);
110
- }
111
- /**
112
- * set a timeout for the test
113
- */
114
- timeout(timeMilliArg) {
115
- this._tapTest.timeoutMs = timeMilliArg;
116
- }
117
- /**
118
- * wait for a timeout (used internally)
119
- */
120
- async waitForTimeout(timeMilliArg) {
121
- const timeout = new plugins.smartdelay.Timeout(timeMilliArg);
122
- timeout.makeUnrefed();
123
- await timeout.promise;
124
- if (this._tapTest.status === 'pending') {
125
- this._tapTest.status = 'timeout';
126
- }
127
- }
128
- async returnError(throwingFuncArg) {
129
- let funcErr;
130
- try {
131
- await throwingFuncArg();
132
- }
133
- catch (err) {
134
- funcErr = err;
135
- }
136
- return funcErr;
137
- }
138
- defer() {
139
- return plugins.smartpromise.defer();
140
- }
141
- cumulativeDefer() {
142
- return plugins.smartpromise.cumulativeDefer();
143
- }
144
- /**
145
- * Snapshot testing - compares output with saved snapshot
146
- */
147
- async matchSnapshot(value, snapshotName) {
148
- if (!this._snapshotPath || !TapTools._pathHelpers) {
149
- console.log('Snapshot testing is only available in Node.js environment');
150
- return;
151
- }
152
- const snapshotPath = snapshotName
153
- ? this._snapshotPath.replace('.snap', `_${snapshotName}.snap`)
154
- : this._snapshotPath;
155
- const serializedValue = typeof value === 'string'
156
- ? value
157
- : JSON.stringify(value, null, 2);
158
- try {
159
- // Try to read existing snapshot
160
- const existingSnapshot = await plugins.smartfile.fs.toStringSync(snapshotPath);
161
- if (existingSnapshot !== serializedValue) {
162
- // Check if we should update snapshots
163
- if (process.env.UPDATE_SNAPSHOTS === 'true') {
164
- await plugins.smartfile.fs.ensureDir(TapTools._pathHelpers.dirname(snapshotPath));
165
- await plugins.smartfile.memory.toFs(serializedValue, snapshotPath);
166
- console.log(`Snapshot updated: ${snapshotPath}`);
167
- }
168
- else {
169
- throw new Error(`Snapshot mismatch for ${snapshotPath}\n\nExpected:\n${existingSnapshot}\n\nReceived:\n${serializedValue}`);
170
- }
171
- }
172
- }
173
- catch (error) {
174
- if (error.code === 'ENOENT') {
175
- // Snapshot doesn't exist yet, create it
176
- await plugins.smartfile.fs.ensureDir(TapTools._pathHelpers.dirname(snapshotPath));
177
- await plugins.smartfile.memory.toFs(serializedValue, snapshotPath);
178
- console.log(`Snapshot created: ${snapshotPath}`);
179
- }
180
- else {
181
- throw error;
182
- }
183
- }
184
- }
185
- /**
186
- * Test fixtures - create test data instances
187
- */
188
- static { this._fixtureData = new Map(); }
189
- static { this._fixtureFactories = new Map(); }
190
- /**
191
- * Define a fixture factory
192
- */
193
- static defineFixture(name, factory) {
194
- this._fixtureFactories.set(name, factory);
195
- }
196
- /**
197
- * Create a fixture instance
198
- */
199
- async fixture(name, data) {
200
- const factory = TapTools._fixtureFactories.get(name);
201
- if (!factory) {
202
- throw new Error(`Fixture '${name}' not found. Define it with TapTools.defineFixture()`);
203
- }
204
- const instance = await factory(data);
205
- // Store the fixture for cleanup
206
- if (!TapTools._fixtureData.has(name)) {
207
- TapTools._fixtureData.set(name, []);
208
- }
209
- TapTools._fixtureData.get(name).push(instance);
210
- return instance;
211
- }
212
- /**
213
- * Factory pattern for creating multiple fixtures
214
- */
215
- factory(name) {
216
- return {
217
- create: async (data) => {
218
- return this.fixture(name, data);
219
- },
220
- createMany: async (count, dataOverrides) => {
221
- const results = [];
222
- for (let i = 0; i < count; i++) {
223
- const data = Array.isArray(dataOverrides)
224
- ? dataOverrides[i]
225
- : typeof dataOverrides === 'function'
226
- ? dataOverrides(i)
227
- : dataOverrides;
228
- results.push(await this.fixture(name, data));
229
- }
230
- return results;
231
- }
232
- };
233
- }
234
- /**
235
- * Clear all fixtures (typically called in afterEach)
236
- */
237
- static async cleanupFixtures() {
238
- TapTools._fixtureData.clear();
239
- }
240
- }
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c190YXBidW5kbGUvdGFwYnVuZGxlLmNsYXNzZXMudGFwdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNekQsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBQ2xDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sUUFBUTthQVFKLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWUsQUFBekIsQ0FBMEI7YUFFeEMsaUJBQVksR0FHaEIsSUFBSSxBQUhZLENBR1g7SUFFaEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFxQztRQUN6RCxRQUFRLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxVQUF3QjtRQWQ1QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUVsQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQTJJNUIsY0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFFckM7O1dBRUc7UUFDSSxZQUFPLEdBQUc7WUFDZixHQUFHLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUMsR0FBVyxFQUFFLEtBQVUsRUFBRSxFQUFFO2dCQUMvQixRQUFRLENBQUMsY0FBYyxDQUFDLEdB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
@@ -1,8 +0,0 @@
1
- export interface ITapWrapOptions {
2
- before: () => Promise<any>;
3
- after: () => {};
4
- }
5
- export declare class TapWrap {
6
- options: ITapWrapOptions;
7
- constructor(optionsArg: ITapWrapOptions);
8
- }
@@ -1,7 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- export class TapWrap {
3
- constructor(optionsArg) {
4
- this.options = optionsArg;
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwd3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUuY2xhc3Nlcy50YXB3cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFPbEQsTUFBTSxPQUFPLE9BQU87SUFFbEIsWUFBWSxVQUEyQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixDQUFDO0NBQ0YifQ==
@@ -1,8 +0,0 @@
1
- import * as consolecolor from '@push.rocks/consolecolor';
2
- import * as smartdelay from '@push.rocks/smartdelay';
3
- import * as smartenv from '@push.rocks/smartenv';
4
- import * as smartexpect from '@push.rocks/smartexpect';
5
- import * as smartfile from '@push.rocks/smartfile';
6
- import * as smartjson from '@push.rocks/smartjson';
7
- import * as smartpromise from '@push.rocks/smartpromise';
8
- export { consolecolor, smartdelay, smartenv, smartexpect, smartfile, smartjson, smartpromise };
@@ -1,10 +0,0 @@
1
- // pushrocks
2
- import * as consolecolor from '@push.rocks/consolecolor';
3
- import * as smartdelay from '@push.rocks/smartdelay';
4
- import * as smartenv from '@push.rocks/smartenv';
5
- import * as smartexpect from '@push.rocks/smartexpect';
6
- import * as smartfile from '@push.rocks/smartfile';
7
- import * as smartjson from '@push.rocks/smartjson';
8
- import * as smartpromise from '@push.rocks/smartpromise';
9
- export { consolecolor, smartdelay, smartenv, smartexpect, smartfile, smartjson, smartpromise };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c190YXBidW5kbGUvdGFwYnVuZGxlLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDIn0=
@@ -1,3 +0,0 @@
1
- export declare class TapCreator {
2
- }
3
- export declare let tapCreator: TapCreator;
@@ -1,5 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- export class TapCreator {
3
- }
4
- export let tapCreator = new TapCreator();
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnRhcGNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c190YXBidW5kbGUvdGFwYnVuZGxlLnRhcGNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8sVUFBVTtDQUV0QjtBQUVELE1BQU0sQ0FBQyxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDIn0=
@@ -1,7 +0,0 @@
1
- declare class WebHelpers {
2
- html: any;
3
- fixture: any;
4
- constructor();
5
- }
6
- export declare const webhelpers: WebHelpers;
7
- export {};
@@ -1,35 +0,0 @@
1
- import * as plugins from './tapbundle.plugins.js';
2
- import { tap } from './tapbundle.classes.tap.js';
3
- class WebHelpers {
4
- constructor() {
5
- const smartenv = new plugins.smartenv.Smartenv();
6
- // Initialize HTML template tag function
7
- this.html = (strings, ...values) => {
8
- let result = '';
9
- for (let i = 0; i < strings.length; i++) {
10
- result += strings[i];
11
- if (i < values.length) {
12
- result += values[i];
13
- }
14
- }
15
- return result;
16
- };
17
- // Initialize fixture function based on environment
18
- if (smartenv.isBrowser) {
19
- this.fixture = async (htmlString) => {
20
- const container = document.createElement('div');
21
- container.innerHTML = htmlString.trim();
22
- const element = container.firstChild;
23
- return element;
24
- };
25
- }
26
- else {
27
- // Node.js environment - provide a stub or alternative implementation
28
- this.fixture = async (htmlString) => {
29
- throw new Error('WebHelpers.fixture is only available in browser environment');
30
- };
31
- }
32
- }
33
- }
34
- export const webhelpers = new WebHelpers();
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3RhcGJ1bmRsZS93ZWJoZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpELE1BQU0sVUFBVTtJQUlkO1FBQ0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBNkIsRUFBRSxHQUFHLE1BQWEsRUFBRSxFQUFFO1lBQzlELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsbURBQW1EO1FBQ25ELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLFVBQWtCLEVBQXdCLEVBQUU7Z0JBQ2hFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBeUIsQ0FBQztnQkFDcEQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixxRUFBcUU7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsVUFBa0IsRUFBZ0IsRUFBRTtnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyJ9
@@ -1,5 +0,0 @@
1
- /**
2
- * Initialize path helpers for the TapTools class
3
- * This provides Node.js-specific path operations to the browser-compatible tapbundle
4
- */
5
- export declare const initializePathHelpers: () => void;
@@ -1,13 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- import { TapTools } from '../ts_tapbundle/tapbundle.classes.taptools.js';
3
- /**
4
- * Initialize path helpers for the TapTools class
5
- * This provides Node.js-specific path operations to the browser-compatible tapbundle
6
- */
7
- export const initializePathHelpers = () => {
8
- TapTools.setPathHelpers({
9
- join: (...args) => plugins.path.join(...args),
10
- dirname: (path) => plugins.path.dirname(path)
11
- });
12
- };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wYXRoaW5qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfdGFwYnVuZGxlX25vZGUvY2xhc3Nlcy5wYXRoaW5qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7SUFDeEMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUN0QixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQWMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdkQsT0FBTyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7S0FDdEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIn0=
@@ -1,11 +0,0 @@
1
- import * as crypto from 'crypto';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- export { crypto, fs, path, };
5
- import * as qenv from '@push.rocks/qenv';
6
- import * as smartcrypto from '@push.rocks/smartcrypto';
7
- import * as smartfile from '@push.rocks/smartfile';
8
- import * as smartpath from '@push.rocks/smartpath';
9
- import * as smartrequest from '@push.rocks/smartrequest';
10
- import * as smartshell from '@push.rocks/smartshell';
11
- export { qenv, smartcrypto, smartfile, smartpath, smartrequest, smartshell, };
@@ -1,14 +0,0 @@
1
- // node native
2
- import * as crypto from 'crypto';
3
- import * as fs from 'fs';
4
- import * as path from 'path';
5
- export { crypto, fs, path, };
6
- // @push.rocks scope
7
- import * as qenv from '@push.rocks/qenv';
8
- import * as smartcrypto from '@push.rocks/smartcrypto';
9
- import * as smartfile from '@push.rocks/smartfile';
10
- import * as smartpath from '@push.rocks/smartpath';
11
- import * as smartrequest from '@push.rocks/smartrequest';
12
- import * as smartshell from '@push.rocks/smartshell';
13
- export { qenv, smartcrypto, smartfile, smartpath, smartrequest, smartshell, };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3RhcGJ1bmRsZV9ub2RlL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBRTVCLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQyJ9