Rationalize concept of OverlayFetcher, BrowserFetcher, NodeFetcher, etc.
Currently BrowserFetcher has a localWriteablePath that it traps out to LocalFilesystem.
Instead, create a FilesystemFetcher, (and in other cases, you might have e.g. a FirebaseFetcher).
Fetcher grows a validPath() which errors if it's a prefix this fetcher doesn't know how to deal with.
And then add a MetaFetcher, that takes a default fetcher, and then can registerHandler(pathPrefix, subFetcher) that will be called out to when it matches.
Fetcher.listSprouts() doesn't take paths, it just is supposed to list any sprouts it knows of. And the MetaFetcher calls sub ones.
Related to #19
[x] remove localWriteablePath
[x] Delete overlayFetcher
[x] fetcher-filestystem -> fetcher-localstorage
[x] Create fetcher-directoryinfo
[x] Remove localWriteablePath from every fetcher
[x] Remove overlayFetcher
[x] Move fetchers to be in src/fetchers
[x] Sprout has a metaFetcher, not a fetcher. (in app, instead of localWriteablePath, hook a Filesystem sub path)
Rationalize concept of OverlayFetcher, BrowserFetcher, NodeFetcher, etc.
Currently BrowserFetcher has a localWriteablePath that it traps out to LocalFilesystem.
Instead, create a FilesystemFetcher, (and in other cases, you might have e.g. a FirebaseFetcher).
Fetcher grows a validPath() which errors if it's a prefix this fetcher doesn't know how to deal with.
And then add a MetaFetcher, that takes a default fetcher, and then can registerHandler(pathPrefix, subFetcher) that will be called out to when it matches.
Fetcher.listSprouts() doesn't take paths, it just is supposed to list any sprouts it knows of. And the MetaFetcher calls sub ones.
Related to #19
src/fetchers