@apimatic/cli 2.0.0-beta.4 → 2.0.0-beta.6

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 (169) hide show
  1. package/README.md +20 -64
  2. package/apimatic.schema.json +2 -2
  3. package/lib/actions/action-result.d.ts +4 -2
  4. package/lib/actions/action-result.js +8 -3
  5. package/lib/actions/action-result.js.map +1 -1
  6. package/lib/actions/api/transform.d.ts +7 -6
  7. package/lib/actions/api/transform.js +12 -13
  8. package/lib/actions/api/transform.js.map +1 -1
  9. package/lib/actions/api/validate.d.ts +4 -5
  10. package/lib/actions/api/validate.js +30 -32
  11. package/lib/actions/api/validate.js.map +1 -1
  12. package/lib/actions/portal/generate.js +3 -3
  13. package/lib/actions/portal/generate.js.map +1 -1
  14. package/lib/actions/portal/prepare-project.js +3 -0
  15. package/lib/actions/portal/prepare-project.js.map +1 -1
  16. package/lib/actions/quickstart.d.ts +1 -9
  17. package/lib/actions/quickstart.js +122 -102
  18. package/lib/actions/quickstart.js.map +1 -1
  19. package/lib/commands/api/transform.d.ts +1 -1
  20. package/lib/commands/api/transform.js +2 -2
  21. package/lib/commands/api/transform.js.map +1 -1
  22. package/lib/commands/api/validate.d.ts +3 -3
  23. package/lib/commands/api/validate.js +28 -17
  24. package/lib/commands/api/validate.js.map +1 -1
  25. package/lib/commands/plugin/generate.d.ts +1 -1
  26. package/lib/commands/portal/generate.d.ts +2 -2
  27. package/lib/commands/portal/generate.js +3 -1
  28. package/lib/commands/portal/generate.js.map +1 -1
  29. package/lib/commands/portal/serve.d.ts +2 -2
  30. package/lib/commands/portal/serve.js +1 -1
  31. package/lib/commands/sdk/generate.d.ts +1 -1
  32. package/lib/infrastructure/file-service.d.ts +5 -0
  33. package/lib/infrastructure/file-service.js +40 -9
  34. package/lib/infrastructure/file-service.js.map +1 -1
  35. package/lib/infrastructure/portal-dev-server-service.js +2 -1
  36. package/lib/infrastructure/portal-dev-server-service.js.map +1 -1
  37. package/lib/infrastructure/portal-project-service.d.ts +2 -0
  38. package/lib/infrastructure/portal-project-service.js +9 -4
  39. package/lib/infrastructure/portal-project-service.js.map +1 -1
  40. package/lib/infrastructure/services/file-download-service.d.ts +4 -4
  41. package/lib/infrastructure/services/file-download-service.js +14 -14
  42. package/lib/infrastructure/services/file-download-service.js.map +1 -1
  43. package/lib/prompts/api/transform.d.ts +0 -2
  44. package/lib/prompts/api/transform.js +0 -3
  45. package/lib/prompts/api/transform.js.map +1 -1
  46. package/lib/prompts/api/validate.d.ts +2 -2
  47. package/lib/prompts/api/validate.js +35 -3
  48. package/lib/prompts/api/validate.js.map +1 -1
  49. package/lib/prompts/format.d.ts +1 -1
  50. package/lib/prompts/format.js.map +1 -1
  51. package/lib/prompts/portal/generate.d.ts +2 -1
  52. package/lib/prompts/portal/generate.js +22 -6
  53. package/lib/prompts/portal/generate.js.map +1 -1
  54. package/lib/prompts/portal/prepare-project.d.ts +5 -1
  55. package/lib/prompts/portal/prepare-project.js +15 -1
  56. package/lib/prompts/portal/prepare-project.js.map +1 -1
  57. package/lib/prompts/portal/serve.js +6 -3
  58. package/lib/prompts/portal/serve.js.map +1 -1
  59. package/lib/prompts/portal/source.d.ts +6 -6
  60. package/lib/prompts/portal/source.js +97 -31
  61. package/lib/prompts/portal/source.js.map +1 -1
  62. package/lib/prompts/quickstart.d.ts +14 -13
  63. package/lib/prompts/quickstart.js +43 -27
  64. package/lib/prompts/quickstart.js.map +1 -1
  65. package/lib/types/apimatic-config/document.d.ts +2 -0
  66. package/lib/types/apimatic-config/document.js +4 -0
  67. package/lib/types/apimatic-config/document.js.map +1 -1
  68. package/lib/types/file/directory.js +2 -1
  69. package/lib/types/file/directory.js.map +1 -1
  70. package/lib/types/file/directoryPath.d.ts +3 -0
  71. package/lib/types/file/directoryPath.js +10 -1
  72. package/lib/types/file/directoryPath.js.map +1 -1
  73. package/lib/types/file/fileName.d.ts +5 -0
  74. package/lib/types/file/fileName.js +13 -3
  75. package/lib/types/file/fileName.js.map +1 -1
  76. package/lib/types/file/filePath.js +1 -1
  77. package/lib/types/file/filePath.js.map +1 -1
  78. package/lib/types/file/resource-input.d.ts +7 -5
  79. package/lib/types/file/resource-input.js +16 -15
  80. package/lib/types/file/resource-input.js.map +1 -1
  81. package/lib/types/flags-provider.d.ts +6 -1
  82. package/lib/types/flags-provider.js +22 -12
  83. package/lib/types/flags-provider.js.map +1 -1
  84. package/lib/types/plugin-config-context.d.ts +3 -0
  85. package/lib/types/plugin-config-context.js +33 -12
  86. package/lib/types/plugin-config-context.js.map +1 -1
  87. package/lib/types/portal/code-samples.d.ts +2 -0
  88. package/lib/types/portal/code-samples.js +7 -0
  89. package/lib/types/portal/code-samples.js.map +1 -1
  90. package/lib/types/portal/config/site-address.d.ts +16 -0
  91. package/lib/types/portal/config/site-address.js +67 -0
  92. package/lib/types/portal/config/site-address.js.map +1 -0
  93. package/lib/types/portal/config/site-config.d.ts +3 -5
  94. package/lib/types/portal/config/site-config.js +10 -33
  95. package/lib/types/portal/config/site-config.js.map +1 -1
  96. package/lib/types/portal/config/static-asset.d.ts +2 -2
  97. package/lib/types/portal/config/static-asset.js +2 -2
  98. package/lib/types/portal/config/static-asset.js.map +1 -1
  99. package/lib/types/portal/content-tree.d.ts +11 -4
  100. package/lib/types/portal/content-tree.js +31 -20
  101. package/lib/types/portal/content-tree.js.map +1 -1
  102. package/lib/types/portal/endpoint.d.ts +1 -0
  103. package/lib/types/portal/endpoint.js +3 -0
  104. package/lib/types/portal/endpoint.js.map +1 -1
  105. package/lib/types/portal/openapi-document.d.ts +4 -0
  106. package/lib/types/portal/openapi-document.js +12 -0
  107. package/lib/types/portal/openapi-document.js.map +1 -1
  108. package/lib/types/portal/page.js +16 -1
  109. package/lib/types/portal/page.js.map +1 -1
  110. package/lib/types/portal/portal-config.d.ts +6 -3
  111. package/lib/types/portal/portal-config.js +8 -4
  112. package/lib/types/portal/portal-config.js.map +1 -1
  113. package/lib/types/portal/portal-languages.d.ts +2 -0
  114. package/lib/types/portal/portal-languages.js +5 -1
  115. package/lib/types/portal/portal-languages.js.map +1 -1
  116. package/lib/types/portal/portal-source.d.ts +43 -11
  117. package/lib/types/portal/shared.d.ts +11 -0
  118. package/lib/types/portal/shared.js +10 -0
  119. package/lib/types/portal/shared.js.map +1 -0
  120. package/lib/types/portal/spec-metadata.d.ts +17 -0
  121. package/lib/types/portal/spec-metadata.js +40 -0
  122. package/lib/types/portal/spec-metadata.js.map +1 -0
  123. package/lib/types/portal-source-context.d.ts +21 -8
  124. package/lib/types/portal-source-context.js +208 -50
  125. package/lib/types/portal-source-context.js.map +1 -1
  126. package/lib/types/project-context.d.ts +18 -0
  127. package/lib/types/project-context.js +18 -1
  128. package/lib/types/project-context.js.map +1 -1
  129. package/lib/types/project-layout.d.ts +3 -0
  130. package/lib/types/project-layout.js +4 -0
  131. package/lib/types/project-layout.js.map +1 -1
  132. package/lib/types/resource-context.d.ts +25 -10
  133. package/lib/types/resource-context.js +40 -23
  134. package/lib/types/resource-context.js.map +1 -1
  135. package/oclif.manifest.json +88 -70
  136. package/package.json +1 -1
  137. package/portal-template/dependency-directories.ts +31 -40
  138. package/portal-template/downloads.ts +6 -3
  139. package/portal-template/portal-config.ts +4 -0
  140. package/portal-template/prerender-pages.ts +8 -2
  141. package/portal-template/spec-reload.ts +12 -9
  142. package/portal-template/src/components/api-markdown.tsx +32 -0
  143. package/portal-template/src/components/api-page.tsx +8 -1
  144. package/portal-template/src/components/authorization-failure.tsx +63 -0
  145. package/portal-template/src/components/markdown-copy-button.tsx +2 -2
  146. package/portal-template/src/components/plugin-install.tsx +6 -5
  147. package/portal-template/src/components/sdk-actions.tsx +3 -2
  148. package/portal-template/src/components/sdk-cards.tsx +2 -1
  149. package/portal-template/src/components/search.tsx +9 -2
  150. package/portal-template/src/lib/base-path.ts +14 -0
  151. package/portal-template/src/lib/code-titles.ts +8 -0
  152. package/portal-template/src/lib/copy-markdown.ts +4 -2
  153. package/portal-template/src/lib/install-command.ts +5 -5
  154. package/portal-template/src/lib/layout.shared.tsx +5 -3
  155. package/portal-template/src/lib/llms.server.ts +29 -5
  156. package/portal-template/src/lib/oauth-callback.ts +63 -0
  157. package/portal-template/src/lib/portal-types.ts +3 -3
  158. package/portal-template/src/lib/rehype-code-titles.ts +3 -5
  159. package/portal-template/src/lib/remark-image-references.ts +35 -0
  160. package/portal-template/src/lib/search-content.ts +28 -0
  161. package/portal-template/src/lib/search-options.ts +7 -0
  162. package/portal-template/src/lib/source.server.ts +2 -0
  163. package/portal-template/src/router.tsx +3 -1
  164. package/portal-template/src/routes/$.tsx +3 -2
  165. package/portal-template/src/routes/__root.tsx +8 -1
  166. package/portal-template/src/routes/api/search[.]json.ts +23 -2
  167. package/portal-template/src/routes/oauth.callback.tsx +54 -0
  168. package/portal-template/static-functions-base.ts +41 -0
  169. package/portal-template/vite.config.ts +15 -8
