@api-client/core 0.13.5 → 0.13.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/build/src/amf/AmfShapeGenerator.js +1 -1
- package/build/src/amf/AmfShapeGenerator.js.map +1 -1
- package/build/src/amf/DataValueGenerator.js +1 -1
- package/build/src/amf/DataValueGenerator.js.map +1 -1
- package/build/src/amf/models/AmfDataNode.js +1 -1
- package/build/src/amf/models/AmfDataNode.js.map +1 -1
- package/build/src/browser.d.ts +1 -1
- package/build/src/browser.d.ts.map +1 -1
- package/build/src/browser.js.map +1 -1
- package/build/src/index.d.ts +2 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +1 -0
- package/build/src/index.js.map +1 -1
- package/build/src/modeling/DataDomain.js +1 -1
- package/build/src/modeling/DataDomain.js.map +1 -1
- package/build/src/modeling/DomainAssociation.js +1 -1
- package/build/src/modeling/DomainAssociation.js.map +1 -1
- package/build/src/modeling/DomainEntity.js +1 -1
- package/build/src/modeling/DomainEntity.js.map +1 -1
- package/build/src/modeling/DomainFile.js +1 -1
- package/build/src/modeling/DomainFile.js.map +1 -1
- package/build/src/modeling/DomainModel.js +1 -1
- package/build/src/modeling/DomainModel.js.map +1 -1
- package/build/src/modeling/DomainNamespace.js +1 -1
- package/build/src/modeling/DomainNamespace.js.map +1 -1
- package/build/src/modeling/DomainProperty.js +1 -1
- package/build/src/modeling/DomainProperty.js.map +1 -1
- package/build/src/modeling/amf/ShapeGenerator.js +1 -1
- package/build/src/modeling/amf/ShapeGenerator.js.map +1 -1
- package/build/src/modeling/legacy/DataAssociation.js +1 -1
- package/build/src/modeling/legacy/DataAssociation.js.map +1 -1
- package/build/src/modeling/legacy/DataEntity.js +1 -1
- package/build/src/modeling/legacy/DataEntity.js.map +1 -1
- package/build/src/modeling/legacy/DataEntityBuilder.js +1 -1
- package/build/src/modeling/legacy/DataEntityBuilder.js.map +1 -1
- package/build/src/modeling/legacy/DataModel.js +1 -1
- package/build/src/modeling/legacy/DataModel.js.map +1 -1
- package/build/src/modeling/legacy/DataNamespace.js +1 -1
- package/build/src/modeling/legacy/DataNamespace.js.map +1 -1
- package/build/src/modeling/legacy/DataProperty.js +1 -1
- package/build/src/modeling/legacy/DataProperty.js.map +1 -1
- package/build/src/models/AuthorizationData.js +1 -1
- package/build/src/models/AuthorizationData.js.map +1 -1
- package/build/src/models/CertificateFile.js +1 -1
- package/build/src/models/CertificateFile.js.map +1 -1
- package/build/src/models/ClientCertificate.js +1 -1
- package/build/src/models/ClientCertificate.js.map +1 -1
- package/build/src/models/Environment.js +1 -1
- package/build/src/models/Environment.js.map +1 -1
- package/build/src/models/Folder.js +1 -1
- package/build/src/models/Folder.js.map +1 -1
- package/build/src/models/HostRule.js +1 -1
- package/build/src/models/HostRule.js.map +1 -1
- package/build/src/models/HttpProject.js +1 -1
- package/build/src/models/HttpProject.js.map +1 -1
- package/build/src/models/Project.js +1 -1
- package/build/src/models/Project.js.map +1 -1
- package/build/src/models/ProjectFolder.js +1 -1
- package/build/src/models/ProjectFolder.js.map +1 -1
- package/build/src/models/ProjectRequest.js +1 -1
- package/build/src/models/ProjectRequest.js.map +1 -1
- package/build/src/models/ProjectSchema.js +1 -1
- package/build/src/models/ProjectSchema.js.map +1 -1
- package/build/src/models/store/DataFile.js +1 -1
- package/build/src/models/store/DataFile.js.map +1 -1
- package/build/src/models/store/File.js +1 -1
- package/build/src/models/store/File.js.map +1 -1
- package/build/src/models/store/Invitation.js +1 -1
- package/build/src/models/store/Invitation.js.map +1 -1
- package/build/src/models/store/Organization.js +1 -1
- package/build/src/models/store/Organization.js.map +1 -1
- package/build/src/models/store/Permission.d.ts +34 -0
- package/build/src/models/store/Permission.d.ts.map +1 -1
- package/build/src/models/store/Permission.js +28 -2
- package/build/src/models/store/Permission.js.map +1 -1
- package/build/src/models/store/UserIdentity.js +1 -1
- package/build/src/models/store/UserIdentity.js.map +1 -1
- package/build/src/models/transformers/ArcDexieTransformer.js +1 -1
- package/build/src/models/transformers/ArcDexieTransformer.js.map +1 -1
- package/build/src/models/transformers/ArcLegacyTransformer.js +1 -1
- package/build/src/models/transformers/ArcLegacyTransformer.js.map +1 -1
- package/build/src/models/transformers/ArcPouchTransformer.js +1 -1
- package/build/src/models/transformers/ArcPouchTransformer.js.map +1 -1
- package/build/src/models/transformers/PostmanV21Transformer.js +1 -1
- package/build/src/models/transformers/PostmanV21Transformer.js.map +1 -1
- package/build/src/models/transformers/PostmanV2Transformer.js +1 -1
- package/build/src/models/transformers/PostmanV2Transformer.js.map +1 -1
- package/build/src/nanoid.d.ts +10 -0
- package/build/src/nanoid.d.ts.map +1 -0
- package/build/src/nanoid.js +11 -0
- package/build/src/nanoid.js.map +1 -0
- package/build/src/patch/PatchClient.js +1 -1
- package/build/src/patch/PatchClient.js.map +1 -1
- package/build/src/sdk/FilesSdk.js +1 -1
- package/build/src/sdk/FilesSdk.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/data/models/example-generator-api.json +14 -14
- package/package.json +2 -1
- package/src/amf/AmfShapeGenerator.ts +1 -1
- package/src/amf/DataValueGenerator.ts +1 -1
- package/src/amf/models/AmfDataNode.ts +1 -1
- package/src/modeling/DataDomain.ts +1 -1
- package/src/modeling/DomainAssociation.ts +1 -1
- package/src/modeling/DomainEntity.ts +1 -1
- package/src/modeling/DomainFile.ts +1 -1
- package/src/modeling/DomainModel.ts +1 -1
- package/src/modeling/DomainNamespace.ts +1 -1
- package/src/modeling/DomainProperty.ts +1 -1
- package/src/modeling/amf/ShapeGenerator.ts +1 -1
- package/src/modeling/legacy/DataAssociation.ts +1 -1
- package/src/modeling/legacy/DataEntity.ts +1 -1
- package/src/modeling/legacy/DataEntityBuilder.ts +1 -1
- package/src/modeling/legacy/DataModel.ts +1 -1
- package/src/modeling/legacy/DataNamespace.ts +1 -1
- package/src/modeling/legacy/DataProperty.ts +1 -1
- package/src/models/AuthorizationData.ts +1 -1
- package/src/models/CertificateFile.ts +1 -1
- package/src/models/ClientCertificate.ts +1 -1
- package/src/models/Environment.ts +1 -1
- package/src/models/Folder.ts +1 -1
- package/src/models/HostRule.ts +1 -1
- package/src/models/HttpProject.ts +1 -1
- package/src/models/Project.ts +1 -1
- package/src/models/ProjectFolder.ts +1 -1
- package/src/models/ProjectRequest.ts +1 -1
- package/src/models/ProjectSchema.ts +1 -1
- package/src/models/store/DataFile.ts +1 -1
- package/src/models/store/File.ts +1 -1
- package/src/models/store/Invitation.ts +1 -1
- package/src/models/store/Organization.ts +1 -1
- package/src/models/store/Permission.ts +59 -2
- package/src/models/store/UserIdentity.ts +1 -1
- package/src/models/transformers/ArcDexieTransformer.ts +1 -1
- package/src/models/transformers/ArcLegacyTransformer.ts +1 -1
- package/src/models/transformers/ArcPouchTransformer.ts +1 -1
- package/src/models/transformers/PostmanV21Transformer.ts +1 -1
- package/src/models/transformers/PostmanV2Transformer.ts +1 -1
- package/src/nanoid.ts +10 -0
- package/src/patch/PatchClient.ts +1 -1
- package/src/sdk/FilesSdk.ts +1 -1
- package/tests/unit/modeling/domain_file.spec.ts +4 -0
- package/tests/unit/models/File/new.spec.ts +2 -0
- package/tests/unit/models/File/toJSON.spec.ts +2 -0
- package/tests/unit/models/Folder/create.spec.ts +4 -0
- package/tests/unit/models/Permission/all.spec.ts +88 -0
- package/tests/unit/models/Project/create.spec.ts +4 -0
- package/tests/unit/runtime/proxy/HttpProjectProxy.spec.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Organization.js","sourceRoot":"","sources":["../../../../src/models/store/Organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Organization.js","sourceRoot":"","sources":["../../../../src/models/store/Organization.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from '../../nanoid.js'\nimport type { IDeletion } from './Deletion.js'\nimport { OrganizationKind } from '../kinds.js'\n\nexport type UserOrganizationGrantType = 'owner' | 'manager' | 'editor' | 'viewer'\n\n/**\n * In the system the user identity represents registration information associated with a specific identity provider.\n * This association allows the user to use different identity providers that map to the same user, as long as the\n * email stays consistent.\n */\nexport interface IOrganization {\n kind: typeof OrganizationKind\n /**\n * The database ID\n */\n key: string\n /**\n * The organization name\n */\n name: string\n /**\n * The key of the user that created the organization.\n */\n createdBy: string\n /**\n * The timestamp when the organization was created.\n */\n createdDate: number\n /**\n * Whether the organization object is deleted.\n */\n deleted?: boolean\n /**\n * The information about the delete information.\n * Always set when the `delete` is true.\n */\n deletedInfo?: IDeletion\n /**\n * The grant type to the organization the **current user** has.\n * By nature, it's a dynamic field populated by the data store.\n */\n grantType: UserOrganizationGrantType\n}\n\nexport class Organization implements IOrganization {\n kind: typeof OrganizationKind = OrganizationKind\n key = ''\n name = ''\n createdBy = ''\n createdDate = 0\n deleted = false\n deletedInfo?: IDeletion\n grantType: UserOrganizationGrantType = 'viewer'\n\n constructor(input?: string | IOrganization) {\n let init: IOrganization\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: OrganizationKind,\n key: nanoid(),\n name: '',\n createdBy: '',\n createdDate: Date.now(),\n deleted: false,\n grantType: 'viewer',\n }\n }\n this.new(init)\n }\n\n new(init: IOrganization): void {\n if (!Organization.isOrganization(init)) {\n throw new Error(`Not an Organization.`)\n }\n const {\n key = nanoid(),\n name,\n createdBy,\n createdDate = Date.now(),\n deleted = false,\n deletedInfo,\n grantType = 'viewer',\n } = init\n this.kind = OrganizationKind\n this.key = key\n this.name = name\n this.createdBy = createdBy\n this.createdDate = createdDate\n this.deleted = deleted\n this.grantType = grantType\n if (deletedInfo) {\n this.deletedInfo = deletedInfo\n } else {\n this.deletedInfo = undefined\n }\n }\n\n /**\n * Checks whether the input is a definition of an user organization.\n */\n static isOrganization(input: unknown): boolean {\n const typed = input as IOrganization\n if (!input || typed.kind !== OrganizationKind) {\n return false\n }\n return true\n }\n\n toJSON(): IOrganization {\n const result: IOrganization = {\n kind: OrganizationKind,\n key: this.key,\n name: this.name,\n createdBy: this.createdBy,\n createdDate: this.createdDate,\n deleted: this.deleted,\n grantType: this.grantType,\n }\n if (this.deletedInfo) {\n result.deletedInfo = this.deletedInfo\n }\n return result\n }\n}\n"]}
|
|
@@ -7,6 +7,12 @@ export type PermissionType = 'user' | 'group' | 'organization';
|
|
|
7
7
|
* - `reader`: Can only view the item.
|
|
8
8
|
*/
|
|
9
9
|
export type PermissionRole = 'owner' | 'reader' | 'commenter' | 'writer';
|
|
10
|
+
/**
|
|
11
|
+
* A predefined set of rules that can be used to determine the source of the permission.
|
|
12
|
+
* - `direct_user_grant`: The permission is granted directly to the user.
|
|
13
|
+
* - `creator_default_owner`: The permission is granted to the creator of the item as the default owner.
|
|
14
|
+
*/
|
|
15
|
+
export type PermissionSourceRule = 'direct_user_grant' | 'creator_default_owner' | 'parent_owner_editor_rule';
|
|
10
16
|
interface IBasePermission {
|
|
11
17
|
/**
|
|
12
18
|
* The type of the permission.
|
|
@@ -49,6 +55,20 @@ interface IBasePermission {
|
|
|
49
55
|
* The store id of the user that added this permission.
|
|
50
56
|
*/
|
|
51
57
|
addingUser: string;
|
|
58
|
+
/**
|
|
59
|
+
* The depth of the permission in the hierarchy.
|
|
60
|
+
* When `0` it means that the permissions do not use inheritance.
|
|
61
|
+
* When `1` it means the permission is set on the item itself.
|
|
62
|
+
* When `2` it means the permission is set on the parent item.
|
|
63
|
+
* When `3` it means the permission is set on the grandparent item, and so on.
|
|
64
|
+
* This is used to determine the depth of the permission in the hierarchy.
|
|
65
|
+
*/
|
|
66
|
+
depth: number;
|
|
67
|
+
/**
|
|
68
|
+
* The source rule of the permission.
|
|
69
|
+
* This is used to determine how the permission was granted.
|
|
70
|
+
*/
|
|
71
|
+
sourceRule: PermissionSourceRule;
|
|
52
72
|
}
|
|
53
73
|
/**
|
|
54
74
|
* A schema describing a permission to a store object.
|
|
@@ -109,6 +129,20 @@ export declare class Permission {
|
|
|
109
129
|
* The store id of the entity that is being granted the permission.
|
|
110
130
|
*/
|
|
111
131
|
itemId: string;
|
|
132
|
+
/**
|
|
133
|
+
* The depth of the permission in the hierarchy.
|
|
134
|
+
* When `0` it means that the permissions do not use inheritance.
|
|
135
|
+
* When `1` it means the permission is set on the item itself.
|
|
136
|
+
* When `2` it means the permission is set on the parent item.
|
|
137
|
+
* When `3` it means the permission is set on the grandparent item, and so on.
|
|
138
|
+
* This is used to determine the depth of the permission in the hierarchy.
|
|
139
|
+
*/
|
|
140
|
+
depth: number;
|
|
141
|
+
/**
|
|
142
|
+
* The source rule of the permission.
|
|
143
|
+
* This is used to determine how the permission was granted.
|
|
144
|
+
*/
|
|
145
|
+
sourceRule: PermissionSourceRule;
|
|
112
146
|
/**
|
|
113
147
|
* Creates a Permission object for a user.
|
|
114
148
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Permission.d.ts","sourceRoot":"","sources":["../../../../src/models/store/Permission.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,oBAAoB,CAAA;AAErC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,CAAA;AAC9D;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"Permission.d.ts","sourceRoot":"","sources":["../../../../src/models/store/Permission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { nanoid } from 'nanoid';
|
|
1
|
+
import { nanoid } from '../../nanoid.js';
|
|
2
2
|
export const Kind = 'Core#Permission';
|
|
3
3
|
const orderedRoles = ['reader', 'commenter', 'writer', 'owner'];
|
|
4
4
|
export class Permission {
|
|
@@ -49,6 +49,20 @@ export class Permission {
|
|
|
49
49
|
* The store id of the entity that is being granted the permission.
|
|
50
50
|
*/
|
|
51
51
|
itemId = '';
|
|
52
|
+
/**
|
|
53
|
+
* The depth of the permission in the hierarchy.
|
|
54
|
+
* When `0` it means that the permissions do not use inheritance.
|
|
55
|
+
* When `1` it means the permission is set on the item itself.
|
|
56
|
+
* When `2` it means the permission is set on the parent item.
|
|
57
|
+
* When `3` it means the permission is set on the grandparent item, and so on.
|
|
58
|
+
* This is used to determine the depth of the permission in the hierarchy.
|
|
59
|
+
*/
|
|
60
|
+
depth = 0;
|
|
61
|
+
/**
|
|
62
|
+
* The source rule of the permission.
|
|
63
|
+
* This is used to determine how the permission was granted.
|
|
64
|
+
*/
|
|
65
|
+
sourceRule = 'direct_user_grant';
|
|
52
66
|
/**
|
|
53
67
|
* Creates a Permission object for a user.
|
|
54
68
|
*
|
|
@@ -66,6 +80,8 @@ export class Permission {
|
|
|
66
80
|
role,
|
|
67
81
|
type: 'user',
|
|
68
82
|
addingUser,
|
|
83
|
+
depth: 0,
|
|
84
|
+
sourceRule: 'direct_user_grant',
|
|
69
85
|
};
|
|
70
86
|
return new Permission(init);
|
|
71
87
|
}
|
|
@@ -86,6 +102,8 @@ export class Permission {
|
|
|
86
102
|
role,
|
|
87
103
|
type: 'group',
|
|
88
104
|
addingUser,
|
|
105
|
+
depth: 0,
|
|
106
|
+
sourceRule: 'direct_user_grant',
|
|
89
107
|
};
|
|
90
108
|
return new Permission(init);
|
|
91
109
|
}
|
|
@@ -105,6 +123,8 @@ export class Permission {
|
|
|
105
123
|
role,
|
|
106
124
|
type: 'organization',
|
|
107
125
|
addingUser,
|
|
126
|
+
depth: 0,
|
|
127
|
+
sourceRule: 'direct_user_grant',
|
|
108
128
|
};
|
|
109
129
|
return new Permission(init);
|
|
110
130
|
}
|
|
@@ -135,6 +155,8 @@ export class Permission {
|
|
|
135
155
|
role: 'reader',
|
|
136
156
|
type: 'user',
|
|
137
157
|
addingUser: '',
|
|
158
|
+
depth: 0,
|
|
159
|
+
sourceRule: 'direct_user_grant',
|
|
138
160
|
};
|
|
139
161
|
}
|
|
140
162
|
this.new(init);
|
|
@@ -143,7 +165,7 @@ export class Permission {
|
|
|
143
165
|
if (!Permission.isPermission(init)) {
|
|
144
166
|
throw new Error(`Not a permission.`);
|
|
145
167
|
}
|
|
146
|
-
const { key = nanoid(), granteeId, role, type, displayName, expirationTime, addingUser, itemId } = init;
|
|
168
|
+
const { key = nanoid(), granteeId, role, type, displayName, expirationTime, addingUser, itemId, depth, sourceRule, } = init;
|
|
147
169
|
this.kind = Kind;
|
|
148
170
|
this.key = key;
|
|
149
171
|
this.granteeId = granteeId;
|
|
@@ -151,6 +173,8 @@ export class Permission {
|
|
|
151
173
|
this.role = role;
|
|
152
174
|
this.type = type;
|
|
153
175
|
this.addingUser = addingUser;
|
|
176
|
+
this.depth = depth || 0;
|
|
177
|
+
this.sourceRule = sourceRule || 'direct_user_grant';
|
|
154
178
|
if (displayName) {
|
|
155
179
|
this.displayName = displayName;
|
|
156
180
|
}
|
|
@@ -215,6 +239,8 @@ export class Permission {
|
|
|
215
239
|
addingUser: this.addingUser,
|
|
216
240
|
granteeId: this.granteeId,
|
|
217
241
|
itemId: this.itemId,
|
|
242
|
+
depth: this.depth,
|
|
243
|
+
sourceRule: this.sourceRule,
|
|
218
244
|
};
|
|
219
245
|
if (this.displayName) {
|
|
220
246
|
result.displayName = this.displayName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Permission.js","sourceRoot":"","sources":["../../../../src/models/store/Permission.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid'\n\nexport const Kind = 'Core#Permission'\n\nexport type PermissionType = 'user' | 'group' | 'organization'\n/**\n * - `owner`: Full control over the item.\n * - `writer`: Can view, comment, and edit the item.\n * - `commenter`: Can view and comment on the item.\n * - `reader`: Can only view the item.\n */\nexport type PermissionRole = 'owner' | 'reader' | 'commenter' | 'writer'\nconst orderedRoles: PermissionRole[] = ['reader', 'commenter', 'writer', 'owner']\n\ninterface IBasePermission {\n /**\n * The type of the permission.\n *\n * - `user` can access the file by a specific user\n * - `group` can access the file by a group of users\n * - `organization` the object can be searched by anyone within the organization.\n */\n type: PermissionType\n /**\n * It represents the ID of the entity (user, group,or organization)\n * that is being granted the permission on a file or folder.\n */\n granteeId: string\n /**\n * The store id of the entity that is being granted the permission.\n */\n itemId: string\n /**\n * The role granted by this permission.\n */\n role: PermissionRole\n /**\n * The \"pretty\" name to render with the permission.\n *\n * - `user` type - user's full name\n * - `group` type - the name of the group\n * - `organization` type - no render name\n */\n displayName?: string\n /**\n * Optional expiration date of the permission. This is the timestamp when the permission expires.\n * When creating / updating the permission the expiration date must:\n *\n * - be used on a user or a group\n * - the time must be in the future\n */\n expirationTime?: number\n /**\n * The store id of the user that added this permission.\n */\n addingUser: string\n}\n\n/**\n * A schema describing a permission to a store object.\n */\nexport interface IPermission extends IBasePermission {\n kind: typeof Kind\n /**\n * The data store key of the permission.\n * This property is generated by the store and is not writable.\n */\n key: string\n}\n\nexport class Permission {\n kind = Kind\n /**\n * The data store key of the permission.\n * This property is generated by the store and is not writable.\n */\n key = ''\n /**\n * The type of the permission.\n *\n * - `user` can access the file by a specific user\n * - `group` can access the file by a group of users\n * - - `organization` the object can be searched by anyone within the organization.\n */\n type: PermissionType = 'user'\n /**\n * It represents the ID of the entity (user, group, or organization)\n * that is being granted the permission on a file or folder.\n */\n granteeId = ''\n /**\n * The role granted by this permission.\n */\n role: PermissionRole = 'reader'\n /**\n * The \"pretty\" name to render with the permission.\n *\n * - `user` type - user's full name\n * - `group` type - the name of the group\n * - `organization` type - the organization name.\n */\n displayName?: string\n /**\n * Optional expiration date of the permission. This is the timestamp when the permission expires.\n * When creating / updating the permission the expiration date must:\n *\n * - be used on a user or a group\n * - the time must be in the future\n */\n expirationTime?: number\n\n /**\n * The store id of the user that added this permission.\n */\n addingUser = ''\n\n /**\n * The store id of the entity that is being granted the permission.\n */\n itemId = ''\n\n /**\n * Creates a Permission object for a user.\n *\n * @param role The user role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param user The user id that has the role.\n * @param addingUser The key of the user that created this permission\n */\n static fromUserRole(role: PermissionRole, itemId: string, user: string, addingUser: string): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: user,\n role,\n type: 'user',\n addingUser,\n }\n return new Permission(init)\n }\n\n /**\n * Creates a Permission object for a group.\n *\n * @param role The group role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param group The group id that has the role.\n * @param addingUser The key of the user that created this permission\n */\n static fromGroupRole(role: PermissionRole, itemId: string, group: string, addingUser: string): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: group,\n role,\n type: 'group',\n addingUser,\n }\n return new Permission(init)\n }\n\n /**\n * Creates a Permission object for a group.\n *\n * @param role The group role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param addingUser The key of the user that created this permission\n */\n static fromOrganizationRole(\n role: PermissionRole,\n itemId: string,\n organizationId: string,\n addingUser: string\n ): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: organizationId,\n role,\n type: 'organization',\n addingUser,\n }\n return new Permission(init)\n }\n\n /**\n * Creates a permission object from other than key and kind values.\n */\n static fromValues(init: IBasePermission): Permission {\n return new Permission({\n ...init,\n key: nanoid(),\n kind: Kind,\n })\n }\n\n constructor(input?: string | IPermission) {\n let init: IPermission\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n granteeId: '',\n itemId: '',\n role: 'reader',\n type: 'user',\n addingUser: '',\n }\n }\n this.new(init)\n }\n\n new(init: IPermission): void {\n if (!Permission.isPermission(init)) {\n throw new Error(`Not a permission.`)\n }\n const { key = nanoid(), granteeId, role, type, displayName, expirationTime, addingUser, itemId } = init\n this.kind = Kind\n this.key = key\n this.granteeId = granteeId\n this.itemId = itemId\n this.role = role\n this.type = type\n this.addingUser = addingUser\n if (displayName) {\n this.displayName = displayName\n } else {\n this.displayName = undefined\n }\n if (typeof expirationTime === 'number') {\n this.expirationTime = expirationTime\n } else {\n this.expirationTime = undefined\n }\n }\n\n static isPermission(input: unknown): boolean {\n const typed = input as IPermission\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n /**\n * Checks whether the current user role meets the minimum required role.\n *\n * @param minimumLevel The minimum requested role\n * @param currentRole The user role. When not set it always returns false.\n * @returns True if the `currentRole` is at least the `minimumRole`\n */\n static hasRole(minimumLevel: PermissionRole, currentRole?: PermissionRole): boolean {\n if (!currentRole) {\n return false\n }\n const currentAccessIndex = orderedRoles.indexOf(currentRole)\n const requestedAccessIndex = orderedRoles.indexOf(minimumLevel)\n // the current must be at least at the index of requested.\n return currentAccessIndex >= requestedAccessIndex\n }\n\n /**\n * Checks if role1 is higher than role2 in the permission hierarchy.\n *\n * @param role1 The first role to compare.\n * @param role2 The second role to compare.\n * @returns `true` if `role1` is higher than `role2`, `false` otherwise.\n */\n static isHigherRole(role1: PermissionRole, role2: PermissionRole): boolean {\n const role1Index = orderedRoles.indexOf(role1)\n const role2Index = orderedRoles.indexOf(role2)\n return role1Index > role2Index\n }\n\n /**\n * Link to the `Permission.hasRole(minimumLevel, currentRole)`.\n * @see {@link Permission.hasRole}\n */\n hasRole(minimumLevel: PermissionRole, currentRole: PermissionRole): boolean {\n return Permission.hasRole(minimumLevel, currentRole)\n }\n\n toJSON(): IPermission {\n const result: IPermission = {\n kind: Kind,\n key: this.key,\n role: this.role,\n type: this.type,\n addingUser: this.addingUser,\n granteeId: this.granteeId,\n itemId: this.itemId,\n }\n if (this.displayName) {\n result.displayName = this.displayName\n }\n if (this.expirationTime) {\n result.expirationTime = this.expirationTime\n }\n return result\n }\n}\n\n/**\n * This is used in the communication with the backend to add/change user's access to the resource.\n */\nexport interface IAccessOperation {\n /**\n * The user, group, or organization id that this permission affects.\n */\n id: string\n /**\n * The permission type: user, group, or organization\n */\n type: PermissionType\n}\n\ninterface IUpdatingOperation {\n /**\n * The level that the user or the group has access to:\n * - owner\n * - reader\n * - commenter\n * - writer\n */\n value: PermissionRole\n /**\n * The timestamp when the permission expires.\n */\n expirationTime?: number\n}\n\nexport interface IAccessAddOperation extends IAccessOperation, IUpdatingOperation {\n op: 'add'\n}\n\nexport interface IAccessRemoveOperation extends IAccessOperation {\n op: 'remove'\n}\n\nexport interface IAccessUpdateOperation extends IAccessOperation, IUpdatingOperation {\n op: 'update'\n /**\n * The ID of the permission to update.\n */\n id: string\n}\n\nexport type AccessOperation = IAccessAddOperation | IAccessRemoveOperation | IAccessUpdateOperation\n"]}
|
|
1
|
+
{"version":3,"file":"Permission.js","sourceRoot":"","sources":["../../../../src/models/store/Permission.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from '../../nanoid.js'\n\nexport const Kind = 'Core#Permission'\n\nexport type PermissionType = 'user' | 'group' | 'organization'\n/**\n * - `owner`: Full control over the item.\n * - `writer`: Can view, comment, and edit the item.\n * - `commenter`: Can view and comment on the item.\n * - `reader`: Can only view the item.\n */\nexport type PermissionRole = 'owner' | 'reader' | 'commenter' | 'writer'\nconst orderedRoles: PermissionRole[] = ['reader', 'commenter', 'writer', 'owner']\n/**\n * A predefined set of rules that can be used to determine the source of the permission.\n * - `direct_user_grant`: The permission is granted directly to the user.\n * - `creator_default_owner`: The permission is granted to the creator of the item as the default owner.\n */\nexport type PermissionSourceRule = 'direct_user_grant' | 'creator_default_owner' | 'parent_owner_editor_rule'\n\ninterface IBasePermission {\n /**\n * The type of the permission.\n *\n * - `user` can access the file by a specific user\n * - `group` can access the file by a group of users\n * - `organization` the object can be searched by anyone within the organization.\n */\n type: PermissionType\n /**\n * It represents the ID of the entity (user, group,or organization)\n * that is being granted the permission on a file or folder.\n */\n granteeId: string\n /**\n * The store id of the entity that is being granted the permission.\n */\n itemId: string\n /**\n * The role granted by this permission.\n */\n role: PermissionRole\n /**\n * The \"pretty\" name to render with the permission.\n *\n * - `user` type - user's full name\n * - `group` type - the name of the group\n * - `organization` type - no render name\n */\n displayName?: string\n /**\n * Optional expiration date of the permission. This is the timestamp when the permission expires.\n * When creating / updating the permission the expiration date must:\n *\n * - be used on a user or a group\n * - the time must be in the future\n */\n expirationTime?: number\n /**\n * The store id of the user that added this permission.\n */\n addingUser: string\n /**\n * The depth of the permission in the hierarchy.\n * When `0` it means that the permissions do not use inheritance.\n * When `1` it means the permission is set on the item itself.\n * When `2` it means the permission is set on the parent item.\n * When `3` it means the permission is set on the grandparent item, and so on.\n * This is used to determine the depth of the permission in the hierarchy.\n */\n depth: number\n /**\n * The source rule of the permission.\n * This is used to determine how the permission was granted.\n */\n sourceRule: PermissionSourceRule\n}\n\n/**\n * A schema describing a permission to a store object.\n */\nexport interface IPermission extends IBasePermission {\n kind: typeof Kind\n /**\n * The data store key of the permission.\n * This property is generated by the store and is not writable.\n */\n key: string\n}\n\nexport class Permission {\n kind = Kind\n /**\n * The data store key of the permission.\n * This property is generated by the store and is not writable.\n */\n key = ''\n /**\n * The type of the permission.\n *\n * - `user` can access the file by a specific user\n * - `group` can access the file by a group of users\n * - - `organization` the object can be searched by anyone within the organization.\n */\n type: PermissionType = 'user'\n /**\n * It represents the ID of the entity (user, group, or organization)\n * that is being granted the permission on a file or folder.\n */\n granteeId = ''\n /**\n * The role granted by this permission.\n */\n role: PermissionRole = 'reader'\n /**\n * The \"pretty\" name to render with the permission.\n *\n * - `user` type - user's full name\n * - `group` type - the name of the group\n * - `organization` type - the organization name.\n */\n displayName?: string\n /**\n * Optional expiration date of the permission. This is the timestamp when the permission expires.\n * When creating / updating the permission the expiration date must:\n *\n * - be used on a user or a group\n * - the time must be in the future\n */\n expirationTime?: number\n\n /**\n * The store id of the user that added this permission.\n */\n addingUser = ''\n\n /**\n * The store id of the entity that is being granted the permission.\n */\n itemId = ''\n /**\n * The depth of the permission in the hierarchy.\n * When `0` it means that the permissions do not use inheritance.\n * When `1` it means the permission is set on the item itself.\n * When `2` it means the permission is set on the parent item.\n * When `3` it means the permission is set on the grandparent item, and so on.\n * This is used to determine the depth of the permission in the hierarchy.\n */\n depth = 0\n /**\n * The source rule of the permission.\n * This is used to determine how the permission was granted.\n */\n sourceRule: PermissionSourceRule = 'direct_user_grant'\n\n /**\n * Creates a Permission object for a user.\n *\n * @param role The user role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param user The user id that has the role.\n * @param addingUser The key of the user that created this permission\n */\n static fromUserRole(role: PermissionRole, itemId: string, user: string, addingUser: string): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: user,\n role,\n type: 'user',\n addingUser,\n depth: 0,\n sourceRule: 'direct_user_grant',\n }\n return new Permission(init)\n }\n\n /**\n * Creates a Permission object for a group.\n *\n * @param role The group role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param group The group id that has the role.\n * @param addingUser The key of the user that created this permission\n */\n static fromGroupRole(role: PermissionRole, itemId: string, group: string, addingUser: string): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: group,\n role,\n type: 'group',\n addingUser,\n depth: 0,\n sourceRule: 'direct_user_grant',\n }\n return new Permission(init)\n }\n\n /**\n * Creates a Permission object for a group.\n *\n * @param role The group role to set.\n * @param itemId The store id of the entity that is being granted the permission.\n * @param addingUser The key of the user that created this permission\n */\n static fromOrganizationRole(\n role: PermissionRole,\n itemId: string,\n organizationId: string,\n addingUser: string\n ): Permission {\n const init: IPermission = {\n key: nanoid(),\n kind: Kind,\n itemId,\n granteeId: organizationId,\n role,\n type: 'organization',\n addingUser,\n depth: 0,\n sourceRule: 'direct_user_grant',\n }\n return new Permission(init)\n }\n\n /**\n * Creates a permission object from other than key and kind values.\n */\n static fromValues(init: IBasePermission): Permission {\n return new Permission({\n ...init,\n key: nanoid(),\n kind: Kind,\n })\n }\n\n constructor(input?: string | IPermission) {\n let init: IPermission\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n granteeId: '',\n itemId: '',\n role: 'reader',\n type: 'user',\n addingUser: '',\n depth: 0,\n sourceRule: 'direct_user_grant',\n }\n }\n this.new(init)\n }\n\n new(init: IPermission): void {\n if (!Permission.isPermission(init)) {\n throw new Error(`Not a permission.`)\n }\n const {\n key = nanoid(),\n granteeId,\n role,\n type,\n displayName,\n expirationTime,\n addingUser,\n itemId,\n depth,\n sourceRule,\n } = init\n this.kind = Kind\n this.key = key\n this.granteeId = granteeId\n this.itemId = itemId\n this.role = role\n this.type = type\n this.addingUser = addingUser\n this.depth = depth || 0\n this.sourceRule = sourceRule || 'direct_user_grant'\n if (displayName) {\n this.displayName = displayName\n } else {\n this.displayName = undefined\n }\n if (typeof expirationTime === 'number') {\n this.expirationTime = expirationTime\n } else {\n this.expirationTime = undefined\n }\n }\n\n static isPermission(input: unknown): boolean {\n const typed = input as IPermission\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n /**\n * Checks whether the current user role meets the minimum required role.\n *\n * @param minimumLevel The minimum requested role\n * @param currentRole The user role. When not set it always returns false.\n * @returns True if the `currentRole` is at least the `minimumRole`\n */\n static hasRole(minimumLevel: PermissionRole, currentRole?: PermissionRole): boolean {\n if (!currentRole) {\n return false\n }\n const currentAccessIndex = orderedRoles.indexOf(currentRole)\n const requestedAccessIndex = orderedRoles.indexOf(minimumLevel)\n // the current must be at least at the index of requested.\n return currentAccessIndex >= requestedAccessIndex\n }\n\n /**\n * Checks if role1 is higher than role2 in the permission hierarchy.\n *\n * @param role1 The first role to compare.\n * @param role2 The second role to compare.\n * @returns `true` if `role1` is higher than `role2`, `false` otherwise.\n */\n static isHigherRole(role1: PermissionRole, role2: PermissionRole): boolean {\n const role1Index = orderedRoles.indexOf(role1)\n const role2Index = orderedRoles.indexOf(role2)\n return role1Index > role2Index\n }\n\n /**\n * Link to the `Permission.hasRole(minimumLevel, currentRole)`.\n * @see {@link Permission.hasRole}\n */\n hasRole(minimumLevel: PermissionRole, currentRole: PermissionRole): boolean {\n return Permission.hasRole(minimumLevel, currentRole)\n }\n\n toJSON(): IPermission {\n const result: IPermission = {\n kind: Kind,\n key: this.key,\n role: this.role,\n type: this.type,\n addingUser: this.addingUser,\n granteeId: this.granteeId,\n itemId: this.itemId,\n depth: this.depth,\n sourceRule: this.sourceRule,\n }\n if (this.displayName) {\n result.displayName = this.displayName\n }\n if (this.expirationTime) {\n result.expirationTime = this.expirationTime\n }\n return result\n }\n}\n\n/**\n * This is used in the communication with the backend to add/change user's access to the resource.\n */\nexport interface IAccessOperation {\n /**\n * The user, group, or organization id that this permission affects.\n */\n id: string\n /**\n * The permission type: user, group, or organization\n */\n type: PermissionType\n}\n\ninterface IUpdatingOperation {\n /**\n * The level that the user or the group has access to:\n * - owner\n * - reader\n * - commenter\n * - writer\n */\n value: PermissionRole\n /**\n * The timestamp when the permission expires.\n */\n expirationTime?: number\n}\n\nexport interface IAccessAddOperation extends IAccessOperation, IUpdatingOperation {\n op: 'add'\n}\n\nexport interface IAccessRemoveOperation extends IAccessOperation {\n op: 'remove'\n}\n\nexport interface IAccessUpdateOperation extends IAccessOperation, IUpdatingOperation {\n op: 'update'\n /**\n * The ID of the permission to update.\n */\n id: string\n}\n\nexport type AccessOperation = IAccessAddOperation | IAccessRemoveOperation | IAccessUpdateOperation\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserIdentity.js","sourceRoot":"","sources":["../../../../src/models/store/UserIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"UserIdentity.js","sourceRoot":"","sources":["../../../../src/models/store/UserIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAA;AAuCvC,MAAM,OAAO,YAAY;IACvB,IAAI,GAAgB,IAAI,CAAA;IACxB,GAAG,GAAG,EAAE,CAAA;IACR,MAAM,GAAG,EAAE,CAAA;IACX,QAAQ,GAAa,QAAQ,CAAA;IAC7B,UAAU,GAAG,EAAE,CAAA;IACf,aAAa,GAAG,KAAK,CAAA;IACrB,UAAU,CAAS;IAEnB,YAAY,KAA8B;QACxC,IAAI,IAAmB,CAAA;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,MAAM,EAAE;gBACb,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,EAAE;gBACd,aAAa,EAAE,KAAK;aACrB,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED,GAAG,CAAC,IAAmB;QACrB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;QACxF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,KAAc;QAClC,MAAM,KAAK,GAAG,KAAsB,CAAA;QACpC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAkB;YAC5B,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAA;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACrC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { nanoid } from '../../nanoid.js'\n\nexport const Kind = 'Core#UserIdentity'\n\ntype Provider = 'google'\n\n/**\n * In the system the user identity represents registration information associated with a specific identity provider.\n * This association allows the user to use different identity providers that map to the same user, as long as the\n * email stays consistent.\n */\nexport interface IUserIdentity {\n kind: typeof Kind\n /**\n * The database ID\n */\n key: string\n /**\n * The related user id.\n */\n userId: string\n /**\n * The identity provider.\n */\n provider: Provider\n /**\n * The provider's unique ID.\n * This allows to recognize a returning user.\n */\n providerId: string\n /**\n * `true`, if the provider has verified the email address.\n */\n emailVerified: boolean\n /**\n * If present, the host domain of the user's GSuite email address.\n * Google specific.\n */\n hostDomain?: string\n}\n\nexport class UserIdentity implements IUserIdentity {\n kind: typeof Kind = Kind\n key = ''\n userId = ''\n provider: Provider = 'google'\n providerId = ''\n emailVerified = false\n hostDomain?: string\n\n constructor(input?: string | IUserIdentity) {\n let init: IUserIdentity\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n userId: '',\n provider: 'google',\n providerId: '',\n emailVerified: false,\n }\n }\n this.new(init)\n }\n\n new(init: IUserIdentity): void {\n if (!UserIdentity.isUserIdentity(init)) {\n throw new Error(`Not a UserIdentity.`)\n }\n const { key = nanoid(), emailVerified, provider, providerId, userId, hostDomain } = init\n this.kind = Kind\n this.key = key\n this.provider = provider\n this.providerId = providerId\n this.userId = userId\n this.emailVerified = emailVerified\n if (hostDomain) {\n this.hostDomain = hostDomain\n } else {\n this.hostDomain = undefined\n }\n }\n\n static isUserIdentity(input: unknown): boolean {\n const typed = input as IUserIdentity\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n toJSON(): IUserIdentity {\n const result: IUserIdentity = {\n kind: Kind,\n key: this.key,\n provider: this.provider,\n providerId: this.providerId,\n userId: this.userId,\n emailVerified: this.emailVerified,\n }\n if (this.hostDomain) {\n result.hostDomain = this.hostDomain\n }\n return result\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcDexieTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcDexieTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid'\nimport { BaseTransformer, dataValue } from './BaseTransformer.js'\nimport { Creator, Browser, Page, Entry, Header } from './har.js'\nimport {\n ArcExportObject,\n ExportArcProjects,\n ExportArcSavedRequest,\n ExportArcHistoryRequest,\n} from '../legacy/DataExport.js'\n\ninterface DexieExport {\n kind: string\n createdAt: string\n version: string\n requests?: DexieRequest[]\n projects?: DexieProject[]\n}\ninterface DexieRequest {\n order: number\n url: string\n method: string\n type: string\n updateTime: number\n id: string\n kind: string\n har: DexieHar\n _har?: DexieHar\n name?: string\n _name?: string\n referenceEntry?: number\n driveId?: string\n}\n\ninterface DexieHar {\n comment: string\n version: string\n creator: Creator\n browser: Browser\n pages: Page[]\n entries: Entry[]\n}\n\ninterface DexieProject {\n order: number\n created: number\n updateTime: number\n requestIds: string[]\n name: string\n kind: string\n id: number\n}\n\ninterface ProjectItem {\n updateData: string[]\n legacyProject: ExportArcProjects\n}\n\ninterface RequestProcessItem {\n origin: string\n request: ExportArcSavedRequest | ExportArcHistoryRequest\n}\n\ninterface ProcessedRequests {\n saved: RequestProcessItem[]\n history: RequestProcessItem[]\n}\n\n/**\n * Transforms Dexie system (legacy system) into the legacy PouchDB system.\n */\nexport class ArcDexieTransformer extends BaseTransformer {\n /**\n * Transforms legacy ARC export object based on Dexie data store\n * into current export data model.\n *\n * @returns New data model object.\n */\n async transform(): Promise<ArcExportObject> {\n const raw = this[dataValue] as DexieExport\n\n const requests = await this.parseRequests(raw.requests || [])\n const pData = this.processProjects(raw.projects || [])\n const data = this.associateProjects(requests, pData)\n const result = {\n createdAt: new Date().toISOString(),\n version: 'unknown',\n kind: 'ARC#Import',\n requests: data.saved ? data.saved.map((item) => item.request as ExportArcSavedRequest) : [],\n projects: pData ? pData.map((item) => item.legacyProject as ExportArcProjects) : [],\n history: data.history ? data.history.map((item) => item.request as ExportArcHistoryRequest) : [],\n }\n // TODO: handle history data.\n return result\n }\n\n /**\n * In new structure projects do not have a reference to request ids. It's\n * the other way around in previous system.\n * It's a bad pattern for object stores but it must suffice for now.\n *\n * @param projects List of projects in the import.\n * @returns Preprocessed projects array\n */\n processProjects(projects: DexieProject[]): ProjectItem[] {\n if (!projects || !projects.length) {\n return []\n }\n const list: ProjectItem[] = []\n projects.forEach((item) => {\n const result = this.processProjectItem(item)\n if (result) {\n list.push(result)\n }\n })\n return list\n }\n\n /**\n * Creates a pre-processed project data.\n *\n * @param item Project object from the Dexie import.\n * @return Pre-processed project object with project store data\n * under the `legacyProject` property and list of requests IDs under\n * the `updateData` property.\n */\n processProjectItem(item: DexieProject): ProjectItem | undefined {\n if (!item.requestIds || !item.requestIds.length) {\n return undefined\n }\n return {\n updateData: item.requestIds,\n legacyProject: {\n kind: 'ARC#Project',\n key: nanoid(),\n name: item.name,\n order: item.order,\n updated: item.updateTime,\n created: item.created,\n },\n }\n }\n\n /**\n * History is placed in its own store, saved items has own store.\n * Har data are not imported this way as user cannot actually use it.\n *\n * @param requests List of requests objects from the import file.\n * @returns A promise resolved when import is ready.\n */\n async parseRequests(requests: DexieRequest[]): Promise<ProcessedRequests> {\n const data = await this.parseRequestsDeffered(requests)\n // remove duplicates from the history.\n const ids: string[] = []\n data.history = data.history.filter((item) => {\n if (ids.indexOf(item.request.key) === -1) {\n ids[ids.length] = item.request.key\n return true\n }\n return false\n })\n return data\n }\n\n /**\n * Parses the request data.\n * It takes only portion of the data to parse so the script release the\n * event loop and ANR screen won't appear.\n *\n * @param requests List of requests from the import.\n * @param saved Final list of saved requests\n * @param history Final list of history items.\n */\n async parseRequestsDeffered(\n requests: DexieRequest[],\n saved: RequestProcessItem[] = [],\n history: RequestProcessItem[] = []\n ): Promise<ProcessedRequests> {\n if (requests.length === 0) {\n return {\n saved,\n history,\n }\n }\n const len = Math.min(requests.length, 200)\n // Up to 200 loop iteration at once.\n // Then the function return and release main loop.\n for (let i = 0; i < len; i++) {\n const item = requests[i]\n if (item.type === 'history') {\n const result = this.parseHistoryItem(item)\n history.push(result)\n } else if (item.type === 'saved') {\n const result = this.parseSavedItem(item)\n saved.push(result)\n } else if (item.type === 'drive') {\n const result = this.parseDriveItem(item)\n saved.push(result)\n }\n }\n requests.splice(0, len)\n return this.parseRequestsDeffered(requests, saved, history)\n }\n\n parseHistoryItem(item: DexieRequest): RequestProcessItem {\n const updated = { ...item }\n updated.updateTime = updated.updateTime || Date.now()\n const obj: ExportArcHistoryRequest = {\n key: nanoid(),\n method: updated.method,\n url: updated.url,\n updated: new Date(updated.updateTime).getTime(),\n }\n // payload and headers\n const har = updated._har || updated.har\n const { entries } = har\n const entry = entries[entries.length - 1]\n if (entry) {\n const harRequest = entry.request\n obj.headers = this.parseHarHeaders(harRequest.headers)\n obj.payload = harRequest.postData?.text\n let t = new Date(entry.startedDateTime).getTime()\n if (Number.isNaN(t)) {\n t = Date.now()\n }\n obj.created = t\n } else {\n obj.created = obj.updated\n }\n obj.updated = Date.now()\n return {\n origin: updated.id,\n request: obj,\n }\n }\n\n parseSavedItem(item: DexieRequest): RequestProcessItem {\n const requestName = item.name || item._name\n let keyName = requestName\n if (keyName && keyName[0] === '_') {\n keyName = keyName.substr(1)\n }\n const obj: ExportArcSavedRequest = {\n name: requestName || '',\n method: item.method,\n url: item.url,\n type: 'saved',\n kind: 'ARC#HttpRequest',\n key: nanoid(),\n }\n // payload and headers\n const harIndex = item.referenceEntry || 0\n const har = item._har || item.har\n if (har) {\n const { entries } = har\n let entry\n if (harIndex || harIndex === 0) {\n entry = entries[harIndex]\n } else {\n ;[entry] = entries\n }\n if (entry) {\n const harRequest = entry.request\n obj.headers = this.parseHarHeaders(harRequest.headers)\n obj.payload = harRequest.postData?.text\n let t = new Date(entry.startedDateTime).getTime()\n if (Number.isNaN(t)) {\n t = Date.now()\n }\n obj.created = t\n }\n }\n obj.updated = Date.now()\n\n return {\n origin: item.id,\n request: obj,\n }\n }\n\n parseDriveItem(item: DexieRequest): RequestProcessItem {\n const result = this.parseSavedItem(item)\n result.request.driveId = item.driveId\n return result\n }\n\n parseHarHeaders(arr: Header[]): string {\n if (!arr || !arr.length) {\n return ''\n }\n return arr.map((item) => `${item.name}: ${item.value}`).join('\\n')\n }\n\n /**\n * Associate requests with project data.\n *\n * @param {ProcessedRequests} data Parsed requests object\n * @param {ProjectItem[]} projects List of projects\n * @return {ProcessedRequests} Parsed requests object\n */\n associateProjects(data: ProcessedRequests, projects: ProjectItem[]): ProcessedRequests {\n if (!projects || !projects.length) {\n return data\n }\n if (!data.saved) {\n data.saved = []\n }\n const savedLen = data.saved.length\n const projectsLen = projects.length\n for (let i = 0; i < projectsLen; i++) {\n const project = projects[i]\n const newProjectId = project.legacyProject.key\n for (let j = 0, rLen = project.updateData.length; j < rLen; j++) {\n const rId = project.updateData[j]\n for (let k = 0; k < savedLen; k++) {\n if (data.saved[k].origin === rId) {\n const { request } = data.saved[k]\n request.key += `/${newProjectId}`\n this.addProjectReference(request as ExportArcSavedRequest, newProjectId)\n this.addRequestReference(project.legacyProject, request.key)\n break\n }\n }\n }\n }\n return data\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ArcDexieTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcDexieTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from '../../nanoid.js'\nimport { BaseTransformer, dataValue } from './BaseTransformer.js'\nimport { Creator, Browser, Page, Entry, Header } from './har.js'\nimport {\n ArcExportObject,\n ExportArcProjects,\n ExportArcSavedRequest,\n ExportArcHistoryRequest,\n} from '../legacy/DataExport.js'\n\ninterface DexieExport {\n kind: string\n createdAt: string\n version: string\n requests?: DexieRequest[]\n projects?: DexieProject[]\n}\ninterface DexieRequest {\n order: number\n url: string\n method: string\n type: string\n updateTime: number\n id: string\n kind: string\n har: DexieHar\n _har?: DexieHar\n name?: string\n _name?: string\n referenceEntry?: number\n driveId?: string\n}\n\ninterface DexieHar {\n comment: string\n version: string\n creator: Creator\n browser: Browser\n pages: Page[]\n entries: Entry[]\n}\n\ninterface DexieProject {\n order: number\n created: number\n updateTime: number\n requestIds: string[]\n name: string\n kind: string\n id: number\n}\n\ninterface ProjectItem {\n updateData: string[]\n legacyProject: ExportArcProjects\n}\n\ninterface RequestProcessItem {\n origin: string\n request: ExportArcSavedRequest | ExportArcHistoryRequest\n}\n\ninterface ProcessedRequests {\n saved: RequestProcessItem[]\n history: RequestProcessItem[]\n}\n\n/**\n * Transforms Dexie system (legacy system) into the legacy PouchDB system.\n */\nexport class ArcDexieTransformer extends BaseTransformer {\n /**\n * Transforms legacy ARC export object based on Dexie data store\n * into current export data model.\n *\n * @returns New data model object.\n */\n async transform(): Promise<ArcExportObject> {\n const raw = this[dataValue] as DexieExport\n\n const requests = await this.parseRequests(raw.requests || [])\n const pData = this.processProjects(raw.projects || [])\n const data = this.associateProjects(requests, pData)\n const result = {\n createdAt: new Date().toISOString(),\n version: 'unknown',\n kind: 'ARC#Import',\n requests: data.saved ? data.saved.map((item) => item.request as ExportArcSavedRequest) : [],\n projects: pData ? pData.map((item) => item.legacyProject as ExportArcProjects) : [],\n history: data.history ? data.history.map((item) => item.request as ExportArcHistoryRequest) : [],\n }\n // TODO: handle history data.\n return result\n }\n\n /**\n * In new structure projects do not have a reference to request ids. It's\n * the other way around in previous system.\n * It's a bad pattern for object stores but it must suffice for now.\n *\n * @param projects List of projects in the import.\n * @returns Preprocessed projects array\n */\n processProjects(projects: DexieProject[]): ProjectItem[] {\n if (!projects || !projects.length) {\n return []\n }\n const list: ProjectItem[] = []\n projects.forEach((item) => {\n const result = this.processProjectItem(item)\n if (result) {\n list.push(result)\n }\n })\n return list\n }\n\n /**\n * Creates a pre-processed project data.\n *\n * @param item Project object from the Dexie import.\n * @return Pre-processed project object with project store data\n * under the `legacyProject` property and list of requests IDs under\n * the `updateData` property.\n */\n processProjectItem(item: DexieProject): ProjectItem | undefined {\n if (!item.requestIds || !item.requestIds.length) {\n return undefined\n }\n return {\n updateData: item.requestIds,\n legacyProject: {\n kind: 'ARC#Project',\n key: nanoid(),\n name: item.name,\n order: item.order,\n updated: item.updateTime,\n created: item.created,\n },\n }\n }\n\n /**\n * History is placed in its own store, saved items has own store.\n * Har data are not imported this way as user cannot actually use it.\n *\n * @param requests List of requests objects from the import file.\n * @returns A promise resolved when import is ready.\n */\n async parseRequests(requests: DexieRequest[]): Promise<ProcessedRequests> {\n const data = await this.parseRequestsDeffered(requests)\n // remove duplicates from the history.\n const ids: string[] = []\n data.history = data.history.filter((item) => {\n if (ids.indexOf(item.request.key) === -1) {\n ids[ids.length] = item.request.key\n return true\n }\n return false\n })\n return data\n }\n\n /**\n * Parses the request data.\n * It takes only portion of the data to parse so the script release the\n * event loop and ANR screen won't appear.\n *\n * @param requests List of requests from the import.\n * @param saved Final list of saved requests\n * @param history Final list of history items.\n */\n async parseRequestsDeffered(\n requests: DexieRequest[],\n saved: RequestProcessItem[] = [],\n history: RequestProcessItem[] = []\n ): Promise<ProcessedRequests> {\n if (requests.length === 0) {\n return {\n saved,\n history,\n }\n }\n const len = Math.min(requests.length, 200)\n // Up to 200 loop iteration at once.\n // Then the function return and release main loop.\n for (let i = 0; i < len; i++) {\n const item = requests[i]\n if (item.type === 'history') {\n const result = this.parseHistoryItem(item)\n history.push(result)\n } else if (item.type === 'saved') {\n const result = this.parseSavedItem(item)\n saved.push(result)\n } else if (item.type === 'drive') {\n const result = this.parseDriveItem(item)\n saved.push(result)\n }\n }\n requests.splice(0, len)\n return this.parseRequestsDeffered(requests, saved, history)\n }\n\n parseHistoryItem(item: DexieRequest): RequestProcessItem {\n const updated = { ...item }\n updated.updateTime = updated.updateTime || Date.now()\n const obj: ExportArcHistoryRequest = {\n key: nanoid(),\n method: updated.method,\n url: updated.url,\n updated: new Date(updated.updateTime).getTime(),\n }\n // payload and headers\n const har = updated._har || updated.har\n const { entries } = har\n const entry = entries[entries.length - 1]\n if (entry) {\n const harRequest = entry.request\n obj.headers = this.parseHarHeaders(harRequest.headers)\n obj.payload = harRequest.postData?.text\n let t = new Date(entry.startedDateTime).getTime()\n if (Number.isNaN(t)) {\n t = Date.now()\n }\n obj.created = t\n } else {\n obj.created = obj.updated\n }\n obj.updated = Date.now()\n return {\n origin: updated.id,\n request: obj,\n }\n }\n\n parseSavedItem(item: DexieRequest): RequestProcessItem {\n const requestName = item.name || item._name\n let keyName = requestName\n if (keyName && keyName[0] === '_') {\n keyName = keyName.substr(1)\n }\n const obj: ExportArcSavedRequest = {\n name: requestName || '',\n method: item.method,\n url: item.url,\n type: 'saved',\n kind: 'ARC#HttpRequest',\n key: nanoid(),\n }\n // payload and headers\n const harIndex = item.referenceEntry || 0\n const har = item._har || item.har\n if (har) {\n const { entries } = har\n let entry\n if (harIndex || harIndex === 0) {\n entry = entries[harIndex]\n } else {\n ;[entry] = entries\n }\n if (entry) {\n const harRequest = entry.request\n obj.headers = this.parseHarHeaders(harRequest.headers)\n obj.payload = harRequest.postData?.text\n let t = new Date(entry.startedDateTime).getTime()\n if (Number.isNaN(t)) {\n t = Date.now()\n }\n obj.created = t\n }\n }\n obj.updated = Date.now()\n\n return {\n origin: item.id,\n request: obj,\n }\n }\n\n parseDriveItem(item: DexieRequest): RequestProcessItem {\n const result = this.parseSavedItem(item)\n result.request.driveId = item.driveId\n return result\n }\n\n parseHarHeaders(arr: Header[]): string {\n if (!arr || !arr.length) {\n return ''\n }\n return arr.map((item) => `${item.name}: ${item.value}`).join('\\n')\n }\n\n /**\n * Associate requests with project data.\n *\n * @param {ProcessedRequests} data Parsed requests object\n * @param {ProjectItem[]} projects List of projects\n * @return {ProcessedRequests} Parsed requests object\n */\n associateProjects(data: ProcessedRequests, projects: ProjectItem[]): ProcessedRequests {\n if (!projects || !projects.length) {\n return data\n }\n if (!data.saved) {\n data.saved = []\n }\n const savedLen = data.saved.length\n const projectsLen = projects.length\n for (let i = 0; i < projectsLen; i++) {\n const project = projects[i]\n const newProjectId = project.legacyProject.key\n for (let j = 0, rLen = project.updateData.length; j < rLen; j++) {\n const rId = project.updateData[j]\n for (let k = 0; k < savedLen; k++) {\n if (data.saved[k].origin === rId) {\n const { request } = data.saved[k]\n request.key += `/${newProjectId}`\n this.addProjectReference(request as ExportArcSavedRequest, newProjectId)\n this.addRequestReference(project.legacyProject, request.key)\n break\n }\n }\n }\n }\n return data\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcLegacyTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcLegacyTransformer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ArcLegacyTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcLegacyTransformer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAuCjE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAS;IACvC,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IACvD;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAQ,CAAA;QAElC,IAAI,QAAyC,CAAA;QAC7C,IAAI,QAA6C,CAAA;QACjD,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,GAAoB,CAAA;YACjC,QAAQ,GAAG,EAAE,CAAA;YACb,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,GAAmB,CAAA;YAChC,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9D,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACrD,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,6DAA6D;gBAC7D,OAAO,IAAI,CAAC,QAAQ,CAAA;gBACpB,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,YAAY;YAClB,QAAQ;YACR,QAAQ;SACT,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,QAAyB;QACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,GAAG,EAAE,MAAM,EAAE;gBACb,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;gBAC5B,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,EAAE;aAClB,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAyB,EAAE,QAAoC;QAC/E,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,IAAmB,EAAE,QAAoC;QACxE,wCAAwC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAA;QAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,SAAS,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QACnD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QACnB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,CAAC;QACD,MAAM,MAAM,GAA0B;YACpC,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,EAAE;YACP,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAA;QACD,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAA;YAC7B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,SAAiB,EAAE,QAAoC;QACjE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IACvD,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { nanoid } from '../../nanoid.js'\nimport { BaseTransformer, dataValue } from './BaseTransformer.js'\nimport { ArcExportObject, ExportArcProjects, ExportArcSavedRequest } from '../legacy/DataExport.js'\n\ninterface LegacyExport {\n requests: LegacyRequest[]\n projects: LegacyProject[]\n}\n\ninterface LegacyRequest {\n id: number\n name: string\n project: number\n url: string\n method: string\n encoding: string | null\n headers: string | null\n payload: string | null\n skipProtocol: boolean\n skipServer: boolean\n skipParams: boolean\n skipHistory: boolean\n skipMethod: boolean\n skipPayload: boolean\n skipHeaders: boolean\n skipPath: boolean\n time: number\n driveId?: string | null\n}\n\ninterface LegacyProject {\n created: number\n id: number\n name: string\n}\n\ninterface LegacyProjectProcessing extends ExportArcProjects {\n originId: number\n}\n\n/**\n * Tests if the data import is a single request export.\n *\n * @param data Imported data\n * @return True if `data` represents single request\n */\nexport function isSingleRequest(data: any): boolean {\n if ('requests' in data || 'projects' in data) {\n return false\n }\n return true\n}\n\n/**\n * Transforms the first ARC data object to current schema.\n */\nexport class ArcLegacyTransformer extends BaseTransformer {\n /**\n * Transforms legacy ARC export object into current export data model.\n *\n * @return New data model object.\n */\n async transform(): Promise<ArcExportObject> {\n const raw = this[dataValue] as any\n\n let projects: ExportArcProjects[] | undefined\n let requests: ExportArcSavedRequest[] | undefined\n if (isSingleRequest(raw)) {\n const item = raw as LegacyRequest\n projects = []\n requests = [this.transformRequest(item)]\n } else {\n const data = raw as LegacyExport\n const tmp = (projects = this.transformProjects(data.projects))\n requests = this.transformRequests(data.requests, tmp)\n projects = projects.map((item) => {\n // @ts-expect-error I think this whole library is going away.\n delete item.originId\n return item\n })\n }\n\n const result: ArcExportObject = {\n createdAt: new Date().toISOString(),\n version: 'unknown',\n kind: 'ARC#Import',\n requests,\n projects,\n }\n\n return result\n }\n\n /**\n * Returns a list of projects from a legacy export file.\n *\n * Each project will have newly generated ID to not make conflicts with\n * existing projects. Old project id is moved to the `originId` property.\n *\n * @param projects List of legacy project objects\n * @returns List of project object in current data model. It can be\n * empty array.\n */\n transformProjects(projects: LegacyProject[]): LegacyProjectProcessing[] {\n if (!projects || !(projects instanceof Array) || !projects.length) {\n return []\n }\n return projects.map((item) => {\n let created = Number(item.created)\n if (Number.isNaN(created)) {\n created = Date.now()\n }\n return {\n kind: 'ARC#ProjectData',\n key: nanoid(),\n created,\n name: item.name || 'unnamed',\n order: 0,\n updated: Date.now(),\n originId: item.id,\n }\n })\n }\n\n /**\n * Transform the list of requests into new data model.\n */\n transformRequests(requests: LegacyRequest[], projects?: LegacyProjectProcessing[]): ExportArcSavedRequest[] {\n if (!requests || !(requests instanceof Array) || !requests.length) {\n return []\n }\n return requests.map((item) => this.transformRequest(item, projects))\n }\n\n /**\n * Transforms a single request object into current data model.\n *\n * Note that required properties will be default to the following:\n * - `name` - \"unnamed\"\n * - `url` - \"http://\"\n * - `method` - \"GET\"\n *\n * @param item Legacy request definition\n * @param projects List of projects in the import file.\n * @return Current model of the request object.\n */\n transformRequest(item: LegacyRequest, projects?: LegacyProjectProcessing[]): ExportArcSavedRequest {\n // LegacyRequest may have `null` values.\n item.name = item.name || 'unnamed'\n item.url = item.url || 'http://'\n item.method = item.method || 'GET'\n\n const project = this.findProject(item.project, projects)\n const projectId = project ? project.key : undefined\n const id = nanoid()\n let created = Number(item.time)\n if (Number.isNaN(created)) {\n created = Date.now()\n }\n const result: ExportArcSavedRequest = {\n kind: 'ARC#HttpRequest',\n key: id,\n created,\n updated: Date.now(),\n headers: item.headers || '',\n method: item.method,\n name: item.name,\n payload: item.payload || '',\n type: 'saved',\n url: item.url,\n }\n if (project && projectId) {\n result.projects = [projectId]\n this.addRequestReference(project, id)\n }\n if (item.driveId) {\n result.driveId = item.driveId\n }\n return result\n }\n\n /**\n * Finds a project in the list of projects.\n *\n * @param projectId A project ID to search for\n * @param projects List of project to look into. It compares the `originId` property of the list items.\n * @returns A project object or null if not found.\n */\n findProject(projectId: number, projects?: LegacyProjectProcessing[]): LegacyProjectProcessing | undefined {\n if (!projectId || !Array.isArray(projects)) {\n return undefined\n }\n return projects.find((p) => p.originId === projectId)\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { nanoid } from 'nanoid';
|
|
2
|
+
import { nanoid } from '../../nanoid.js';
|
|
3
3
|
import { BaseTransformer, dataValue } from './BaseTransformer.js';
|
|
4
4
|
/**
|
|
5
5
|
* Updates `updated` property and ensures `created` property
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcPouchTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcPouchTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { nanoid } from 'nanoid'\nimport { BaseTransformer, dataValue } from './BaseTransformer.js'\nimport {\n ArcExportObject,\n ExportArcProjects,\n ExportArcSavedRequest,\n ExportArcHistoryRequest,\n ExportArcClientCertificateData,\n ExportArcVariable,\n} from '../legacy/DataExport.js'\n\n/**\n * Updates `updated` property and ensures `created` property\n * @param item An item to updated\n * @returns Shallow copy of the passed item.\n */\nexport function updateItemTimings<T>(item: T): T {\n const data = { ...item } as any\n if (!data.updated || Number.isNaN(data.updated)) {\n data.updated = Date.now()\n }\n if (!data.created) {\n data.created = data.updated\n }\n return data\n}\n\n/**\n * Transforms data exported by the PouchDB system (legacy)\n */\nexport class ArcPouchTransformer extends BaseTransformer {\n /**\n * Transforms PouchDB ARC export object based into current export data model.\n *\n * @returns New data model object.\n */\n async transform(): Promise<ArcExportObject> {\n const data = { ...(this[dataValue] as ArcExportObject) } as ArcExportObject\n if (data.projects && data.projects.length) {\n data.projects = this.transformProjects(data.projects)\n }\n if (data.requests && data.requests.length) {\n data.requests = this.transformRequests(data.requests, data.projects)\n }\n if (data.projects && data.projects.length) {\n ;(data.projects as any[]).forEach((item) => {\n delete item._referenceId\n })\n }\n if (data.history && data.history.length) {\n data.history = this.transformHistory(data.history)\n }\n const socketUrls = data['websocket-url-history'] || data.websocketurlhistory\n if (socketUrls && socketUrls.length) {\n data.websocketurlhistory = socketUrls\n }\n const urls = data['url-history'] || data.urlhistory\n if (urls && urls.length) {\n data.urlhistory = urls\n }\n const authData = data['auth-data'] || data.authdata\n if (authData && authData.length) {\n data.authdata = authData\n }\n const hostRules = data['host-rules'] || data.hostrules\n if (hostRules && hostRules.length) {\n data.hostrules = hostRules\n }\n if (Array.isArray(data.variables) && data.variables.length) {\n data.variables = this.transformVariables(data.variables)\n }\n if (!data.loadToWorkspace) {\n data.kind = 'ARC#Import'\n }\n const ccs = data['client-certificates'] || data.clientcertificates\n if (ccs && ccs.length) {\n data.clientcertificates = this.transformClientCertificates(ccs)\n }\n return data\n }\n\n /**\n * Transforms the projects array.\n *\n * @param projects Projects list to upgrade\n * @return Processed list\n */\n transformProjects(projects: ExportArcProjects[]): ExportArcProjects[] {\n return projects.map((item) => {\n const project = { ...item }\n if (!project.key) {\n project.key = nanoid()\n }\n return updateItemTimings(project)\n })\n }\n\n /**\n * @param requests The list of requests to process\n * @param projects List of projects\n * @returns Processed requests.\n */\n transformRequests(requests: ExportArcSavedRequest[], projects: ExportArcProjects[] = []): ExportArcSavedRequest[] {\n return requests.map((object) => {\n const request = { ...object }\n if (!request.key) {\n // @ts-expect-error I think this whole library is going away.\n const refId = request._referenceLegacyProject || request.legacyProject\n request.key = this.generateRequestId(request, refId)\n }\n // @ts-expect-error I think this whole library is going away.\n const refId = request._referenceLegacyProject || request.legacyProject\n if (refId) {\n // @ts-expect-error I think this whole library is going away.\n delete request._referenceLegacyProject\n // @ts-expect-error I think this whole library is going away.\n delete request.legacyProject\n // @ts-expect-error I think this whole library is going away.\n const project = projects.find((item) => item.key === refId || item._referenceId === refId)\n if (project) {\n this.addProjectReference(request, project.key)\n this.addRequestReference(project, request.key)\n }\n }\n request.name = request.name || 'unnamed'\n request.url = request.url || 'http://'\n request.method = request.method || 'GET'\n request.headers = request.headers || ''\n request.payload = request.payload || ''\n request.kind = 'ARC#HttpRequest'\n return updateItemTimings(request)\n })\n }\n\n transformHistory(history: ExportArcHistoryRequest[]): ExportArcHistoryRequest[] {\n return history.map((object) => {\n const item = { ...object }\n const result = updateItemTimings(item)\n result.url = item.url || 'http://'\n result.method = item.method || 'GET'\n result.headers = item.headers || ''\n result.payload = item.payload || ''\n if (!result.key) {\n result.key = this.generateHistoryId(item.created, item)\n }\n return result\n })\n }\n\n /**\n * Transforms ARC's client certificate export object into intermediate structure\n * used by the import panel.\n *\n * @return A list of certificates to import. In each element\n * first item is the index data and the second is the certificates data.\n */\n transformClientCertificates(items: ExportArcClientCertificateData[]): ExportArcClientCertificateData[] {\n const result: ExportArcClientCertificateData[] = []\n items.forEach((item) => {\n if (item.kind !== 'ARC#ClientCertificate') {\n return\n }\n const data = updateItemTimings(item)\n result[result.length] = data\n })\n return result\n }\n\n /**\n * Maps the old `variable` property to the new `name` property.\n */\n transformVariables(variables: ExportArcVariable[]): ExportArcVariable[] {\n return variables.map((item) => {\n const variable = { ...item }\n if (variable.variable && !variable.name) {\n variable.name = variable.variable\n delete variable.variable\n }\n return variable\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ArcPouchTransformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/ArcPouchTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { nanoid } from '../../nanoid.js'\nimport { BaseTransformer, dataValue } from './BaseTransformer.js'\nimport {\n ArcExportObject,\n ExportArcProjects,\n ExportArcSavedRequest,\n ExportArcHistoryRequest,\n ExportArcClientCertificateData,\n ExportArcVariable,\n} from '../legacy/DataExport.js'\n\n/**\n * Updates `updated` property and ensures `created` property\n * @param item An item to updated\n * @returns Shallow copy of the passed item.\n */\nexport function updateItemTimings<T>(item: T): T {\n const data = { ...item } as any\n if (!data.updated || Number.isNaN(data.updated)) {\n data.updated = Date.now()\n }\n if (!data.created) {\n data.created = data.updated\n }\n return data\n}\n\n/**\n * Transforms data exported by the PouchDB system (legacy)\n */\nexport class ArcPouchTransformer extends BaseTransformer {\n /**\n * Transforms PouchDB ARC export object based into current export data model.\n *\n * @returns New data model object.\n */\n async transform(): Promise<ArcExportObject> {\n const data = { ...(this[dataValue] as ArcExportObject) } as ArcExportObject\n if (data.projects && data.projects.length) {\n data.projects = this.transformProjects(data.projects)\n }\n if (data.requests && data.requests.length) {\n data.requests = this.transformRequests(data.requests, data.projects)\n }\n if (data.projects && data.projects.length) {\n ;(data.projects as any[]).forEach((item) => {\n delete item._referenceId\n })\n }\n if (data.history && data.history.length) {\n data.history = this.transformHistory(data.history)\n }\n const socketUrls = data['websocket-url-history'] || data.websocketurlhistory\n if (socketUrls && socketUrls.length) {\n data.websocketurlhistory = socketUrls\n }\n const urls = data['url-history'] || data.urlhistory\n if (urls && urls.length) {\n data.urlhistory = urls\n }\n const authData = data['auth-data'] || data.authdata\n if (authData && authData.length) {\n data.authdata = authData\n }\n const hostRules = data['host-rules'] || data.hostrules\n if (hostRules && hostRules.length) {\n data.hostrules = hostRules\n }\n if (Array.isArray(data.variables) && data.variables.length) {\n data.variables = this.transformVariables(data.variables)\n }\n if (!data.loadToWorkspace) {\n data.kind = 'ARC#Import'\n }\n const ccs = data['client-certificates'] || data.clientcertificates\n if (ccs && ccs.length) {\n data.clientcertificates = this.transformClientCertificates(ccs)\n }\n return data\n }\n\n /**\n * Transforms the projects array.\n *\n * @param projects Projects list to upgrade\n * @return Processed list\n */\n transformProjects(projects: ExportArcProjects[]): ExportArcProjects[] {\n return projects.map((item) => {\n const project = { ...item }\n if (!project.key) {\n project.key = nanoid()\n }\n return updateItemTimings(project)\n })\n }\n\n /**\n * @param requests The list of requests to process\n * @param projects List of projects\n * @returns Processed requests.\n */\n transformRequests(requests: ExportArcSavedRequest[], projects: ExportArcProjects[] = []): ExportArcSavedRequest[] {\n return requests.map((object) => {\n const request = { ...object }\n if (!request.key) {\n // @ts-expect-error I think this whole library is going away.\n const refId = request._referenceLegacyProject || request.legacyProject\n request.key = this.generateRequestId(request, refId)\n }\n // @ts-expect-error I think this whole library is going away.\n const refId = request._referenceLegacyProject || request.legacyProject\n if (refId) {\n // @ts-expect-error I think this whole library is going away.\n delete request._referenceLegacyProject\n // @ts-expect-error I think this whole library is going away.\n delete request.legacyProject\n // @ts-expect-error I think this whole library is going away.\n const project = projects.find((item) => item.key === refId || item._referenceId === refId)\n if (project) {\n this.addProjectReference(request, project.key)\n this.addRequestReference(project, request.key)\n }\n }\n request.name = request.name || 'unnamed'\n request.url = request.url || 'http://'\n request.method = request.method || 'GET'\n request.headers = request.headers || ''\n request.payload = request.payload || ''\n request.kind = 'ARC#HttpRequest'\n return updateItemTimings(request)\n })\n }\n\n transformHistory(history: ExportArcHistoryRequest[]): ExportArcHistoryRequest[] {\n return history.map((object) => {\n const item = { ...object }\n const result = updateItemTimings(item)\n result.url = item.url || 'http://'\n result.method = item.method || 'GET'\n result.headers = item.headers || ''\n result.payload = item.payload || ''\n if (!result.key) {\n result.key = this.generateHistoryId(item.created, item)\n }\n return result\n })\n }\n\n /**\n * Transforms ARC's client certificate export object into intermediate structure\n * used by the import panel.\n *\n * @return A list of certificates to import. In each element\n * first item is the index data and the second is the certificates data.\n */\n transformClientCertificates(items: ExportArcClientCertificateData[]): ExportArcClientCertificateData[] {\n const result: ExportArcClientCertificateData[] = []\n items.forEach((item) => {\n if (item.kind !== 'ARC#ClientCertificate') {\n return\n }\n const data = updateItemTimings(item)\n result[result.length] = data\n })\n return result\n }\n\n /**\n * Maps the old `variable` property to the new `name` property.\n */\n transformVariables(variables: ExportArcVariable[]): ExportArcVariable[] {\n return variables.map((item) => {\n const variable = { ...item }\n if (variable.variable && !variable.name) {\n variable.name = variable.variable\n delete variable.variable\n }\n return variable\n })\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
2
|
import { PostmanTransformer, dataValue, paramValue } from './PostmanTransformer.js';
|
|
3
3
|
import { HttpProject, Kind as ProjectKind } from '../HttpProject.js';
|
|
4
|
-
import { nanoid } from 'nanoid';
|
|
4
|
+
import { nanoid } from '../../nanoid.js';
|
|
5
5
|
import { Environment } from '../Environment.js';
|
|
6
6
|
import { Thing } from '../Thing.js';
|
|
7
7
|
export const currentItemValue = Symbol('currentItemValue');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostmanV21Transformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/PostmanV21Transformer.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,WAAW,EAAgB,IAAI,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIlF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAsG1D;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3D;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAc,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,aAAa,CAAC,IAAe;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QACrB,MAAM,IAAI,GAAiB;YACzB,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,yBAAyB,CAAC,CAAC,MAAM,EAAE;YACrE,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM,EAAE;SAClC,CAAA;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAC1C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACrC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,mBAAmB,CAAC,OAAoB,EAAE,UAAqB;QAC7D,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;YAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAW,CAAA;YAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAC5C,OAAO,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAoC,EAAE,IAAoC;QAC7F,MAAM,UAAU,GAAG,IAAwB,CAAA;QAC3C,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACnD,CAAC;QACD,MAAM,SAAS,GAAG,IAAmB,CAAA;QACrC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAmB,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,CAAC,MAAM,CACT,OAAO,EACP,6GAA6G,CAC9G,CAAA;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAoC,EAAE,KAAuB;QAClF,MAAM,EAAE,WAAW,EAAE,IAAI,GAAG,gBAAgB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QACxC,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAoC,EAAE,IAAiB;QAC7E,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAA;QAC3C,IAAI,GAAW,CAAA;QACf,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACpC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAC1C,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,SAAS,CAAA;QACjB,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAW,CAAA;QAC/C,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAA;QACpC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAW,CAAA;QAErD,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACxB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAChD,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QACxC,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;QACnC,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,OAAiC;QAC9C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC9C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAuB,EAAE,IAAkB;QAC9D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC1C,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9C,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC1C,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAuB,EAAE,IAAiB;QAC5D,sEAAsE;QACtE,kFAAkF;QAClF,iDAAiD;IACnD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAuB,EAAE,IAAiB;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAyB,CAAwB,CAAA;QACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAwB,CAAA;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5G,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAuB,EAAE,IAAiB;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAyB,CAAsB,CAAA;QACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAsB,CAAA;QACnE,MAAM,aAAa,GAAqB,EAAE,CAAA;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG;YACxB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,aAAa;SACpB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAsB,EAAE,KAAsB;QACpE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,KAAK,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG,IAAI,cAAc;YAC3B,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,EAAE,CAAC,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAsB,EAAE,KAAsB;QACpE,8DAA8D;QAC9D,kFAAkF;QAClF,iDAAiD;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAuB,EAAE,IAAiB;QACzD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PostmanTransformer, dataValue, paramValue } from './PostmanTransformer.js'\nimport { HttpProject, IHttpProject, Kind as ProjectKind } from '../HttpProject.js'\nimport { ProjectFolder } from '../ProjectFolder.js'\nimport { ProjectRequest } from '../ProjectRequest.js'\nimport { IMultipartBody } from '../../lib/transformers/PayloadSerializer.js'\nimport { nanoid } from 'nanoid'\nimport { Environment } from '../Environment.js'\nimport { Thing } from '../Thing.js'\n\nexport const currentItemValue = Symbol('currentItemValue')\n\ninterface PostmanInfo {\n /**\n * Name of the collection\n */\n name: string\n /**\n * This should ideally hold a link to the Postman schema that is used to validate this collection. E.g: https://schema.getpostman.com/collection/v1\n */\n schema: string\n /**\n * Every collection is identified by the unique value of this field. The value of this field is usually\n * easiest to generate using a UID generator function. If you already have a collection, it is recommended\n * that you maintain the same id since changing the id usually implies that is a different collection than\n * it was originally.\\n *Note: This field exists for compatibility reasons with Collection Format V1.\n */\n _postman_id?: string\n description?: string\n}\n\ninterface PostmanRequestUrl {\n raw?: string\n protocol?: string\n host?: string | string[]\n path?: string | string[]\n port?: string\n}\ninterface PostmanParameter {\n key?: string | null\n value?: string | null\n disabled?: boolean\n description?: string\n}\ntype PostmanHeader = PostmanParameter\ninterface PostmanUrlEncoded extends PostmanParameter {\n type?: string\n}\ninterface PostmanFormData extends PostmanParameter {\n type?: string\n src?: string\n contentType?: string\n}\ninterface PostmanFile {\n src: string | null\n contentType?: string\n}\ninterface PostmanBody {\n mode: string | null\n raw?: string\n urlencoded?: PostmanUrlEncoded[]\n formdata?: PostmanFormData[]\n file?: PostmanFile\n}\n\ninterface PostmanRequest {\n url?: string | PostmanRequestUrl\n method?: string\n description?: string\n header?: string | PostmanHeader[]\n body?: PostmanBody\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface PostmanResponse {}\n\ninterface PostmanItem {\n /**\n * A unique ID that is used to identify collections internally\n */\n id?: string\n /**\n * Name of the collection\n */\n name?: string\n description?: string\n request: PostmanRequest\n response?: PostmanResponse[]\n}\n\ninterface PostmanItemGroup {\n /**\n * A folder's friendly name is defined by this field. You would want to set this field\n * to a value that would allow you to easily identify this folder.\n */\n name?: string\n description?: string\n item: PostmanItem[] | PostmanItemGroup[]\n}\n\ninterface PostmanVariable {\n disabled?: boolean\n key: string\n value: string\n}\n\ninterface PostmanV2 {\n variable?: PostmanVariable[]\n info: PostmanInfo\n item: PostmanItem[] | PostmanItemGroup[]\n}\n\n/**\n * Transforms Postman v2.1 collections to ARC import object.\n */\nexport class PostmanV21Transformer extends PostmanTransformer {\n /**\n * Transforms `_data` into ARC data model.\n * @returns Promise resolved when data are transformed.\n */\n async transform(): Promise<HttpProject> {\n const raw = this[dataValue] as PostmanV2\n const project = this.createProject(raw)\n this.setProjectVariables(project, raw)\n if (Array.isArray(raw.item)) {\n for (const item of raw.item) {\n await this.addProjectItem(project, item)\n }\n }\n return project\n }\n\n createProject(data: PostmanV2): HttpProject {\n const { info } = data\n const init: IHttpProject = {\n kind: ProjectKind,\n definitions: {},\n info: Thing.fromName(info.name || 'Unnamed Postman project').toJSON(),\n items: [],\n key: info._postman_id || nanoid(),\n }\n if (info.description) {\n init.info.description = info.description\n }\n const project = new HttpProject(init)\n return project\n }\n\n setProjectVariables(project: HttpProject, collection: PostmanV2): void {\n const { variable } = collection\n if (!Array.isArray(variable)) {\n return\n }\n const env = Environment.fromName('Default')\n project.addEnvironment(env)\n variable.forEach((param) => {\n const { disabled = false, key, value } = param\n\n const parsed = this.ensureVariablesSyntax(value) as string\n const created = env.addVariable(key, parsed)\n created.enabled = !disabled\n })\n }\n\n async addProjectItem(current: HttpProject | ProjectFolder, item: PostmanItem | PostmanItemGroup): Promise<void> {\n const typedGroup = item as PostmanItemGroup\n if (typedGroup.item) {\n return this.addProjectFolder(current, typedGroup)\n }\n const typedItem = item as PostmanItem\n if (typedItem.request) {\n return this.addProjectRequest(current, item as PostmanItem)\n }\n this.addLog(\n 'error',\n 'Error when adding an item to the project. Unable to determine item type. Tested for a folder and a request.'\n )\n }\n\n async addProjectFolder(current: HttpProject | ProjectFolder, group: PostmanItemGroup): Promise<void> {\n const { description, name = 'Unnamed folder', item } = group\n const created = current.addFolder(name)\n if (description) {\n created.info.description = description\n }\n\n if (Array.isArray(item)) {\n for (const tmp of item) {\n await this.addProjectItem(created, tmp)\n }\n }\n }\n\n async addProjectRequest(current: HttpProject | ProjectFolder, item: PostmanItem): Promise<void> {\n const { request, description } = item\n const name = item.name || 'Unnamed request'\n let url: string\n if (typeof request.url === 'string') {\n url = request.url\n } else if (request.url && request.url.raw) {\n url = request.url.raw\n } else {\n url = 'http://'\n }\n url = this.ensureVariablesSyntax(url) as string\n let method = request.method || 'GET'\n method = this.ensureVariablesSyntax(method) as string\n\n const header = this.ensureVarsRecursively(request.header)\n const headers = this.computeHeaders(header)\n\n const created = current.addRequest(url)\n created.info.name = name\n if (request.description) {\n created.info.description = request.description\n } else if (description) {\n created.info.description = description\n }\n created.expects.method = method\n if (headers) {\n created.expects.headers = headers\n }\n\n await this.addRequestBody(created, request.body)\n }\n\n /**\n * Computes headers string from item's headers.\n *\n * @param headers Postman Request.header model.\n * @returns Computed value of headers.\n */\n computeHeaders(headers: string | PostmanHeader[]): string {\n if (typeof headers === 'string') {\n return headers\n }\n if (!Array.isArray(headers)) {\n return ''\n }\n const tmp = headers.filter((h) => !h.disabled)\n return tmp.map((item) => `${item.key}: ${item.value}`).join('\\n')\n }\n\n async addRequestBody(created: ProjectRequest, body?: PostmanBody): Promise<void> {\n if (!body) {\n return\n }\n switch (body.mode) {\n case 'file':\n return this.addBinaryBody(created, body)\n case 'urlencoded':\n return this.addUrlencodedBody(created, body)\n case 'formdata':\n return this.addParamsBody(created, body)\n case 'raw':\n return this.addRawBody(created, body)\n }\n }\n\n async addBinaryBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n // Postman sets the `body.file.src` property with the path to the file\n // but not data itself. Because of that this method is a stub that can be extended\n // by particular implementation (like node, CLI).\n }\n\n async addUrlencodedBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n const items = body[body.mode as keyof PostmanBody] as PostmanUrlEncoded[]\n if (!Array.isArray(items)) {\n return\n }\n const data = this.ensureVarsRecursively(items) as PostmanUrlEncoded[]\n const str = data.map((i) => `${paramValue(i.key || 'missing name')}=${paramValue(i.value || '')}`).join('&')\n await created.expects.writePayload(str)\n }\n\n async addParamsBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n const items = body[body.mode as keyof PostmanBody] as PostmanFormData[]\n if (!Array.isArray(items)) {\n return\n }\n const data = this.ensureVarsRecursively(items) as PostmanFormData[]\n const multipartBody: IMultipartBody[] = []\n for (const part of data) {\n if (part.type === 'text') {\n await this.addParamsTextPart(multipartBody, part)\n } else if (part.type === 'file') {\n await this.addParamsFilePart(multipartBody, part)\n }\n }\n created.expects.payload = {\n type: 'formdata',\n data: multipartBody,\n }\n }\n\n async addParamsTextPart(body: IMultipartBody[], param: PostmanFormData): Promise<void> {\n const { key, value, disabled = false } = param\n body.push({\n isFile: false,\n name: key || 'unnamed part',\n value: value || '',\n enabled: !disabled,\n })\n }\n\n async addParamsFilePart(body: IMultipartBody[], param: PostmanFormData): Promise<void> {\n // Postman sets the `value` property with the path to the file\n // but not data itself. Because of that this method is a stub that can be extended\n // by particular implementation (like node, CLI).\n }\n\n async addRawBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n if (body.raw) {\n await created.expects.writePayload(body.raw)\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PostmanV21Transformer.js","sourceRoot":"","sources":["../../../../src/models/transformers/PostmanV21Transformer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PostmanTransformer, dataValue, paramValue } from './PostmanTransformer.js'\nimport { HttpProject, IHttpProject, Kind as ProjectKind } from '../HttpProject.js'\nimport { ProjectFolder } from '../ProjectFolder.js'\nimport { ProjectRequest } from '../ProjectRequest.js'\nimport { IMultipartBody } from '../../lib/transformers/PayloadSerializer.js'\nimport { nanoid } from '../../nanoid.js'\nimport { Environment } from '../Environment.js'\nimport { Thing } from '../Thing.js'\n\nexport const currentItemValue = Symbol('currentItemValue')\n\ninterface PostmanInfo {\n /**\n * Name of the collection\n */\n name: string\n /**\n * This should ideally hold a link to the Postman schema that is used to validate this collection. E.g: https://schema.getpostman.com/collection/v1\n */\n schema: string\n /**\n * Every collection is identified by the unique value of this field. The value of this field is usually\n * easiest to generate using a UID generator function. If you already have a collection, it is recommended\n * that you maintain the same id since changing the id usually implies that is a different collection than\n * it was originally.\\n *Note: This field exists for compatibility reasons with Collection Format V1.\n */\n _postman_id?: string\n description?: string\n}\n\ninterface PostmanRequestUrl {\n raw?: string\n protocol?: string\n host?: string | string[]\n path?: string | string[]\n port?: string\n}\ninterface PostmanParameter {\n key?: string | null\n value?: string | null\n disabled?: boolean\n description?: string\n}\ntype PostmanHeader = PostmanParameter\ninterface PostmanUrlEncoded extends PostmanParameter {\n type?: string\n}\ninterface PostmanFormData extends PostmanParameter {\n type?: string\n src?: string\n contentType?: string\n}\ninterface PostmanFile {\n src: string | null\n contentType?: string\n}\ninterface PostmanBody {\n mode: string | null\n raw?: string\n urlencoded?: PostmanUrlEncoded[]\n formdata?: PostmanFormData[]\n file?: PostmanFile\n}\n\ninterface PostmanRequest {\n url?: string | PostmanRequestUrl\n method?: string\n description?: string\n header?: string | PostmanHeader[]\n body?: PostmanBody\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface PostmanResponse {}\n\ninterface PostmanItem {\n /**\n * A unique ID that is used to identify collections internally\n */\n id?: string\n /**\n * Name of the collection\n */\n name?: string\n description?: string\n request: PostmanRequest\n response?: PostmanResponse[]\n}\n\ninterface PostmanItemGroup {\n /**\n * A folder's friendly name is defined by this field. You would want to set this field\n * to a value that would allow you to easily identify this folder.\n */\n name?: string\n description?: string\n item: PostmanItem[] | PostmanItemGroup[]\n}\n\ninterface PostmanVariable {\n disabled?: boolean\n key: string\n value: string\n}\n\ninterface PostmanV2 {\n variable?: PostmanVariable[]\n info: PostmanInfo\n item: PostmanItem[] | PostmanItemGroup[]\n}\n\n/**\n * Transforms Postman v2.1 collections to ARC import object.\n */\nexport class PostmanV21Transformer extends PostmanTransformer {\n /**\n * Transforms `_data` into ARC data model.\n * @returns Promise resolved when data are transformed.\n */\n async transform(): Promise<HttpProject> {\n const raw = this[dataValue] as PostmanV2\n const project = this.createProject(raw)\n this.setProjectVariables(project, raw)\n if (Array.isArray(raw.item)) {\n for (const item of raw.item) {\n await this.addProjectItem(project, item)\n }\n }\n return project\n }\n\n createProject(data: PostmanV2): HttpProject {\n const { info } = data\n const init: IHttpProject = {\n kind: ProjectKind,\n definitions: {},\n info: Thing.fromName(info.name || 'Unnamed Postman project').toJSON(),\n items: [],\n key: info._postman_id || nanoid(),\n }\n if (info.description) {\n init.info.description = info.description\n }\n const project = new HttpProject(init)\n return project\n }\n\n setProjectVariables(project: HttpProject, collection: PostmanV2): void {\n const { variable } = collection\n if (!Array.isArray(variable)) {\n return\n }\n const env = Environment.fromName('Default')\n project.addEnvironment(env)\n variable.forEach((param) => {\n const { disabled = false, key, value } = param\n\n const parsed = this.ensureVariablesSyntax(value) as string\n const created = env.addVariable(key, parsed)\n created.enabled = !disabled\n })\n }\n\n async addProjectItem(current: HttpProject | ProjectFolder, item: PostmanItem | PostmanItemGroup): Promise<void> {\n const typedGroup = item as PostmanItemGroup\n if (typedGroup.item) {\n return this.addProjectFolder(current, typedGroup)\n }\n const typedItem = item as PostmanItem\n if (typedItem.request) {\n return this.addProjectRequest(current, item as PostmanItem)\n }\n this.addLog(\n 'error',\n 'Error when adding an item to the project. Unable to determine item type. Tested for a folder and a request.'\n )\n }\n\n async addProjectFolder(current: HttpProject | ProjectFolder, group: PostmanItemGroup): Promise<void> {\n const { description, name = 'Unnamed folder', item } = group\n const created = current.addFolder(name)\n if (description) {\n created.info.description = description\n }\n\n if (Array.isArray(item)) {\n for (const tmp of item) {\n await this.addProjectItem(created, tmp)\n }\n }\n }\n\n async addProjectRequest(current: HttpProject | ProjectFolder, item: PostmanItem): Promise<void> {\n const { request, description } = item\n const name = item.name || 'Unnamed request'\n let url: string\n if (typeof request.url === 'string') {\n url = request.url\n } else if (request.url && request.url.raw) {\n url = request.url.raw\n } else {\n url = 'http://'\n }\n url = this.ensureVariablesSyntax(url) as string\n let method = request.method || 'GET'\n method = this.ensureVariablesSyntax(method) as string\n\n const header = this.ensureVarsRecursively(request.header)\n const headers = this.computeHeaders(header)\n\n const created = current.addRequest(url)\n created.info.name = name\n if (request.description) {\n created.info.description = request.description\n } else if (description) {\n created.info.description = description\n }\n created.expects.method = method\n if (headers) {\n created.expects.headers = headers\n }\n\n await this.addRequestBody(created, request.body)\n }\n\n /**\n * Computes headers string from item's headers.\n *\n * @param headers Postman Request.header model.\n * @returns Computed value of headers.\n */\n computeHeaders(headers: string | PostmanHeader[]): string {\n if (typeof headers === 'string') {\n return headers\n }\n if (!Array.isArray(headers)) {\n return ''\n }\n const tmp = headers.filter((h) => !h.disabled)\n return tmp.map((item) => `${item.key}: ${item.value}`).join('\\n')\n }\n\n async addRequestBody(created: ProjectRequest, body?: PostmanBody): Promise<void> {\n if (!body) {\n return\n }\n switch (body.mode) {\n case 'file':\n return this.addBinaryBody(created, body)\n case 'urlencoded':\n return this.addUrlencodedBody(created, body)\n case 'formdata':\n return this.addParamsBody(created, body)\n case 'raw':\n return this.addRawBody(created, body)\n }\n }\n\n async addBinaryBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n // Postman sets the `body.file.src` property with the path to the file\n // but not data itself. Because of that this method is a stub that can be extended\n // by particular implementation (like node, CLI).\n }\n\n async addUrlencodedBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n const items = body[body.mode as keyof PostmanBody] as PostmanUrlEncoded[]\n if (!Array.isArray(items)) {\n return\n }\n const data = this.ensureVarsRecursively(items) as PostmanUrlEncoded[]\n const str = data.map((i) => `${paramValue(i.key || 'missing name')}=${paramValue(i.value || '')}`).join('&')\n await created.expects.writePayload(str)\n }\n\n async addParamsBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n const items = body[body.mode as keyof PostmanBody] as PostmanFormData[]\n if (!Array.isArray(items)) {\n return\n }\n const data = this.ensureVarsRecursively(items) as PostmanFormData[]\n const multipartBody: IMultipartBody[] = []\n for (const part of data) {\n if (part.type === 'text') {\n await this.addParamsTextPart(multipartBody, part)\n } else if (part.type === 'file') {\n await this.addParamsFilePart(multipartBody, part)\n }\n }\n created.expects.payload = {\n type: 'formdata',\n data: multipartBody,\n }\n }\n\n async addParamsTextPart(body: IMultipartBody[], param: PostmanFormData): Promise<void> {\n const { key, value, disabled = false } = param\n body.push({\n isFile: false,\n name: key || 'unnamed part',\n value: value || '',\n enabled: !disabled,\n })\n }\n\n async addParamsFilePart(body: IMultipartBody[], param: PostmanFormData): Promise<void> {\n // Postman sets the `value` property with the path to the file\n // but not data itself. Because of that this method is a stub that can be extended\n // by particular implementation (like node, CLI).\n }\n\n async addRawBody(created: ProjectRequest, body: PostmanBody): Promise<void> {\n if (body.raw) {\n await created.expects.writePayload(body.raw)\n }\n }\n}\n"]}
|