1.0.8 • Published 2 years ago
rule101 v1.0.8
rule101
rule101 is a human-readable way of creating rules that returns true or an error message (string)
setup
import { createUseRules, combineRuleDefinitions } from "rule101";
import stringRuleDefinitions from "./stringRuleDefinitions.js";
import arrayRuleDefinitions from "./arrayRuleDefinitions.js";
export const useStringRules = createUseRules(stringRuleDefinitions);
export const useArrayRules = createUseRules(arrayRuleDefinitions);
const allRuleDefinitions = combineRuleDefinitions(
stringRuleDefinitions,
arrayRuleDefinitions
);
export const useRules = createUseRules(allRuleDefinitions);
where ./stringRuleDefinitions.js is;
export default {
isNotBlankString: () => ({
test: (val) => val === "",
msg: "cannot accept blank string",
}),
stringDoesNotContainX: (someString) => ({
test: (val) => !val.includes(someString),
msg: `cannot contain ${someString}`,
}),
stringMustContainX: (someString) => ({
test: (val) => val.includes(someString),
msg: `must contain ${someString}`,
}),
stringMustContainWord1andWord2: (w1, w2) => ({
test: (val) => val.includes(w1) && val.includes(w2),
msg: `must contain ${x} & ${y}`,
}),
stringContainsA: () => ({
test: (val) => val.includes("a"),
msg: "cannot contain a",
}),
stringContainsB: () => ({
test: (val) => val.includes("b"),
msg: "cannot contain b",
}),
};
implementation
import { useStringRules } from "src/rules";
const { stringMustContainXandY, stringContainsA } = useStringRules();
// vue-quasar input in template - other patterns work similarly
<q-input :rules="[stringMustContainXandY('word1','word2'), stringContainsA()]" />
be more specific if not using a bundler
ts;dr (too sarcastic; don't read) let's be honest, no one really knows how webpack works. If this package appears to be a drain on resources, you may be better to be explicit anyway...
import { useStringRules } from "src/rules";
const { stringMustContainXandY, stringContainsA } = useStringRules(['stringMustContainXandY', 'stringContainsA']);
// vue-quasar input in template - other patterns work similarly
<q-input :rules="[stringMustContainXandY('word1','word2'), stringContainsA()]" />
or
import { useStringRules } from "src/rules";
const { stringMustContainXandY } = useStringRules('stringMustContainXandY');
// vue-quasar input in template - other patterns work similarly
<q-input :rules="[stringMustContainXandY('word1','word2')]" />