hassanzohdy/collection/where
Claude Code and agent skill by hassanzohdy/collection
- community
Checking that the SKILL.md file is still in the repository.
Full reference for the `where(...)` operator-based filter (50+ operators: `=`, `>`, `like`, `between`, `in`, `is`, `instanceof`, `exists`, `empty`, `null`, `regex`, ...) plus shorthand helpers (`whereIn`, `whereNot`, `whereBetween`, `whereNotBetween`, `whereEmpty`, `whereNotEmpty`, `heavy`, `whereNull`, `whereNotNull`, `whereUndefined`, `whereNotUndefined`, `whereExists`, `whereNotExists`) and `firstWhere` / `lastWhere`. Documents the broken primitive-mode and `is undefined` quirks plus the `Operators` constant.
Install
npx vskill@latest install hassanzohdy/collection/whereSKILL.md
where(...) — operator-based filtering
where(...) is the workhorse filter. It supports three argument shapes and ~50 operators.
Signatures
The wrapper looks at args.length and at whether the first arg is a known operator (Operators is a constant as const tuple of every string the switch handles).
Operators
| Group | Aliases | |
|---|---|---|
| Equals | =, equals | |
| Not equals | !=, not, not equals | |
| Greater than | >, gt | |
| Greater than or equal | >=, gte | |
| Less than | <, lt | |
| Less than or equal | <=, lte | |
| Substring (case-insensitive) | like, % | |
| Not substring | not like, !% |
like/not liketreat a string value as a literal substring — it is regex-escapedbefore matching, so.,*,(a+)+match those characters rather than acting as apattern. (Before v1.4.0 the value was compiled as a raw regex, which was a ReDoS risk whenit came from a search box.) Pass an actualRegExpas the value when you want a pattern.
| Regex test | regex (and: passing a RegExp as the value with no operator) | |
|---|---|---|
| Set membership | in | |
| Not in set | not in, !in | |
| Range (inclusive) | between, <> | |
| Not range | not between, !between, !<> | |
Substring (case-sensitive on .includes) | contains | |
| Not contains | not contains, !contains | |
| Starts with | starts with | |
| Not starts with | not starts with, !starts with | |
| Ends with | ends with | |
| Not ends with | not ends with, !ends with | |
| Is null | null, is null | |
| Not null | is not null, !null | |
| Is undefined | undefined, is undefined | |
| Not undefined | is not undefined, !undefined | |
| Exists | exists | |
| Not exists | not exists, !exists | |
| Is true | true, is true | |
| Not true | !true, is not true | |
| Is false | false, is false | |
| Not false | !false, is not false | |
| typeof | is, typeof | |
| Not typeof | is not, !is, not typeof | |
| instanceof | instanceof, is a | |
| Not instanceof | not instanceof, !instanceof, is not a, !is a | |
Empty (via @mongez/supportive-is' isEmpty) | empty, is empty | |
| Not empty | not empty, is not empty, !empty |
Examples
Shorthand helpers
For common operators, there are dedicated methods that read more naturally:
| Helper | Equivalent where call | |
|---|---|---|
whereIn(key, values) / whereIn(values) | where(key, "in", values) | |
whereNot(key, value) / whereNot(value) | where(key, "!=", value) | |
whereBetween(key, [min, max]) | where(key, "between", [min, max]) | |
whereNotBetween(key, [min, max]) | where(key, "not between", [min, max]) | |
whereEmpty(key?) | where(key, "is empty") (or applied to items directly when key is omitted) | |
whereNotEmpty(key?) / heavy(key?) | where(key, "is not empty") | |
whereNull(key?) | where(key, "is null") | |
whereNotNull(key?) | where(key, "is not null") | |
whereUndefined(key?) | where(key, "is undefined") | |
whereNotUndefined(key?) | where(key, "is not undefined") | |
whereExists(key) | where(key, "exists") | |
whereNotExists(key) | where(key, "not exists") |
firstWhere / lastWhere
Equivalent to c.where(...).first() / c.where(...).last().
Behaviors worth knowing
- `getItemValue(item, key)` prefers
item.get(key)when it exists (lets you pass model classes), otherwise checks for a direct own property on the item, then falls back to dot-notationget(item, key). - Comparing arrays / objects uses
areEqualfrom@mongez/reinforcements, which is a deep equality check. - Date comparison (
Dateinstance vsDateinstance) uses+itemValue === +value(numeric time). - Empty uses
@mongez/supportive-is'isEmpty— true fornull,undefined,"",[],{}, etc. - `is undefined` vs `not exists`: own-but-explicitly-
undefinedkeys matchwhere(key, "is undefined"); truly-missing keys (key absent on the object) matchwhere(key, "not exists"). The two are distinguishable thanks to an own-property check ingetItemValuebefore falling back to the dottedget()helper.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/where/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/hassanzohdy/collection/where)