@skillcdn/console 0.1.2 → 0.1.3

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.
Files changed (87) hide show
  1. package/README.md +7 -4
  2. package/dist/api.d.ts +5 -4
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -3
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts.map +1 -1
  7. package/dist/cli/cli.js +157 -3
  8. package/dist/cli/cli.js.map +1 -1
  9. package/dist/cli/format.d.ts +10 -1
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +67 -0
  12. package/dist/cli/format.js.map +1 -1
  13. package/dist/cli/help.d.ts.map +1 -1
  14. package/dist/cli/help.js +59 -3
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/client.d.ts +32 -2
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +27 -10
  19. package/dist/client.js.map +1 -1
  20. package/dist/components/decision-list.d.ts +7 -1
  21. package/dist/components/decision-list.d.ts.map +1 -1
  22. package/dist/components/decision-list.js +21 -4
  23. package/dist/components/decision-list.js.map +1 -1
  24. package/dist/components/documents.d.ts +85 -0
  25. package/dist/components/documents.d.ts.map +1 -0
  26. package/dist/components/documents.js +103 -0
  27. package/dist/components/documents.js.map +1 -0
  28. package/dist/components/event-feed.d.ts.map +1 -1
  29. package/dist/components/event-feed.js +12 -0
  30. package/dist/components/event-feed.js.map +1 -1
  31. package/dist/components/markdown.d.ts +5 -2
  32. package/dist/components/markdown.d.ts.map +1 -1
  33. package/dist/components/markdown.js +8 -1
  34. package/dist/components/markdown.js.map +1 -1
  35. package/dist/components/runs.d.ts +3 -0
  36. package/dist/components/runs.d.ts.map +1 -1
  37. package/dist/components/runs.js +2 -2
  38. package/dist/components/runs.js.map +1 -1
  39. package/dist/components/task-view.d.ts +5 -1
  40. package/dist/components/task-view.d.ts.map +1 -1
  41. package/dist/components/task-view.js +2 -2
  42. package/dist/components/task-view.js.map +1 -1
  43. package/dist/console.css +162 -0
  44. package/dist/console.d.ts.map +1 -1
  45. package/dist/console.js +19 -30
  46. package/dist/console.js.map +1 -1
  47. package/dist/data.d.ts +12 -1
  48. package/dist/data.d.ts.map +1 -1
  49. package/dist/data.js +13 -0
  50. package/dist/data.js.map +1 -1
  51. package/dist/docs-page.d.ts +11 -0
  52. package/dist/docs-page.d.ts.map +1 -0
  53. package/dist/docs-page.js +146 -0
  54. package/dist/docs-page.js.map +1 -0
  55. package/dist/documents.d.ts +19 -0
  56. package/dist/documents.d.ts.map +1 -0
  57. package/dist/documents.js +64 -0
  58. package/dist/documents.js.map +1 -0
  59. package/dist/index.d.ts +5 -2
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +4 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/limits.d.ts +10 -0
  64. package/dist/limits.d.ts.map +1 -1
  65. package/dist/limits.js +10 -0
  66. package/dist/limits.js.map +1 -1
  67. package/dist/router.d.ts +7 -1
  68. package/dist/router.d.ts.map +1 -1
  69. package/dist/router.js +19 -4
  70. package/dist/router.js.map +1 -1
  71. package/dist/routes.d.ts +3 -1
  72. package/dist/routes.d.ts.map +1 -1
  73. package/dist/routes.js +3 -0
  74. package/dist/routes.js.map +1 -1
  75. package/dist/schemas.d.ts +251 -0
  76. package/dist/schemas.d.ts.map +1 -1
  77. package/dist/schemas.js +108 -3
  78. package/dist/schemas.js.map +1 -1
  79. package/dist/use-action.d.ts +8 -0
  80. package/dist/use-action.d.ts.map +1 -0
  81. package/dist/use-action.js +30 -0
  82. package/dist/use-action.js.map +1 -0
  83. package/dist/vocabulary.d.ts +4 -1
  84. package/dist/vocabulary.d.ts.map +1 -1
  85. package/dist/vocabulary.js +7 -0
  86. package/dist/vocabulary.js.map +1 -1
  87. package/package.json +1 -1
