Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
9a5a144
WIP
gordonbrander May 31, 2024
3d58db2
More progress toward cell and stream types
gordonbrander May 31, 2024
3d3f053
Add notes on FRP libs and papers
gordonbrander May 31, 2024
40414f0
More notes
gordonbrander Jun 1, 2024
5d8a679
More notes
gordonbrander Jun 1, 2024
2c92508
More notes
gordonbrander Jun 1, 2024
6880092
Working on read-only signals and computed cells
gordonbrander Jun 2, 2024
1b3db09
Microtask queue-based topological sort
gordonbrander Jun 4, 2024
09689af
More notes
gordonbrander Jun 4, 2024
50a75f3
Simplified impl
gordonbrander Jun 4, 2024
257c227
Remove dead code
gordonbrander Jun 4, 2024
f9c57a3
First pass on transaction-based push-pull FRP
gordonbrander Jun 5, 2024
07fae2c
Update type sig of generateStream
gordonbrander Jun 5, 2024
0d1e2e5
Add typescript overloads for createComputed
gordonbrander Jun 5, 2024
3b0ae76
Better types
gordonbrander Jun 5, 2024
d0541d9
Add separate stream phase to transaction
gordonbrander Jun 5, 2024
32e3799
Clear streams after commit
gordonbrander Jun 5, 2024
897e5f1
Update notes
gordonbrander Jun 6, 2024
7403aec
Add note
gordonbrander Jun 6, 2024
ced4cf5
Add notes
gordonbrander Jun 6, 2024
7574281
Implement signals and streams w separate timelines
gordonbrander Jun 6, 2024
bce9c41
Add pipe and operators
gordonbrander Jun 6, 2024
4df5930
Separate sink/effect from type
gordonbrander Jun 6, 2024
ab6957e
Update notes
gordonbrander Jun 6, 2024
9b7ade8
Add select operator
gordonbrander Jun 6, 2024
ab5531b
Update package
gordonbrander Jun 6, 2024
780fbb6
Update tsconfig
gordonbrander Jun 6, 2024
ad55d54
Fix select operator
gordonbrander Jun 6, 2024
18704d9
Remove index (not used rn)
gordonbrander Jun 6, 2024
9a319a9
Rename publisher
gordonbrander Jun 6, 2024
614e9a8
Merge remote-tracking branch 'origin/main' into 2024-05-30-common-frp
gordonbrander Jun 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add select operator
  • Loading branch information
gordonbrander committed Jun 6, 2024
commit 9b7ade8b55d41d366343a4da476885cf9d2c68cc
14 changes: 12 additions & 2 deletions sketches/2024-05-30-common-frp/src/operators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,22 @@ export const pipe: Pipe = (
/** Map a stream of values */
export const map = <T, U>(
transform: UnaryFn<T, U>
) => (stream: Stream<T>) => mapStream(stream, transform)
) => (
stream: Stream<T>
) => mapStream(stream, transform)

export const select = <T extends object, U extends keyof T & string>(
key: U
) => (
stream: Stream<T>
) => mapStream(stream, (o: T) => o[key])

/** Filter a stream of values using a predicate function. */
export const filter = <T>(
predicate: UnaryFn<T, boolean>
) => (stream: Stream<T>) => filterStream(stream, predicate)
) => (
stream: Stream<T>
) => filterStream(stream, predicate)

/**
* Zip two streams together.
Expand Down
12 changes: 12 additions & 0 deletions sketches/2024-05-30-common-frp/src/stream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@ export const map = <T, U>(
return sink(upstream, value => send(transform(value)))
})

/** Get a key from an object */
const getKey = <T extends object, U extends keyof T & string>(
obj: T,
key: U
) => obj[key];

/** Select a key from an object */
export const select = <T extends object, U extends keyof T & string>(
upstream: Stream<T>,
key: U
) => map(upstream, (o: T) => getKey(o, key))

/** Filter a stream of values using a predicate function. */
export const filter = <T>(
upstream: Stream<T>,
Expand Down