feat(medusa): Allow regexp in CORS configuration (#1935)

This commit is contained in:
Adrien de Peretti
2022-12-12 19:24:37 +01:00
committed by GitHub
parent c2c38dd091
commit b5d6682db6
14 changed files with 70 additions and 15 deletions
@@ -0,0 +1,12 @@
import { buildRegexpIfValid } from "../build-regexp-if-valid"
describe("buildRegexpIfValid", function () {
it("should return either a regexp or undefined", () => {
expect(buildRegexpIfValid("abc")).not.toBeDefined()
expect(buildRegexpIfValid("/abc/")).toBeTruthy()
expect(buildRegexpIfValid("/ab#/[c]/ig")).toBeTruthy()
expect(buildRegexpIfValid("@ab#/[c]@ig")).toBeTruthy()
expect(buildRegexpIfValid("/ab/[c/ig")).not.toBeDefined()
expect(buildRegexpIfValid("/abc/gig")).not.toBeDefined()
})
})
@@ -0,0 +1,16 @@
import { parseCorsOrigins } from "../parse-cors-origins"
describe("parseCorsOrigins", function () {
it("should return an array containing both string and regexp", () => {
const cors = "abc,/abc/,/ab#/[c]/ig,@ab#/[c]@ig,/ab/[c/ig,/abc/gig"
const [origin1, origin2, origin3, origin4, origin5, origin6] =
parseCorsOrigins(cors)
expect(typeof origin1).toBe("string")
expect(origin2).toBeInstanceOf(RegExp)
expect(origin3).toBeInstanceOf(RegExp)
expect(origin4).toBeInstanceOf(RegExp)
expect(typeof origin5).toBe("string")
expect(typeof origin6).toBe("string")
})
})
@@ -0,0 +1,10 @@
export function buildRegexpIfValid(str: string): RegExp | undefined {
try {
const m = str.match(/^([\/~@;%#'])(.*?)\1([gimsuy]*)$/)
if (m) {
return new RegExp(m[2], m[3])
}
} catch (e) {}
return
}
+4 -1
View File
@@ -1,10 +1,13 @@
export { buildRegexpIfValid } from "./build-regexp-if-valid"
export { default as computerizeAmount } from "./computerize-amount"
export { countries, isoCountryLookup } from "./countries"
export { default as createRequireFromPath } from "./create-require-from-path"
export { default as MedusaError } from "./errors"
export { default as getConfigFile } from "./get-config-file"
export { default as humanizeAmount } from "./humanize-amount"
export { default as computerizeAmount } from "./computerize-amount"
export { indexTypes } from "./index-types"
export { parseCorsOrigins } from "./parse-cors-origins"
export { transformIdableFields } from "./transform-idable-fields"
export { default as Validator } from "./validator"
export { default as zeroDecimalCurrencies } from "./zero-decimal-currencies"
@@ -0,0 +1,7 @@
import { buildRegexpIfValid } from "./build-regexp-if-valid";
export function parseCorsOrigins(str: string): (string | RegExp)[] {
return str.split(",").map((subStr) => {
return buildRegexpIfValid(subStr) ?? subStr
})
}