@kvman/kvbuilder 0.2.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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/api.d.ts +271 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +2 -0
- package/dist/api.js.map +1 -0
- package/dist/app/install-source.d.ts +3 -0
- package/dist/app/install-source.d.ts.map +1 -0
- package/dist/app/install-source.js +11 -0
- package/dist/app/install-source.js.map +1 -0
- package/dist/app/register-app-reads.d.ts +3 -0
- package/dist/app/register-app-reads.d.ts.map +1 -0
- package/dist/app/register-app-reads.js +36 -0
- package/dist/app/register-app-reads.js.map +1 -0
- package/dist/app/register-app.d.ts +3 -0
- package/dist/app/register-app.d.ts.map +1 -0
- package/dist/app/register-app.js +124 -0
- package/dist/app/register-app.js.map +1 -0
- package/dist/build/register-build.d.ts +3 -0
- package/dist/build/register-build.d.ts.map +1 -0
- package/dist/build/register-build.js +34 -0
- package/dist/build/register-build.js.map +1 -0
- package/dist/connectors/docs.d.ts +30 -0
- package/dist/connectors/docs.d.ts.map +1 -0
- package/dist/connectors/docs.js +18 -0
- package/dist/connectors/docs.js.map +1 -0
- package/dist/connectors/ext.d.ts +40 -0
- package/dist/connectors/ext.d.ts.map +1 -0
- package/dist/connectors/ext.js +13 -0
- package/dist/connectors/ext.js.map +1 -0
- package/dist/connectors/kvman.d.ts +113 -0
- package/dist/connectors/kvman.d.ts.map +1 -0
- package/dist/connectors/kvman.js +41 -0
- package/dist/connectors/kvman.js.map +1 -0
- package/dist/connectors/preset.d.ts +26 -0
- package/dist/connectors/preset.d.ts.map +1 -0
- package/dist/connectors/preset.js +11 -0
- package/dist/connectors/preset.js.map +1 -0
- package/dist/connectors/preview.d.ts +41 -0
- package/dist/connectors/preview.d.ts.map +1 -0
- package/dist/connectors/preview.js +14 -0
- package/dist/connectors/preview.js.map +1 -0
- package/dist/docs/guides.d.ts +54 -0
- package/dist/docs/guides.d.ts.map +1 -0
- package/dist/docs/guides.js +68 -0
- package/dist/docs/guides.js.map +1 -0
- package/dist/docs/own-docs.d.ts +5 -0
- package/dist/docs/own-docs.d.ts.map +1 -0
- package/dist/docs/own-docs.js +36 -0
- package/dist/docs/own-docs.js.map +1 -0
- package/dist/docs/pages.d.ts +18 -0
- package/dist/docs/pages.d.ts.map +1 -0
- package/dist/docs/pages.js +44 -0
- package/dist/docs/pages.js.map +1 -0
- package/dist/docs/register-docs.d.ts +3 -0
- package/dist/docs/register-docs.d.ts.map +1 -0
- package/dist/docs/register-docs.js +25 -0
- package/dist/docs/register-docs.js.map +1 -0
- package/dist/ext/ext-check.d.ts +8 -0
- package/dist/ext/ext-check.d.ts.map +1 -0
- package/dist/ext/ext-check.js +26 -0
- package/dist/ext/ext-check.js.map +1 -0
- package/dist/ext/ext-list.d.ts +8 -0
- package/dist/ext/ext-list.d.ts.map +1 -0
- package/dist/ext/ext-list.js +20 -0
- package/dist/ext/ext-list.js.map +1 -0
- package/dist/ext/ext-new.d.ts +15 -0
- package/dist/ext/ext-new.d.ts.map +1 -0
- package/dist/ext/ext-new.js +11 -0
- package/dist/ext/ext-new.js.map +1 -0
- package/dist/ext/findings.d.ts +12 -0
- package/dist/ext/findings.d.ts.map +1 -0
- package/dist/ext/findings.js +44 -0
- package/dist/ext/findings.js.map +1 -0
- package/dist/ext/register-ext.d.ts +3 -0
- package/dist/ext/register-ext.d.ts.map +1 -0
- package/dist/ext/register-ext.js +49 -0
- package/dist/ext/register-ext.js.map +1 -0
- package/dist/folders.d.ts +18 -0
- package/dist/folders.d.ts.map +1 -0
- package/dist/folders.js +53 -0
- package/dist/folders.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/job-options.d.ts +33 -0
- package/dist/job-options.d.ts.map +1 -0
- package/dist/job-options.js +13 -0
- package/dist/job-options.js.map +1 -0
- package/dist/preset/register-preset.d.ts +3 -0
- package/dist/preset/register-preset.d.ts.map +1 -0
- package/dist/preset/register-preset.js +55 -0
- package/dist/preset/register-preset.js.map +1 -0
- package/dist/preview/preview-call.d.ts +20 -0
- package/dist/preview/preview-call.d.ts.map +1 -0
- package/dist/preview/preview-call.js +39 -0
- package/dist/preview/preview-call.js.map +1 -0
- package/dist/preview/preview-start.d.ts +8 -0
- package/dist/preview/preview-start.d.ts.map +1 -0
- package/dist/preview/preview-start.js +103 -0
- package/dist/preview/preview-start.js.map +1 -0
- package/dist/preview/preview-state.d.ts +11 -0
- package/dist/preview/preview-state.d.ts.map +1 -0
- package/dist/preview/preview-state.js +18 -0
- package/dist/preview/preview-state.js.map +1 -0
- package/dist/preview/register-preview.d.ts +3 -0
- package/dist/preview/register-preview.d.ts.map +1 -0
- package/dist/preview/register-preview.js +75 -0
- package/dist/preview/register-preview.js.map +1 -0
- package/dist/problems.d.ts +8 -0
- package/dist/problems.d.ts.map +1 -0
- package/dist/problems.js +11 -0
- package/dist/problems.js.map +1 -0
- package/dist/program-command.d.ts +17 -0
- package/dist/program-command.d.ts.map +1 -0
- package/dist/program-command.js +12 -0
- package/dist/program-command.js.map +1 -0
- package/dist/query/register-app-query.d.ts +3 -0
- package/dist/query/register-app-query.d.ts.map +1 -0
- package/dist/query/register-app-query.js +39 -0
- package/dist/query/register-app-query.js.map +1 -0
- package/dist/register-with-kvcoder.d.ts +3 -0
- package/dist/register-with-kvcoder.d.ts.map +1 -0
- package/dist/register-with-kvcoder.js +20 -0
- package/dist/register-with-kvcoder.js.map +1 -0
- package/dist/run-bin.d.ts +31 -0
- package/dist/run-bin.d.ts.map +1 -0
- package/dist/run-bin.js +137 -0
- package/dist/run-bin.js.map +1 -0
- package/dist/run-program.d.ts +12 -0
- package/dist/run-program.d.ts.map +1 -0
- package/dist/run-program.js +49 -0
- package/dist/run-program.js.map +1 -0
- package/docs/building.md +154 -0
- package/docs/guide.md +34 -0
- package/locales/ar.json +12 -0
- package/locales/en.json +12 -0
- package/package.json +55 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const extConnector: {
|
|
2
|
+
name: string;
|
|
3
|
+
optIn: true;
|
|
4
|
+
description: string;
|
|
5
|
+
commands: ({
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
examples: ({
|
|
9
|
+
description: string;
|
|
10
|
+
input: {
|
|
11
|
+
name: string;
|
|
12
|
+
namespace: string;
|
|
13
|
+
folder: string;
|
|
14
|
+
web?: never;
|
|
15
|
+
};
|
|
16
|
+
} | {
|
|
17
|
+
description: string;
|
|
18
|
+
input: {
|
|
19
|
+
name: string;
|
|
20
|
+
namespace: string;
|
|
21
|
+
folder: string;
|
|
22
|
+
web: boolean;
|
|
23
|
+
};
|
|
24
|
+
})[];
|
|
25
|
+
} | {
|
|
26
|
+
name: string;
|
|
27
|
+
command: string;
|
|
28
|
+
examples?: never;
|
|
29
|
+
} | {
|
|
30
|
+
name: string;
|
|
31
|
+
command: string;
|
|
32
|
+
examples: {
|
|
33
|
+
description: string;
|
|
34
|
+
input: {
|
|
35
|
+
folder: string;
|
|
36
|
+
};
|
|
37
|
+
}[];
|
|
38
|
+
})[];
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=ext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/connectors/ext.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUxB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The `ext` connector (plan 09 §9.1): builds extension projects in the workspace, through the testkit's bins.
|
|
2
|
+
export const extConnector = {
|
|
3
|
+
name: 'ext',
|
|
4
|
+
optIn: true,
|
|
5
|
+
description: 'Create, list, check, and test kvman extension projects in the workspace. Use it for any work on an extension, and run check, then test, after changing one.',
|
|
6
|
+
commands: [
|
|
7
|
+
{ name: 'new', command: 'kvbuilder.ext.new', examples: [{ description: 'Scaffold a notes extension', input: { name: 'notes', namespace: 'notes', folder: 'notes' } }, { description: 'Scaffold one with a Vue component', input: { name: 'cards', namespace: 'cards', folder: 'cards', web: true } }] },
|
|
8
|
+
{ name: 'list', command: 'kvbuilder.ext.list' },
|
|
9
|
+
{ name: 'check', command: 'kvbuilder.ext.check', examples: [{ description: 'Check the notes project', input: { folder: 'notes' } }] },
|
|
10
|
+
{ name: 'test', command: 'kvbuilder.ext.test', examples: [{ description: 'Test the notes project', input: { folder: 'notes' } }] },
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext.js","sourceRoot":"","sources":["../../src/connectors/ext.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,IAAa;IACpB,WAAW,EAAE,6JAA6J;IAC1K,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE;QACvS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE;QAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE;QACrI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE;KACnI;CACF,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
export declare const kvmanConnector: {
|
|
2
|
+
name: string;
|
|
3
|
+
optIn: true;
|
|
4
|
+
description: string;
|
|
5
|
+
commands: ({
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
asks?: never;
|
|
9
|
+
examples?: never;
|
|
10
|
+
} | {
|
|
11
|
+
name: string;
|
|
12
|
+
command: string;
|
|
13
|
+
asks: true;
|
|
14
|
+
examples: {
|
|
15
|
+
description: string;
|
|
16
|
+
input: {
|
|
17
|
+
model: string;
|
|
18
|
+
};
|
|
19
|
+
}[];
|
|
20
|
+
} | {
|
|
21
|
+
name: string;
|
|
22
|
+
command: string;
|
|
23
|
+
asks: true;
|
|
24
|
+
examples: {
|
|
25
|
+
description: string;
|
|
26
|
+
input: {
|
|
27
|
+
key: string;
|
|
28
|
+
value: string;
|
|
29
|
+
scope: string;
|
|
30
|
+
};
|
|
31
|
+
}[];
|
|
32
|
+
} | {
|
|
33
|
+
name: string;
|
|
34
|
+
command: string;
|
|
35
|
+
asks: true;
|
|
36
|
+
examples: {
|
|
37
|
+
description: string;
|
|
38
|
+
input: {
|
|
39
|
+
key: string;
|
|
40
|
+
scope: string;
|
|
41
|
+
};
|
|
42
|
+
}[];
|
|
43
|
+
} | {
|
|
44
|
+
name: string;
|
|
45
|
+
command: string;
|
|
46
|
+
asks: true;
|
|
47
|
+
examples: {
|
|
48
|
+
description: string;
|
|
49
|
+
input: {
|
|
50
|
+
source: string;
|
|
51
|
+
};
|
|
52
|
+
}[];
|
|
53
|
+
} | {
|
|
54
|
+
name: string;
|
|
55
|
+
command: string;
|
|
56
|
+
asks: true;
|
|
57
|
+
examples: {
|
|
58
|
+
description: string;
|
|
59
|
+
input: {
|
|
60
|
+
name: string;
|
|
61
|
+
};
|
|
62
|
+
}[];
|
|
63
|
+
} | {
|
|
64
|
+
name: string;
|
|
65
|
+
command: string;
|
|
66
|
+
asks: true;
|
|
67
|
+
examples: {
|
|
68
|
+
description: string;
|
|
69
|
+
input: {};
|
|
70
|
+
}[];
|
|
71
|
+
} | {
|
|
72
|
+
name: string;
|
|
73
|
+
command: string;
|
|
74
|
+
examples: {
|
|
75
|
+
description: string;
|
|
76
|
+
input: {
|
|
77
|
+
status: string;
|
|
78
|
+
limit: number;
|
|
79
|
+
};
|
|
80
|
+
}[];
|
|
81
|
+
asks?: never;
|
|
82
|
+
} | {
|
|
83
|
+
name: string;
|
|
84
|
+
command: string;
|
|
85
|
+
examples: {
|
|
86
|
+
description: string;
|
|
87
|
+
input: {
|
|
88
|
+
id: string;
|
|
89
|
+
};
|
|
90
|
+
}[];
|
|
91
|
+
asks?: never;
|
|
92
|
+
} | {
|
|
93
|
+
name: string;
|
|
94
|
+
command: string;
|
|
95
|
+
examples: ({
|
|
96
|
+
description: string;
|
|
97
|
+
input: {
|
|
98
|
+
name: string;
|
|
99
|
+
input: {
|
|
100
|
+
limit: number;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
} | {
|
|
104
|
+
description: string;
|
|
105
|
+
input: {
|
|
106
|
+
name: string;
|
|
107
|
+
input?: never;
|
|
108
|
+
};
|
|
109
|
+
})[];
|
|
110
|
+
asks?: never;
|
|
111
|
+
})[];
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=kvman.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kvman.d.ts","sourceRoot":"","sources":["../../src/connectors/kvman.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC1B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// The `kvman` connector (plan 09 §9.1; ADR 0010, 8; ADR 0022, 5, 7, and 8; ADR 0027, 13): shows and changes the app
|
|
2
|
+
// the agent runs in. Each command wraps a kernel command or query. The ones that change the app ask the person first.
|
|
3
|
+
export const kvmanConnector = {
|
|
4
|
+
name: 'kvman',
|
|
5
|
+
optIn: true,
|
|
6
|
+
description: 'See and change the app you are running in: its default model, settings, extensions, and preset, and its workspaces, jobs, processes, and health. Use it for any change to kvman itself. The person is asked before each change. query-get runs a public query of any installed extension. A change to the extensions or the preset is saved to the preset file and applies at the next start of kvman.',
|
|
7
|
+
commands: [
|
|
8
|
+
{ name: 'model-list', command: 'kvbuilder.app.model.list' },
|
|
9
|
+
{ name: 'model-set', command: 'kvbuilder.app.model.set', asks: true, examples: [{ description: 'Use another model', input: { model: 'anthropic/claude-sonnet-5-5' } }] },
|
|
10
|
+
{ name: 'settings-list', command: 'kvbuilder.app.settings.list' },
|
|
11
|
+
{ name: 'settings-set', command: 'kvbuilder.app.settings.set', asks: true, examples: [{ description: 'Set a setting for everyone', input: { key: 'kvwebui.theme', value: 'dark', scope: 'global' } }] },
|
|
12
|
+
{ name: 'settings-reset', command: 'kvbuilder.app.settings.reset', asks: true, examples: [{ description: 'Go back to the default', input: { key: 'kvwebui.theme', scope: 'global' } }] },
|
|
13
|
+
{ name: 'extensions-list', command: 'kvbuilder.app.extensions.list' },
|
|
14
|
+
{
|
|
15
|
+
name: 'extensions-install',
|
|
16
|
+
command: 'kvbuilder.app.extensions.install',
|
|
17
|
+
asks: true,
|
|
18
|
+
examples: [
|
|
19
|
+
{ description: 'Add an npm extension', input: { source: 'npm:@acme/notes@1.2.3' } },
|
|
20
|
+
{ description: 'Add the project in the workspace folder notes', input: { source: 'path:notes' } },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{ name: 'extensions-uninstall', command: 'kvbuilder.app.extensions.uninstall', asks: true, examples: [{ description: 'Remove one', input: { name: '@acme/notes' } }] },
|
|
24
|
+
{ name: 'restart', command: 'kvbuilder.app.restart', asks: true, examples: [{ description: 'Restart kvman to finish adding the notes page', input: {} }] },
|
|
25
|
+
{ name: 'preset-get', command: 'kvbuilder.app.preset.get' },
|
|
26
|
+
{ name: 'workspaces-list', command: 'kvbuilder.app.workspaces.list' },
|
|
27
|
+
{ name: 'jobs-list', command: 'kvbuilder.app.jobs.list', examples: [{ description: 'See the jobs that failed', input: { status: 'failed', limit: 20 } }] },
|
|
28
|
+
{ name: 'jobs-get', command: 'kvbuilder.app.jobs.get', examples: [{ description: 'Read one job', input: { id: 'the job id' } }] },
|
|
29
|
+
{ name: 'processes-list', command: 'kvbuilder.app.processes.list' },
|
|
30
|
+
{ name: 'health-get', command: 'kvbuilder.app.health.get' },
|
|
31
|
+
{
|
|
32
|
+
name: 'query-get',
|
|
33
|
+
command: 'kvbuilder.app.query.get',
|
|
34
|
+
examples: [
|
|
35
|
+
{ description: "Read an installed extension's data", input: { name: 'kvcoder.session.list', input: { limit: 10 } } },
|
|
36
|
+
{ description: 'Run a query that takes nothing', input: { name: 'kvai.provider.list' } },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=kvman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kvman.js","sourceRoot":"","sources":["../../src/connectors/kvman.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const presetConnector: {
|
|
2
|
+
name: string;
|
|
3
|
+
optIn: true;
|
|
4
|
+
description: string;
|
|
5
|
+
commands: ({
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
examples: {
|
|
9
|
+
description: string;
|
|
10
|
+
input: {
|
|
11
|
+
name: string;
|
|
12
|
+
file: string;
|
|
13
|
+
};
|
|
14
|
+
}[];
|
|
15
|
+
} | {
|
|
16
|
+
name: string;
|
|
17
|
+
command: string;
|
|
18
|
+
examples: {
|
|
19
|
+
description: string;
|
|
20
|
+
input: {
|
|
21
|
+
file: string;
|
|
22
|
+
};
|
|
23
|
+
}[];
|
|
24
|
+
})[];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/connectors/preset.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;CAQ3B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// The `preset` connector (plan 09 §9.1): writes and checks preset files.
|
|
2
|
+
export const presetConnector = {
|
|
3
|
+
name: 'preset',
|
|
4
|
+
optIn: true,
|
|
5
|
+
description: 'Write and check kvman presets. Use it to create a preset file, and to check it before running it.',
|
|
6
|
+
commands: [
|
|
7
|
+
{ name: 'new', command: 'kvbuilder.preset.new', examples: [{ description: 'Write a preset for a notes app', input: { name: 'notes-app', file: 'notes-app.json' } }] },
|
|
8
|
+
{ name: 'check', command: 'kvbuilder.preset.check', examples: [{ description: 'Check that preset', input: { file: 'notes-app.json' } }] },
|
|
9
|
+
],
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/connectors/preset.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,IAAa;IACpB,WAAW,EAAE,mGAAmG;IAChH,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE;QACrK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE;KAC1I;CACF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const previewConnector: {
|
|
2
|
+
name: string;
|
|
3
|
+
optIn: true;
|
|
4
|
+
description: string;
|
|
5
|
+
commands: ({
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
examples: {
|
|
9
|
+
description: string;
|
|
10
|
+
input: {
|
|
11
|
+
extensions: string[];
|
|
12
|
+
};
|
|
13
|
+
}[];
|
|
14
|
+
} | {
|
|
15
|
+
name: string;
|
|
16
|
+
command: string;
|
|
17
|
+
examples?: never;
|
|
18
|
+
} | {
|
|
19
|
+
name: string;
|
|
20
|
+
command: string;
|
|
21
|
+
examples: {
|
|
22
|
+
description: string;
|
|
23
|
+
input: {
|
|
24
|
+
name: string;
|
|
25
|
+
};
|
|
26
|
+
}[];
|
|
27
|
+
} | {
|
|
28
|
+
name: string;
|
|
29
|
+
command: string;
|
|
30
|
+
examples: {
|
|
31
|
+
description: string;
|
|
32
|
+
input: {
|
|
33
|
+
name: string;
|
|
34
|
+
input: {
|
|
35
|
+
text: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
}[];
|
|
39
|
+
})[];
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/connectors/preview.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY5B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// The `preview` connector (plan 09 §9.1 and §9.3; ADR 0022, 8): runs projects in a separate kvman, and calls them there.
|
|
2
|
+
export const previewConnector = {
|
|
3
|
+
name: 'preview',
|
|
4
|
+
optIn: true,
|
|
5
|
+
description: 'Run kvman extension projects in a separate kvman with a temporary home. Use it to show the person an extension project working, to check a project by calling its commands and queries, and stop it when you are done. It runs nothing else: start any other app or page with shell.',
|
|
6
|
+
commands: [
|
|
7
|
+
{ name: 'start', command: 'kvbuilder.preview.start', examples: [{ description: 'Preview the notes project', input: { extensions: ['notes'] } }] },
|
|
8
|
+
{ name: 'stop', command: 'kvbuilder.preview.stop' },
|
|
9
|
+
{ name: 'status', command: 'kvbuilder.preview.status' },
|
|
10
|
+
{ name: 'query-get', command: 'kvbuilder.preview.query.get', examples: [{ description: "Read the previewed project's data", input: { name: 'notes.item.list' } }] },
|
|
11
|
+
{ name: 'command-run', command: 'kvbuilder.preview.command.run', examples: [{ description: 'Run a command of the previewed project', input: { name: 'notes.item.add', input: { text: 'Milk' } } }] },
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/connectors/preview.ts"],"names":[],"mappings":"AAAA,yHAAyH;AACzH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,IAAa;IACpB,WAAW,EACT,sRAAsR;IACxR,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE;QACjJ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE;QACnD,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,0BAA0B,EAAE;QACvD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE;QACnK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE;KACrM;CACF,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z, type Ctx } from '@kvman/sdk';
|
|
2
|
+
export declare const guidePageSchema: z.ZodObject<{
|
|
3
|
+
extension: z.ZodString;
|
|
4
|
+
topic: z.ZodString;
|
|
5
|
+
title: z.ZodString;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export declare const guideListSchema: z.ZodObject<{
|
|
8
|
+
pages: z.ZodArray<z.ZodObject<{
|
|
9
|
+
extension: z.ZodString;
|
|
10
|
+
topic: z.ZodString;
|
|
11
|
+
title: z.ZodString;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
problems: z.ZodArray<z.ZodObject<{
|
|
14
|
+
extension: z.ZodString;
|
|
15
|
+
problem: z.ZodObject<{
|
|
16
|
+
code: z.ZodUnion<readonly [z.ZodEnum<{
|
|
17
|
+
VALIDATION_FAILED: "VALIDATION_FAILED";
|
|
18
|
+
NOT_FOUND: "NOT_FOUND";
|
|
19
|
+
NOT_PUBLIC: "NOT_PUBLIC";
|
|
20
|
+
NOT_A_COMMAND: "NOT_A_COMMAND";
|
|
21
|
+
READ_ONLY: "READ_ONLY";
|
|
22
|
+
NO_JOB: "NO_JOB";
|
|
23
|
+
TOO_LARGE: "TOO_LARGE";
|
|
24
|
+
TOO_DEEP: "TOO_DEEP";
|
|
25
|
+
TIMEOUT: "TIMEOUT";
|
|
26
|
+
CANCELLED: "CANCELLED";
|
|
27
|
+
WORKER_CRASHED: "WORKER_CRASHED";
|
|
28
|
+
INTERRUPTED: "INTERRUPTED";
|
|
29
|
+
HANDLER_FAILED: "HANDLER_FAILED";
|
|
30
|
+
FORBIDDEN_ORIGIN: "FORBIDDEN_ORIGIN";
|
|
31
|
+
PROCESS_RUNNING: "PROCESS_RUNNING";
|
|
32
|
+
PORT_IN_USE: "PORT_IN_USE";
|
|
33
|
+
EXTENSION_INVALID: "EXTENSION_INVALID";
|
|
34
|
+
KVMAN_RUNNING: "KVMAN_RUNNING";
|
|
35
|
+
}>, z.ZodString]>;
|
|
36
|
+
message: z.ZodString;
|
|
37
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("@kvman/sdk").Json, unknown, z.core.$ZodTypeInternals<import("@kvman/sdk").Json, unknown>>>>;
|
|
38
|
+
}, z.core.$strict>;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export declare const guideSchema: z.ZodObject<{
|
|
42
|
+
extension: z.ZodString;
|
|
43
|
+
topic: z.ZodString;
|
|
44
|
+
title: z.ZodString;
|
|
45
|
+
markdown: z.ZodString;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
/** Every page: the built-in guides first, then each documenting extension's, with the extensions whose docs failed. */
|
|
48
|
+
export declare function listGuides(ctx: Ctx): Promise<z.output<typeof guideListSchema>>;
|
|
49
|
+
/** One page: a built-in guide with no extension (or `kvman`), else the extension's own page. */
|
|
50
|
+
export declare function getGuide(ctx: Ctx, input: {
|
|
51
|
+
extension?: string | undefined;
|
|
52
|
+
topic: string;
|
|
53
|
+
}): Promise<z.output<typeof guideSchema>>;
|
|
54
|
+
//# sourceMappingURL=guides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guides.d.ts","sourceRoot":"","sources":["../../src/docs/guides.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,CAAC,EAAE,KAAK,GAAG,EAAgB,MAAM,YAAY,CAAC;AAWpF,eAAO,MAAM,eAAe;;;;iBAA4E,CAAC;AAEzG,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;iBAAmD,CAAC;AAoB5E,uHAAuH;AACvH,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC,CAcpF;AAED,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,CAcxI"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ProblemError, problemSchema, z } from '@kvman/sdk';
|
|
2
|
+
import { invalid } from "../problems.js";
|
|
3
|
+
import { testkitDocsFolder } from "../run-bin.js";
|
|
4
|
+
import { listPages, noSuchTopic, readPage, topicPattern } from "./pages.js";
|
|
5
|
+
// The `docs` connector's two queries (plan 09 §9.1 and §9.5, ADR 0010, 15–17 and 22): the built-in guides of kvman
|
|
6
|
+
// (the testkit's `docs/`), then the pages every loaded extension serves through its public `<namespace>.docs.list`
|
|
7
|
+
// and `<namespace>.docs.get`. kvbuilder pulls them, so no extension registers anything with it.
|
|
8
|
+
const builtIn = 'kvman';
|
|
9
|
+
export const guidePageSchema = z.object({ extension: z.string(), topic: z.string(), title: z.string() });
|
|
10
|
+
export const guideListSchema = z.object({
|
|
11
|
+
pages: z.array(guidePageSchema),
|
|
12
|
+
problems: z.array(z.object({ extension: z.string(), problem: problemSchema })),
|
|
13
|
+
});
|
|
14
|
+
export const guideSchema = guidePageSchema.extend({ markdown: z.string() });
|
|
15
|
+
const listAnswerSchema = z.array(z.strictObject({ topic: z.string(), title: z.string() }));
|
|
16
|
+
const pageAnswerSchema = z.strictObject({ topic: z.string(), title: z.string(), markdown: z.string() });
|
|
17
|
+
// The loaded extensions that serve docs: both queries, public.
|
|
18
|
+
async function documentedExtensions(ctx) {
|
|
19
|
+
const extensions = await ctx.exec('kernel.extensions.list', {});
|
|
20
|
+
return extensions
|
|
21
|
+
.filter((extension) => [`${extension.namespace}.docs.list`, `${extension.namespace}.docs.get`].every((wanted) => extension.queries.some((query) => query.name === wanted && query.public)))
|
|
22
|
+
.map((extension) => ({ name: extension.name, namespace: extension.namespace }))
|
|
23
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
24
|
+
}
|
|
25
|
+
function invalidAnswer(extension, query, what) {
|
|
26
|
+
return { code: 'VALIDATION_FAILED', message: `${extension.namespace}.${query} answered something other than ${what}.` };
|
|
27
|
+
}
|
|
28
|
+
/** Every page: the built-in guides first, then each documenting extension's, with the extensions whose docs failed. */
|
|
29
|
+
export async function listGuides(ctx) {
|
|
30
|
+
const pages = listPages(testkitDocsFolder()).map((entry) => ({ extension: builtIn, ...entry }));
|
|
31
|
+
const problems = [];
|
|
32
|
+
for (const extension of await documentedExtensions(ctx)) {
|
|
33
|
+
try {
|
|
34
|
+
const answer = listAnswerSchema.safeParse(await ctx.exec(`${extension.namespace}.docs.list`, {}));
|
|
35
|
+
if (answer.success)
|
|
36
|
+
for (const entry of answer.data)
|
|
37
|
+
pages.push({ extension: extension.name, ...entry });
|
|
38
|
+
else
|
|
39
|
+
problems.push({ extension: extension.name, problem: invalidAnswer(extension, 'docs.list', 'a list of pages') });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (!(error instanceof ProblemError))
|
|
43
|
+
throw error;
|
|
44
|
+
problems.push({ extension: extension.name, problem: error.problem });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { pages, problems };
|
|
48
|
+
}
|
|
49
|
+
/** One page: a built-in guide with no extension (or `kvman`), else the extension's own page. */
|
|
50
|
+
export async function getGuide(ctx, input) {
|
|
51
|
+
if (!topicPattern.test(input.topic))
|
|
52
|
+
throw invalid(`"${input.topic}" isn't a lowercase kebab-case topic.`, { topic: input.topic });
|
|
53
|
+
if (input.extension === undefined || input.extension === builtIn) {
|
|
54
|
+
const page = readPage(testkitDocsFolder(), input.topic);
|
|
55
|
+
if (page === undefined)
|
|
56
|
+
throw noSuchTopic(input.topic, builtIn);
|
|
57
|
+
return { extension: builtIn, ...page };
|
|
58
|
+
}
|
|
59
|
+
const documented = (await documentedExtensions(ctx)).find((extension) => extension.name === input.extension);
|
|
60
|
+
if (documented === undefined) {
|
|
61
|
+
throw new ProblemError({ code: 'NOT_FOUND', message: `${input.extension} isn't loaded or doesn't serve docs.`, params: { extension: input.extension } });
|
|
62
|
+
}
|
|
63
|
+
const page = pageAnswerSchema.safeParse(await ctx.exec(`${documented.namespace}.docs.get`, { topic: input.topic }));
|
|
64
|
+
if (!page.success)
|
|
65
|
+
throw invalid(invalidAnswer(documented, 'docs.get', 'a page').message, { extension: documented.name, topic: input.topic });
|
|
66
|
+
return { extension: documented.name, ...page.data };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=guides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/docs/guides.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"own-docs.d.ts","sourceRoot":"","sources":["../../src/docs/own-docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAUzC,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,CAIlC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAmB9C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { z } from '@kvman/sdk';
|
|
3
|
+
import { listPages, noSuchTopic, readPage } from "./pages.js";
|
|
4
|
+
// kvbuilder's own docs pair (plan 09 §9.5, ADR 0010, 22): the pages in its `docs/` folder, except `guide.md`, which
|
|
5
|
+
// is the section `/build-kvman` sets in a chat (ADR 0027, 12 and 13). The folder sits next to `src/` and `dist/`.
|
|
6
|
+
const docsFolder = fileURLToPath(new URL('../../docs/', import.meta.url));
|
|
7
|
+
const notPages = ['guide'];
|
|
8
|
+
/** The guide `/build-kvman` gives a chat (`docs/guide.md`). */
|
|
9
|
+
export function readGuide() {
|
|
10
|
+
const page = readPage(docsFolder, 'guide');
|
|
11
|
+
if (page === undefined)
|
|
12
|
+
throw new Error('docs/guide.md is missing.');
|
|
13
|
+
return page.markdown;
|
|
14
|
+
}
|
|
15
|
+
export function registerOwnDocs(ctx) {
|
|
16
|
+
ctx.registerQuery('kvbuilder.docs.list', {
|
|
17
|
+
description: 'Lists the documentation pages of kvbuilder.',
|
|
18
|
+
public: true,
|
|
19
|
+
input: z.object({}),
|
|
20
|
+
output: z.array(z.object({ topic: z.string(), title: z.string() })),
|
|
21
|
+
handle: () => listPages(docsFolder, notPages),
|
|
22
|
+
});
|
|
23
|
+
ctx.registerQuery('kvbuilder.docs.get', {
|
|
24
|
+
description: 'Gives one documentation page of kvbuilder.',
|
|
25
|
+
public: true,
|
|
26
|
+
input: z.object({ topic: z.string().describe('The page topic, such as building.') }),
|
|
27
|
+
output: z.object({ topic: z.string(), title: z.string(), markdown: z.string() }),
|
|
28
|
+
handle: (input) => {
|
|
29
|
+
const page = readPage(docsFolder, input.topic, notPages);
|
|
30
|
+
if (page === undefined)
|
|
31
|
+
throw noSuchTopic(input.topic, 'kvbuilder');
|
|
32
|
+
return page;
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=own-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"own-docs.js","sourceRoot":"","sources":["../../src/docs/own-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAY,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9D,oHAAoH;AACpH,kHAAkH;AAElH,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1E,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAU,CAAC;AAEpC,+DAA+D;AAC/D,MAAM,UAAU,SAAS;IACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,GAAG,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACvC,WAAW,EAAE,6CAA6C;QAC1D,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;KAC9C,CAAC,CAAC;IACH,GAAG,CAAC,aAAa,CAAC,oBAAoB,EAAE;QACtC,WAAW,EAAE,4CAA4C;QACzD,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;QACpF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChF,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ProblemError } from '@kvman/sdk';
|
|
2
|
+
export declare const topicPattern: RegExp;
|
|
3
|
+
/** A page in a listing. */
|
|
4
|
+
export type PageEntry = {
|
|
5
|
+
topic: string;
|
|
6
|
+
title: string;
|
|
7
|
+
};
|
|
8
|
+
/** A page with its content. */
|
|
9
|
+
export type Page = PageEntry & {
|
|
10
|
+
markdown: string;
|
|
11
|
+
};
|
|
12
|
+
/** The page files of `folder` (without `exclude`), sorted by topic. */
|
|
13
|
+
export declare function listPages(folder: string, exclude?: readonly string[]): PageEntry[];
|
|
14
|
+
/** The page on `topic`, or `undefined` when the topic isn't a valid name or has no file. */
|
|
15
|
+
export declare function readPage(folder: string, topic: string, exclude?: readonly string[]): Page | undefined;
|
|
16
|
+
/** The `NOT_FOUND` Problem for a topic with no page. */
|
|
17
|
+
export declare function noSuchTopic(topic: string, whose: string): ProblemError;
|
|
18
|
+
//# sourceMappingURL=pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/docs/pages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,eAAO,MAAM,YAAY,QAA6B,CAAC;AAEvD,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,+BAA+B;AAC/B,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAapD,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,SAAS,EAAE,CAOtF;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,IAAI,GAAG,SAAS,CASzG;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAEtE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ProblemError } from '@kvman/sdk';
|
|
4
|
+
// Documentation pages as Markdown files in a folder (plan 09 §9.5): topic = file name without `.md`, which must be a
|
|
5
|
+
// lowercase kebab-case segment; title = the first line that starts with `# `, else the topic.
|
|
6
|
+
export const topicPattern = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
7
|
+
function titleOf(topic, markdown) {
|
|
8
|
+
for (const line of markdown.split('\n')) {
|
|
9
|
+
if (line.startsWith('# '))
|
|
10
|
+
return line.slice('# '.length);
|
|
11
|
+
}
|
|
12
|
+
return topic;
|
|
13
|
+
}
|
|
14
|
+
function hasCode(error, code) {
|
|
15
|
+
return error instanceof Error && 'code' in error && error.code === code;
|
|
16
|
+
}
|
|
17
|
+
/** The page files of `folder` (without `exclude`), sorted by topic. */
|
|
18
|
+
export function listPages(folder, exclude = []) {
|
|
19
|
+
return readdirSync(folder)
|
|
20
|
+
.filter((entry) => entry.endsWith('.md'))
|
|
21
|
+
.map((entry) => entry.slice(0, -'.md'.length))
|
|
22
|
+
.filter((topic) => topicPattern.test(topic) && !exclude.includes(topic))
|
|
23
|
+
.sort()
|
|
24
|
+
.map((topic) => ({ topic, title: titleOf(topic, readFileSync(path.join(folder, `${topic}.md`), 'utf8')) }));
|
|
25
|
+
}
|
|
26
|
+
/** The page on `topic`, or `undefined` when the topic isn't a valid name or has no file. */
|
|
27
|
+
export function readPage(folder, topic, exclude = []) {
|
|
28
|
+
if (!topicPattern.test(topic) || exclude.includes(topic))
|
|
29
|
+
return undefined;
|
|
30
|
+
try {
|
|
31
|
+
const markdown = readFileSync(path.join(folder, `${topic}.md`), 'utf8');
|
|
32
|
+
return { topic, title: titleOf(topic, markdown), markdown };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (hasCode(error, 'ENOENT'))
|
|
36
|
+
return undefined;
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** The `NOT_FOUND` Problem for a topic with no page. */
|
|
41
|
+
export function noSuchTopic(topic, whose) {
|
|
42
|
+
return new ProblemError({ code: 'NOT_FOUND', message: `${whose} has no documentation page "${topic}".`, params: { topic } });
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/docs/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,qHAAqH;AACrH,8FAA8F;AAE9F,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAQvD,SAAS,OAAO,CAAC,KAAa,EAAE,QAAgB;IAC9C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,IAAY;IAC3C,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC1E,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,UAA6B,EAAE;IACvE,OAAO,WAAW,CAAC,MAAM,CAAC;SACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACvE,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAa,EAAE,UAA6B,EAAE;IACrF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,+BAA+B,KAAK,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-docs.d.ts","sourceRoot":"","sources":["../../src/docs/register-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAMzC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAmB3C"}
|