@apimatic/cli 1.1.0-beta.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -13
- package/lib/actions/portal/copilot.d.ts +1 -0
- package/lib/actions/portal/copilot.js +12 -12
- package/lib/actions/portal/copilot.js.map +1 -1
- package/lib/actions/portal/generate.js +7 -1
- package/lib/actions/portal/generate.js.map +1 -1
- package/lib/actions/portal/quickstart.d.ts +1 -0
- package/lib/actions/portal/quickstart.js +40 -6
- package/lib/actions/portal/quickstart.js.map +1 -1
- package/lib/actions/portal/serve.d.ts +1 -0
- package/lib/actions/portal/serve.js +77 -20
- package/lib/actions/portal/serve.js.map +1 -1
- package/lib/actions/portal/toc/new-toc.js +8 -20
- package/lib/actions/portal/toc/new-toc.js.map +1 -1
- package/lib/actions/publishing/profile/list.d.ts +11 -0
- package/lib/actions/publishing/profile/list.js +29 -0
- package/lib/actions/publishing/profile/list.js.map +1 -0
- package/lib/actions/sdk/generate.d.ts +9 -5
- package/lib/actions/sdk/generate.js +76 -30
- package/lib/actions/sdk/generate.js.map +1 -1
- package/lib/actions/sdk/merge-source-tree.d.ts +12 -0
- package/lib/actions/sdk/merge-source-tree.js +78 -0
- package/lib/actions/sdk/merge-source-tree.js.map +1 -0
- package/lib/actions/sdk/publish/interactive.d.ts +13 -0
- package/lib/actions/sdk/publish/interactive.js +105 -0
- package/lib/actions/sdk/publish/interactive.js.map +1 -0
- package/lib/actions/sdk/publish/non-interactive.d.ts +14 -0
- package/lib/actions/sdk/publish/non-interactive.js +101 -0
- package/lib/actions/sdk/publish/non-interactive.js.map +1 -0
- package/lib/actions/sdk/publish.d.ts +18 -0
- package/lib/actions/sdk/publish.js +56 -0
- package/lib/actions/sdk/publish.js.map +1 -0
- package/lib/actions/sdk/quickstart.js +2 -1
- package/lib/actions/sdk/quickstart.js.map +1 -1
- package/lib/actions/sdk/save-changes.d.ts +8 -0
- package/lib/actions/sdk/save-changes.js +93 -0
- package/lib/actions/sdk/save-changes.js.map +1 -0
- package/lib/application/portal/recipe/recipe-generator.js +14 -29
- package/lib/application/portal/recipe/recipe-generator.js.map +1 -1
- package/lib/application/portal/toc/toc-structure-generator.d.ts +3 -19
- package/lib/application/portal/toc/toc-structure-generator.js +43 -33
- package/lib/application/portal/toc/toc-structure-generator.js.map +1 -1
- package/lib/commands/portal/recipe/new.js +2 -2
- package/lib/commands/portal/recipe/new.js.map +1 -1
- package/lib/commands/portal/serve.js +3 -3
- package/lib/commands/portal/serve.js.map +1 -1
- package/lib/commands/portal/toc/new.js +2 -2
- package/lib/commands/portal/toc/new.js.map +1 -1
- package/lib/commands/publishing/profile/list.d.ts +9 -0
- package/lib/commands/publishing/profile/list.js +28 -0
- package/lib/commands/publishing/profile/list.js.map +1 -0
- package/lib/commands/quickstart.js +1 -1
- package/lib/commands/quickstart.js.map +1 -1
- package/lib/commands/sdk/generate.d.ts +7 -2
- package/lib/commands/sdk/generate.js +37 -9
- package/lib/commands/sdk/generate.js.map +1 -1
- package/lib/commands/sdk/publish.d.ts +18 -0
- package/lib/commands/sdk/publish.js +73 -0
- package/lib/commands/sdk/publish.js.map +1 -0
- package/lib/commands/sdk/save-changes.d.ts +14 -0
- package/lib/commands/sdk/save-changes.js +51 -0
- package/lib/commands/sdk/save-changes.js.map +1 -0
- package/lib/hooks/not-found.js +1 -1
- package/lib/hooks/not-found.js.map +1 -1
- package/lib/infrastructure/debounce-service.js +3 -0
- package/lib/infrastructure/debounce-service.js.map +1 -1
- package/lib/infrastructure/env-info.d.ts +2 -0
- package/lib/infrastructure/env-info.js +23 -12
- package/lib/infrastructure/env-info.js.map +1 -1
- package/lib/infrastructure/file-service.d.ts +9 -0
- package/lib/infrastructure/file-service.js +94 -5
- package/lib/infrastructure/file-service.js.map +1 -1
- package/lib/infrastructure/git-service.d.ts +14 -0
- package/lib/infrastructure/git-service.js +90 -0
- package/lib/infrastructure/git-service.js.map +1 -0
- package/lib/infrastructure/launcher-service.d.ts +5 -0
- package/lib/infrastructure/launcher-service.js +35 -2
- package/lib/infrastructure/launcher-service.js.map +1 -1
- package/lib/infrastructure/os-extensions.d.ts +2 -0
- package/lib/infrastructure/os-extensions.js +6 -0
- package/lib/infrastructure/os-extensions.js.map +1 -0
- package/lib/infrastructure/service-error.d.ts +14 -2
- package/lib/infrastructure/service-error.js +26 -9
- package/lib/infrastructure/service-error.js.map +1 -1
- package/lib/infrastructure/services/api-service.d.ts +1 -0
- package/lib/infrastructure/services/api-service.js +26 -2
- package/lib/infrastructure/services/api-service.js.map +1 -1
- package/lib/infrastructure/services/portal-service.d.ts +11 -2
- package/lib/infrastructure/services/portal-service.js +123 -18
- package/lib/infrastructure/services/portal-service.js.map +1 -1
- package/lib/infrastructure/services/publishing-api-service.d.ts +19 -0
- package/lib/infrastructure/services/publishing-api-service.js +111 -0
- package/lib/infrastructure/services/publishing-api-service.js.map +1 -0
- package/lib/infrastructure/services/validation-service.js.map +1 -1
- package/lib/infrastructure/zip-service.d.ts +2 -2
- package/lib/infrastructure/zip-service.js +46 -25
- package/lib/infrastructure/zip-service.js.map +1 -1
- package/lib/prompts/format.d.ts +0 -2
- package/lib/prompts/format.js +0 -31
- package/lib/prompts/format.js.map +1 -1
- package/lib/prompts/portal/generate.d.ts +1 -1
- package/lib/prompts/portal/generate.js +9 -3
- package/lib/prompts/portal/generate.js.map +1 -1
- package/lib/prompts/portal/quickstart.d.ts +4 -0
- package/lib/prompts/portal/quickstart.js +22 -0
- package/lib/prompts/portal/quickstart.js.map +1 -1
- package/lib/prompts/portal/serve.d.ts +4 -0
- package/lib/prompts/portal/serve.js +20 -1
- package/lib/prompts/portal/serve.js.map +1 -1
- package/lib/prompts/portal/toc/new-toc.d.ts +2 -2
- package/lib/prompts/portal/toc/new-toc.js +3 -3
- package/lib/prompts/portal/toc/new-toc.js.map +1 -1
- package/lib/prompts/prompt.d.ts +6 -0
- package/lib/prompts/prompt.js +45 -0
- package/lib/prompts/prompt.js.map +1 -1
- package/lib/prompts/publishing/profile/list.d.ts +9 -0
- package/lib/prompts/publishing/profile/list.js +27 -0
- package/lib/prompts/publishing/profile/list.js.map +1 -0
- package/lib/prompts/sdk/generate.d.ts +9 -4
- package/lib/prompts/sdk/generate.js +37 -15
- package/lib/prompts/sdk/generate.js.map +1 -1
- package/lib/prompts/sdk/merge-source-tree.d.ts +22 -0
- package/lib/prompts/sdk/merge-source-tree.js +90 -0
- package/lib/prompts/sdk/merge-source-tree.js.map +1 -0
- package/lib/prompts/sdk/publish/interactive.d.ts +30 -0
- package/lib/prompts/sdk/publish/interactive.js +139 -0
- package/lib/prompts/sdk/publish/interactive.js.map +1 -0
- package/lib/prompts/sdk/publish/non-interactive.d.ts +27 -0
- package/lib/prompts/sdk/publish/non-interactive.js +97 -0
- package/lib/prompts/sdk/publish/non-interactive.js.map +1 -0
- package/lib/prompts/sdk/publish.d.ts +12 -0
- package/lib/prompts/sdk/publish.js +16 -0
- package/lib/prompts/sdk/publish.js.map +1 -0
- package/lib/prompts/sdk/save-changes.d.ts +21 -0
- package/lib/prompts/sdk/save-changes.js +84 -0
- package/lib/prompts/sdk/save-changes.js.map +1 -0
- package/lib/types/build/build.d.ts +81 -2
- package/lib/types/build/build.js +158 -0
- package/lib/types/build/build.js.map +1 -1
- package/lib/types/build-context.d.ts +12 -1
- package/lib/types/build-context.js +78 -4
- package/lib/types/build-context.js.map +1 -1
- package/lib/types/events/sdk-changes-saved.d.ts +8 -0
- package/lib/types/events/sdk-changes-saved.js +11 -0
- package/lib/types/events/sdk-changes-saved.js.map +1 -0
- package/lib/types/events/sdk-changes-tracked.d.ts +8 -0
- package/lib/types/events/sdk-changes-tracked.js +11 -0
- package/lib/types/events/sdk-changes-tracked.js.map +1 -0
- package/lib/types/events/sdk-conflicts-resolved.d.ts +8 -0
- package/lib/types/events/sdk-conflicts-resolved.js +11 -0
- package/lib/types/events/sdk-conflicts-resolved.js.map +1 -0
- package/lib/types/events/sdk-publish-validation-failed.d.ts +5 -0
- package/lib/types/events/sdk-publish-validation-failed.js +8 -0
- package/lib/types/events/sdk-publish-validation-failed.js.map +1 -0
- package/lib/types/file/directory.d.ts +10 -1
- package/lib/types/file/directory.js +63 -5
- package/lib/types/file/directory.js.map +1 -1
- package/lib/types/file/directoryPath.js.map +1 -1
- package/lib/types/file/urlPath.d.ts +4 -0
- package/lib/types/file/urlPath.js +9 -0
- package/lib/types/file/urlPath.js.map +1 -1
- package/lib/types/merge-source-tree-context.d.ts +28 -0
- package/lib/types/merge-source-tree-context.js +63 -0
- package/lib/types/merge-source-tree-context.js.map +1 -0
- package/lib/types/package-settings-context.d.ts +10 -0
- package/lib/types/package-settings-context.js +20 -0
- package/lib/types/package-settings-context.js.map +1 -0
- package/lib/types/publish/package-settings-configuration.d.ts +74 -0
- package/lib/types/publish/package-settings-configuration.js +2 -0
- package/lib/types/publish/package-settings-configuration.js.map +1 -0
- package/lib/types/publish/profile-id.d.ts +10 -0
- package/lib/types/publish/profile-id.js +22 -0
- package/lib/types/publish/profile-id.js.map +1 -0
- package/lib/types/publish/publishing-profile.d.ts +26 -0
- package/lib/types/publish/publishing-profile.js +154 -0
- package/lib/types/publish/publishing-profile.js.map +1 -0
- package/lib/types/publish/publishing-profiles.d.ts +12 -0
- package/lib/types/publish/publishing-profiles.js +36 -0
- package/lib/types/publish/publishing-profiles.js.map +1 -0
- package/lib/types/publish/version.d.ts +7 -0
- package/lib/types/publish/version.js +17 -0
- package/lib/types/publish/version.js.map +1 -0
- package/lib/types/publish-api/publish-log.d.ts +20 -0
- package/lib/types/publish-api/publish-log.js +2 -0
- package/lib/types/publish-api/publish-log.js.map +1 -0
- package/lib/types/publish-api/publishing-info.d.ts +4 -0
- package/lib/types/publish-api/publishing-info.js +2 -0
- package/lib/types/publish-api/publishing-info.js.map +1 -0
- package/lib/types/publish-api/publishing-profile-item.d.ts +190 -0
- package/lib/types/publish-api/publishing-profile-item.js +6 -0
- package/lib/types/publish-api/publishing-profile-item.js.map +1 -0
- package/lib/types/save-changes-context.d.ts +17 -0
- package/lib/types/save-changes-context.js +42 -0
- package/lib/types/save-changes-context.js.map +1 -0
- package/lib/types/sdk/generate.d.ts +8 -0
- package/lib/types/sdk/generate.js +10 -0
- package/lib/types/sdk/generate.js.map +1 -1
- package/lib/types/sdk-context.d.ts +5 -4
- package/lib/types/sdk-context.js +26 -13
- package/lib/types/sdk-context.js.map +1 -1
- package/lib/types/sdl/sdl.d.ts +0 -28
- package/lib/types/sdl/sdl.js +1 -128
- package/lib/types/sdl/sdl.js.map +1 -1
- package/lib/types/spec-context.js.map +1 -1
- package/lib/types/temp-context.js.map +1 -1
- package/lib/types/toc/toc-components.d.ts +37 -0
- package/lib/types/toc/toc-components.js +97 -0
- package/lib/types/toc/toc-components.js.map +1 -0
- package/lib/types/toc/toc.d.ts +11 -0
- package/lib/utils/string-utils.d.ts +0 -1
- package/lib/utils/string-utils.js +0 -42
- package/lib/utils/string-utils.js.map +1 -1
- package/package.json +28 -20
- package/lib/types/versioned-build-context.d.ts +0 -9
- package/lib/types/versioned-build-context.js +0 -21
- package/lib/types/versioned-build-context.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
@apimatic/cli
|
|
2
2
|
=============
|
|
3
|
-
apimatic is in beta.
|
|
4
3
|
|
|
5
4
|
The official CLI for APIMatic.
|
|
6
5
|
|
|
@@ -24,7 +23,7 @@ $ npm install -g @apimatic/cli
|
|
|
24
23
|
$ apimatic COMMAND
|
|
25
24
|
running command...
|
|
26
25
|
$ apimatic (--version)
|
|
27
|
-
@apimatic/cli/1.1.0-beta.
|
|
26
|
+
@apimatic/cli/1.1.0-beta.16 win32-x64 node-v23.4.0
|
|
28
27
|
$ apimatic --help [COMMAND]
|
|
29
28
|
USAGE
|
|
30
29
|
$ apimatic COMMAND
|
|
@@ -46,8 +45,11 @@ USAGE
|
|
|
46
45
|
* [`apimatic portal recipe new`](#apimatic-portal-recipe-new)
|
|
47
46
|
* [`apimatic portal serve`](#apimatic-portal-serve)
|
|
48
47
|
* [`apimatic portal toc new`](#apimatic-portal-toc-new)
|
|
48
|
+
* [`apimatic publishing profile list`](#apimatic-publishing-profile-list)
|
|
49
49
|
* [`apimatic quickstart`](#apimatic-quickstart)
|
|
50
50
|
* [`apimatic sdk generate`](#apimatic-sdk-generate)
|
|
51
|
+
* [`apimatic sdk publish`](#apimatic-sdk-publish)
|
|
52
|
+
* [`apimatic sdk save-changes`](#apimatic-sdk-save-changes)
|
|
51
53
|
|
|
52
54
|
## `apimatic api transform`
|
|
53
55
|
|
|
@@ -386,6 +388,25 @@ EXAMPLES
|
|
|
386
388
|
|
|
387
389
|
_See code: [src/commands/portal/toc/new.ts](https://github.com/apimatic/apimatic-cli/blob/beta/src/commands/portal/toc/new.ts)_
|
|
388
390
|
|
|
391
|
+
## `apimatic publishing profile list`
|
|
392
|
+
|
|
393
|
+
List all publishing profiles
|
|
394
|
+
|
|
395
|
+
```
|
|
396
|
+
USAGE
|
|
397
|
+
$ apimatic publishing profile list
|
|
398
|
+
|
|
399
|
+
DESCRIPTION
|
|
400
|
+
List all publishing profiles
|
|
401
|
+
|
|
402
|
+
Display all publishing profiles associated with your account, including each profile's name, ID and enabled languages.
|
|
403
|
+
|
|
404
|
+
EXAMPLES
|
|
405
|
+
apimatic publishing profile list
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
_See code: [src/commands/publishing/profile/list.ts](https://github.com/apimatic/apimatic-cli/blob/beta/src/commands/publishing/profile/list.ts)_
|
|
409
|
+
|
|
389
410
|
## `apimatic quickstart`
|
|
390
411
|
|
|
391
412
|
Create your first SDK or API Portal using APIMatic.
|
|
@@ -411,18 +432,27 @@ Generate an SDK for your API
|
|
|
411
432
|
|
|
412
433
|
```
|
|
413
434
|
USAGE
|
|
414
|
-
$ apimatic sdk generate -l csharp|java|php|python|ruby|typescript|go [-
|
|
415
|
-
<value>]
|
|
435
|
+
$ apimatic sdk generate -l csharp|java|php|python|ruby|typescript|go [-d <value>] [--skip-changes]
|
|
436
|
+
[--api-version <value>] [--zip] [--track-changes] [--codegen-version v3|v4] [--stability stable|beta] [-i <value>]
|
|
437
|
+
[-f] [-k <value>]
|
|
416
438
|
|
|
417
439
|
FLAGS
|
|
418
|
-
-d, --destination=<value>
|
|
419
|
-
|
|
420
|
-
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
-
|
|
424
|
-
|
|
425
|
-
|
|
440
|
+
-d, --destination=<value> [default: <input>/sdk/<language> | <input>/sdk/<api-version>/<language>] path where
|
|
441
|
+
the SDK will be generated
|
|
442
|
+
-f, --force overwrite changes without asking for user consent.
|
|
443
|
+
-i, --input=<value> [default: ./] path to the parent directory containing the 'src' directory, which
|
|
444
|
+
includes API specifications and configuration files.
|
|
445
|
+
-k, --auth-key=<value> override current authentication state with an authentication key.
|
|
446
|
+
-l, --language=<option> (required) Programming language for SDK generation
|
|
447
|
+
<options: csharp|java|php|python|ruby|typescript|go>
|
|
448
|
+
--api-version=<value> Version of the API to use for SDK generation (if multiple versions exist)
|
|
449
|
+
--codegen-version=<option> [default: v3] Version of the code generator to use
|
|
450
|
+
<options: v3|v4>
|
|
451
|
+
--skip-changes Do not apply the saved changes to the generated SDK
|
|
452
|
+
--stability=<option> [default: stable] Stability level of the generated SDK
|
|
453
|
+
<options: stable|beta>
|
|
454
|
+
--track-changes Enable change tracking for SDK generation (only required for initial setup)
|
|
455
|
+
--zip Download the generated SDK as a .zip archive
|
|
426
456
|
|
|
427
457
|
DESCRIPTION
|
|
428
458
|
Generate an SDK for your API
|
|
@@ -439,4 +469,78 @@ EXAMPLES
|
|
|
439
469
|
```
|
|
440
470
|
|
|
441
471
|
_See code: [src/commands/sdk/generate.ts](https://github.com/apimatic/apimatic-cli/blob/beta/src/commands/sdk/generate.ts)_
|
|
442
|
-
|
|
472
|
+
|
|
473
|
+
## `apimatic sdk publish`
|
|
474
|
+
|
|
475
|
+
Generate and publish an SDK to a package registry and/or source repository
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
USAGE
|
|
479
|
+
$ apimatic sdk publish [-p <value>] [-v <value>] [-d <value>] [-l csharp|java|php|python|ruby|typescript] [-f]
|
|
480
|
+
[-i <value>] [--publish-type package|sourcecode...] [--dry-run]
|
|
481
|
+
|
|
482
|
+
FLAGS
|
|
483
|
+
-d, --destination=<value> [default: <input>/sdk] path where the sdk will be generated.
|
|
484
|
+
-f, --force overwrite changes without asking for user consent.
|
|
485
|
+
-i, --input=<value> [default: ./] path to the parent directory containing the 'src' directory, which
|
|
486
|
+
includes API specifications and configuration files.
|
|
487
|
+
-l, --language=<option> Language of the SDK to generate and publish.
|
|
488
|
+
<options: csharp|java|php|python|ruby|typescript>
|
|
489
|
+
-p, --profile-id=<value> Id of the publishing profile to use.
|
|
490
|
+
-v, --version=<value> Semantic version of the SDK to publish (e.g. 1.0.0).
|
|
491
|
+
--dry-run Generate the SDK locally for review without publishing.
|
|
492
|
+
--publish-type=<option>... One or more publishing targets: 'package' for a package registry, 'sourcecode' for a
|
|
493
|
+
git repository.
|
|
494
|
+
<options: package|sourcecode>
|
|
495
|
+
|
|
496
|
+
DESCRIPTION
|
|
497
|
+
Generate and publish an SDK to a package registry and/or source repository
|
|
498
|
+
|
|
499
|
+
Generate and publish an SDK using a publishing profile configured in the APIMatic App. Requires an input directory
|
|
500
|
+
containing the API specification. Run without flags for a step-by-step interactive experience, or pass all required
|
|
501
|
+
flags for CI/CD automation.
|
|
502
|
+
|
|
503
|
+
EXAMPLES
|
|
504
|
+
apimatic sdk publish
|
|
505
|
+
|
|
506
|
+
apimatic sdk publish --profile-id=a1b2c3d4e5f6a1b2c3d4e5f6 --language=typescript --version=1.0.0 --publish-type=package --publish-type=sourcecode
|
|
507
|
+
|
|
508
|
+
apimatic sdk publish --profile-id=b2c3d4e5f6a1b2c3d4e5f6a1 --language=java --version=2.0.0 --publish-type=sourcecode
|
|
509
|
+
|
|
510
|
+
apimatic sdk publish --profile-id=c3d4e5f6a1b2c3d4e5f6a1b2 --language=python --version=1.0.0 --publish-type=package --dry-run
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
_See code: [src/commands/sdk/publish.ts](https://github.com/apimatic/apimatic-cli/blob/beta/src/commands/sdk/publish.ts)_
|
|
514
|
+
|
|
515
|
+
## `apimatic sdk save-changes`
|
|
516
|
+
|
|
517
|
+
Save customizations made to an auto-generated SDK
|
|
518
|
+
|
|
519
|
+
```
|
|
520
|
+
USAGE
|
|
521
|
+
$ apimatic sdk save-changes -l csharp|java|php|python|ruby|typescript|go [--sdk <value>] [--api-version <value>] [-i
|
|
522
|
+
<value>]
|
|
523
|
+
|
|
524
|
+
FLAGS
|
|
525
|
+
-i, --input=<value> [default: ./] path to the parent directory containing the 'src' directory, which includes
|
|
526
|
+
API specifications and configuration files.
|
|
527
|
+
-l, --language=<option> (required) Programming language of the SDK
|
|
528
|
+
<options: csharp|java|php|python|ruby|typescript|go>
|
|
529
|
+
--api-version=<value> Version of the API where changes should be saved (if multiple versions exist).
|
|
530
|
+
--sdk=<value> [default: ./sdk/<language> | ./sdk/<api-version>/<language>] path to the folder containing
|
|
531
|
+
the updated SDK.
|
|
532
|
+
|
|
533
|
+
DESCRIPTION
|
|
534
|
+
Save customizations made to an auto-generated SDK
|
|
535
|
+
|
|
536
|
+
Requires an input directory with API specifications, a path to the updated SDK directory, and the programming
|
|
537
|
+
language.
|
|
538
|
+
|
|
539
|
+
EXAMPLES
|
|
540
|
+
apimatic sdk save-changes --language=csharp
|
|
541
|
+
|
|
542
|
+
apimatic sdk save-changes --language=java --sdk=./sdk
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
_See code: [src/commands/sdk/save-changes.ts](https://github.com/apimatic/apimatic-cli/blob/beta/src/commands/sdk/save-changes.ts)_
|
|
546
|
+
<!-- commandsstop -->
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
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
|
+
export declare const DEFAULT_COPILOT_WELCOME_MESSAGE: string;
|
|
4
5
|
export declare class CopilotAction {
|
|
5
6
|
private readonly apiService;
|
|
6
7
|
private readonly fileService;
|
|
@@ -8,6 +8,12 @@ import { FileName } from "../../types/file/fileName.js";
|
|
|
8
8
|
import { FileService } from "../../infrastructure/file-service.js";
|
|
9
9
|
import { LauncherService } from "../../infrastructure/launcher-service.js";
|
|
10
10
|
import { err, ok } from "neverthrow";
|
|
11
|
+
export const DEFAULT_COPILOT_WELCOME_MESSAGE = "Hi there! I'm your API Integration Assistant, here to help you learn and integrate with this API.\n" +
|
|
12
|
+
"\n" +
|
|
13
|
+
"Ask me anything about this API or try one of these example prompts:\n" +
|
|
14
|
+
"\n" +
|
|
15
|
+
"- `What authentication methods does this API support?`\n" +
|
|
16
|
+
"- `What endpoints are available in this API?`\n";
|
|
11
17
|
export class CopilotAction {
|
|
12
18
|
constructor(configDir, commandMetadata, authKey = null) {
|
|
13
19
|
this.apiService = new ApiService();
|
|
@@ -20,8 +26,8 @@ export class CopilotAction {
|
|
|
20
26
|
this.prompts.srcDirectoryEmpty(buildDirectory);
|
|
21
27
|
return ActionResult.failed();
|
|
22
28
|
}
|
|
23
|
-
const
|
|
24
|
-
if (!force &&
|
|
29
|
+
const buildConfig = await buildContext.getBuildFileContents();
|
|
30
|
+
if (!force && buildConfig.hasApiCopilot() && !(await this.prompts.confirmOverwrite())) {
|
|
25
31
|
this.prompts.cancelled();
|
|
26
32
|
return ActionResult.cancelled();
|
|
27
33
|
}
|
|
@@ -37,12 +43,12 @@ export class CopilotAction {
|
|
|
37
43
|
return ActionResult.failed();
|
|
38
44
|
}
|
|
39
45
|
const welcomeMessage = await this.prepareWelcomeMessage();
|
|
40
|
-
|
|
46
|
+
const updatedBuildConfig = buildConfig.withApiCopilotConfig({
|
|
41
47
|
isEnabled: enable,
|
|
42
48
|
key: apiCopilotKeyResult.value,
|
|
43
49
|
welcomeMessage: welcomeMessage
|
|
44
|
-
};
|
|
45
|
-
await buildContext.updateBuildFileContents(
|
|
50
|
+
});
|
|
51
|
+
await buildContext.updateBuildFileContents(updatedBuildConfig);
|
|
46
52
|
this.prompts.copilotConfigured(enable, apiCopilotKeyResult.value);
|
|
47
53
|
return ActionResult.success();
|
|
48
54
|
};
|
|
@@ -72,13 +78,7 @@ export class CopilotAction {
|
|
|
72
78
|
async prepareWelcomeMessage() {
|
|
73
79
|
return await withDirPath(async (tempDir) => {
|
|
74
80
|
const tempFile = new FilePath(tempDir, new FileName("welcome-message.md"));
|
|
75
|
-
|
|
76
|
-
"\n" +
|
|
77
|
-
"Ask me anything about this API or try one of these example prompts:\n" +
|
|
78
|
-
"\n" +
|
|
79
|
-
"- `What authentication methods does this API support?`\n" +
|
|
80
|
-
"- `[Enter another prompt here]`";
|
|
81
|
-
await this.fileService.writeContents(tempFile, defaultContent);
|
|
81
|
+
await this.fileService.writeContents(tempFile, DEFAULT_COPILOT_WELCOME_MESSAGE);
|
|
82
82
|
this.prompts.openWelcomeMessageEditor();
|
|
83
83
|
await this.launcherService.openInEditor(tempFile);
|
|
84
84
|
const welcomeMessage = await this.fileService.getContents(tempFile);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/actions/portal/copilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAU,MAAM,YAAY,CAAC;AAK7C,MAAM,OAAO,aAAa;IASxB,YAAY,SAAwB,EAAE,eAAgC,EAAE,UAAyB,IAAI;QARpF,eAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,gBAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,oBAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,YAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAWtC,YAAO,GAAG,KAAK,EAC7B,cAA6B,EAC7B,KAAc,EACd,MAAe,EACQ,EAAE;YACzB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;YAEtD,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;gBAC/C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/actions/portal/copilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,13 @@ export class GenerateAction {
|
|
|
34
34
|
if (response.isErr()) {
|
|
35
35
|
const error = response.error;
|
|
36
36
|
if (error instanceof ServiceError) {
|
|
37
|
-
|
|
37
|
+
const sdkMergeFailedErrors = error.getError("sdkMergeFailed");
|
|
38
|
+
if (sdkMergeFailedErrors) {
|
|
39
|
+
this.prompts.portalGenerationSdkMergeFailed(sdkMergeFailedErrors);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.prompts.portalGenerationError(error.errorMessage);
|
|
43
|
+
}
|
|
38
44
|
}
|
|
39
45
|
else if (typeof error === "string") {
|
|
40
46
|
this.prompts.portalGenerationError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/actions/portal/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,MAAM,OAAO,cAAc;IAQzB,YAAY,SAAwB,EAAE,eAAgC,EAAE,UAAyB,IAAI;QAPpF,YAAO,GAA0B,IAAI,qBAAqB,EAAE,CAAC;QAC7D,oBAAe,GAAoB,IAAI,eAAe,EAAE,CAAC;QACzD,kBAAa,GAAkB,IAAI,aAAa,EAAE,CAAC;QAWpD,YAAO,GAAG,KAAK,EAC7B,cAA6B,EAC7B,eAA8B,EAC9B,KAAc,EACd,SAAkB,EAClB,kBAA2B,IAAI,EACR,EAAE;YACzB,IAAI,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;gBACpD,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;gBAC/C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;gBACvG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;gBACvC,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC;YAClC,CAAC;YAED,OAAO,MAAM,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;gBAC/C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAChD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CACpG,CAAC;gBAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC7B,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;wBAClC,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/actions/portal/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class PortalQuickstartAction {
|
|
|
8
8
|
private readonly configDir;
|
|
9
9
|
private readonly commandMetadata;
|
|
10
10
|
private readonly fileDownloadService;
|
|
11
|
+
private readonly apiService;
|
|
11
12
|
private readonly buildFileUrl;
|
|
12
13
|
private readonly defaultSpecUrl;
|
|
13
14
|
private readonly repositoryFolderName;
|
|
@@ -11,17 +11,20 @@ import { ValidateAction } from '../api/validate.js';
|
|
|
11
11
|
import { BuildContext } from '../../types/build-context.js';
|
|
12
12
|
import { TempContext } from '../../types/temp-context.js';
|
|
13
13
|
import { FileDownloadService } from '../../infrastructure/services/file-download-service.js';
|
|
14
|
-
import { getLanguagesConfig } from '../../types/build/build.js';
|
|
15
14
|
import { SpecContext } from '../../types/spec-context.js';
|
|
16
15
|
import { ValidationService } from '../../infrastructure/services/validation-service.js';
|
|
17
16
|
import { FileName } from '../../types/file/fileName.js';
|
|
18
|
-
|
|
17
|
+
import { ApiService } from '../../infrastructure/services/api-service.js';
|
|
18
|
+
import { DEFAULT_COPILOT_WELCOME_MESSAGE } from './copilot.js';
|
|
19
|
+
const defaultPort = 23513;
|
|
20
|
+
const defaultBaseUrl = new UrlPath(`http://localhost:${defaultPort}`);
|
|
19
21
|
export class PortalQuickstartAction {
|
|
20
22
|
constructor(configDir, commandMetadata) {
|
|
21
23
|
this.prompts = new PortalQuickstartPrompts();
|
|
22
24
|
this.zipService = new ZipService();
|
|
23
25
|
this.fileService = new FileService();
|
|
24
26
|
this.fileDownloadService = new FileDownloadService();
|
|
27
|
+
this.apiService = new ApiService();
|
|
25
28
|
this.buildFileUrl = new UrlPath(`https://github.com/apimatic/sample-docs-as-code-portal/archive/refs/heads/master.zip`);
|
|
26
29
|
this.defaultSpecUrl = new UrlPath(`https://raw.githubusercontent.com/apimatic/sample-docs-as-code-portal/refs/heads/master/src/spec/openapi.json`);
|
|
27
30
|
this.repositoryFolderName = 'sample-docs-as-code-portal-master/src';
|
|
@@ -34,7 +37,7 @@ export class PortalQuickstartAction {
|
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
return await withDirPath(async (tempDirectory) => {
|
|
37
|
-
var _a;
|
|
40
|
+
var _a, _b;
|
|
38
41
|
// Step 1/4
|
|
39
42
|
this.prompts.importSpecStep();
|
|
40
43
|
let specPath;
|
|
@@ -129,6 +132,30 @@ export class PortalQuickstartAction {
|
|
|
129
132
|
}
|
|
130
133
|
break;
|
|
131
134
|
}
|
|
135
|
+
// Resolve the API Copilot key to enable, if any, before setting up the source
|
|
136
|
+
// directory so the user decides on Copilot up front. The lookup failing is fatal;
|
|
137
|
+
// an account with no key continues silently (no Copilot); cancelling the multi-key
|
|
138
|
+
// selection aborts quickstart.
|
|
139
|
+
const accountInfo = await this.apiService.getAccountInfo(this.configDir, this.commandMetadata.shell, null);
|
|
140
|
+
if (accountInfo.isErr()) {
|
|
141
|
+
this.prompts.accountInfoFetchFailed(accountInfo.error);
|
|
142
|
+
return ActionResult.failed();
|
|
143
|
+
}
|
|
144
|
+
let copilotKey;
|
|
145
|
+
const copilotKeys = (_b = accountInfo.value.ApiCopilotKeys) !== null && _b !== void 0 ? _b : [];
|
|
146
|
+
if (copilotKeys.length === 1) {
|
|
147
|
+
copilotKey = copilotKeys[0];
|
|
148
|
+
}
|
|
149
|
+
else if (copilotKeys.length > 1) {
|
|
150
|
+
copilotKey = await this.prompts.selectCopilotKey(copilotKeys);
|
|
151
|
+
if (!copilotKey) {
|
|
152
|
+
this.prompts.noCopilotKeySelected();
|
|
153
|
+
return ActionResult.cancelled();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (copilotKey) {
|
|
157
|
+
this.prompts.copilotEnabled(copilotKey);
|
|
158
|
+
}
|
|
132
159
|
const masterBuildFile = await this.prompts.downloadBuildDirectory(this.fileDownloadService.downloadFile(this.buildFileUrl));
|
|
133
160
|
if (masterBuildFile.isErr()) {
|
|
134
161
|
this.prompts.serviceError(masterBuildFile.error);
|
|
@@ -138,13 +165,20 @@ export class PortalQuickstartAction {
|
|
|
138
165
|
const masterBuildFilePath = await tempContext.save(masterBuildFile.value.stream);
|
|
139
166
|
await this.zipService.unArchive(masterBuildFilePath, tempDirectory);
|
|
140
167
|
const extractedFolder = tempDirectory.join(this.repositoryFolderName);
|
|
168
|
+
// Clean up the workflow dir from the template before copying
|
|
141
169
|
const tempBuildContext = new BuildContext(extractedFolder);
|
|
142
170
|
await tempBuildContext.deleteWorkflowDir();
|
|
143
|
-
|
|
144
|
-
buildFile.generatePortal.languageConfig = getLanguagesConfig(languages);
|
|
145
|
-
await tempBuildContext.updateBuildFileContents(buildFile);
|
|
171
|
+
// Copy the template into the final destination
|
|
146
172
|
const sourceDirectory = inputDirectory.join('src');
|
|
147
173
|
await this.fileService.copyDirectoryContents(extractedFolder, sourceDirectory);
|
|
174
|
+
// Update the build file in its final location via BuildContext,
|
|
175
|
+
// mirroring exactly how CopilotAction reads and writes the build file
|
|
176
|
+
const buildContext = new BuildContext(sourceDirectory);
|
|
177
|
+
const baseConfig = (await buildContext.getBuildFileContents()).withPortalLanguages(languages);
|
|
178
|
+
const buildConfig = copilotKey
|
|
179
|
+
? baseConfig.withApiCopilotForPortal(copilotKey, DEFAULT_COPILOT_WELCOME_MESSAGE, defaultBaseUrl)
|
|
180
|
+
: baseConfig;
|
|
181
|
+
await buildContext.updateBuildFileContents(buildConfig);
|
|
148
182
|
const specDirectory = sourceDirectory.join('spec');
|
|
149
183
|
const specContext = new SpecContext(specDirectory);
|
|
150
184
|
await specContext.replaceDefaultSpec(specPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/actions/portal/quickstart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/actions/portal/quickstart.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,5 +11,6 @@ export declare class PortalServeAction {
|
|
|
11
11
|
private readonly authKey;
|
|
12
12
|
constructor(configDir: DirectoryPath, commandMetadata: CommandMetadata, authKey?: string | null);
|
|
13
13
|
execute(buildDirectory: DirectoryPath, portalDirectory: DirectoryPath, port: number, openInBrowser: boolean, hotReload: boolean, onAfterServe?: () => void): Promise<ActionResult>;
|
|
14
|
+
private waitForServerListening;
|
|
14
15
|
private clearStandardInput;
|
|
15
16
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { err, ok } from "neverthrow";
|
|
1
2
|
import { createServer as createLiveReloadServer } from "livereload";
|
|
2
3
|
import connectLiveReload from "connect-livereload";
|
|
3
4
|
import express from "express";
|
|
4
5
|
import chokidar from "chokidar";
|
|
5
|
-
import crypto from "crypto";
|
|
6
|
-
import { Mutex } from "async-mutex";
|
|
7
6
|
import { PortalServePrompts } from "../../prompts/portal/serve.js";
|
|
8
7
|
import { ActionResult } from "../action-result.js";
|
|
9
8
|
import { GenerateAction } from "./generate.js";
|
|
@@ -11,6 +10,7 @@ import { NetworkService } from "../../infrastructure/network-service.js";
|
|
|
11
10
|
import { UrlPath } from "../../types/file/urlPath.js";
|
|
12
11
|
import { LauncherService } from "../../infrastructure/launcher-service.js";
|
|
13
12
|
import { DebounceService } from "../../infrastructure/debounce-service.js";
|
|
13
|
+
import { BuildContext } from "../../types/build-context.js";
|
|
14
14
|
export class PortalServeAction {
|
|
15
15
|
constructor(configDir, commandMetadata, authKey = null) {
|
|
16
16
|
this.prompts = new PortalServePrompts();
|
|
@@ -22,25 +22,61 @@ export class PortalServeAction {
|
|
|
22
22
|
this.authKey = authKey;
|
|
23
23
|
}
|
|
24
24
|
async execute(buildDirectory, portalDirectory, port, openInBrowser, hotReload, onAfterServe) {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const buildContext = new BuildContext(buildDirectory);
|
|
26
|
+
if (!(await buildContext.exists())) {
|
|
27
|
+
this.prompts.noPortalSource(buildDirectory);
|
|
28
|
+
return ActionResult.failed();
|
|
29
|
+
}
|
|
30
|
+
let buildConfig;
|
|
31
|
+
try {
|
|
32
|
+
buildConfig = await buildContext.getBuildFileContents();
|
|
33
|
+
}
|
|
34
|
+
catch (_a) {
|
|
35
|
+
this.prompts.invalidBuildConfig(buildDirectory);
|
|
28
36
|
return ActionResult.failed();
|
|
29
37
|
}
|
|
30
38
|
const servePort = await this.networkService.getServerPort([port, 3000, 3001, 3002]);
|
|
31
|
-
if (servePort != port
|
|
39
|
+
if (servePort != port) {
|
|
32
40
|
this.prompts.usingFallbackPort(port, servePort);
|
|
33
41
|
}
|
|
42
|
+
const serveUrl = new UrlPath(`http://localhost:${servePort}`);
|
|
43
|
+
// Update the configured localhost base URL to the actual serve URL BEFORE
|
|
44
|
+
// generation bakes it into the portal artifacts; otherwise the portal would load
|
|
45
|
+
// its content from the wrong port and fail to render.
|
|
46
|
+
const updatedBuildConfig = buildConfig.updateBuildConfigBaseUrl(serveUrl);
|
|
47
|
+
if (updatedBuildConfig !== buildConfig) {
|
|
48
|
+
await buildContext.updateBuildFileContents(updatedBuildConfig);
|
|
49
|
+
this.prompts.baseUrlPortUpdated(serveUrl);
|
|
50
|
+
}
|
|
51
|
+
const generatePortalAction = new GenerateAction(this.configDir, this.commandMetadata, this.authKey);
|
|
52
|
+
const result = await generatePortalAction.execute(buildDirectory, portalDirectory, true, false);
|
|
53
|
+
if (result.isFailed()) {
|
|
54
|
+
return ActionResult.failed();
|
|
55
|
+
}
|
|
34
56
|
const liveReloadPort = await this.networkService.getServerPort([35729, 35730, 35731, 35732]);
|
|
35
57
|
const liveReloadServer = createLiveReloadServer({ port: liveReloadPort });
|
|
58
|
+
// livereload attaches its "error" handler to the inner WebSocket server, not to the
|
|
59
|
+
// HTTP server it binds the port on, so a failed bind (e.g. the port was taken in the
|
|
60
|
+
// gap since getServerPort) emits an unhandled "error" that would crash the process.
|
|
61
|
+
// Guard the HTTP server the same way as the main server below.
|
|
62
|
+
const liveReloadHttpServer = liveReloadServer.config.server;
|
|
63
|
+
if ((await this.waitForServerListening(liveReloadHttpServer)).isErr()) {
|
|
64
|
+
liveReloadServer.close();
|
|
65
|
+
this.prompts.serverStartFailed(liveReloadPort);
|
|
66
|
+
return ActionResult.failed();
|
|
67
|
+
}
|
|
36
68
|
const server = this.application
|
|
37
69
|
.use(connectLiveReload())
|
|
38
70
|
.use(express.static(portalDirectory.toString(), { extensions: ["html"] }))
|
|
39
71
|
.listen(servePort);
|
|
40
|
-
|
|
41
|
-
|
|
72
|
+
if ((await this.waitForServerListening(server)).isErr()) {
|
|
73
|
+
liveReloadServer.close();
|
|
74
|
+
this.prompts.serverStartFailed(servePort);
|
|
75
|
+
return ActionResult.failed();
|
|
76
|
+
}
|
|
77
|
+
this.prompts.portalServed(serveUrl);
|
|
42
78
|
if (openInBrowser) {
|
|
43
|
-
await this.launcherService.openUrlInBrowser(
|
|
79
|
+
await this.launcherService.openUrlInBrowser(serveUrl);
|
|
44
80
|
}
|
|
45
81
|
this.prompts.promptForExit();
|
|
46
82
|
if (!hotReload) {
|
|
@@ -62,9 +98,6 @@ export class PortalServeAction {
|
|
|
62
98
|
atomic: true
|
|
63
99
|
});
|
|
64
100
|
const deletedDirectories = new Set();
|
|
65
|
-
// TODO: Verify if we need mutex and eventQueue after refactoring.
|
|
66
|
-
const eventQueue = new Map();
|
|
67
|
-
const mutex = new Mutex();
|
|
68
101
|
const debounceService = new DebounceService();
|
|
69
102
|
watcher
|
|
70
103
|
.on("all", async (event, path) => {
|
|
@@ -79,16 +112,24 @@ export class PortalServeAction {
|
|
|
79
112
|
}
|
|
80
113
|
}
|
|
81
114
|
}
|
|
82
|
-
const eventId = `${Date.now()}-${crypto.randomUUID()}`;
|
|
83
|
-
await mutex.runExclusive(async () => {
|
|
84
|
-
eventQueue.clear();
|
|
85
|
-
eventQueue.set(eventId, path);
|
|
86
|
-
});
|
|
87
115
|
await debounceService.batchSingleRequest(async () => {
|
|
88
116
|
this.prompts.changesDetected();
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
117
|
+
// Re-reconcile on every hot-reload cycle: portalSettings.baseUrl takes
|
|
118
|
+
// precedence over generatePortal.baseUrl and may have been added or changed
|
|
119
|
+
// since serve started. If a mismatch is found the file is rewritten, which
|
|
120
|
+
// triggers a second watcher event — the debounce queues it, and the second
|
|
121
|
+
// cycle sees no mismatch and generates cleanly.
|
|
122
|
+
try {
|
|
123
|
+
const latestConfig = await buildContext.getBuildFileContents();
|
|
124
|
+
const reconciledConfig = latestConfig.updateBuildConfigBaseUrl(serveUrl);
|
|
125
|
+
if (reconciledConfig !== latestConfig) {
|
|
126
|
+
await buildContext.updateBuildFileContents(reconciledConfig);
|
|
127
|
+
this.prompts.baseUrlPortUpdated(serveUrl);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (_a) {
|
|
131
|
+
// Build file temporarily unreadable (e.g. mid-save); skip reconciliation
|
|
132
|
+
// this cycle. GenerateAction will surface the error if the file is broken.
|
|
92
133
|
}
|
|
93
134
|
await generatePortalAction.execute(buildDirectory, portalDirectory, true, false, false);
|
|
94
135
|
liveReloadServer.refresh(portalDirectory.toString());
|
|
@@ -107,6 +148,22 @@ export class PortalServeAction {
|
|
|
107
148
|
server.close();
|
|
108
149
|
return ActionResult.success();
|
|
109
150
|
}
|
|
151
|
+
// Resolves ok once the server is bound, or err with the bind error (e.g. EADDRINUSE)
|
|
152
|
+
// so a failed listen is reported cleanly instead of crashing via an unhandled "error".
|
|
153
|
+
waitForServerListening(server) {
|
|
154
|
+
return new Promise((resolve) => {
|
|
155
|
+
const onListening = () => {
|
|
156
|
+
server.removeListener("error", onError);
|
|
157
|
+
resolve(ok(undefined));
|
|
158
|
+
};
|
|
159
|
+
const onError = (error) => {
|
|
160
|
+
server.removeListener("listening", onListening);
|
|
161
|
+
resolve(err(error));
|
|
162
|
+
};
|
|
163
|
+
server.once("listening", onListening);
|
|
164
|
+
server.once("error", onError);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
110
167
|
// This clears the standard input to allow interrupts like CTRL+C to work properly.
|
|
111
168
|
clearStandardInput() {
|
|
112
169
|
if (process.platform !== "darwin" && process.stdin.isTTY) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/actions/portal/serve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/actions/portal/serve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAU,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,IAAI,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;AACnD,OAAO,OAAoB,MAAM,SAAS,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,iBAAiB;IAS5B,YAAmB,SAAwB,EAAE,eAAgC,EAAE,UAAyB,IAAI;QAR3F,YAAO,GAAuB,IAAI,kBAAkB,EAAE,CAAC;QACvD,mBAAc,GAAmB,IAAI,cAAc,EAAE,CAAC;QACtD,oBAAe,GAAoB,IAAI,eAAe,EAAE,CAAC;QACzD,gBAAW,GAAY,OAAO,EAAE,CAAC;QAMhD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,cAA6B,EAC7B,eAA8B,EAC9B,IAAY,EACZ,aAAsB,EACtB,SAAkB,EAClB,YAAyB;QAEzB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,WAAW,CAAC;QAChB,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,YAAY,CAAC,oBAAoB,EAAE,CAAC;QAC1D,CAAC;QAAC,WAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAChD,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACpF,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;QAE9D,0EAA0E;QAC1E,iFAAiF;QACjF,sDAAsD;QACtD,MAAM,kBAAkB,GAAG,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,kBAAkB,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,YAAY,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChG,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtB,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7F,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAE1E,oFAAoF;QACpF,qFAAqF;QACrF,oFAAoF;QACpF,+DAA+D;QAC/D,MAAM,oBAAoB,GAAI,gBAA8D,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3G,IAAI,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACtE,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;aAC5B,GAAG,CAAC,iBAAiB,EAAE,CAAC;aACxB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACzE,MAAM,CAAC,SAAS,CAAC,CAAC;QAErB,IAAI,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACxD,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,EAAE,CAAC;YACjB,CAAC;YAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAEpC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE;YACxD,OAAO,EAAE,CAAC,eAAe,CAAC;YAC1B,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,MAAM,eAAe,GAAoB,IAAI,eAAe,EAAE,CAAC;QAE/D,OAAO;aACJ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC/B,6CAA6C;YAC7C,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;gBACzB,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzB,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,eAAe,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;gBAClD,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC/B,uEAAuE;gBACvE,4EAA4E;gBAC5E,2EAA2E;gBAC3E,2EAA2E;gBAC3E,gDAAgD;gBAChD,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,oBAAoB,EAAE,CAAC;oBAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;oBACzE,IAAI,gBAAgB,KAAK,YAAY,EAAE,CAAC;wBACtC,MAAM,YAAY,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;wBAC7D,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBAAC,WAAM,CAAC;oBACP,yEAAyE;oBACzE,2EAA2E;gBAC7E,CAAC;gBACD,MAAM,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxF,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEL,6BAA6B;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAEpC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,qFAAqF;IACrF,uFAAuF;IAC/E,sBAAsB,CAAC,MAAc;QAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC/B,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mFAAmF;IAC3E,kBAAkB;QACxB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|