@@ -0,0 +1,146 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { ApiError, folderOf, } from "./api.js";
4
+ import { DocumentCrumbs, DocumentForm, DocumentList, DocumentSearch, DocumentView, FolderView, } from "./components/documents.js";
5
+ import { Button, Callout, EmptyState, Spinner } from "./components/ui.js";
6
+ import { docHref, projectHref, taskHref } from "./router.js";
7
+ import { projectPath } from "./routes.js";
8
+ import { useAction } from "./use-action.js";
9
+ export function DocsPage(props) {
10
+ const { project, path, data, navigate } = props;
11
+ const [listing, setListing] = useState(undefined);
12
+ const [document, setDocument] = useState(undefined);
13
+ const [versions, setVersions] = useState(undefined);
14
+ const [version, setVersion] = useState(undefined);
15
+ const [query, setQuery] = useState("");
16
+ const [results, setResults] = useState(undefined);
17
+ const [problem, setProblem] = useState(undefined);
18
+ const [writing, setWriting] = useState(false);
19
+ const [editing, setEditing] = useState(false);
20
+ const { busy, error, act } = useAction();
21
+ const { actions } = data;
22
+ const key = project.key;
23
+ const feedLength = data.events.length;
24
+ // The folder and the page at the path, asked for again whenever the project's feed grows.
25
+ // biome-ignore lint/correctness/useExhaustiveDependencies: the feed's length is the trigger
26
+ useEffect(() => {
27
+ const controller = new AbortController();
28
+ const { signal } = controller;
29
+ setProblem(undefined);
30
+ const load = async () => {
31
+ const [folder, found] = await Promise.all([
32
+ actions.documents({ folder: path }, signal),
33
+ path === ""
34
+ ? Promise.resolve(null)
35
+ : actions.document(path, signal).catch((failure) => {
36
+ if (failure instanceof ApiError && failure.code === "document.not_found") {
37
+ return null;
38
+ }
39
+ throw failure;
40
+ }),
41
+ ]);
42
+ if (signal.aborted) {
43
+ return;
44
+ }
45
+ setListing(folder);
46
+ setDocument(found);
47
+ if (found !== null && found !== undefined) {
48
+ actions
49
+ .documentVersions(path, signal)
50
+ .then((answer) => {
51
+ if (!signal.aborted) {
52
+ setVersions(answer.items);
53
+ }
54
+ })
55
+ .catch(() => undefined);
56
+ }
57
+ else {
58
+ setVersions(undefined);
59
+ }
60
+ };
61
+ load().catch((failure) => {
62
+ if (!signal.aborted) {
63
+ setProblem(failure instanceof ApiError ? failure.message : "The documents could not be loaded.");
64
+ }
65
+ });
66
+ return () => controller.abort();
67
+ }, [actions, path, feedLength]);
68
+ // Another path starts over: no version shown, no form open, no search.
69
+ // biome-ignore lint/correctness/useExhaustiveDependencies: the path is the trigger
70
+ useEffect(() => {
71
+ setVersion(undefined);
72
+ setEditing(false);
73
+ setWriting(false);
74
+ setResults(undefined);
75
+ setQuery("");
76
+ }, [path]);
77
+ const toDoc = (target) => docHref(key, target);
78
+ const toFolder = (folder) => docHref(key, folder);
79
+ const toFile = (file) => `${projectPath(key, "docs", path)}/files/${file.id}`;
80
+ const toTask = (taskId) => taskHref(key, taskId);
81
+ const toDecision = (decisionId) => `${projectHref(key, "decisions")}#${decisionId}`;
82
+ const search = (words) => {
83
+ setQuery(words);
84
+ if (words === "") {
85
+ setResults(undefined);
86
+ return;
87
+ }
88
+ void act(async () => {
89
+ setResults(await actions.documents({ q: words }));
90
+ });
91
+ };
92
+ const head = (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: "Docs" }), _jsx(Button, { variant: "primary", onClick: () => {
93
+ setWriting(true);
94
+ setEditing(false);
95
+ }, disabled: writing, children: "New page" })] }), _jsx(DocumentSearch, { query: query, busy: busy, onSearch: search }), problem !== undefined && _jsx(Callout, { tone: "danger", children: problem }), error !== undefined && _jsx(Callout, { tone: "danger", children: error })] }));
96
+ if (results !== undefined) {
97
+ return (_jsxs(_Fragment, { children: [head, _jsxs("section", { "aria-label": "Pages found", children: [_jsxs("h2", { className: "sc-section-title", children: ["Pages with \"", query, "\""] }), _jsx(DocumentList, { items: results.items, docHref: toDoc, empty: _jsx(EmptyState, { title: "No page has these words" }) })] })] }));
98
+ }
99
+ if (writing) {
100
+ return (_jsxs(_Fragment, { children: [head, _jsx("section", { className: "sc-panel", "aria-label": "New page", children: _jsx(DocumentForm, { folder: document === null || document === undefined ? path : folderOf(path), busy: busy, onSubmit: (input) => void act(async () => {
101
+ const written = await actions.writeDocument(input.path, {
102
+ title: input.title,
103
+ body: input.body,
104
+ });
105
+ setWriting(false);
106
+ navigate(toDoc(written.path));
107
+ }), onCancel: () => setWriting(false) }) })] }));
108
+ }
109
+ if (document === undefined && listing === undefined) {
110
+ return (_jsxs(_Fragment, { children: [head, _jsx("div", { className: "sc-loading", children: _jsx(Spinner, { label: "Loading the documents" }) })] }));
111
+ }
112
+ if (document !== null && document !== undefined) {
113
+ if (editing) {
114
+ return (_jsxs(_Fragment, { children: [head, _jsx("section", { className: "sc-panel", "aria-label": "Edit the page", children: _jsx(DocumentForm, { document: document, busy: busy, onSubmit: (input) => void act(async () => {
115
+ const written = await actions.writeDocument(document.path, {
116
+ title: input.title,
117
+ body: input.body,
118
+ ...(input.baseVersion === undefined ? {} : { baseVersion: input.baseVersion }),
119
+ });
120
+ setDocument(written);
121
+ setVersion(undefined);
122
+ setEditing(false);
123
+ }), onCancel: () => setEditing(false) }) })] }));
124
+ }
125
+ return (_jsxs(_Fragment, { children: [head, _jsx(DocumentView, { document: document, version: version, versions: versions, docHref: toDoc, folderHref: toFolder, fileHref: toFile, taskHref: toTask, decisionHref: toDecision, busy: busy, onEdit: () => setEditing(true), onArchive: () => void act(async () => {
126
+ setDocument(await actions.archiveDocument(document.path));
127
+ }), onRestore: () => void act(async () => {
128
+ setDocument(await actions.restoreDocument(document.path));
129
+ }), onAttach: (file, label) => void act(async () => {
130
+ const bytes = new Uint8Array(await file.arrayBuffer());
131
+ setDocument(await actions.attachDocumentFile(document.path, {
132
+ name: file.name,
133
+ bytes,
134
+ ...(file.type === "" ? {} : { contentType: file.type }),
135
+ ...(label === undefined ? {} : { label }),
136
+ }));
137
+ }), onShowVersion: (number) => void act(async () => {
138
+ setVersion(number === undefined
139
+ ? undefined
140
+ : await actions.documentVersion(document.path, number));
141
+ }) })] }));
142
+ }
143
+ const something = listing !== undefined && (listing.folders.length > 0 || listing.items.length > 0);
144
+ return (_jsxs(_Fragment, { children: [head, path !== "" && _jsx(DocumentCrumbs, { path: path, folderHref: toFolder }), something && listing !== undefined ? (_jsx(FolderView, { listing: listing, docHref: toDoc, folderHref: toFolder })) : path === "" ? (_jsx(EmptyState, { title: "No pages yet", body: "Write the first one: what the project rests on, in Markdown, at a path of its own.", action: _jsx(Button, { onClick: () => setWriting(true), children: "New page" }) })) : (_jsx(EmptyState, { title: "No page at this path", body: "Nothing is written here yet, and no folder of that name holds a page.", action: _jsx(Button, { onClick: () => setWriting(true), children: "Write it" }) }))] }));
145
+ }
146
+ //# sourceMappingURL=docs-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-page.js","sourceRoot":"","sources":["../src/docs-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** A document's path: segments separated by `/`, with no slash at either end. */
2
+ export declare const DOCUMENT_PATH: RegExp;
3
+ /** True when `value` is a document's path, within the bounds. */
4
+ export declare function isDocumentPath(value: string): boolean;
5
+ /** True when `value` names a folder: the root (`""`), or a path by the same rule. */
6
+ export declare function isFolderPath(value: string): boolean;
7
+ /** The folder a path is in: `guides` for `guides/onboarding`, `""` for a page at the root. */
8
+ export declare function folderOf(path: string): string;
9
+ /** The last segment of a path: what the page is called in its folder. */
10
+ export declare function nameOf(path: string): string;
11
+ /** The folders above a path, from the root down: `["guides", "guides/setup"]` for `guides/setup/git`. */
12
+ export declare function foldersAbove(path: string): string[];
13
+ /**
14
+ * The documents a Markdown text links to, by path, each once and in order: every link whose
15
+ * destination is a document path, read from the project's root wherever the text is. A
16
+ * fragment (`#heading`) names a place in the page and is left off. Linear in the text.
17
+ */
18
+ export declare function documentPathsIn(markdown: string): string[];
19
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../src/documents.ts"],"names":[],"mappings":"AASA,iFAAiF;AACjF,eAAO,MAAM,aAAa,QAA6C,CAAC;AAExE,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGnD;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB1D"}
@@ -0,0 +1,64 @@
1
+ import { MAX_DOCUMENT_PATH_LENGTH, MAX_DOCUMENT_SEGMENT_LENGTH } from "./limits.js";
2
+ // A document's address (ADR-0009): a path of lowercase segments, as a repository keeps files,
3
+ // and the way a link in Markdown names one. The server records the links a text makes with
4
+ // these, and the pages turn them into links to the document's page; both read the same rule.
5
+ /** One segment of a path: lowercase letters, digits and hyphens, beginning and ending with a letter or a digit. */
6
+ const SEGMENT = "[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
7
+ /** A document's path: segments separated by `/`, with no slash at either end. */
8
+ export const DOCUMENT_PATH = new RegExp(`^${SEGMENT}(?:/${SEGMENT})*$`);
9
+ /** True when `value` is a document's path, within the bounds. */
10
+ export function isDocumentPath(value) {
11
+ return (value.length > 0 &&
12
+ value.length <= MAX_DOCUMENT_PATH_LENGTH &&
13
+ DOCUMENT_PATH.test(value) &&
14
+ value.split("/").every((segment) => segment.length <= MAX_DOCUMENT_SEGMENT_LENGTH));
15
+ }
16
+ /** True when `value` names a folder: the root (`""`), or a path by the same rule. */
17
+ export function isFolderPath(value) {
18
+ return value === "" || isDocumentPath(value);
19
+ }
20
+ /** The folder a path is in: `guides` for `guides/onboarding`, `""` for a page at the root. */
21
+ export function folderOf(path) {
22
+ const at = path.lastIndexOf("/");
23
+ return at < 0 ? "" : path.slice(0, at);
24
+ }
25
+ /** The last segment of a path: what the page is called in its folder. */
26
+ export function nameOf(path) {
27
+ const at = path.lastIndexOf("/");
28
+ return at < 0 ? path : path.slice(at + 1);
29
+ }
30
+ /** The folders above a path, from the root down: `["guides", "guides/setup"]` for `guides/setup/git`. */
31
+ export function foldersAbove(path) {
32
+ const segments = path.split("/").slice(0, -1);
33
+ return segments.map((_, index) => segments.slice(0, index + 1).join("/"));
34
+ }
35
+ /**
36
+ * The destination of a link in Markdown: `[words](destination "title")`, and a reference
37
+ * definition, `[label]: destination`. A picture (`![alt](source)`) is not a link to a page.
38
+ */
39
+ const INLINE_LINK = /(!?)\[[^\]]*\]\(\s*<?([^\s()<>]+)>?(?:\s+(?:"[^"]*"|'[^']*'|\([^)]*\)))?\s*\)/g;
40
+ const REFERENCE_DEFINITION = /^[ \t]{0,3}\[[^\]]+\]:[ \t]*<?([^\s<>]+)>?/gm;
41
+ /**
42
+ * The documents a Markdown text links to, by path, each once and in order: every link whose
43
+ * destination is a document path, read from the project's root wherever the text is. A
44
+ * fragment (`#heading`) names a place in the page and is left off. Linear in the text.
45
+ */
46
+ export function documentPathsIn(markdown) {
47
+ const found = new Set();
48
+ const consider = (destination) => {
49
+ const path = (destination ?? "").split("#", 1)[0] ?? "";
50
+ if (isDocumentPath(path)) {
51
+ found.add(path);
52
+ }
53
+ };
54
+ for (const match of markdown.matchAll(INLINE_LINK)) {
55
+ if (match[1] !== "!") {
56
+ consider(match[2]);
57
+ }
58
+ }
59
+ for (const match of markdown.matchAll(REFERENCE_DEFINITION)) {
60
+ consider(match[1]);
61
+ }
62
+ return [...found].sort();
63
+ }
64
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../src/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAEpF,8FAA8F;AAC9F,2FAA2F;AAC3F,6FAA6F;AAE7F,mHAAmH;AACnH,MAAM,OAAO,GAAG,iCAAiC,CAAC;AAElD,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC;AAExE,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,CACL,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,MAAM,IAAI,wBAAwB;QACxC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,2BAA2B,CAAC,CACnF,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,KAAK,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,WAAW,GACf,gFAAgF,CAAC;AACnF,MAAM,oBAAoB,GAAG,8CAA8C,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAG,CAAC,WAA+B,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5D,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,9 @@ export * from "./api.js";
2
2
  export { Board, type BoardProps, TaskCard } from "./components/board.js";
3
3
  export { DecisionForm, type DecisionFormProps } from "./components/decision-form.js";
4
4
  export { DecisionCard, type DecisionCardProps, DecisionList, type DecisionListProps, } from "./components/decision-list.js";
5
+ export { DocumentCrumbs, DocumentFiles, type DocumentFilesProps, DocumentForm, type DocumentFormProps, DocumentList, type DocumentListProps, DocumentSearch, type DocumentSearchProps, DocumentView, type DocumentViewProps, FolderView, type FolderViewProps, } from "./components/documents.js";
5
6
  export { describeEvent, EventFeed, type EventFeedProps } from "./components/event-feed.js";
6
- export { Markdown } from "./components/markdown.js";
7
+ export { Markdown, type MarkdownProps } from "./components/markdown.js";
7
8
  export { PeopleList, type PeopleListProps } from "./components/people.js";
8
9
  export { keyOf, MemberList, type MemberListProps, PROJECT_ROLE_LABELS, ProjectForm, type ProjectFormProps, ProjectList, type ProjectListProps, ProjectRoleBadge, VISIBILITY_LABELS, } from "./components/projects.js";
9
10
  export { RUN_STATUS_LABELS, RunCard, type RunCardProps, RunList, type RunListProps, RunStatusBadge, } from "./components/runs.js";
@@ -16,5 +17,7 @@ export { NewToken, type NewTokenProps, TokenForm, type TokenFormProps, TokenList
16
17
  export { Avatar, Badge, Button, Callout, cx, EmptyState, formatBytes, formatInstant, PersonChip, PRIORITY_LABELS, PriorityBadge, ROLE_LABELS, RoleBadge, Spinner, STATE_LABELS, StateBadge, Time, } from "./components/ui.js";
17
18
  export { type ConsoleApp, type ConsoleComponents, type ConsoleConfig, createConsole, DEFAULT_COMPONENTS, } from "./console.js";
18
19
  export { type ConsoleActions, type ConsoleData, useConsoleData } from "./data.js";
19
- export { matchRoute, PATHS, type ProjectPage, projectHref, type Route, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
20
+ export { DocsPage, type DocsPageProps } from "./docs-page.js";
21
+ export { docHref, matchRoute, PATHS, type ProjectPage, projectHref, type Route, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
22
+ export { errorWords, useAction } from "./use-action.js";
20
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,KAAK,EACL,UAAU,EACV,KAAK,eAAe,EACpB,mBAAmB,EACnB,WAAW,EACX,KAAK,gBAAgB,EACrB,WAAW,EACX,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EACR,KAAK,aAAa,EAClB,SAAS,EACT,KAAK,cAAc,EACnB,SAAS,EACT,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,UAAU,EACV,KAAK,EACL,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,KAAK,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,EACtB,cAAc,EACd,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,KAAK,EACL,UAAU,EACV,KAAK,eAAe,EACpB,mBAAmB,EACnB,WAAW,EACX,KAAK,gBAAgB,EACrB,WAAW,EACX,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EACR,KAAK,aAAa,EAClB,SAAS,EACT,KAAK,cAAc,EACnB,SAAS,EACT,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,OAAO,EACP,UAAU,EACV,KAAK,EACL,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,KAAK,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "./api.js";
6
6
  export { Board, TaskCard } from "./components/board.js";
7
7
  export { DecisionForm } from "./components/decision-form.js";
8
8
  export { DecisionCard, DecisionList, } from "./components/decision-list.js";
9
+ export { DocumentCrumbs, DocumentFiles, DocumentForm, DocumentList, DocumentSearch, DocumentView, FolderView, } from "./components/documents.js";
9
10
  export { describeEvent, EventFeed } from "./components/event-feed.js";
10
11
  export { Markdown } from "./components/markdown.js";
11
12
  export { PeopleList } from "./components/people.js";
@@ -20,5 +21,7 @@ export { NewToken, TokenForm, TokenList, } from "./components/tokens.js";
20
21
  export { Avatar, Badge, Button, Callout, cx, EmptyState, formatBytes, formatInstant, PersonChip, PRIORITY_LABELS, PriorityBadge, ROLE_LABELS, RoleBadge, Spinner, STATE_LABELS, StateBadge, Time, } from "./components/ui.js";
21
22
  export { createConsole, DEFAULT_COMPONENTS, } from "./console.js";
22
23
  export { useConsoleData } from "./data.js";
23
- export { matchRoute, PATHS, projectHref, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
24
+ export { DocsPage } from "./docs-page.js";
25
+ export { docHref, matchRoute, PATHS, projectHref, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
26
+ export { errorWords, useAction } from "./use-action.js";
24
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,8FAA8F;AAC9F,kGAAkG;AAClG,yFAAyF;AAEzF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAmB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EAEZ,YAAY,GAEb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAwB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,KAAK,EACL,UAAU,EAEV,mBAAmB,EACnB,WAAW,EAEX,WAAW,EAEX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,OAAO,EAEP,OAAO,EAEP,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,KAAK,EAAmB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAoB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EAER,SAAS,EAET,SAAS,GAEV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyC,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,UAAU,EACV,KAAK,EAEL,WAAW,EAEX,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,8FAA8F;AAC9F,kGAAkG;AAClG,yFAAyF;AAEzF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAmB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EAEZ,YAAY,GAEb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,aAAa,EAEb,YAAY,EAEZ,YAAY,EAEZ,cAAc,EAEd,YAAY,EAEZ,UAAU,GAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAwB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,KAAK,EACL,UAAU,EAEV,mBAAmB,EACnB,WAAW,EAEX,WAAW,EAEX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,OAAO,EAEP,OAAO,EAEP,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,KAAK,EAAmB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAoB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EAER,SAAS,EAET,SAAS,GAEV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyC,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAsB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,OAAO,EACP,UAAU,EACV,KAAK,EAEL,WAAW,EAEX,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/limits.d.ts CHANGED
@@ -41,4 +41,14 @@ export declare const MAX_PROJECT_NAME_LENGTH = 100;
41
41
  export declare const MAX_PROJECT_DESCRIPTION_LENGTH = 500;
42
42
  /** The address of a project's skills, as the standard spells one; the console checks it as one. */
43
43
  export declare const MAX_SKILLS_ADDRESS_LENGTH = 2048;
44
+ /** A document's path: segments of lowercase letters, digits and hyphens, separated by slashes. */
45
+ export declare const MAX_DOCUMENT_PATH_LENGTH = 200;
46
+ export declare const MAX_DOCUMENT_SEGMENT_LENGTH = 64;
47
+ /** A document's body: a page of Markdown. */
48
+ export declare const MAX_DOCUMENT_LENGTH = 64000;
49
+ /** How many versions one document keeps, and how many files attach to one. */
50
+ export declare const MAX_VERSIONS_PER_DOCUMENT = 500;
51
+ export declare const MAX_FILES_PER_DOCUMENT = 50;
52
+ /** The words a search of the documents takes. */
53
+ export declare const MAX_SEARCH_LENGTH = 200;
44
54
  //# sourceMappingURL=limits.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAIA,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,kEAAkE;AAClE,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,qEAAqE;AACrE,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,8DAA8D;AAC9D,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,uCAAuC;AACvC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,4FAA4F;AAC5F,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,oFAAoF;AACpF,eAAO,MAAM,cAAc,QAAmB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,2FAA2F;AAC3F,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,OAAO,CAAC"}
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAIA,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,kEAAkE;AAClE,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,qEAAqE;AACrE,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,8DAA8D;AAC9D,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,uCAAuC;AACvC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,4FAA4F;AAC5F,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,oFAAoF;AACpF,eAAO,MAAM,cAAc,QAAmB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,2FAA2F;AAC3F,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,kGAAkG;AAClG,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,6CAA6C;AAC7C,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,MAAM,CAAC"}
package/dist/limits.js CHANGED
@@ -44,4 +44,14 @@ export const MAX_PROJECT_NAME_LENGTH = 100;
44
44
  export const MAX_PROJECT_DESCRIPTION_LENGTH = 500;
45
45
  /** The address of a project's skills, as the standard spells one; the console checks it as one. */
46
46
  export const MAX_SKILLS_ADDRESS_LENGTH = 2048;
47
+ /** A document's path: segments of lowercase letters, digits and hyphens, separated by slashes. */
48
+ export const MAX_DOCUMENT_PATH_LENGTH = 200;
49
+ export const MAX_DOCUMENT_SEGMENT_LENGTH = 64;
50
+ /** A document's body: a page of Markdown. */
51
+ export const MAX_DOCUMENT_LENGTH = 64_000;
52
+ /** How many versions one document keeps, and how many files attach to one. */
53
+ export const MAX_VERSIONS_PER_DOCUMENT = 500;
54
+ export const MAX_FILES_PER_DOCUMENT = 50;
55
+ /** The words a search of the documents takes. */
56
+ export const MAX_SEARCH_LENGTH = 200;
47
57
  //# sourceMappingURL=limits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,iGAAiG;AACjG,sDAAsD;AAEtD,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAC5B,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,mGAAmG;AACnG,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,iGAAiG;AACjG,sDAAsD;AAEtD,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAC5B,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,mGAAmG;AACnG,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,kGAAkG;AAClG,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAC9C,6CAA6C;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC"}
package/dist/router.d.ts CHANGED
@@ -8,6 +8,10 @@ export type Route = {
8
8
  readonly name: "task";
9
9
  readonly project: string;
10
10
  readonly id: string;
11
+ } | {
12
+ readonly name: "docs";
13
+ readonly project: string;
14
+ readonly path: string;
11
15
  } | {
12
16
  readonly name: "decisions";
13
17
  readonly project: string;
@@ -31,7 +35,7 @@ export type Route = {
31
35
  readonly name: "not-found";
32
36
  };
33
37
  /** The pages of a project, after its key. */
34
- export type ProjectPage = "decisions" | "feed" | "skills" | "members" | "settings";
38
+ export type ProjectPage = "docs" | "decisions" | "feed" | "skills" | "members" | "settings";
35
39
  export declare const PATHS: {
36
40
  /** The projects the person may see: the front page. */
37
41
  readonly projects: "/";
@@ -45,6 +49,8 @@ export declare function matchRoute(pathname: string): Route;
45
49
  /** Where a project's board is, or one of its pages. */
46
50
  export declare function projectHref(key: string, page?: ProjectPage): string;
47
51
  export declare function taskHref(key: string, id: string): string;
52
+ /** Where a document of a project is read, or a folder of them listed; `""` for the root. */
53
+ export declare function docHref(key: string, path: string): string;
48
54
  /** Why the last sign-in did not complete, as the page's URL says it, or nothing. */
49
55
  export declare function signInFailureOf(search: string): SignInFailure | undefined;
50
56
  /** The URL without the sign-in parameter, once the page has read it. */
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAM9E,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnF,eAAO,MAAM,KAAK;IAChB,uDAAuD;aACvD,QAAQ,EAAE,GAAG;IACb,8DAA8D;aAC9D,OAAO,EAAE,IAAI;IACb,0DAA0D;aAC1D,MAAM,EAAE,SAAS;aACjB,MAAM,EAAE,SAAS;CACT,CAAC;AAYX,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CA4BlD;AAED,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAGnE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAGzE;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3E"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAO5F,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5F,eAAO,MAAM,KAAK;IAChB,uDAAuD;aACvD,QAAQ,EAAE,GAAG;IACb,8DAA8D;aAC9D,OAAO,EAAE,IAAI;IACb,0DAA0D;aAC1D,MAAM,EAAE,SAAS;aACjB,MAAM,EAAE,SAAS;CACT,CAAC;AAaX,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAsClD;AAED,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAGnE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAGzE;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3E"}
package/dist/router.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isSignInFailure, SIGN_IN_PARAM } from "./api.js";
1
+ import { isFolderPath, isSignInFailure, SIGN_IN_PARAM } from "./api.js";
2
2
  export const PATHS = {
3
3
  /** The projects the person may see: the front page. */
4
4
  projects: "/",
@@ -10,7 +10,8 @@ export const PATHS = {
10
10
  };
11
11
  const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
12
12
  const PROJECT_KEY = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
13
- const PROJECT_PAGES = [
13
+ /** The pages of a project that take nothing after their name; the docs take a path. */
14
+ const PLAIN_PAGES = [
14
15
  "decisions",
15
16
  "feed",
16
17
  "skills",
@@ -30,7 +31,17 @@ export function matchRoute(pathname) {
30
31
  }
31
32
  if (path.startsWith(`${PATHS.project}/`)) {
32
33
  const [project, page, id, ...rest] = path.slice(PATHS.project.length + 1).split("/");
33
- if (project === undefined || !PROJECT_KEY.test(project) || rest.length > 0) {
34
+ if (project === undefined || !PROJECT_KEY.test(project)) {
35
+ return { name: "not-found" };
36
+ }
37
+ if (page === "docs") {
38
+ // The rest of the path is the document's, or a folder's, or nothing for the root.
39
+ const docPath = [id, ...rest].filter((segment) => segment !== undefined).join("/");
40
+ return isFolderPath(docPath)
41
+ ? { name: "docs", project, path: docPath }
42
+ : { name: "not-found" };
43
+ }
44
+ if (rest.length > 0) {
34
45
  return { name: "not-found" };
35
46
  }
36
47
  if (page === undefined) {
@@ -39,7 +50,7 @@ export function matchRoute(pathname) {
39
50
  if (page === "tasks" && id !== undefined && UUID.test(id)) {
40
51
  return { name: "task", project, id };
41
52
  }
42
- const found = PROJECT_PAGES.find((candidate) => candidate === page);
53
+ const found = PLAIN_PAGES.find((candidate) => candidate === page);
43
54
  return found !== undefined && id === undefined
44
55
  ? { name: found, project }
45
56
  : { name: "not-found" };
@@ -54,6 +65,10 @@ export function projectHref(key, page) {
54
65
  export function taskHref(key, id) {
55
66
  return `${PATHS.project}/${key}/tasks/${id}`;
56
67
  }
68
+ /** Where a document of a project is read, or a folder of them listed; `""` for the root. */
69
+ export function docHref(key, path) {
70
+ return path === "" ? projectHref(key, "docs") : `${PATHS.project}/${key}/docs/${path}`;
71
+ }
57
72
  /** Why the last sign-in did not complete, as the page's URL says it, or nothing. */
58
73
  export function signInFailureOf(search) {
59
74
  const value = new URLSearchParams(search).get(SIGN_IN_PARAM);
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
package/dist/routes.d.ts CHANGED
@@ -13,7 +13,7 @@ export declare const REST_ROUTES: {
13
13
  readonly tokens: "/api/v1/tokens";
14
14
  };
15
15
  /** What a project holds, each under `/api/v1/projects/<key>/<collection>`. */
16
- export declare const PROJECT_COLLECTIONS: readonly ["tasks", "decisions", "runs", "files", "events", "skills", "members"];
16
+ export declare const PROJECT_COLLECTIONS: readonly ["tasks", "decisions", "runs", "files", "events", "skills", "members", "docs"];
17
17
  export type ProjectCollection = (typeof PROJECT_COLLECTIONS)[number];
18
18
  /** Where a browser signs in and out. Signing in is per provider: `/auth/<provider>/...`. */
19
19
  export declare const AUTH_ROUTES: {
@@ -44,6 +44,8 @@ export declare function restPath(collection: "people" | "tokens" | "projects", i
44
44
  /**
45
45
  * The REST path of a project, of one of its collections, or of one item in it: the tasks of
46
46
  * `web` are at `projectPath("web", "tasks")`, task 7 at `projectPath("web", "tasks", "7")`.
47
+ * A document's path is one segment of the URL, its slashes encoded: `projectPath("web",
48
+ * "docs", "guides/onboarding")` is `/api/v1/projects/web/docs/guides%2Fonboarding`.
47
49
  */
48
50
  export declare function projectPath(key: string, collection?: ProjectCollection, id?: string): string;
49
51
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,mFAAmF;AACnF,eAAO,MAAM,WAAW;IACtB,sFAAsF;aACtF,EAAE,EAAE,YAAY;IAChB,+DAA+D;aAC/D,MAAM,EAAE,gBAAgB;IACxB,0EAA0E;aAC1E,QAAQ,EAAE,kBAAkB;IAC5B,4FAA4F;aAC5F,MAAM,EAAE,gBAAgB;IACxB,4FAA4F;aAC5F,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,YAC9B,OAAO,EACP,WAAW,EACX,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,CACD,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,4FAA4F;AAC5F,eAAO,MAAM,WAAW;IACtB,mFAAmF;aACnF,KAAK,aAAa,WAAW,KAAG,MAAM;IACtC,oDAAoD;aACpD,QAAQ,aAAa,WAAW,KAAG,MAAM;IACzC,mDAAmD;aACnD,MAAM,EAAE,cAAc;CACd,CAAC;AAEX,+FAA+F;AAC/F,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,gBAAgB,YAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,aAAa,CAExF;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAEvE;AAED,6FAA6F;AAC7F,wBAAgB,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5F"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,mFAAmF;AACnF,eAAO,MAAM,WAAW;IACtB,sFAAsF;aACtF,EAAE,EAAE,YAAY;IAChB,+DAA+D;aAC/D,MAAM,EAAE,gBAAgB;IACxB,0EAA0E;aAC1E,QAAQ,EAAE,kBAAkB;IAC5B,4FAA4F;aAC5F,MAAM,EAAE,gBAAgB;IACxB,4FAA4F;aAC5F,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,YAC9B,OAAO,EACP,WAAW,EACX,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,CACE,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,4FAA4F;AAC5F,eAAO,MAAM,WAAW;IACtB,mFAAmF;aACnF,KAAK,aAAa,WAAW,KAAG,MAAM;IACtC,oDAAoD;aACpD,QAAQ,aAAa,WAAW,KAAG,MAAM;IACzC,mDAAmD;aACnD,MAAM,EAAE,cAAc;CACd,CAAC;AAEX,+FAA+F;AAC/F,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,gBAAgB,YAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,aAAa,CAExF;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAEvE;AAED,6FAA6F;AAC7F,wBAAgB,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5F"}
package/dist/routes.js CHANGED
@@ -20,6 +20,7 @@ export const PROJECT_COLLECTIONS = [
20
20
  "events",
21
21
  "skills",
22
22
  "members",
23
+ "docs",
23
24
  ];
24
25
  /** Where a browser signs in and out. Signing in is per provider: `/auth/<provider>/...`. */
25
26
  export const AUTH_ROUTES = {
@@ -57,6 +58,8 @@ export function restPath(collection, id) {
57
58
  /**
58
59
  * The REST path of a project, of one of its collections, or of one item in it: the tasks of
59
60
  * `web` are at `projectPath("web", "tasks")`, task 7 at `projectPath("web", "tasks", "7")`.
61
+ * A document's path is one segment of the URL, its slashes encoded: `projectPath("web",
62
+ * "docs", "guides/onboarding")` is `/api/v1/projects/web/docs/guides%2Fonboarding`.
60
63
  */
61
64
  export function projectPath(key, collection, id) {
62
65
  const base = restPath("projects", key);
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAKA,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,sFAAsF;IACtF,EAAE,EAAE,YAAY;IAChB,+DAA+D;IAC/D,MAAM,EAAE,gBAAgB;IACxB,0EAA0E;IAC1E,QAAQ,EAAE,kBAAkB;IAC5B,4FAA4F;IAC5F,MAAM,EAAE,gBAAgB;IACxB,4FAA4F;IAC5F,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAEX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,WAAW;IACX,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;CACD,CAAC;AAIX,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,mFAAmF;IACnF,KAAK,EAAE,CAAC,QAAqB,EAAU,EAAE,CAAC,SAAS,QAAQ,QAAQ;IACnE,oDAAoD;IACpD,QAAQ,EAAE,CAAC,QAAqB,EAAU,EAAE,CAAC,SAAS,QAAQ,WAAW;IACzE,mDAAmD;IACnD,MAAM,EAAE,cAAc;CACd,CAAC;AAEX,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAGpF,MAAM,UAAU,eAAe,CAAC,KAAgC;IAC9D,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,QAAqB,EAAE,QAAgB;IAC/D,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAsB;IAC7D,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,IAAI,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,QAAQ,CAAC,UAA4C,EAAE,EAAU;IAC/E,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,UAA8B,EAAE,EAAW;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,SAAS;QACrB,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,EAAE;QACzB,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAKA,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,sFAAsF;IACtF,EAAE,EAAE,YAAY;IAChB,+DAA+D;IAC/D,MAAM,EAAE,gBAAgB;IACxB,0EAA0E;IAC1E,QAAQ,EAAE,kBAAkB;IAC5B,4FAA4F;IAC5F,MAAM,EAAE,gBAAgB;IACxB,4FAA4F;IAC5F,MAAM,EAAE,gBAAgB;CAChB,CAAC;AAEX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,WAAW;IACX,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;CACE,CAAC;AAIX,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,mFAAmF;IACnF,KAAK,EAAE,CAAC,QAAqB,EAAU,EAAE,CAAC,SAAS,QAAQ,QAAQ;IACnE,oDAAoD;IACpD,QAAQ,EAAE,CAAC,QAAqB,EAAU,EAAE,CAAC,SAAS,QAAQ,WAAW;IACzE,mDAAmD;IACnD,MAAM,EAAE,cAAc;CACd,CAAC;AAEX,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAGpF,MAAM,UAAU,eAAe,CAAC,KAAgC;IAC9D,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,QAAqB,EAAE,QAAgB;IAC/D,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAsB;IAC7D,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,IAAI,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,QAAQ,CAAC,UAA4C,EAAE,EAAU;IAC/E,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,UAA8B,EAAE,EAAW;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,SAAS;QACrB,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,EAAE;QACzB,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC"}