@shivaedev/work-board 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/README.md +141 -3
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +9 -1
- package/dist/board.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/files/changes.d.ts +1 -0
- package/dist/files/changes.d.ts.map +1 -1
- package/dist/files/changes.js +1 -1
- package/dist/files/changes.js.map +1 -1
- package/dist/files/url.d.ts +2 -0
- package/dist/files/url.d.ts.map +1 -0
- package/dist/files/url.js +4 -0
- package/dist/files/url.js.map +1 -0
- package/dist/http/assets.d.ts.map +1 -1
- package/dist/http/assets.js +16 -1
- package/dist/http/assets.js.map +1 -1
- package/dist/http/identity.d.ts +7 -0
- package/dist/http/identity.d.ts.map +1 -0
- package/dist/http/identity.js +38 -0
- package/dist/http/identity.js.map +1 -0
- package/dist/http/page.d.ts +2 -1
- package/dist/http/page.d.ts.map +1 -1
- package/dist/http/page.js +29 -7
- package/dist/http/page.js.map +1 -1
- package/dist/http/search.d.ts +5 -0
- package/dist/http/search.d.ts.map +1 -0
- package/dist/http/search.js +11 -0
- package/dist/http/search.js.map +1 -0
- package/dist/http/work.d.ts +6 -0
- package/dist/http/work.d.ts.map +1 -0
- package/dist/http/work.js +22 -0
- package/dist/http/work.js.map +1 -0
- package/dist/metadata/backlinks.d.ts +8 -0
- package/dist/metadata/backlinks.d.ts.map +1 -0
- package/dist/metadata/backlinks.js +29 -0
- package/dist/metadata/backlinks.js.map +1 -0
- package/dist/metadata/fields.d.ts +29 -0
- package/dist/metadata/fields.d.ts.map +1 -0
- package/dist/metadata/fields.js +25 -0
- package/dist/metadata/fields.js.map +1 -0
- package/dist/metadata/links.d.ts +4 -0
- package/dist/metadata/links.d.ts.map +1 -0
- package/dist/metadata/links.js +18 -0
- package/dist/metadata/links.js.map +1 -0
- package/dist/metadata/locations.d.ts +3 -0
- package/dist/metadata/locations.d.ts.map +1 -0
- package/dist/metadata/locations.js +35 -0
- package/dist/metadata/locations.js.map +1 -0
- package/dist/metadata/model.d.ts +15 -0
- package/dist/metadata/model.d.ts.map +1 -0
- package/dist/metadata/model.js +13 -0
- package/dist/metadata/model.js.map +1 -0
- package/dist/metadata/parse.d.ts +16 -0
- package/dist/metadata/parse.d.ts.map +1 -0
- package/dist/metadata/parse.js +48 -0
- package/dist/metadata/parse.js.map +1 -0
- package/dist/metadata/problems.d.ts +4 -0
- package/dist/metadata/problems.d.ts.map +1 -0
- package/dist/metadata/problems.js +57 -0
- package/dist/metadata/problems.js.map +1 -0
- package/dist/metadata/relationshipLabel.d.ts +2 -0
- package/dist/metadata/relationshipLabel.d.ts.map +1 -0
- package/dist/metadata/relationshipLabel.js +13 -0
- package/dist/metadata/relationshipLabel.js.map +1 -0
- package/dist/metadata/schema.d.ts +34 -0
- package/dist/metadata/schema.d.ts.map +1 -0
- package/dist/metadata/schema.js +27 -0
- package/dist/metadata/schema.js.map +1 -0
- package/dist/metadata/sourceLinks.d.ts +5 -0
- package/dist/metadata/sourceLinks.d.ts.map +1 -0
- package/dist/metadata/sourceLinks.js +44 -0
- package/dist/metadata/sourceLinks.js.map +1 -0
- package/dist/page/backlinksHtml.d.ts +3 -0
- package/dist/page/backlinksHtml.d.ts.map +1 -0
- package/dist/page/backlinksHtml.js +16 -0
- package/dist/page/backlinksHtml.js.map +1 -0
- package/dist/page/board.d.ts +1 -1
- package/dist/page/board.d.ts.map +1 -1
- package/dist/page/board.js +14 -4
- package/dist/page/board.js.map +1 -1
- package/dist/page/client.d.ts +2 -1
- package/dist/page/client.d.ts.map +1 -1
- package/dist/page/client.js +65 -7
- package/dist/page/client.js.map +1 -1
- package/dist/page/criteriaEvidence.d.ts +4 -0
- package/dist/page/criteriaEvidence.d.ts.map +1 -0
- package/dist/page/criteriaEvidence.js +27 -0
- package/dist/page/criteriaEvidence.js.map +1 -0
- package/dist/page/diagrams.d.ts +1 -1
- package/dist/page/diagrams.d.ts.map +1 -1
- package/dist/page/diagrams.js +12 -4
- package/dist/page/diagrams.js.map +1 -1
- package/dist/page/document.d.ts +1 -1
- package/dist/page/document.d.ts.map +1 -1
- package/dist/page/document.js +6 -3
- package/dist/page/document.js.map +1 -1
- package/dist/page/libraryScript.d.ts +2 -0
- package/dist/page/libraryScript.d.ts.map +1 -0
- package/dist/page/libraryScript.js +73 -0
- package/dist/page/libraryScript.js.map +1 -0
- package/dist/page/metadata.d.ts +5 -0
- package/dist/page/metadata.d.ts.map +1 -0
- package/dist/page/metadata.js +34 -0
- package/dist/page/metadata.js.map +1 -0
- package/dist/page/metadataDetails.d.ts +4 -0
- package/dist/page/metadataDetails.d.ts.map +1 -0
- package/dist/page/metadataDetails.js +21 -0
- package/dist/page/metadataDetails.js.map +1 -0
- package/dist/page/metadataLinks.d.ts +6 -0
- package/dist/page/metadataLinks.d.ts.map +1 -0
- package/dist/page/metadataLinks.js +31 -0
- package/dist/page/metadataLinks.js.map +1 -0
- package/dist/page/nav.d.ts.map +1 -1
- package/dist/page/nav.js +3 -3
- package/dist/page/nav.js.map +1 -1
- package/dist/page/navigationScript.d.ts +2 -0
- package/dist/page/navigationScript.d.ts.map +1 -0
- package/dist/page/navigationScript.js +104 -0
- package/dist/page/navigationScript.js.map +1 -0
- package/dist/page/readingStateScript.d.ts +2 -0
- package/dist/page/readingStateScript.d.ts.map +1 -0
- package/dist/page/readingStateScript.js +62 -0
- package/dist/page/readingStateScript.js.map +1 -0
- package/dist/page/readingStyles.d.ts +2 -0
- package/dist/page/readingStyles.d.ts.map +1 -0
- package/dist/page/readingStyles.js +29 -0
- package/dist/page/readingStyles.js.map +1 -0
- package/dist/page/readingTools.d.ts +3 -0
- package/dist/page/readingTools.d.ts.map +1 -0
- package/dist/page/readingTools.js +10 -0
- package/dist/page/readingTools.js.map +1 -0
- package/dist/page/recordedEvidence.d.ts +4 -0
- package/dist/page/recordedEvidence.d.ts.map +1 -0
- package/dist/page/recordedEvidence.js +10 -0
- package/dist/page/recordedEvidence.js.map +1 -0
- package/dist/page/searchDialog.d.ts +3 -0
- package/dist/page/searchDialog.d.ts.map +1 -0
- package/dist/page/searchDialog.js +16 -0
- package/dist/page/searchDialog.js.map +1 -0
- package/dist/page/searchResultsScript.d.ts +2 -0
- package/dist/page/searchResultsScript.d.ts.map +1 -0
- package/dist/page/searchResultsScript.js +64 -0
- package/dist/page/searchResultsScript.js.map +1 -0
- package/dist/page/searchScript.d.ts +2 -0
- package/dist/page/searchScript.d.ts.map +1 -0
- package/dist/page/searchScript.js +73 -0
- package/dist/page/searchScript.js.map +1 -0
- package/dist/page/shell.d.ts +1 -1
- package/dist/page/shell.d.ts.map +1 -1
- package/dist/page/shell.js +23 -5
- package/dist/page/shell.js.map +1 -1
- package/dist/page/stateScript.d.ts +2 -0
- package/dist/page/stateScript.d.ts.map +1 -0
- package/dist/page/stateScript.js +49 -0
- package/dist/page/stateScript.js.map +1 -0
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +14 -34
- package/dist/page/style.js.map +1 -1
- package/dist/page/swap.d.ts +1 -1
- package/dist/page/swap.d.ts.map +1 -1
- package/dist/page/swap.js +4 -1
- package/dist/page/swap.js.map +1 -1
- package/dist/page/workspaceStyles.d.ts +3 -0
- package/dist/page/workspaceStyles.d.ts.map +1 -0
- package/dist/page/workspaceStyles.js +79 -0
- package/dist/page/workspaceStyles.js.map +1 -0
- package/dist/render/documentHeadings.d.ts +667 -0
- package/dist/render/documentHeadings.d.ts.map +1 -0
- package/dist/render/documentHeadings.js +45 -0
- package/dist/render/documentHeadings.js.map +1 -0
- package/dist/render/documentLinks.d.ts +659 -0
- package/dist/render/documentLinks.d.ts.map +1 -0
- package/dist/render/documentLinks.js +19 -0
- package/dist/render/documentLinks.js.map +1 -0
- package/dist/render/markdown.d.ts +7 -1
- package/dist/render/markdown.d.ts.map +1 -1
- package/dist/render/markdown.js +13 -2
- package/dist/render/markdown.js.map +1 -1
- package/dist/search/collector.d.ts +13 -0
- package/dist/search/collector.d.ts.map +1 -0
- package/dist/search/collector.js +40 -0
- package/dist/search/collector.js.map +1 -0
- package/dist/search/entries.d.ts +10 -0
- package/dist/search/entries.d.ts.map +1 -0
- package/dist/search/entries.js +37 -0
- package/dist/search/entries.js.map +1 -0
- package/dist/search/linkCollector.d.ts +8 -0
- package/dist/search/linkCollector.d.ts.map +1 -0
- package/dist/search/linkCollector.js +16 -0
- package/dist/search/linkCollector.js.map +1 -0
- package/dist/search/match.d.ts +14 -0
- package/dist/search/match.d.ts.map +1 -0
- package/dist/search/match.js +26 -0
- package/dist/search/match.js.map +1 -0
- package/dist/search/metadataEntries.d.ts +4 -0
- package/dist/search/metadataEntries.d.ts.map +1 -0
- package/dist/search/metadataEntries.js +40 -0
- package/dist/search/metadataEntries.js.map +1 -0
- package/dist/search/snapshot.d.ts +13 -0
- package/dist/search/snapshot.d.ts.map +1 -0
- package/dist/search/snapshot.js +50 -0
- package/dist/search/snapshot.js.map +1 -0
- package/dist/views/items.d.ts +11 -0
- package/dist/views/items.d.ts.map +1 -0
- package/dist/views/items.js +48 -0
- package/dist/views/items.js.map +1 -0
- package/dist/views/projection.d.ts +15 -0
- package/dist/views/projection.d.ts.map +1 -0
- package/dist/views/projection.js +47 -0
- package/dist/views/projection.js.map +1 -0
- package/dist/views/savedScript.d.ts +2 -0
- package/dist/views/savedScript.d.ts.map +1 -0
- package/dist/views/savedScript.js +89 -0
- package/dist/views/savedScript.js.map +1 -0
- package/dist/views/state.d.ts +15 -0
- package/dist/views/state.d.ts.map +1 -0
- package/dist/views/state.js +45 -0
- package/dist/views/state.js.map +1 -0
- package/dist/views/tools.d.ts +3 -0
- package/dist/views/tools.d.ts.map +1 -0
- package/dist/views/tools.js +11 -0
- package/dist/views/tools.js.map +1 -0
- package/dist/views/workCards.d.ts +4 -0
- package/dist/views/workCards.d.ts.map +1 -0
- package/dist/views/workCards.js +23 -0
- package/dist/views/workCards.js.map +1 -0
- package/dist/views/workControls.d.ts +4 -0
- package/dist/views/workControls.d.ts.map +1 -0
- package/dist/views/workControls.js +32 -0
- package/dist/views/workControls.js.map +1 -0
- package/dist/views/workDetail.d.ts +13 -0
- package/dist/views/workDetail.d.ts.map +1 -0
- package/dist/views/workDetail.js +26 -0
- package/dist/views/workDetail.js.map +1 -0
- package/dist/views/workHtml.d.ts +15 -0
- package/dist/views/workHtml.d.ts.map +1 -0
- package/dist/views/workHtml.js +35 -0
- package/dist/views/workHtml.js.map +1 -0
- package/dist/views/workStyle.d.ts +2 -0
- package/dist/views/workStyle.d.ts.map +1 -0
- package/dist/views/workStyle.js +18 -0
- package/dist/views/workStyle.js.map +1 -0
- package/dist/views/workTable.d.ts +4 -0
- package/dist/views/workTable.d.ts.map +1 -0
- package/dist/views/workTable.js +19 -0
- package/dist/views/workTable.js.map +1 -0
- package/package.json +11 -8
- package/src/board.ts +9 -1
- package/src/cli.ts +1 -1
- package/src/files/changes.ts +2 -1
- package/src/files/url.ts +3 -0
- package/src/http/assets.ts +16 -1
- package/src/http/identity.ts +62 -0
- package/src/http/page.ts +46 -9
- package/src/http/search.ts +13 -0
- package/src/http/work.ts +41 -0
- package/src/metadata/backlinks.ts +39 -0
- package/src/metadata/fields.ts +26 -0
- package/src/metadata/links.ts +19 -0
- package/src/metadata/locations.ts +34 -0
- package/src/metadata/model.ts +27 -0
- package/src/metadata/parse.ts +62 -0
- package/src/metadata/problems.ts +62 -0
- package/src/metadata/relationshipLabel.ts +13 -0
- package/src/metadata/schema.ts +36 -0
- package/src/metadata/sourceLinks.ts +46 -0
- package/src/page/backlinksHtml.ts +18 -0
- package/src/page/board.ts +14 -4
- package/src/page/client.ts +65 -7
- package/src/page/criteriaEvidence.ts +36 -0
- package/src/page/diagrams.ts +12 -4
- package/src/page/document.ts +6 -3
- package/src/page/libraryScript.ts +72 -0
- package/src/page/metadata.ts +40 -0
- package/src/page/metadataDetails.ts +24 -0
- package/src/page/metadataLinks.ts +35 -0
- package/src/page/nav.ts +5 -4
- package/src/page/navigationScript.ts +103 -0
- package/src/page/readingStateScript.ts +61 -0
- package/src/page/readingStyles.ts +28 -0
- package/src/page/readingTools.ts +12 -0
- package/src/page/recordedEvidence.ts +12 -0
- package/src/page/searchDialog.ts +16 -0
- package/src/page/searchResultsScript.ts +63 -0
- package/src/page/searchScript.ts +72 -0
- package/src/page/shell.ts +24 -5
- package/src/page/stateScript.ts +48 -0
- package/src/page/style.ts +14 -35
- package/src/page/swap.ts +4 -1
- package/src/page/workspaceStyles.ts +79 -0
- package/src/render/documentHeadings.ts +52 -0
- package/src/render/documentLinks.ts +19 -0
- package/src/render/markdown.ts +21 -4
- package/src/search/collector.ts +44 -0
- package/src/search/entries.ts +51 -0
- package/src/search/linkCollector.ts +16 -0
- package/src/search/match.ts +28 -0
- package/src/search/metadataEntries.ts +42 -0
- package/src/search/snapshot.ts +60 -0
- package/src/views/items.ts +55 -0
- package/src/views/projection.ts +59 -0
- package/src/views/savedScript.ts +88 -0
- package/src/views/state.ts +47 -0
- package/src/views/tools.ts +11 -0
- package/src/views/workCards.ts +26 -0
- package/src/views/workControls.ts +38 -0
- package/src/views/workDetail.ts +28 -0
- package/src/views/workHtml.ts +39 -0
- package/src/views/workStyle.ts +17 -0
- package/src/views/workTable.ts +21 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/src/index.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0 - 2026-10-04
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
|
|
8
|
+
- `@shivaedev/work-board`: `@shivaedev/work-board/board.ts` (`BoardOptions`, `boardLayer`)
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Add source backlinks for explicit relationships, board membership, criterion
|
|
13
|
+
evidence, local evidence sources, and Markdown hyperlinks, including plain
|
|
14
|
+
files. Reuse the existing parse/index and disclose incomplete references.
|
|
15
|
+
Associate criterion claims across files and link directly to their records;
|
|
16
|
+
show missing claims, origin lines, retained old revisions, and missing local
|
|
17
|
+
Markdown sources without implying verified acceptance. Decision options and
|
|
18
|
+
rationale stay ordinary Markdown; source files remain unchanged.
|
|
19
|
+
|
|
20
|
+
- Add a table layout sharing board projections, filters, sorting, and selected
|
|
21
|
+
source detail. Switch layouts without losing URL context and read/filter tables
|
|
22
|
+
without JavaScript. Save, update, reopen, remove, or clear up to 10 local named
|
|
23
|
+
views per workspace; reject unsafe destinations and disclose unavailable
|
|
24
|
+
storage. Keep saved filters separate from URL item selection and never silently
|
|
25
|
+
evict a saved view at capacity. Source Markdown stays unchanged.
|
|
26
|
+
|
|
27
|
+
- Add Work board selection and explicit shared-item projections, exact status/
|
|
28
|
+
owner filters, text matching, and sorting. URL state restores board/filter/
|
|
29
|
+
selected detail context; source Markdown stays readable in a side pane.
|
|
30
|
+
Disclose missing/ambiguous memberships and selections, retain filters and
|
|
31
|
+
focused unsent search through live updates, and keep native links/GET filters
|
|
32
|
+
usable without JavaScript. Existing heading boards remain unchanged.
|
|
33
|
+
|
|
34
|
+
- Read optional YAML frontmatter for stable item identity, explicit work fields,
|
|
35
|
+
relationships, board membership, criteria, and recorded evidence provenance.
|
|
36
|
+
Keep ordinary Markdown/heading boards valid, retain unknown source metadata,
|
|
37
|
+
and disclose malformed fields, duplicate IDs, and unresolved references.
|
|
38
|
+
Rebuild identities from the existing local index; identity links survive file
|
|
39
|
+
and heading renames, and criterion search opens its source context. Recorded
|
|
40
|
+
outcomes remain distinct from independently verified acceptance.
|
|
41
|
+
- Show source lines in search results and preserve reading state when an item
|
|
42
|
+
moves. Keep passage focus when a search result targets the active document.
|
|
43
|
+
|
|
44
|
+
- Add local workspace search with document, heading, and passage results, snippets,
|
|
45
|
+
keyboard navigation, and a command dialog for existing view controls. Rebuild
|
|
46
|
+
the in-memory index after file changes, disclose unreadable files, and prevent
|
|
47
|
+
older search responses from replacing newer queries.
|
|
48
|
+
|
|
49
|
+
- Add heading passage links and an outline, in-place document navigation with
|
|
50
|
+
back/forward reading-state restoration, workspace-scoped favorites and recents,
|
|
51
|
+
active document titles, and readable missing-document/passage states.
|
|
52
|
+
- Resolve Markdown links relative to the source file, including nested home
|
|
53
|
+
files served at `/`. Ignore stale page responses after navigation and render
|
|
54
|
+
cached diagrams using the current theme.
|
|
55
|
+
- Add the first workspace shell: a collapsible file sidebar, file location,
|
|
56
|
+
responsive board columns, readable documents, and keyboard skip navigation.
|
|
57
|
+
Remember theme, density, and sidebar choices per folder and server origin;
|
|
58
|
+
code highlighting and diagrams follow the selected theme. Controls remain
|
|
59
|
+
usable when browser storage is unavailable.
|
|
60
|
+
|
|
61
|
+
- Add a step-by-step delivery plan for the vision, with 26 bounded implementation
|
|
62
|
+
steps, dependencies, acceptance evidence, and explicit design gates before
|
|
63
|
+
richer source formats, mutations, agent handoffs, and external integrations.
|
|
64
|
+
|
|
65
|
+
- Document the local Work Board north star, three-wave roadmap, experience design,
|
|
66
|
+
and interactive vision mockups with desktop and mobile captures. The package
|
|
67
|
+
README links to the proposed direction separately from its current behavior.
|
|
68
|
+
|
|
3
69
|
## 0.2.1 - 2026-10-04
|
|
4
70
|
|
|
5
71
|
### Changed
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ work-board ./project-notes --port 4747 --home plan.md
|
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
It listens on `127.0.0.1` only and answers only requests addressed to a
|
|
13
|
-
loopback host. Every `.md` file under the folder appears in the
|
|
13
|
+
loopback host. Every `.md` file under the folder appears in the collapsible sidebar with how
|
|
14
14
|
long ago it changed. Below the folder, files and folders starting with a dot and
|
|
15
15
|
`node_modules` are never entered, and anything that is not markdown is skipped;
|
|
16
16
|
the folder itself may be a dot folder such as `.notes`. No path outside the
|
|
@@ -23,7 +23,15 @@ footnotes, raw HTML (including `<details>` with markdown inside) and fenced code
|
|
|
23
23
|
highlighted with Shiki's GitHub light and dark themes. Raw HTML is not
|
|
24
24
|
sanitized, so serve only folders you trust. Pages send a content security
|
|
25
25
|
policy that allows only the board's own scripts, and `Cache-Control: no-store`.
|
|
26
|
-
The page uses system fonts
|
|
26
|
+
The page uses system fonts. Theme can follow the system or stay light or dark.
|
|
27
|
+
Theme, compact/comfortable density, and sidebar visibility are remembered in
|
|
28
|
+
browser storage for this folder and server origin. When storage is unavailable,
|
|
29
|
+
controls still work for the current page and show a notice.
|
|
30
|
+
|
|
31
|
+
The file location appears above the content. Documents use a readable line
|
|
32
|
+
length; boards use a wider grid that stacks on narrow screens. The sidebar has
|
|
33
|
+
its own scroll area and starts collapsed on narrow screens unless a saved
|
|
34
|
+
preference says otherwise. A keyboard skip link moves directly to the content.
|
|
27
35
|
|
|
28
36
|
| Option | Default | Meaning |
|
|
29
37
|
| --- | --- | --- |
|
|
@@ -31,6 +39,125 @@ The page uses system fonts and follows the light or dark colour scheme.
|
|
|
31
39
|
| `--port` | `4747` | The port on `127.0.0.1`. `0` picks a free one. |
|
|
32
40
|
| `--home` | none | The file shown at `/` as a board, relative to the folder. The command stops with an error unless it leads to one of the markdown files listed from the folder. Without it, `/` shows the first file as a document. |
|
|
33
41
|
|
|
42
|
+
## Document navigation
|
|
43
|
+
|
|
44
|
+
Markdown headings have passage links and an **On this page** outline, including separate
|
|
45
|
+
anchors for duplicate headings. Use the heading's `#` link to copy a passage URL.
|
|
46
|
+
Generated anchors use the heading text and duplicate order; changing either can
|
|
47
|
+
change the anchor. Renaming a file changes its document URL. Authored HTML IDs
|
|
48
|
+
and footnote links remain intact. Richer files can declare stable work-item IDs.
|
|
49
|
+
|
|
50
|
+
Markdown links resolve from their source file, including a nested `--home` file
|
|
51
|
+
served at `/`. Links within the workspace open in place; modified clicks and
|
|
52
|
+
links targeting another window keep their normal browser behavior. The browser
|
|
53
|
+
title and active file tooltip follow the document's main heading.
|
|
54
|
+
|
|
55
|
+
Back and forward restore the previous scroll, selected text, and open details.
|
|
56
|
+
The client keeps up to 30 page snapshots and tab-scoped reading records; it
|
|
57
|
+
fetches the current file again on return so changes and deletions are visible.
|
|
58
|
+
A missing document explains what happened, and a missing passage shows a notice.
|
|
59
|
+
|
|
60
|
+
**Save favorite** pins a document to the sidebar. Recent documents are deduplicated
|
|
61
|
+
and limited to the last ten. Favorites and recents use browser storage scoped to
|
|
62
|
+
the folder and server origin. Deleted favorites remain visible with a missing
|
|
63
|
+
label. If storage is unavailable, favorites and recents work on the current page;
|
|
64
|
+
reading navigation still works in the open tab. Content and the outline remain
|
|
65
|
+
readable with JavaScript disabled.
|
|
66
|
+
|
|
67
|
+
## Workspace search
|
|
68
|
+
|
|
69
|
+
Use **Search** or Ctrl/Cmd+K to find document titles/paths, Markdown headings, and
|
|
70
|
+
passage text. Results identify their type and source file/line where known, include text snippets,
|
|
71
|
+
and open the corresponding heading when available. Matching is case-insensitive
|
|
72
|
+
with Unicode normalization; all query terms must occur in a block. Titles rank
|
|
73
|
+
before headings, then passages, with stable source order within each group.
|
|
74
|
+
Results are limited to 40 and report the full match count. This is deterministic
|
|
75
|
+
text search, without fuzzy matching or semantic inference.
|
|
76
|
+
|
|
77
|
+
Arrow keys choose a result while the search field is focused; Enter opens it.
|
|
78
|
+
Escape closes the dialog and restores focus. With an empty query, commands open
|
|
79
|
+
the workspace or change the existing sidebar, density, and theme controls.
|
|
80
|
+
|
|
81
|
+
The server keeps a rebuildable index in memory and invalidates it when the file
|
|
82
|
+
watcher changes. An open dialog refreshes on edits and reconnects; older requests
|
|
83
|
+
cannot replace a newer query. Hidden files, `node_modules`, and symlinks outside
|
|
84
|
+
the workspace are excluded. Unreadable files produce an incomplete-results notice.
|
|
85
|
+
All indexing and requests stay local. Search needs JavaScript; document reading
|
|
86
|
+
does not. Source-in-editor links await an agreed local editor mechanism.
|
|
87
|
+
|
|
88
|
+
## Optional work identity
|
|
89
|
+
|
|
90
|
+
A Markdown file can begin with YAML frontmatter declaring an explicit `id`,
|
|
91
|
+
`kind`, `status`, `owner`, `next_action`, relationships, criteria, board membership,
|
|
92
|
+
and evidence. Every field is optional; ordinary Markdown and heading boards need
|
|
93
|
+
no migration. [Source examples and shapes](./docs/vision/delivery/source-examples.md)
|
|
94
|
+
describe the convention. No section name becomes a status or workflow rule.
|
|
95
|
+
|
|
96
|
+
Work details show recorded fields, source locations, and the original header.
|
|
97
|
+
Malformed/unknown fields, duplicate IDs, and unresolved references remain visible
|
|
98
|
+
with diagnostics while prose stays readable. A unique ID has a shareable
|
|
99
|
+
`/_board/item/<id>/` link that survives file/heading renames; criterion links open
|
|
100
|
+
and focus their context. Search also finds explicit work fields and criteria.
|
|
101
|
+
An incomplete index cannot assert unique identity. The index rebuilds from files
|
|
102
|
+
without persistent storage; the UI never writes project content.
|
|
103
|
+
|
|
104
|
+
Evidence records show their source, criterion, checked revision, observed time,
|
|
105
|
+
method, and recorded outcome when provided. They are source claims, not
|
|
106
|
+
independently verified acceptance; missing provenance stays **Not recorded**.
|
|
107
|
+
|
|
108
|
+
## Work views
|
|
109
|
+
|
|
110
|
+
Open **Work** to read identified items as a board or table. A `kind: board` file with a
|
|
111
|
+
unique ID and an explicit `items` list defines a selectable view; the same item
|
|
112
|
+
can appear in several boards. Board definitions are excluded from All work.
|
|
113
|
+
Missing/ambiguous members and repeated membership are disclosed without choosing
|
|
114
|
+
a duplicate source or counting repeated items twice. Legacy heading cards remain
|
|
115
|
+
on their original pages and do not become inferred identified work.
|
|
116
|
+
|
|
117
|
+
Columns use the exact recorded status, including a **Status not recorded** column.
|
|
118
|
+
Filter by status, owner, or work text and sort by title, owner, or status. Missing
|
|
119
|
+
values differ from literal text and sort last. Cards open a source detail pane;
|
|
120
|
+
its Markdown links resolve relative to its file. The URL records the board,
|
|
121
|
+
filters, sort, and selected ID, so reload and Back/Forward restore that context.
|
|
122
|
+
A selected item outside the filters stays visible with a notice; deletion or
|
|
123
|
+
ambiguous identity is explained. Live changes retain applied filters, including
|
|
124
|
+
filters with no current matches. Compact density applies to these cards too.
|
|
125
|
+
Board and table use the same projection and selection; switching layouts keeps
|
|
126
|
+
that URL context. Table rows show kind, status, owner, and next action, with
|
|
127
|
+
missing fields disclosed and the same source detail pane. Narrow tables scroll
|
|
128
|
+
inside their own container; compact density reduces row/card spacing.
|
|
129
|
+
Native links and GET filters remain usable without JavaScript.
|
|
130
|
+
|
|
131
|
+
Save up to 10 named views in browser storage scoped to the workspace and server
|
|
132
|
+
origin. A view retains the applied board, filters, sort, and layout; item selection
|
|
133
|
+
stays in its shareable URL. Saving the same name updates it. At capacity, remove
|
|
134
|
+
one or update a name; views are never silently evicted. Remove one or clear all
|
|
135
|
+
from the view picker. Unsafe stored destinations are ignored. If storage is
|
|
136
|
+
unavailable, named views work for the current page only; source files are unchanged.
|
|
137
|
+
Saving requires JavaScript; board/table reading does not.
|
|
138
|
+
|
|
139
|
+
## Reasoning and evidence context
|
|
140
|
+
|
|
141
|
+
Follow explicit relationships from a result to its plan and decision. Decisions
|
|
142
|
+
keep options, comparisons, and rationale in ordinary Markdown; no new decision
|
|
143
|
+
fields are required. **Referenced by** lists incoming relationships, board
|
|
144
|
+
membership, criterion claims, evidence-source links, and local Markdown hyperlinks,
|
|
145
|
+
including plain files without frontmatter. Relative/encoded paths and root home
|
|
146
|
+
links use the source file's location. Repeated prose links from one file count
|
|
147
|
+
once; code examples do not become links. External URLs are not local backlinks.
|
|
148
|
+
Incomplete workspaces disclose partial references and do not select ambiguous IDs.
|
|
149
|
+
|
|
150
|
+
Each uniquely identified criterion lists claims recorded across the readable
|
|
151
|
+
workspace, with links to their source records. Missing claims say that acceptance
|
|
152
|
+
is not established. A record shows origin file/line, checked revision, observed
|
|
153
|
+
time, method, and outcome; missing provenance stays **Not recorded**. Old recorded
|
|
154
|
+
revisions remain visible, and Work Board does not compare them to a current Git
|
|
155
|
+
revision or infer human acceptance. Missing local Markdown evidence sources remain
|
|
156
|
+
linked with a notice. Generated `recorded-evidence-<index>` anchors follow source
|
|
157
|
+
array order and may change after insertion/reordering; item and criterion IDs are
|
|
158
|
+
the explicit stable references. Backlinks/claim associations rebuild on file
|
|
159
|
+
changes and after restart, without writing an event history.
|
|
160
|
+
|
|
34
161
|
## Diagrams
|
|
35
162
|
|
|
36
163
|
A ` ```mermaid ` block is drawn in the browser. Mermaid loads from the installed
|
|
@@ -139,7 +266,7 @@ non-loopback address when the server knows the address.
|
|
|
139
266
|
import { NodeServices } from "@effect/platform-node"
|
|
140
267
|
import { Layer } from "effect"
|
|
141
268
|
import { HttpRouter } from "effect/unstable/http"
|
|
142
|
-
import { boardLayer } from "@shivaedev/work-board"
|
|
269
|
+
import { boardLayer } from "@shivaedev/work-board/board.ts"
|
|
143
270
|
|
|
144
271
|
const board = HttpRouter.toWebHandler(
|
|
145
272
|
Layer.provide(boardLayer({ root: "./project-notes", home: "plan.md" }), NodeServices.layer),
|
|
@@ -156,3 +283,14 @@ skips the build. `pnpm dlx` and `pnpm add --global` need no setting.
|
|
|
156
283
|
allowBuilds:
|
|
157
284
|
msgpackr-extract: false
|
|
158
285
|
```
|
|
286
|
+
|
|
287
|
+
## Product vision
|
|
288
|
+
|
|
289
|
+
The [north star and visual direction](https://github.com/ShivaeDev/platform/tree/main/packages/work-board/docs/vision#readme)
|
|
290
|
+
describe the proposed local workspace for a person and their agents: stay
|
|
291
|
+
informed, give direction and coordinate, then collaborate. The
|
|
292
|
+
[roadmap](https://github.com/ShivaeDev/platform/blob/main/packages/work-board/docs/vision/roadmap.md)
|
|
293
|
+
sets the waves, acceptance criteria, and open design decisions.
|
|
294
|
+
[Experience designs and mockups](https://github.com/ShivaeDev/platform/blob/main/packages/work-board/docs/vision/experience.md)
|
|
295
|
+
illustrate the target with fictional data. These are future plans; the sections
|
|
296
|
+
above describe the package's current behavior.
|
package/dist/board.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAA4B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAA4B,MAAM,iBAAiB,CAAC;AAQvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAiCD,KAAK,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC,aAAa,GAAG,YAAY,CAAC;AAC5F,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AAE1I,eAAO,MAAM,UAAU,GAAI,SAAS,YAAY,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CACxC,CAAC"}
|
package/dist/board.js
CHANGED
|
@@ -4,10 +4,14 @@ import { watchChanges } from "#files/changes.ts";
|
|
|
4
4
|
import { homeIn } from "#files/home.ts";
|
|
5
5
|
import { ASSETS, MERMAID_ROUTE, mermaidFile, mermaidRoot } from "#http/assets.ts";
|
|
6
6
|
import { events } from "#http/events.ts";
|
|
7
|
+
import { identity } from "#http/identity.ts";
|
|
7
8
|
import { loopbackOnly } from "#http/loopback.ts";
|
|
8
9
|
import { page } from "#http/page.ts";
|
|
9
10
|
import { respond } from "#http/respond.ts";
|
|
11
|
+
import { search } from "#http/search.ts";
|
|
12
|
+
import { work } from "#http/work.ts";
|
|
10
13
|
import { Highlighter } from "#render/highlighter.ts";
|
|
14
|
+
import { searchSnapshot } from "#search/snapshot.ts";
|
|
11
15
|
const routes = (options) => HttpRouter.use((router) => Effect.gen(function* () {
|
|
12
16
|
const home = yield* homeIn(options.root, options.home);
|
|
13
17
|
const mermaid = yield* mermaidRoot();
|
|
@@ -15,11 +19,15 @@ const routes = (options) => HttpRouter.use((router) => Effect.gen(function* () {
|
|
|
15
19
|
const context = yield* Effect.context();
|
|
16
20
|
const serve = (route, handler) => router.add("GET", route, loopbackOnly((request) => Effect.provideContext(handler(request), context)));
|
|
17
21
|
yield* serve("/events", events(changes));
|
|
22
|
+
const index = yield* searchSnapshot(options.root, home, changes);
|
|
23
|
+
yield* serve("/_board/search", search(index));
|
|
24
|
+
yield* serve("/_board/work", work(index, changes, home));
|
|
18
25
|
for (const [route, body, contentType] of ASSETS) {
|
|
19
26
|
yield* serve(route, () => Effect.succeed(respond(body, contentType)));
|
|
20
27
|
}
|
|
21
28
|
yield* serve(MERMAID_ROUTE, mermaidFile(mermaid));
|
|
22
|
-
const pages = page({ home, root: options.root }, changes);
|
|
29
|
+
const pages = page({ home, root: options.root }, changes, index);
|
|
30
|
+
yield* serve("/_board/item/*", identity(index, pages, changes, home));
|
|
23
31
|
yield* serve("/", pages);
|
|
24
32
|
yield* serve("/*", pages);
|
|
25
33
|
}));
|
package/dist/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmB,KAAK,EAAiC,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAoB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAuB,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmB,KAAK,EAAiC,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAoB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAuB,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,MAAM,GAAG,CAAC,OAAqB,EAAE,EAAE,CACxC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAY,CAAC;IAClD,MAAM,KAAK,GAAG,CAAI,KAA2B,EAAE,OAAmB,EAAE,EAAE,CACrE,MAAM,CAAC,GAAG,CACT,KAAK,EACL,KAAK,EACL,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAC3E,CAAC;IACH,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;QACjD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjE,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC,CACF,CAAC;AAKH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAqB,EAAiD,EAAE,CAClG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
|
3
3
|
import { Effect, Layer, Option, Path } from "effect";
|
|
4
4
|
import { Argument, Command, Flag } from "effect/unstable/cli";
|
|
5
5
|
import { HOST, serveBoard } from "./serve.js";
|
|
6
|
-
const VERSION = "0.
|
|
6
|
+
const VERSION = "0.3.0";
|
|
7
7
|
const serve = Effect.fn("WorkBoard.serve")(function* (input) {
|
|
8
8
|
const path = yield* Path.Path;
|
|
9
9
|
return yield* Layer.launch(serveBoard({ home: Option.getOrUndefined(input.home), port: input.port, root: path.resolve(input.dir) }));
|
package/dist/files/changes.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface Changes {
|
|
|
11
11
|
readonly events: PubSub.PubSub<Change>;
|
|
12
12
|
readonly files: Effect.Effect<readonly MarkdownFile[], PlatformError.PlatformError>;
|
|
13
13
|
readonly realRoot: string;
|
|
14
|
+
readonly revision: Effect.Effect<number>;
|
|
14
15
|
readonly watching: Ref.Ref<boolean>;
|
|
15
16
|
}
|
|
16
17
|
export declare const watchChanges: (root: string) => Effect.Effect<Changes, PlatformError.PlatformError, FileSystem.FileSystem | Path.Path | import("effect/Scope").Scope>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,GAAG,EAAoB,MAAM,QAAQ,CAAC;AAC7H,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAExE,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjJ,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;CACpC;AAcD,eAAO,MAAM,YAAY,yIA8CvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,GAAG,EAAoB,MAAM,QAAQ,CAAC;AAC7H,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAExE,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjJ,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;CACpC;AAcD,eAAO,MAAM,YAAY,yIA8CvB,CAAC"}
|
package/dist/files/changes.js
CHANGED
|
@@ -32,7 +32,7 @@ export const watchChanges = Effect.fn("WorkBoard.watchChanges")(function* (root)
|
|
|
32
32
|
yield* Ref.set(cached, Option.some({ files: listed, generation: now }));
|
|
33
33
|
return listed;
|
|
34
34
|
});
|
|
35
|
-
const changes = { events, files, realRoot, watching };
|
|
35
|
+
const changes = { events, files, realRoot, revision: Ref.get(generation), watching };
|
|
36
36
|
return changes;
|
|
37
37
|
});
|
|
38
38
|
//# sourceMappingURL=changes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAsB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7H,OAAO,EAAE,UAAU,EAAE,YAAY,EAAqB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/files/url.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/files/url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,IAAY;IACnC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAc1E,eAAO,MAAM,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAajF,CAAC;;;;AAIF,qBAAa,cAAe,SAAQ,oBAAmC;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;CAAG;AAEtG,eAAO,MAAM,WAAW,wDAItB,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,aAAa,MAAM,2NAS5C,CAAC;AAEJ,eAAO,MAAM,aAAa,EAAE,UAAU,CAAC,SAAyB,CAAC"}
|
package/dist/http/assets.js
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { Data, Effect, FileSystem, Path } from "effect";
|
|
3
|
-
import { client } from "#page/client.ts";
|
|
3
|
+
import { client, preferences } from "#page/client.ts";
|
|
4
4
|
import { diagrams } from "#page/diagrams.ts";
|
|
5
|
+
import { libraryScript } from "#page/libraryScript.ts";
|
|
6
|
+
import { navigationScript } from "#page/navigationScript.ts";
|
|
7
|
+
import { readingStateScript } from "#page/readingStateScript.ts";
|
|
8
|
+
import { searchResultsScript } from "#page/searchResultsScript.ts";
|
|
9
|
+
import { searchScript } from "#page/searchScript.ts";
|
|
10
|
+
import { pageStateScript } from "#page/stateScript.ts";
|
|
5
11
|
import { style } from "#page/style.ts";
|
|
6
12
|
import { swap } from "#page/swap.ts";
|
|
13
|
+
import { savedScript } from "#views/savedScript.ts";
|
|
7
14
|
import { respond } from "./respond.js";
|
|
8
15
|
export const ASSETS = [
|
|
9
16
|
["/_board/style.css", style, "text/css"],
|
|
17
|
+
["/_board/saved-views.js", savedScript(), "text/javascript"],
|
|
10
18
|
["/_board/client.js", client, "text/javascript"],
|
|
19
|
+
["/_board/preferences.js", preferences, "text/javascript"],
|
|
20
|
+
["/_board/search.js", searchScript(), "text/javascript"],
|
|
21
|
+
["/_board/search-results.js", searchResultsScript(), "text/javascript"],
|
|
22
|
+
["/_board/library.js", libraryScript(), "text/javascript"],
|
|
23
|
+
["/_board/navigation.js", navigationScript(), "text/javascript"],
|
|
24
|
+
["/_board/page-state.js", pageStateScript(), "text/javascript"],
|
|
25
|
+
["/_board/reading-state.js", readingStateScript(), "text/javascript"],
|
|
11
26
|
["/_board/diagrams.js", diagrams, "text/javascript"],
|
|
12
27
|
["/_board/swap.js", swap, "text/javascript"],
|
|
13
28
|
];
|
package/dist/http/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { HttpServerRequest } from "effect/unstable/http";
|
|
3
|
+
import type { Changes } from "#files/changes.ts";
|
|
4
|
+
import type { searchSnapshot } from "#search/snapshot.ts";
|
|
5
|
+
import type { page } from "./page.ts";
|
|
6
|
+
export declare function identity(index: Effect.Success<ReturnType<typeof searchSnapshot>>, pages: ReturnType<typeof page>, changes: Changes, home: string | undefined): (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<import("effect/unstable/http/HttpServerResponse").HttpServerResponse, import("effect/PlatformError").PlatformError, import("effect/FileSystem").FileSystem | import("../render/highlighter.ts").Highlighter | import("effect/Path").Path>;
|
|
7
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/http/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWtC,wBAAgB,QAAQ,CACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,EACxD,KAAK,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,EAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,6SAsCxB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { fileUrl } from "#files/url.ts";
|
|
3
|
+
import { escapeHtml } from "#page/escape.ts";
|
|
4
|
+
import { navHtml } from "#page/nav.ts";
|
|
5
|
+
import { shell } from "#page/shell.ts";
|
|
6
|
+
import { respond } from "./respond.js";
|
|
7
|
+
function requestedIdentity(pathname) {
|
|
8
|
+
try {
|
|
9
|
+
return decodeURIComponent(pathname.slice("/_board/item/".length).replace(/\/$/u, ""));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function identity(index, pages, changes, home) {
|
|
16
|
+
return Effect.fn("WorkBoard.identity")(function* (request) {
|
|
17
|
+
const pathname = new URL(request.url, "http://127.0.0.1").pathname;
|
|
18
|
+
const id = requestedIdentity(pathname);
|
|
19
|
+
if (!pathname.endsWith("/") && /\.md$/iu.exec(id) !== null) {
|
|
20
|
+
return yield* pages(request);
|
|
21
|
+
}
|
|
22
|
+
const snapshot = yield* index;
|
|
23
|
+
const matches = snapshot.model.ids.get(id) ?? [];
|
|
24
|
+
if (snapshot.unavailable.length > 0) {
|
|
25
|
+
return respond(shell(`Item ${id}`, "", `<p class="empty">The workspace index is incomplete. Could not read ${escapeHtml(snapshot.unavailable.join(", "))}; item identity could not be validated. Retry when the files are readable.</p>`, changes.realRoot, false), "text/html", 503);
|
|
26
|
+
}
|
|
27
|
+
if (matches.length === 1 && matches[0]) {
|
|
28
|
+
return yield* pages(request, matches[0].file, id);
|
|
29
|
+
}
|
|
30
|
+
const text = matches.length > 0
|
|
31
|
+
? `The ID ${id} is duplicated. No document was selected.`
|
|
32
|
+
: `No item with ID ${id} is available. It may be missing, renamed, or invalid.`;
|
|
33
|
+
const choices = matches.map((document) => `<li><a href="${escapeHtml(fileUrl(document.file))}">${escapeHtml(document.file)}</a></li>`).join("");
|
|
34
|
+
const nav = navHtml(yield* changes.files, "", home);
|
|
35
|
+
return respond(shell(`Item ${id}`, nav, `<p class="empty">${escapeHtml(text)}</p>${choices ? `<ul>${choices}</ul>` : ""}`, changes.realRoot, false), "text/html", matches.length > 0 ? 409 : 404);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/http/identity.ts"],"names":[],"mappings":"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"}
|
package/dist/http/page.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Effect, FileSystem, Path } from "effect";
|
|
2
2
|
import type { HttpServerRequest } from "effect/unstable/http";
|
|
3
3
|
import type { Changes } from "#files/changes.ts";
|
|
4
|
+
import type { searchSnapshot } from "#search/snapshot.ts";
|
|
4
5
|
export interface PageOptions {
|
|
5
6
|
readonly home: string | undefined;
|
|
6
7
|
readonly root: string;
|
|
7
8
|
}
|
|
8
|
-
export declare const page: (options: PageOptions, changes: Changes) => (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<import("effect/unstable/http/HttpServerResponse").HttpServerResponse, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | import("../render/highlighter.ts").Highlighter | Path.Path>;
|
|
9
|
+
export declare const page: (options: PageOptions, changes: Changes, index: Effect.Success<ReturnType<typeof searchSnapshot>>) => (request: HttpServerRequest.HttpServerRequest, resolved?: string | undefined, expectedIdentity?: string | undefined) => Effect.Effect<import("effect/unstable/http/HttpServerResponse").HttpServerResponse, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | import("../render/highlighter.ts").Highlighter | Path.Path>;
|
|
9
10
|
//# sourceMappingURL=page.d.ts.map
|
package/dist/http/page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/http/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/http/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAWjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAaD,eAAO,MAAM,IAAI,GAAI,SAAS,WAAW,EAAE,SAAS,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,kVA0DpH,CAAC"}
|
package/dist/http/page.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Effect, FileSystem, Option, Path } from "effect";
|
|
2
2
|
import { within } from "#files/list.ts";
|
|
3
|
+
import { metadataModel } from "#metadata/model.ts";
|
|
4
|
+
import { metadataParse } from "#metadata/parse.ts";
|
|
3
5
|
import { boardHtml } from "#page/board.ts";
|
|
4
6
|
import { documentHtml } from "#page/document.ts";
|
|
5
7
|
import { escapeHtml } from "#page/escape.ts";
|
|
8
|
+
import { metadataHtml } from "#page/metadata.ts";
|
|
6
9
|
import { navHtml } from "#page/nav.ts";
|
|
7
10
|
import { shell } from "#page/shell.ts";
|
|
8
11
|
import { boardOf } from "#render/board.ts";
|
|
@@ -17,8 +20,8 @@ const requestedPath = (url) => {
|
|
|
17
20
|
}
|
|
18
21
|
};
|
|
19
22
|
const message = (text) => `<p class="empty">${escapeHtml(text)}</p>`;
|
|
20
|
-
export const page = (options, changes) => {
|
|
21
|
-
const body = Effect.fn("WorkBoard.pageBody")(function* (file) {
|
|
23
|
+
export const page = (options, changes, index) => {
|
|
24
|
+
const body = Effect.fn("WorkBoard.pageBody")(function* (file, expectedIdentity) {
|
|
22
25
|
const fs = yield* FileSystem.FileSystem;
|
|
23
26
|
const path = yield* Path.Path;
|
|
24
27
|
const real = yield* Effect.option(fs.realPath(path.join(options.root, file.path)));
|
|
@@ -26,18 +29,37 @@ export const page = (options, changes) => {
|
|
|
26
29
|
return Option.none();
|
|
27
30
|
}
|
|
28
31
|
const source = yield* fs.readFileString(real.value);
|
|
29
|
-
|
|
32
|
+
const parsed = metadataParse(source);
|
|
33
|
+
let identity;
|
|
34
|
+
const snapshot = yield* index;
|
|
35
|
+
const model = metadataModel([...snapshot.documents.filter((document) => document.file !== file.path), { file: file.path, parsed }], snapshot.unavailable, options.home ?? (yield* changes.files)[0]?.path);
|
|
36
|
+
const metadata = metadataHtml(parsed, file.path, model);
|
|
37
|
+
if (snapshot.unavailable.length === 0 && parsed.fields.id && model.ids.get(parsed.fields.id)?.length === 1) {
|
|
38
|
+
identity = parsed.fields.id;
|
|
39
|
+
}
|
|
40
|
+
if (expectedIdentity && identity !== expectedIdentity) {
|
|
41
|
+
return Option.none();
|
|
42
|
+
}
|
|
43
|
+
const html = file.path === options.home
|
|
44
|
+
? yield* boardHtml(boardOf(parsed.body), file.path, file.modified, metadata)
|
|
45
|
+
: yield* documentHtml(parsed.body, file, metadata);
|
|
46
|
+
return Option.some({ html, identity });
|
|
30
47
|
});
|
|
31
|
-
return Effect.fn("WorkBoard.page")(function* (request) {
|
|
48
|
+
return Effect.fn("WorkBoard.page")(function* (request, resolved, expectedIdentity) {
|
|
32
49
|
const files = yield* changes.files;
|
|
33
|
-
const requested = requestedPath(request.url) || options.home || files[0]?.path || "";
|
|
50
|
+
const requested = resolved ?? (requestedPath(request.url) || options.home || files[0]?.path || "");
|
|
34
51
|
const file = files.find((candidate) => candidate.path === requested);
|
|
35
52
|
const nav = navHtml(files, requested, options.home);
|
|
36
|
-
|
|
53
|
+
function layout(content, identity) {
|
|
54
|
+
return shell(requested, nav, content, changes.realRoot, requested === options.home, identity);
|
|
55
|
+
}
|
|
56
|
+
const missing = () => respond(layout(message(expectedIdentity
|
|
57
|
+
? `No item with ID ${expectedIdentity} at ${requested}; its source identity changed or is invalid.`
|
|
58
|
+
: `No markdown file at ${requested || options.root}.`)), "text/html", 404);
|
|
37
59
|
if (file === undefined) {
|
|
38
60
|
return missing();
|
|
39
61
|
}
|
|
40
|
-
return yield* body(file).pipe(Effect.map(Option.match({ onNone: missing, onSome: (main) => respond(
|
|
62
|
+
return yield* body(file, expectedIdentity).pipe(Effect.map(Option.match({ onNone: missing, onSome: (main) => respond(layout(main.html, main.identity), "text/html") })), Effect.catch(() => Effect.succeed(respond(layout(message(`${file.path} could not be read.`)), "text/html", 500))));
|
|
41
63
|
});
|
|
42
64
|
};
|
|
43
65
|
//# sourceMappingURL=page.js.map
|
package/dist/http/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/http/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG1D,OAAO,EAAqB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/http/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { HttpServerRequest } from "effect/unstable/http";
|
|
3
|
+
import type { searchSnapshot } from "#search/snapshot.ts";
|
|
4
|
+
export declare function search(index: Effect.Success<ReturnType<typeof searchSnapshot>>): (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<import("effect/unstable/http/HttpServerResponse").HttpServerResponse, import("effect/PlatformError").PlatformError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
5
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/http/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,4PAM9E"}
|