@immjs/express-subdomain
Advanced tools
Comparing version 1.0.5 to 1.1.0
23
index.js
@@ -7,2 +7,6 @@ "use strict"; | ||
} | ||
let subdomains = subdomain.split('.').reverse(); | ||
const invalidSymbol = ['*', '@'].every((v) => (subdomains.includes(v)) === (subdomains[0] === v)); | ||
if (invalidSymbol) | ||
throw new Error(`There can not be any subdomains beyond '${invalidSymbol}'`); | ||
//check fn handles three params.. | ||
@@ -14,4 +18,19 @@ if (!fn || typeof fn !== "function" || fn.length < 3) { | ||
req._subdomainLevel || (req._subdomainLevel = 0); | ||
let relevantSubdomains = req.subdomains.slice(req._subdomainLevel); | ||
let match = subdomain.split('.').every((v, i) => v === '*' || v === relevantSubdomains[i]); | ||
let relevantSubdomains = req.subdomains.reverse().slice(req._subdomainLevel); | ||
let match = true; | ||
for (let i in subdomains) { | ||
const currentSubdomain = subdomains[i]; | ||
const currentRelevantSubdomain = relevantSubdomains[i]; | ||
if (currentSubdomain === '@' && currentRelevantSubdomain == undefined) { | ||
break; | ||
} | ||
if (currentSubdomain === '*') { | ||
req._subdomainLevel = Infinity; | ||
break; | ||
} | ||
if (currentSubdomain !== currentRelevantSubdomain) { | ||
match = false; | ||
break; | ||
} | ||
} | ||
if (match) { | ||
@@ -18,0 +37,0 @@ req._subdomainLevel++; |
29
index.ts
@@ -12,6 +12,11 @@ import express from "express"; | ||
export default function(subdomain: any, fn: any) { | ||
if(!subdomain || typeof subdomain !== "string") { | ||
if (!subdomain || typeof subdomain !== "string") { | ||
throw new Error("The first parameter must be a string representing the subdomain"); | ||
} | ||
} | ||
let subdomains = subdomain.split('.').reverse(); | ||
const invalidSymbol = ['*', '@'].every((v) => (subdomains.includes(v)) === (subdomains[0] === v)) | ||
if (invalidSymbol) throw new Error(`There can not be any subdomains beyond '${invalidSymbol}'`); | ||
//check fn handles three params.. | ||
@@ -24,6 +29,22 @@ if(!fn || typeof fn !== "function" || fn.length < 3) { | ||
req._subdomainLevel ||= 0; | ||
let relevantSubdomains = req.subdomains.slice(req._subdomainLevel); | ||
let relevantSubdomains = req.subdomains.reverse().slice(req._subdomainLevel); | ||
let match = subdomain.split('.').every((v, i) => v === '*' || v === relevantSubdomains[i]); | ||
let match = true; | ||
for (let i in subdomains) { | ||
const currentSubdomain = subdomains[i]; | ||
const currentRelevantSubdomain = relevantSubdomains[i]; | ||
if (currentSubdomain === '@' && currentRelevantSubdomain == undefined) { | ||
break; | ||
} | ||
if (currentSubdomain === '*') { | ||
req._subdomainLevel = Infinity; | ||
break; | ||
} | ||
if (currentSubdomain !== currentRelevantSubdomain) { | ||
match = false; | ||
break; | ||
} | ||
} | ||
if(match) { | ||
@@ -30,0 +51,0 @@ req._subdomainLevel ++; |
{ | ||
"name": "@immjs/express-subdomain", | ||
"version": "1.0.5", | ||
"version": "1.1.0", | ||
"repository": { | ||
@@ -5,0 +5,0 @@ "type": "git", |
20070
194