@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":"Environment.js","sourceRoot":"","sources":["../../../src/models/Environment.ts"],"names":[],"mappings":"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","sourcesContent":["import { Property, IProperty } from './Property.js'\nimport { Server, IServer } from './Server.js'\nimport { IThing, Thing } from './Thing.js'\nimport { nanoid } from 'nanoid'\nimport { ARCVariable } from './legacy/models/Variable.js'\nimport { IRequestAuthorization, RequestAuthorization } from './RequestAuthorization.js'\n\nexport const Kind = 'Core#Environment'\n\nexport interface IEnvironmentCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the environment.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\n/**\n * A project environment definition.\n */\nexport interface IEnvironment {\n kind: typeof Kind\n /**\n * The identifier of the environment.\n */\n key: string\n /**\n * The environment's meta info.\n */\n info: IThing\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: IServer\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: IProperty[]\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n */\n encapsulated?: boolean\n /**\n * The security to be applied to all requests that are going to this environment.\n */\n authorization?: IRequestAuthorization[]\n}\n\n/**\n * An environment is applied to a project or a folder.\n * It consists of a list of variables and a server configuration.\n * This allows to apply the runtime configuration just by changing the environment.\n */\nexport class Environment {\n kind = Kind\n key = ''\n /**\n * The name of the environment.\n */\n info: Thing = Thing.fromName('')\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: Property[] = []\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: Server\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n *\n * When encapsulation is disabled you can, for example, skip server definition and only overwrite variables.\n */\n encapsulated = false\n /**\n * The security to be applied to all requests that are going to this server.\n */\n authorization?: RequestAuthorization[]\n\n /**\n * Creates a new Environment object from a name.\n *\n * @param name The name to set.\n */\n static fromName(name: string): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n return definition\n }\n\n static fromLegacyVariables(name: string, variables: ARCVariable[]): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n variables.forEach((i) => {\n const name = i.variable || i.name\n const property = Property.fromApiType(i)\n property.name = name\n definition.variables.push(property)\n })\n return definition\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IEnvironment) {\n let init: IEnvironment\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 info: Thing.fromName('').toJSON(),\n variables: [],\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n *\n * Note, this throws an error when the environment is not an environment.\n */\n new(init: IEnvironment): void {\n if (!Environment.isEnvironment(init)) {\n throw new Error(`Not an environment.`)\n }\n const { key = nanoid(), variables, info, server, encapsulated = false, authorization } = init\n this.kind = Kind\n this.key = key\n this.encapsulated = encapsulated\n if (Array.isArray(authorization)) {\n this.authorization = authorization.map((i) => new RequestAuthorization(i))\n } else {\n this.authorization = undefined\n }\n if (Array.isArray(variables)) {\n this.variables = variables.map((i) => new Property(i))\n } else {\n this.variables = []\n }\n if (server) {\n this.server = new Server(server)\n } else {\n this.server = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n }\n\n /**\n * Checks whether the input is a definition of a environment.\n */\n static isEnvironment(input: unknown): boolean {\n const typed = input as IEnvironment\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n toJSON(): IEnvironment {\n const { variables = [], encapsulated = false, server } = this\n const result: IEnvironment = {\n kind: Kind,\n key: this.key,\n info: this.info.toJSON(),\n variables: variables.map((v) => v.toJSON()),\n encapsulated,\n }\n if (server) {\n result.server = server.toJSON()\n }\n if (Array.isArray(this.authorization)) {\n result.authorization = this.authorization.map((i) => i.toJSON())\n }\n return result\n }\n\n addVariable(name: string, value: unknown): Property\n addVariable(variable: IProperty): Property\n\n /**\n * Adds a new variable to the list of variables.\n * It makes sure the variables property is initialized.\n */\n addVariable(variableOrName: IProperty | string, value?: unknown): Property {\n if (!Array.isArray(this.variables)) {\n this.variables = []\n }\n let prop: Property\n if (typeof variableOrName === 'string') {\n prop = Property.fromType(variableOrName, value)\n } else {\n prop = new Property(variableOrName)\n }\n this.variables.push(prop)\n return prop\n }\n\n /**\n * Reads the server configuration.\n * @param force When set then it creates a server instance when missing.\n */\n getServer(force?: boolean): Server | undefined {\n if (!this.server && !force) {\n return undefined\n }\n\n if (!this.server) {\n this.server = new Server()\n }\n return this.server\n }\n\n /**\n * Adds a new server definition.\n * @param uriOrInfo Either URI to create the server from or the definition of the server.\n */\n addServer(uriOrInfo: string | IServer): Server {\n let srv: Server\n if (typeof uriOrInfo === 'string') {\n srv = Server.fromUri(uriOrInfo)\n } else {\n srv = new Server(uriOrInfo)\n }\n this.server = srv\n return srv\n }\n\n /**\n * Makes a copy of this environment\n * @param opts Cloning options.\n */\n clone(opts: IEnvironmentCloneOptions = {}): Environment {\n const copy = new Environment(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = nanoid()\n }\n return copy\n }\n\n /**\n * Creates a map of variables from this environment.\n *\n * @param readStrategy The read strategy. When `lastWins` (default) then a variable with the same name overwrites\n * the previously set variable. The `firstWins` stops overwriting values once a variable is set.\n * @returns An object containing variables defined in this environment\n */\n variablesMap(readStrategy: 'lastWins' | 'firstWins' = 'lastWins'): Record<string, string> {\n const result: Record<string, string> = {}\n const { variables = [] } = this\n variables.forEach((item) => {\n const { enabled, name, value } = item\n if (!enabled || !name || value === undefined) {\n return\n }\n if (readStrategy === 'firstWins' && name in result) {\n return\n }\n result[name] = value as string\n })\n return result\n }\n\n /**\n * @returns A list of unique properties. The last defined property wins (with the same name).\n */\n uniqueProperties(): Property[] {\n const flatProperties: Property[] = []\n if (this.variables) {\n for (const prop of this.variables) {\n const index = flatProperties.findIndex((i) => i.name === prop.name)\n if (index >= 0) {\n flatProperties.splice(index, 1)\n }\n flatProperties.push(prop)\n }\n }\n return flatProperties\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Environment.js","sourceRoot":"","sources":["../../../src/models/Environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,MAAM,EAAW,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAU,KAAK,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAyB,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEvF,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AA6CtC;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACtB,IAAI,GAAG,IAAI,CAAA;IACX,GAAG,GAAG,EAAE,CAAA;IACR;;OAEG;IACH,IAAI,GAAU,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChC;;;OAGG;IACH,SAAS,GAAe,EAAE,CAAA;IAC1B;;;;OAIG;IACH,MAAM,CAAS;IACf;;;;;OAKG;IACH,YAAY,GAAG,KAAK,CAAA;IACpB;;OAEG;IACH,aAAa,CAAyB;IAEtC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC;YACjC,GAAG;YACH,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;YACnB,SAAS,EAAE,EAAE;SACd,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,SAAwB;QAC/D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC;YACjC,GAAG;YACH,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;YACnB,SAAS,EAAE,EAAE;SACd,CAAC,CAAA;QACF,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAA;YACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YACxC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;YACpB,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,YAAY,KAA6B;QACvC,IAAI,IAAkB,CAAA;QACtB,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,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,SAAS,EAAE,EAAE;aACd,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAkB;QACpB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;QAC7F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;QAChC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACrB,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACzB,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAc;QACjC,MAAM,KAAK,GAAG,KAAqB,CAAA;QACnC,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,EAAE,SAAS,GAAG,EAAE,EAAE,YAAY,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC7D,MAAM,MAAM,GAAiB;YAC3B,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3C,YAAY;SACb,CAAA;QACD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QACjC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAKD;;;OAGG;IACH,WAAW,CAAC,cAAkC,EAAE,KAAe;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACrB,CAAC;QACD,IAAI,IAAc,CAAA;QAClB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAe;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,SAA2B;QACnC,IAAI,GAAW,CAAA;QACf,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAiC,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,eAAyC,UAAU;QAC9D,MAAM,MAAM,GAA2B,EAAE,CAAA;QACzC,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAC/B,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACrC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAM;YACR,CAAC;YACD,IAAI,YAAY,KAAK,WAAW,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnD,OAAM;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAe,CAAA;QAChC,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,cAAc,GAAe,EAAE,CAAA;QACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACf,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACjC,CAAC;gBACD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAA;IACvB,CAAC;CACF","sourcesContent":["import { Property, IProperty } from './Property.js'\nimport { Server, IServer } from './Server.js'\nimport { IThing, Thing } from './Thing.js'\nimport { nanoid } from '../nanoid.js'\nimport { ARCVariable } from './legacy/models/Variable.js'\nimport { IRequestAuthorization, RequestAuthorization } from './RequestAuthorization.js'\n\nexport const Kind = 'Core#Environment'\n\nexport interface IEnvironmentCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the environment.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\n/**\n * A project environment definition.\n */\nexport interface IEnvironment {\n kind: typeof Kind\n /**\n * The identifier of the environment.\n */\n key: string\n /**\n * The environment's meta info.\n */\n info: IThing\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: IServer\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: IProperty[]\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n */\n encapsulated?: boolean\n /**\n * The security to be applied to all requests that are going to this environment.\n */\n authorization?: IRequestAuthorization[]\n}\n\n/**\n * An environment is applied to a project or a folder.\n * It consists of a list of variables and a server configuration.\n * This allows to apply the runtime configuration just by changing the environment.\n */\nexport class Environment {\n kind = Kind\n key = ''\n /**\n * The name of the environment.\n */\n info: Thing = Thing.fromName('')\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: Property[] = []\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: Server\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n *\n * When encapsulation is disabled you can, for example, skip server definition and only overwrite variables.\n */\n encapsulated = false\n /**\n * The security to be applied to all requests that are going to this server.\n */\n authorization?: RequestAuthorization[]\n\n /**\n * Creates a new Environment object from a name.\n *\n * @param name The name to set.\n */\n static fromName(name: string): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n return definition\n }\n\n static fromLegacyVariables(name: string, variables: ARCVariable[]): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n variables.forEach((i) => {\n const name = i.variable || i.name\n const property = Property.fromApiType(i)\n property.name = name\n definition.variables.push(property)\n })\n return definition\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IEnvironment) {\n let init: IEnvironment\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 info: Thing.fromName('').toJSON(),\n variables: [],\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n *\n * Note, this throws an error when the environment is not an environment.\n */\n new(init: IEnvironment): void {\n if (!Environment.isEnvironment(init)) {\n throw new Error(`Not an environment.`)\n }\n const { key = nanoid(), variables, info, server, encapsulated = false, authorization } = init\n this.kind = Kind\n this.key = key\n this.encapsulated = encapsulated\n if (Array.isArray(authorization)) {\n this.authorization = authorization.map((i) => new RequestAuthorization(i))\n } else {\n this.authorization = undefined\n }\n if (Array.isArray(variables)) {\n this.variables = variables.map((i) => new Property(i))\n } else {\n this.variables = []\n }\n if (server) {\n this.server = new Server(server)\n } else {\n this.server = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n }\n\n /**\n * Checks whether the input is a definition of a environment.\n */\n static isEnvironment(input: unknown): boolean {\n const typed = input as IEnvironment\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n toJSON(): IEnvironment {\n const { variables = [], encapsulated = false, server } = this\n const result: IEnvironment = {\n kind: Kind,\n key: this.key,\n info: this.info.toJSON(),\n variables: variables.map((v) => v.toJSON()),\n encapsulated,\n }\n if (server) {\n result.server = server.toJSON()\n }\n if (Array.isArray(this.authorization)) {\n result.authorization = this.authorization.map((i) => i.toJSON())\n }\n return result\n }\n\n addVariable(name: string, value: unknown): Property\n addVariable(variable: IProperty): Property\n\n /**\n * Adds a new variable to the list of variables.\n * It makes sure the variables property is initialized.\n */\n addVariable(variableOrName: IProperty | string, value?: unknown): Property {\n if (!Array.isArray(this.variables)) {\n this.variables = []\n }\n let prop: Property\n if (typeof variableOrName === 'string') {\n prop = Property.fromType(variableOrName, value)\n } else {\n prop = new Property(variableOrName)\n }\n this.variables.push(prop)\n return prop\n }\n\n /**\n * Reads the server configuration.\n * @param force When set then it creates a server instance when missing.\n */\n getServer(force?: boolean): Server | undefined {\n if (!this.server && !force) {\n return undefined\n }\n\n if (!this.server) {\n this.server = new Server()\n }\n return this.server\n }\n\n /**\n * Adds a new server definition.\n * @param uriOrInfo Either URI to create the server from or the definition of the server.\n */\n addServer(uriOrInfo: string | IServer): Server {\n let srv: Server\n if (typeof uriOrInfo === 'string') {\n srv = Server.fromUri(uriOrInfo)\n } else {\n srv = new Server(uriOrInfo)\n }\n this.server = srv\n return srv\n }\n\n /**\n * Makes a copy of this environment\n * @param opts Cloning options.\n */\n clone(opts: IEnvironmentCloneOptions = {}): Environment {\n const copy = new Environment(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = nanoid()\n }\n return copy\n }\n\n /**\n * Creates a map of variables from this environment.\n *\n * @param readStrategy The read strategy. When `lastWins` (default) then a variable with the same name overwrites\n * the previously set variable. The `firstWins` stops overwriting values once a variable is set.\n * @returns An object containing variables defined in this environment\n */\n variablesMap(readStrategy: 'lastWins' | 'firstWins' = 'lastWins'): Record<string, string> {\n const result: Record<string, string> = {}\n const { variables = [] } = this\n variables.forEach((item) => {\n const { enabled, name, value } = item\n if (!enabled || !name || value === undefined) {\n return\n }\n if (readStrategy === 'firstWins' && name in result) {\n return\n }\n result[name] = value as string\n })\n return result\n }\n\n /**\n * @returns A list of unique properties. The last defined property wins (with the same name).\n */\n uniqueProperties(): Property[] {\n const flatProperties: Property[] = []\n if (this.variables) {\n for (const prop of this.variables) {\n const index = flatProperties.findIndex((i) => i.name === prop.name)\n if (index >= 0) {\n flatProperties.splice(index, 1)\n }\n flatProperties.push(prop)\n }\n }\n return flatProperties\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../src/models/Folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../src/models/Folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AASvC;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,IAAI;IACrB,IAAI,GAAG,UAAU,CAAA;IAE1B;;;;;OAKG;IACH,MAAM,CAAU,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAc;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAW,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,YAAY,KAAwB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,IAAa,CAAA;QACjB,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,UAAU;gBAChB,GAAG,EAAE,MAAM,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;aACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;OAEG;IACM,GAAG,CAAC,IAAa;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAc;QAC5B,MAAM,KAAK,GAAG,KAAgB,CAAA;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAY;YACtB,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,UAAU;SACjB,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { IFile, File } from './store/File.js'\nimport { nanoid } from '../nanoid.js'\nimport { Thing } from './Thing.js'\nimport { FolderKind } from './kinds.js'\n\n/**\n * A definition of a folder.\n */\nexport interface IFolder extends IFile {\n kind: typeof FolderKind\n}\n\n/**\n * A definition of a folder.\n */\nexport class Folder extends File {\n override kind = FolderKind\n\n /**\n * Creates a new Folder object from a name.\n *\n * @param name The name to set.\n * @param owner The user id that is the owner of the folder.\n */\n static override fromName(name: string, organization: string, owner?: string): Folder {\n return super.fromName(name, organization, owner, FolderKind) as Folder\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IFolder) {\n super()\n let init: IFolder\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: FolderKind,\n key: nanoid(),\n organization: '',\n info: Thing.fromName('').toJSON(),\n parents: [],\n permissionIds: [],\n permissions: [],\n lastModified: { user: '', time: 0, byMe: false },\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n */\n override new(init: IFolder): this {\n if (!Folder.isFolder(init)) {\n throw new Error(`Not a folder.`)\n }\n super.new(init)\n this.kind = FolderKind\n return this\n }\n\n /**\n * Checks whether the input is a definition of a folder.\n */\n static isFolder(input: unknown): boolean {\n const typed = input as IFolder\n if (!input || typed.kind !== FolderKind) {\n return false\n }\n return true\n }\n\n override toJSON(): IFolder {\n const result: IFolder = {\n ...super.toJSON(),\n kind: FolderKind,\n }\n return result\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostRule.js","sourceRoot":"","sources":["../../../src/models/HostRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"HostRule.js","sourceRoot":"","sources":["../../../src/models/HostRule.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from '../nanoid.js'\n\nexport const Kind = 'Core#HostRule'\n\n/**\n * API Client host rule definition.\n */\nexport interface IHostRule {\n /**\n * The key of the rule.\n */\n key: string\n\n kind?: typeof Kind\n /**\n * The from rule (may contain asterisks)\n */\n from: string\n /**\n * The replacement value\n */\n to: string\n /**\n * When false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n}\n\nexport class HostRule {\n /**\n * The key of the rule.\n */\n key = ''\n\n kind = Kind\n /**\n * The from rule (may contain asterisks)\n */\n from = ''\n /**\n * replacement value\n */\n to = ''\n /**\n * if false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n\n static fromValues(from: string, to: string): HostRule {\n const result = new HostRule({\n key: nanoid(),\n kind: Kind,\n from,\n to,\n enabled: true,\n })\n return result\n }\n\n /**\n * @param input The thing definition used to restore the state.\n */\n constructor(input?: string | IHostRule) {\n let init: IHostRule\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n key: nanoid(),\n kind: Kind,\n from: '',\n to: '',\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new thing clearing anything that is so far defined.\n *\n * Note, this throws an error when the server is not an API Client thing.\n */\n new(init: IHostRule): void {\n if (!HostRule.isHostRule(init)) {\n throw new Error(`Not a HostRule.`)\n }\n const { from = '', to = '', enabled, comment, key = nanoid() } = init\n this.kind = Kind\n this.key = key\n this.from = from\n this.to = to\n this.enabled = enabled\n this.comment = comment\n }\n\n /**\n * Checks whether the input is a definition of a host rule.\n */\n static isHostRule(input: unknown): boolean {\n const typed = input as IHostRule\n if (input && typed.kind && typed.kind === Kind) {\n return true\n }\n return false\n }\n\n toJSON(): IHostRule {\n const result: IHostRule = {\n kind: Kind,\n key: this.key,\n from: this.from,\n to: this.to,\n }\n if (typeof this.enabled === 'boolean') {\n result.enabled = this.enabled\n }\n if (this.comment) {\n result.comment = this.comment\n }\n return result\n }\n\n /**\n * Applies `hosts` rules to the URL.\n *\n * @param value An URL to apply the rules to\n * @param rules List of host rules. It is a list of objects containing `from` and `to` properties.\n * @return Evaluated URL with hosts rules.\n */\n static applyHosts(value: string, rules: HostRule[]): string {\n if (!rules || !rules.length) {\n return value\n }\n for (const rule of rules) {\n const result = HostRule.evaluateRule(value, rule)\n if (result) {\n value = result\n }\n }\n return value\n }\n\n /**\n * Evaluates hosts rule and applies it to the `url`.\n * @param {string} url The URL to evaluate\n * @param {HostRule} rule The host rule definition\n * @return {string} Processed url.\n */\n static evaluateRule(url: string, rule: HostRule): string | undefined {\n if (!rule || !rule.from || !rule.to) {\n return\n }\n const re = HostRule.createRuleRe(rule.from)\n if (!re.test(url)) {\n return\n }\n return url.replace(re, rule.to)\n }\n\n /**\n * @param input Rule body\n * @return Regular expression for the rule.\n */\n static createRuleRe(input: string): RegExp {\n input = input.replace(/\\*/g, '(.*)')\n return new RegExp(input, 'gi')\n }\n}\n"]}
|
|
@@ -11,7 +11,7 @@ import { ProjectFolder } from './ProjectFolder.js';
|
|
|
11
11
|
import { ProjectRequest, Kind as ProjectRequestKind } from './ProjectRequest.js';
|
|
12
12
|
import { ProjectSchema } from './ProjectSchema.js';
|
|
13
13
|
import { Request } from './Request.js';
|
|
14
|
-
import { nanoid } from 'nanoid';
|
|
14
|
+
import { nanoid } from '../nanoid.js';
|
|
15
15
|
import { PostmanDataTransformer } from './transformers/PostmanDataTransformer.js';
|
|
16
16
|
import { Certificate } from './ClientCertificate.js';
|
|
17
17
|
import { ProjectFolderKind } from './kinds.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpProject.js","sourceRoot":"","sources":["../../../src/models/HttpProject.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\nimport { ProjectParent } from './ProjectParent.js'\nimport { IProjectDefinitionProperty } from './ProjectDefinitionProperty.js'\nimport { Environment, IEnvironment, Kind as EnvironmentKind } from './Environment.js'\nimport { License, ILicense } from './License.js'\nimport { Provider, IProvider } from './Provider.js'\nimport { IThing, Thing } from './Thing.js'\nimport { ProjectItem, IProjectItem } from './ProjectItem.js'\nimport { IProjectFolder, ProjectFolder } from './ProjectFolder.js'\nimport { IProjectRequest, ProjectRequest, Kind as ProjectRequestKind } from './ProjectRequest.js'\nimport { ProjectSchema, IProjectSchema } from './ProjectSchema.js'\nimport { Request } from './Request.js'\nimport { nanoid } from 'nanoid'\nimport { ARCSavedRequest, ARCHistoryRequest } from './legacy/request/ArcRequest.js'\nimport { ArcLegacyProject, ARCProject } from './legacy/models/ArcLegacyProject.js'\nimport { PostmanDataTransformer } from './transformers/PostmanDataTransformer.js'\nimport { Certificate, HttpCertificate } from './ClientCertificate.js'\nimport { ICCAuthorization } from './Authorization.js'\nimport { ProjectFolderKind } from './kinds.js'\n\nexport const Kind = 'Core#HttpProject'\n\nexport interface IItemOptions {\n /**\n * The parent folder of the item to.\n */\n parent?: string\n}\n\nexport interface IItemCreateOptions extends IItemOptions {\n /**\n * The position at which to add the item.\n */\n index?: number\n}\n\nexport interface IEnvironmentCreateOptions extends IItemCreateOptions {}\n\n/**\n * A list of options to initialize a project in various situations.\n */\nexport interface IProjectInitOptions {\n /**\n * The name of the project.\n */\n name: string\n}\n\nexport interface IFolderCreateOptions {\n /**\n * Ignores the operation when the folder with the same name already exists.\n * This command can be used used to ensure that the folder exists.\n */\n skipExisting?: boolean\n /**\n * The id of the parent folder. When not set it adds the folder to the project root.\n */\n parent?: string\n /**\n * Optionally the position at which to add the folder into the list of items.\n */\n index?: number\n}\n\nexport interface IFolderSearchOptions {\n /**\n * When set it searches for a folder using keys only.\n * By default it searches for a key and the name.\n */\n keyOnly?: boolean\n}\n\nexport interface IFolderDeleteOptions {\n /**\n * When set it won't throw an error when the folder is not found in the project.\n */\n safe?: boolean\n}\n\nexport interface IRequestAddOptions {\n /**\n * The id of the parent folder. When not set it adds the request to the project root.\n */\n parent?: string\n /**\n * Optionally the position at which to add the request into the list of items.\n */\n index?: number\n}\n\nexport interface IRequestSearchOptions {\n /**\n * When set it searches for a request using keys only.\n * By default it searches for a key and the name.\n */\n keyOnly?: boolean\n}\n\nexport interface IRequestDeleteOptions {\n /**\n * When set it won't throw an error when the request is not found in the project.\n */\n safe?: boolean\n}\n\nexport interface IProjectMoveOptions {\n /**\n * The position at which to insert the object in the destination. BY default it adds the object at the end.\n */\n index?: number\n /**\n * The name or the key of the parent folder to move the item into.\n * When not set it moves the item to the project's root.\n */\n parent?: string\n}\n\nexport interface IReadEnvironmentOptions extends IItemOptions {\n /**\n * The name or the key of the environment to select.\n *\n * When the name is not specified it selects:\n * - the first environment from the project, if any\n * - any parent folder's first environment to the requested folder, if any (if parent is set)\n * - the requested folder's first environment, if any (if parent is set)\n */\n nameOrKey?: string\n}\n\n/**\n * The object stored as a list index for the projects.\n * This is used to list projects in the store and in the UI.\n */\nexport interface IHttpProjectIndex {\n key: string\n name: string\n version?: string\n}\n\nexport interface IProjectCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the request.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\nexport interface IFolderListOptions {\n /**\n * Folder name or key to list folders for.\n */\n folder?: string\n}\n\nexport interface ISchemaAddOptions {\n /**\n * Optionally the position at which to add the schema into the list of schemas.\n */\n index?: number\n}\n\nexport interface IProjectRequestIterator {\n /**\n * The parent folder key or name. Sets the starting point to iterate over the requests.\n */\n parent?: string\n /**\n * When set it includes requests in the current folder and sub-folder according to the order\n * defined in the folder.\n */\n recursive?: boolean\n /**\n * Limits the number of requests to include in the iterator.\n * It is an array of request keys or names.\n */\n requests?: string[]\n /**\n * The opposite of the `requests`. The list of names or keys of requests or folders to ignore.\n * Note, ignore is tested before the `requests`.\n */\n ignore?: string[]\n}\n\nexport interface IProjectFolderIterator {\n /**\n * The parent folder key or name. Sets the starting point to iterate over the folder.\n */\n parent?: string\n /**\n * When set it includes folders in the current folder and sub-folder according to the order\n * defined in the folder.\n */\n recursive?: boolean\n /**\n * The list of names or keys to ignore.\n */\n ignore?: string[]\n}\n\nexport interface IProjectFolderIteratorResult {\n /**\n * The folder.\n */\n folder: ProjectFolder\n /**\n * Optional parent key.\n */\n parent?: string\n /**\n * How deep in the structure the folder is located.\n * The indent is relative to the `parent`.\n */\n indent: number\n}\n\n/**\n * The new definition of a project in API Client.\n * Note, this is not the same as future `ApiProject` which is reserved for building APIs\n * using RAML or OAS.\n */\nexport interface IHttpProject extends IProjectDefinitionProperty {\n kind: typeof Kind\n /**\n * The license information for this HTTP project.\n */\n license?: ILicense\n /**\n * The basic information about the project.\n */\n info: IThing\n /**\n * Information about project provider.\n */\n provider?: IProvider\n /**\n * The ordered list of HTTP requests / folders in the projects.\n * The UI uses this to manipulate the view without changing the definitions.\n */\n items: IProjectItem[]\n /**\n * The project definitions.\n * This is where all the data are stored.\n */\n definitions: IHttpProjectDefinitions\n}\n\nexport interface IHttpProjectDefinitions {\n requests?: IProjectRequest[]\n folders?: IProjectFolder[]\n schemas?: IProjectSchema[]\n environments?: IEnvironment[]\n certificates?: HttpCertificate[]\n}\n\ninterface HttpProjectDefinitions {\n requests: ProjectRequest[]\n folders: ProjectFolder[]\n schemas: ProjectSchema[]\n environments: Environment[]\n certificates: Certificate[]\n}\n\n/**\n * An instance of an HttpProject.\n */\nexport class HttpProject extends ProjectParent {\n override kind = Kind\n private initEnvironments?: Environment[]\n /**\n * The license information for this HTTP project.\n */\n license?: License\n /**\n * Information about project provider.\n */\n provider?: Provider\n /**\n * The list of all requests stored in this project.\n * Note, this is not used to visualized the request in the UI.\n * This is just the source of data.\n * The `items` property is used to build the view.\n */\n definitions: HttpProjectDefinitions = HttpProject.defaultDefinitions()\n\n static defaultDefinitions(): HttpProjectDefinitions {\n return { environments: [], folders: [], requests: [], schemas: [], certificates: [] }\n }\n\n /**\n * Creates a new HTTP project from a name.\n * @param {string} name The name to set.\n */\n static fromName(name: string): HttpProject {\n const project = new HttpProject()\n const info = Thing.fromName(name)\n project.info = info\n return project\n }\n\n /**\n * Creates an HTTP project instance from ARC's legacy project definition.\n */\n static async fromLegacy(project: ArcLegacyProject, requests: ARCSavedRequest[]): Promise<HttpProject> {\n const { name = 'Unnamed project', description, requests: ids } = project\n const typedLegacyDb = project as ARCProject\n const result = HttpProject.fromName(name)\n if (typedLegacyDb._id) {\n result.key = typedLegacyDb._id\n }\n if (description) {\n result.info.description = description\n }\n if (Array.isArray(ids) && ids.length) {\n const promises = ids.map(async (id) => {\n const old = requests.find((item) => item._id === id)\n if (!old) {\n return\n }\n const request = await Request.fromLegacy(old)\n const projectRequest = ProjectRequest.fromRequest(request.toJSON(), result)\n if (old._id) {\n projectRequest.key = old._id\n }\n result.addRequest(projectRequest)\n })\n await Promise.allSettled(promises)\n }\n return result\n }\n\n /**\n * Creates an HTTP project from a Postman collection\n * @param init The postman collection object or a string that can be parsed to one.\n */\n static async fromPostman(init: any): Promise<HttpProject> {\n const result = await PostmanDataTransformer.transform(init)\n if (Array.isArray(result) && result.length > 1) {\n throw new Error(`Unable to process postman data. It contains multiple collections.`)\n }\n const project = Array.isArray(result) ? result[0] : result\n return project\n }\n\n /**\n * Creates a new project from a set of options.\n */\n static fromInitOptions(init: IProjectInitOptions): HttpProject {\n const { name = 'Unnamed project' } = init\n return HttpProject.fromName(name)\n }\n\n /**\n * @param input The project definition used to restore the state.\n * @param environments Optional list of environments to use with this project. It overrides\n * environments stored in the project definition.\n */\n constructor(input?: string | IHttpProject, environments?: IEnvironment[]) {\n super()\n if (Array.isArray(environments)) {\n this.initEnvironments = environments.map((i) => new Environment(i))\n }\n let init: IHttpProject\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n if (!init.kind) {\n init.kind = Kind\n }\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n definitions: {},\n items: [],\n info: Thing.fromName('').toJSON(),\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new project definition clearing anything that is so far defined.\n *\n * Note, this throws an error when the project is not an API Client project.\n */\n new(init: IHttpProject): void {\n if (!init || !init.definitions || !init.items) {\n throw new Error(`Not a project.`)\n }\n const { key = nanoid(), definitions = {}, items, info, license, provider } = init\n this.key = key\n if (license) {\n this.license = new License(license)\n } else {\n this.license = undefined\n }\n if (provider) {\n this.provider = new Provider(provider)\n } else {\n this.provider = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n this.items = []\n if (Array.isArray(items)) {\n this.items = items.map((i) => new ProjectItem(this, i))\n }\n this.definitions = HttpProject.defaultDefinitions()\n if (Array.isArray(definitions.environments)) {\n this.definitions.environments = definitions.environments.map((i) => new Environment(i))\n }\n if (Array.isArray(definitions.requests)) {\n this.definitions.requests = definitions.requests.map((i) => {\n const instance = new ProjectRequest(this, i)\n instance.attachedCallback()\n return instance\n })\n }\n if (Array.isArray(definitions.folders)) {\n this.definitions.folders = definitions.folders.map((i) => {\n const instance = new ProjectFolder(this, i)\n instance.attachedCallback()\n return instance\n })\n }\n if (Array.isArray(definitions.schemas)) {\n this.definitions.schemas = definitions.schemas.map((i) => new ProjectSchema(i))\n }\n if (Array.isArray(definitions.certificates)) {\n this.definitions.certificates = definitions.certificates.map((i) => new Certificate(i))\n }\n }\n\n toJSON(): IHttpProject {\n const result: IHttpProject = {\n kind: Kind,\n key: this.key,\n definitions: {},\n items: [],\n info: this.info.toJSON(),\n }\n if (Array.isArray(this.definitions.environments) && this.definitions.environments.length) {\n result.definitions.environments = this.definitions.environments.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.requests) && this.definitions.requests.length) {\n result.definitions.requests = this.definitions.requests.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.folders) && this.definitions.folders.length) {\n result.definitions.folders = this.definitions.folders.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.schemas) && this.definitions.schemas.length) {\n result.definitions.schemas = this.definitions.schemas.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.certificates) && this.definitions.certificates.length) {\n result.definitions.certificates = this.definitions.certificates.map((i) => i.toJSON())\n }\n if (Array.isArray(this.items) && this.items.length) {\n result.items = this.items.map((i) => i.toJSON())\n }\n if (this.provider) {\n result.provider = this.provider.toJSON()\n }\n if (this.license) {\n result.license = this.license.toJSON()\n }\n return result\n }\n\n /**\n * @returns JSON representation of the project\n */\n override toString(): string {\n return JSON.stringify(this)\n }\n\n /**\n * Finds a parent of a definition.\n *\n * @param key The key of the definition.\n * @returns The parent or undefine when not found.\n */\n findParent(key: string): ProjectFolder | HttpProject | undefined {\n const { definitions, items = [] } = this\n const projectItemsIndex = items.findIndex((i) => i.key === key)\n if (projectItemsIndex > -1) {\n return this\n }\n const definition = definitions.folders.find((i) => i.items.some((item) => item.key === key))\n if (definition) {\n return definition\n }\n return undefined\n }\n\n /**\n * Appends a new folder to the project or a sub-folder.\n *\n * Passing the folder schema as the fist argument is primarily used to insert a folder on the client side\n * after a folder was created in the store.\n *\n * @param init The name or a folder schema. When not set a default name is assumed.\n * @param opts Folder create options.\n * @returns The newly inserted folder. If the folder already existed it returns its instance.\n */\n addFolder(\n init: string | IProjectFolder | ProjectFolder = ProjectFolder.defaultName,\n opts: IFolderCreateOptions = {}\n ): ProjectFolder {\n if (!Array.isArray(this.items)) {\n this.items = []\n }\n if (!Array.isArray(this.definitions.folders)) {\n this.definitions.folders = []\n }\n const { skipExisting, parent } = opts\n let root: ProjectFolder | HttpProject\n if (parent) {\n const rootCandidate = this.findFolder(parent)\n if (!rootCandidate) {\n throw new Error(`Unable to find the parent folder ${parent}`)\n }\n root = rootCandidate\n } else {\n root = this\n }\n let definition: ProjectFolder\n if (typeof init === 'string') {\n definition = ProjectFolder.fromName(this, init)\n } else if (init instanceof ProjectFolder) {\n definition = init\n } else {\n definition = new ProjectFolder(this, init)\n }\n if (skipExisting) {\n const folders = root.listFolderItems()\n for (const item of folders) {\n const existing = this.findFolder(item.key, { keyOnly: true })\n if (existing && existing.info.name === definition.info.name) {\n return existing\n }\n }\n }\n\n this.definitions.folders.push(definition)\n const item = ProjectItem.projectFolder(this, definition.key)\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n definition.attachedCallback()\n return definition\n }\n\n /**\n * Searches for a folder in the structure.\n *\n * @param nameOrKey The name or the key of the folder.\n * @param opts Optional search options.\n * @returns Found project folder or undefined.\n */\n findFolder(nameOrKey: string, opts: IFolderSearchOptions = {}): ProjectFolder | undefined {\n const { definitions } = this\n const item = definitions.folders.find((i) => {\n if (i.kind !== ProjectFolderKind) {\n return false\n }\n const folder = i as ProjectFolder\n if (folder.key === nameOrKey) {\n return true\n }\n if (opts.keyOnly) {\n return false\n }\n return !!folder.info && folder.info.name === nameOrKey\n })\n if (item) {\n return item as ProjectFolder\n }\n }\n\n /**\n * Removes a folder from the project.\n * @param key The folder key. It ignores the name when searching to the folder to avoid ambiguity.\n * @param opts Folder remove options.\n * @returns The removed folder definition or undefined when not removed.\n */\n removeFolder(key: string, opts: IFolderDeleteOptions = {}): ProjectFolder | undefined {\n const { definitions } = this\n const folder = this.findFolder(key, { keyOnly: true })\n if (!folder) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find the folder ${key}`)\n }\n const parent = this.findParent(key)\n if (!parent) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find a parent of the folder ${key}`)\n }\n\n const requests = folder.listRequests()\n requests.forEach((r) => r.remove())\n const folders = folder.listFolders()\n folders.forEach((f) => f.remove())\n\n const itemIndex = parent.items.findIndex((i) => i.key === key)\n const definitionIndex = definitions.folders.findIndex((i) => i.key === key)\n definitions.folders.splice(definitionIndex, 1)\n folder.detachedCallback()\n if (itemIndex >= 0) {\n parent.items.splice(itemIndex, 1)\n }\n return folder\n }\n\n /**\n * Moves a folder between folders and the project or between items inside a folder or a project\n *\n * Note, when the `parent` option is not specified it moved the folder to the project's root.\n *\n * @param key The key of the request to move.\n * @param opts The moving options.\n */\n moveFolder(key: string, opts: IProjectMoveOptions = {}): void {\n const { index, parent } = opts\n const movedFolder = this.findFolder(key)\n if (!movedFolder) {\n throw new Error(`Unable to locate the folder ${key}`)\n }\n const parentFolder = this.findParent(key)\n if (!parentFolder) {\n throw new Error(`Unable to locate a parent of the folder ${key}`)\n }\n if (parent) {\n // check if moving a folder into another folder that is a child of the moved folder.\n if (this.hasChild(parent, key)) {\n throw new RangeError(`Unable to move a folder to its child.`)\n }\n }\n const target = parent ? this.findFolder(parent) : this\n if (!target) {\n throw new Error(`Unable to locate the new parent folder ${parent}`)\n }\n const hasIndex = typeof index === 'number'\n if (hasIndex) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(target.items.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n const itemIndex = parentFolder.items.findIndex((i) => i.key === key)\n const item = parentFolder.items.splice(itemIndex, 1)[0]\n movedFolder.detachedCallback()\n\n if (hasIndex && target.items.length > index) {\n target.items.splice(index, 0, item)\n } else {\n target.items.push(item)\n }\n movedFolder.attachedCallback()\n }\n\n /**\n * Checks whether a folder has a child (anywhere down the structure).\n *\n * @param child The **key** of the child.\n * @param folder The **key** of the folder. When not set it searches from the project root.\n * @returns True when the child is located somewhere down the structure.\n */\n hasChild(child: string, folder?: string): boolean {\n const target = folder ? this.findFolder(folder) : this\n if (!target) {\n throw new Error(`Unable to locate the folder ${folder}`)\n }\n const { items = [] } = target\n for (const item of items) {\n if (item.key === child) {\n return true\n }\n if (item.kind === ProjectFolderKind) {\n const hasChild = this.hasChild(child, item.key)\n if (hasChild) {\n return true\n }\n }\n }\n return false\n }\n\n /**\n * Adds a request to the project or a sub-folder.\n * @param request The request to add.\n * @param opts Thew request add options.\n * @returns The inserted into the definitions request.\n */\n addRequest(request: IProjectRequest | ProjectRequest | string, opts: IRequestAddOptions = {}): ProjectRequest {\n if (!Array.isArray(this.definitions.requests)) {\n this.definitions.requests = []\n }\n\n // the request can be already added to the project as the same method is used to refresh a request after\n // a store update. From the system perspective it is the same event.\n\n if (typeof request === 'object' && request.key) {\n const existing = this.definitions.requests.find((i) => i.key === request.key)\n if (existing) {\n existing.new(request as IProjectRequest)\n return existing\n }\n }\n\n // if we got here, it means that we are adding a new request object to the project.\n\n let finalRequest\n if (typeof request === 'string') {\n finalRequest = ProjectRequest.fromUrl(request, this)\n } else if (request instanceof ProjectRequest) {\n finalRequest = request\n if (finalRequest.project && finalRequest.project !== this) {\n finalRequest.detachedCallback()\n }\n finalRequest.project = this\n } else {\n finalRequest = new ProjectRequest(this, request)\n }\n if (!finalRequest.key) {\n finalRequest.key = nanoid()\n }\n\n let root: ProjectFolder | HttpProject\n if (opts.parent) {\n const rootCandidate = this.findFolder(opts.parent)\n if (!rootCandidate) {\n throw new Error(`Unable to find the parent folder ${opts.parent}.`)\n }\n root = rootCandidate\n } else {\n root = this\n }\n\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n\n if (typeof opts.index === 'number') {\n const maxIndex = Math.max(root.items.length - 1, 0)\n if (opts.index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n this.definitions.requests.push(finalRequest)\n const item = ProjectItem.projectRequest(this, finalRequest.key)\n\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n finalRequest.attachedCallback()\n return finalRequest\n }\n\n /**\n * Adds a request to the project that has been created for a previous version of ARC.\n *\n * @param legacy The legacy request definition.\n * @returns The created project request.\n */\n async addLegacyRequest(legacy: ARCSavedRequest | ARCHistoryRequest): Promise<ProjectRequest> {\n const request = await Request.fromLegacy(legacy)\n const projectRequest = ProjectRequest.fromRequest(request.toJSON(), this)\n return this.addRequest(projectRequest)\n }\n\n /**\n * Searches for a request in the project.\n *\n * @param nameOrKey The name or the key of the request.\n * @param opts Optional search options.\n * @returns Found project request or undefined.\n */\n findRequest(nameOrKey: string, opts: IRequestSearchOptions = {}): ProjectRequest | undefined {\n const { definitions } = this\n const item = definitions.requests.find((request) => {\n if (request.key === nameOrKey) {\n return true\n }\n if (opts.keyOnly) {\n return false\n }\n return !!request.info && request.info.name === nameOrKey\n })\n if (item) {\n return item as ProjectRequest\n }\n return undefined\n }\n\n /**\n * Removes a request from the project.\n *\n * @param key The request key. It ignores the name when searching to the request to avoid ambiguity.\n * @param opts Request remove options.\n * @returns The removed request definition or undefined when not removed.\n */\n removeRequest(key: string, opts: IRequestDeleteOptions = {}): ProjectRequest | undefined {\n const { definitions } = this\n const request = this.findRequest(key, { keyOnly: true })\n if (!request) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find the request ${key}`)\n }\n const parent = this.findParent(key)\n if (!parent) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find a parent of the request ${key}`)\n }\n const itemIndex = parent.items.findIndex((i) => i.key === key)\n const definitionIndex = definitions.requests.findIndex((i) => i.key === key)\n definitions.requests.splice(definitionIndex, 1)\n request.detachedCallback()\n if (itemIndex >= 0) {\n parent.items.splice(itemIndex, 1)\n }\n return request\n }\n\n /**\n * Moves a request between folders and the project or between items inside a folder or a project.\n *\n * Note, when the `parent` option is not specified it moved the request to the project's root.\n *\n * @param key The key of the request to move.\n * @param opts The moving options.\n */\n moveRequest(key: string, opts: IProjectMoveOptions = {}): void {\n const { index, parent } = opts\n const request = this.findRequest(key)\n if (!request) {\n throw new Error(`Unable to locate the request ${key}`)\n }\n const parentFolder = this.findParent(key)\n if (!parentFolder) {\n throw new Error(`Unable to locate a parent of the request ${key}`)\n }\n const target = parent ? this.findFolder(parent) : this\n if (!target) {\n throw new Error(`Unable to locate the new parent folder ${parent}`)\n }\n const hasIndex = typeof index === 'number'\n if (hasIndex) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(target.items.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n const itemIndex = parentFolder.items.findIndex((i) => i.key === key)\n const item = parentFolder.items.splice(itemIndex, 1)[0]\n request.detachedCallback()\n\n if (hasIndex && target.items.length > index) {\n target.items.splice(index, 0, item)\n } else {\n target.items.push(item)\n }\n request.attachedCallback()\n }\n\n /**\n * Lists items (not the actual definitions!) that are folders.\n */\n listFolderItems(): ProjectItem[] {\n const { items = [] } = this\n return items.filter((i) => i.kind === ProjectFolderKind)\n }\n\n /**\n * Lists items (not the actual definitions!) that are requests.\n */\n listRequestItems(): ProjectItem[] {\n const { items = [] } = this\n return items.filter((i) => i.kind === ProjectRequestKind)\n }\n\n /**\n * Lists folders from the project or a sub-folder.\n * @param opts Folder listing options.\n */\n listFolders(opts: IFolderListOptions = {}): ProjectFolder[] {\n let root\n if (opts.folder) {\n const parent = this.findFolder(opts.folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${opts.folder}.`)\n }\n root = parent\n } else {\n root = this\n }\n const items = root.listFolderItems()\n const result: ProjectFolder[] = []\n const { definitions } = this\n items.forEach((i) => {\n const definition = definitions.folders.find((d) => i.key === d.key)\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Lists requests in this project or a sub-folder.\n * @param folder The optional folder name or the key to list requests for.\n */\n listRequests(folder?: string): ProjectRequest[] {\n let root\n if (folder) {\n const parent = this.findFolder(folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${folder}.`)\n }\n root = parent\n } else {\n root = this\n }\n const items = root.listRequestItems()\n const result: ProjectRequest[] = []\n const { definitions } = this\n items.forEach((i) => {\n const definition = definitions.requests.find((d) => i.key === d.key)\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Lists definitions for the `items` of the project or a folder.\n * @param folder Optionally the folder name to list the definitions for.\n */\n listDefinitions(folder?: string): (ProjectFolder | ProjectRequest | Environment)[] {\n let root\n if (folder) {\n const parent = this.findFolder(folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${folder}`)\n }\n root = parent\n } else {\n root = this\n }\n const result: (ProjectFolder | ProjectRequest | Environment)[] = []\n const { items = [] } = root\n const { definitions } = this\n items.forEach((item) => {\n let definition: ProjectFolder | ProjectRequest | Environment | undefined\n if (item.kind === ProjectFolderKind) {\n definition = definitions.folders.find((d) => item.key === d.key)\n } else if (item.kind === ProjectRequestKind) {\n definition = definitions.requests.find((d) => item.key === d.key)\n } else if (item.kind === EnvironmentKind) {\n definition = definitions.environments.find((d) => item.key === d.key)\n }\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Makes sure the license information exists.\n * @returns The set license.\n */\n ensureLicense(): License {\n if (!this.license) {\n this.license = new License()\n }\n return this.license\n }\n\n /**\n * Makes sure the Provider information exists.\n * @returns The set provider.\n */\n ensureProvider(): Provider {\n if (!this.provider) {\n this.provider = new Provider()\n }\n return this.provider\n }\n\n /**\n * @returns On the project level this always returns undefined.\n */\n getParent(): ProjectFolder | HttpProject | undefined {\n return undefined\n }\n\n attachedCallback(): void {\n // ...\n }\n\n detachedCallback(): void {\n // ...\n }\n\n getProject(): HttpProject {\n return this\n }\n\n /**\n * Makes a copy of this project.\n */\n clone(opts: IProjectCloneOptions = {}): HttpProject {\n const copy = new HttpProject(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = nanoid()\n HttpProject.regenerateKeys(copy)\n }\n return copy\n }\n\n static clone(project: IHttpProject, opts: IProjectCloneOptions = {}): HttpProject {\n const obj = new HttpProject(project)\n return obj.clone(opts)\n }\n\n /**\n * Re-generates keys in the project, taking care of the references.\n *\n * Note, this changes the project properties. Make a copy of the project before calling this.\n *\n * @param src The project instance to re-generate keys for.\n */\n static regenerateKeys(src: HttpProject): void {\n const { items = [], definitions } = src\n // create a flat list of all \"items\" in the project and all folders.\n let flatItems = [...items]\n ;(definitions.folders || []).forEach((folder) => {\n if (Array.isArray(folder.items) && folder.items.length) {\n flatItems = flatItems.concat(folder.items)\n }\n })\n ;(definitions.folders || []).forEach((folder) => {\n const oldKey = folder.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n folder.key = newKey\n })\n ;(definitions.requests || []).forEach((request) => {\n const oldKey = request.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n request.key = newKey\n })\n ;(definitions.schemas || []).forEach((schema) => {\n schema.key = nanoid()\n })\n ;(definitions.certificates || []).forEach((cert) => {\n cert.key = nanoid()\n })\n ;(definitions.environments || []).forEach((environment) => {\n const oldKey = environment.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n environment.key = newKey\n })\n }\n\n /**\n * Adds a request to the project or a sub-folder.\n * @param schema The schema to add or a name of the schema.\n * @param opts Thew schema add options.\n * @returns The inserted into the schemas schema.\n */\n addSchema(schema: IProjectSchema | ProjectSchema | string, opts: ISchemaAddOptions = {}): ProjectSchema {\n if (!Array.isArray(this.definitions.schemas)) {\n this.definitions.schemas = []\n }\n\n // this renews existing schema\n if (typeof schema === 'object' && schema.key) {\n const existing = this.definitions.schemas.find((i) => i.key === schema.key) as ProjectSchema | undefined\n if (existing) {\n existing.new(schema as IProjectSchema)\n return existing\n }\n }\n\n let finalSchema: ProjectSchema\n if (typeof schema === 'string') {\n finalSchema = ProjectSchema.fromName(schema)\n } else if (schema instanceof ProjectSchema) {\n finalSchema = schema\n } else {\n finalSchema = new ProjectSchema(schema)\n }\n if (!finalSchema.key) {\n finalSchema.key = nanoid()\n }\n const { index } = opts\n const hasIndex = typeof index === 'number'\n if (hasIndex && this.definitions.schemas.length > index) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(this.definitions.schemas.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n this.definitions.schemas.splice(index, 0, finalSchema)\n } else {\n this.definitions.schemas.push(finalSchema)\n }\n return finalSchema\n }\n\n /**\n * @returns The current list of schemas in the project.\n */\n listSchemas(): ProjectSchema[] {\n if (!Array.isArray(this.definitions.schemas)) {\n return []\n }\n return this.definitions.schemas\n }\n\n /**\n * Iterates over requests in the project.\n */\n *requestIterator(opts: IProjectRequestIterator = {}): Generator<ProjectRequest> {\n const { definitions } = this\n const { ignore = [], parent, recursive, requests = [] } = opts\n const root = parent ? this.findFolder(parent) : this\n if (!root) {\n throw new Error(`The parent folder not found: ${parent}.`)\n }\n const items = root.items\n if (!items || !items.length) {\n return\n }\n for (const item of items) {\n if (ignore.includes(item.key)) {\n continue\n }\n if (item.kind === ProjectRequestKind) {\n const request = definitions.requests.find((i) => i.key === item.key)\n if (!request) {\n continue\n }\n const name = request.info.name || ''\n if (ignore.includes(name)) {\n continue\n }\n if (requests.length && !requests.includes(item.key) && !requests.includes(name)) {\n continue\n }\n yield request\n } else if (recursive && item.kind === ProjectFolderKind) {\n const folder = definitions.folders.find((i) => i.key === item.key)\n if (!folder) {\n continue\n }\n const name = folder.info.name || ''\n if (ignore.includes(name)) {\n continue\n }\n const it = this.requestIterator({\n parent: item.key,\n recursive,\n ignore,\n requests,\n })\n for (const request of it) {\n yield request\n }\n }\n }\n }\n\n /**\n * Iterates over folders in the project.\n *\n * @param opts Iterator configuration options\n * @param indent Used internally to add `indent` to the result\n * @returns Iterator that yields when a folder is found, including all sub-folders (if configured).\n */\n *folderIterator(opts: IProjectFolderIterator = {}, indent = 0): Generator<IProjectFolderIteratorResult> {\n const { definitions } = this\n const { ignore = [], parent, recursive } = opts\n const root = parent ? this.findFolder(parent) : this\n if (!root) {\n throw new Error(`The parent folder not found: ${parent}.`)\n }\n const items = root.items\n if (!items || !items.length) {\n return\n }\n for (const item of items) {\n if (item.kind !== ProjectFolderKind) {\n continue\n }\n const folder = definitions.folders.find((i) => i.key === item.key)\n if (!folder) {\n // missing definition.\n continue\n }\n if (ignore.includes(folder.key) || (folder.info.name && ignore.includes(folder.info.name))) {\n continue\n }\n const result: IProjectFolderIteratorResult = {\n folder,\n indent,\n }\n if (parent) {\n result.parent = parent\n }\n yield result\n if (recursive) {\n const it = this.folderIterator(\n {\n parent: folder.key,\n recursive,\n ignore,\n },\n indent + 1\n )\n for (const f of it) {\n yield f\n }\n }\n }\n }\n\n [Symbol.iterator](): Generator<ProjectRequest> {\n return this.requestIterator({\n recursive: true,\n })\n }\n\n /**\n * Depending on the options returns a project or a folder.\n * It throws when parent folder cannot ber found.\n */\n protected _getRoot(opts: IItemOptions): ProjectFolder | HttpProject {\n const project = this.getProject()\n if (opts.parent) {\n const parent = project.findFolder(opts.parent)\n if (!parent) {\n throw new Error(`Unable to find the parent folder ${opts.parent}.`)\n }\n return parent\n }\n return project\n }\n\n protected _insertItem(item: ProjectItem, root: ProjectFolder | HttpProject, opts: IItemCreateOptions): void {\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n }\n\n /**\n * Adds an environment to the project.\n * @param env The name of the environment to create or its schema\n * @returns The same or created environment.\n */\n addEnvironment(env: IEnvironment | Environment | string, opts: IEnvironmentCreateOptions = {}): Environment {\n const environment = this._createEnv(env)\n const root = this._getRoot(opts)\n const project = this.getProject()\n if (!project.definitions.environments) {\n project.definitions.environments = []\n }\n project.definitions.environments.push(environment)\n const item = ProjectItem.projectEnvironment(project, environment.key)\n this._insertItem(item, root, opts)\n return environment\n }\n\n protected _createEnv(env: IEnvironment | Environment | string): Environment {\n let finalEnv: Environment\n if (env instanceof Environment) {\n finalEnv = env\n } else if (typeof env === 'string') {\n finalEnv = Environment.fromName(env)\n } else {\n finalEnv = new Environment(env)\n }\n if (!finalEnv.key) {\n finalEnv.key = nanoid()\n }\n return finalEnv\n }\n\n /**\n * This is different to `readEnvironments()`. While the `readEnvironments()`\n * function generate a list of all environments that apply to a folder, this method\n * just lists this folder's environments.\n *\n * @returns The list of environments defined in this folder\n */\n getEnvironments(opts: IItemOptions = {}): Environment[] {\n if (Array.isArray(this.initEnvironments)) {\n return this.initEnvironments\n }\n return this.listEnvironments(opts)\n }\n\n /**\n * @param key The environment key to read.\n */\n getEnvironment(key: string, opts: IItemOptions = {}): Environment | undefined {\n const root = this._getRoot(opts)\n const item = root.items.find((i) => i.key === key)\n if (!item) {\n return undefined\n }\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n return project.definitions.environments.find((e) => e.key === key)\n }\n\n /**\n * Removes an environment from the folder or a sub-folder.\n *\n * @param key the key of the environment to remove\n * @returns The removed environment, if any.\n */\n removeEnvironment(key: string, opts: IItemOptions = {}): Environment | undefined {\n const root = this._getRoot(opts)\n const itemIndex = root.items.findIndex((i) => i.key === key)\n if (itemIndex < 0) {\n return undefined\n }\n root.items.splice(itemIndex, 1)\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n const defIndex = project.definitions.environments.findIndex((i) => i.key === key)\n if (defIndex < 0) {\n return undefined\n }\n const env = project.definitions.environments[defIndex]\n project.definitions.environments.splice(defIndex, 1)\n return env\n }\n\n /**\n * This is a link to the `getEnvironments()`. The difference is that on the\n * project level it won't return environments defined with the class initialization.\n */\n listEnvironments(opts: IItemOptions = {}): Environment[] {\n const root = this._getRoot(opts)\n const items = root.items.filter((i) => i.kind === EnvironmentKind).map((i) => i.key)\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n return project.definitions.environments.filter((e) => items.includes(e.key))\n }\n\n /**\n * Reads the list of environments from then selected folder up to the project root.\n * It stops going up in the project structure when selected environment has the `encapsulated`\n * property set to true.\n * The environments are ordered from the top-most level to the selected folder.\n *\n * @param opts The environment read options\n */\n readEnvironments(opts: IReadEnvironmentOptions = {}): Environment[] {\n const result: Environment[] = []\n const { parent, nameOrKey } = opts\n\n const root = parent ? this.findFolder(parent, { keyOnly: true }) : this\n if (!root) {\n return result\n }\n\n let current: HttpProject | ProjectFolder | undefined = root\n while (current) {\n const environments = current.getEnvironments()\n if (environments.length) {\n if (nameOrKey) {\n const selected = environments.find((i) => i.key === nameOrKey || i.info.name === nameOrKey)\n if (selected) {\n result.push(selected)\n if (selected.encapsulated) {\n break\n }\n }\n } else {\n let finished = false\n for (const item of environments) {\n result.push(item)\n if (item.encapsulated) {\n finished = true\n break\n }\n }\n if (finished) {\n break\n }\n }\n }\n current = current.getParent()\n }\n\n return result.reverse()\n }\n\n /**\n * Finds a definition for an environment regardless of its parent.\n *\n * @param key The Key of the environment to find.\n * @returns The environment definition or undefined if not found.\n */\n findEnvironment(key: string): Environment | undefined {\n return this.definitions.environments.find((i) => i.key === key)\n }\n\n /**\n * Finds a definition for a certificate.\n *\n * @param key The key of the certificate to find.\n * @returns The certificate definition or undefined if not found.\n */\n findCertificate(key: string): Certificate | undefined {\n return this.definitions.certificates.find((i) => i.key === key)\n }\n\n /**\n * Adds a certificate to the project.\n *\n * @param init Either an instance of a certificate or its definition.\n * @returns The inserted certificate.\n */\n addCertificate(init: Certificate | HttpCertificate): Certificate {\n let finalCert: Certificate\n if (init instanceof Certificate) {\n finalCert = init\n } else {\n finalCert = new Certificate(init)\n }\n if (!this.definitions.certificates) {\n this.definitions.certificates = []\n }\n this.definitions.certificates.push(finalCert)\n return finalCert\n }\n\n /**\n * Removes a certificate from the project.\n *\n * @param key the key of the certificate to remove\n * @returns The removed certificate, if any.\n */\n removeCertificate(key: string): Certificate | undefined {\n if (!Array.isArray(this.definitions.certificates)) {\n return undefined\n }\n const defIndex = this.definitions.certificates.findIndex((i) => i.key === key)\n if (defIndex < 0) {\n return undefined\n }\n const cert = this.definitions.certificates[defIndex]\n this.definitions.certificates.splice(defIndex, 1)\n return cert\n }\n\n /**\n * Finds the requests that are using the certificate identified by the key.\n *\n * @param key The key of the certificate to find the usage for.\n * @returns The list of requests that use this certificate.\n */\n findCertificateRequests(key: string): ProjectRequest[] {\n return this.definitions.requests.filter((request) => {\n if (!Array.isArray(request.authorization)) {\n return false\n }\n const ccAuth = request.authorization.find((auth) => auth.type === 'client certificate')\n if (!ccAuth) {\n return false\n }\n const cnf = ccAuth.config as ICCAuthorization\n return !!cnf && !!cnf.certificate && cnf.certificate.key === key\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HttpProject.js","sourceRoot":"","sources":["../../../src/models/HttpProject.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,uDAAuD;AACvD,qDAAqD;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,WAAW,EAAgB,IAAI,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACrF,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAA;AACnD,OAAO,EAAU,KAAK,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAkB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAmB,cAAc,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,aAAa,EAAkB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,WAAW,EAAmB,MAAM,wBAAwB,CAAA;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AAkPtC;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,aAAa;IACnC,IAAI,GAAG,IAAI,CAAA;IACZ,gBAAgB,CAAgB;IACxC;;OAEG;IACH,OAAO,CAAU;IACjB;;OAEG;IACH,QAAQ,CAAW;IACnB;;;;;OAKG;IACH,WAAW,GAA2B,WAAW,CAAC,kBAAkB,EAAE,CAAA;IAEtE,MAAM,CAAC,kBAAkB;QACvB,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACjC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACnB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAyB,EAAE,QAA2B;QAC5E,MAAM,EAAE,IAAI,GAAG,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QACxE,MAAM,aAAa,GAAG,OAAqB,CAAA;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAA;QAChC,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;gBACpD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAM;gBACR,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBAC7C,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;gBAC3E,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;oBACZ,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;gBAC9B,CAAC;gBACD,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YACnC,CAAC,CAAC,CAAA;YACF,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAS;QAChC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACtF,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QAC1D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAyB;QAC9C,MAAM,EAAE,IAAI,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAAA;QACzC,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED;;;;OAIG;IACH,YAAY,KAA6B,EAAE,YAA6B;QACtE,KAAK,EAAE,CAAA;QACP,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,IAAkB,CAAA;QACtB,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;YACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,MAAM,EAAE;gBACb,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;aAClC,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAkB;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QACjF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QAC3B,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,kBAAkB,EAAE,CAAA;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACzF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC5C,QAAQ,CAAC,gBAAgB,EAAE,CAAA;gBAC3B,OAAO,QAAQ,CAAA;YACjB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACvD,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC3C,QAAQ,CAAC,gBAAgB,EAAE,CAAA;gBAC3B,OAAO,QAAQ,CAAA;YACjB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACjF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACzF,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAiB;YAC3B,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;SACzB,CAAA;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzF,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9E,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9E,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzF,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;QAC1C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QACxC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACM,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,GAAW;QACpB,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QACxC,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC/D,IAAI,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAA;QAC5F,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CACP,OAAgD,aAAa,CAAC,WAAW,EACzE,OAA6B,EAAE;QAE/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,CAAA;QAC/B,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACrC,IAAI,IAAiC,CAAA;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAA;YAC/D,CAAC;YACD,IAAI,GAAG,aAAa,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QACD,IAAI,UAAyB,CAAA;QAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACjD,CAAC;aAAM,IAAI,IAAI,YAAY,aAAa,EAAE,CAAC;YACzC,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7D,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5D,OAAO,QAAQ,CAAA;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;QACD,UAAU,CAAC,gBAAgB,EAAE,CAAA;QAC7B,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,SAAiB,EAAE,OAA6B,EAAE;QAC3D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAA;YACd,CAAC;YACD,MAAM,MAAM,GAAG,CAAkB,CAAA;YACjC,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;QACxD,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAqB,CAAA;QAC9B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,GAAW,EAAE,OAA6B,EAAE;QACvD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAA;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,CAAA;QACtC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QACpC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAElC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC3E,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,gBAAgB,EAAE,CAAA;QACzB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QACnC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,GAAW,EAAE,OAA4B,EAAE;QACpD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,oFAAoF;YACpF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,qFAAqF;YACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,UAAU,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,WAAW,CAAC,gBAAgB,EAAE,CAAA;QAE9B,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,WAAW,CAAC,gBAAgB,EAAE,CAAA;IAChC,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,KAAa,EAAE,MAAe;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;QACD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC/C,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,OAAkD,EAAE,OAA2B,EAAE;QAC1F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAA;QAChC,CAAC;QAED,wGAAwG;QACxG,oEAAoE;QAEpE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;YAC7E,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,CAAC,OAA0B,CAAC,CAAA;gBACxC,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;QAED,mFAAmF;QAEnF,IAAI,YAAY,CAAA;QAChB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACtD,CAAC;aAAM,IAAI,OAAO,YAAY,cAAc,EAAE,CAAC;YAC7C,YAAY,GAAG,OAAO,CAAA;YACtB,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC1D,YAAY,CAAC,gBAAgB,EAAE,CAAA;YACjC,CAAC;YACD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACtB,YAAY,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QAC7B,CAAC;QAED,IAAI,IAAiC,CAAA;QACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YACrE,CAAC;YACD,IAAI,GAAG,aAAa,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YACnD,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,UAAU,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAA;QAE/D,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;QACD,YAAY,CAAC,gBAAgB,EAAE,CAAA;QAC/B,OAAO,YAAY,CAAA;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAA2C;QAChE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IACxC,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,SAAiB,EAAE,OAA8B,EAAE;QAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;QAC1D,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAsB,CAAA;QAC/B,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,GAAW,EAAE,OAA8B,EAAE;QACzD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC5E,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,gBAAgB,EAAE,CAAA;QAC1B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QACnC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,GAAW,EAAE,OAA4B,EAAE;QACrD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;QACxD,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,qFAAqF;YACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,UAAU,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,OAAO,CAAC,gBAAgB,EAAE,CAAA;QAE1B,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,CAAC,gBAAgB,EAAE,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;IAC1D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAA;IAC3D,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAA2B,EAAE;QACvC,IAAI,IAAI,CAAA;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YAC9D,CAAC;YACD,IAAI,GAAG,MAAM,CAAA;QACf,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACpC,MAAM,MAAM,GAAoB,EAAE,CAAA;QAClC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YACnE,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAe;QAC1B,IAAI,IAAI,CAAA;QACR,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,GAAG,CAAC,CAAA;YACzD,CAAC;YACD,IAAI,GAAG,MAAM,CAAA;QACf,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACrC,MAAM,MAAM,GAAqB,EAAE,CAAA;QACnC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YACpE,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,MAAe;QAC7B,IAAI,IAAI,CAAA;QACR,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAA;YACxD,CAAC;YACD,IAAI,GAAG,MAAM,CAAA;QACf,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QACD,MAAM,MAAM,GAAqD,EAAE,CAAA;QACnE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,UAAoE,CAAA;YACxE,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACpC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YAClE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC5C,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YACnE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACzC,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YACvE,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,gBAAgB;QACd,MAAM;IACR,CAAC;IAED,gBAAgB;QACd,MAAM;IACR,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAA6B,EAAE;QACnC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;YACnB,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAqB,EAAE,OAA6B,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;QACpC,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,GAAgB;QACpC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,GAAG,CAAA;QACvC,oEAAoE;QACpE,IAAI,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CACzB;QAAA,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvD,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC,CAAC,CACD;QAAA,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;YACzB,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;YACvB,WAAW,CAAC,GAAG,GAAG,MAAM,CAAA;YACxB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAA;QACrB,CAAC,CAAC,CACD;QAAA,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAA;YAC1B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;YACvB,WAAW,CAAC,GAAG,GAAG,MAAM,CAAA;YACxB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAA;QACtB,CAAC,CAAC,CACD;QAAA,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QACvB,CAAC,CAAC,CACD;QAAA,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QACrB,CAAC,CAAC,CACD;QAAA,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAA;YAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;YACvB,WAAW,CAAC,GAAG,GAAG,MAAM,CAAA;YACxB,WAAW,CAAC,GAAG,GAAG,MAAM,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,MAA+C,EAAE,OAA0B,EAAE;QACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,CAAA;QAC/B,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAA8B,CAAA;YACxG,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,CAAC,MAAwB,CAAC,CAAA;gBACtC,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;QAED,IAAI,WAA0B,CAAA;QAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9C,CAAC;aAAM,IAAI,MAAM,YAAY,aAAa,EAAE,CAAC;YAC3C,WAAW,GAAG,MAAM,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACrB,WAAW,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QAC5B,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;QACtB,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAA;QAC1C,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACxD,qFAAqF;YACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC7D,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,UAAU,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAA;YAC5E,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,CAAC,eAAe,CAAC,OAAgC,EAAE;QACjD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAQ;YACV,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;gBACpE,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAQ;gBACV,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;gBACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,SAAQ;gBACV,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChF,SAAQ;gBACV,CAAC;gBACD,MAAM,OAAO,CAAA;YACf,CAAC;iBAAM,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,SAAQ;gBACV,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;gBACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,SAAQ;gBACV,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;oBAC9B,MAAM,EAAE,IAAI,CAAC,GAAG;oBAChB,SAAS;oBACT,MAAM;oBACN,QAAQ;iBACT,CAAC,CAAA;gBACF,KAAK,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAA;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,CAAC,cAAc,CAAC,OAA+B,EAAE,EAAE,MAAM,GAAG,CAAC;QAC3D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC5B,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACpC,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,sBAAsB;gBACtB,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC3F,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAiC;gBAC3C,MAAM;gBACN,MAAM;aACP,CAAA;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;YACxB,CAAC;YACD,MAAM,MAAM,CAAA;YACZ,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAC5B;oBACE,MAAM,EAAE,MAAM,CAAC,GAAG;oBAClB,SAAS;oBACT,MAAM;iBACP,EACD,MAAM,GAAG,CAAC,CACX,CAAA;gBACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,MAAM,CAAC,CAAA;gBACT,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;YAC1B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACO,QAAQ,CAAC,IAAkB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YACrE,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAES,WAAW,CAAC,IAAiB,EAAE,IAAiC,EAAE,IAAwB;QAClG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAwC,EAAE,OAAkC,EAAE;QAC3F,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAA;QACvC,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA;QACrE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAClC,OAAO,WAAW,CAAA;IACpB,CAAC;IAES,UAAU,CAAC,GAAwC;QAC3D,IAAI,QAAqB,CAAA;QACzB,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,QAAQ,GAAG,GAAG,CAAA;QAChB,CAAC;aAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,GAAG,MAAM,EAAE,CAAA;QACzB,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,OAAqB,EAAE;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,gBAAgB,CAAA;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,GAAW,EAAE,OAAqB,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAA;QACvC,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACpE,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,GAAW,EAAE,OAAqB,EAAE;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC5D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAA;QACvC,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QACjF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QACtD,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACpD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAqB,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAA;QACvC,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB,CAAC,OAAgC,EAAE;QACjD,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAElC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,OAAO,GAA4C,IAAI,CAAA;QAC3D,OAAO,OAAO,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAA;YAC9C,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;oBAC3F,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;wBACrB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;4BAC1B,MAAK;wBACP,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,QAAQ,GAAG,KAAK,CAAA;oBACpB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;wBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACtB,QAAQ,GAAG,IAAI,CAAA;4BACf,MAAK;wBACP,CAAC;oBACH,CAAC;oBACD,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAK;oBACP,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACjE,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACjE,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAmC;QAChD,IAAI,SAAsB,CAAA;QAC1B,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YAChC,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,EAAE,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,GAAW;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAClD,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC9E,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,GAAW;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAA;YACd,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA;YACvF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAA;YACd,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAA0B,CAAA;YAC7C,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,CAAA;QAClE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\nimport { ProjectParent } from './ProjectParent.js'\nimport { IProjectDefinitionProperty } from './ProjectDefinitionProperty.js'\nimport { Environment, IEnvironment, Kind as EnvironmentKind } from './Environment.js'\nimport { License, ILicense } from './License.js'\nimport { Provider, IProvider } from './Provider.js'\nimport { IThing, Thing } from './Thing.js'\nimport { ProjectItem, IProjectItem } from './ProjectItem.js'\nimport { IProjectFolder, ProjectFolder } from './ProjectFolder.js'\nimport { IProjectRequest, ProjectRequest, Kind as ProjectRequestKind } from './ProjectRequest.js'\nimport { ProjectSchema, IProjectSchema } from './ProjectSchema.js'\nimport { Request } from './Request.js'\nimport { nanoid } from '../nanoid.js'\nimport { ARCSavedRequest, ARCHistoryRequest } from './legacy/request/ArcRequest.js'\nimport { ArcLegacyProject, ARCProject } from './legacy/models/ArcLegacyProject.js'\nimport { PostmanDataTransformer } from './transformers/PostmanDataTransformer.js'\nimport { Certificate, HttpCertificate } from './ClientCertificate.js'\nimport { ICCAuthorization } from './Authorization.js'\nimport { ProjectFolderKind } from './kinds.js'\n\nexport const Kind = 'Core#HttpProject'\n\nexport interface IItemOptions {\n /**\n * The parent folder of the item to.\n */\n parent?: string\n}\n\nexport interface IItemCreateOptions extends IItemOptions {\n /**\n * The position at which to add the item.\n */\n index?: number\n}\n\nexport interface IEnvironmentCreateOptions extends IItemCreateOptions {}\n\n/**\n * A list of options to initialize a project in various situations.\n */\nexport interface IProjectInitOptions {\n /**\n * The name of the project.\n */\n name: string\n}\n\nexport interface IFolderCreateOptions {\n /**\n * Ignores the operation when the folder with the same name already exists.\n * This command can be used used to ensure that the folder exists.\n */\n skipExisting?: boolean\n /**\n * The id of the parent folder. When not set it adds the folder to the project root.\n */\n parent?: string\n /**\n * Optionally the position at which to add the folder into the list of items.\n */\n index?: number\n}\n\nexport interface IFolderSearchOptions {\n /**\n * When set it searches for a folder using keys only.\n * By default it searches for a key and the name.\n */\n keyOnly?: boolean\n}\n\nexport interface IFolderDeleteOptions {\n /**\n * When set it won't throw an error when the folder is not found in the project.\n */\n safe?: boolean\n}\n\nexport interface IRequestAddOptions {\n /**\n * The id of the parent folder. When not set it adds the request to the project root.\n */\n parent?: string\n /**\n * Optionally the position at which to add the request into the list of items.\n */\n index?: number\n}\n\nexport interface IRequestSearchOptions {\n /**\n * When set it searches for a request using keys only.\n * By default it searches for a key and the name.\n */\n keyOnly?: boolean\n}\n\nexport interface IRequestDeleteOptions {\n /**\n * When set it won't throw an error when the request is not found in the project.\n */\n safe?: boolean\n}\n\nexport interface IProjectMoveOptions {\n /**\n * The position at which to insert the object in the destination. BY default it adds the object at the end.\n */\n index?: number\n /**\n * The name or the key of the parent folder to move the item into.\n * When not set it moves the item to the project's root.\n */\n parent?: string\n}\n\nexport interface IReadEnvironmentOptions extends IItemOptions {\n /**\n * The name or the key of the environment to select.\n *\n * When the name is not specified it selects:\n * - the first environment from the project, if any\n * - any parent folder's first environment to the requested folder, if any (if parent is set)\n * - the requested folder's first environment, if any (if parent is set)\n */\n nameOrKey?: string\n}\n\n/**\n * The object stored as a list index for the projects.\n * This is used to list projects in the store and in the UI.\n */\nexport interface IHttpProjectIndex {\n key: string\n name: string\n version?: string\n}\n\nexport interface IProjectCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the request.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\nexport interface IFolderListOptions {\n /**\n * Folder name or key to list folders for.\n */\n folder?: string\n}\n\nexport interface ISchemaAddOptions {\n /**\n * Optionally the position at which to add the schema into the list of schemas.\n */\n index?: number\n}\n\nexport interface IProjectRequestIterator {\n /**\n * The parent folder key or name. Sets the starting point to iterate over the requests.\n */\n parent?: string\n /**\n * When set it includes requests in the current folder and sub-folder according to the order\n * defined in the folder.\n */\n recursive?: boolean\n /**\n * Limits the number of requests to include in the iterator.\n * It is an array of request keys or names.\n */\n requests?: string[]\n /**\n * The opposite of the `requests`. The list of names or keys of requests or folders to ignore.\n * Note, ignore is tested before the `requests`.\n */\n ignore?: string[]\n}\n\nexport interface IProjectFolderIterator {\n /**\n * The parent folder key or name. Sets the starting point to iterate over the folder.\n */\n parent?: string\n /**\n * When set it includes folders in the current folder and sub-folder according to the order\n * defined in the folder.\n */\n recursive?: boolean\n /**\n * The list of names or keys to ignore.\n */\n ignore?: string[]\n}\n\nexport interface IProjectFolderIteratorResult {\n /**\n * The folder.\n */\n folder: ProjectFolder\n /**\n * Optional parent key.\n */\n parent?: string\n /**\n * How deep in the structure the folder is located.\n * The indent is relative to the `parent`.\n */\n indent: number\n}\n\n/**\n * The new definition of a project in API Client.\n * Note, this is not the same as future `ApiProject` which is reserved for building APIs\n * using RAML or OAS.\n */\nexport interface IHttpProject extends IProjectDefinitionProperty {\n kind: typeof Kind\n /**\n * The license information for this HTTP project.\n */\n license?: ILicense\n /**\n * The basic information about the project.\n */\n info: IThing\n /**\n * Information about project provider.\n */\n provider?: IProvider\n /**\n * The ordered list of HTTP requests / folders in the projects.\n * The UI uses this to manipulate the view without changing the definitions.\n */\n items: IProjectItem[]\n /**\n * The project definitions.\n * This is where all the data are stored.\n */\n definitions: IHttpProjectDefinitions\n}\n\nexport interface IHttpProjectDefinitions {\n requests?: IProjectRequest[]\n folders?: IProjectFolder[]\n schemas?: IProjectSchema[]\n environments?: IEnvironment[]\n certificates?: HttpCertificate[]\n}\n\ninterface HttpProjectDefinitions {\n requests: ProjectRequest[]\n folders: ProjectFolder[]\n schemas: ProjectSchema[]\n environments: Environment[]\n certificates: Certificate[]\n}\n\n/**\n * An instance of an HttpProject.\n */\nexport class HttpProject extends ProjectParent {\n override kind = Kind\n private initEnvironments?: Environment[]\n /**\n * The license information for this HTTP project.\n */\n license?: License\n /**\n * Information about project provider.\n */\n provider?: Provider\n /**\n * The list of all requests stored in this project.\n * Note, this is not used to visualized the request in the UI.\n * This is just the source of data.\n * The `items` property is used to build the view.\n */\n definitions: HttpProjectDefinitions = HttpProject.defaultDefinitions()\n\n static defaultDefinitions(): HttpProjectDefinitions {\n return { environments: [], folders: [], requests: [], schemas: [], certificates: [] }\n }\n\n /**\n * Creates a new HTTP project from a name.\n * @param {string} name The name to set.\n */\n static fromName(name: string): HttpProject {\n const project = new HttpProject()\n const info = Thing.fromName(name)\n project.info = info\n return project\n }\n\n /**\n * Creates an HTTP project instance from ARC's legacy project definition.\n */\n static async fromLegacy(project: ArcLegacyProject, requests: ARCSavedRequest[]): Promise<HttpProject> {\n const { name = 'Unnamed project', description, requests: ids } = project\n const typedLegacyDb = project as ARCProject\n const result = HttpProject.fromName(name)\n if (typedLegacyDb._id) {\n result.key = typedLegacyDb._id\n }\n if (description) {\n result.info.description = description\n }\n if (Array.isArray(ids) && ids.length) {\n const promises = ids.map(async (id) => {\n const old = requests.find((item) => item._id === id)\n if (!old) {\n return\n }\n const request = await Request.fromLegacy(old)\n const projectRequest = ProjectRequest.fromRequest(request.toJSON(), result)\n if (old._id) {\n projectRequest.key = old._id\n }\n result.addRequest(projectRequest)\n })\n await Promise.allSettled(promises)\n }\n return result\n }\n\n /**\n * Creates an HTTP project from a Postman collection\n * @param init The postman collection object or a string that can be parsed to one.\n */\n static async fromPostman(init: any): Promise<HttpProject> {\n const result = await PostmanDataTransformer.transform(init)\n if (Array.isArray(result) && result.length > 1) {\n throw new Error(`Unable to process postman data. It contains multiple collections.`)\n }\n const project = Array.isArray(result) ? result[0] : result\n return project\n }\n\n /**\n * Creates a new project from a set of options.\n */\n static fromInitOptions(init: IProjectInitOptions): HttpProject {\n const { name = 'Unnamed project' } = init\n return HttpProject.fromName(name)\n }\n\n /**\n * @param input The project definition used to restore the state.\n * @param environments Optional list of environments to use with this project. It overrides\n * environments stored in the project definition.\n */\n constructor(input?: string | IHttpProject, environments?: IEnvironment[]) {\n super()\n if (Array.isArray(environments)) {\n this.initEnvironments = environments.map((i) => new Environment(i))\n }\n let init: IHttpProject\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n if (!init.kind) {\n init.kind = Kind\n }\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n definitions: {},\n items: [],\n info: Thing.fromName('').toJSON(),\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new project definition clearing anything that is so far defined.\n *\n * Note, this throws an error when the project is not an API Client project.\n */\n new(init: IHttpProject): void {\n if (!init || !init.definitions || !init.items) {\n throw new Error(`Not a project.`)\n }\n const { key = nanoid(), definitions = {}, items, info, license, provider } = init\n this.key = key\n if (license) {\n this.license = new License(license)\n } else {\n this.license = undefined\n }\n if (provider) {\n this.provider = new Provider(provider)\n } else {\n this.provider = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n this.items = []\n if (Array.isArray(items)) {\n this.items = items.map((i) => new ProjectItem(this, i))\n }\n this.definitions = HttpProject.defaultDefinitions()\n if (Array.isArray(definitions.environments)) {\n this.definitions.environments = definitions.environments.map((i) => new Environment(i))\n }\n if (Array.isArray(definitions.requests)) {\n this.definitions.requests = definitions.requests.map((i) => {\n const instance = new ProjectRequest(this, i)\n instance.attachedCallback()\n return instance\n })\n }\n if (Array.isArray(definitions.folders)) {\n this.definitions.folders = definitions.folders.map((i) => {\n const instance = new ProjectFolder(this, i)\n instance.attachedCallback()\n return instance\n })\n }\n if (Array.isArray(definitions.schemas)) {\n this.definitions.schemas = definitions.schemas.map((i) => new ProjectSchema(i))\n }\n if (Array.isArray(definitions.certificates)) {\n this.definitions.certificates = definitions.certificates.map((i) => new Certificate(i))\n }\n }\n\n toJSON(): IHttpProject {\n const result: IHttpProject = {\n kind: Kind,\n key: this.key,\n definitions: {},\n items: [],\n info: this.info.toJSON(),\n }\n if (Array.isArray(this.definitions.environments) && this.definitions.environments.length) {\n result.definitions.environments = this.definitions.environments.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.requests) && this.definitions.requests.length) {\n result.definitions.requests = this.definitions.requests.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.folders) && this.definitions.folders.length) {\n result.definitions.folders = this.definitions.folders.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.schemas) && this.definitions.schemas.length) {\n result.definitions.schemas = this.definitions.schemas.map((i) => i.toJSON())\n }\n if (Array.isArray(this.definitions.certificates) && this.definitions.certificates.length) {\n result.definitions.certificates = this.definitions.certificates.map((i) => i.toJSON())\n }\n if (Array.isArray(this.items) && this.items.length) {\n result.items = this.items.map((i) => i.toJSON())\n }\n if (this.provider) {\n result.provider = this.provider.toJSON()\n }\n if (this.license) {\n result.license = this.license.toJSON()\n }\n return result\n }\n\n /**\n * @returns JSON representation of the project\n */\n override toString(): string {\n return JSON.stringify(this)\n }\n\n /**\n * Finds a parent of a definition.\n *\n * @param key The key of the definition.\n * @returns The parent or undefine when not found.\n */\n findParent(key: string): ProjectFolder | HttpProject | undefined {\n const { definitions, items = [] } = this\n const projectItemsIndex = items.findIndex((i) => i.key === key)\n if (projectItemsIndex > -1) {\n return this\n }\n const definition = definitions.folders.find((i) => i.items.some((item) => item.key === key))\n if (definition) {\n return definition\n }\n return undefined\n }\n\n /**\n * Appends a new folder to the project or a sub-folder.\n *\n * Passing the folder schema as the fist argument is primarily used to insert a folder on the client side\n * after a folder was created in the store.\n *\n * @param init The name or a folder schema. When not set a default name is assumed.\n * @param opts Folder create options.\n * @returns The newly inserted folder. If the folder already existed it returns its instance.\n */\n addFolder(\n init: string | IProjectFolder | ProjectFolder = ProjectFolder.defaultName,\n opts: IFolderCreateOptions = {}\n ): ProjectFolder {\n if (!Array.isArray(this.items)) {\n this.items = []\n }\n if (!Array.isArray(this.definitions.folders)) {\n this.definitions.folders = []\n }\n const { skipExisting, parent } = opts\n let root: ProjectFolder | HttpProject\n if (parent) {\n const rootCandidate = this.findFolder(parent)\n if (!rootCandidate) {\n throw new Error(`Unable to find the parent folder ${parent}`)\n }\n root = rootCandidate\n } else {\n root = this\n }\n let definition: ProjectFolder\n if (typeof init === 'string') {\n definition = ProjectFolder.fromName(this, init)\n } else if (init instanceof ProjectFolder) {\n definition = init\n } else {\n definition = new ProjectFolder(this, init)\n }\n if (skipExisting) {\n const folders = root.listFolderItems()\n for (const item of folders) {\n const existing = this.findFolder(item.key, { keyOnly: true })\n if (existing && existing.info.name === definition.info.name) {\n return existing\n }\n }\n }\n\n this.definitions.folders.push(definition)\n const item = ProjectItem.projectFolder(this, definition.key)\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n definition.attachedCallback()\n return definition\n }\n\n /**\n * Searches for a folder in the structure.\n *\n * @param nameOrKey The name or the key of the folder.\n * @param opts Optional search options.\n * @returns Found project folder or undefined.\n */\n findFolder(nameOrKey: string, opts: IFolderSearchOptions = {}): ProjectFolder | undefined {\n const { definitions } = this\n const item = definitions.folders.find((i) => {\n if (i.kind !== ProjectFolderKind) {\n return false\n }\n const folder = i as ProjectFolder\n if (folder.key === nameOrKey) {\n return true\n }\n if (opts.keyOnly) {\n return false\n }\n return !!folder.info && folder.info.name === nameOrKey\n })\n if (item) {\n return item as ProjectFolder\n }\n }\n\n /**\n * Removes a folder from the project.\n * @param key The folder key. It ignores the name when searching to the folder to avoid ambiguity.\n * @param opts Folder remove options.\n * @returns The removed folder definition or undefined when not removed.\n */\n removeFolder(key: string, opts: IFolderDeleteOptions = {}): ProjectFolder | undefined {\n const { definitions } = this\n const folder = this.findFolder(key, { keyOnly: true })\n if (!folder) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find the folder ${key}`)\n }\n const parent = this.findParent(key)\n if (!parent) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find a parent of the folder ${key}`)\n }\n\n const requests = folder.listRequests()\n requests.forEach((r) => r.remove())\n const folders = folder.listFolders()\n folders.forEach((f) => f.remove())\n\n const itemIndex = parent.items.findIndex((i) => i.key === key)\n const definitionIndex = definitions.folders.findIndex((i) => i.key === key)\n definitions.folders.splice(definitionIndex, 1)\n folder.detachedCallback()\n if (itemIndex >= 0) {\n parent.items.splice(itemIndex, 1)\n }\n return folder\n }\n\n /**\n * Moves a folder between folders and the project or between items inside a folder or a project\n *\n * Note, when the `parent` option is not specified it moved the folder to the project's root.\n *\n * @param key The key of the request to move.\n * @param opts The moving options.\n */\n moveFolder(key: string, opts: IProjectMoveOptions = {}): void {\n const { index, parent } = opts\n const movedFolder = this.findFolder(key)\n if (!movedFolder) {\n throw new Error(`Unable to locate the folder ${key}`)\n }\n const parentFolder = this.findParent(key)\n if (!parentFolder) {\n throw new Error(`Unable to locate a parent of the folder ${key}`)\n }\n if (parent) {\n // check if moving a folder into another folder that is a child of the moved folder.\n if (this.hasChild(parent, key)) {\n throw new RangeError(`Unable to move a folder to its child.`)\n }\n }\n const target = parent ? this.findFolder(parent) : this\n if (!target) {\n throw new Error(`Unable to locate the new parent folder ${parent}`)\n }\n const hasIndex = typeof index === 'number'\n if (hasIndex) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(target.items.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n const itemIndex = parentFolder.items.findIndex((i) => i.key === key)\n const item = parentFolder.items.splice(itemIndex, 1)[0]\n movedFolder.detachedCallback()\n\n if (hasIndex && target.items.length > index) {\n target.items.splice(index, 0, item)\n } else {\n target.items.push(item)\n }\n movedFolder.attachedCallback()\n }\n\n /**\n * Checks whether a folder has a child (anywhere down the structure).\n *\n * @param child The **key** of the child.\n * @param folder The **key** of the folder. When not set it searches from the project root.\n * @returns True when the child is located somewhere down the structure.\n */\n hasChild(child: string, folder?: string): boolean {\n const target = folder ? this.findFolder(folder) : this\n if (!target) {\n throw new Error(`Unable to locate the folder ${folder}`)\n }\n const { items = [] } = target\n for (const item of items) {\n if (item.key === child) {\n return true\n }\n if (item.kind === ProjectFolderKind) {\n const hasChild = this.hasChild(child, item.key)\n if (hasChild) {\n return true\n }\n }\n }\n return false\n }\n\n /**\n * Adds a request to the project or a sub-folder.\n * @param request The request to add.\n * @param opts Thew request add options.\n * @returns The inserted into the definitions request.\n */\n addRequest(request: IProjectRequest | ProjectRequest | string, opts: IRequestAddOptions = {}): ProjectRequest {\n if (!Array.isArray(this.definitions.requests)) {\n this.definitions.requests = []\n }\n\n // the request can be already added to the project as the same method is used to refresh a request after\n // a store update. From the system perspective it is the same event.\n\n if (typeof request === 'object' && request.key) {\n const existing = this.definitions.requests.find((i) => i.key === request.key)\n if (existing) {\n existing.new(request as IProjectRequest)\n return existing\n }\n }\n\n // if we got here, it means that we are adding a new request object to the project.\n\n let finalRequest\n if (typeof request === 'string') {\n finalRequest = ProjectRequest.fromUrl(request, this)\n } else if (request instanceof ProjectRequest) {\n finalRequest = request\n if (finalRequest.project && finalRequest.project !== this) {\n finalRequest.detachedCallback()\n }\n finalRequest.project = this\n } else {\n finalRequest = new ProjectRequest(this, request)\n }\n if (!finalRequest.key) {\n finalRequest.key = nanoid()\n }\n\n let root: ProjectFolder | HttpProject\n if (opts.parent) {\n const rootCandidate = this.findFolder(opts.parent)\n if (!rootCandidate) {\n throw new Error(`Unable to find the parent folder ${opts.parent}.`)\n }\n root = rootCandidate\n } else {\n root = this\n }\n\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n\n if (typeof opts.index === 'number') {\n const maxIndex = Math.max(root.items.length - 1, 0)\n if (opts.index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n this.definitions.requests.push(finalRequest)\n const item = ProjectItem.projectRequest(this, finalRequest.key)\n\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n finalRequest.attachedCallback()\n return finalRequest\n }\n\n /**\n * Adds a request to the project that has been created for a previous version of ARC.\n *\n * @param legacy The legacy request definition.\n * @returns The created project request.\n */\n async addLegacyRequest(legacy: ARCSavedRequest | ARCHistoryRequest): Promise<ProjectRequest> {\n const request = await Request.fromLegacy(legacy)\n const projectRequest = ProjectRequest.fromRequest(request.toJSON(), this)\n return this.addRequest(projectRequest)\n }\n\n /**\n * Searches for a request in the project.\n *\n * @param nameOrKey The name or the key of the request.\n * @param opts Optional search options.\n * @returns Found project request or undefined.\n */\n findRequest(nameOrKey: string, opts: IRequestSearchOptions = {}): ProjectRequest | undefined {\n const { definitions } = this\n const item = definitions.requests.find((request) => {\n if (request.key === nameOrKey) {\n return true\n }\n if (opts.keyOnly) {\n return false\n }\n return !!request.info && request.info.name === nameOrKey\n })\n if (item) {\n return item as ProjectRequest\n }\n return undefined\n }\n\n /**\n * Removes a request from the project.\n *\n * @param key The request key. It ignores the name when searching to the request to avoid ambiguity.\n * @param opts Request remove options.\n * @returns The removed request definition or undefined when not removed.\n */\n removeRequest(key: string, opts: IRequestDeleteOptions = {}): ProjectRequest | undefined {\n const { definitions } = this\n const request = this.findRequest(key, { keyOnly: true })\n if (!request) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find the request ${key}`)\n }\n const parent = this.findParent(key)\n if (!parent) {\n if (opts.safe) {\n return undefined\n }\n throw new Error(`Unable to find a parent of the request ${key}`)\n }\n const itemIndex = parent.items.findIndex((i) => i.key === key)\n const definitionIndex = definitions.requests.findIndex((i) => i.key === key)\n definitions.requests.splice(definitionIndex, 1)\n request.detachedCallback()\n if (itemIndex >= 0) {\n parent.items.splice(itemIndex, 1)\n }\n return request\n }\n\n /**\n * Moves a request between folders and the project or between items inside a folder or a project.\n *\n * Note, when the `parent` option is not specified it moved the request to the project's root.\n *\n * @param key The key of the request to move.\n * @param opts The moving options.\n */\n moveRequest(key: string, opts: IProjectMoveOptions = {}): void {\n const { index, parent } = opts\n const request = this.findRequest(key)\n if (!request) {\n throw new Error(`Unable to locate the request ${key}`)\n }\n const parentFolder = this.findParent(key)\n if (!parentFolder) {\n throw new Error(`Unable to locate a parent of the request ${key}`)\n }\n const target = parent ? this.findFolder(parent) : this\n if (!target) {\n throw new Error(`Unable to locate the new parent folder ${parent}`)\n }\n const hasIndex = typeof index === 'number'\n if (hasIndex) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(target.items.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n }\n\n const itemIndex = parentFolder.items.findIndex((i) => i.key === key)\n const item = parentFolder.items.splice(itemIndex, 1)[0]\n request.detachedCallback()\n\n if (hasIndex && target.items.length > index) {\n target.items.splice(index, 0, item)\n } else {\n target.items.push(item)\n }\n request.attachedCallback()\n }\n\n /**\n * Lists items (not the actual definitions!) that are folders.\n */\n listFolderItems(): ProjectItem[] {\n const { items = [] } = this\n return items.filter((i) => i.kind === ProjectFolderKind)\n }\n\n /**\n * Lists items (not the actual definitions!) that are requests.\n */\n listRequestItems(): ProjectItem[] {\n const { items = [] } = this\n return items.filter((i) => i.kind === ProjectRequestKind)\n }\n\n /**\n * Lists folders from the project or a sub-folder.\n * @param opts Folder listing options.\n */\n listFolders(opts: IFolderListOptions = {}): ProjectFolder[] {\n let root\n if (opts.folder) {\n const parent = this.findFolder(opts.folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${opts.folder}.`)\n }\n root = parent\n } else {\n root = this\n }\n const items = root.listFolderItems()\n const result: ProjectFolder[] = []\n const { definitions } = this\n items.forEach((i) => {\n const definition = definitions.folders.find((d) => i.key === d.key)\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Lists requests in this project or a sub-folder.\n * @param folder The optional folder name or the key to list requests for.\n */\n listRequests(folder?: string): ProjectRequest[] {\n let root\n if (folder) {\n const parent = this.findFolder(folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${folder}.`)\n }\n root = parent\n } else {\n root = this\n }\n const items = root.listRequestItems()\n const result: ProjectRequest[] = []\n const { definitions } = this\n items.forEach((i) => {\n const definition = definitions.requests.find((d) => i.key === d.key)\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Lists definitions for the `items` of the project or a folder.\n * @param folder Optionally the folder name to list the definitions for.\n */\n listDefinitions(folder?: string): (ProjectFolder | ProjectRequest | Environment)[] {\n let root\n if (folder) {\n const parent = this.findFolder(folder)\n if (!parent) {\n throw new Error(`Unable to find the folder ${folder}`)\n }\n root = parent\n } else {\n root = this\n }\n const result: (ProjectFolder | ProjectRequest | Environment)[] = []\n const { items = [] } = root\n const { definitions } = this\n items.forEach((item) => {\n let definition: ProjectFolder | ProjectRequest | Environment | undefined\n if (item.kind === ProjectFolderKind) {\n definition = definitions.folders.find((d) => item.key === d.key)\n } else if (item.kind === ProjectRequestKind) {\n definition = definitions.requests.find((d) => item.key === d.key)\n } else if (item.kind === EnvironmentKind) {\n definition = definitions.environments.find((d) => item.key === d.key)\n }\n if (definition) {\n result.push(definition)\n }\n })\n return result\n }\n\n /**\n * Makes sure the license information exists.\n * @returns The set license.\n */\n ensureLicense(): License {\n if (!this.license) {\n this.license = new License()\n }\n return this.license\n }\n\n /**\n * Makes sure the Provider information exists.\n * @returns The set provider.\n */\n ensureProvider(): Provider {\n if (!this.provider) {\n this.provider = new Provider()\n }\n return this.provider\n }\n\n /**\n * @returns On the project level this always returns undefined.\n */\n getParent(): ProjectFolder | HttpProject | undefined {\n return undefined\n }\n\n attachedCallback(): void {\n // ...\n }\n\n detachedCallback(): void {\n // ...\n }\n\n getProject(): HttpProject {\n return this\n }\n\n /**\n * Makes a copy of this project.\n */\n clone(opts: IProjectCloneOptions = {}): HttpProject {\n const copy = new HttpProject(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = nanoid()\n HttpProject.regenerateKeys(copy)\n }\n return copy\n }\n\n static clone(project: IHttpProject, opts: IProjectCloneOptions = {}): HttpProject {\n const obj = new HttpProject(project)\n return obj.clone(opts)\n }\n\n /**\n * Re-generates keys in the project, taking care of the references.\n *\n * Note, this changes the project properties. Make a copy of the project before calling this.\n *\n * @param src The project instance to re-generate keys for.\n */\n static regenerateKeys(src: HttpProject): void {\n const { items = [], definitions } = src\n // create a flat list of all \"items\" in the project and all folders.\n let flatItems = [...items]\n ;(definitions.folders || []).forEach((folder) => {\n if (Array.isArray(folder.items) && folder.items.length) {\n flatItems = flatItems.concat(folder.items)\n }\n })\n ;(definitions.folders || []).forEach((folder) => {\n const oldKey = folder.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n folder.key = newKey\n })\n ;(definitions.requests || []).forEach((request) => {\n const oldKey = request.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n request.key = newKey\n })\n ;(definitions.schemas || []).forEach((schema) => {\n schema.key = nanoid()\n })\n ;(definitions.certificates || []).forEach((cert) => {\n cert.key = nanoid()\n })\n ;(definitions.environments || []).forEach((environment) => {\n const oldKey = environment.key\n const indexObject = flatItems.find((i) => i.key === oldKey)\n if (!indexObject) {\n return\n }\n const newKey = nanoid()\n indexObject.key = newKey\n environment.key = newKey\n })\n }\n\n /**\n * Adds a request to the project or a sub-folder.\n * @param schema The schema to add or a name of the schema.\n * @param opts Thew schema add options.\n * @returns The inserted into the schemas schema.\n */\n addSchema(schema: IProjectSchema | ProjectSchema | string, opts: ISchemaAddOptions = {}): ProjectSchema {\n if (!Array.isArray(this.definitions.schemas)) {\n this.definitions.schemas = []\n }\n\n // this renews existing schema\n if (typeof schema === 'object' && schema.key) {\n const existing = this.definitions.schemas.find((i) => i.key === schema.key) as ProjectSchema | undefined\n if (existing) {\n existing.new(schema as IProjectSchema)\n return existing\n }\n }\n\n let finalSchema: ProjectSchema\n if (typeof schema === 'string') {\n finalSchema = ProjectSchema.fromName(schema)\n } else if (schema instanceof ProjectSchema) {\n finalSchema = schema\n } else {\n finalSchema = new ProjectSchema(schema)\n }\n if (!finalSchema.key) {\n finalSchema.key = nanoid()\n }\n const { index } = opts\n const hasIndex = typeof index === 'number'\n if (hasIndex && this.definitions.schemas.length > index) {\n // comparing to the `.length` and not `.length - 1` in case we are adding at the end.\n const maxIndex = Math.max(this.definitions.schemas.length, 0)\n if (index > maxIndex) {\n throw new RangeError(`Index out of bounds. Maximum index is ${maxIndex}.`)\n }\n this.definitions.schemas.splice(index, 0, finalSchema)\n } else {\n this.definitions.schemas.push(finalSchema)\n }\n return finalSchema\n }\n\n /**\n * @returns The current list of schemas in the project.\n */\n listSchemas(): ProjectSchema[] {\n if (!Array.isArray(this.definitions.schemas)) {\n return []\n }\n return this.definitions.schemas\n }\n\n /**\n * Iterates over requests in the project.\n */\n *requestIterator(opts: IProjectRequestIterator = {}): Generator<ProjectRequest> {\n const { definitions } = this\n const { ignore = [], parent, recursive, requests = [] } = opts\n const root = parent ? this.findFolder(parent) : this\n if (!root) {\n throw new Error(`The parent folder not found: ${parent}.`)\n }\n const items = root.items\n if (!items || !items.length) {\n return\n }\n for (const item of items) {\n if (ignore.includes(item.key)) {\n continue\n }\n if (item.kind === ProjectRequestKind) {\n const request = definitions.requests.find((i) => i.key === item.key)\n if (!request) {\n continue\n }\n const name = request.info.name || ''\n if (ignore.includes(name)) {\n continue\n }\n if (requests.length && !requests.includes(item.key) && !requests.includes(name)) {\n continue\n }\n yield request\n } else if (recursive && item.kind === ProjectFolderKind) {\n const folder = definitions.folders.find((i) => i.key === item.key)\n if (!folder) {\n continue\n }\n const name = folder.info.name || ''\n if (ignore.includes(name)) {\n continue\n }\n const it = this.requestIterator({\n parent: item.key,\n recursive,\n ignore,\n requests,\n })\n for (const request of it) {\n yield request\n }\n }\n }\n }\n\n /**\n * Iterates over folders in the project.\n *\n * @param opts Iterator configuration options\n * @param indent Used internally to add `indent` to the result\n * @returns Iterator that yields when a folder is found, including all sub-folders (if configured).\n */\n *folderIterator(opts: IProjectFolderIterator = {}, indent = 0): Generator<IProjectFolderIteratorResult> {\n const { definitions } = this\n const { ignore = [], parent, recursive } = opts\n const root = parent ? this.findFolder(parent) : this\n if (!root) {\n throw new Error(`The parent folder not found: ${parent}.`)\n }\n const items = root.items\n if (!items || !items.length) {\n return\n }\n for (const item of items) {\n if (item.kind !== ProjectFolderKind) {\n continue\n }\n const folder = definitions.folders.find((i) => i.key === item.key)\n if (!folder) {\n // missing definition.\n continue\n }\n if (ignore.includes(folder.key) || (folder.info.name && ignore.includes(folder.info.name))) {\n continue\n }\n const result: IProjectFolderIteratorResult = {\n folder,\n indent,\n }\n if (parent) {\n result.parent = parent\n }\n yield result\n if (recursive) {\n const it = this.folderIterator(\n {\n parent: folder.key,\n recursive,\n ignore,\n },\n indent + 1\n )\n for (const f of it) {\n yield f\n }\n }\n }\n }\n\n [Symbol.iterator](): Generator<ProjectRequest> {\n return this.requestIterator({\n recursive: true,\n })\n }\n\n /**\n * Depending on the options returns a project or a folder.\n * It throws when parent folder cannot ber found.\n */\n protected _getRoot(opts: IItemOptions): ProjectFolder | HttpProject {\n const project = this.getProject()\n if (opts.parent) {\n const parent = project.findFolder(opts.parent)\n if (!parent) {\n throw new Error(`Unable to find the parent folder ${opts.parent}.`)\n }\n return parent\n }\n return project\n }\n\n protected _insertItem(item: ProjectItem, root: ProjectFolder | HttpProject, opts: IItemCreateOptions): void {\n if (!Array.isArray(root.items)) {\n root.items = []\n }\n if (typeof opts.index === 'number') {\n root.items.splice(opts.index, 0, item)\n } else {\n root.items.push(item)\n }\n }\n\n /**\n * Adds an environment to the project.\n * @param env The name of the environment to create or its schema\n * @returns The same or created environment.\n */\n addEnvironment(env: IEnvironment | Environment | string, opts: IEnvironmentCreateOptions = {}): Environment {\n const environment = this._createEnv(env)\n const root = this._getRoot(opts)\n const project = this.getProject()\n if (!project.definitions.environments) {\n project.definitions.environments = []\n }\n project.definitions.environments.push(environment)\n const item = ProjectItem.projectEnvironment(project, environment.key)\n this._insertItem(item, root, opts)\n return environment\n }\n\n protected _createEnv(env: IEnvironment | Environment | string): Environment {\n let finalEnv: Environment\n if (env instanceof Environment) {\n finalEnv = env\n } else if (typeof env === 'string') {\n finalEnv = Environment.fromName(env)\n } else {\n finalEnv = new Environment(env)\n }\n if (!finalEnv.key) {\n finalEnv.key = nanoid()\n }\n return finalEnv\n }\n\n /**\n * This is different to `readEnvironments()`. While the `readEnvironments()`\n * function generate a list of all environments that apply to a folder, this method\n * just lists this folder's environments.\n *\n * @returns The list of environments defined in this folder\n */\n getEnvironments(opts: IItemOptions = {}): Environment[] {\n if (Array.isArray(this.initEnvironments)) {\n return this.initEnvironments\n }\n return this.listEnvironments(opts)\n }\n\n /**\n * @param key The environment key to read.\n */\n getEnvironment(key: string, opts: IItemOptions = {}): Environment | undefined {\n const root = this._getRoot(opts)\n const item = root.items.find((i) => i.key === key)\n if (!item) {\n return undefined\n }\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n return project.definitions.environments.find((e) => e.key === key)\n }\n\n /**\n * Removes an environment from the folder or a sub-folder.\n *\n * @param key the key of the environment to remove\n * @returns The removed environment, if any.\n */\n removeEnvironment(key: string, opts: IItemOptions = {}): Environment | undefined {\n const root = this._getRoot(opts)\n const itemIndex = root.items.findIndex((i) => i.key === key)\n if (itemIndex < 0) {\n return undefined\n }\n root.items.splice(itemIndex, 1)\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n const defIndex = project.definitions.environments.findIndex((i) => i.key === key)\n if (defIndex < 0) {\n return undefined\n }\n const env = project.definitions.environments[defIndex]\n project.definitions.environments.splice(defIndex, 1)\n return env\n }\n\n /**\n * This is a link to the `getEnvironments()`. The difference is that on the\n * project level it won't return environments defined with the class initialization.\n */\n listEnvironments(opts: IItemOptions = {}): Environment[] {\n const root = this._getRoot(opts)\n const items = root.items.filter((i) => i.kind === EnvironmentKind).map((i) => i.key)\n const project = this.getProject()\n if (!Array.isArray(project.definitions.environments)) {\n project.definitions.environments = []\n }\n return project.definitions.environments.filter((e) => items.includes(e.key))\n }\n\n /**\n * Reads the list of environments from then selected folder up to the project root.\n * It stops going up in the project structure when selected environment has the `encapsulated`\n * property set to true.\n * The environments are ordered from the top-most level to the selected folder.\n *\n * @param opts The environment read options\n */\n readEnvironments(opts: IReadEnvironmentOptions = {}): Environment[] {\n const result: Environment[] = []\n const { parent, nameOrKey } = opts\n\n const root = parent ? this.findFolder(parent, { keyOnly: true }) : this\n if (!root) {\n return result\n }\n\n let current: HttpProject | ProjectFolder | undefined = root\n while (current) {\n const environments = current.getEnvironments()\n if (environments.length) {\n if (nameOrKey) {\n const selected = environments.find((i) => i.key === nameOrKey || i.info.name === nameOrKey)\n if (selected) {\n result.push(selected)\n if (selected.encapsulated) {\n break\n }\n }\n } else {\n let finished = false\n for (const item of environments) {\n result.push(item)\n if (item.encapsulated) {\n finished = true\n break\n }\n }\n if (finished) {\n break\n }\n }\n }\n current = current.getParent()\n }\n\n return result.reverse()\n }\n\n /**\n * Finds a definition for an environment regardless of its parent.\n *\n * @param key The Key of the environment to find.\n * @returns The environment definition or undefined if not found.\n */\n findEnvironment(key: string): Environment | undefined {\n return this.definitions.environments.find((i) => i.key === key)\n }\n\n /**\n * Finds a definition for a certificate.\n *\n * @param key The key of the certificate to find.\n * @returns The certificate definition or undefined if not found.\n */\n findCertificate(key: string): Certificate | undefined {\n return this.definitions.certificates.find((i) => i.key === key)\n }\n\n /**\n * Adds a certificate to the project.\n *\n * @param init Either an instance of a certificate or its definition.\n * @returns The inserted certificate.\n */\n addCertificate(init: Certificate | HttpCertificate): Certificate {\n let finalCert: Certificate\n if (init instanceof Certificate) {\n finalCert = init\n } else {\n finalCert = new Certificate(init)\n }\n if (!this.definitions.certificates) {\n this.definitions.certificates = []\n }\n this.definitions.certificates.push(finalCert)\n return finalCert\n }\n\n /**\n * Removes a certificate from the project.\n *\n * @param key the key of the certificate to remove\n * @returns The removed certificate, if any.\n */\n removeCertificate(key: string): Certificate | undefined {\n if (!Array.isArray(this.definitions.certificates)) {\n return undefined\n }\n const defIndex = this.definitions.certificates.findIndex((i) => i.key === key)\n if (defIndex < 0) {\n return undefined\n }\n const cert = this.definitions.certificates[defIndex]\n this.definitions.certificates.splice(defIndex, 1)\n return cert\n }\n\n /**\n * Finds the requests that are using the certificate identified by the key.\n *\n * @param key The key of the certificate to find the usage for.\n * @returns The list of requests that use this certificate.\n */\n findCertificateRequests(key: string): ProjectRequest[] {\n return this.definitions.requests.filter((request) => {\n if (!Array.isArray(request.authorization)) {\n return false\n }\n const ccAuth = request.authorization.find((auth) => auth.type === 'client certificate')\n if (!ccAuth) {\n return false\n }\n const cnf = ccAuth.config as ICCAuthorization\n return !!cnf && !!cnf.certificate && cnf.certificate.key === key\n })\n }\n}\n"]}
|