Skip to content

Commit f7c501f

Browse files
authored
fix: handle OpenAPI pattern as RegExp source (#109)
1 parent d4d095b commit f7c501f

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/transform.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,13 @@ function transformStringBasedOnFormat(schema: OpenAPIV3.NonArraySchemaObject, ke
241241
}
242242

243243
if (pattern && isValidRegExp(pattern)) {
244-
return `faker.helpers.fromRegExp(${pattern})`;
244+
// OpenAPI `pattern` is a bare regex source (e.g. ^[a-z]{2,}$), not a JS literal.
245+
// Some users still pass JS regex literals as strings (e.g. '/^foo$/i'); support both.
246+
if (pattern.startsWith('/')) {
247+
return `faker.helpers.fromRegExp(${pattern})`;
248+
}
249+
// Use `new RegExp()` with a JSON-escaped string to avoid syntax errors.
250+
return `faker.helpers.fromRegExp(new RegExp(${JSON.stringify(pattern)}))`;
245251
}
246252

247253
return `faker.lorem.words()`;

test/transform.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,24 @@ describe('transform:transformJSONSchemaToFakerCode', () => {
6969
expect(transformJSONSchemaToFakerCode(schema)).toBe(JSON.stringify(expected));
7070
});
7171

72-
it('Returns fromRegExp() if valid regexp pattern is provided', () => {
72+
it('Returns fromRegExp() if a JS regexp literal is provided', () => {
7373
const schema: OpenAPIV3.SchemaObject = {
7474
type: 'string',
7575
pattern: '/^S+@S+.S+$/',
7676
};
7777
expect(transformJSONSchemaToFakerCode(schema)).toBe('faker.helpers.fromRegExp(/^S+@S+.S+$/)');
7878
});
7979

80+
it('Returns fromRegExp(new RegExp()) if a bare regexp pattern is provided', () => {
81+
const schema: OpenAPIV3.SchemaObject = {
82+
type: 'string',
83+
pattern: '^[a-zA-Z0-9-_]{2,50}$',
84+
};
85+
expect(transformJSONSchemaToFakerCode(schema)).toBe(
86+
'faker.helpers.fromRegExp(new RegExp("^[a-zA-Z0-9-_]{2,50}$"))',
87+
);
88+
});
89+
8090
it('Falls back if invalid regexp pattern is provided', () => {
8191
const expected = 'faker.lorem.words()';
8292
const schema: OpenAPIV3.SchemaObject = {

0 commit comments

Comments
 (0)