summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO.md2
-rw-r--r--src/eval/index.ts4
-rw-r--r--src/index.ts17
-rw-r--r--tests/basic.spec.ts12
4 files changed, 31 insertions, 4 deletions
diff --git a/TODO.md b/TODO.md
index b471dc5..e1523ba 100644
--- a/TODO.md
+++ b/TODO.md
@@ -6,7 +6,7 @@
- [ ] Parse: `{2, 5}` quantifiers
- [ ] Eval: `^$` start-end
- [ ] Parse, Eval: Not/Inverse
- - [ ] Func: filter
+ - [X] Func: filter
- [ ] Func: match
- [ ] Func: replace
diff --git a/src/eval/index.ts b/src/eval/index.ts
index d5c56c2..6656743 100644
--- a/src/eval/index.ts
+++ b/src/eval/index.ts
@@ -1,5 +1,5 @@
import { pipe } from 'fp-ts/function'
-import {takeLeftWhile} from 'fp-ts/lib/Array'
+import { takeLeftWhile } from 'fp-ts/lib/Array'
import { Expr, ListExpr } from '../types'
import { match } from '../utils'
@@ -26,7 +26,7 @@ export const find = <T>([startO, exprs, endO]: ListExpr, list: T[]): any => {
takeLeftWhile(x => check(expr)(x, i, list)),
)
console.log(x)
-
+
return true
},
_: _ => false,
diff --git a/src/index.ts b/src/index.ts
index 82eefe8..691d676 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,2 +1,17 @@
+import { fold, map } from 'fp-ts/lib/Either'
+import { identity, pipe } from 'fp-ts/lib/function'
+import { find } from './eval'
+import { parser } from './parser'
-export * from './parser';
+const toSourceString = (r: string | RegExp): string => typeof r === 'string' ? r : r.source
+
+export const filter = <T>(listExp: string | RegExp, list: T[]): T[] =>
+ pipe(
+ listExp,
+ toSourceString,
+ parser,
+ map(([lxp, _]) => find(lxp, list)),
+ fold(([err, _]) => {
+ throw new Error(err)
+ }, identity),
+ )
diff --git a/tests/basic.spec.ts b/tests/basic.spec.ts
new file mode 100644
index 0000000..d964053
--- /dev/null
+++ b/tests/basic.spec.ts
@@ -0,0 +1,12 @@
+import { filter } from '../src'
+
+describe('Basic tests', () => {
+ it('should do it', () => {
+ expect(filter(/\s/, [1, '2', 3, '4'])).toEqual(['2', '4'])
+ expect(filter(/\n/, [1, '2', 3, '4'])).toEqual([1, 3])
+ expect(filter(/\T/, [1, 0, '4', ''])).toEqual([1, '4'])
+ expect(filter(/\F/, [1, 0, '4', ''])).toEqual([0, ''])
+ expect(filter(/\F\T/, [1, 0, '4', ''])).toEqual([])
+ expect(filter(/\s\T/, [1, 0, '4', ''])).toEqual(['4'])
+ })
+})