@@ -1,9 +1,10 @@
1
- import { ResultAsync } from 'neverthrow';
1
+ import { ok, ResultAsync } from 'neverthrow';
2
2
  import { FileService } from '../infrastructure/file-service.js';
3
3
  import { ApimaticConfigContext } from './apimatic-config-context.js';
4
4
  import { findingClause } from './apimatic-config/document.js';
5
5
  import { isPublished, languagesOf } from './apimatic-config/languages-block.js';
6
6
  import { DEFAULT_PLUGIN_LICENSE } from './plugin/plugin-config.js';
7
+ import { PortalLanguages } from './portal/portal-languages.js';
7
8
  import { SOURCE_DIRECTORY_NAME } from './project-layout.js';
8
9
  import { SemVersion } from './publish/version.js';
9
10
  import { isAvailableLanguage } from './sdk/generate.js';
@@ -83,6 +84,18 @@ const recorded = (document, languages, keep) => {
83
84
  /** In the user's file a cleared language goes, unless its entry records where an SDK was published. */
84
85
  const keepsRecord = (language, entry) => !isAvailableLanguage(language) || isPublished(entry);
85
86
  const isUnavailableLanguage = (language) => !isAvailableLanguage(language);
87
+ const namesNoLanguage = (document) => PortalLanguages.namesNone(document.languages(), document.findingsFor('languages'));
88
+ const withMetadata = (document, metadata, author) => {
89
+ const plugin = (document.plugin() ?? {});
90
+ return document.with('plugin', {
91
+ ...plugin,
92
+ pluginId: metadata.pluginId,
93
+ pluginName: metadata.pluginName,
94
+ pluginVersion: metadata.pluginVersion,
95
+ ...(!plugin.author && author && { author }),
96
+ license: plugin.license ?? DEFAULT_PLUGIN_LICENSE
97
+ });
98
+ };
86
99
  export class PluginConfigContext {
87
100
  sourceDirectory;
88
101
  configContext;
@@ -106,17 +119,25 @@ export class PluginConfigContext {
106
119
  return PluginConfig.create(PluginConfigContext.configOf(state.document));
107
120
  }
108
121
  async upsertMetadata(metadata, author) {
109
- return await this.merge((document) => {
110
- const plugin = (document.plugin() ?? {});
111
- return document.with('plugin', {
112
- ...plugin,
113
- pluginId: metadata.pluginId,
114
- pluginName: metadata.pluginName,
115
- pluginVersion: metadata.pluginVersion,
116
- ...(!plugin.author && author && { author }),
117
- license: plugin.license ?? DEFAULT_PLUGIN_LICENSE
118
- });
119
- });
122
+ return await this.merge((document) => withMetadata(document, metadata, author));
123
+ }
124
+ // Merged against `plugin` alone: a file's `languages` is not what this write could spread or break.
125
+ async addMetadataIfMissing(metadata) {
126
+ const state = await this.configContext.read();
127
+ if (state.state === 'parsed' && state.document.has('plugin')) {
128
+ return ok(undefined);
129
+ }
130
+ const merged = await this.configContext.merge(['plugin'], (document) => withMetadata(document, metadata));
131
+ return merged.map(() => undefined);
132
+ }
133
+ async languagesMissing() {
134
+ const state = await this.configContext.read();
135
+ return state.state === 'parsed' && namesNoLanguage(state.document);
136
+ }
137
+ // Merged against `languages` alone, as `addMetadataIfMissing` is against `plugin`.
138
+ async addLanguagesIfMissing(languages) {
139
+ const merged = await this.configContext.merge(['languages'], (document) => namesNoLanguage(document) ? document.with('languages', recorded(document, languages, keepsRecord)) : document);
140
+ return merged.map(() => undefined);
120
141
  }
121
142
  // A published entry survives a cleared checkbox: only `sdk publish` can write that record.
122
143
  async recordLanguages(languages) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-config-context.js","sourceRoot":"","sources":["../../src/types/plugin-config-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-config-context.js","sourceRoot":"","sources":["../../src/types/plugin-config-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAU,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAA8B,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAA2C,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAwC,MAAM,sCAAsC,CAAC;AAGtH,OAAO,EACL,sBAAsB,EAKvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAY,MAAM,mBAAmB,CAAC;AASlE,MAAM,OAAO,YAAY;IAOJ,MAAM;IACN,OAAO;IACP,WAAW;IARd,KAAK,GAAG,SAAkB,CAAC;IAE3C,oEAAoE;IAC7D,MAAM,CAAU,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAEtE,YACmB,MAAwB,EACxB,OAAyD,EACzD,WAA8B;sBAF9B,MAAM;uBACN,OAAO;2BACP,WAAW;IAC3B,CAAC;IAEJ,2FAA2F;IACpF,MAAM,CAAC,MAAM,CAAC,MAAwB;QAC3C,MAAM,OAAO,GAA4C,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAkC,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9F,CAAC;IAED,sDAAsD;IAC/C,iBAAiB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,2FAA2F;IAC3F,2DAA2D;IACpD,WAAW;QAChB,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAC9F,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5F,CAAC;IAED,sGAAsG;IAC/F,OAAO;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC3D,CAAC;IAEM,UAAU;QACf,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,IAAI,QAAQ,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EACpC,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC;IAEM,qBAAqB,CAAC,QAAkB;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC;IAChE,CAAC;CACF;AAID,MAAM,YAAY,GAA+B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,QAAQ,GAAG,CACf,QAAgC,EAChC,SAA8B,EAC9B,IAAqF,EAC5D,EAAE;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACpH,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAExG,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,uGAAuG;AACvG,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,KAAgD,EAAW,EAAE,CAClG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAEvD,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAE5F,MAAM,eAAe,GAAG,CAAC,QAAgC,EAAW,EAAE,CACpE,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAErF,MAAM,YAAY,GAAG,CACnB,QAAgC,EAChC,QAAwB,EACxB,MAAqB,EACG,EAAE;IAC1B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAuB,CAAC;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC7B,GAAG,MAAM;QACT,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,sBAAsB;KAClD,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,OAAO,mBAAmB;IAID,eAAe;IAH3B,aAAa,CAAwB;IACrC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjD,YAA6B,eAA8B;+BAA9B,eAAe;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1F,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,QAAwB,EACxB,MAAqB;QAErB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,oGAAoG;IAC7F,KAAK,CAAC,oBAAoB,CAAC,QAAwB;QACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1G,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,mFAAmF;IAC5E,KAAK,CAAC,qBAAqB,CAAC,SAA8B;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CACxE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAC9G,CAAC;QACF,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,2FAA2F;IACpF,KAAK,CAAC,eAAe,CAC1B,SAA8B;QAE9B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,WAAW,CACtB,IAAmB,EACnB,SAA8B;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5D,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC,CACjF,CAAC;QAEF,2FAA2F;QAC3F,6EAA6E;QAC7E,OAAO,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3G,CAAC;IAEO,KAAK,CAAC,KAAK,CACjB,KAAmE;QAEnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,QAAgC;QACtD,OAAO;YACL,GAAI,QAAQ,CAAC,MAAM,EAAqC;YACxD,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC;SACjC,CAAC;IACJ,CAAC;CACF"}
@@ -14,12 +14,14 @@ export declare class CodeSampleCatalog {
14
14
  static fromJson(language: Language, json: unknown): CodeSampleCatalog | undefined;
15
15
  sampleFor(endpoint: Endpoint): CodeSample | undefined;
16
16
  endpoints(): Endpoint[];
17
+ without(endpoints: Endpoint[]): CodeSampleCatalog;
17
18
  }
18
19
  export declare class CodeSampleCatalogs {
19
20
  private readonly catalogs;
20
21
  constructor(catalogs: CodeSampleCatalog[]);
21
22
  isEmpty(): boolean;
22
23
  samplesFor(endpoint: Endpoint): CodeSample[];
24
+ without(endpoints: Endpoint[]): CodeSampleCatalogs;
23
25
  unplacedIn(documented: Endpoint[]): string[];
24
26
  toJson(): CodeSamplesByEndpoint;
25
27
  private endpoints;
@@ -31,6 +31,10 @@ export class CodeSampleCatalog {
31
31
  endpoints() {
32
32
  return [...this.samplesByEndpoint.values()].map(({ endpoint }) => endpoint);
33
33
  }
34
+ without(endpoints) {
35
+ const left = new Set(endpoints.map(String));
36
+ return new CodeSampleCatalog(new Map([...this.samplesByEndpoint].filter(([key]) => !left.has(key))));
37
+ }
34
38
  }
35
39
  export class CodeSampleCatalogs {
36
40
  catalogs;
@@ -43,6 +47,9 @@ export class CodeSampleCatalogs {
43
47
  samplesFor(endpoint) {
44
48
  return this.catalogs.flatMap((catalog) => catalog.sampleFor(endpoint) ?? []);
45
49
  }
50
+ without(endpoints) {
51
+ return new CodeSampleCatalogs(this.catalogs.map((catalog) => catalog.without(endpoints)));
52
+ }
46
53
  unplacedIn(documented) {
47
54
  const names = new Set(documented.map(String));
48
55
  return [...new Set(this.endpoints().map(String))].filter((endpoint) => !names.has(endpoint));
@@ -1 +1 @@
1
- {"version":3,"file":"code-samples.js","sourceRoot":"","sources":["../../../src/types/portal/code-samples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-samples.js","sourceRoot":"","sources":["../../../src/types/portal/code-samples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Parsed } from './fields.js';
2
+ /** Where the portal is hosted: an origin, and the path it is served under there. */
3
+ export declare class SiteAddress {
4
+ private readonly origin;
5
+ /** `''` at the root of the host, otherwise `/docs` or deeper, with no trailing slash. */
6
+ private readonly basePath;
7
+ private constructor();
8
+ static parse(value: unknown, path: string): Parsed<SiteAddress>;
9
+ /** Where the portal is served, in the form Vite's `base` takes: `/`, or `/docs/`. */
10
+ path(): string;
11
+ hasPath(): boolean;
12
+ /** A portal-relative path's address on the host: `/sitemap.xml` is `https://example.com/docs/sitemap.xml`. */
13
+ addressOf(portalPath: string): string;
14
+ /** The site address, with no trailing slash. */
15
+ toString(): string;
16
+ }
@@ -0,0 +1,67 @@
1
+ import { err, ok } from 'neverthrow';
2
+ import { isWebAddress } from './fields.js';
3
+ /** One spelling of the path everywhere: Vite's base, the router's prefix, the host's folder and canonical links. */
4
+ const SEGMENT = /^[A-Za-z0-9._~-]+$/;
5
+ /** The last part of a page's address, such as a home page's `index.html`, which the portal cannot be served under. */
6
+ const PAGE = /\.html?$/i;
7
+ const GIVE_THE_ADDRESS = "Give the address the portal is hosted at, for example 'https://example.com/docs'.";
8
+ /** Where the portal is hosted: an origin, and the path it is served under there. */
9
+ export class SiteAddress {
10
+ origin;
11
+ basePath;
12
+ constructor(origin,
13
+ /** `''` at the root of the host, otherwise `/docs` or deeper, with no trailing slash. */
14
+ basePath) {
15
+ this.origin = origin;
16
+ this.basePath = basePath;
17
+ }
18
+ static parse(value, path) {
19
+ const text = typeof value === 'string' ? value.trim() : '';
20
+ const hostStart = text.indexOf('//') + 2;
21
+ const pathStart = text.indexOf('/', hostStart);
22
+ // Checked as written: the URL parser drops a tab from the host and reads past extra slashes before it.
23
+ const host = text.slice(hostStart, pathStart === -1 ? undefined : pathStart);
24
+ if (!isWebAddress(text) || !/^\S+$/.test(host)) {
25
+ return err([
26
+ `'${path}' must be the address the portal is hosted at, for example 'https://docs.example.com' or 'https://example.com/docs'.`
27
+ ]);
28
+ }
29
+ // Checked as written: the URL parser reads `\` as `/` and drops an empty query or fragment.
30
+ const character = ['?', '#', '\\'].find((candidate) => text.includes(candidate));
31
+ if (character !== undefined) {
32
+ return err([`'${path}' cannot contain '${character}'. ${GIVE_THE_ADDRESS}`]);
33
+ }
34
+ const basePath = pathStart === -1 ? '' : text.slice(pathStart).replace(/\/$/, '');
35
+ const segments = basePath.split('/').slice(1);
36
+ if (segments.includes('')) {
37
+ return err([`'${path}' has an empty part ('//') in its path.`]);
38
+ }
39
+ const invalid = segments.find((segment) => !SEGMENT.test(segment) || segment === '.' || segment === '..');
40
+ if (invalid !== undefined) {
41
+ return err([
42
+ `'${path}' has '${invalid}' in its path. Each part between '/'s can use only letters, digits, '.', '_', '~' and '-', and cannot be '.' or '..'.`
43
+ ]);
44
+ }
45
+ const page = segments.at(-1);
46
+ if (page !== undefined && PAGE.test(page)) {
47
+ return err([`'${path}' ends in '${page}', which names a page. ${GIVE_THE_ADDRESS}`]);
48
+ }
49
+ return ok(new SiteAddress(new URL(text).origin, basePath));
50
+ }
51
+ /** Where the portal is served, in the form Vite's `base` takes: `/`, or `/docs/`. */
52
+ path() {
53
+ return `${this.basePath}/`;
54
+ }
55
+ hasPath() {
56
+ return this.basePath !== '';
57
+ }
58
+ /** A portal-relative path's address on the host: `/sitemap.xml` is `https://example.com/docs/sitemap.xml`. */
59
+ addressOf(portalPath) {
60
+ return `${this.origin}${this.basePath}${portalPath}`;
61
+ }
62
+ /** The site address, with no trailing slash. */
63
+ toString() {
64
+ return `${this.origin}${this.basePath}`;
65
+ }
66
+ }
67
+ //# sourceMappingURL=site-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-address.js","sourceRoot":"","sources":["../../../../src/types/portal/config/site-address.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { UrlPath } from '../../file/urlPath.js';
2
1
  import { Parsed } from './fields.js';
2
+ import { SiteAddress } from './site-address.js';
3
3
  /** What a specification says about itself, which is what a portal is called until the block says otherwise. */
4
4
  export interface SuggestedSite {
5
5
  name: string;
@@ -8,7 +8,7 @@ export interface SuggestedSite {
8
8
  export declare const PLACEHOLDER_SITE: Readonly<SuggestedSite>;
9
9
  export declare class SiteConfig {
10
10
  private readonly name;
11
- private readonly url;
11
+ private readonly address;
12
12
  private readonly description;
13
13
  private constructor();
14
14
  /**
@@ -19,7 +19,7 @@ export declare class SiteConfig {
19
19
  static suggested(site: SuggestedSite): SiteConfig;
20
20
  siteName(): string;
21
21
  siteDescription(): string | null;
22
- origin(): UrlPath | null;
22
+ siteAddress(): SiteAddress | null;
23
23
  toJSON(): {
24
24
  name: string;
25
25
  url?: string;
@@ -27,6 +27,4 @@ export declare class SiteConfig {
27
27
  };
28
28
  private static validName;
29
29
  private static validDescription;
30
- private static validUrl;
31
- private static parseOrigin;
32
30
  }
@@ -1,15 +1,15 @@
1
1
  import { err, ok, Result } from 'neverthrow';
2
- import { UrlPath } from '../../file/urlPath.js';
3
- import { allOf, isWebAddress, namespace, nonEmptyString, unknownKeys } from './fields.js';
2
+ import { allOf, namespace, nonEmptyString, optional, unknownKeys } from './fields.js';
3
+ import { SiteAddress } from './site-address.js';
4
4
  export const PLACEHOLDER_SITE = Object.freeze({ name: 'My API', description: null });
5
5
  const KNOWN = ['name', 'url', 'description'];
6
6
  export class SiteConfig {
7
7
  name;
8
- url;
8
+ address;
9
9
  description;
10
- constructor(name, url, description) {
10
+ constructor(name, address, description) {
11
11
  this.name = name;
12
- this.url = url;
12
+ this.address = address;
13
13
  this.description = description;
14
14
  }
15
15
  /**
@@ -19,9 +19,9 @@ export class SiteConfig {
19
19
  static parse(value, path, suggested) {
20
20
  return namespace(value, path).andThen((data) => allOf(unknownKeys(data, KNOWN, path), Result.combineWithAllErrors([
21
21
  SiteConfig.validName(data.name, `${path}.name`, suggested),
22
- SiteConfig.validUrl(data.url, `${path}.url`),
22
+ optional(data.url, (url) => SiteAddress.parse(url, `${path}.url`)),
23
23
  SiteConfig.validDescription(data.description, `${path}.description`, suggested)
24
- ])).map(([name, url, description]) => new SiteConfig(name, url, description)));
24
+ ])).map(([name, address, description]) => new SiteConfig(name, address, description)));
25
25
  }
26
26
  static suggested(site) {
27
27
  return new SiteConfig(site.name, null, site.description);
@@ -32,13 +32,13 @@ export class SiteConfig {
32
32
  siteDescription() {
33
33
  return this.description;
34
34
  }
35
- origin() {
36
- return this.url;
35
+ siteAddress() {
36
+ return this.address;
37
37
  }
38
38
  toJSON() {
39
39
  return {
40
40
  name: this.name,
41
- ...(this.url === null ? {} : { url: this.url.toString() }),
41
+ ...(this.address === null ? {} : { url: this.address.toString() }),
42
42
  ...(this.description === null ? {} : { description: this.description })
43
43
  };
44
44
  }
@@ -61,28 +61,5 @@ export class SiteConfig {
61
61
  const trimmed = description.trim();
62
62
  return ok(trimmed.length > 0 ? trimmed : null);
63
63
  }
64
- // Only the origin is accepted: the portal is hosted at the root of its host, so a path,
65
- // query or fragment would produce canonical links that do not resolve.
66
- static validUrl(url, path) {
67
- if (url === undefined) {
68
- return ok(null);
69
- }
70
- const origin = typeof url === 'string' ? SiteConfig.parseOrigin(url.trim()) : null;
71
- return origin === null
72
- ? err([
73
- `'${path}' must be the address the portal is hosted at, without a path, for example 'https://docs.example.com'.`
74
- ])
75
- : ok(origin);
76
- }
77
- static parseOrigin(value) {
78
- if (!isWebAddress(value)) {
79
- return null;
80
- }
81
- const parsed = new URL(value);
82
- if (parsed.pathname !== '/' || parsed.search !== '' || parsed.hash !== '') {
83
- return null;
84
- }
85
- return new UrlPath(parsed.origin);
86
- }
87
64
  }
88
65
  //# sourceMappingURL=site-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"site-config.js","sourceRoot":"","sources":["../../../../src/types/portal/config/site-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-config.js","sourceRoot":"","sources":["../../../../src/types/portal/config/site-config.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,10 @@ export declare class StaticAsset {
13
13
  resolveIn(sourceDirectory: DirectoryPath): FilePath;
14
14
  settingPath(): string;
15
15
  /**
16
- * The `static/` prefix is the site root. Each name is escaped, since a `#`, `?` or `%` in it
16
+ * The `static/` prefix is the portal's root. Each name is escaped, since a `#`, `?` or `%` in it
17
17
  * would otherwise end or alter the path.
18
18
  */
19
- siteUrl(): string;
19
+ portalPath(): string;
20
20
  imageType(): string | null;
21
21
  isEqual(other: StaticAsset): boolean;
22
22
  toJSON(): string;
@@ -45,10 +45,10 @@ export class StaticAsset {
45
45
  return this.setting;
46
46
  }
47
47
  /**
48
- * The `static/` prefix is the site root. Each name is escaped, since a `#`, `?` or `%` in it
48
+ * The `static/` prefix is the portal's root. Each name is escaped, since a `#`, `?` or `%` in it
49
49
  * would otherwise end or alter the path.
50
50
  */
51
- siteUrl() {
51
+ portalPath() {
52
52
  return `/${this.relativePath.slice(STATIC_PREFIX.length).split('/').map(encodeURIComponent).join('/')}`;
53
53
  }
54
54
  imageType() {
@@ -1 +1 @@
1
- {"version":3,"file":"static-asset.js","sourceRoot":"","sources":["../../../../src/types/portal/config/static-asset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static-asset.js","sourceRoot":"","sources":["../../../../src/types/portal/config/static-asset.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,14 @@ import { FilePath } from '../file/filePath.js';
5
5
  import { ContentNotices } from './content-notices.js';
6
6
  import { GeneratedPages } from './generated-pages.js';
7
7
  import { ParsedPage } from './page.js';
8
- import { ContentProblem, MissingImage, PortalSpec } from './portal-source.js';
8
+ import { ContentProblem, MissingImage, PortalSpec, ReservedAddress } from './portal-source.js';
9
+ /**
10
+ * The page the API playground's OAuth authorization returns through, which the template serves
11
+ * from a route of its own (`portal-template/src/lib/oauth-callback.ts`). That route wins over a
12
+ * content page at the address, so such a page would build and never be shown.
13
+ */
14
+ export declare const OAUTH_CALLBACK_ADDRESS = "/oauth/callback";
15
+ export declare const OAUTH_CALLBACK: ReservedAddress;
9
16
  /** Passed over by Vite's `import.meta.glob`, which the build reads the content through. */
10
17
  export declare const isSkippedByGlob: (name: string) => boolean;
11
18
  /** Whether the glob passes over `file` below `root`, which it does for a path with any such segment. */
@@ -81,9 +88,9 @@ export declare class ContentTree {
81
88
  private static addressProblems;
82
89
  /**
83
90
  * Pages served at a generated section's address or below it, whether or not `apimatic.json`
84
- * calls for the section. Judged by the address, as the content source computes it, rather
85
- * than by the directories as written: a page in a `(group)` folder is served as if the folder
86
- * were not there, and a folder's index page at the folder's own address.
91
+ * calls for the section, and at the OAuth callback's. Judged by the address, as the content
92
+ * source computes it, rather than by the directories as written: a page in a `(group)` folder
93
+ * is served as if the folder were not there, and a folder's index page at the folder's own address.
87
94
  */
88
95
  private static reservedAddressPages;
89
96
  /** Addresses more than one page would be served at, each with its pages in the order walked. */
@@ -6,11 +6,27 @@ import { FilePath } from '../file/filePath.js';
6
6
  import { GENERATED_SECTIONS } from './generated-pages.js';
7
7
  import { API_REFERENCE_NAME, GROUP_FOLDER, INDEX_NAME, isSameTabEntry, NAVIGATION_FILE_NAME, PortalNavigation } from './portal-navigation.js';
8
8
  import { sharedTabNames, untitledTabName } from './portal-tabs.js';
9
+ import { shared } from './shared.js';
9
10
  const NAVIGATION_FILE = new FileName(NAVIGATION_FILE_NAME);
11
+ /**
12
+ * The page the API playground's OAuth authorization returns through, which the template serves
13
+ * from a route of its own (`portal-template/src/lib/oauth-callback.ts`). That route wins over a
14
+ * content page at the address, so such a page would build and never be shown.
15
+ */
16
+ export const OAUTH_CALLBACK_ADDRESS = '/oauth/callback';
17
+ export const OAUTH_CALLBACK = {
18
+ address: OAUTH_CALLBACK_ADDRESS,
19
+ description: "the API playground's OAuth authorization"
20
+ };
10
21
  /** Extensions the docs collection compiles, and so the ones an entry can address. */
11
22
  const PAGE_EXTENSIONS = ['.md', '.mdx'];
12
23
  /** Passed over by Vite's `import.meta.glob`, which the build reads the content through. */
13
24
  export const isSkippedByGlob = (name) => name.startsWith('.') || name === 'node_modules';
25
+ /** The slugs the content source gives a page, and the address they make: a `(group)` folder adds none. */
26
+ const servedAt = (segments) => {
27
+ const slugs = getSlugs(segments.join('/'));
28
+ return { slugs, address: `/${slugs.join('/')}` };
29
+ };
14
30
  /** Whether the glob passes over `file` below `root`, which it does for a path with any such segment. */
15
31
  export const isSkippedWithin = (file, root) => file.relativeTo(root).split('/').some(isSkippedByGlob);
16
32
  /**
@@ -32,9 +48,7 @@ export class ContentTree {
32
48
  }
33
49
  /** The `nav.json` files the build reads, which its glob matches by code point. */
34
50
  navigationFiles() {
35
- return this.tree
36
- .getAllFiles()
37
- .filter((file) => file.name().compare(NAVIGATION_FILE) === 0 && !this.isSkipped(file));
51
+ return this.tree.getAllFiles().filter((file) => file.name().isEqual(NAVIGATION_FILE) && !this.isSkipped(file));
38
52
  }
39
53
  /** Whether the build would read `file` as part of `content/`: below it, and not passed over. */
40
54
  holds(file) {
@@ -175,35 +189,32 @@ export class ContentTree {
175
189
  problems.push({ kind: 'reservedAddresses', pages: reserved });
176
190
  }
177
191
  // The build fails on two pages at one address, or moves an index page to `<folder>/index`.
178
- const shared = ContentTree.sharedAddresses(addressed.filter(({ file }) => !reserved.some((page) => page.file.isEqual(file))));
179
- if (shared.length > 0) {
180
- problems.push({ kind: 'sharedAddresses', addresses: shared });
192
+ const sharing = ContentTree.sharedAddresses(addressed.filter(({ file }) => !reserved.some((page) => page.file.isEqual(file))));
193
+ if (sharing.length > 0) {
194
+ problems.push({ kind: 'sharedAddresses', addresses: sharing });
181
195
  }
182
196
  return problems;
183
197
  }
184
198
  /**
185
199
  * Pages served at a generated section's address or below it, whether or not `apimatic.json`
186
- * calls for the section. Judged by the address, as the content source computes it, rather
187
- * than by the directories as written: a page in a `(group)` folder is served as if the folder
188
- * were not there, and a folder's index page at the folder's own address.
200
+ * calls for the section, and at the OAuth callback's. Judged by the address, as the content
201
+ * source computes it, rather than by the directories as written: a page in a `(group)` folder
202
+ * is served as if the folder were not there, and a folder's index page at the folder's own address.
189
203
  */
190
204
  static reservedAddressPages(pages) {
191
205
  return pages.flatMap(({ file, segments }) => {
192
- const slugs = getSlugs(segments.join('/'));
206
+ const { slugs, address } = servedAt(segments);
207
+ if (address === OAUTH_CALLBACK.address)
208
+ return [{ file, address, keptFor: OAUTH_CALLBACK }];
193
209
  const section = GENERATED_SECTIONS.find((candidate) => candidate.folder === slugs[0]);
194
- return section === undefined ? [] : [{ file, address: `/${slugs.join('/')}`, section }];
210
+ return section === undefined
211
+ ? []
212
+ : [{ file, address, keptFor: { address: `/${section.folder}`, description: section.description } }];
195
213
  });
196
214
  }
197
215
  /** Addresses more than one page would be served at, each with its pages in the order walked. */
198
216
  static sharedAddresses(pages) {
199
- const byAddress = new Map();
200
- for (const { file, segments } of pages) {
201
- const address = `/${getSlugs(segments.join('/')).join('/')}`;
202
- byAddress.set(address, [...(byAddress.get(address) ?? []), file]);
203
- }
204
- return [...byAddress]
205
- .filter(([, files]) => files.length > 1)
206
- .map(([address, files]) => ({ address, pages: files }));
217
+ return shared(pages.map(({ file, segments }) => ({ key: servedAt(segments).address, file })));
207
218
  }
208
219
  /**
209
220
  * Pages inside a specification's section, below `content/api/<slug>/`. The section and each
@@ -357,7 +368,7 @@ class NavigationWalk {
357
368
  else if (!isSkippedByGlob(item.fileName.toString())) {
358
369
  const file = new FilePath(directory.directoryPath, item.fileName);
359
370
  const page = pageName(item.fileName);
360
- if (item.fileName.compare(NAVIGATION_FILE) === 0) {
371
+ if (item.fileName.isEqual(NAVIGATION_FILE)) {
361
372
  listing.navigationFile = file;
362
373
  }
363
374
  else if (item.fileName.is(NAVIGATION_FILE_NAME)) {