@git.zone/tstest 2.8.3 → 3.0.1

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/tstest',
6
- version: '2.8.3',
6
+ version: '3.0.1',
7
7
  description: 'a test utility to run tests that match test/**/*.ts'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFEQUFxRDtDQUNuRSxDQUFBIn0=
@@ -0,0 +1,25 @@
1
+ import { TestFileProvider } from './classes.testfileprovider.js';
2
+ import * as plugins from './plugins.js';
3
+ declare class TapNodeTools {
4
+ private smartshellInstance;
5
+ testFileProvider: TestFileProvider;
6
+ constructor();
7
+ private qenv;
8
+ getQenv(): Promise<plugins.qenv.Qenv>;
9
+ getEnvVarOnDemand(envVarNameArg: string): Promise<string>;
10
+ runCommand(commandArg: string): Promise<any>;
11
+ createHttpsCert(commonName?: string, allowSelfSigned?: boolean): Promise<{
12
+ key: string;
13
+ cert: string;
14
+ }>;
15
+ /**
16
+ * create and return a smartmongo instance
17
+ */
18
+ createSmartmongo(): Promise<import("@push.rocks/smartmongo").SmartMongo>;
19
+ /**
20
+ * create and return a smarts3 instance
21
+ */
22
+ createSmarts3(): Promise<import("@push.rocks/smarts3").Smarts3>;
23
+ }
24
+ export declare const tapNodeTools: TapNodeTools;
25
+ export {};
@@ -0,0 +1,81 @@
1
+ import { TestFileProvider } from './classes.testfileprovider.js';
2
+ import * as plugins from './plugins.js';
3
+ class TapNodeTools {
4
+ constructor() {
5
+ this.testFileProvider = new TestFileProvider();
6
+ }
7
+ async getQenv() {
8
+ this.qenv = this.qenv || new plugins.qenv.Qenv('./', '.nogit/');
9
+ return this.qenv;
10
+ }
11
+ async getEnvVarOnDemand(envVarNameArg) {
12
+ const qenv = await this.getQenv();
13
+ return qenv.getEnvVarOnDemand(envVarNameArg);
14
+ }
15
+ async runCommand(commandArg) {
16
+ if (!this.smartshellInstance) {
17
+ this.smartshellInstance = new plugins.smartshell.Smartshell({
18
+ executor: 'bash',
19
+ });
20
+ }
21
+ const result = await this.smartshellInstance.exec(commandArg);
22
+ return result;
23
+ }
24
+ async createHttpsCert(commonName = 'localhost', allowSelfSigned = true) {
25
+ if (allowSelfSigned) {
26
+ // set node to allow self-signed certificates
27
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
28
+ }
29
+ // Generate a key pair
30
+ const keys = plugins.smartcrypto.nodeForge.pki.rsa.generateKeyPair(2048);
31
+ // Create a self-signed certificate
32
+ const cert = plugins.smartcrypto.nodeForge.pki.createCertificate();
33
+ cert.publicKey = keys.publicKey;
34
+ cert.serialNumber = '01';
35
+ cert.validity.notBefore = new Date();
36
+ cert.validity.notAfter = new Date();
37
+ cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);
38
+ const attrs = [
39
+ { name: 'commonName', value: commonName },
40
+ { name: 'countryName', value: 'US' },
41
+ { shortName: 'ST', value: 'California' },
42
+ { name: 'localityName', value: 'San Francisco' },
43
+ { name: 'organizationName', value: 'My Company' },
44
+ { shortName: 'OU', value: 'Dev' },
45
+ ];
46
+ cert.setSubject(attrs);
47
+ cert.setIssuer(attrs);
48
+ // Sign the certificate with its own private key (self-signed)
49
+ cert.sign(keys.privateKey, plugins.smartcrypto.nodeForge.md.sha256.create());
50
+ // PEM encode the private key and certificate
51
+ const pemKey = plugins.smartcrypto.nodeForge.pki.privateKeyToPem(keys.privateKey);
52
+ const pemCert = plugins.smartcrypto.nodeForge.pki.certificateToPem(cert);
53
+ return {
54
+ key: pemKey,
55
+ cert: pemCert,
56
+ };
57
+ }
58
+ /**
59
+ * create and return a smartmongo instance
60
+ */
61
+ async createSmartmongo() {
62
+ const smartmongoMod = await import('@push.rocks/smartmongo');
63
+ const smartmongoInstance = new smartmongoMod.SmartMongo();
64
+ await smartmongoInstance.start();
65
+ return smartmongoInstance;
66
+ }
67
+ /**
68
+ * create and return a smarts3 instance
69
+ */
70
+ async createSmarts3() {
71
+ const smarts3Mod = await import('@push.rocks/smarts3');
72
+ const smarts3Instance = new smarts3Mod.Smarts3({
73
+ port: 3003,
74
+ cleanSlate: true,
75
+ });
76
+ await smarts3Instance.start();
77
+ return smarts3Instance;
78
+ }
79
+ }
80
+ export const tapNodeTools = new TapNodeTools();
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXBub2RldG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfc2VydmVyc2lkZS9jbGFzc2VzLnRhcG5vZGV0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLFlBQVk7SUFJaEI7UUFGTyxxQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFFbEMsQ0FBQztJQUdULEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFxQjtRQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFrQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQzFELFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FB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
@@ -0,0 +1,6 @@
1
+ export declare const fileUrls: {
2
+ dockerAlpineImage: string;
3
+ };
4
+ export declare class TestFileProvider {
5
+ getDockerAlpineImageAsLocalTarball(): Promise<string>;
6
+ }
@@ -0,0 +1,19 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ export const fileUrls = {
4
+ dockerAlpineImage: 'https://code.foss.global/testassets/docker/raw/branch/main/alpine.tar',
5
+ };
6
+ export class TestFileProvider {
7
+ async getDockerAlpineImageAsLocalTarball() {
8
+ const filePath = plugins.path.join(paths.testFilesDir, 'alpine.tar');
9
+ // fetch the docker alpine image
10
+ const response = await plugins.smartrequest.SmartRequest.create()
11
+ .url(fileUrls.dockerAlpineImage)
12
+ .get();
13
+ await plugins.smartfile.fs.ensureDir(paths.testFilesDir);
14
+ const buffer = Buffer.from(await response.arrayBuffer());
15
+ await plugins.smartfile.memory.toFs(buffer, filePath);
16
+ return filePath;
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlX3NlcnZlcnNpZGUvY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixpQkFBaUIsRUFBRSx1RUFBdUU7Q0FDM0YsQ0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsS0FBSyxDQUFDLGtDQUFrQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3BFLGdDQUFnQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTthQUM5RCxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2FBQy9CLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIn0=
@@ -0,0 +1 @@
1
+ export * from './classes.tapnodetools.js';
@@ -0,0 +1,2 @@
1
+ export * from './classes.tapnodetools.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfc2VydmVyc2lkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ export declare const cwd: string;
2
+ export declare const testFilesDir: string;
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+ export const cwd = process.cwd();
3
+ export const testFilesDir = plugins.path.join(cwd, './.nogit/testfiles/');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfc2VydmVyc2lkZS9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,11 @@
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, };
@@ -0,0 +1,14 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZV9zZXJ2ZXJzaWRlL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBRTVCLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQyJ9
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@git.zone/tstest",
3
- "version": "2.8.3",
3
+ "version": "3.0.1",
4
4
  "private": false,
5
5
  "description": "a test utility to run tests that match test/**/*.ts",
6
6
  "exports": {
7
7
  ".": "./dist_ts/index.js",
8
8
  "./tapbundle": "./dist_ts_tapbundle/index.js",
9
- "./tapbundle_node": "./dist_ts_tapbundle_node/index.js",
9
+ "./tapbundle_serverside": "./dist_ts_tapbundle_serverside/index.js",
10
10
  "./tapbundle_protocol": "./dist_ts_tapbundle_protocol/index.js"
11
11
  },
12
12
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "@push.rocks/smartpath": "^6.0.0",
40
40
  "@push.rocks/smartpromise": "^4.2.3",
41
41
  "@push.rocks/smartrequest": "^5.0.1",
42
- "@push.rocks/smarts3": "^2.2.6",
42
+ "@push.rocks/smarts3": "^2.2.7",
43
43
  "@push.rocks/smartshell": "^3.3.0",
44
44
  "@push.rocks/smarttime": "^4.1.1",
45
45
  "@types/ws": "^8.18.1",
package/readme.hints.md CHANGED
@@ -6,7 +6,7 @@ This project integrates tstest with tapbundle through a modular architecture:
6
6
 
7
7
  1. **tstest** (`/ts/`) - The test runner that discovers and executes test files
8
8
  2. **tapbundle** (`/ts_tapbundle/`) - The TAP testing framework for writing tests
9
- 3. **tapbundle_node** (`/ts_tapbundle_node/`) - Node.js-specific testing utilities
9
+ 3. **tapbundle_serverside** (`/ts_tapbundle_serverside/`) - Server-side testing utilities (runCommand, env vars, HTTPS certs, MongoDB, S3, test assets)
10
10
 
11
11
  ## How Components Work Together
12
12
 
@@ -31,7 +31,7 @@ This project integrates tstest with tapbundle through a modular architecture:
31
31
 
32
32
  1. **Import Structure**
33
33
  - Test files import from local tapbundle: `import { tap, expect } from '../../ts_tapbundle/index.js'`
34
- - Node-specific tests also import from tapbundle_node: `import { tapNodeTools } from '../../ts_tapbundle_node/index.js'`
34
+ - Server-side tests also import from tapbundle_serverside for Node.js-only utilities: `import { tapNodeTools } from '../../ts_tapbundle_serverside/index.js'`
35
35
 
36
36
  2. **WebHelpers**
37
37
  - Browser tests can use webhelpers for DOM manipulation
@@ -41,7 +41,7 @@ This project integrates tstest with tapbundle through a modular architecture:
41
41
 
42
42
  3. **Build System**
43
43
  - Uses `tsbuild tsfolders` to compile TypeScript (invoked by `pnpm build`)
44
- - Maintains separate output directories: `/dist_ts/`, `/dist_ts_tapbundle/`, `/dist_ts_tapbundle_node/`, `/dist_ts_tapbundle_protocol/`
44
+ - Maintains separate output directories: `/dist_ts/`, `/dist_ts_tapbundle/`, `/dist_ts_tapbundle_serverside/`, `/dist_ts_tapbundle_protocol/`
45
45
  - Compilation order is resolved automatically based on dependencies in tspublish.json files
46
46
  - Protocol imports use compiled dist directories:
47
47
  ```typescript
package/readme.md CHANGED
@@ -318,9 +318,34 @@ tstest provides multiple exports for different use cases:
318
318
 
319
319
  - `@git.zone/tstest` - Main CLI and test runner functionality
320
320
  - `@git.zone/tstest/tapbundle` - Browser-compatible test framework
321
- - `@git.zone/tstest/tapbundle_node` - Node.js-specific test utilities
321
+ - `@git.zone/tstest/tapbundle_serverside` - Server-side testing utilities for Node.js-only tests (*.node.ts files)
322
+ - Execute shell commands during tests
323
+ - Manage environment variables on-demand with secure storage
324
+ - Generate self-signed HTTPS certificates for testing secure connections
325
+ - Create ephemeral MongoDB instances for database testing
326
+ - Create local S3-compatible storage for object storage testing
327
+ - Download and manage test assets (e.g., Docker images)
322
328
  - `@git.zone/tstest/tapbundle_protocol` - Protocol V2 emitter and parser for TAP extensions
323
329
 
330
+ ### When to Use tapbundle_serverside
331
+
332
+ Use `@git.zone/tstest/tapbundle_serverside` when your tests:
333
+
334
+ - Run exclusively on Node.js server-side (*.node.ts test files)
335
+ - Need to execute shell commands or interact with the file system
336
+ - Require environment variable management with secure on-demand prompts
337
+ - Test HTTPS servers and need self-signed certificates
338
+ - Interact with databases (MongoDB) and need ephemeral test instances
339
+ - Work with object storage (S3-compatible) and need local testing
340
+ - Require test assets like Docker images or other downloadable files
341
+
342
+ **Important:** tapbundle_serverside utilities are NOT available in:
343
+ - Browser environments
344
+ - Deno runtime
345
+ - Bun runtime
346
+
347
+ For cross-runtime tests, only import tapbundle_serverside in `.node.ts` files where you need server-side specific functionality.
348
+
324
349
  ## tapbundle Protocol V2
325
350
 
326
351
  tstest includes an enhanced TAP protocol (Protocol V2) that extends standard TAP 13 with additional metadata while maintaining backwards compatibility.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/tstest',
6
- version: '2.8.3',
6
+ version: '3.0.1',
7
7
  description: 'a test utility to run tests that match test/**/*.ts'
8
8
  }