tao represents a new way of programming
| package | description | docs page |
|---|---|---|
npm @tao.js/core |
Core Javascript implementation of the TAO ☯ programming paradigm | tao.js.org |
npm @tao.js/utils |
Extensions to Core used to build out the Signal Network | tao.js Utilities for Implementers |
npm @tao.js/react |
Adapter to use tao.js with React | Usage with React.js |
npm @tao.js/socket.io |
socket.io middleware to run tao.js seamlessly on server & client | tao.js for Socket.io |
npm @tao.js/koa |
Expose a TAO signal network over http using a koa app server | tao.js for Koa |
npm @tao.js/router |
connects url routing with tao.js | URL Handling with @tao.js/router |
Docs at tao.js.org
| char | code | symbol |
|---|---|---|
| ☯ | U+262F | yin-yang |
| ☰ | U+2630 | heaven |
| ☱ | U+2631 | lake |
| ☲ | U+2632 | fire |
| ☳ | U+2633 | thunder |
| ☴ | U+2634 | wind/wood |
| ☵ | U+2635 | water |
| ☶ | U+2636 | mountain |
| ☷ | U+2637 | earth |
This really needs to be filled out
The repo is designed to use nvm and npm/npx so that nothing is expected to be installed globally.
Additionally, to run the examples you should have Docker installed locally as well.
In the root of the repo:
$ nvm install
$ npm install
$ npx lerna bootstrap --hoistThe Example work are the folders inside the [examples] directory. To run them:
# in repo root dir
$ docker-compose up -d
# once db is running
$ cd examples/patois.api
$ npm start
$ cd ../patois.web
$ yarn startThis project uses commitizen and lerna + some githooks for prettier and jest to run.
When you have made some changes and staged them do not use git commit but instead use:
$ npx git-czWhich will start commitizen for you to generate the commit message in the desired conventional changelog format.
- bootstrapping
- add test coverage reporting
- complete
@tao.js/corepackage- refactor the
taoAPI for consistency - e.g. replace external references toterm=>t,action=>a,orient=>o - write unit tests
- adding inline handler unit tests
- adding async handler unit tests
- adding intercept handler unit tests
- removing inline handler unit tests
- removing async handler unit tests
- removing intercept handler unit tests
- using
asPromiseHook
- refactor intercept handler to
awaitlike inline handler calls do to match guarantee provided in docs
- refactor the
- complete initial
@tao.js/reactpackage- port
Adapter - port
Reactor - unit tests for
Adapter - unit tests for
Reactor - enable
Adapterto unset current component usingnullas a handler for TAO ACs - make trigram definition on
Adapter.addComponentHandler#2 method consistent with@tao.js/core
- port
- update to
@tao.js/react- goal: provide more idiomatic & declarative React components to use with tao.js (keep the old stuff)
- implement
Providerthat creates a Context used by the rest of the new React Components - supplies TAO Kernel to Consumers - implement
RenderHandlerwith child as function to render anything based on triggered handler - implement
SwitchHandlerthat works likeReactorto choose which direct childRenderHandlers to display based on signaled ACs - turns off/removesRenderHandlers likeAdapterunlike standaloneRenderHandler - implement
DataHandlerthat supplies data as aReact.ProvidertoRenderHandlerconsumers below from data passed into it'shandler - refactor
DataHandlerlogic for its context intocreateContextHandlerfor reuse and expose for public use - implement
withContextHOC - implement dynamic props (aka if props change after mounting) for
Provider - implement dynamic props (aka if props change after mounting) for
createContextHandler - implement dynamic props (aka if props change after mounting) for
DataHandler - implement dynamic props (aka if props change after mounting) for
withContext - implement dynamic props (aka if props change after mounting) for
RenderHandler - implement dynamic props (aka if props change after mounting) for
SwitchHandler - unit tests for
Provider - unit tests for
createContextHandler - unit tests for
DataHandler - unit tests for
withContext - unit tests for
RenderHandler - unit tests for
SwitchHandler - docs for
Provider - docs for
createContextHandler - docs for
DataHandler - docs for
withContext - docs for
RenderHandler - docs for
SwitchHandler
- complete
@tao.js/socket-iopackage- figure out how to ensure responses go to same requestor
- implement using new
Kernel/ socket - unit tests
- integrate into
patoisexample app - handle file uploads
- write phase 1 of
docs - complete
@tao.js/routerpackage- update location from AppCons
- initialize route config
- dynamically add routes
- dynamically remove routes
- get AppCon from incoming route
- integrate into
patoisexample app - update
docswith@tao.js/router - unit tests
- implement query string handling
- project infrastructure updates from stream npm security issue
- update deps w lodash deps security warnings from github
- update
lernato v3 - update
cz-lerna-changelogfor v3 support - include
makescripts for common chores - upgrade
@babelpackages - migrate to
yarnfor better dependency management? - use rollup.js for package build?
- complete
@tao.js/react-routerpackage- implement
Linkcomponent to set context - update
docswith@tao.js/react-routerrouting
- implement
- complete
@tao.js/koapackage- finish middleware design
- figure out how to ensure responses go to same requestor
- unit tests
- update
docswith@tao.js/koa
- complete
@tao/http-clientpackage- unit tests
- update
docswith@tao.js/http-client
- complete
@tao.js/connectpackage- unit tests
- update
docswith@tao.js/connect
- complete
@tao.js/pathpackage- unit tests
- update
docswith@tao.js/path
- complete
@tao.js/meshpackage- unit tests
- update
docswith@tao.js/mesh
- complete
@tao.js/featurepackage- unit tests
- update
docswith@tao.js/feature
- complete
@tao.js/clipackage- unit tests
- update
docswith@tao.js/cli
- complete
@tao.js/rest-makerpackage- unit tests
- update
docswith@tao.js/rest-maker
$ npm run build
$ npm run docs:makeupdate version in package.json
$ npm run chore:changelog
$ git commit # ensure changelog updated
$ npm run chore:publishFinding trigrams in code
- search w/ regex
{term}.*{action}.*{orient} - build VS Code extension to find and navigate to them: signalling and handling
Refactoring data passing from one part to another
Forwarding with passing all data parts
Auth Handling
Stop bouncing ALL trigrams with socket.io - use seive or filtering
Verify that Intercept Handlers prevent signals from going to the server via socket.io
Logging support and shipping all ACs somewhere
Capturing TRACE_IDs and SPANs (from inside the network?)
Joiner (for fork-join) will call handler when all provided trigrams have been seen
- used to coordinate out of race conditions *Continuous Joiner - after they've all been seen, it fires again any time one of the trigrams are seen with a cache of the previous values from the other ACs
Return array of AppCtx from handler
Since React changed the lifecycle methods in 16.9 the setDataContext is not called before
children mount. This causes an issue with timing as now setDataContext is being called by
the DataHandler in componentDidMount meaning that the children have already mounted.
This causes issues with hooks introduced in 16.13 and using the useContext hook within the
useTaoDataContext hook as it is receiving the context before it can be set and thus always
returning undefined to the component attempting to use the hook.
Reimplement the Data Context internals without changing the API to clients.
Build a hierarchy of data using the name as a key in the object.
Each successive context passes its parent context data in and sets its own key.
Each DataHandler, RenderHandler and DataConsumer will consume the same Context.
This will do the following things:
- behave more like React expects with the Context API storing data not accessors to data held somewhere else
- allow the originally desired override and tree of data to match the component tree
- make the
DataConsumercomponent actually work as desired - simplify the consumption of context, no more recursive
Context.Consumers needed - let
DataHandlers also have acontextprop to use data from a parent context in their handler