@apimatic/cli 2.0.0-beta.2 → 2.0.0-beta.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.
- package/README.md +19 -6
- package/lib/actions/plugin/generate.d.ts +0 -2
- package/lib/actions/plugin/generate.js +5 -8
- package/lib/actions/plugin/generate.js.map +1 -1
- package/lib/actions/portal/serve.js +4 -3
- package/lib/actions/portal/serve.js.map +1 -1
- package/lib/actions/sdk/generate.js +16 -3
- package/lib/actions/sdk/generate.js.map +1 -1
- package/lib/actions/sdk/publish.js +6 -2
- package/lib/actions/sdk/publish.js.map +1 -1
- package/lib/infrastructure/services/portal-artifacts-service.js +6 -5
- package/lib/infrastructure/services/portal-artifacts-service.js.map +1 -1
- package/lib/infrastructure/zip-service.d.ts +6 -2
- package/lib/infrastructure/zip-service.js +42 -24
- package/lib/infrastructure/zip-service.js.map +1 -1
- package/lib/prompts/plugin/generate.d.ts +3 -3
- package/lib/prompts/plugin/generate.js +19 -11
- package/lib/prompts/plugin/generate.js.map +1 -1
- package/lib/prompts/portal/serve.js +1 -1
- package/lib/prompts/portal/serve.js.map +1 -1
- package/lib/prompts/portal/source.d.ts +4 -2
- package/lib/prompts/portal/source.js +42 -8
- package/lib/prompts/portal/source.js.map +1 -1
- package/lib/prompts/sdk/generate.d.ts +5 -0
- package/lib/prompts/sdk/generate.js +10 -0
- package/lib/prompts/sdk/generate.js.map +1 -1
- package/lib/prompts/sdk/publish.d.ts +3 -0
- package/lib/prompts/sdk/publish.js +3 -0
- package/lib/prompts/sdk/publish.js.map +1 -1
- package/lib/types/file/file-problem.d.ts +4 -0
- package/lib/types/file/file-problem.js +2 -0
- package/lib/types/file/file-problem.js.map +1 -0
- package/lib/types/plugin/generation-problem.d.ts +10 -0
- package/lib/types/plugin/generation-problem.js +2 -0
- package/lib/types/plugin/generation-problem.js.map +1 -0
- package/lib/types/plugin-config-context.js +2 -1
- package/lib/types/plugin-config-context.js.map +1 -1
- package/lib/types/plugin-context.d.ts +3 -1
- package/lib/types/plugin-context.js +2 -1
- package/lib/types/plugin-context.js.map +1 -1
- package/lib/types/portal/content-notices.d.ts +11 -3
- package/lib/types/portal/content-tree.d.ts +4 -2
- package/lib/types/portal/content-tree.js +42 -12
- package/lib/types/portal/content-tree.js.map +1 -1
- package/lib/types/portal/generated-pages.d.ts +6 -6
- package/lib/types/portal/generated-pages.js +3 -3
- package/lib/types/portal/generated-pages.js.map +1 -1
- package/lib/types/portal/portal-navigation.d.ts +83 -12
- package/lib/types/portal/portal-navigation.js +276 -100
- package/lib/types/portal/portal-navigation.js.map +1 -1
- package/lib/types/portal/preview-content.js +15 -2
- package/lib/types/portal/preview-content.js.map +1 -1
- package/lib/types/portal-context.d.ts +1 -0
- package/lib/types/portal-context.js +17 -12
- package/lib/types/portal-context.js.map +1 -1
- package/lib/types/portal-source-context.js +7 -4
- package/lib/types/portal-source-context.js.map +1 -1
- package/lib/types/project-context.d.ts +2 -1
- package/lib/types/project-context.js +2 -2
- package/lib/types/project-context.js.map +1 -1
- package/lib/types/sdk-context.d.ts +7 -2
- package/lib/types/sdk-context.js +8 -6
- package/lib/types/sdk-context.js.map +1 -1
- package/lib/types/spec-context.d.ts +3 -1
- package/lib/types/spec-context.js +5 -4
- package/lib/types/spec-context.js.map +1 -1
- package/lib/types/temp-context.d.ts +5 -3
- package/lib/types/temp-context.js +7 -7
- package/lib/types/temp-context.js.map +1 -1
- package/oclif.manifest.json +164 -164
- package/package.json +7 -6
- package/portal-template/src/components/api-page.tsx +2 -6
- package/portal-template/src/components/example-layout.tsx +7 -7
- package/portal-template/src/components/usage-tabs.tsx +16 -36
- package/portal-template/src/lib/media-adapters.ts +3 -3
- package/portal-template/src/lib/navigation-schema.ts +13 -0
- package/portal-template/src/lib/navigation.ts +60 -117
- package/portal-template/src/lib/request-examples.ts +12 -28
- package/portal-template/src/lib/source.ts +3 -2
- package/portal-template/src/lib/tabs.ts +3 -2
- package/portal-template/src/components/code-block.tsx +0 -9
|
@@ -7,10 +7,10 @@ const BYTE_ORDER_MARK = 0xfeff;
|
|
|
7
7
|
/** Everything in this directory that no other entry names. */
|
|
8
8
|
const REST_TOKEN = '...';
|
|
9
9
|
/** The API reference, positioned as one node. */
|
|
10
|
-
const API_REFERENCE_TOKEN = 'apimatic:api';
|
|
10
|
+
export const API_REFERENCE_TOKEN = 'apimatic:api';
|
|
11
11
|
const APIMATIC_PREFIX = 'apimatic:';
|
|
12
|
-
/** Each generated section's
|
|
13
|
-
const TOKENS = [...GENERATED_SECTIONS.map((section) => section.token), API_REFERENCE_TOKEN];
|
|
12
|
+
/** Each generated section's token and the API reference's, in the order the scaffold lists them as tabs. */
|
|
13
|
+
export const TOKENS = [...GENERATED_SECTIONS.map((section) => section.token), API_REFERENCE_TOKEN];
|
|
14
14
|
/** The directory the reference is mounted at, which `content/api/` shares, and so the name someone guesses for it. */
|
|
15
15
|
export const API_REFERENCE_NAME = 'api';
|
|
16
16
|
/** The page a folder below the content root links to, which is never one of its children. */
|
|
@@ -18,11 +18,26 @@ export const INDEX_NAME = 'index';
|
|
|
18
18
|
/** A `(group)` folder, which a page's address leaves out and a folder's name leaves unbracketed. */
|
|
19
19
|
export const GROUP_FOLDER = /^\((.+)\)$/;
|
|
20
20
|
export const NAVIGATION_FILE_NAME = 'nav.json';
|
|
21
|
+
/** Orders the folder's nodes; at the content root, Home's sidebar. */
|
|
22
|
+
const PAGES_FIELD = 'pages';
|
|
23
|
+
/** The root file's list of the tabs after Home, which are the only tabs. */
|
|
24
|
+
const TABS_FIELD = 'tabs';
|
|
21
25
|
// A misspelled field would otherwise be stripped by Fumadocs' own schema and leave the
|
|
22
|
-
// sidebar in its default order with nothing said, so every unknown field is reported.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
+
// sidebar in its default order with nothing said, so every unknown field is reported.
|
|
27
|
+
const KNOWN_FIELDS = new Set([PAGES_FIELD, 'title']);
|
|
28
|
+
/** The root file's settings; the template's schema keeps each of them, and a test holds the two together. */
|
|
29
|
+
export const ROOT_FIELDS = new Set([...KNOWN_FIELDS, TABS_FIELD]);
|
|
30
|
+
/** Whether two entries name the same tab. */
|
|
31
|
+
export function isSameTabEntry(left, right) {
|
|
32
|
+
switch (left.kind) {
|
|
33
|
+
case 'apiReference':
|
|
34
|
+
return right.kind === 'apiReference';
|
|
35
|
+
case 'generated':
|
|
36
|
+
return right.kind === 'generated' && left.section === right.section;
|
|
37
|
+
case 'folder':
|
|
38
|
+
return right.kind === 'folder' && left.name === right.name;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
26
41
|
/**
|
|
27
42
|
* The rules of a `nav.json`, applied to one file. The template re-reads the file itself and
|
|
28
43
|
* orders the page tree from it, so nothing here travels into the build: this exists to
|
|
@@ -35,108 +50,222 @@ export class PortalNavigation {
|
|
|
35
50
|
if (document.isErr()) {
|
|
36
51
|
return err(document.error);
|
|
37
52
|
}
|
|
38
|
-
const unknownFields = unknownFieldErrors(document.value,
|
|
39
|
-
|
|
53
|
+
const unknownFields = unknownFieldErrors(document.value, ROOT_FIELDS, (field) => PortalNavigation.describeUnknownField(field, context));
|
|
54
|
+
// A file with no `pages` orders nothing, which is odd but not wrong. It may still name
|
|
55
|
+
// the folder, which is why the title is checked here rather than alongside the entries.
|
|
56
|
+
const settingErrors = [
|
|
57
|
+
...unknownFields,
|
|
58
|
+
...PortalNavigation.tabsPlacementErrors(document.value, context),
|
|
59
|
+
...PortalNavigation.titleErrors(document.value.title, context)
|
|
60
|
+
];
|
|
40
61
|
const title = typeof document.value.title === 'string' ? document.value.title.trim() : undefined;
|
|
41
|
-
const pages = document.value.pages;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
const pages = PortalNavigation.entries(document.value.pages, PAGES_FIELD, context);
|
|
63
|
+
// Below the root the setting is refused above, and its entries are nobody's to check.
|
|
64
|
+
const tabs = context.isContentRoot
|
|
65
|
+
? PortalNavigation.entries(document.value.tabs, TABS_FIELD, context)
|
|
66
|
+
: ok(undefined);
|
|
67
|
+
// Every bad entry is reported at once rather than stopping at the first, so one edit
|
|
68
|
+
// fixes the file: a list of the wrong type leaves the other list's entries to check.
|
|
69
|
+
const listed = (list, entries) => entries.isOk() ? (entries.value ?? []).map((entry) => ({ list, entry })) : [];
|
|
70
|
+
const errors = [
|
|
71
|
+
...settingErrors,
|
|
72
|
+
...(pages.isErr() ? [pages.error] : []),
|
|
73
|
+
...(tabs.isErr() ? [tabs.error] : []),
|
|
74
|
+
...PortalNavigation.entryErrors([...listed(PAGES_FIELD, pages), ...listed(TABS_FIELD, tabs)], context)
|
|
75
|
+
];
|
|
76
|
+
if (errors.length > 0) {
|
|
77
|
+
return err(errors);
|
|
78
|
+
}
|
|
79
|
+
const pageEntries = pages.unwrapOr(undefined) ?? [];
|
|
80
|
+
const tabEntries = tabs.unwrapOr(undefined);
|
|
81
|
+
return ok({
|
|
82
|
+
title,
|
|
83
|
+
pages: pageEntries,
|
|
84
|
+
placedInHome: PortalNavigation.tabEntries(pageEntries, context).filter((entry) => entry.kind !== 'folder'),
|
|
85
|
+
tabs: tabEntries === undefined ? undefined : PortalNavigation.tabEntries(tabEntries, context)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** A list setting's entries, trimmed, or undefined when the file has no such setting. */
|
|
89
|
+
static entries(value, field, context) {
|
|
90
|
+
if (value === undefined) {
|
|
91
|
+
return ok(undefined);
|
|
46
92
|
}
|
|
47
|
-
if (!Array.isArray(
|
|
48
|
-
return err(
|
|
93
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string')) {
|
|
94
|
+
return err(`${context.label}: '${field}' must be an array of strings.`);
|
|
49
95
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return
|
|
96
|
+
return ok(value.map((entry) => entry.trim()));
|
|
97
|
+
}
|
|
98
|
+
/** The tabs a valid file's list names, in its order. */
|
|
99
|
+
static tabEntries(entries, context) {
|
|
100
|
+
return entries.flatMap((entry) => {
|
|
101
|
+
const target = PortalNavigation.target(entry, context);
|
|
102
|
+
return target.kind === 'apiReference' || target.kind === 'generated' || target.kind === 'folder' ? [target] : [];
|
|
103
|
+
});
|
|
55
104
|
}
|
|
56
105
|
static entryErrors(entries, context) {
|
|
57
106
|
const errors = [];
|
|
58
|
-
// Keyed by the node an entry positions rather than its text
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
107
|
+
// Keyed by the node an entry positions rather than its text, and one map for both lists:
|
|
108
|
+
// a node is either a tab or in Home's sidebar, so `api` in one and `apimatic:api` in the
|
|
109
|
+
// other is the same node named twice. Naming it twice would have the template honour
|
|
110
|
+
// whichever came first without a word.
|
|
62
111
|
const seen = new Map();
|
|
63
|
-
for (const
|
|
64
|
-
const
|
|
112
|
+
for (const listed of entries) {
|
|
113
|
+
const target = PortalNavigation.target(listed.entry, context);
|
|
114
|
+
const node = target.kind === 'apiReference' ? API_REFERENCE_TOKEN : listed.entry;
|
|
65
115
|
const earlier = seen.get(node);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
116
|
+
// The rest entry stands for whatever neither list names, so it is no node named twice
|
|
117
|
+
// across them; `tabs` refuses it on its own account.
|
|
118
|
+
if (earlier !== undefined && (earlier.list === listed.list || target.kind !== 'rest')) {
|
|
119
|
+
errors.push(PortalNavigation.namedTwice(earlier, listed, context));
|
|
70
120
|
continue;
|
|
71
121
|
}
|
|
72
|
-
seen.set(node,
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
122
|
+
seen.set(node, listed);
|
|
123
|
+
const error = PortalNavigation.syntaxError(listed, context) ??
|
|
124
|
+
(listed.list === TABS_FIELD
|
|
125
|
+
? PortalNavigation.tabEntryError(listed.entry, target, context)
|
|
126
|
+
: PortalNavigation.pageEntryError(listed.entry, target, context));
|
|
127
|
+
if (error !== undefined) {
|
|
128
|
+
errors.push(error);
|
|
76
129
|
}
|
|
77
130
|
}
|
|
78
131
|
return errors;
|
|
79
132
|
}
|
|
80
|
-
|
|
133
|
+
/** What an entry names in this directory, or as a token at the content root. */
|
|
134
|
+
static target(entry, context) {
|
|
81
135
|
if (entry === REST_TOKEN) {
|
|
82
|
-
return
|
|
136
|
+
return { kind: 'rest' };
|
|
137
|
+
}
|
|
138
|
+
if (context.isContentRoot) {
|
|
139
|
+
if (entry === API_REFERENCE_NAME || entry === API_REFERENCE_TOKEN) {
|
|
140
|
+
return { kind: 'apiReference' };
|
|
141
|
+
}
|
|
142
|
+
const section = GENERATED_SECTIONS.find((candidate) => candidate.token === entry);
|
|
143
|
+
if (section !== undefined) {
|
|
144
|
+
return { kind: 'generated', section };
|
|
145
|
+
}
|
|
83
146
|
}
|
|
84
147
|
if (entry.startsWith(APIMATIC_PREFIX)) {
|
|
85
|
-
return
|
|
148
|
+
return { kind: 'token', token: entry };
|
|
149
|
+
}
|
|
150
|
+
// A mounted folder, such as a specification's section under `content/api/`, is no subfolder
|
|
151
|
+
// but is listed twice beside a page of its name, and the folder is what the name positions.
|
|
152
|
+
if (context.folderNames.includes(entry) || PortalNavigation.isSharedName(entry, context)) {
|
|
153
|
+
return { kind: 'folder', name: entry };
|
|
154
|
+
}
|
|
155
|
+
if (context.childNames.includes(entry)) {
|
|
156
|
+
return { kind: 'page', name: entry };
|
|
157
|
+
}
|
|
158
|
+
if (context.emptyFolders.includes(entry)) {
|
|
159
|
+
return { kind: 'emptyFolder', name: entry };
|
|
86
160
|
}
|
|
161
|
+
return { kind: 'nothing' };
|
|
162
|
+
}
|
|
163
|
+
static namedTwice(earlier, later, context) {
|
|
164
|
+
if (earlier.list === later.list) {
|
|
165
|
+
return earlier.entry === later.entry
|
|
166
|
+
? `${context.label}: '${later.entry}' is listed more than once.`
|
|
167
|
+
: `${context.label}: '${earlier.entry}' and '${later.entry}' both position the API reference; keep one of them.`;
|
|
168
|
+
}
|
|
169
|
+
const named = earlier.entry === later.entry
|
|
170
|
+
? `'${later.entry}' is in both '${earlier.list}' and '${later.list}'`
|
|
171
|
+
: `'${earlier.entry}' in '${earlier.list}' and '${later.entry}' in '${later.list}' both position the API reference`;
|
|
172
|
+
return `${context.label}: ${named}, and a node is either a tab or in Home's sidebar. Keep one of them.`;
|
|
173
|
+
}
|
|
174
|
+
/** What is wrong with an entry before it names anything: empty, or a path into another directory. */
|
|
175
|
+
static syntaxError({ list, entry }, context) {
|
|
87
176
|
if (entry.length === 0) {
|
|
88
|
-
return
|
|
177
|
+
return `${context.label}: '${list}' must not contain an empty entry.`;
|
|
89
178
|
}
|
|
90
179
|
// Naming a nested path would claim the node out of its folder and leave the folder
|
|
91
180
|
// behind as an empty one, so only direct children are addressable.
|
|
92
181
|
if (entry.includes('/') || entry.includes('\\')) {
|
|
93
|
-
return
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
static
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
182
|
+
return list === TABS_FIELD
|
|
183
|
+
? `${context.label}: '${entry}' addresses another directory. A tab is a folder directly under the ` +
|
|
184
|
+
`content directory.`
|
|
185
|
+
: `${context.label}: '${entry}' addresses another directory. An entry names a page or ` +
|
|
186
|
+
`folder in this directory; order a subfolder's pages with its own ${NAVIGATION_FILE_NAME}.`;
|
|
187
|
+
}
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
/** The rules of a `tabs` entry: a folder directly under the content directory, the API reference or a section. */
|
|
191
|
+
static tabEntryError(entry, target, context) {
|
|
192
|
+
switch (target.kind) {
|
|
193
|
+
case 'rest':
|
|
194
|
+
// A tab for every unlisted folder is the "every top-level folder a tab" design this
|
|
195
|
+
// file exists to avoid: a project that groups its guides into folders would grow a row of tabs.
|
|
196
|
+
return (`${context.label}: '${REST_TOKEN}' cannot be a tab, since it would make a tab of every folder ` +
|
|
197
|
+
`'${TABS_FIELD}' does not name. Name the folders meant as tabs; the rest stay in Home.`);
|
|
198
|
+
case 'token':
|
|
199
|
+
return PortalNavigation.tokenError(target.token, context);
|
|
200
|
+
case 'apiReference':
|
|
201
|
+
return PortalNavigation.apiSharedNameError(entry, context);
|
|
202
|
+
case 'generated':
|
|
203
|
+
return undefined;
|
|
204
|
+
case 'folder':
|
|
205
|
+
// The home page belongs to the Home tab, which opens on it.
|
|
206
|
+
return context.homePageFolders.includes(target.name)
|
|
207
|
+
? `${context.label}: '${entry}' serves the home page, which belongs to the Home tab, so it cannot ` +
|
|
208
|
+
`be a tab of its own. Remove the entry, or move the page out of the folder.`
|
|
209
|
+
: undefined;
|
|
210
|
+
case 'page':
|
|
211
|
+
return `${context.label}: ${PortalNavigation.pageIsNoTab(target.name)}`;
|
|
212
|
+
case 'emptyFolder':
|
|
213
|
+
return PortalNavigation.emptyFolderError(entry, context);
|
|
214
|
+
case 'nothing':
|
|
215
|
+
return `${context.label}: '${entry}' is not a folder in this directory.${PortalNavigation.tabSuggestion(entry, context)}`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/** The rules of a `pages` entry: a page or folder in this directory, or at the content root a token. */
|
|
219
|
+
static pageEntryError(entry, target, context) {
|
|
220
|
+
switch (target.kind) {
|
|
221
|
+
case 'rest':
|
|
222
|
+
case 'generated':
|
|
223
|
+
return undefined;
|
|
224
|
+
case 'token':
|
|
225
|
+
return PortalNavigation.tokenError(target.token, context);
|
|
226
|
+
case 'apiReference':
|
|
227
|
+
return PortalNavigation.apiSharedNameError(entry, context);
|
|
228
|
+
case 'folder':
|
|
229
|
+
// A page and a folder of one name are both children, and an entry positions the folder.
|
|
230
|
+
// The page could then never be positioned, which is the quietly wrong sidebar this file
|
|
231
|
+
// exists to refuse.
|
|
232
|
+
return PortalNavigation.isSharedName(target.name, context)
|
|
233
|
+
? `${context.label}: '${entry}' is both a page and a folder in this directory, and the entry ` +
|
|
234
|
+
`positions the folder. Rename the page to position it.`
|
|
235
|
+
: undefined;
|
|
236
|
+
case 'page':
|
|
237
|
+
// Below the content root the index page is the folder's own, not one of the pages it orders.
|
|
238
|
+
return target.name === INDEX_NAME && !context.isContentRoot
|
|
239
|
+
? `${context.label}: '${INDEX_NAME}' is the page this folder opens on, so it cannot be positioned ` +
|
|
240
|
+
`among its pages. Remove the entry; the folder itself is positioned by the ${NAVIGATION_FILE_NAME} ` +
|
|
241
|
+
`one level up.`
|
|
242
|
+
: undefined;
|
|
243
|
+
case 'emptyFolder':
|
|
244
|
+
return PortalNavigation.emptyFolderError(entry, context);
|
|
245
|
+
case 'nothing':
|
|
246
|
+
return `${context.label}: '${entry}' is not a page or folder in this directory.${PortalNavigation.suggestion(entry, context)}`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/** An `apimatic:` entry that positions nothing here: no token at all, or one below the root. */
|
|
250
|
+
static tokenError(token, context) {
|
|
251
|
+
if (!TOKENS.includes(token)) {
|
|
252
|
+
return `${context.label}: '${token}' is not a ${NAVIGATION_FILE_NAME} token. The tokens are ${quotedList(TOKENS)}.`;
|
|
253
|
+
}
|
|
254
|
+
// A nested file could not claim a node that lives at the root without the template moving
|
|
255
|
+
// nodes between folders, which is what makes losing a page impossible today.
|
|
256
|
+
return (`${context.label}: '${token}' can only be used in the ${NAVIGATION_FILE_NAME} at the top ` +
|
|
257
|
+
`of the content directory, because that is where the node it positions lives. List it in that ` +
|
|
258
|
+
`file's '${TABS_FIELD}' to make it a tab, or in its '${PAGES_FIELD}' to place it in Home.`);
|
|
259
|
+
}
|
|
260
|
+
/** The tabs are decided at the top of the content directory, and nothing reads the setting anywhere else. */
|
|
261
|
+
static tabsPlacementErrors(document, context) {
|
|
262
|
+
if (context.isContentRoot || !Object.hasOwn(document, TABS_FIELD)) {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
return [
|
|
266
|
+
`${context.label}: '${TABS_FIELD}' is only read in the ${NAVIGATION_FILE_NAME} at the top of the content ` +
|
|
267
|
+
`directory, where the tabs are decided. Remove it here; this file orders its own folder with '${PAGES_FIELD}'.`
|
|
268
|
+
];
|
|
140
269
|
}
|
|
141
270
|
static parseObject(json, context) {
|
|
142
271
|
// Unlike `apimatic.json`, this file is not read by the CLI alone: the build reads it again
|
|
@@ -164,10 +293,23 @@ export class PortalNavigation {
|
|
|
164
293
|
static isSharedName(entry, context) {
|
|
165
294
|
return context.childNames.filter((name) => name === entry).length > 1;
|
|
166
295
|
}
|
|
296
|
+
/** Only `api` spelled out might have meant a page of that name beside the mount point; the token never does. */
|
|
297
|
+
static apiSharedNameError(entry, context) {
|
|
298
|
+
return entry === API_REFERENCE_NAME && PortalNavigation.isSharedName(API_REFERENCE_NAME, context)
|
|
299
|
+
? `${context.label}: '${API_REFERENCE_NAME}' is where the API reference is mounted, so the entry positions ` +
|
|
300
|
+
`the reference rather than the page of that name. Rename the page to position it.`
|
|
301
|
+
: undefined;
|
|
302
|
+
}
|
|
303
|
+
static emptyFolderError(entry, context) {
|
|
304
|
+
return (`${context.label}: '${entry}' is a folder with no page in it or below it, so it is not in the ` +
|
|
305
|
+
`sidebar. Add a page to it, or remove the entry.`);
|
|
306
|
+
}
|
|
307
|
+
static pageIsNoTab(name) {
|
|
308
|
+
return `'${name}' is a page, and a tab is a folder. Order it in Home's sidebar with '${PAGES_FIELD}' instead.`;
|
|
309
|
+
}
|
|
167
310
|
/**
|
|
168
311
|
* A folder is named after its directory, or after the title of its index page; `title`
|
|
169
|
-
* outranks both. At the content root it names the Home tab
|
|
170
|
-
* the folders the file does not list.
|
|
312
|
+
* outranks both. At the content root it names the Home tab.
|
|
171
313
|
*/
|
|
172
314
|
static titleErrors(title, context) {
|
|
173
315
|
if (title === undefined) {
|
|
@@ -186,25 +328,59 @@ export class PortalNavigation {
|
|
|
186
328
|
return [];
|
|
187
329
|
}
|
|
188
330
|
static describeUnknownField(field, context) {
|
|
189
|
-
|
|
190
|
-
const settings = quotedList([...KNOWN_FIELDS]);
|
|
331
|
+
const settings = quotedList([...(context.isContentRoot ? ROOT_FIELDS : KNOWN_FIELDS)]);
|
|
191
332
|
return `${context.label}: '${field}' is not a ${NAVIGATION_FILE_NAME} setting. The settings are ${settings}.`;
|
|
192
333
|
}
|
|
193
|
-
/** A near miss
|
|
334
|
+
/** A tab entry's near miss, in the words of what `tabs` accepts. */
|
|
335
|
+
static tabSuggestion(entry, context) {
|
|
336
|
+
const miss = PortalNavigation.nearMiss(entry, context);
|
|
337
|
+
switch (miss?.kind) {
|
|
338
|
+
case 'apiReference':
|
|
339
|
+
return ` The API reference is a tab as '${API_REFERENCE_NAME}' or '${API_REFERENCE_TOKEN}'.`;
|
|
340
|
+
case 'generated':
|
|
341
|
+
return ` '${miss.section.token}' makes ${miss.section.description} a tab.`;
|
|
342
|
+
case 'folder':
|
|
343
|
+
return ` Did you mean '${miss.name}'?`;
|
|
344
|
+
case 'page':
|
|
345
|
+
return ` ${PortalNavigation.pageIsNoTab(miss.name)}`;
|
|
346
|
+
default:
|
|
347
|
+
return '';
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/** A `pages` entry's near miss; a folder and a page are both children here, so one sentence names either. */
|
|
194
351
|
static suggestion(entry, context) {
|
|
352
|
+
const miss = PortalNavigation.nearMiss(entry, context);
|
|
353
|
+
switch (miss?.kind) {
|
|
354
|
+
case 'apiReference':
|
|
355
|
+
return ` The API reference is positioned with '${API_REFERENCE_TOKEN}'.`;
|
|
356
|
+
case 'generated':
|
|
357
|
+
return ` '${miss.section.token}' positions ${miss.section.description}.`;
|
|
358
|
+
case 'folder':
|
|
359
|
+
case 'page':
|
|
360
|
+
return ` Did you mean '${miss.name}'?`;
|
|
361
|
+
default:
|
|
362
|
+
return '';
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/** A near miss is nearly always a typo or a forgotten extension, so find what it names. */
|
|
366
|
+
static nearMiss(entry, context) {
|
|
195
367
|
const lowered = entry.toLowerCase();
|
|
196
|
-
const withoutExtension = lowered.replace(/\.mdx?$/i, '');
|
|
197
368
|
// Matched without the extension too, so `api.md` is answered like `api` rather than
|
|
198
369
|
// pointed at a name that is refused the moment they write it.
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
370
|
+
const stripped = lowered.replace(/\.mdx?$/i, '');
|
|
371
|
+
if (context.isContentRoot) {
|
|
372
|
+
if (stripped === API_REFERENCE_NAME) {
|
|
373
|
+
return { kind: 'apiReference' };
|
|
374
|
+
}
|
|
375
|
+
const section = PortalNavigation.sectionGuessed(stripped);
|
|
376
|
+
if (section !== undefined) {
|
|
377
|
+
return { kind: 'generated', section };
|
|
378
|
+
}
|
|
205
379
|
}
|
|
206
|
-
const
|
|
207
|
-
|
|
380
|
+
const matches = (name) => name.toLowerCase() === lowered || name.toLowerCase() === stripped;
|
|
381
|
+
const candidate = context.folderNames.find(matches) ?? context.childNames.find(matches);
|
|
382
|
+
const target = candidate === undefined ? undefined : PortalNavigation.target(candidate, context);
|
|
383
|
+
return target?.kind === 'folder' || target?.kind === 'page' ? target : undefined;
|
|
208
384
|
}
|
|
209
385
|
/**
|
|
210
386
|
* The section an entry was most likely meant to position: one named after its address, or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal-navigation.js","sourceRoot":"","sources":["../../../src/types/portal/portal-navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAU,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,8DAA8D;AAC9D,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,iDAAiD;AACjD,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAE3C,MAAM,eAAe,GAAG,WAAW,CAAC;AAEpC,2DAA2D;AAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAE5F,sHAAsH;AACtH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAExC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC;AAElC,oGAAoG;AACpG,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE/C,uFAAuF;AACvF,0FAA0F;AAC1F,0FAA0F;AAC1F,gCAAgC;AAChC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAgCjD;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAA0B;QAC7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/E,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CACtD,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,uFAAuF;YACvF,yFAAyF;YACzF,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC9E,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,KAAK,wCAAwC,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAI,KAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjE,qFAAqF;QACrF,kBAAkB;QAClB,MAAM,MAAM,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,OAAiB,EAAE,OAA0B;QACtE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,wFAAwF;QACxF,wFAAwF;QACxF,yFAAyF;QACzF,4EAA4E;QAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;YACjG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CACT,OAAO,KAAK,KAAK;oBACf,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,6BAA6B;oBAC1D,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,OAAO,UAAU,KAAK,sDAAsD,CACvG,CAAC;gBACF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEtB,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,OAA0B;QACjE,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,4CAA4C,CAAC,CAAC;QAC3E,CAAC;QAED,mFAAmF;QACnF,mEAAmE;QACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,0DAA0D;gBACnF,oEAAoE,oBAAoB,GAAG,CAC9F,CAAC;QACJ,CAAC;QAED,8FAA8F;QAC9F,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChF,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,oEAAoE;gBAC7F,iDAAiD,CACpD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,+CAA+C,gBAAgB,CAAC,UAAU,CACnG,KAAK,EACL,OAAO,CACR,EAAE,CACJ,CAAC;QACJ,CAAC;QAED,wFAAwF;QACxF,uFAAuF;QACvF,2DAA2D;QAC3D,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAClD,kFAAkF;YAClF,sFAAsF;YACtF,wBAAwB;YACxB,OAAO,GAAG,CACR,OAAO,CAAC,aAAa,IAAI,KAAK,KAAK,kBAAkB;gBACnD,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,kEAAkE;oBAC3F,kFAAkF;gBACtF,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,iEAAiE;oBAC1F,uDAAuD,CAC9D,CAAC;QACJ,CAAC;QAED,6FAA6F;QAC7F,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,UAAU,iEAAiE;gBAC/F,6EAA6E,oBAAoB,GAAG;gBACpG,eAAe,CAClB,CAAC;QACJ,CAAC;QAED,oFAAoF;QACpF,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,sEAAsE;gBAC/F,4EAA4E,CAC/E,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,OAA0B;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,cAAc,oBAAoB,UAAU;gBACrE,kBAAkB,UAAU,CAAC,MAAM,CAAC,GAAG,CAC1C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,GAAG,CACR,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,6BAA6B,oBAAoB,cAAc;gBACxF,8EAA8E,CACjF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,OAA0B;QACjE,2FAA2F;QAC3F,uFAAuF;QACvF,yFAAyF;QACzF,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC;gBACT,GAAG,OAAO,CAAC,KAAK,+DAA+D;oBAC7E,uCAAuC;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,6EAA6E;IACrE,MAAM,CAAC,YAAY,CAAC,KAAa,EAAE,OAA0B;QACnE,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,WAAW,CAAC,KAAc,EAAE,OAA0B;QACnE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,iGAAiG;QACjG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO;gBACL,GAAG,OAAO,CAAC,KAAK,qEAAqE;oBACnF,0EAA0E;aAC7E,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,uCAAuC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,KAAa,EAAE,OAA0B;QAC3E,uFAAuF;QACvF,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,KAAK,MAAM,KAAK,cAAc,oBAAoB,8BAA8B,QAAQ,GAAG,CAAC;IAChH,CAAC;IAED,2FAA2F;IACnF,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,OAA0B;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACzD,oFAAoF;QACpF,8DAA8D;QAC9D,IAAI,gBAAgB,KAAK,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACrE,OAAO,0CAA0C,mBAAmB,IAAI,CAAC;QAC3E,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,KAAK,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,WAAW,GAAG,CAAC;QACjE,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,CACpF,CAAC;QACF,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,SAAS,IAAI,CAAC;IACxE,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,OAAO,kBAAkB,CAAC,IAAI,CAC5B,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAC7F,CAAC;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"portal-navigation.js","sourceRoot":"","sources":["../../../src/types/portal/portal-navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSameTabEntry } from './portal-navigation.js';
|
|
1
2
|
/** A notice is given once, on the save that brings it about, rather than on every save after it. */
|
|
2
3
|
export class PreviewContent {
|
|
3
4
|
shown;
|
|
@@ -23,14 +24,26 @@ export class PreviewContent {
|
|
|
23
24
|
return {
|
|
24
25
|
hiddenPages: whenAnyNew(current.hiddenPages, previous.hiddenPages, (left, right) => left.isEqual(right)),
|
|
25
26
|
ignoredNavigationFiles: whenAnyNew(current.ignoredNavigationFiles, previous.ignoredNavigationFiles, (left, right) => left.isEqual(right)),
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
sharedTabNames: whenAnyNew(current.sharedTabNames, previous.sharedTabNames, isSameSharedName),
|
|
28
|
+
noTabsListed: whenNew(current.noTabsListed, previous.noTabsListed, isSameNoTabs),
|
|
29
|
+
unseenHomeTitle: whenNew(current.unseenHomeTitle, previous.unseenHomeTitle, isSameFile)
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
function whenAnyNew(current, previous, isSame) {
|
|
32
34
|
return current.some((item) => !previous.some((earlier) => isSame(item, earlier))) ? current : [];
|
|
33
35
|
}
|
|
36
|
+
function whenNew(current, previous, isSame) {
|
|
37
|
+
return current !== undefined && (previous === undefined || !isSame(current, previous)) ? current : undefined;
|
|
38
|
+
}
|
|
39
|
+
function isSameFile(left, right) {
|
|
40
|
+
return left === undefined || right === undefined ? left === right : left.isEqual(right);
|
|
41
|
+
}
|
|
42
|
+
function isSameNoTabs(left, right) {
|
|
43
|
+
return (isSameFile(left.file, right.file) &&
|
|
44
|
+
left.unplaced.length === right.unplaced.length &&
|
|
45
|
+
left.unplaced.every((entry, index) => isSameTabEntry(entry, right.unplaced[index])));
|
|
46
|
+
}
|
|
34
47
|
/** The same name on the same tabs, whichever file gives it to each. */
|
|
35
48
|
function isSameSharedName(left, right) {
|
|
36
49
|
return (left.name === right.name &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-content.js","sourceRoot":"","sources":["../../../src/types/portal/preview-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview-content.js","sourceRoot":"","sources":["../../../src/types/portal/preview-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,19 +36,10 @@ export class PortalContext {
|
|
|
36
36
|
* touched once the whole new one is on the same volume and what remains is a rename.
|
|
37
37
|
*/
|
|
38
38
|
async save(builtDirectory, asZip) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
await this.fileService.cleanDirectory(this.stagingDirectory);
|
|
42
|
-
if (asZip) {
|
|
43
|
-
await this.zipService.archive(builtDirectory, new FilePath(this.stagingDirectory, new FileName(ZIP_FILE_NAME)));
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
await this.fileService.copyDirectoryContents(builtDirectory, this.stagingDirectory);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
39
|
+
const staged = await this.stage(builtDirectory, asZip);
|
|
40
|
+
if (staged.isErr()) {
|
|
50
41
|
await this.fileService.deleteDirectory(this.stagingDirectory).catch(() => undefined);
|
|
51
|
-
return err({ kind: 'stagingFailed', reason:
|
|
42
|
+
return err({ kind: 'stagingFailed', reason: staged.error });
|
|
52
43
|
}
|
|
53
44
|
try {
|
|
54
45
|
await this.fileService.cleanDirectoryExcluding(this.portalDirectory, [new FileName(STAGING_DIRECTORY)]);
|
|
@@ -75,6 +66,20 @@ export class PortalContext {
|
|
|
75
66
|
return null;
|
|
76
67
|
}
|
|
77
68
|
}
|
|
69
|
+
async stage(builtDirectory, asZip) {
|
|
70
|
+
try {
|
|
71
|
+
await this.addNotFoundPage(builtDirectory);
|
|
72
|
+
await this.fileService.cleanDirectory(this.stagingDirectory);
|
|
73
|
+
if (asZip) {
|
|
74
|
+
return await this.zipService.archive(builtDirectory, new FilePath(this.stagingDirectory, new FileName(ZIP_FILE_NAME)));
|
|
75
|
+
}
|
|
76
|
+
await this.fileService.copyDirectoryContents(builtDirectory, this.stagingDirectory);
|
|
77
|
+
return ok(undefined);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return err(errorMessage(error));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
78
83
|
async addNotFoundPage(builtDirectory) {
|
|
79
84
|
const shell = new FilePath(builtDirectory, new FileName(SHELL_FILE_NAME));
|
|
80
85
|
if (await this.fileService.fileExists(shell)) {
|