2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt odlux
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
19 export type ViewElementBase = {
27 "mandatory"?: boolean;
28 "description"?: string;
31 "status"?: "current" | "deprecated" | "obsolete",
32 "reference"?: string, // https://tools.ietf.org/html/rfc7950#section-7.21.4
35 // https://tools.ietf.org/html/rfc7950#section-9.8
36 export type ViewElementBinary = ViewElementBase & {
38 "length"?: Expression<YangRange>; // number of octets
41 // https://tools.ietf.org/html/rfc7950#section-9.7.4
42 export type ViewElementBits = ViewElementBase & {
45 [name: string]: number | undefined; // 0 - 4294967295
49 // https://tools.ietf.org/html/rfc7950#section-9
50 export type ViewElementString = ViewElementBase & {
52 "pattern"?: Expression<RegExp>;
53 "length"?: Expression<YangRange>;
57 // special case derived from
58 export type ViewElementDate = ViewElementBase & {
60 "pattern"?: Expression<RegExp>;
61 "length"?: Expression<YangRange>;
65 // https://tools.ietf.org/html/rfc7950#section-9.3
66 export type ViewElementNumber = ViewElementBase & {
70 "range"?: Expression<YangRange>;
76 // https://tools.ietf.org/html/rfc7950#section-9.5
77 export type ViewElementBoolean = ViewElementBase & {
80 "falseValue"?: string;
83 // https://tools.ietf.org/html/rfc7950#section-9.6.4
84 export type ViewElementSelection = ViewElementBase & {
85 "uiType": "selection";
86 "multiSelect"?: boolean
90 "description"?: string,
91 "status"?: "current" | "deprecated" | "obsolete",
96 // is a list if isList is true ;-)
97 export type ViewElementObject = ViewElementBase & {
103 // Hint: read only lists do not need a key
104 export type ViewElementList = (ViewElementBase & {
111 export type ViewElementReference = ViewElementBase & {
112 "uiType": "reference";
113 "referencePath": string;
114 "ref": (currentPath: string) => [ViewElement , string] | undefined;
117 export type ViewElementUnion = ViewElementBase & {
119 "elements": ViewElement[];
122 export type ViewElementChoiseCase = { id: string, label: string, description?: string, elements: { [name: string]: ViewElement } };
124 export type ViewElementChoise = ViewElementBase & {
127 [name: string]: ViewElementChoiseCase;
131 // https://tools.ietf.org/html/rfc7950#section-7.14.1
132 export type ViewElementRpc = ViewElementBase & {
134 "inputViewId"?: string;
135 "outputViewId"?: string;
138 export type ViewElementEmpty = ViewElementBase & {
142 export type ViewElement =
152 | ViewElementSelection
153 | ViewElementReference
158 export const isViewElementString = (viewElement: ViewElement): viewElement is ViewElementString => {
159 return viewElement && (viewElement.uiType === "string" || viewElement.uiType === "date");
162 export const isViewElementDate = (viewElement: ViewElement): viewElement is ViewElementDate => {
163 return viewElement && (viewElement.uiType === "date");
166 export const isViewElementNumber = (viewElement: ViewElement): viewElement is ViewElementNumber => {
167 return viewElement && viewElement.uiType === "number";
170 export const isViewElementBoolean = (viewElement: ViewElement): viewElement is ViewElementBoolean => {
171 return viewElement && viewElement.uiType === "boolean";
174 export const isViewElementObject = (viewElement: ViewElement): viewElement is ViewElementObject => {
175 return viewElement && viewElement.uiType === "object" && viewElement.isList === false;
178 export const isViewElementList = (viewElement: ViewElement): viewElement is ViewElementList => {
179 return viewElement && viewElement.uiType === "object" && viewElement.isList === true;
182 export const isViewElementObjectOrList = (viewElement: ViewElement): viewElement is ViewElementObject | ViewElementList => {
183 return viewElement && viewElement.uiType === "object";
186 export const isViewElementSelection = (viewElement: ViewElement): viewElement is ViewElementSelection => {
187 return viewElement && viewElement.uiType === "selection";
190 export const isViewElementReference = (viewElement: ViewElement): viewElement is ViewElementReference => {
191 return viewElement && viewElement.uiType === "reference";
194 export const isViewElementUnion = (viewElement: ViewElement): viewElement is ViewElementUnion => {
195 return viewElement && viewElement.uiType === "union";
198 export const isViewElementChoise = (viewElement: ViewElement): viewElement is ViewElementChoise => {
199 return viewElement && viewElement.uiType === "choise";
202 export const isViewElementRpc = (viewElement: ViewElement): viewElement is ViewElementRpc => {
203 return viewElement && viewElement.uiType === "rpc";
206 export const isViewElementEmpty = (viewElement: ViewElement): viewElement is ViewElementRpc => {
207 return viewElement && viewElement.uiType === "empty";
210 export const ResolveFunction = Symbol("IsResolved");
212 export type ViewSpecification = {
217 "parentView"?: string;
219 "ifFeature"?: string;
221 "uses"?: (string[]) & { [ResolveFunction]?: (parent: string) => void };
222 "elements": { [name: string]: ViewElement };
224 readonly "canEdit": boolean;
227 export type YangRange = {
232 export type Expression<T> =
236 export type Operator<T> = {
237 operation: "AND" | "OR";
238 arguments: Expression<T>[];