UNPKG

@harbor/ui

Version:

Harbor shared UI components based on Clarity and Angular6

174 lines (173 loc) 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { throwError as observableThrowError } from "rxjs"; import { Injectable, Inject } from "@angular/core"; import { Http } from "@angular/http"; import { map, catchError } from "rxjs/operators"; import { SERVICE_CONFIG } from "../service.config"; import { HTTP_JSON_OPTIONS, HTTP_GET_OPTIONS, buildHttpRequestOptions } from "../utils"; import { RequestQueryParams } from "./RequestQueryParams"; /** * Define the service methods to handle the Prject related things. * * * * @abstract * class ProjectService * @abstract */ export class ProjectService { } if (false) { /** * Get Infomations of a specific Project. * * @abstract * ** deprecated param {string|number} [projectId] * returns {(Observable<Project> | Promise<Project> | Project)} * * \@memberOf ProjectService * @abstract * @param {?} projectId * @return {?} */ ProjectService.prototype.getProject = function (projectId) { }; /** * Update the specified project. * * @abstract * ** deprecated param {(number | string)} projectId * ** deprecated param {ProjectPolicy} projectPolicy * returns {(Observable<any> | Promise<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} projectId * @param {?} projectPolicy * @return {?} */ ProjectService.prototype.updateProjectPolicy = function (projectId, projectPolicy) { }; /** * Get all projects * * @abstract * ** deprecated param {string} name * ** deprecated param {number} isPublic * ** deprecated param {number} page * ** deprecated param {number} pageSize * returns {(Observable<any> | Promise<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} name * @param {?} isPublic * @param {?=} page * @param {?=} pageSize * @return {?} */ ProjectService.prototype.listProjects = function (name, isPublic, page, pageSize) { }; } /** * Implement default service for project. * * * * class ProjectDefaultService * extends {ProjectService} */ export class ProjectDefaultService extends ProjectService { /** * @param {?} http * @param {?} config */ constructor(http, config) { super(); this.http = http; this.config = config; } /** * @param {?} projectId * @return {?} */ getProject(projectId) { if (!projectId) { return Promise.reject("Bad argument"); } /** @type {?} */ let baseUrl = this.config.projectBaseEndpoint ? this.config.projectBaseEndpoint : "/api/projects"; return this.http .get(`${baseUrl}/${projectId}`, HTTP_GET_OPTIONS) .pipe(map(response => response.json())) .pipe(catchError(error => observableThrowError(error))); } /** * @param {?} name * @param {?} isPublic * @param {?=} page * @param {?=} pageSize * @return {?} */ listProjects(name, isPublic, page, pageSize) { /** @type {?} */ let baseUrl = this.config.projectBaseEndpoint ? this.config.projectBaseEndpoint : "/api/projects"; /** @type {?} */ let params = new RequestQueryParams(); if (page && pageSize) { params.set("page", page + ""); params.set("page_size", pageSize + ""); } if (name && name.trim() !== "") { params.set("name", name); } if (isPublic !== undefined) { params.set("public", "" + isPublic); } // let options = new RequestOptions({ headers: this.getHeaders, search: params }); return this.http .get(baseUrl, buildHttpRequestOptions(params)) .pipe(map(response => response.json())) .pipe(catchError(error => observableThrowError(error))); } /** * @param {?} projectId * @param {?} projectPolicy * @return {?} */ updateProjectPolicy(projectId, projectPolicy) { /** @type {?} */ let baseUrl = this.config.projectBaseEndpoint ? this.config.projectBaseEndpoint : "/api/projects"; return this.http .put(`${baseUrl}/${projectId}`, { metadata: { public: projectPolicy.Public ? "true" : "false", enable_content_trust: projectPolicy.ContentTrust ? "true" : "false", prevent_vul: projectPolicy.PreventVulImg ? "true" : "false", severity: projectPolicy.PreventVulImgSeverity, auto_scan: projectPolicy.ScanImgOnPush ? "true" : "false" } }, HTTP_JSON_OPTIONS) .pipe(map(response => response.status)) .pipe(catchError(error => observableThrowError(error))); } } ProjectDefaultService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ProjectDefaultService.ctorParameters = () => [ { type: Http }, { type: undefined, decorators: [{ type: Inject, args: [SERVICE_CONFIG,] }] } ]; if (false) { /** @type {?} */ ProjectDefaultService.prototype.http; /** @type {?} */ ProjectDefaultService.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhhcmJvci91aS8iLCJzb3VyY2VzIjpbInNyYy9zZXJ2aWNlL3Byb2plY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFDLFVBQVUsSUFBSSxvQkFBb0IsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUksVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUduRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDeEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVMxRCxNQUFNO0NBK0NMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVRCxNQUFNLDRCQUE2QixTQUFRLGNBQWM7Ozs7O0lBQ3ZELFlBQ1UsTUFDd0IsTUFBc0I7UUFFdEQsS0FBSyxFQUFFLENBQUM7UUFIQSxTQUFJLEdBQUosSUFBSTtRQUNvQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtLQUd2RDs7Ozs7SUFFTSxVQUFVLENBQ2YsU0FBMEI7UUFFMUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2Qzs7UUFDRCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtZQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFB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SyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7WUExRTdELFVBQVU7Ozs7WUE1RUYsSUFBSTs0Q0FnRlIsTUFBTSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7dGhyb3dFcnJvciBhcyBvYnNlcnZhYmxlVGhyb3dFcnJvciwgIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEh0dHAgfSBmcm9tIFwiQGFuZ3VsYXIvaHR0cFwiO1xuaW1wb3J0IHsgbWFwICwgIGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgU0VSVklDRV9DT05GSUcsIElTZXJ2aWNlQ29uZmlnIH0gZnJvbSBcIi4uL3NlcnZpY2UuY29uZmlnXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3QtcG9saWN5LWNvbmZpZy9wcm9qZWN0XCI7XG5pbXBvcnQgeyBQcm9qZWN0UG9saWN5IH0gZnJvbSBcIi4uL3Byb2plY3QtcG9saWN5LWNvbmZpZy9wcm9qZWN0LXBvbGljeS1jb25maWcuY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICBIVFRQX0pTT05fT1BUSU9OUyxcbiAgSFRUUF9HRVRfT1BUSU9OUyxcbiAgYnVpbGRIdHRwUmVxdWVzdE9wdGlvbnNcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBSZXF1ZXN0UXVlcnlQYXJhbXMgfSBmcm9tIFwiLi9SZXF1ZXN0UXVlcnlQYXJhbXNcIjtcblxuLyoqXG4gKiBEZWZpbmUgdGhlIHNlcnZpY2UgbWV0aG9kcyB0byBoYW5kbGUgdGhlIFByamVjdCByZWxhdGVkIHRoaW5ncy5cbiAqXG4gKipcbiAqIEBhYnN0cmFjdFxuICogY2xhc3MgUHJvamVjdFNlcnZpY2VcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldCBJbmZvbWF0aW9ucyBvZiBhIHNwZWNpZmljIFByb2plY3QuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3Byb2plY3RJZF1cbiAgICogcmV0dXJucyB7KE9ic2VydmFibGU8UHJvamVjdD4gfCBQcm9taXNlPFByb2plY3Q+IHwgUHJvamVjdCl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBQcm9qZWN0U2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0UHJvamVjdChcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFByb2plY3Q+IHwgUHJvbWlzZTxQcm9qZWN0PiB8IFByb2plY3Q7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgc3BlY2lmaWVkIHByb2plY3QuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7KG51bWJlciB8IHN0cmluZyl9IHByb2plY3RJZFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7UHJvamVjdFBvbGljeX0gcHJvamVjdFBvbGljeVxuICAgKiByZXR1cm5zIHsoT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55KX1cbiAgICpcbiAgICogQG1lbWJlck9mIEVuZHBvaW50U2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgdXBkYXRlUHJvamVjdFBvbGljeShcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBwcm9qZWN0UG9saWN5OiBQcm9qZWN0UG9saWN5XG4gICk6IE9ic2VydmFibGU8YW55PiB8IFByb21pc2U8YW55PiB8IGFueTtcblxuICAvKipcbiAgICogR2V0IGFsbCBwcm9qZWN0c1xuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7bnVtYmVyfSBpc1B1YmxpY1xuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7bnVtYmVyfSBwYWdlXG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplXG4gICAqIHJldHVybnMgeyhPYnNlcnZhYmxlPGFueT4gfCBQcm9taXNlPGFueT4gfCBhbnkpfVxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW5kcG9pbnRTZXJ2aWNlXG4gICAqL1xuICBhYnN0cmFjdCBsaXN0UHJvamVjdHMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlzUHVibGljOiBudW1iZXIsXG4gICAgcGFnZT86IG51bWJlcixcbiAgICBwYWdlU2l6ZT86IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFByb2plY3RbXT4gfCBQcm9taXNlPFByb2plY3RbXT4gfCBQcm9qZWN0W107XG59XG5cbi8qKlxuICogSW1wbGVtZW50IGRlZmF1bHQgc2VydmljZSBmb3IgcHJvamVjdC5cbiAqXG4gKipcbiAqIGNsYXNzIFByb2plY3REZWZhdWx0U2VydmljZVxuICogZXh0ZW5kcyB7UHJvamVjdFNlcnZpY2V9XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcm9qZWN0RGVmYXVsdFNlcnZpY2UgZXh0ZW5kcyBQcm9qZWN0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cCxcbiAgICBASW5qZWN0KFNFUlZJQ0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogSVNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9qZWN0KFxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nXG4gICk6IE9ic2VydmFibGU8UHJvamVjdD4gfCBQcm9taXNlPFByb2plY3Q+IHwgUHJvamVjdCB7XG4gICAgaWYgKCFwcm9qZWN0SWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkJhZCBhcmd1bWVudFwiKTtcbiAgICB9XG4gICAgbGV0IGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuY29uZmlnLnByb2plY3RCYXNlRW5kcG9pbnRcbiAgICAgID8gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgOiBcIi9hcGkvcHJvamVjdHNcIjtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGAke2Jhc2VVcmx9LyR7cHJvamVjdElkfWAsIEhUVFBfR0VUX09QVElPTlMpXG4gICAgICAucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gb2JzZXJ2YWJsZVRocm93RXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICBwdWJsaWMgbGlzdFByb2plY3RzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpc1B1YmxpYzogbnVtYmVyLFxuICAgIHBhZ2U/OiBudW1iZXIsXG4gICAgcGFnZVNpemU/OiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxQcm9qZWN0W10+IHwgUHJvbWlzZTxQcm9qZWN0W10+IHwgUHJvamVjdFtdIHtcbiAgICBsZXQgYmFzZVVybDogc3RyaW5nID0gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgPyB0aGlzLmNvbmZpZy5wcm9qZWN0QmFzZUVuZHBvaW50XG4gICAgICA6IFwiL2FwaS9wcm9qZWN0c1wiO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgUmVxdWVzdFF1ZXJ5UGFyYW1zKCk7XG4gICAgaWYgKHBhZ2UgJiYgcGFnZVNpemUpIHtcbiAgICAgIHBhcmFtcy5zZXQoXCJwYWdlXCIsIHBhZ2UgKyBcIlwiKTtcbiAgICAgIHBhcmFtcy5zZXQoXCJwYWdlX3NpemVcIiwgcGFnZVNpemUgKyBcIlwiKTtcbiAgICB9XG4gICAgaWYgKG5hbWUgJiYgbmFtZS50cmltKCkgIT09IFwiXCIpIHtcbiAgICAgIHBhcmFtcy5zZXQoXCJuYW1lXCIsIG5hbWUpO1xuICAgIH1cbiAgICBpZiAoaXNQdWJsaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNldChcInB1YmxpY1wiLCBcIlwiICsgaXNQdWJsaWMpO1xuICAgIH1cblxuICAgIC8vIGxldCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzLCBzZWFyY2g6IHBhcmFtcyB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGJhc2VVcmwsIGJ1aWxkSHR0cFJlcXVlc3RPcHRpb25zKHBhcmFtcykpXG4gICAgICAucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gb2JzZXJ2YWJsZVRocm93RXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJvamVjdFBvbGljeShcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBwcm9qZWN0UG9saWN5OiBQcm9qZWN0UG9saWN5XG4gICk6IGFueSB7XG4gICAgbGV0IGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuY29uZmlnLnByb2plY3RCYXNlRW5kcG9pbnRcbiAgICAgID8gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgOiBcIi9hcGkvcHJvamVjdHNcIjtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICBgJHtiYXNlVXJsfS8ke3Byb2plY3RJZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHB1YmxpYzogcHJvamVjdFBvbGljeS5QdWJsaWMgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIGVuYWJsZV9jb250ZW50X3RydXN0OiBwcm9qZWN0UG9saWN5LkNvbnRlbnRUcnVzdCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgcHJldmVudF92dWw6IHByb2plY3RQb2xpY3kuUHJldmVudFZ1bEltZyA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2V2ZXJpdHk6IHByb2plY3RQb2xpY3kuUHJldmVudFZ1bEltZ1NldmVyaXR5LFxuICAgICAgICAgICAgYXV0b19zY2FuOiBwcm9qZWN0UG9saWN5LlNjYW5JbWdPblB1c2ggPyBcInRydWVcIiA6IFwiZmFsc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgSFRUUF9KU09OX09QVElPTlNcbiAgICAgIClcbiAgICAgIC5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5zdGF0dXMpKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiBvYnNlcnZhYmxlVGhyb3dFcnJvcihlcnJvcikpKTtcbiAgfVxufVxuIl19