This commit is contained in:
Gregory Schier
2026-03-02 07:52:08 -08:00
parent fbf0473b20
commit 0b250ff5b5
4 changed files with 20 additions and 8 deletions

View File

@@ -13,12 +13,16 @@ describe('template-function-faker', () => {
it('renders date results as unquoted ISO strings', async () => { it('renders date results as unquoted ISO strings', async () => {
const { plugin } = await import('../src/index'); const { plugin } = await import('../src/index');
const fn = plugin.templateFunctions?.find((fn) => fn.name === 'faker.date.future'); const fn = plugin.templateFunctions?.find((fn) => fn.name === 'faker.date.future');
const onRender = fn?.onRender;
expect(fn?.onRender).toBeTypeOf('function'); expect(onRender).toBeTypeOf('function');
if (onRender == null) {
throw new Error("Expected template function 'faker.date.future' to define onRender");
}
const result = await fn!.onRender!( const result = await onRender(
{} as Parameters<NonNullable<typeof fn.onRender>>[0], {} as Parameters<typeof onRender>[0],
{ values: {} } as Parameters<NonNullable<typeof fn.onRender>>[1], { values: {} } as Parameters<typeof onRender>[1],
); );
expect(result).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/); expect(result).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/);

View File

@@ -206,7 +206,10 @@ export const plugin: PluginDefinition = {
// Create snippet generator // Create snippet generator
const snippet = new HTTPSnippet(harRequest); const snippet = new HTTPSnippet(harRequest);
const generateSnippet = (target: string, client: string): string => { const generateSnippet = (target: string, client: string): string => {
const result = snippet.convert(target as any, client); const result = snippet.convert(
target as Parameters<typeof snippet.convert>[0],
client as Parameters<typeof snippet.convert>[1],
);
return (Array.isArray(result) ? result.join('\n') : result || '').replace(/\r\n/g, '\n'); return (Array.isArray(result) ? result.join('\n') : result || '').replace(/\r\n/g, '\n');
}; };

View File

@@ -82,7 +82,9 @@ function splitCommands(rawData: string): string[] {
let inDollarQuote = false; let inDollarQuote = false;
for (let i = 0; i < joined.length; i++) { for (let i = 0; i < joined.length; i++) {
const ch = joined[i]!; if (joined[i] === undefined) break; // Make TS happy
const ch = joined[i];
const next = joined[i + 1]; const next = joined[i + 1];
// Track quoting state to avoid splitting inside quoted strings // Track quoting state to avoid splitting inside quoted strings
@@ -121,7 +123,11 @@ function splitCommands(rawData: string): string[] {
const inQuote = inSingleQuote || inDoubleQuote || inDollarQuote; const inQuote = inSingleQuote || inDoubleQuote || inDollarQuote;
// Split on ;, newline, or CRLF when not inside quotes and not escaped // Split on ;, newline, or CRLF when not inside quotes and not escaped
if (!inQuote && !isEscaped(i) && (ch === ';' || ch === '\n' || (ch === '\r' && next === '\n'))) { if (
!inQuote &&
!isEscaped(i) &&
(ch === ';' || ch === '\n' || (ch === '\r' && next === '\n'))
) {
if (ch === '\r') i++; // Skip the \n in \r\n if (ch === '\r') i++; // Skip the \n in \r\n
if (current.trim()) { if (current.trim()) {
commands.push(current.trim()); commands.push(current.trim());

View File

@@ -8,7 +8,6 @@ import { useHttpResponseEvents } from '../hooks/useHttpResponseEvents';
import { Editor } from './core/Editor/LazyEditor'; import { Editor } from './core/Editor/LazyEditor';
import { type EventDetailAction, EventDetailHeader, EventViewer } from './core/EventViewer'; import { type EventDetailAction, EventDetailHeader, EventViewer } from './core/EventViewer';
import { EventViewerRow } from './core/EventViewerRow'; import { EventViewerRow } from './core/EventViewerRow';
import { HttpMethodTagRaw } from './core/HttpMethodTag';
import { HttpStatusTagRaw } from './core/HttpStatusTag'; import { HttpStatusTagRaw } from './core/HttpStatusTag';
import { Icon, type IconProps } from './core/Icon'; import { Icon, type IconProps } from './core/Icon';
import { KeyValueRow, KeyValueRows } from './core/KeyValueRow'; import { KeyValueRow, KeyValueRows } from './core/KeyValueRow';