vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
51 lines (48 loc) • 7.81 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { interpolatePattern } from '../config/interpolatePattern.js';
import { parsePattern } from '../config/parsePattern.js';
function createPatternMatcher(pattern, defaultPattern, options = {}) {
const {
values = {},
handleDeserialized = false,
fallback = () => false,
throwOnInvalid = false
} = options;
const primaryMatcher = resolvePattern(pattern, values, handleDeserialized);
if (primaryMatcher) {
return primaryMatcher;
}
const defaultMatcher = resolvePattern(defaultPattern, values, handleDeserialized);
if (defaultMatcher) {
return defaultMatcher;
}
if (throwOnInvalid) {
throw new Error("No valid pattern provided");
}
return fallback;
}
function resolvePattern(pattern, values, handleDeserialized) {
if (typeof pattern === "function") {
return pattern;
}
if (pattern instanceof RegExp) {
return (input) => pattern.test(input);
}
if (typeof pattern === "string") {
const interpolatedPattern = Object.keys(values).length > 0 ? interpolatePattern(pattern, values) : pattern;
const regex = parsePattern(interpolatedPattern);
return (input) => regex.test(input);
}
if (handleDeserialized && typeof pattern === "object" && pattern != null && "__isRegExp" in pattern) {
const deserialized = pattern;
const regex = new RegExp(deserialized.source, deserialized.flags);
return (input) => regex.test(input);
}
return null;
}
export { createPatternMatcher };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9oZWxwZXJzL2NyZWF0ZVBhdHRlcm5NYXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVnRXhwT3B0LCBEZXNlcmlhbGl6ZWRSZWdFeHAgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGludGVycG9sYXRlUGF0dGVybiB9IGZyb20gXCIuLi9jb25maWcvaW50ZXJwb2xhdGVQYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVBhdHRlcm4gfSBmcm9tIFwiLi4vY29uZmlnL3BhcnNlUGF0dGVybi5qc1wiO1xuXG4vKipcbiAqIFVuaWZpZWQgcGF0dGVybiBtYXRjaGVyIHRoYXQgY29uc29saWRhdGVzIHBhdHRlcm4gcmVzb2x1dGlvbiBsb2dpY1xuICogdXNlZCBhY3Jvc3MgcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIgYW5kIHJlc29sdmVQYXR0ZXJuV2l0aFZhbHVlcy5cbiAqIFxuICogVGhpcyBoZWxwZXIgcmVkdWNlcyBjb2RlIGR1cGxpY2F0aW9uIGFuZCBwcm92aWRlcyBjb25zaXN0ZW50IHBhdHRlcm4gbWF0Y2hpbmdcbiAqIGJlaGF2aW9yIGFjcm9zcyB0aGUgY29kZWJhc2UuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBQYXR0ZXJuTWF0Y2hlck9wdGlvbnMge1xuICAvKiogVmFsdWVzIGZvciBzdHJpbmcgaW50ZXJwb2xhdGlvbiAqL1xuICB2YWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogV2hldGhlciB0byBoYW5kbGUgZGVzZXJpYWxpemVkIFJlZ0V4cCBvYmplY3RzICovXG4gIGhhbmRsZURlc2VyaWFsaXplZD86IGJvb2xlYW47XG4gIC8qKiBEZWZhdWx0IGZhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gbm8gcGF0dGVybiBtYXRjaGVzICovXG4gIGZhbGxiYWNrPzogKGlucHV0OiBzdHJpbmcsIG1vZHVsZUlkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byB0aHJvdyBlcnJvciBvbiBpbnZhbGlkIHBhdHRlcm5zICh2cyB1c2luZyBmYWxsYmFjaykgKi9cbiAgdGhyb3dPbkludmFsaWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gZnJvbSB2YXJpb3VzIHBhdHRlcm4gdHlwZXMuXG4gKiBDb25zb2xpZGF0ZXMgbG9naWMgZnJvbSByZXNvbHZlRGlyZWN0aXZlTWF0Y2hlciBhbmQgcmVzb2x2ZVBhdHRlcm5XaXRoVmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0dGVybk1hdGNoZXIoXG4gIHBhdHRlcm4/OiBSZWdFeHBPcHQsXG4gIGRlZmF1bHRQYXR0ZXJuPzogUmVnRXhwT3B0IHwgKChpbnB1dDogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT4gYm9vbGVhbiksXG4gIG9wdGlvbnM6IFBhdHRlcm5NYXRjaGVyT3B0aW9ucyA9IHt9XG4pOiAoaW5wdXQ6IHN0cmluZywgbW9kdWxlSWQ/OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgdmFsdWVzID0ge30sXG4gICAgaGFuZGxlRGVzZXJpYWxpemVkID0gZmFsc2UsXG4gICAgZmFsbGJhY2sgPSAoKSA9PiBmYWxzZSxcbiAgICB0aHJvd09uSW52YWxpZCA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIFRyeSBwcmltYXJ5IHBhdHRlcm4gZmlyc3RcbiAgY29uc3QgcHJpbWFyeU1hdGNoZXIgPSByZXNvbHZlUGF0dGVybihwYXR0ZXJuLCB2YWx1ZXMsIGhhbmRsZURlc2VyaWFsaXplZCk7XG4gIGlmIChwcmltYXJ5TWF0Y2hlcikge1xuICAgIHJldHVybiBwcmltYXJ5TWF0Y2hlcjtcbiAgfVxuXG4gIC8vIFRyeSBkZWZhdWx0IHBhdHRlcm5cbiAgY29uc3QgZGVmYXVsdE1hdGNoZXIgPSByZXNvbHZlUGF0dGVybihkZWZhdWx0UGF0dGVybiwgdmFsdWVzLCBoYW5kbGVEZXNlcmlhbGl6ZWQpO1xuICBpZiAoZGVmYXVsdE1hdGNoZXIpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1hdGNoZXI7XG4gIH1cblxuICAvLyBIYW5kbGUgaW52YWxpZCBwYXR0ZXJuc1xuICBpZiAodGhyb3dPbkludmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBwYXR0ZXJuIHByb3ZpZGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciB0byByZXNvbHZlIGEgc2luZ2xlIHBhdHRlcm4gdG8gYSBtYXRjaGVyIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVQYXR0ZXJuKFxuICBwYXR0ZXJuOiBSZWdFeHBPcHQgfCAoKGlucHV0OiBzdHJpbmcsIG1vZHVsZUlkPzogc3RyaW5nKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBoYW5kbGVEZXNlcmlhbGl6ZWQ6IGJvb2xlYW5cbik6ICgoaW5wdXQ6IHN0cmluZywgbW9kdWxlSWQ/OiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgbnVsbCB7XG4gIC8vIEZ1bmN0aW9uIHBhdHRlcm5zXG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHBhdHRlcm47XG4gIH1cblxuICAvLyBSZWdFeHAgcGF0dGVybnNcbiAgaWYgKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gKGlucHV0OiBzdHJpbmcpID0+IHBhdHRlcm4udGVzdChpbnB1dCk7XG4gIH1cblxuICAvLyBTdHJpbmcgcGF0dGVybnMgKHdpdGggb3B0aW9uYWwgaW50ZXJwb2xhdGlvbilcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdGVkUGF0dGVybiA9IE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID4gMCBcbiAgICAgID8gaW50ZXJwb2xhdGVQYXR0ZXJuKHBhdHRlcm4sIHZhbHVlcykgXG4gICAgICA6IHBhdHRlcm47XG4gICAgY29uc3QgcmVnZXggPSBwYXJzZVBhdHRlcm4oaW50ZXJwb2xhdGVkUGF0dGVybik7XG4gICAgcmV0dXJuIChpbnB1dDogc3RyaW5nKSA9PiByZWdleC50ZXN0KGlucHV0KTtcbiAgfVxuXG4gIC8vIERlc2VyaWFsaXplZCBSZWdFeHAgcGF0dGVybnMgKGZvciB3b3JrZXIgY29tbXVuaWNhdGlvbilcbiAgaWYgKFxuICAgIGhhbmRsZURlc2VyaWFsaXplZCAmJlxuICAgIHR5cGVvZiBwYXR0ZXJuID09PSBcIm9iamVjdFwiICYmXG4gICAgcGF0dGVybiAhPSBudWxsICYmXG4gICAgXCJfX2lzUmVnRXhwXCIgaW4gcGF0dGVyblxuICApIHtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBwYXR0ZXJuIGFzIERlc2VyaWFsaXplZFJlZ0V4cDtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZGVzZXJpYWxpemVkLnNvdXJjZSwgZGVzZXJpYWxpemVkLmZsYWdzKTtcbiAgICByZXR1cm4gKGlucHV0OiBzdHJpbmcpID0+IHJlZ2V4LnRlc3QoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUEyQk8sU0FBUyxvQkFDZCxDQUFBLE9BQUEsRUFDQSxjQUNBLEVBQUEsT0FBQSxHQUFpQyxFQUNjLEVBQUE7QUFDL0MsRUFBTSxNQUFBO0FBQUEsSUFDSixTQUFTLEVBQUM7QUFBQSxJQUNWLGtCQUFxQixHQUFBLEtBQUE7QUFBQSxJQUNyQixXQUFXLE1BQU0sS0FBQTtBQUFBLElBQ2pCLGNBQWlCLEdBQUE7QUFBQSxHQUNmLEdBQUEsT0FBQTtBQUdKLEVBQUEsTUFBTSxjQUFpQixHQUFBLGNBQUEsQ0FBZSxPQUFTLEVBQUEsTUFBQSxFQUFRLGtCQUFrQixDQUFBO0FBQ3pFLEVBQUEsSUFBSSxjQUFnQixFQUFBO0FBQ2xCLElBQU8sT0FBQSxjQUFBO0FBQUE7QUFJVCxFQUFBLE1BQU0sY0FBaUIsR0FBQSxjQUFBLENBQWUsY0FBZ0IsRUFBQSxNQUFBLEVBQVEsa0JBQWtCLENBQUE7QUFDaEYsRUFBQSxJQUFJLGNBQWdCLEVBQUE7QUFDbEIsSUFBTyxPQUFBLGNBQUE7QUFBQTtBQUlULEVBQUEsSUFBSSxjQUFnQixFQUFBO0FBQ2xCLElBQU0sTUFBQSxJQUFJLE1BQU0sMkJBQTJCLENBQUE7QUFBQTtBQUc3QyxFQUFPLE9BQUEsUUFBQTtBQUNUO0FBS0EsU0FBUyxjQUFBLENBQ1AsT0FDQSxFQUFBLE1BQUEsRUFDQSxrQkFDd0QsRUFBQTtBQUV4RCxFQUFJLElBQUEsT0FBTyxZQUFZLFVBQVksRUFBQTtBQUNqQyxJQUFPLE9BQUEsT0FBQTtBQUFBO0FBSVQsRUFBQSxJQUFJLG1CQUFtQixNQUFRLEVBQUE7QUFDN0IsSUFBQSxPQUFPLENBQUMsS0FBQSxLQUFrQixPQUFRLENBQUEsSUFBQSxDQUFLLEtBQUssQ0FBQTtBQUFBO0FBSTlDLEVBQUksSUFBQSxPQUFPLFlBQVksUUFBVSxFQUFBO0FBQy9CLElBQU0sTUFBQSxtQkFBQSxHQUFzQixNQUFPLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUFFLFNBQVMsQ0FDckQsR0FBQSxrQkFBQSxDQUFtQixPQUFTLEVBQUEsTUFBTSxDQUNsQyxHQUFBLE9BQUE7QUFDSixJQUFNLE1BQUEsS0FBQSxHQUFRLGFBQWEsbUJBQW1CLENBQUE7QUFDOUMsSUFBQSxPQUFPLENBQUMsS0FBQSxLQUFrQixLQUFNLENBQUEsSUFBQSxDQUFLLEtBQUssQ0FBQTtBQUFBO0FBSTVDLEVBQUEsSUFDRSxzQkFDQSxPQUFPLE9BQUEsS0FBWSxZQUNuQixPQUFXLElBQUEsSUFBQSxJQUNYLGdCQUFnQixPQUNoQixFQUFBO0FBQ0EsSUFBQSxNQUFNLFlBQWUsR0FBQSxPQUFBO0FBQ3JCLElBQUEsTUFBTSxRQUFRLElBQUksTUFBQSxDQUFPLFlBQWEsQ0FBQSxNQUFBLEVBQVEsYUFBYSxLQUFLLENBQUE7QUFDaEUsSUFBQSxPQUFPLENBQUMsS0FBQSxLQUFrQixLQUFNLENBQUEsSUFBQSxDQUFLLEtBQUssQ0FBQTtBQUFBO0FBRzVDLEVBQU8sT0FBQSxJQUFBO0FBQ1Q7Ozs7In0=