@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.
- package/README.md +20 -64
- package/apimatic.schema.json +2 -2
- package/lib/actions/action-result.d.ts +4 -2
- package/lib/actions/action-result.js +8 -3
- package/lib/actions/action-result.js.map +1 -1
- package/lib/actions/api/transform.d.ts +7 -6
- package/lib/actions/api/transform.js +12 -13
- package/lib/actions/api/transform.js.map +1 -1
- package/lib/actions/api/validate.d.ts +4 -5
- package/lib/actions/api/validate.js +30 -32
- package/lib/actions/api/validate.js.map +1 -1
- package/lib/actions/portal/generate.js +3 -3
- package/lib/actions/portal/generate.js.map +1 -1
- package/lib/actions/portal/prepare-project.js +3 -0
- package/lib/actions/portal/prepare-project.js.map +1 -1
- package/lib/actions/quickstart.d.ts +1 -9
- package/lib/actions/quickstart.js +122 -102
- package/lib/actions/quickstart.js.map +1 -1
- package/lib/commands/api/transform.d.ts +1 -1
- package/lib/commands/api/transform.js +2 -2
- package/lib/commands/api/transform.js.map +1 -1
- package/lib/commands/api/validate.d.ts +3 -3
- package/lib/commands/api/validate.js +28 -17
- package/lib/commands/api/validate.js.map +1 -1
- package/lib/commands/plugin/generate.d.ts +1 -1
- package/lib/commands/portal/generate.d.ts +2 -2
- package/lib/commands/portal/generate.js +3 -1
- package/lib/commands/portal/generate.js.map +1 -1
- package/lib/commands/portal/serve.d.ts +2 -2
- package/lib/commands/portal/serve.js +1 -1
- package/lib/commands/sdk/generate.d.ts +1 -1
- package/lib/infrastructure/file-service.d.ts +5 -0
- package/lib/infrastructure/file-service.js +40 -9
- package/lib/infrastructure/file-service.js.map +1 -1
- package/lib/infrastructure/portal-dev-server-service.js +2 -1
- package/lib/infrastructure/portal-dev-server-service.js.map +1 -1
- package/lib/infrastructure/portal-project-service.d.ts +2 -0
- package/lib/infrastructure/portal-project-service.js +9 -4
- package/lib/infrastructure/portal-project-service.js.map +1 -1
- package/lib/infrastructure/services/file-download-service.d.ts +4 -4
- package/lib/infrastructure/services/file-download-service.js +14 -14
- package/lib/infrastructure/services/file-download-service.js.map +1 -1
- package/lib/prompts/api/transform.d.ts +0 -2
- package/lib/prompts/api/transform.js +0 -3
- package/lib/prompts/api/transform.js.map +1 -1
- package/lib/prompts/api/validate.d.ts +2 -2
- package/lib/prompts/api/validate.js +35 -3
- package/lib/prompts/api/validate.js.map +1 -1
- package/lib/prompts/format.d.ts +1 -1
- package/lib/prompts/format.js.map +1 -1
- package/lib/prompts/portal/generate.d.ts +2 -1
- package/lib/prompts/portal/generate.js +22 -6
- package/lib/prompts/portal/generate.js.map +1 -1
- package/lib/prompts/portal/prepare-project.d.ts +5 -1
- package/lib/prompts/portal/prepare-project.js +15 -1
- package/lib/prompts/portal/prepare-project.js.map +1 -1
- package/lib/prompts/portal/serve.js +6 -3
- package/lib/prompts/portal/serve.js.map +1 -1
- package/lib/prompts/portal/source.d.ts +6 -6
- package/lib/prompts/portal/source.js +97 -31
- package/lib/prompts/portal/source.js.map +1 -1
- package/lib/prompts/quickstart.d.ts +14 -13
- package/lib/prompts/quickstart.js +43 -27
- package/lib/prompts/quickstart.js.map +1 -1
- package/lib/types/apimatic-config/document.d.ts +2 -0
- package/lib/types/apimatic-config/document.js +4 -0
- package/lib/types/apimatic-config/document.js.map +1 -1
- package/lib/types/file/directory.js +2 -1
- package/lib/types/file/directory.js.map +1 -1
- package/lib/types/file/directoryPath.d.ts +3 -0
- package/lib/types/file/directoryPath.js +10 -1
- package/lib/types/file/directoryPath.js.map +1 -1
- package/lib/types/file/fileName.d.ts +5 -0
- package/lib/types/file/fileName.js +13 -3
- package/lib/types/file/fileName.js.map +1 -1
- package/lib/types/file/filePath.js +1 -1
- package/lib/types/file/filePath.js.map +1 -1
- package/lib/types/file/resource-input.d.ts +7 -5
- package/lib/types/file/resource-input.js +16 -15
- package/lib/types/file/resource-input.js.map +1 -1
- package/lib/types/flags-provider.d.ts +6 -1
- package/lib/types/flags-provider.js +22 -12
- package/lib/types/flags-provider.js.map +1 -1
- package/lib/types/plugin-config-context.d.ts +3 -0
- package/lib/types/plugin-config-context.js +33 -12
- package/lib/types/plugin-config-context.js.map +1 -1
- package/lib/types/portal/code-samples.d.ts +2 -0
- package/lib/types/portal/code-samples.js +7 -0
- package/lib/types/portal/code-samples.js.map +1 -1
- package/lib/types/portal/config/site-address.d.ts +16 -0
- package/lib/types/portal/config/site-address.js +67 -0
- package/lib/types/portal/config/site-address.js.map +1 -0
- package/lib/types/portal/config/site-config.d.ts +3 -5
- package/lib/types/portal/config/site-config.js +10 -33
- package/lib/types/portal/config/site-config.js.map +1 -1
- package/lib/types/portal/config/static-asset.d.ts +2 -2
- package/lib/types/portal/config/static-asset.js +2 -2
- package/lib/types/portal/config/static-asset.js.map +1 -1
- package/lib/types/portal/content-tree.d.ts +11 -4
- package/lib/types/portal/content-tree.js +31 -20
- package/lib/types/portal/content-tree.js.map +1 -1
- package/lib/types/portal/endpoint.d.ts +1 -0
- package/lib/types/portal/endpoint.js +3 -0
- package/lib/types/portal/endpoint.js.map +1 -1
- package/lib/types/portal/openapi-document.d.ts +4 -0
- package/lib/types/portal/openapi-document.js +12 -0
- package/lib/types/portal/openapi-document.js.map +1 -1
- package/lib/types/portal/page.js +16 -1
- package/lib/types/portal/page.js.map +1 -1
- package/lib/types/portal/portal-config.d.ts +6 -3
- package/lib/types/portal/portal-config.js +8 -4
- package/lib/types/portal/portal-config.js.map +1 -1
- package/lib/types/portal/portal-languages.d.ts +2 -0
- package/lib/types/portal/portal-languages.js +5 -1
- package/lib/types/portal/portal-languages.js.map +1 -1
- package/lib/types/portal/portal-source.d.ts +43 -11
- package/lib/types/portal/shared.d.ts +11 -0
- package/lib/types/portal/shared.js +10 -0
- package/lib/types/portal/shared.js.map +1 -0
- package/lib/types/portal/spec-metadata.d.ts +17 -0
- package/lib/types/portal/spec-metadata.js +40 -0
- package/lib/types/portal/spec-metadata.js.map +1 -0
- package/lib/types/portal-source-context.d.ts +21 -8
- package/lib/types/portal-source-context.js +208 -50
- package/lib/types/portal-source-context.js.map +1 -1
- package/lib/types/project-context.d.ts +18 -0
- package/lib/types/project-context.js +18 -1
- package/lib/types/project-context.js.map +1 -1
- package/lib/types/project-layout.d.ts +3 -0
- package/lib/types/project-layout.js +4 -0
- package/lib/types/project-layout.js.map +1 -1
- package/lib/types/resource-context.d.ts +25 -10
- package/lib/types/resource-context.js +40 -23
- package/lib/types/resource-context.js.map +1 -1
- package/oclif.manifest.json +88 -70
- package/package.json +1 -1
- package/portal-template/dependency-directories.ts +31 -40
- package/portal-template/downloads.ts +6 -3
- package/portal-template/portal-config.ts +4 -0
- package/portal-template/prerender-pages.ts +8 -2
- package/portal-template/spec-reload.ts +12 -9
- package/portal-template/src/components/api-markdown.tsx +32 -0
- package/portal-template/src/components/api-page.tsx +8 -1
- package/portal-template/src/components/authorization-failure.tsx +63 -0
- package/portal-template/src/components/markdown-copy-button.tsx +2 -2
- package/portal-template/src/components/plugin-install.tsx +6 -5
- package/portal-template/src/components/sdk-actions.tsx +3 -2
- package/portal-template/src/components/sdk-cards.tsx +2 -1
- package/portal-template/src/components/search.tsx +9 -2
- package/portal-template/src/lib/base-path.ts +14 -0
- package/portal-template/src/lib/code-titles.ts +8 -0
- package/portal-template/src/lib/copy-markdown.ts +4 -2
- package/portal-template/src/lib/install-command.ts +5 -5
- package/portal-template/src/lib/layout.shared.tsx +5 -3
- package/portal-template/src/lib/llms.server.ts +29 -5
- package/portal-template/src/lib/oauth-callback.ts +63 -0
- package/portal-template/src/lib/portal-types.ts +3 -3
- package/portal-template/src/lib/rehype-code-titles.ts +3 -5
- package/portal-template/src/lib/remark-image-references.ts +35 -0
- package/portal-template/src/lib/search-content.ts +28 -0
- package/portal-template/src/lib/search-options.ts +7 -0
- package/portal-template/src/lib/source.server.ts +2 -0
- package/portal-template/src/router.tsx +3 -1
- package/portal-template/src/routes/$.tsx +3 -2
- package/portal-template/src/routes/__root.tsx +8 -1
- package/portal-template/src/routes/api/search[.]json.ts +23 -2
- package/portal-template/src/routes/oauth.callback.tsx +54 -0
- package/portal-template/static-functions-base.ts +41 -0
- package/portal-template/vite.config.ts +15 -8
package/README.md
CHANGED
|
@@ -21,63 +21,6 @@ To get started with APIMatic's CLI using a step by step wizard, run the followin
|
|
|
21
21
|
$ apimatic quickstart
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
# Upgrading from 1.x
|
|
25
|
-
|
|
26
|
-
Documentation portals are now built on your machine from a `src/` directory, and
|
|
27
|
-
`APIMATIC-BUILD.json` no longer configures them:
|
|
28
|
-
|
|
29
|
-
- Describe the portal in the `portal` block of `src/apimatic.json`: `site` (its name, address
|
|
30
|
-
and description), `brand` (logo, favicon, primary colour and colour mode), `navigation`
|
|
31
|
-
(header links) and `ai` (the page actions). Running `apimatic quickstart` scaffolds the block
|
|
32
|
-
with every default spelled out, and the file's `$schema` lets your editor complete and check it.
|
|
33
|
-
- A portal also needs the project's SDK languages, at least one, in the same file's
|
|
34
|
-
`languages` block, for example `"languages": { "typescript": {} }`; `csharp`, `python` and
|
|
35
|
-
`typescript` are available for now. `plugin generate` and `sdk publish` both write to it, and
|
|
36
|
-
the context plugin reads it too, so name only the languages you ship. The same file carries
|
|
37
|
-
the plugin's identity in `plugin`; `src/plugin-config.json` is no longer read, so run
|
|
38
|
-
`plugin generate` and `sdk publish` again after upgrading and delete the old file.
|
|
39
|
-
- Put OpenAPI documents in `src/spec/`, Markdown pages in `src/content/` and images and other
|
|
40
|
-
files in `src/static/`.
|
|
41
|
-
- Every page starts with front matter giving its `title`, which names it in the sidebar.
|
|
42
|
-
Pages written for 1.x had none; the CLI lists each page that needs one before it builds.
|
|
43
|
-
```md
|
|
44
|
-
---
|
|
45
|
-
title: Getting started
|
|
46
|
-
---
|
|
47
|
-
```
|
|
48
|
-
- Page order comes from a `nav.json` beside your pages, listing them by file name, and a
|
|
49
|
-
`title` there names the folder it sits in. A folder links to its `index.md`; without one it
|
|
50
|
-
is only a heading.
|
|
51
|
-
- The top level of the portal is shown as tabs, which `src/content/nav.json` decides with two
|
|
52
|
-
lists. `tabs` names the tabs after Home, in order, and nothing else is one: a folder directly
|
|
53
|
-
under `src/content/`, and the sections the CLI makes, placed with `apimatic:sdks`,
|
|
54
|
-
`apimatic:plugin` and `apimatic:api`. Home comes first, opens on `index.md`, and holds
|
|
55
|
-
everything `tabs` does not name: every page at the top level, every other folder, and every
|
|
56
|
-
section not named as a tab, each at the address it always has. Its `pages` orders that sidebar
|
|
57
|
-
as any other `nav.json` orders its folder, a token standing for its section, and the file's
|
|
58
|
-
`title` names it; what `pages` does not name follows in alphabetical order, pages before
|
|
59
|
-
folders. A file with no `tabs`, or no file at all, makes no tab, so Home stands alone and
|
|
60
|
-
there is no tab bar; the build says so once, with the line that makes tabs of the sections
|
|
61
|
-
and the reference `pages` does not place. A new portal starts with the three sections as
|
|
62
|
-
tabs.
|
|
63
|
-
```json
|
|
64
|
-
{
|
|
65
|
-
"title": "Overview",
|
|
66
|
-
"tabs": ["tutorials", "apimatic:sdks", "apimatic:api"],
|
|
67
|
-
"pages": ["index", "authentication", "guides", "apimatic:plugin", "..."]
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
- The SDKs tab lists a card per language in the `languages` block, offering its download and,
|
|
71
|
-
once `sdk publish` records a release, its install command, source repository and package, and
|
|
72
|
-
gives each language a page carrying its SDK's getting-started docs. The Context Plugin tab,
|
|
73
|
-
with the plugin's install command, appears when there is a `plugin` block, or a `pluginUrl` in
|
|
74
|
-
the `portal` block for a plugin hosted elsewhere. Their addresses, `/sdks` and
|
|
75
|
-
`/context-plugin`, are kept for them, so a page in `src/content/` that would be served there
|
|
76
|
-
is refused.
|
|
77
|
-
- `portal toc new`, `portal recipe new` and `portal copilot` are gone, and `portal serve` no
|
|
78
|
-
longer takes `--destination` or `--no-reload`. Run `apimatic autocomplete --refresh-cache`
|
|
79
|
-
to drop the removed commands from shell completion.
|
|
80
|
-
|
|
81
24
|
# Usage
|
|
82
25
|
<!-- usage -->
|
|
83
26
|
```sh-session
|
|
@@ -151,9 +94,11 @@ Validate API specification for syntactic and semantic correctness
|
|
|
151
94
|
|
|
152
95
|
```
|
|
153
96
|
USAGE
|
|
154
|
-
$ apimatic api validate [--file <value>
|
|
97
|
+
$ apimatic api validate [--file <value> | --url <value> | -i <value>] [-k <value>]
|
|
155
98
|
|
|
156
99
|
FLAGS
|
|
100
|
+
-i, --input=<value> [default: ./] path to the parent directory containing the 'src' directory, which includes API
|
|
101
|
+
specifications and configuration files.
|
|
157
102
|
-k, --auth-key=<value> override current authentication state with an authentication key.
|
|
158
103
|
--file=<value> Path to the API specification file to validate
|
|
159
104
|
--url=<value> URL to the API specification file to validate (publicly accessible)
|
|
@@ -161,9 +106,14 @@ FLAGS
|
|
|
161
106
|
DESCRIPTION
|
|
162
107
|
Validate API specification for syntactic and semantic correctness
|
|
163
108
|
|
|
164
|
-
Validate
|
|
109
|
+
Validate the API specification in your 'src/spec' directory, or the one --file or --url points to, to ensure it
|
|
110
|
+
adheres to syntactic and semantic standards.
|
|
165
111
|
|
|
166
112
|
EXAMPLES
|
|
113
|
+
apimatic api validate
|
|
114
|
+
|
|
115
|
+
apimatic api validate --input=./
|
|
116
|
+
|
|
167
117
|
apimatic api validate --file=./specs/sample.json
|
|
168
118
|
|
|
169
119
|
apimatic api validate --url="https://petstore.swagger.io/v2/swagger.json"
|
|
@@ -361,9 +311,14 @@ DESCRIPTION
|
|
|
361
311
|
|
|
362
312
|
Builds a documentation portal from the OpenAPI documents and Markdown pages in your 'src' directory.
|
|
363
313
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
314
|
+
Each OpenAPI document at the top of 'src/spec' gets a section of the API reference, and the SDKs are built from one of
|
|
315
|
+
them. To build the SDKs from several, put each in a folder of its own and set 'MergeConfiguration.MergeApis' to true
|
|
316
|
+
in an 'APIMATIC-META.json' beside the folders; each folder then gets a section.
|
|
317
|
+
|
|
318
|
+
The portal is built on your machine and written as static files for any static host, served at its root or, when
|
|
319
|
+
'portal.site.url' has a path such as 'https://example.com/docs', at that path. Configure it with 'src/apimatic.json',
|
|
320
|
+
whose 'languages' block gives the portal a page for each SDK language, and whose 'plugin' block, or a 'pluginUrl' in
|
|
321
|
+
its 'portal' block for a plugin hosted elsewhere, a page for the context plugin.
|
|
367
322
|
|
|
368
323
|
EXAMPLES
|
|
369
324
|
apimatic portal generate
|
|
@@ -397,8 +352,9 @@ DESCRIPTION
|
|
|
397
352
|
pages in 'src/content', reorder them in a 'nav.json', or change the 'portal', 'languages' or 'plugin' block of
|
|
398
353
|
'apimatic.json'.
|
|
399
354
|
|
|
400
|
-
Adding a language or a 'plugin' block, adding or removing a page in 'src/content', creating 'src/static',
|
|
401
|
-
which documents are in 'src/spec',
|
|
355
|
+
Adding a language or a 'plugin' block, adding or removing a page in 'src/content', creating 'src/static', changing
|
|
356
|
+
which documents are in 'src/spec' or which folders its 'APIMATIC-META.json' merges, or changing the path in
|
|
357
|
+
'portal.site.url', needs the preview restarted.
|
|
402
358
|
|
|
403
359
|
Nothing is written to disk; run 'apimatic portal generate' to produce the static files.
|
|
404
360
|
|
package/apimatic.schema.json
CHANGED
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
},
|
|
78
78
|
"url": {
|
|
79
79
|
"type": "string",
|
|
80
|
-
"description": "The address the portal is hosted at,
|
|
81
|
-
"pattern": "^\\s*[hH][tT][tT][pP][sS]?://[^\\s
|
|
80
|
+
"description": "The address the portal is hosted at, for example 'https://docs.example.com' or 'https://example.com/docs'.",
|
|
81
|
+
"pattern": "^\\s*[hH][tT][tT][pP][sS]?://[^\\s/?#\\\\]+(?:/(?!\\.{1,2}(?:/|\\s*$))(?![A-Za-z0-9._~-]*\\.[hH][tT][mM][lL]?/?\\s*$)[A-Za-z0-9._~-]+)*/?\\s*$"
|
|
82
82
|
},
|
|
83
83
|
"description": {
|
|
84
84
|
"type": "string",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export declare class ActionResult<T = void> {
|
|
1
|
+
export declare class ActionResult<T = void, E = never> {
|
|
2
2
|
private readonly message;
|
|
3
3
|
private readonly resultType;
|
|
4
4
|
private readonly value?;
|
|
5
|
+
private readonly error?;
|
|
5
6
|
private constructor();
|
|
6
7
|
static success<T>(value?: T): ActionResult<T>;
|
|
7
|
-
static failed<T = never>(message?: string): ActionResult<T>;
|
|
8
|
+
static failed<T = never, E = never>(message?: string, error?: E): ActionResult<T, E>;
|
|
8
9
|
static cancelled<T = never>(message?: string): ActionResult<T>;
|
|
9
10
|
static stopped<T = never>(message?: string): ActionResult<T>;
|
|
10
11
|
getMessage(): string;
|
|
@@ -15,6 +16,7 @@ export declare class ActionResult<T = void> {
|
|
|
15
16
|
match<R>(onSuccess: (value: T) => R, onFailure: (message: string) => R, onCancel: (message: string) => R): R;
|
|
16
17
|
getValue(): T;
|
|
17
18
|
getValueOr(defaultValue: T): T;
|
|
19
|
+
getError(): E | undefined;
|
|
18
20
|
discardValue(): ActionResult;
|
|
19
21
|
mapAll<R>(onSuccess: (value?: T) => R, onFailure: () => R, onCancel: () => R): R;
|
|
20
22
|
}
|
|
@@ -8,16 +8,18 @@ export class ActionResult {
|
|
|
8
8
|
message;
|
|
9
9
|
resultType;
|
|
10
10
|
value;
|
|
11
|
-
|
|
11
|
+
error;
|
|
12
|
+
constructor(resultType, message, value, error) {
|
|
12
13
|
this.resultType = resultType;
|
|
13
14
|
this.message = message;
|
|
14
15
|
this.value = value;
|
|
16
|
+
this.error = error;
|
|
15
17
|
}
|
|
16
18
|
static success(value) {
|
|
17
19
|
return new ActionResult(ResultType.Success, "Succeeded", value);
|
|
18
20
|
}
|
|
19
|
-
static failed(message = "Failed") {
|
|
20
|
-
return new ActionResult(ResultType.Failure, message);
|
|
21
|
+
static failed(message = "Failed", error) {
|
|
22
|
+
return new ActionResult(ResultType.Failure, message, undefined, error);
|
|
21
23
|
}
|
|
22
24
|
static cancelled(message = "Cancelled") {
|
|
23
25
|
return new ActionResult(ResultType.Cancel, message);
|
|
@@ -59,6 +61,9 @@ export class ActionResult {
|
|
|
59
61
|
getValueOr(defaultValue) {
|
|
60
62
|
return this.isSuccess() ? this.value : defaultValue;
|
|
61
63
|
}
|
|
64
|
+
getError() {
|
|
65
|
+
return this.error;
|
|
66
|
+
}
|
|
62
67
|
discardValue() {
|
|
63
68
|
return new ActionResult(this.resultType, this.message);
|
|
64
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-result.js","sourceRoot":"","sources":["../../src/actions/action-result.ts"],"names":[],"mappings":"AAAA,IAAK,UAIJ;AAJD,WAAK,UAAU;IACb,iDAAW,CAAA;IACX,iDAAY,CAAA;IACZ,iDAAW,CAAA;AACb,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;AAED,MAAM,OAAO,YAAY;IACN,OAAO,CAAS;IAChB,UAAU,CAAa;IACvB,KAAK,CAAK;IAE3B,YAAoB,UAAsB,EAAE,OAAe,EAAE,KAAS;
|
|
1
|
+
{"version":3,"file":"action-result.js","sourceRoot":"","sources":["../../src/actions/action-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { DirectoryPath } from
|
|
2
|
-
import { ActionResult } from
|
|
3
|
-
import { ExportFormats } from
|
|
4
|
-
import { CommandMetadata } from
|
|
5
|
-
import {
|
|
1
|
+
import { DirectoryPath } from '../../types/file/directoryPath.js';
|
|
2
|
+
import { ActionResult } from '../action-result.js';
|
|
3
|
+
import { ExportFormats } from '@apimatic/sdk';
|
|
4
|
+
import { CommandMetadata } from '../../types/common/command-metadata.js';
|
|
5
|
+
import { FilePath } from '../../types/file/filePath.js';
|
|
6
|
+
import { UrlPath } from '../../types/file/urlPath.js';
|
|
6
7
|
export declare class TransformAction {
|
|
7
8
|
private readonly prompts;
|
|
8
9
|
private readonly validatePrompts;
|
|
@@ -11,5 +12,5 @@ export declare class TransformAction {
|
|
|
11
12
|
private readonly commandMetadata;
|
|
12
13
|
private readonly authKey;
|
|
13
14
|
constructor(configDir: DirectoryPath, commandMetadata: CommandMetadata, authKey?: string | null);
|
|
14
|
-
readonly execute: (resourcePath:
|
|
15
|
+
readonly execute: (resourcePath: FilePath | UrlPath, format: ExportFormats, destination: DirectoryPath, force: boolean) => Promise<ActionResult>;
|
|
15
16
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ActionResult } from
|
|
2
|
-
import { ApiTransformPrompts } from
|
|
3
|
-
import { withDirPath } from
|
|
4
|
-
import { TransformationService } from
|
|
5
|
-
import { ApiValidatePrompts } from
|
|
6
|
-
import { TransformContext } from
|
|
7
|
-
import { ResourceContext } from
|
|
1
|
+
import { ActionResult } from '../action-result.js';
|
|
2
|
+
import { ApiTransformPrompts } from '../../prompts/api/transform.js';
|
|
3
|
+
import { withDirPath } from '../../infrastructure/tmp-extensions.js';
|
|
4
|
+
import { TransformationService } from '../../infrastructure/services/transformation-service.js';
|
|
5
|
+
import { ApiValidatePrompts } from '../../prompts/api/validate.js';
|
|
6
|
+
import { TransformContext } from '../../types/transform-context.js';
|
|
7
|
+
import { ResourceContext } from '../../types/resource-context.js';
|
|
8
8
|
export class TransformAction {
|
|
9
9
|
prompts = new ApiTransformPrompts();
|
|
10
10
|
validatePrompts = new ApiValidatePrompts();
|
|
@@ -19,19 +19,18 @@ export class TransformAction {
|
|
|
19
19
|
}
|
|
20
20
|
execute = async (resourcePath, format, destination, force) => {
|
|
21
21
|
return await withDirPath(async (tempDirectory) => {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.prompts.networkError(specFileDirResult.error);
|
|
22
|
+
const spec = await ResourceContext.resolveTo(resourcePath, tempDirectory);
|
|
23
|
+
if (spec.isErr()) {
|
|
24
|
+
this.validatePrompts.specUnavailable(spec.error);
|
|
26
25
|
return ActionResult.failed();
|
|
27
26
|
}
|
|
28
|
-
const transformContext = new TransformContext(
|
|
27
|
+
const transformContext = new TransformContext(spec.value.file(), format, destination);
|
|
29
28
|
if (!force && (await transformContext.exists()) && !(await this.prompts.overwriteApi(destination))) {
|
|
30
29
|
this.prompts.transformedApiAlreadyExists();
|
|
31
30
|
return ActionResult.cancelled();
|
|
32
31
|
}
|
|
33
32
|
const result = await this.prompts.transformApi(this.transformationService.transformViaFile({
|
|
34
|
-
file:
|
|
33
|
+
file: spec.value.file(),
|
|
35
34
|
format: format,
|
|
36
35
|
configDir: this.configDir,
|
|
37
36
|
commandMetadata: this.commandMetadata,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/actions/api/transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAEhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/actions/api/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,15 @@ import { DirectoryPath } from '../../types/file/directoryPath.js';
|
|
|
2
2
|
import { ActionResult } from '../action-result.js';
|
|
3
3
|
import { CommandMetadata } from '../../types/common/command-metadata.js';
|
|
4
4
|
import { ResourceInput } from '../../types/file/resource-input.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { ResourceContext } from '../../types/resource-context.js';
|
|
6
|
+
/** `unchecked`: the spec never reached the validation service, or the service did not answer, so nothing is known of it. */
|
|
7
|
+
export type ValidateActionFailure = 'invalid' | 'unchecked';
|
|
7
8
|
export declare class ValidateAction {
|
|
8
9
|
private readonly prompts;
|
|
9
10
|
private readonly validationService;
|
|
10
11
|
private readonly authKey;
|
|
11
12
|
private readonly commandMetadata;
|
|
12
13
|
constructor(configDir: DirectoryPath, commandMetadata: CommandMetadata, authKey?: string | null);
|
|
13
|
-
|
|
14
|
-
readonly execute: (resourcePath: ResourceInput, displayValidationSummary?: boolean, onChecked?: (check: SpecCheck) => void) => Promise<ActionResult>;
|
|
15
|
-
private readonly check;
|
|
14
|
+
readonly execute: (spec: ResourceInput | ResourceContext, displayValidationSummary?: boolean) => Promise<ActionResult<void, ValidateActionFailure>>;
|
|
16
15
|
private hasValidationIssues;
|
|
17
16
|
}
|
|
@@ -13,40 +13,38 @@ export class ValidateAction {
|
|
|
13
13
|
this.validationService = new ValidationService(configDir);
|
|
14
14
|
this.commandMetadata = commandMetadata;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return await withDirPath(async (tempDirectory) => {
|
|
24
|
-
const resourceContext = new ResourceContext(tempDirectory);
|
|
25
|
-
const specFileDirResult = await resourceContext.resolveTo(resourcePath);
|
|
26
|
-
if (specFileDirResult.isErr()) {
|
|
27
|
-
this.prompts.networkError(specFileDirResult.error);
|
|
28
|
-
return 'unchecked';
|
|
29
|
-
}
|
|
30
|
-
const validationSummaryResult = await this.prompts.validateApi(this.validationService.validateViaFile({
|
|
31
|
-
file: specFileDirResult.value,
|
|
32
|
-
commandMetadata: this.commandMetadata,
|
|
33
|
-
authKey: this.authKey
|
|
34
|
-
}));
|
|
35
|
-
if (validationSummaryResult.isErr()) {
|
|
36
|
-
this.prompts.logValidationError(validationSummaryResult.error.message);
|
|
37
|
-
return validationSummaryResult.error.kind === 'rejected' ? 'invalid' : 'unchecked';
|
|
38
|
-
}
|
|
39
|
-
const { validation, linting } = validationSummaryResult.value;
|
|
40
|
-
if (displayValidationSummary) {
|
|
41
|
-
if (this.hasValidationIssues(validation)) {
|
|
42
|
-
this.prompts.displayValidationSummary(validation);
|
|
43
|
-
}
|
|
44
|
-
if (this.hasValidationIssues(linting)) {
|
|
45
|
-
this.prompts.displayValidationSummary(linting);
|
|
16
|
+
execute = async (spec, displayValidationSummary = true) => {
|
|
17
|
+
if (!(spec instanceof ResourceContext)) {
|
|
18
|
+
return await withDirPath(async (tempDirectory) => {
|
|
19
|
+
const resolved = await ResourceContext.resolveTo(spec, tempDirectory);
|
|
20
|
+
if (resolved.isErr()) {
|
|
21
|
+
this.prompts.specUnavailable(resolved.error);
|
|
22
|
+
return ActionResult.failed(undefined, 'unchecked');
|
|
46
23
|
}
|
|
24
|
+
return await this.execute(resolved.value, displayValidationSummary);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const validationSummaryResult = await this.prompts.validateApi(this.validationService.validateViaFile({
|
|
28
|
+
file: spec.file(),
|
|
29
|
+
commandMetadata: this.commandMetadata,
|
|
30
|
+
authKey: this.authKey
|
|
31
|
+
}));
|
|
32
|
+
if (validationSummaryResult.isErr()) {
|
|
33
|
+
this.prompts.logValidationError(validationSummaryResult.error.message);
|
|
34
|
+
return ActionResult.failed(undefined, validationSummaryResult.error.kind === 'rejected' ? 'invalid' : 'unchecked');
|
|
35
|
+
}
|
|
36
|
+
const { validation, linting } = validationSummaryResult.value;
|
|
37
|
+
if (displayValidationSummary) {
|
|
38
|
+
if (this.hasValidationIssues(validation)) {
|
|
39
|
+
this.prompts.displayValidationSummary(validation);
|
|
40
|
+
}
|
|
41
|
+
if (this.hasValidationIssues(linting)) {
|
|
42
|
+
this.prompts.displayValidationSummary(linting);
|
|
47
43
|
}
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
}
|
|
45
|
+
return validation.isSuccess && linting.isSuccess
|
|
46
|
+
? ActionResult.success()
|
|
47
|
+
: ActionResult.failed(undefined, 'invalid');
|
|
50
48
|
};
|
|
51
49
|
hasValidationIssues(summary) {
|
|
52
50
|
return (summary.blocking.length > 0 ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/actions/api/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAGxF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE,MAAM,OAAO,cAAc;IACR,OAAO,GAAuB,IAAI,kBAAkB,EAAE,CAAC;IACvD,iBAAiB,CAAoB;IACrC,OAAO,CAAgB;IACvB,eAAe,CAAkB;IAElD,YAAY,SAAwB,EAAE,eAAgC,EAAE,OAAO,GAAkB,IAAI;QACnG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/actions/api/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export class GenerateAction {
|
|
|
28
28
|
const portalContext = new PortalContext(portalDirectory);
|
|
29
29
|
return await new PreparePortalProjectAction(this.configDir, this.commandMetadata, this.authKey).execute(project, {
|
|
30
30
|
confirm: () => this.confirmOverwrite(portalContext, portalDirectory, force),
|
|
31
|
-
onPrepared: (portalProject) => this.build(portalProject, portalContext, portalDirectory, zipPortal)
|
|
31
|
+
onPrepared: (portalProject, source) => this.build(portalProject, source.config.siteAddress(), portalContext, portalDirectory, zipPortal)
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
async confirmOverwrite(portalContext, portalDirectory, force) {
|
|
@@ -38,7 +38,7 @@ export class GenerateAction {
|
|
|
38
38
|
this.prompts.portalDirectoryNotEmpty();
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
|
-
async build(portalProject, portalContext, portalDirectory, zipPortal) {
|
|
41
|
+
async build(portalProject, site, portalContext, portalDirectory, zipPortal) {
|
|
42
42
|
const build = await this.prompts.buildPortal(this.buildService.build(portalProject));
|
|
43
43
|
if (build.isErr()) {
|
|
44
44
|
// Written before the temp directory is removed, so the log outlives the build.
|
|
@@ -51,7 +51,7 @@ export class GenerateAction {
|
|
|
51
51
|
return ActionResult.failed();
|
|
52
52
|
}
|
|
53
53
|
this.prompts.portalGenerated(portalDirectory);
|
|
54
|
-
this.prompts.nextSteps(portalDirectory, zipPortal);
|
|
54
|
+
this.prompts.nextSteps(portalDirectory, zipPortal, site);
|
|
55
55
|
return ActionResult.success();
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/actions/portal/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/actions/portal/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,9 @@ export class PreparePortalProjectAction {
|
|
|
38
38
|
}
|
|
39
39
|
this.prompts.filesShadowedByStatic(source.value.shadowedFiles);
|
|
40
40
|
this.prompts.contentNotices(source.value.contentNotices, sourceDirectory);
|
|
41
|
+
this.prompts.unmergedSpecs(source.value.unmergedSpecs, sourceDirectory);
|
|
42
|
+
this.prompts.leftOutSpecs(source.value.leftOutSpecs, sourceDirectory);
|
|
43
|
+
this.prompts.sharedEndpoints(source.value.sharedEndpoints, sourceDirectory);
|
|
41
44
|
if (!(await confirm())) {
|
|
42
45
|
return ActionResult.cancelled();
|
|
43
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-project.js","sourceRoot":"","sources":["../../../src/actions/portal/prepare-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,+DAA+D,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAMtF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAanD,MAAM,OAAO,0BAA0B;IAOlB,SAAS;IACT,eAAe;IACf,OAAO;IART,OAAO,GAAgC,IAAI,2BAA2B,EAAE,CAAC;IACzE,cAAc,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC5C,oBAAoB,GAAG,IAAI,0BAA0B,EAAE,CAAC;IACxD,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAEjE,YACmB,SAAwB,EACxB,eAAgC,EAChC,OAAO,GAAkB,IAAI;yBAF7B,SAAS;+BACT,eAAe;uBACf,OAAO;IACvB,CAAC;IAEJ,oHAAoH;IACpG,OAAO,GAAG,KAAK,EAC7B,OAAuB,EACvB,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAoB,EACrC,EAAE;QACzB,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAElD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QAC5D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAChD,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAC7D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CAAC,KAAK,EAC1B,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtD,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,kGAAkG;QAClG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAC1D,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare-project.js","sourceRoot":"","sources":["../../../src/actions/portal/prepare-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { CommandMetadata } from '../types/common/command-metadata.js';
|
|
|
4
4
|
export declare class QuickstartAction {
|
|
5
5
|
private readonly prompts;
|
|
6
6
|
private readonly fileService;
|
|
7
|
-
private readonly fileDownloadService;
|
|
8
7
|
private readonly authorizationService;
|
|
9
8
|
private readonly projectService;
|
|
10
9
|
private readonly configDir;
|
|
@@ -12,17 +11,10 @@ export declare class QuickstartAction {
|
|
|
12
11
|
private readonly defaultSpecUrl;
|
|
13
12
|
constructor(configDir: DirectoryPath, commandMetadata: CommandMetadata);
|
|
14
13
|
readonly execute: (workingDirectory: DirectoryPath) => Promise<ActionResult>;
|
|
15
|
-
private runWizard;
|
|
16
14
|
private adoptProject;
|
|
17
15
|
private startProject;
|
|
18
16
|
private completeProject;
|
|
19
|
-
private
|
|
20
|
-
/**
|
|
21
|
-
* `adopted` decides what a failure offers. The sample can replace a specification the user
|
|
22
|
-
* named, but not one their project carries: an adopted `spec/` already holds the document the
|
|
23
|
-
* portal would be built from, and nothing here moves the sample into it.
|
|
24
|
-
*/
|
|
25
|
-
private validate;
|
|
17
|
+
private validationFailure;
|
|
26
18
|
private chooseProjectDirectory;
|
|
27
19
|
private specFormat;
|
|
28
20
|
}
|