Full ID matcher
This commit is contained in:
parent
88467fcee4
commit
d3c649f684
47
src/common/full-matcher.ts
Normal file
47
src/common/full-matcher.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { IMessage } from '../types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare full IDs of rooms or users.
|
||||||
|
* @param compare ID to compare
|
||||||
|
* @param id ID to compare against
|
||||||
|
*/
|
||||||
|
export function fullIDMatcher(compare: string, id: string): boolean {
|
||||||
|
if (!compare) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const splitter = compare.split('/');
|
||||||
|
|
||||||
|
if (id === '*') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const spl = id.split('/');
|
||||||
|
if (spl[0] !== splitter[0] || (spl[1] !== splitter[1] && spl[1] !== '*')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match server cases, things like Discord need this
|
||||||
|
if (spl.length > 3 && spl[2].indexOf('s:') === 0 && splitter.length > 3) {
|
||||||
|
if (spl[2] !== splitter[3] && spl[2] !== '*') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spl[3] !== splitter[2] && spl[3] !== '*') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
// Match regular cases
|
||||||
|
} else if (spl.length === 3 && splitter.length >= 3) {
|
||||||
|
if (spl[2] !== splitter[2] && spl[2] !== '*') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
// Match wildcard instance
|
||||||
|
} else if (spl.length === 2 && spl[1] === '*') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
@ -1,3 +1,4 @@
|
|||||||
export * from './http';
|
export * from './http';
|
||||||
export * from './time';
|
export * from './time';
|
||||||
export * from './sanitize';
|
export * from './sanitize';
|
||||||
|
export * from './full-matcher';
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically execute method on plugin initialization
|
||||||
|
*/
|
||||||
export function Auto(): (...args: any[]) => void {
|
export function Auto(): (...args: any[]) => void {
|
||||||
return (
|
return (
|
||||||
target: any,
|
target: any,
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Declare this plugin as one that the user can configure.
|
||||||
|
* @param defconf Default configuration
|
||||||
|
*/
|
||||||
export function Configurable(defconf: any): Function {
|
export function Configurable(defconf: any): Function {
|
||||||
return (constructor: Function): void => {
|
return (constructor: Function): void => {
|
||||||
constructor.prototype.__defconf = defconf;
|
constructor.prototype.__defconf = defconf;
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Fire the following method automatically when a dependency is (re)loaded.
|
||||||
|
* @param dep Name of the dependency
|
||||||
|
*/
|
||||||
export function DependencyLoad(dep: string): (...args: any[]) => void {
|
export function DependencyLoad(dep: string): (...args: any[]) => void {
|
||||||
return (
|
return (
|
||||||
target: any,
|
target: any,
|
||||||
@ -25,6 +29,10 @@ export function DependencyLoad(dep: string): (...args: any[]) => void {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire the following method automatically when a dependency is unloaded.
|
||||||
|
* @param dep Name of the dependency
|
||||||
|
*/
|
||||||
export function DependencyUnload(dep: string): (...args: any[]) => void {
|
export function DependencyUnload(dep: string): (...args: any[]) => void {
|
||||||
return (
|
return (
|
||||||
target: any,
|
target: any,
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Listen for an event targeted towards this plugin.
|
||||||
|
* @param event Event name
|
||||||
|
*/
|
||||||
export function EventListener(event: string): (...args: any[]) => void {
|
export function EventListener(event: string): (...args: any[]) => void {
|
||||||
return (
|
return (
|
||||||
target: any,
|
target: any,
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Declare this plugin as one that utilises services.
|
||||||
|
* @param servtype Service class, usually a Protocol
|
||||||
|
*/
|
||||||
export function InjectService(servtype: any): Function {
|
export function InjectService(servtype: any): Function {
|
||||||
return (constructor: Function): void => {
|
return (constructor: Function): void => {
|
||||||
constructor.prototype.__service = servtype;
|
constructor.prototype.__service = servtype;
|
||||||
|
@ -45,6 +45,7 @@ export interface IPluginManifest {
|
|||||||
fullPath: string;
|
fullPath: string;
|
||||||
main: string;
|
main: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
tags?: string[];
|
||||||
version: string;
|
version: string;
|
||||||
description: string;
|
description: string;
|
||||||
dependencies: string[];
|
dependencies: string[];
|
||||||
|
@ -15,16 +15,21 @@ export enum EMessageType {
|
|||||||
export interface IMessageTarget {
|
export interface IMessageTarget {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
server?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMessage {
|
export interface IMessage {
|
||||||
|
id?: any;
|
||||||
type: EMessageType;
|
type: EMessageType;
|
||||||
data: any;
|
data: any;
|
||||||
source: IPlugin | Protocol;
|
source: Protocol;
|
||||||
guest?: boolean;
|
guest?: boolean;
|
||||||
target?: IMessageTarget;
|
target?: IMessageTarget;
|
||||||
sender?: IMessageTarget;
|
sender?: IMessageTarget;
|
||||||
|
fullSenderID?: string;
|
||||||
|
fullRoomID?: string;
|
||||||
time: Date;
|
time: Date;
|
||||||
|
direct?: boolean;
|
||||||
resolved: boolean;
|
resolved: boolean;
|
||||||
resolve(...args: any[]): void;
|
resolve(...args: any[]): void;
|
||||||
}
|
}
|
||||||
|
33
tslint.json
33
tslint.json
@ -14,10 +14,6 @@
|
|||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
},
|
},
|
||||||
"eofline": true,
|
"eofline": true,
|
||||||
"import-blacklist": [
|
|
||||||
true,
|
|
||||||
"rxjs/Rx"
|
|
||||||
],
|
|
||||||
"import-spacing": true,
|
"import-spacing": true,
|
||||||
"indent": {
|
"indent": {
|
||||||
"options": [
|
"options": [
|
||||||
@ -121,33 +117,6 @@
|
|||||||
"check-type",
|
"check-type",
|
||||||
"check-typecast"
|
"check-typecast"
|
||||||
]
|
]
|
||||||
},
|
}
|
||||||
"component-class-suffix": true,
|
|
||||||
"contextual-lifecycle": true,
|
|
||||||
"directive-class-suffix": true,
|
|
||||||
"no-conflicting-lifecycle": true,
|
|
||||||
"no-host-metadata-property": true,
|
|
||||||
"no-input-rename": true,
|
|
||||||
"no-inputs-metadata-property": true,
|
|
||||||
"no-output-native": true,
|
|
||||||
"no-output-on-prefix": true,
|
|
||||||
"no-output-rename": true,
|
|
||||||
"no-outputs-metadata-property": true,
|
|
||||||
"template-banana-in-box": true,
|
|
||||||
"template-no-negated-async": true,
|
|
||||||
"use-lifecycle-interface": true,
|
|
||||||
"use-pipe-transform-interface": true,
|
|
||||||
"directive-selector": [
|
|
||||||
true,
|
|
||||||
"attribute",
|
|
||||||
"app",
|
|
||||||
"camelCase"
|
|
||||||
],
|
|
||||||
"component-selector": [
|
|
||||||
true,
|
|
||||||
"element",
|
|
||||||
"app",
|
|
||||||
"kebab-case"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user