@resolution/jira-api-client 0.1.0 → 0.1.1
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/CHANGELOG.md +11 -0
- package/package.json +8 -2
- package/.eslintrc.js +0 -3
- package/config/api-typescript-generator.config.ts +0 -91
- package/config/compare-schemas.ts +0 -307
- package/src/index.ts +0 -47
- package/src/openapi/platform/base-jira-platform-api-client.ts +0 -2298
- package/src/openapi/platform/core/common-http-client.ts +0 -723
- package/src/openapi/platform/core/common-http-service.ts +0 -22
- package/src/openapi/platform/core/common-validation-schema-storage.ts +0 -105
- package/src/openapi/platform/models/announcement-banner.ts +0 -59
- package/src/openapi/platform/models/app-data-policies.ts +0 -79
- package/src/openapi/platform/models/app-migration.ts +0 -172
- package/src/openapi/platform/models/app-properties.ts +0 -32
- package/src/openapi/platform/models/audit-records.ts +0 -140
- package/src/openapi/platform/models/avatars.ts +0 -48
- package/src/openapi/platform/models/classification-levels.ts +0 -58
- package/src/openapi/platform/models/common.ts +0 -2669
- package/src/openapi/platform/models/dashboards.ts +0 -849
- package/src/openapi/platform/models/dynamic-modules.ts +0 -121
- package/src/openapi/platform/models/filter-sharing.ts +0 -103
- package/src/openapi/platform/models/filters.ts +0 -319
- package/src/openapi/platform/models/group-and-user-picker.ts +0 -85
- package/src/openapi/platform/models/groups.ts +0 -247
- package/src/openapi/platform/models/issue-attachments.ts +0 -290
- package/src/openapi/platform/models/issue-comment-properties.ts +0 -27
- package/src/openapi/platform/models/issue-comments.ts +0 -91
- package/src/openapi/platform/models/issue-custom-field-configuration-apps.ts +0 -96
- package/src/openapi/platform/models/issue-custom-field-contexts.ts +0 -1072
- package/src/openapi/platform/models/issue-custom-field-options-apps.ts +0 -273
- package/src/openapi/platform/models/issue-custom-field-options.ts +0 -283
- package/src/openapi/platform/models/issue-custom-field-values-apps.ts +0 -118
- package/src/openapi/platform/models/issue-field-configurations.ts +0 -435
- package/src/openapi/platform/models/issue-fields.ts +0 -392
- package/src/openapi/platform/models/issue-link-types.ts +0 -28
- package/src/openapi/platform/models/issue-links.ts +0 -185
- package/src/openapi/platform/models/issue-notification-schemes.ts +0 -370
- package/src/openapi/platform/models/issue-priorities.ts +0 -196
- package/src/openapi/platform/models/issue-properties.ts +0 -259
- package/src/openapi/platform/models/issue-remote-links.ts +0 -207
- package/src/openapi/platform/models/issue-resolutions.ts +0 -180
- package/src/openapi/platform/models/issue-search.ts +0 -367
- package/src/openapi/platform/models/issue-security-level.ts +0 -76
- package/src/openapi/platform/models/issue-security-schemes.ts +0 -496
- package/src/openapi/platform/models/issue-type-schemes.ts +0 -290
- package/src/openapi/platform/models/issue-type-screen-schemes.ts +0 -286
- package/src/openapi/platform/models/issue-types.ts +0 -66
- package/src/openapi/platform/models/issue-votes.ts +0 -38
- package/src/openapi/platform/models/issue-watchers.ts +0 -67
- package/src/openapi/platform/models/issue-worklogs.ts +0 -190
- package/src/openapi/platform/models/issues.ts +0 -1268
- package/src/openapi/platform/models/jira-expressions.ts +0 -578
- package/src/openapi/platform/models/jira-settings.ts +0 -118
- package/src/openapi/platform/models/jql-functions-apps.ts +0 -128
- package/src/openapi/platform/models/jql.ts +0 -783
- package/src/openapi/platform/models/labels.ts +0 -42
- package/src/openapi/platform/models/license-metrics.ts +0 -68
- package/src/openapi/platform/models/myself.ts +0 -29
- package/src/openapi/platform/models/permission-schemes.ts +0 -89
- package/src/openapi/platform/models/permissions.ts +0 -308
- package/src/openapi/platform/models/priority-schemes.ts +0 -527
- package/src/openapi/platform/models/project-avatars.ts +0 -29
- package/src/openapi/platform/models/project-classification-levels.ts +0 -24
- package/src/openapi/platform/models/project-components.ts +0 -231
- package/src/openapi/platform/models/project-email.ts +0 -27
- package/src/openapi/platform/models/project-features.ts +0 -78
- package/src/openapi/platform/models/project-permission-schemes.ts +0 -43
- package/src/openapi/platform/models/project-role-actors.ts +0 -107
- package/src/openapi/platform/models/project-roles.ts +0 -76
- package/src/openapi/platform/models/project-types.ts +0 -36
- package/src/openapi/platform/models/project-versions.ts +0 -216
- package/src/openapi/platform/models/projects.ts +0 -429
- package/src/openapi/platform/models/screen-schemes.ts +0 -192
- package/src/openapi/platform/models/screen-tab-fields.ts +0 -45
- package/src/openapi/platform/models/screens.ts +0 -171
- package/src/openapi/platform/models/server-info.ts +0 -100
- package/src/openapi/platform/models/service-registry.ts +0 -68
- package/src/openapi/platform/models/status.ts +0 -229
- package/src/openapi/platform/models/time-tracking.ts +0 -38
- package/src/openapi/platform/models/ui-modifications-apps.ts +0 -229
- package/src/openapi/platform/models/user-search.ts +0 -69
- package/src/openapi/platform/models/users.ts +0 -121
- package/src/openapi/platform/models/webhooks.ts +0 -307
- package/src/openapi/platform/models/workflow-scheme-drafts.ts +0 -58
- package/src/openapi/platform/models/workflow-scheme-project-associations.ts +0 -68
- package/src/openapi/platform/models/workflow-schemes.ts +0 -545
- package/src/openapi/platform/models/workflow-transition-properties.ts +0 -33
- package/src/openapi/platform/models/workflow-transition-rules.ts +0 -261
- package/src/openapi/platform/models/workflows.ts +0 -1943
- package/src/openapi/platform/services/announcement-banner-service.ts +0 -142
- package/src/openapi/platform/services/app-data-policies-service.ts +0 -136
- package/src/openapi/platform/services/app-migration-service.ts +0 -289
- package/src/openapi/platform/services/app-properties-service.ts +0 -441
- package/src/openapi/platform/services/application-roles-service.ts +0 -247
- package/src/openapi/platform/services/audit-records-service.ts +0 -164
- package/src/openapi/platform/services/avatars-service.ts +0 -769
- package/src/openapi/platform/services/classification-levels-service.ts +0 -131
- package/src/openapi/platform/services/dashboards-service.ts +0 -1721
- package/src/openapi/platform/services/dynamic-modules-service.ts +0 -127
- package/src/openapi/platform/services/filter-sharing-service.ts +0 -687
- package/src/openapi/platform/services/filters-service.ts +0 -1901
- package/src/openapi/platform/services/group-and-user-picker-service.ts +0 -224
- package/src/openapi/platform/services/groups-service.ts +0 -751
- package/src/openapi/platform/services/issue-attachments-service.ts +0 -900
- package/src/openapi/platform/services/issue-comment-properties-service.ts +0 -324
- package/src/openapi/platform/services/issue-comments-service.ts +0 -812
- package/src/openapi/platform/services/issue-custom-field-configuration-apps-service.ts +0 -277
- package/src/openapi/platform/services/issue-custom-field-contexts-service.ts +0 -1339
- package/src/openapi/platform/services/issue-custom-field-options-apps-service.ts +0 -994
- package/src/openapi/platform/services/issue-custom-field-options-service.ts +0 -651
- package/src/openapi/platform/services/issue-custom-field-values-apps-service.ts +0 -201
- package/src/openapi/platform/services/issue-field-configurations-service.ts +0 -1294
- package/src/openapi/platform/services/issue-fields-service.ts +0 -837
- package/src/openapi/platform/services/issue-link-types-service.ts +0 -360
- package/src/openapi/platform/services/issue-links-service.ts +0 -345
- package/src/openapi/platform/services/issue-navigator-settings-service.ts +0 -119
- package/src/openapi/platform/services/issue-notification-schemes-service.ts +0 -1209
- package/src/openapi/platform/services/issue-priorities-service.ts +0 -575
- package/src/openapi/platform/services/issue-properties-service.ts +0 -606
- package/src/openapi/platform/services/issue-remote-links-service.ts +0 -597
- package/src/openapi/platform/services/issue-resolutions-service.ts +0 -534
- package/src/openapi/platform/services/issue-search-service.ts +0 -1139
- package/src/openapi/platform/services/issue-security-level-service.ts +0 -250
- package/src/openapi/platform/services/issue-security-schemes-service.ts +0 -1240
- package/src/openapi/platform/services/issue-type-properties-service.ts +0 -325
- package/src/openapi/platform/services/issue-type-schemes-service.ts +0 -940
- package/src/openapi/platform/services/issue-type-screen-schemes-service.ts +0 -994
- package/src/openapi/platform/services/issue-types-service.ts +0 -679
- package/src/openapi/platform/services/issue-votes-service.ts +0 -221
- package/src/openapi/platform/services/issue-watchers-service.ts +0 -331
- package/src/openapi/platform/services/issue-worklog-properties-service.ts +0 -348
- package/src/openapi/platform/services/issue-worklogs-service.ts +0 -1089
- package/src/openapi/platform/services/issues-service.ts +0 -3346
- package/src/openapi/platform/services/jira-expressions-service.ts +0 -407
- package/src/openapi/platform/services/jira-settings-service.ts +0 -415
- package/src/openapi/platform/services/jql-functions-apps-service.ts +0 -219
- package/src/openapi/platform/services/jql-service.ts +0 -896
- package/src/openapi/platform/services/labels-service.ts +0 -89
- package/src/openapi/platform/services/license-metrics-service.ts +0 -216
- package/src/openapi/platform/services/myself-service.ts +0 -520
- package/src/openapi/platform/services/permission-schemes-service.ts +0 -926
- package/src/openapi/platform/services/permissions-service.ts +0 -407
- package/src/openapi/platform/services/priority-schemes-service.ts +0 -1001
- package/src/openapi/platform/services/project-avatars-service.ts +0 -341
- package/src/openapi/platform/services/project-categories-service.ts +0 -318
- package/src/openapi/platform/services/project-classification-levels-service.ts +0 -232
- package/src/openapi/platform/services/project-components-service.ts +0 -1332
- package/src/openapi/platform/services/project-email-service.ts +0 -161
- package/src/openapi/platform/services/project-features-service.ts +0 -207
- package/src/openapi/platform/services/project-key-and-name-validation-service.ts +0 -200
- package/src/openapi/platform/services/project-permission-schemes-service.ts +0 -384
- package/src/openapi/platform/services/project-properties-service.ts +0 -320
- package/src/openapi/platform/services/project-role-actors-service.ts +0 -627
- package/src/openapi/platform/services/project-roles-service.ts +0 -867
- package/src/openapi/platform/services/project-types-service.ts +0 -297
- package/src/openapi/platform/services/project-versions-service.ts +0 -1287
- package/src/openapi/platform/services/projects-service.ts +0 -2196
- package/src/openapi/platform/services/screen-schemes-service.ts +0 -334
- package/src/openapi/platform/services/screen-tab-fields-service.ts +0 -276
- package/src/openapi/platform/services/screen-tabs-service.ts +0 -421
- package/src/openapi/platform/services/screens-service.ts +0 -528
- package/src/openapi/platform/services/server-info-service.ts +0 -88
- package/src/openapi/platform/services/service-registry-service.ts +0 -89
- package/src/openapi/platform/services/status-service.ts +0 -498
- package/src/openapi/platform/services/tasks-service.ts +0 -159
- package/src/openapi/platform/services/time-tracking-service.ts +0 -386
- package/src/openapi/platform/services/ui-modifications-apps-service.ts +0 -403
- package/src/openapi/platform/services/user-properties-service.ts +0 -413
- package/src/openapi/platform/services/user-search-service.ts +0 -1214
- package/src/openapi/platform/services/users-service.ts +0 -1108
- package/src/openapi/platform/services/webhooks-service.ts +0 -458
- package/src/openapi/platform/services/workflow-scheme-drafts-service.ts +0 -1313
- package/src/openapi/platform/services/workflow-scheme-project-associations-service.ts +0 -189
- package/src/openapi/platform/services/workflow-schemes-service.ts +0 -1617
- package/src/openapi/platform/services/workflow-status-categories-service.ts +0 -151
- package/src/openapi/platform/services/workflow-statuses-service.ts +0 -176
- package/src/openapi/platform/services/workflow-transition-properties-service.ts +0 -388
- package/src/openapi/platform/services/workflow-transition-rules-service.ts +0 -485
- package/src/openapi/platform/services/workflows-service.ts +0 -3477
- package/src/openapi/platform/validation-schema-storage.ts +0 -186
- package/src/openapi/software/base-jira-software-api-client.ts +0 -447
- package/src/openapi/software/core/common-http-client.ts +0 -723
- package/src/openapi/software/core/common-http-service.ts +0 -22
- package/src/openapi/software/core/common-validation-schema-storage.ts +0 -105
- package/src/openapi/software/models/board.ts +0 -918
- package/src/openapi/software/services/backlog-service.ts +0 -160
- package/src/openapi/software/services/board-service.ts +0 -4189
- package/src/openapi/software/services/builds-service.ts +0 -571
- package/src/openapi/software/services/deployments-service.ts +0 -403
- package/src/openapi/software/services/dev-ops-components-service.ts +0 -371
- package/src/openapi/software/services/development-information-service.ts +0 -2357
- package/src/openapi/software/services/epic-service.ts +0 -854
- package/src/openapi/software/services/feature-flags-service.ts +0 -303
- package/src/openapi/software/services/issue-service.ts +0 -529
- package/src/openapi/software/services/operations-service.ts +0 -741
- package/src/openapi/software/services/remote-links-service.ts +0 -653
- package/src/openapi/software/services/security-information-service.ts +0 -495
- package/src/openapi/software/services/sprint-service.ts +0 -969
- package/src/openapi/software/validation-schema-storage.ts +0 -186
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.1.1](https://bitbucket.org/resolutiongmbh/atlassian-api-clients/compare/@resolution/jira-api-client@0.1.0...@resolution/jira-api-client@0.1.1) (2024-05-28)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* remove unnecessary files from the package ([78f2d55](https://bitbucket.org/resolutiongmbh/atlassian-api-clients/commits/78f2d55adfcd5a2db5f5e14faa1598ce5e80cadf))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# 0.1.0 (2024-05-28)
|
|
7
18
|
|
|
8
19
|
|
package/package.json
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resolution/jira-api-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "JIRA Platform & Software API Client based on OpenAPI Schema from Atlassian.",
|
|
5
5
|
"main": "index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"lib",
|
|
8
|
+
"README.md",
|
|
9
|
+
"CHANGELOG.md",
|
|
10
|
+
"LICENSE.md"
|
|
11
|
+
],
|
|
6
12
|
"scripts": {
|
|
7
13
|
"build": "yarn build:openapi && yarn build:ts",
|
|
8
14
|
"build:ts": "yarn run -T tsc -p tsconfig.build.json",
|
|
@@ -33,5 +39,5 @@
|
|
|
33
39
|
"publishConfig": {
|
|
34
40
|
"access": "public"
|
|
35
41
|
},
|
|
36
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "c410ea6a5209cef53640918e62fb2d829021082f"
|
|
37
43
|
}
|
package/.eslintrc.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
addXAtlassianTokenNoCheckHeader,
|
|
3
|
-
setBinaryRequestBody,
|
|
4
|
-
} from "@resolution/atlassian-api-common/config/binary";
|
|
5
|
-
import {
|
|
6
|
-
addMultipartFileSchema,
|
|
7
|
-
setMultipartFileRequestBody,
|
|
8
|
-
} from "@resolution/atlassian-api-common/config/binary";
|
|
9
|
-
import { commonConfig } from "@resolution/atlassian-api-common/config/commonConfig";
|
|
10
|
-
import { combinePatches } from "@resolution/atlassian-api-common/config/patch";
|
|
11
|
-
import {
|
|
12
|
-
patchOperation,
|
|
13
|
-
patchPath,
|
|
14
|
-
} from "@resolution/atlassian-api-common/config/patchOperation";
|
|
15
|
-
import {
|
|
16
|
-
nullableProperties,
|
|
17
|
-
patchSchema,
|
|
18
|
-
} from "@resolution/atlassian-api-common/config/patchSchema";
|
|
19
|
-
import type { ApiTypescriptGeneratorConfig } from "api-typescript-generator";
|
|
20
|
-
import * as path from "path";
|
|
21
|
-
|
|
22
|
-
export const JIRA_PLATFORM_API_URL =
|
|
23
|
-
"https://dac-static.atlassian.com/cloud/jira/platform/swagger-v3.v3.json?_v=1.7207.0-0.1306.0";
|
|
24
|
-
export const JIRA_SOFTWARE_API_URL =
|
|
25
|
-
"https://dac-static.atlassian.com/cloud/jira/software/swagger.v3.json?_v=1.7207.0-0.1306.0";
|
|
26
|
-
|
|
27
|
-
const jiraPlatformApiSchemaPatches = combinePatches([
|
|
28
|
-
patchSchema("ChangeDetails", nullableProperties(["from", "fromString"])),
|
|
29
|
-
addMultipartFileSchema,
|
|
30
|
-
]);
|
|
31
|
-
|
|
32
|
-
const jiraPlatformApiOperationPatches = combinePatches([
|
|
33
|
-
patchPath(
|
|
34
|
-
"/rest/api/3/issue/{issueIdOrKey}/attachments",
|
|
35
|
-
patchOperation(
|
|
36
|
-
"post",
|
|
37
|
-
combinePatches([
|
|
38
|
-
addXAtlassianTokenNoCheckHeader,
|
|
39
|
-
setMultipartFileRequestBody,
|
|
40
|
-
]),
|
|
41
|
-
),
|
|
42
|
-
),
|
|
43
|
-
patchPath(
|
|
44
|
-
"/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
|
|
45
|
-
patchOperation(
|
|
46
|
-
"post",
|
|
47
|
-
combinePatches([addXAtlassianTokenNoCheckHeader, setBinaryRequestBody]),
|
|
48
|
-
),
|
|
49
|
-
),
|
|
50
|
-
]);
|
|
51
|
-
|
|
52
|
-
const config: ApiTypescriptGeneratorConfig = {
|
|
53
|
-
generates: [
|
|
54
|
-
{
|
|
55
|
-
type: "openapiClient",
|
|
56
|
-
...commonConfig,
|
|
57
|
-
document: {
|
|
58
|
-
source: {
|
|
59
|
-
type: "url",
|
|
60
|
-
url: JIRA_PLATFORM_API_URL,
|
|
61
|
-
},
|
|
62
|
-
patch: {
|
|
63
|
-
patchPaths: jiraPlatformApiOperationPatches,
|
|
64
|
-
patchSchemas: jiraPlatformApiSchemaPatches,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
outputDirPath: path.join(__dirname, "..", "src/openapi/platform"),
|
|
68
|
-
client: {
|
|
69
|
-
name: "BaseJiraPlatformApiClient",
|
|
70
|
-
exportModels: true,
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
type: "openapiClient",
|
|
75
|
-
...commonConfig,
|
|
76
|
-
document: {
|
|
77
|
-
source: {
|
|
78
|
-
type: "url",
|
|
79
|
-
url: JIRA_SOFTWARE_API_URL,
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
outputDirPath: path.join(__dirname, "..", "src/openapi/software"),
|
|
83
|
-
client: {
|
|
84
|
-
name: "BaseJiraSoftwareApiClient",
|
|
85
|
-
exportModels: true,
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export default config;
|
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
OpenApiDocument,
|
|
3
|
-
OpenApiSchema,
|
|
4
|
-
} from "api-typescript-generator/openapi";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
JIRA_PLATFORM_API_URL,
|
|
8
|
-
JIRA_SOFTWARE_API_URL,
|
|
9
|
-
} from "./api-typescript-generator.config";
|
|
10
|
-
|
|
11
|
-
// ----------------------------------------------------------------------------
|
|
12
|
-
// Different models are generated for JIRA platform and software APIs.
|
|
13
|
-
// Some of the models have the same name.
|
|
14
|
-
// It would be very inconvenient to export the models with the same name.
|
|
15
|
-
// The plan is to export the models from Platform and those models from
|
|
16
|
-
// Software that are not present in Platform.
|
|
17
|
-
// This script compares the schemas of the JIRA platform and software APIs
|
|
18
|
-
// to check if the schemas with the same names have the same structure.
|
|
19
|
-
// If the schemas are different, the script exits with status 1.
|
|
20
|
-
// Hopefully, this never happens.
|
|
21
|
-
// ----------------------------------------------------------------------------
|
|
22
|
-
|
|
23
|
-
async function loadOpenApiDocument(url: string): Promise<OpenApiDocument> {
|
|
24
|
-
return (await (await fetch(url)).json()) as OpenApiDocument;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type OpenApiSchemaOrRef = OpenApiSchema | { $ref: string };
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Compare two schemas and return the differences that could influence the compatibility.
|
|
31
|
-
*/
|
|
32
|
-
function compareSchemaTypes(
|
|
33
|
-
schema1: OpenApiSchemaOrRef,
|
|
34
|
-
schema2: OpenApiSchemaOrRef,
|
|
35
|
-
document1: OpenApiDocument,
|
|
36
|
-
document2: OpenApiDocument,
|
|
37
|
-
): string[] {
|
|
38
|
-
const processed = new Set<OpenApiSchema>();
|
|
39
|
-
function queryDocument(path: string, document: OpenApiDocument): unknown {
|
|
40
|
-
let current = document as unknown;
|
|
41
|
-
for (const pathBit of path.substring(2).split("/")) {
|
|
42
|
-
current = (current as Record<string, unknown>)[pathBit];
|
|
43
|
-
if (current === undefined) {
|
|
44
|
-
throw new Error(`Could not find schema object by path "${path}".`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return current;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function compare(
|
|
51
|
-
schema1: OpenApiSchemaOrRef,
|
|
52
|
-
schema2: OpenApiSchemaOrRef,
|
|
53
|
-
path: string[],
|
|
54
|
-
) {
|
|
55
|
-
if (typeof schema1 === "object" && "$ref" in schema1) {
|
|
56
|
-
schema1 = queryDocument(schema1.$ref, document1) as OpenApiSchema;
|
|
57
|
-
}
|
|
58
|
-
if (typeof schema2 === "object" && "$ref" in schema2) {
|
|
59
|
-
schema2 = queryDocument(schema2.$ref, document2) as OpenApiSchema;
|
|
60
|
-
}
|
|
61
|
-
if (processed.has(schema1) || processed.has(schema2)) {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
processed.add(schema1);
|
|
65
|
-
processed.add(schema2);
|
|
66
|
-
|
|
67
|
-
if (typeof schema1 === "boolean") {
|
|
68
|
-
if (schema1 !== schema2) {
|
|
69
|
-
return [
|
|
70
|
-
`Type mismatch at ${path.join(".")}: expected boolean, got ${schema2}`,
|
|
71
|
-
];
|
|
72
|
-
}
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
if (typeof schema2 === "boolean") {
|
|
76
|
-
return [
|
|
77
|
-
`Type mismatch at ${path.join(".")}: expected boolean, got ${schema1}`,
|
|
78
|
-
];
|
|
79
|
-
}
|
|
80
|
-
if (schema1.type !== schema2.type) {
|
|
81
|
-
return [
|
|
82
|
-
`Type mismatch at ${path.join(".")}: expected ${schema1.type}, got ${schema2.type}`,
|
|
83
|
-
];
|
|
84
|
-
}
|
|
85
|
-
const differences: string[] = [];
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
schema1.const !== undefined ||
|
|
89
|
-
(schema2.const !== undefined && schema1.const !== schema2.const)
|
|
90
|
-
) {
|
|
91
|
-
differences.push(
|
|
92
|
-
`Const mismatch at ${path.join(".")}: expected ${schema1.const}, got ${schema2.const}`,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
(schema1.enum !== undefined || schema2.enum !== undefined) &&
|
|
98
|
-
(schema1.enum ?? [])
|
|
99
|
-
.map(String)
|
|
100
|
-
.sort((a, b) => a.localeCompare(b))
|
|
101
|
-
.join(",") !==
|
|
102
|
-
(schema2.enum ?? [])
|
|
103
|
-
.map(String)
|
|
104
|
-
.sort((a, b) => a.localeCompare(b))
|
|
105
|
-
.join(",")
|
|
106
|
-
) {
|
|
107
|
-
differences.push(
|
|
108
|
-
`Enum mismatch at ${path.join(".")}: expected ${schema1.enum}, got ${schema2.enum}`,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (schema1.nullable !== schema2.nullable) {
|
|
113
|
-
differences.push(
|
|
114
|
-
`Nullable mismatch at ${path.join(".")}: expected ${schema1.nullable}, got ${schema2.nullable}`,
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (schema1.type === "object") {
|
|
119
|
-
const properties1 = schema1.properties ?? {};
|
|
120
|
-
const properties2 = schema2.properties ?? {};
|
|
121
|
-
const propertyNames = new Set([
|
|
122
|
-
...Object.keys(properties1),
|
|
123
|
-
...Object.keys(properties2),
|
|
124
|
-
]);
|
|
125
|
-
for (const propertyName of Array.from(propertyNames.values())) {
|
|
126
|
-
const propertyPath = path.concat(propertyName);
|
|
127
|
-
const property1 = properties1[propertyName];
|
|
128
|
-
if (property1 === undefined) {
|
|
129
|
-
differences.push(
|
|
130
|
-
`Property ${propertyPath.join(".")} is missing in the first schema`,
|
|
131
|
-
);
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
const property2 = properties2[propertyName];
|
|
135
|
-
if (property2 === undefined) {
|
|
136
|
-
differences.push(
|
|
137
|
-
`Property ${propertyPath.join(".")} is missing in the second schema`,
|
|
138
|
-
);
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
differences.push(...compare(property1, property2, propertyPath));
|
|
142
|
-
}
|
|
143
|
-
if (schema1.additionalProperties !== undefined) {
|
|
144
|
-
if (schema2.additionalProperties === undefined) {
|
|
145
|
-
differences.push(
|
|
146
|
-
`Additional properties are not allowed in the second schema at ${path.join(".")}`,
|
|
147
|
-
);
|
|
148
|
-
} else {
|
|
149
|
-
differences.push(
|
|
150
|
-
...compare(
|
|
151
|
-
schema1.additionalProperties,
|
|
152
|
-
schema2.additionalProperties,
|
|
153
|
-
[...path, "[additionalProperties]"],
|
|
154
|
-
),
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
} else if (schema2.additionalProperties !== undefined) {
|
|
158
|
-
differences.push(
|
|
159
|
-
`Additional properties are allowed in the second schema at ${path.join(".")}`,
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (schema1.type === "array") {
|
|
164
|
-
if (schema1.items !== undefined) {
|
|
165
|
-
if (schema2.items === undefined) {
|
|
166
|
-
differences.push(
|
|
167
|
-
`Items are missing in the second schema at ${path.join(".")}`,
|
|
168
|
-
);
|
|
169
|
-
} else {
|
|
170
|
-
differences.push(
|
|
171
|
-
...compare(schema1.items, schema2.items, [...path, "[items]"]),
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
} else if (schema2.items !== undefined) {
|
|
175
|
-
differences.push(
|
|
176
|
-
`Items are missing in the first schema at ${path.join(".")}`,
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
if (schema1.prefixItems !== undefined) {
|
|
180
|
-
if (schema2.prefixItems === undefined) {
|
|
181
|
-
differences.push(
|
|
182
|
-
`Prefix items are missing in the second schema at ${path.join(".")}`,
|
|
183
|
-
);
|
|
184
|
-
} else {
|
|
185
|
-
if (schema1.prefixItems.length !== schema2.prefixItems.length) {
|
|
186
|
-
differences.push(
|
|
187
|
-
`Prefix items count mismatch at ${path.join(".")}`,
|
|
188
|
-
);
|
|
189
|
-
} else {
|
|
190
|
-
for (let i = 0; i < schema1.prefixItems.length; i++) {
|
|
191
|
-
differences.push(
|
|
192
|
-
...compare(schema1.prefixItems[i], schema2.prefixItems[i], [
|
|
193
|
-
...path,
|
|
194
|
-
`[prefixItems][${i}]`,
|
|
195
|
-
]),
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (schema1.allOf !== undefined) {
|
|
203
|
-
if (schema2.allOf === undefined) {
|
|
204
|
-
differences.push(
|
|
205
|
-
`AllOf is missing in the second schema at ${path.join(".")}`,
|
|
206
|
-
);
|
|
207
|
-
} else {
|
|
208
|
-
if (schema1.allOf.length !== schema2.allOf.length) {
|
|
209
|
-
differences.push(`AllOf count mismatch at ${path.join(".")}`);
|
|
210
|
-
} else {
|
|
211
|
-
for (let i = 0; i < schema1.allOf.length; i++) {
|
|
212
|
-
differences.push(
|
|
213
|
-
...compare(schema1.allOf[i], schema2.allOf[i], [
|
|
214
|
-
...path,
|
|
215
|
-
`[allOf][${i}]`,
|
|
216
|
-
]),
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
if (schema1.oneOf !== undefined) {
|
|
223
|
-
if (schema2.oneOf === undefined) {
|
|
224
|
-
differences.push(
|
|
225
|
-
`OneOf is missing in the second schema at ${path.join(".")}`,
|
|
226
|
-
);
|
|
227
|
-
} else {
|
|
228
|
-
if (schema1.oneOf.length !== schema2.oneOf.length) {
|
|
229
|
-
differences.push(`OneOf count mismatch at ${path.join(".")}`);
|
|
230
|
-
} else {
|
|
231
|
-
for (let i = 0; i < schema1.oneOf.length; i++) {
|
|
232
|
-
differences.push(
|
|
233
|
-
...compare(schema1.oneOf[i], schema2.oneOf[i], [
|
|
234
|
-
...path,
|
|
235
|
-
`[oneOf][${i}]`,
|
|
236
|
-
]),
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
if (schema1.anyOf !== undefined) {
|
|
243
|
-
if (schema2.anyOf === undefined) {
|
|
244
|
-
differences.push(
|
|
245
|
-
`AnyOf is missing in the second schema at ${path.join(".")}`,
|
|
246
|
-
);
|
|
247
|
-
} else {
|
|
248
|
-
if (schema1.anyOf.length !== schema2.anyOf.length) {
|
|
249
|
-
differences.push(`AnyOf count mismatch at ${path.join(".")}`);
|
|
250
|
-
} else {
|
|
251
|
-
for (let i = 0; i < schema1.anyOf.length; i++) {
|
|
252
|
-
differences.push(
|
|
253
|
-
...compare(schema1.anyOf[i], schema2.anyOf[i], [
|
|
254
|
-
...path,
|
|
255
|
-
`[anyOf][${i}]`,
|
|
256
|
-
]),
|
|
257
|
-
);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return differences;
|
|
263
|
-
}
|
|
264
|
-
return compare(schema1, schema2, []);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
async function run() {
|
|
268
|
-
const [platform, software] = await Promise.all([
|
|
269
|
-
loadOpenApiDocument(JIRA_PLATFORM_API_URL),
|
|
270
|
-
loadOpenApiDocument(JIRA_SOFTWARE_API_URL),
|
|
271
|
-
]);
|
|
272
|
-
const platformSchemas = platform.components!.schemas!;
|
|
273
|
-
const softwareSchemas = software.components!.schemas!;
|
|
274
|
-
let hasDifferences = false;
|
|
275
|
-
for (const [name, schema] of Object.entries(platformSchemas)) {
|
|
276
|
-
// Check schemas with the same name.
|
|
277
|
-
if (softwareSchemas[name] !== undefined) {
|
|
278
|
-
const differences = compareSchemaTypes(
|
|
279
|
-
schema,
|
|
280
|
-
softwareSchemas[name],
|
|
281
|
-
platform,
|
|
282
|
-
software,
|
|
283
|
-
);
|
|
284
|
-
if (differences.length > 0) {
|
|
285
|
-
hasDifferences = true;
|
|
286
|
-
console.error(`Schema ${name} has differences:`);
|
|
287
|
-
for (const difference of differences) {
|
|
288
|
-
console.error(` ${difference}`);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (hasDifferences) {
|
|
294
|
-
console.error("Schemas are different, exiting with status 1.");
|
|
295
|
-
process.exit(1);
|
|
296
|
-
} else {
|
|
297
|
-
// eslint-disable-next-line no-console
|
|
298
|
-
console.log(
|
|
299
|
-
"Great news, JIRA platform and software schemas are compatible!",
|
|
300
|
-
);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
run().catch((error) => {
|
|
305
|
-
console.error(error);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type ApiClientAceOptions,
|
|
3
|
-
type ApiClientApOptions,
|
|
4
|
-
type ApiClientForgeApiExternalOptions,
|
|
5
|
-
type ApiClientForgeApiOptions,
|
|
6
|
-
ApiError,
|
|
7
|
-
createAsAppMethod,
|
|
8
|
-
createAsUserMethod,
|
|
9
|
-
getApiClientOptions,
|
|
10
|
-
type JiraApiClientForgeBridgeOptions,
|
|
11
|
-
} from "@resolution/atlassian-api-common";
|
|
12
|
-
|
|
13
|
-
import { BaseJiraPlatformApiClient } from "./openapi/platform/base-jira-platform-api-client";
|
|
14
|
-
import { BaseJiraSoftwareApiClient } from "./openapi/software/base-jira-software-api-client";
|
|
15
|
-
|
|
16
|
-
export * from "./openapi/platform/base-jira-platform-api-client";
|
|
17
|
-
export { ApiError };
|
|
18
|
-
|
|
19
|
-
export class JiraPlatformApi extends BaseJiraPlatformApiClient {
|
|
20
|
-
constructor(
|
|
21
|
-
protected options:
|
|
22
|
-
| ApiClientForgeApiOptions
|
|
23
|
-
| ApiClientForgeApiExternalOptions
|
|
24
|
-
| JiraApiClientForgeBridgeOptions
|
|
25
|
-
| ApiClientAceOptions
|
|
26
|
-
| ApiClientApOptions,
|
|
27
|
-
) {
|
|
28
|
-
super(getApiClientOptions(options));
|
|
29
|
-
}
|
|
30
|
-
asApp = createAsAppMethod<typeof JiraPlatformApi>();
|
|
31
|
-
asUser = createAsUserMethod<typeof JiraPlatformApi>();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export class JiraSoftwareApi extends BaseJiraSoftwareApiClient {
|
|
35
|
-
constructor(
|
|
36
|
-
protected options:
|
|
37
|
-
| ApiClientForgeApiOptions
|
|
38
|
-
| ApiClientForgeApiExternalOptions
|
|
39
|
-
| JiraApiClientForgeBridgeOptions
|
|
40
|
-
| ApiClientAceOptions
|
|
41
|
-
| ApiClientApOptions,
|
|
42
|
-
) {
|
|
43
|
-
super(getApiClientOptions(options));
|
|
44
|
-
}
|
|
45
|
-
asApp = createAsAppMethod<typeof JiraSoftwareApi>();
|
|
46
|
-
asUser = createAsUserMethod<typeof JiraSoftwareApi>();
|
|
47
|
-
}
|