@thymian/plugin-sampler 0.1.12-canary.20260716-58cd802 → 0.1.12

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,15 @@
1
+ import { BaseCliRunCommand, oclif } from '@thymian/common-cli';
2
+ import type { SamplerValidationReport } from '../../../validation/validate-sampler-output.js';
3
+ export default class Validate extends BaseCliRunCommand<typeof Validate> {
4
+ static enableJsonFlag: boolean;
5
+ static description: string;
6
+ static flags: {
7
+ "full-diffs": oclif.Interfaces.BooleanFlag<boolean>;
8
+ "for-path": oclif.Interfaces.OptionFlag<string | undefined, oclif.Interfaces.CustomOptions>;
9
+ };
10
+ run(): Promise<SamplerValidationReport>;
11
+ private logFailure;
12
+ private logJsonChanges;
13
+ private logContentField;
14
+ }
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/sampler/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,OAAO,KAAK,EAIV,uBAAuB,EACxB,MAAM,gDAAgD,CAAC;AAiBxD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,iBAAiB,CAAC,OAAO,QAAQ,CAAC;IACtE,OAAgB,cAAc,UAAQ;IAEtC,OAAgB,WAAW,SACiD;IAE5E,OAAgB,KAAK;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAoH7C,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,eAAe;CAcxB"}
@@ -0,0 +1,147 @@
1
+ import { BaseCliRunCommand, oclif } from '@thymian/common-cli';
2
+ import { SEVERITY_COLORS, SEVERITY_SYMBOLS, successSymbol, } from '@thymian/core';
3
+ const { colorize } = oclif.ux;
4
+ // Map each finding to a core report severity so the command reuses the exact
5
+ // colors and symbols of the Thymian report renderer (see report-style.ts)
6
+ // without constructing a Report. A missing/changed artifact is an error; an
7
+ // unexpected extra file is a warning.
8
+ const FINDING_SEVERITY = {
9
+ 'missing-artifact': 'error',
10
+ 'changed-artifact': 'error',
11
+ 'stale-root-metadata': 'error',
12
+ 'metadata-out-of-sync': 'error',
13
+ 'invalid-json': 'error',
14
+ 'unexpected-artifact': 'warn',
15
+ };
16
+ export default class Validate extends BaseCliRunCommand {
17
+ static enableJsonFlag = true;
18
+ static description = 'Validate generated sampler artifacts for the current API specification.';
19
+ static flags = {
20
+ ['full-diffs']: oclif.Flags.boolean({
21
+ default: false,
22
+ description: 'Show the full diff for every out-of-sync artifact instead of a summary.',
23
+ }),
24
+ ['for-path']: oclif.Flags.string({
25
+ description: 'Validate a single generated artifact by its relative path (e.g. meta.json) and show its full diff. Note: the full artifact set is still regenerated internally, so this scopes the output, not the work.',
26
+ }),
27
+ };
28
+ async run() {
29
+ return this.thymian.run(async (emitter) => {
30
+ if (!this.thymian.plugins.find((p) => p.plugin.name === '@thymian/plugin-sampler')) {
31
+ this.error('Cannot validate sampler if sampler plugin is not registered.', {
32
+ exit: 1,
33
+ });
34
+ }
35
+ const format = await this.thymian.loadFormat({
36
+ inputs: this.thymianConfig.specifications ?? [],
37
+ validateSpecs: this.flags['validate-specs'],
38
+ }, {
39
+ emitFormat: false,
40
+ });
41
+ const forPath = this.flags['for-path'];
42
+ const report = await emitter.emitAction('sampler.validate', {
43
+ format: format.export(),
44
+ ...(forPath !== undefined ? { forPath } : {}),
45
+ }, {
46
+ strategy: 'first',
47
+ });
48
+ // A scoped run reports 0 checked artifacts only when the path is not a
49
+ // known generated artifact — surface that as an error in every mode.
50
+ if (forPath !== undefined && report.checkedArtifacts === 0) {
51
+ if (this.jsonEnabled()) {
52
+ // Keep machine output consistent: emit the (empty) report as JSON and
53
+ // signal the usage error through the exit code instead of throwing,
54
+ // which would abort before any JSON is printed.
55
+ process.exitCode = 2;
56
+ return report;
57
+ }
58
+ this.error(`No generated sampler artifact found at path "${forPath}".`, {
59
+ exit: 2,
60
+ });
61
+ }
62
+ if (this.jsonEnabled()) {
63
+ // oclif serializes the returned value as JSON and suppresses `this.log`.
64
+ // Signal failure through the exit code without throwing, because a throw
65
+ // would abort before the JSON is printed.
66
+ if (report.failures.length > 0) {
67
+ process.exitCode = 1;
68
+ }
69
+ return report;
70
+ }
71
+ if (report.failures.length === 0) {
72
+ this.log(`${colorize(SEVERITY_COLORS.info, successSymbol)} ${forPath !== undefined
73
+ ? `Generated sampler artifact "${forPath}" is in sync.`
74
+ : `Sampler validation passed: ${report.checkedArtifacts} generated artifacts are in sync.`}`);
75
+ return report;
76
+ }
77
+ // `--for-path` targets one artifact, so its diff is always shown;
78
+ // otherwise details are opt-in via `--full-diffs`.
79
+ const showDiffs = this.flags['full-diffs'] || forPath !== undefined;
80
+ for (const failure of report.failures) {
81
+ this.logFailure(failure, showDiffs);
82
+ }
83
+ const checked = report.checkedArtifacts;
84
+ // `checkedArtifacts` counts only expected (generated) artifacts, so keep
85
+ // unexpected extras in their own tally — otherwise "N failed" against
86
+ // "Checked M" reads as "N of M generated artifacts failed" when the extras
87
+ // were never part of that set.
88
+ const unexpected = report.failures.filter((failure) => failure.type === 'unexpected-artifact').length;
89
+ const outOfSync = report.failures.length - unexpected;
90
+ const summaryParts = [];
91
+ if (outOfSync > 0) {
92
+ summaryParts.push(`${outOfSync} out of sync`);
93
+ }
94
+ if (unexpected > 0) {
95
+ summaryParts.push(`${unexpected} unexpected`);
96
+ }
97
+ this.log();
98
+ this.log(`Checked ${checked} generated ${checked === 1 ? 'artifact' : 'artifacts'} in ${report.samplePath}. ${colorize(SEVERITY_COLORS.error, `${summaryParts.join(', ')}.`)}`);
99
+ this.exit(1);
100
+ });
101
+ }
102
+ logFailure(failure, showDiffs) {
103
+ const severity = FINDING_SEVERITY[failure.type];
104
+ const color = SEVERITY_COLORS[severity];
105
+ const symbol = SEVERITY_SYMBOLS[severity];
106
+ this.log(`${colorize(color, `${symbol} ${failure.type}`)}: ${failure.path}`);
107
+ if (!showDiffs) {
108
+ return;
109
+ }
110
+ this.log(colorize(SEVERITY_COLORS.info, ` ${failure.message}`));
111
+ if (failure.changes && failure.changes.length > 0) {
112
+ this.logJsonChanges(failure.changes);
113
+ }
114
+ else {
115
+ this.logContentField('expected', failure.expected);
116
+ this.logContentField('actual', failure.actual);
117
+ }
118
+ this.log();
119
+ }
120
+ logJsonChanges(changes) {
121
+ this.log(colorize(SEVERITY_COLORS.info, ' JSON changes:'));
122
+ for (const change of changes) {
123
+ const pointer = change.pointer || '/';
124
+ let detail;
125
+ if (change.type === 'add') {
126
+ detail = `[add] ${pointer} → ${JSON.stringify(change.actual)}`;
127
+ }
128
+ else if (change.type === 'delete') {
129
+ detail = `[delete] ${pointer} (was ${JSON.stringify(change.expected)})`;
130
+ }
131
+ else {
132
+ detail = `[update] ${pointer}: ${JSON.stringify(change.expected)} → ${JSON.stringify(change.actual)}`;
133
+ }
134
+ this.log(colorize(SEVERITY_COLORS.info, ` ${detail}`));
135
+ }
136
+ }
137
+ logContentField(label, value) {
138
+ if (value === undefined) {
139
+ return;
140
+ }
141
+ this.log(colorize(SEVERITY_COLORS.info, ` ${label}:`));
142
+ for (const line of value.split('\n')) {
143
+ this.log(colorize(SEVERITY_COLORS.info, ` ${line}`));
144
+ }
145
+ }
146
+ }
147
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../src/cli/commands/sampler/validate.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,11 @@ export declare const SAMPLE_FILE: RegExp;
2
2
  export declare const BEFORE_EACH_HOOK: RegExp;
3
3
  export declare const AFTER_EACH_HOOK: RegExp;
4
4
  export declare const AUTHORIZE_HOOK: RegExp;
5
+ /**
6
+ * Whether a file name is a sampler hook file. This must mirror how hooks are
7
+ * actually discovered when reading samples (see `extractHooksFromDir` in
8
+ * read-samples-from-dir.ts), so that `sampler validate` never flags a file the
9
+ * sampler loads as a hook — the matching lives here to keep the two in sync.
10
+ */
11
+ export declare function isHookFileName(fileName: string): boolean;
5
12
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAoB,CAAC;AAC7C,eAAO,MAAM,gBAAgB,QAA+C,CAAC;AAC7E,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,cAAc,QAA8C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAmB,CAAC;AAC5C,eAAO,MAAM,gBAAgB,QAAwC,CAAC;AACtE,eAAO,MAAM,eAAe,QAAuC,CAAC;AACpE,eAAO,MAAM,cAAc,QAAuC,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMxD"}
package/dist/constants.js CHANGED
@@ -1,5 +1,16 @@
1
- export const SAMPLE_FILE = /.*request\.json/;
2
- export const BEFORE_EACH_HOOK = /(.*\.)?beforeEach\.(ts|js|mjs|cjs|mts|cts)/;
3
- export const AFTER_EACH_HOOK = /(.*\.)?afterEach\.(ts|js|mjs|cjs|mts|cts)/;
4
- export const AUTHORIZE_HOOK = /(.*\.)?authorize\.(ts|js|mjs|cjs|mts|cts)/;
1
+ export const SAMPLE_FILE = /request\.json$/;
2
+ export const BEFORE_EACH_HOOK = /(?:^|[/\\.])beforeEach\.[cm]?[jt]s$/;
3
+ export const AFTER_EACH_HOOK = /(?:^|[/\\.])afterEach\.[cm]?[jt]s$/;
4
+ export const AUTHORIZE_HOOK = /(?:^|[/\\.])authorize\.[cm]?[jt]s$/;
5
+ /**
6
+ * Whether a file name is a sampler hook file. This must mirror how hooks are
7
+ * actually discovered when reading samples (see `extractHooksFromDir` in
8
+ * read-samples-from-dir.ts), so that `sampler validate` never flags a file the
9
+ * sampler loads as a hook — the matching lives here to keep the two in sync.
10
+ */
11
+ export function isHookFileName(fileName) {
12
+ return (BEFORE_EACH_HOOK.test(fileName) ||
13
+ AFTER_EACH_HOOK.test(fileName) ||
14
+ AUTHORIZE_HOOK.test(fileName));
15
+ }
5
16
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,2CAA2C,CAAC;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,2CAA2C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,oCAAoC,CAAC;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,CACL,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC9B,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type HttpRequestTemplate, type SerializedThymianFormat, type ThymianHttpTransaction, type ThymianPlugin, type ThymianSchema } from '@thymian/core';
2
+ import { type SamplerValidationReport } from './validation/validate-sampler-output.js';
2
3
  declare module '@thymian/core' {
3
4
  interface ThymianActions {
4
5
  'sampler.init': {
@@ -8,6 +9,13 @@ declare module '@thymian/core' {
8
9
  };
9
10
  response: void;
10
11
  };
12
+ 'sampler.validate': {
13
+ event: {
14
+ format: SerializedThymianFormat;
15
+ forPath?: string;
16
+ };
17
+ response: SamplerValidationReport;
18
+ };
11
19
  'core.request.sample': {
12
20
  event: {
13
21
  transaction: ThymianHttpTransaction;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAG5B,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAkBvB,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,cAAc;QACtB,cAAc,EAAE;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,uBAAuB,CAAC;gBAChC,SAAS,CAAC,EAAE,OAAO,CAAC;aACrB,CAAC;YACF,QAAQ,EAAE,IAAI,CAAC;SAChB,CAAC;QAEF,qBAAqB,EAAE;YACrB,KAAK,EAAE;gBACL,WAAW,EAAE,sBAAsB,CAAC;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aACnC,CAAC;YACF,QAAQ,EAAE,mBAAmB,CAAC;SAC/B,CAAC;QAEF,sBAAsB,EAAE;YACtB,KAAK,EAAE;gBACL,WAAW,EAAE,MAAM,CAAC;gBACpB,MAAM,EAAE,aAAa,CAAC;aACvB,CAAC;YACF,QAAQ,EAAE;gBAAE,QAAQ,EAAE,OAAO,CAAC;gBAAC,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACrD,CAAC;QAEF,+BAA+B,EAAE;YAC/B,KAAK,EAAE;gBACL,aAAa,EAAE,MAAM,CAAC;aACvB,CAAC;YACF,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;CACF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAiMrE,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAG5B,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAgBvB,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,cAAc;QACtB,cAAc,EAAE;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,uBAAuB,CAAC;gBAChC,SAAS,CAAC,EAAE,OAAO,CAAC;aACrB,CAAC;YACF,QAAQ,EAAE,IAAI,CAAC;SAChB,CAAC;QAEF,kBAAkB,EAAE;YAClB,KAAK,EAAE;gBACL,MAAM,EAAE,uBAAuB,CAAC;gBAChC,OAAO,CAAC,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,QAAQ,EAAE,uBAAuB,CAAC;SACnC,CAAC;QAEF,qBAAqB,EAAE;YACrB,KAAK,EAAE;gBACL,WAAW,EAAE,sBAAsB,CAAC;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aACnC,CAAC;YACF,QAAQ,EAAE,mBAAmB,CAAC;SAC/B,CAAC;QAEF,sBAAsB,EAAE;YACtB,KAAK,EAAE;gBACL,WAAW,EAAE,MAAM,CAAC;gBACpB,MAAM,EAAE,aAAa,CAAC;aACvB,CAAC;YACF,QAAQ,EAAE;gBAAE,QAAQ,EAAE,OAAO,CAAC;gBAAC,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACrD,CAAC;QAEF,+BAA+B,EAAE;YAC/B,KAAK,EAAE;gBACL,aAAa,EAAE,MAAM,CAAC;aACvB,CAAC;YACF,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;CACF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA8CF,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CA8MrE,CAAC;AAEF,eAAe,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,16 +1,58 @@
1
- import { writeFile } from 'node:fs/promises';
2
1
  import { isAbsolute, join } from 'node:path';
3
2
  import { ThymianBaseError, ThymianFormat, thymianHttpTransactionToString, } from '@thymian/core';
4
3
  import { generateSamplesForThymianFormat } from './generation/generate-samples-for-thymian-format.js';
5
4
  import { generatedTypesToString, generateTypesForThymianFormat, } from './hooks/generate-request-types.js';
6
5
  import { HookRunner } from './hooks/hook-runner.js';
7
- import { tsConfig } from './hooks/ts-config.js';
8
6
  import { requestSampleToRequestTemplate } from './request-sample-to-request-template.js';
9
7
  import { RequestSampler } from './request-sampler.js';
10
8
  import { getPathTransactionId } from './samples-structure/get-path-transaction-id.js';
11
9
  import { readSamplesFromDir } from './samples-structure/read-samples-from-dir.js';
12
10
  import { writeSamplesToDir } from './samples-structure/write-samples-to-dir.js';
13
11
  import { entryExists } from './utils.js';
12
+ import { validateSamplerOutput, } from './validation/validate-sampler-output.js';
13
+ const samplerValidateActionSchema = {
14
+ event: {
15
+ type: 'object',
16
+ required: ['format'],
17
+ properties: {
18
+ format: {},
19
+ forPath: { type: 'string' },
20
+ },
21
+ },
22
+ response: {
23
+ type: 'object',
24
+ required: ['samplePath', 'checkedArtifacts', 'failures'],
25
+ properties: {
26
+ samplePath: { type: 'string' },
27
+ checkedArtifacts: { type: 'integer' },
28
+ failures: {
29
+ type: 'array',
30
+ items: {
31
+ type: 'object',
32
+ required: ['type', 'path', 'message'],
33
+ properties: {
34
+ type: {
35
+ type: 'string',
36
+ enum: [
37
+ 'missing-artifact',
38
+ 'changed-artifact',
39
+ 'stale-root-metadata',
40
+ 'metadata-out-of-sync',
41
+ 'unexpected-artifact',
42
+ 'invalid-json',
43
+ ],
44
+ },
45
+ path: { type: 'string' },
46
+ message: { type: 'string' },
47
+ expected: { type: 'string' },
48
+ actual: { type: 'string' },
49
+ changes: { type: 'array' },
50
+ },
51
+ },
52
+ },
53
+ },
54
+ },
55
+ };
14
56
  export const samplePlugin = {
15
57
  name: '@thymian/plugin-sampler',
16
58
  version: '0.x',
@@ -51,6 +93,13 @@ export const samplePlugin = {
51
93
  },
52
94
  },
53
95
  },
96
+ // The strict `JSONSchemaType<T>` target can't be satisfied by this
97
+ // hand-written `as const` schema (readonly literals + a deliberately
98
+ // loose `format: {}`, which ajv validates at runtime). Suppress the
99
+ // structural check the same way `sampler.init` does above, for parity.
100
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
101
+ // @ts-expect-error
102
+ 'sampler.validate': samplerValidateActionSchema,
54
103
  },
55
104
  },
56
105
  plugin: async (emitter, logger, options) => {
@@ -100,12 +149,22 @@ export const samplePlugin = {
100
149
  await writeSamplesToDir(samples, generatedTypes.keyToTransactionId, {
101
150
  path: basePath,
102
151
  mode: typeof overwrite === 'boolean' ? 'overwrite' : 'failIfExist',
152
+ typeArtifacts: {
153
+ typesContent: generatedTypesToString(generatedTypes),
154
+ },
103
155
  });
104
156
  logger.debug(`Wrote samples at ${basePath}`);
105
- await writeFile(join(basePath, 'types.d.ts'), generatedTypesToString(generatedTypes));
106
- await writeFile(join(basePath, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));
107
157
  ctx.reply();
108
158
  });
159
+ emitter.onAction('sampler.validate', async ({ format, forPath }, ctx) => {
160
+ const parsedFormat = ThymianFormat.import(format);
161
+ ctx.reply(await validateSamplerOutput({
162
+ format: parsedFormat,
163
+ emitter,
164
+ samplePath: basePath,
165
+ forPath,
166
+ }));
167
+ });
109
168
  emitter.onAction('core.request.sample', async ({ transaction }, ctx) => {
110
169
  if (!format) {
111
170
  throw new ThymianBaseError('Format is not loaded.', {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAGL,gBAAgB,EAChB,aAAa,EAEb,8BAA8B,GAG/B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EACL,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyCzC,MAAM,CAAC,MAAM,YAAY,GAAiD;IACxE,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE;QACP,sCAAsC;QACtC,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,8CAA8C;QAC3D,sCAAsC;QACtC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;SACF;KACF;IACD,OAAO,EAAE;QACP,QAAQ,EAAE;YACR,cAAc,EAAE;gBACd,6DAA6D;gBAC7D,mBAAmB;gBACnB,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;oBACnC,UAAU,EAAE;wBACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC/B,MAAM,EAAE,EAAE;qBACX;iBACF;gBACD,6DAA6D;gBAC7D,mBAAmB;gBACnB,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;oBACnC,UAAU,EAAE;wBACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC/B,MAAM,EAAE,EAAE;qBACX;iBACF;aACF;SACF;KACF;IACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;gBACjC,CAAC,CAAC,OAAO,CAAC,IAAI;gBACd,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,MAAiC,CAAC;QACtC,IAAI,OAAqC,CAAC;QAE1C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,QAAQ,EACR,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,OAAO,MAAM,OAAO,CAAC,UAAU,CAC7B,uBAAuB,EACvB;gBACE,OAAO;aACR,EACD;gBACE,QAAQ,EAAE,OAAO;aAClB,CACF,CAAC;QACJ,CAAC,EACD,MAAM,CACP,CAAC;QAEF,KAAK,UAAU,8BAA8B,CAAC,MAAqB;YACjE,OAAO,GAAG,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YAC/C,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEjC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;YAE7C,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CACd,+BAA+B,EAC/B,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,EAAE;oBACnD,IAAI,EAAE,uBAAuB;oBAC7B,GAAG,EAAE,iEAAiE;iBACvE,CAAC,CAAC;YACL,CAAC;YAED,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACpE,CAAC,CACF,CAAC;QAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;YACpE,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAElD,MAAM,OAAO,GAAG,MAAM,+BAA+B,CACnD,YAAY,EACZ,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAEtD,MAAM,cAAc,GAAG,MAAM,6BAA6B,CAAC,YAAY,CAAC,CAAC;YAEzE,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAEpD,MAAM,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,kBAAkB,EAAE;gBAClE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;aACnE,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;YAE7C,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAC5B,sBAAsB,CAAC,cAAc,CAAC,CACvC,CAAC;YAEF,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAClC,CAAC;YAEF,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;YACrE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,EAAE;oBAClD,IAAI,EAAE,sBAAsB;oBAC5B,GAAG,EAAE,gEAAgE;iBACtE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,oBAAoB,CAChD,WAAW,CAAC,aAAa,CAC1B,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7C,IAAI,oBAAoB,KAAK,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;oBACtD,MAAM,IAAI,gBAAgB,CACxB,kCAAkC,8BAA8B,CAC9D,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,UAAU,CACvB,mCAAmC,oBAAoB,kDAAkD,cAAc,CAAC,OAAO,EAAE,IAAI,EACtI;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,WAAW,EAAE;4BACX,wCAAwC,cAAc,CAAC,SAAS,EAAE,6CAA6C;4BAC/G,wBAAwB;yBACzB;wBACD,GAAG,EAAE,mDAAmD;qBACzD,CACF,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,gBAAgB,CACxB,iCAAiC,8BAA8B,CAC7D,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,UAAU,CACvB,wBAAwB,WAAW,CAAC,aAAa,EAAE,EACpD;oBACE,IAAI,EAAE,gCAAgC;oBACtC,GAAG,EAAE,2EAA2E;iBACjF,CACF,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACjE,GAAG,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACjE,GAAG,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC7D,GAAG,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { type ContentSource, type HttpRequestSample } from '../http-request-samp
2
2
  import type { Value } from './file-request-sample.js';
3
3
  import { type BaseNode, type SamplesStructure } from './samples-tree-structure.js';
4
4
  import type { PathToNodeType } from './structure-meta-on-disc.js';
5
+ export type CreateDir = (path: string) => Promise<void>;
5
6
  export type WriteToFile = (path: string, content: string | Buffer, encoding?: string) => Promise<void>;
6
7
  export declare function getTreeStructureMeta(tree: SamplesStructure): PathToNodeType;
7
8
  export declare function getFolderNameFromNode(node: BaseNode): string;
@@ -20,6 +21,17 @@ export declare function transformParameters({ parameters, dir, baseName, writeTo
20
21
  export type WriteOptions = {
21
22
  path: string;
22
23
  mode?: 'failIfExist' | 'overwrite';
24
+ mkdir?: CreateDir;
25
+ writeToFile?: WriteToFile;
26
+ /**
27
+ * When provided, the generated `types.d.ts` and `tsconfig.json` hook
28
+ * artifacts are emitted through the same `writeToFile` seam as the rest of
29
+ * the samples. Keeping these writes here guarantees `sampler.init` (on disk)
30
+ * and the validation flow (in memory) can never drift in how they emit them.
31
+ */
32
+ typeArtifacts?: {
33
+ typesContent: string;
34
+ };
23
35
  };
24
36
  export declare function writeSamplesToDir(samples: SamplesStructure, keyToTransactionId: Record<string, string>, options: WriteOptions): Promise<void>;
25
37
  //# sourceMappingURL=write-samples-to-dir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-samples-to-dir.d.ts","sourceRoot":"","sources":["../../src/samples-structure/write-samples-to-dir.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAGvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAqB,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAoB3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAqC5D;AAED,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,IAAI,EACJ,GAAG,EACH,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhB;AAmCD,wBAAsB,mBAAmB,CAAC,EACxC,UAAU,EACV,GAAG,EACH,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAajC;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;CACpC,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,EACzB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAuDf"}
1
+ {"version":3,"file":"write-samples-to-dir.d.ts","sourceRoot":"","sources":["../../src/samples-structure/write-samples-to-dir.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAGvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAqB,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAoB3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAqC5D;AAED,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,IAAI,EACJ,GAAG,EACH,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhB;AAmCD,wBAAsB,mBAAmB,CAAC,EACxC,UAAU,EACV,GAAG,EACH,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAajC;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;IACnC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,EACzB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Ef"}
@@ -1,6 +1,7 @@
1
1
  import { mkdir, writeFile } from 'node:fs/promises';
2
2
  import { basename, format, join } from 'node:path';
3
3
  import { ThymianBaseError } from '@thymian/core';
4
+ import { tsConfig } from '../hooks/ts-config.js';
4
5
  import { isFileContentSource, isInlineContentSource, } from '../http-request-sample.js';
5
6
  import { checkForSafePath, entryExists, sanitize } from '../utils.js';
6
7
  import { isKnownNodeType, isValidNodeType, nodeIsType, } from './samples-tree-structure.js';
@@ -133,16 +134,21 @@ export async function transformParameters({ parameters, dir, baseName, writeToFi
133
134
  }
134
135
  export async function writeSamplesToDir(samples, keyToTransactionId, options) {
135
136
  const mode = options.mode ?? 'failIfExist';
136
- const writeToFile = async (path, content, encoding) => {
137
- if (mode === 'failIfExist' && (await entryExists(path))) {
138
- throw new ThymianBaseError(`File/Directory at path "${path}" already exists. Use "overwrite" mode to overwrite it.`, {
139
- name: 'PathAlreadyExistsError',
140
- ref: 'https://thymian.dev/references/errors/path-already-exists-error/',
141
- });
142
- }
143
- await writeFile(path, content, encoding);
144
- };
145
- await mkdir(options.path, { recursive: true });
137
+ const mkdirDir = options.mkdir ??
138
+ (async (path) => {
139
+ await mkdir(path, { recursive: true });
140
+ });
141
+ const writeToFile = options.writeToFile ??
142
+ (async (path, content, encoding) => {
143
+ if (mode === 'failIfExist' && (await entryExists(path))) {
144
+ throw new ThymianBaseError(`File/Directory at path "${path}" already exists. Use "overwrite" mode to overwrite it.`, {
145
+ name: 'PathAlreadyExistsError',
146
+ ref: 'https://thymian.dev/references/errors/path-already-exists-error/',
147
+ });
148
+ }
149
+ await writeFile(path, content, encoding);
150
+ });
151
+ await mkdirDir(options.path);
146
152
  await writeToFile(join(options.path, 'meta.json'), JSON.stringify({
147
153
  '//': 'This file contains metadata about the structure of the samples. It is generated by @thymian/plugin-sampler and is not meant to be edited by humans.',
148
154
  types: getTreeStructureMeta(samples),
@@ -156,12 +162,12 @@ export async function writeSamplesToDir(samples, keyToTransactionId, options) {
156
162
  const folderName = getFolderNameFromNode(node);
157
163
  const dirPath = join(currentPath, folderName);
158
164
  if (nodeIsType(node, 'samples')) {
159
- await mkdir(dirPath, { recursive: true });
165
+ await mkdirDir(dirPath);
160
166
  const metaPath = join(dirPath, 'meta.json');
161
167
  await writeToFile(metaPath, JSON.stringify(node.meta, null, 2));
162
168
  }
163
169
  else if (nodeIsType(node, 'requests')) {
164
- await mkdir(dirPath, { recursive: true });
170
+ await mkdirDir(dirPath);
165
171
  for (const [idx, sample] of node.value.entries()) {
166
172
  const name = `${idx}-request`;
167
173
  await writeSample({ sample, name, dir: dirPath, writeToFile });
@@ -169,5 +175,9 @@ export async function writeSamplesToDir(samples, keyToTransactionId, options) {
169
175
  }
170
176
  return dirPath;
171
177
  });
178
+ if (options.typeArtifacts) {
179
+ await writeToFile(join(options.path, 'types.d.ts'), options.typeArtifacts.typesContent);
180
+ await writeToFile(join(options.path, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));
181
+ }
172
182
  }
173
183
  //# sourceMappingURL=write-samples-to-dir.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-samples-to-dir.js","sourceRoot":"","sources":["../../src/samples-structure/write-samples-to-dir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-samples-to-dir.js","sourceRoot":"","sources":["../../src/samples-structure/write-samples-to-dir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ThymianEmitter, ThymianFormat } from '@thymian/core';
2
+ export type SamplerValidationFindingType = 'missing-artifact' | 'unexpected-artifact' | 'changed-artifact' | 'stale-root-metadata' | 'metadata-out-of-sync' | 'invalid-json';
3
+ export type SamplerValidationContentChangeType = 'add' | 'update' | 'delete';
4
+ export type SamplerValidationContentChange = {
5
+ type: SamplerValidationContentChangeType;
6
+ pointer: string;
7
+ expected?: unknown;
8
+ actual?: unknown;
9
+ };
10
+ export type SamplerValidationFinding = {
11
+ type: SamplerValidationFindingType;
12
+ path: string;
13
+ message: string;
14
+ expected?: string;
15
+ actual?: string;
16
+ changes?: SamplerValidationContentChange[];
17
+ };
18
+ export type SamplerValidationReport = {
19
+ samplePath: string;
20
+ checkedArtifacts: number;
21
+ failures: SamplerValidationFinding[];
22
+ };
23
+ type ValidateSamplerOutputOptions = {
24
+ format: ThymianFormat;
25
+ emitter: ThymianEmitter;
26
+ samplePath: string;
27
+ /**
28
+ * Restrict the report to a single generated artifact, identified by its
29
+ * relative path (e.g. `meta.json`). `checkedArtifacts` is then 1 when the
30
+ * path is a known artifact and 0 when it is not, which the CLI uses to tell
31
+ * an in-sync artifact apart from an unknown one.
32
+ */
33
+ forPath?: string;
34
+ };
35
+ export declare function createExpectedSamplerFiles({ format, emitter, }: Omit<ValidateSamplerOutputOptions, 'samplePath'>): Promise<Map<string, Buffer>>;
36
+ export declare function validateSamplerOutput({ format, emitter, samplePath, forPath, }: ValidateSamplerOutputOptions): Promise<SamplerValidationReport>;
37
+ export {};
38
+ //# sourceMappingURL=validate-sampler-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-sampler-output.d.ts","sourceRoot":"","sources":["../../src/validation/validate-sampler-output.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAUnE,MAAM,MAAM,4BAA4B,GACpC,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,GACtB,cAAc,CAAC;AAEnB,MAAM,MAAM,kCAAkC,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,kCAAkC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,4BAA4B,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,8BAA8B,EAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,0BAA0B,CAAC,EAC/C,MAAM,EACN,OAAO,GACR,EAAE,IAAI,CAAC,4BAA4B,EAAE,YAAY,CAAC,GAAG,OAAO,CAC3D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CACpB,CAwBA;AAED,wBAAsB,qBAAqB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,4BAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAuEjE"}
@@ -0,0 +1,288 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { join, relative, sep } from 'node:path';
3
+ import { diff as diffJson } from '@scalar/json-magic/diff';
4
+ import { isHookFileName } from '../constants.js';
5
+ import { generateSamplesForThymianFormat } from '../generation/generate-samples-for-thymian-format.js';
6
+ import { generatedTypesToString, generateTypesForThymianFormat, } from '../hooks/generate-request-types.js';
7
+ import { writeSamplesToDir } from '../samples-structure/write-samples-to-dir.js';
8
+ export async function createExpectedSamplerFiles({ format, emitter, }) {
9
+ const samples = await generateSamplesForThymianFormat(format, emitter);
10
+ const generatedTypes = await generateTypesForThymianFormat(format);
11
+ const expectedFiles = new Map();
12
+ await writeSamplesToDir(samples, generatedTypes.keyToTransactionId, {
13
+ path: '',
14
+ mkdir: async (path) => {
15
+ void path;
16
+ },
17
+ writeToFile: async (path, content, encoding) => {
18
+ expectedFiles.set(normalizeRelativePath(path), Buffer.isBuffer(content)
19
+ ? content
20
+ : Buffer.from(content, encoding));
21
+ },
22
+ typeArtifacts: {
23
+ typesContent: generatedTypesToString(generatedTypes),
24
+ },
25
+ });
26
+ return expectedFiles;
27
+ }
28
+ export async function validateSamplerOutput({ format, emitter, samplePath, forPath, }) {
29
+ const expectedFiles = await createExpectedSamplerFiles({ format, emitter });
30
+ const actualFiles = await collectActualSamplerFiles(samplePath);
31
+ const failures = [];
32
+ preserveRootMetadataTimestamp(expectedFiles, actualFiles);
33
+ for (const [path, expected] of expectedFiles) {
34
+ const actual = actualFiles.get(path);
35
+ if (!actual) {
36
+ failures.push({
37
+ type: 'missing-artifact',
38
+ path,
39
+ message: 'Expected generated sampler artifact is missing.',
40
+ expected: bufferToText(expected),
41
+ });
42
+ continue;
43
+ }
44
+ if (expected.equals(actual)) {
45
+ continue;
46
+ }
47
+ const type = mismatchTypeForChangedPath(path, expected, actual);
48
+ const changes = createJsonDiffDetails(expected, actual);
49
+ failures.push({
50
+ type,
51
+ path,
52
+ message: messageForChangedPath(type),
53
+ expected: bufferToText(expected),
54
+ actual: bufferToText(actual),
55
+ ...(changes ? { changes } : {}),
56
+ });
57
+ }
58
+ for (const [path, actual] of actualFiles) {
59
+ if (!expectedFiles.has(path)) {
60
+ failures.push({
61
+ type: 'unexpected-artifact',
62
+ path,
63
+ message: 'Unexpected non-hook file exists under the sampler directory.',
64
+ actual: bufferToText(actual),
65
+ });
66
+ }
67
+ }
68
+ if (forPath !== undefined) {
69
+ // Normalize so a platform-native argument (e.g. `a\b.json` on Windows)
70
+ // matches the `/`-joined keys used throughout the report.
71
+ const normalizedForPath = normalizeRelativePath(forPath);
72
+ // Only a generated (expected) artifact counts as "known" — pointing
73
+ // `--for-path` at an on-disk-only file must surface as an unknown-path
74
+ // usage error, not silently scope to that extra file.
75
+ const known = expectedFiles.has(normalizedForPath);
76
+ return {
77
+ samplePath,
78
+ checkedArtifacts: known ? 1 : 0,
79
+ failures: failures.filter((failure) => failure.path === normalizedForPath),
80
+ };
81
+ }
82
+ return {
83
+ samplePath,
84
+ checkedArtifacts: expectedFiles.size,
85
+ failures,
86
+ };
87
+ }
88
+ async function collectActualSamplerFiles(samplePath) {
89
+ const actualFiles = new Map();
90
+ // A missing path — or a non-directory sitting where the samples directory is
91
+ // expected — means nothing generated is present. Treat both as an empty
92
+ // actual set so drift is reported instead of `readdir` crashing on ENOTDIR.
93
+ let stats;
94
+ try {
95
+ stats = await stat(samplePath);
96
+ }
97
+ catch {
98
+ return actualFiles;
99
+ }
100
+ if (!stats.isDirectory()) {
101
+ return actualFiles;
102
+ }
103
+ await collectActualFilesRecursive(samplePath, samplePath, actualFiles);
104
+ return actualFiles;
105
+ }
106
+ async function collectActualFilesRecursive(rootPath, currentPath, actualFiles) {
107
+ const entries = await readdir(currentPath, { withFileTypes: true });
108
+ for (const entry of entries) {
109
+ const entryPath = join(currentPath, entry.name);
110
+ if (entry.isDirectory()) {
111
+ await collectActualFilesRecursive(rootPath, entryPath, actualFiles);
112
+ continue;
113
+ }
114
+ if (!entry.isFile()) {
115
+ continue;
116
+ }
117
+ const relativePath = normalizeRelativePath(relative(rootPath, entryPath));
118
+ if (isHookFile(relativePath)) {
119
+ continue;
120
+ }
121
+ actualFiles.set(relativePath, await readFile(entryPath));
122
+ }
123
+ }
124
+ function normalizeRelativePath(path) {
125
+ return path.split(sep).join('/');
126
+ }
127
+ function isHookFile(path) {
128
+ const fileName = path.split('/').at(-1) ?? path;
129
+ return isHookFileName(fileName);
130
+ }
131
+ function mismatchTypeForChangedPath(path, expected, actual) {
132
+ if (isInvalidJsonChange(expected, actual)) {
133
+ return 'invalid-json';
134
+ }
135
+ if (path === 'meta.json') {
136
+ return rootMetadataMismatchType(expected, actual);
137
+ }
138
+ if (path.endsWith('/meta.json')) {
139
+ return 'metadata-out-of-sync';
140
+ }
141
+ return 'changed-artifact';
142
+ }
143
+ // The root `meta.json` is only "stale" when the format hash (`/version/version`)
144
+ // differs — that means the artifacts were generated against a different API
145
+ // format. Drift in other root fields (e.g. `types`, `transactions`) is an
146
+ // ordinary content change and should not claim the metadata is out of date.
147
+ function rootMetadataMismatchType(expected, actual) {
148
+ const expectedObject = parseJsonObject(expected);
149
+ const actualObject = parseJsonObject(actual);
150
+ if (!expectedObject || !actualObject) {
151
+ return 'stale-root-metadata';
152
+ }
153
+ return readVersionHash(expectedObject) !== readVersionHash(actualObject)
154
+ ? 'stale-root-metadata'
155
+ : 'changed-artifact';
156
+ }
157
+ function messageForChangedPath(type) {
158
+ if (type === 'invalid-json') {
159
+ return 'Generated JSON artifact is not valid JSON.';
160
+ }
161
+ if (type === 'stale-root-metadata') {
162
+ return 'Root sampler metadata does not match the current API format.';
163
+ }
164
+ if (type === 'metadata-out-of-sync') {
165
+ return 'Nested sampler metadata does not match the expected generated output.';
166
+ }
167
+ return 'Generated sampler artifact content differs from expected output.';
168
+ }
169
+ function isInvalidJsonChange(expected, actual) {
170
+ const expectedJson = parseJsonValue(expected);
171
+ const actualJson = parseJsonValue(actual);
172
+ return (expectedJson.valid && isJsonObject(expectedJson.value) && !actualJson.valid);
173
+ }
174
+ function createJsonDiffDetails(expected, actual) {
175
+ const expectedJson = parseJsonValue(expected);
176
+ const actualJson = parseJsonValue(actual);
177
+ if (!expectedJson.valid || !actualJson.valid) {
178
+ return undefined;
179
+ }
180
+ if (!isJsonObject(expectedJson.value) || !isJsonObject(actualJson.value)) {
181
+ return undefined;
182
+ }
183
+ const expectedValue = expectedJson.value;
184
+ const actualValue = actualJson.value;
185
+ return diffJson(expectedValue, actualValue).map((change) => mapJsonMagicChange(change, expectedValue, actualValue));
186
+ }
187
+ function mapJsonMagicChange(change, expected, actual) {
188
+ const pointer = jsonPointerFromPath(change.path);
189
+ if (change.type === 'add') {
190
+ return {
191
+ type: change.type,
192
+ pointer,
193
+ actual: readJsonPath(actual, change.path),
194
+ };
195
+ }
196
+ if (change.type === 'delete') {
197
+ return {
198
+ type: change.type,
199
+ pointer,
200
+ expected: readJsonPath(expected, change.path),
201
+ };
202
+ }
203
+ return {
204
+ type: change.type,
205
+ pointer,
206
+ expected: readJsonPath(expected, change.path),
207
+ actual: readJsonPath(actual, change.path),
208
+ };
209
+ }
210
+ function preserveRootMetadataTimestamp(expectedFiles, actualFiles) {
211
+ const expected = expectedFiles.get('meta.json');
212
+ const actual = actualFiles.get('meta.json');
213
+ if (!expected || !actual) {
214
+ return;
215
+ }
216
+ const expectedJson = parseJsonObject(expected);
217
+ const actualJson = parseJsonObject(actual);
218
+ if (!expectedJson || !actualJson) {
219
+ return;
220
+ }
221
+ const expectedVersion = readVersionHash(expectedJson);
222
+ const actualVersion = readVersionHash(actualJson);
223
+ if (!expectedVersion || expectedVersion !== actualVersion) {
224
+ return;
225
+ }
226
+ const expectedVersionObject = expectedJson.version;
227
+ const actualVersionObject = actualJson.version;
228
+ if (!isJsonObject(expectedVersionObject) ||
229
+ !isJsonObject(actualVersionObject)) {
230
+ return;
231
+ }
232
+ // Only the timestamp is allowed to differ run-to-run; copy just that field so
233
+ // drift in any other `version.*` field (added later) is still validated.
234
+ expectedVersionObject.timestamp = actualVersionObject.timestamp;
235
+ expectedFiles.set('meta.json', Buffer.from(JSON.stringify(expectedJson)));
236
+ }
237
+ function readVersionHash(value) {
238
+ const version = value.version;
239
+ if (!version || typeof version !== 'object' || Array.isArray(version)) {
240
+ return undefined;
241
+ }
242
+ const hash = version.version;
243
+ return typeof hash === 'string' ? hash : undefined;
244
+ }
245
+ function parseJsonObject(buffer) {
246
+ const parsed = parseJsonValue(buffer);
247
+ if (!parsed.valid || !isJsonObject(parsed.value)) {
248
+ return undefined;
249
+ }
250
+ return parsed.value;
251
+ }
252
+ function parseJsonValue(buffer) {
253
+ try {
254
+ return {
255
+ valid: true,
256
+ value: JSON.parse(buffer.toString('utf8')),
257
+ };
258
+ }
259
+ catch {
260
+ return { valid: false };
261
+ }
262
+ }
263
+ function isJsonObject(value) {
264
+ return !!value && typeof value === 'object' && !Array.isArray(value);
265
+ }
266
+ function readJsonPath(value, path) {
267
+ let current = value;
268
+ for (const segment of path) {
269
+ if (!current || typeof current !== 'object') {
270
+ return undefined;
271
+ }
272
+ current = current[segment];
273
+ }
274
+ return current;
275
+ }
276
+ function jsonPointerFromPath(path) {
277
+ if (path.length === 0) {
278
+ return '';
279
+ }
280
+ return `/${path.map(escapeJsonPointerSegment).join('/')}`;
281
+ }
282
+ function escapeJsonPointerSegment(segment) {
283
+ return segment.replaceAll('~', '~0').replaceAll('/', '~1');
284
+ }
285
+ function bufferToText(buffer) {
286
+ return buffer.toString('utf8');
287
+ }
288
+ //# sourceMappingURL=validate-sampler-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-sampler-output.js","sourceRoot":"","sources":["../../src/validation/validate-sampler-output.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thymian/plugin-sampler",
3
- "version": "0.1.12-canary.20260716-58cd802",
3
+ "version": "0.1.12",
4
4
  "description": "Thymian plugin for generating HTTP request samples from API descriptions",
5
5
  "license": "AGPL-3.0-only",
6
6
  "bugs": {
@@ -41,9 +41,10 @@
41
41
  "!**/*.tsbuildinfo"
42
42
  ],
43
43
  "dependencies": {
44
- "@thymian/common-cli": "0.1.12-canary.20260716-58cd802",
45
- "@thymian/core": "0.1.12-canary.20260716-58cd802",
46
- "@thymian/plugin-request-dispatcher": "0.1.12-canary.20260716-58cd802",
44
+ "@scalar/json-magic": "^0.9.0",
45
+ "@thymian/common-cli": "0.1.12",
46
+ "@thymian/core": "0.1.12",
47
+ "@thymian/plugin-request-dispatcher": "0.1.12",
47
48
  "code-block-writer": "^13.0.3",
48
49
  "jiti": "^2.6.1",
49
50
  "json-schema-to-typescript": "^15.0.4",
@@ -63,7 +64,7 @@
63
64
  }
64
65
  },
65
66
  "devDependencies": {
66
- "@thymian/core-testing": "0.1.12-canary.20260716-58cd802",
67
+ "@thymian/core-testing": "0.1.12",
67
68
  "fast-json-stable-stringify": "^2.1.0",
68
69
  "ts-morph": "^27.0.2"
69
70
  }