{"version":3,"sources":["../src/types/api.ts","../src/auth.ts","../src/build.ts"],"sourcesContent":["export enum FieldType {\n  String = 'String',\n  Lookup = 'Lookup',\n  Memo = 'Memo',\n  Virtual = 'Virtual',\n  DateTime = 'DateTime',\n  Boolean = 'Boolean',\n  Picklist = 'Picklist',\n  Number = 'Number',\n  Owner = 'Owner',\n  State = 'State',\n  Status = 'Status',\n  PartyList = 'PartyList',\n  Integer = 'Integer',\n  Choice = 'Choice',\n  EntityName = 'EntityName',\n  Uniqueidentifier = 'Uniqueidentifier',\n}\n\nexport type TMetaData = {\n  PrimaryIdAttribute: string;\n  PrimaryNameAttribute: string;\n  PrimaryImageAttribute: string;\n  LogicalName: string;\n  LogicalCollectionName: string;\n  SchemaName: string;\n  DisplayName: {\n    UserLocalizedLabel: {\n      Label: string;\n    };\n  };\n  DisplayCollectionName: {\n    UserLocalizedLabel: {\n      Label: string;\n    };\n  };\n  IsActivity: boolean;\n  OwnershipType: string;\n  ObjectTypeCode: number;\n  IsCustomEntity: boolean;\n};\n\nexport type TApiJoinParams = Pick<TMetaData, 'DisplayName' | 'LogicalName' | 'LogicalCollectionName' | 'PrimaryIdAttribute' | 'PrimaryNameAttribute'>\n\nexport type TFieldMetaData = {\n  '@odata.type': string;\n  LogicalName: string;\n  AttributeType: FieldType;\n  Format?: string;\n  FormatName?: { Value: string };\n  DisplayName: {\n    UserLocalizedLabel: {\n      Label: string;\n    };\n  };\n  Description: {\n    UserLocalizedLabel: {\n      Label: string;\n    };\n  };\n  MaxLength?: number;\n  MinValue?: number;\n  MaxValue?: number;\n  Targets?: string[];\n};\n\nexport type PickListOptionsType = {\n  OptionSet: {\n    Options: Array<{\n      Value: string;\n      Label: {\n        UserLocalizedLabel: {\n          Label: string;\n        };\n      };\n    }>;\n    FalseOption?: {\n      Value: string;\n      Label: {\n        UserLocalizedLabel: {\n          Label: string;\n        };\n      };\n    };\n    TrueOption?: {\n      Value: string;\n      Label: {\n        UserLocalizedLabel: {\n          Label: string;\n        };\n      };\n    };\n  };\n};\n","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\n\nexport type Params<T = Record<string, any>> = {\n  url: string;\n  method?: 'get' | 'post' | 'patch' | 'delete';\n  data?: T;\n  params?: Record<string, any>;\n  timeout?: number;\n  tries?: number;\n};\n\nexport const getRequest = (Authorization: string, baseURL: string) => {\n  return async <R, T = Record<string, any>>(props: Params<T>): Promise<AxiosResponse<R>> => {\n    const { method = 'get', tries, ...rest } = props;\n    const request = () =>\n      axios.request<R>({\n        baseURL,\n        method,\n        ...rest,\n        headers: { Authorization },\n      } as AxiosRequestConfig);\n    if (tries) {\n      const sendRequest = async (tries: number) => {\n        try {\n          return await request();\n        } catch (e) {\n          if (e.code === 'ECONNABORTED' && tries > 0) {\n            return await sendRequest(tries - 1);\n          } else {\n            throw e;\n          }\n        }\n      };\n      return sendRequest(tries);\n    }\n    return request();\n  };\n};\n","import { getRequest } from './auth';\nimport { FieldType, PickListOptionsType, TApiJoinParams, TFieldMetaData, TMetaData } from './types/api';\nimport { TAppFieldMeta, TAppEntityMeta, TConfig, TJoinParams } from './types/app';\n\nconst splitArray = (array: Array<any>, LIMIT = 10) =>\n  Array.from(new Array(Math.ceil(array.length / LIMIT)).keys())\n    .map((k) => array.slice(k * LIMIT, k * LIMIT + 25))\n\nexport const systemBasedFields = ['ownerid', 'createdon', 'createdby', 'modifiedon'];\n\nconst optionBasedTypes = [\n  '#Microsoft.Dynamics.CRM.PicklistAttributeMetadata',\n  '#Microsoft.Dynamics.CRM.BooleanAttributeMetadata',\n  '#Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata',\n]\n\nexport const getBuildFunction = (token: string, url: string, config: TConfig) => {\n  const request = getRequest(token, url);\n\n  const targets = new Set<string>();\n\n  const getFieldsData = (logicalName: string) =>\n    request<{ value: TFieldMetaData[] }>({\n      url: `EntityDefinitions(LogicalName='${logicalName}')/Attributes`,\n      timeout: 5000,\n      tries: 3,\n    });\n\n  const getJoinParams = async (names: string[]) =>\n    (await Promise.all(splitArray(names, 20)\n      .map(names => request<{ value: TApiJoinParams[] }>({\n    url: `EntityDefinitions`,\n    timeout: 5000,\n    tries: 3,\n    params: {\n      $select:\n        'LogicalName,LogicalCollectionName,PrimaryIdAttribute,PrimaryNameAttribute,DisplayName',\n      $filter: names.map((name) => `LogicalName eq '${name}'`).join(' or '),\n    },\n  })))).map(v => v.data.value).flat();\n\n  const getEntityMeta = (names: string[]) =>\n    request<{ value: TMetaData[] }>({\n      url: `EntityDefinitions`,\n      params: {\n        $select:\n          'LogicalName,LogicalCollectionName,PrimaryIdAttribute,PrimaryNameAttribute,PrimaryImageAttribute,DisplayName,DisplayCollectionName,IsActivity,SchemaName,ObjectTypeCode,OwnershipType,IsCustomEntity',\n        $filter: names.map((name) => `LogicalName eq '${name}'`).join(' or '),\n      },\n      timeout: 5000,\n      tries: 3,\n    });\n\n  const getListItems = (entityLogicalName: string, field: string, type: string) =>\n    request<PickListOptionsType>({\n      url: `EntityDefinitions(LogicalName='${entityLogicalName}')/Attributes(LogicalName='${field}')/${type.slice(1)}`,\n      params: {\n        $select: 'LogicalName',\n        $expand: 'OptionSet',\n      },\n      timeout: 5000,\n      tries: 3,\n    });\n\n  const getOptions = async (type: FieldType, fullType: string, logicalName: string, fieldName: string) => {\n    if (\n      [FieldType.Picklist, FieldType.Virtual, FieldType.Boolean, FieldType.Status, FieldType.State].includes(type) &&\n      fullType\n    ) {\n      try {\n        const {\n          data: {\n            OptionSet: { Options, FalseOption, TrueOption },\n          },\n        } = await getListItems(logicalName, fieldName, fullType);\n        if (type === FieldType.Boolean && FalseOption && TrueOption) {\n          return [\n            ['true', TrueOption.Label.UserLocalizedLabel.Label],\n            ['false', FalseOption.Label.UserLocalizedLabel.Label],\n          ];\n        } else {\n          return Options.map((v) => [`${v.Value}`, v.Label.UserLocalizedLabel.Label]);\n        }\n      } catch (e) {\n        console.log(e);\n      }\n    } else {\n      return [];\n    }\n  };\n\n  const getMeta = async (entityName: string) => {\n    const {\n      data: { value: fieldsMeta },\n    } = await getFieldsData(config[entityName].name);\n\n    const columns = (config[entityName].columns as string[]).concat(...systemBasedFields);\n\n    const options = {};\n\n    try {\n      await Promise.all(\n        fieldsMeta\n          .filter(\n            (v) =>\n              optionBasedTypes.includes(v['@odata.type']) &&\n              (config[entityName]?.columns as string[]).includes(v.LogicalName)\n          )\n          .map(async ({ LogicalName, AttributeType, '@odata.type': type }) => {\n            options[LogicalName] = await getOptions(AttributeType, type, config[entityName].name, LogicalName);\n          })\n      );\n    } catch (e) {\n      console.log(e);\n    }\n\n    fieldsMeta.filter((v) => columns.includes(v.LogicalName) && v.Targets).map(v => v.Targets).flat().forEach(v => targets.add(v));\n\n    return fieldsMeta\n      .filter((v) => columns.includes(v.LogicalName))\n      .reduce(\n        (acc, next) => ({\n          ...acc,\n          [next.LogicalName]: {\n            label: next.DisplayName.UserLocalizedLabel.Label,\n            description: next.Description.UserLocalizedLabel.Label,\n            extraType: next['@odata.type'],\n            type: next.AttributeType,\n            format: next.Format,\n            formatName: next.FormatName?.Value,\n            targets: next.Targets,\n            options: options[next.LogicalName],\n            maxLength: next.MaxLength,\n            minValue: next.MinValue,\n            maxValue: next.MaxValue,\n          },\n        }),\n        {} as Record<string, TAppFieldMeta>\n      );\n  };\n\n  return async () => {\n    const mainKeys = Object.keys(config);\n\n    const entitiesMeta = Object.fromEntries(\n      (await getEntityMeta(mainKeys.map((entityName) => config[entityName].name))).data.value\n        .map(({LogicalName, DisplayName, LogicalCollectionName, IsActivity, DisplayCollectionName, SchemaName, ...rest}) => [\n        LogicalName,\n          ({\n            logicalName: LogicalName,\n            url: LogicalCollectionName,\n            fields: {} as Record<string, TAppFieldMeta>,\n            displayName: DisplayName?.UserLocalizedLabel?.Label,\n            displayCollectionName: DisplayCollectionName?.UserLocalizedLabel?.Label,\n            isActivity: IsActivity,\n            schemaName: SchemaName,\n            ...rest,\n          })\n      ])\n    );\n\n    const meta = Object.fromEntries(mainKeys.map((key) => [key, entitiesMeta[config[key].name]])) as Record<\n      string,\n      TAppEntityMeta & { fields: Record<string, TAppFieldMeta> }\n    >;\n\n    const fields = Object.fromEntries(\n      await Promise.all(mainKeys.map(async (entityName: string) => [entityName, await getMeta(entityName)]))\n    );\n\n    const targetsResponse = await getJoinParams([...targets.values()])\n    const targetCollections: Record<string, TJoinParams> = Object.fromEntries(\n      targetsResponse.map(({ LogicalName, DisplayName, ...rest}) =>\n        [LogicalName, { LogicalName, DisplayName: DisplayName?.UserLocalizedLabel?.Label, ... rest }]\n      ));\n\n    return { meta: Object.fromEntries(\n        Object.entries(meta).map(([key, values]) => [key, { ...values, fields: fields[key] }])\n      ) as Record<string, TAppEntityMeta>, targetCollections };\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,sBAAmB;AAhBT,SAAAA;AAAA,GAAA;;;ACAZ,OAAO,WAAkD;AAWlD,IAAM,aAAa,CAAC,eAAuB,YAAoB;AACpE,SAAO,CAAmC,UAAgD;AACxF,UAA2C,YAAnC,WAAS,OAAO,MAb5B,IAa+C,IAAT,iBAAS,IAAT,CAA1B,UAAgB;AACxB,UAAM,UAAU,MACd,MAAM,QAAW;AAAA,MACf;AAAA,MACA;AAAA,OACG,OAHY;AAAA,MAIf,SAAS,EAAE,cAAc;AAAA,IAC3B,EAAuB;AACzB,QAAI,OAAO;AACT,YAAM,cAAc,CAAOC,WAAkB;AAC3C,YAAI;AACF,iBAAO,MAAM,QAAQ;AAAA,QACvB,SAAS,GAAG;AACV,cAAI,EAAE,SAAS,kBAAkBA,SAAQ,GAAG;AAC1C,mBAAO,MAAM,YAAYA,SAAQ,CAAC;AAAA,UACpC,OAAO;AACL,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO,YAAY,KAAK;AAAA,IAC1B;AACA,WAAO,QAAQ;AAAA,EACjB;AACF;;;ACjCA,IAAM,aAAa,CAAC,OAAmB,QAAQ,OAC7C,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK,CAAC,EAAE,KAAK,CAAC,EACzD,IAAI,CAAC,MAAM,MAAM,MAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;AAE/C,IAAM,oBAAoB,CAAC,WAAW,aAAa,aAAa,YAAY;AAEnF,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,mBAAmB,CAAC,OAAe,KAAa,WAAoB;AAC/E,QAAM,UAAU,WAAW,OAAO,GAAG;AAErC,QAAM,UAAU,oBAAI,IAAY;AAEhC,QAAM,gBAAgB,CAAC,gBACrB,QAAqC;AAAA,IACnC,KAAK,kCAAkC,WAAW;AAAA,IAClD,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAEH,QAAM,gBAAgB,CAAO,UAAiB;AAC3C,kBAAM,QAAQ,IAAI,WAAW,OAAO,EAAE,EACpC,IAAI,CAAAC,WAAS,QAAqC;AAAA,MACrD,KAAK;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,SACE;AAAA,QACF,SAASA,OAAM,IAAI,CAAC,SAAS,mBAAmB,IAAI,GAAG,EAAE,KAAK,MAAM;AAAA,MACtE;AAAA,IACF,CAAC,CAAC,CAAC,GAAG,IAAI,OAAK,EAAE,KAAK,KAAK,EAAE,KAAK;AAAA;AAElC,QAAM,gBAAgB,CAAC,UACrB,QAAgC;AAAA,IAC9B,KAAK;AAAA,IACL,QAAQ;AAAA,MACN,SACE;AAAA,MACF,SAAS,MAAM,IAAI,CAAC,SAAS,mBAAmB,IAAI,GAAG,EAAE,KAAK,MAAM;AAAA,IACtE;AAAA,IACA,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAEH,QAAM,eAAe,CAAC,mBAA2B,OAAe,SAC9D,QAA6B;AAAA,IAC3B,KAAK,kCAAkC,iBAAiB,8BAA8B,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AAAA,IAC9G,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAEH,QAAM,aAAa,CAAO,MAAiB,UAAkB,aAAqB,cAAsB;AACtG,QACE,wHAA4F,EAAE,SAAS,IAAI,KAC3G,UACA;AACA,UAAI;AACF,cAAM;AAAA,UACJ,MAAM;AAAA,YACJ,WAAW,EAAE,SAAS,aAAa,WAAW;AAAA,UAChD;AAAA,QACF,IAAI,MAAM,aAAa,aAAa,WAAW,QAAQ;AACvD,YAAI,oCAA8B,eAAe,YAAY;AAC3D,iBAAO;AAAA,YACL,CAAC,QAAQ,WAAW,MAAM,mBAAmB,KAAK;AAAA,YAClD,CAAC,SAAS,YAAY,MAAM,mBAAmB,KAAK;AAAA,UACtD;AAAA,QACF,OAAO;AACL,iBAAO,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,KAAK,CAAC;AAAA,QAC5E;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,IAAI,CAAC;AAAA,MACf;AAAA,IACF,OAAO;AACL,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,QAAM,UAAU,CAAO,eAAuB;AAC5C,UAAM;AAAA,MACJ,MAAM,EAAE,OAAO,WAAW;AAAA,IAC5B,IAAI,MAAM,cAAc,OAAO,UAAU,EAAE,IAAI;AAE/C,UAAM,UAAW,OAAO,UAAU,EAAE,QAAqB,OAAO,GAAG,iBAAiB;AAEpF,UAAM,UAAU,CAAC;AAEjB,QAAI;AACF,YAAM,QAAQ;AAAA,QACZ,WACG;AAAA,UACC,CAAC,MAAG;AAxGhB;AAyGc,oCAAiB,SAAS,EAAE,aAAa,CAAC,OACzC,YAAO,UAAU,MAAjB,mBAAoB,SAAqB,SAAS,EAAE,WAAW;AAAA;AAAA,QACpE,EACC,IAAI,CAAO,OAAwD,iBAAxD,KAAwD,WAAxD,EAAE,aAAa,eAAe,eAAe,KAAK,GAAM;AAClE,kBAAQ,WAAW,IAAI,MAAM,WAAW,eAAe,MAAM,OAAO,UAAU,EAAE,MAAM,WAAW;AAAA,QACnG,EAAC;AAAA,MACL;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,IAAI,CAAC;AAAA,IACf;AAEA,eAAW,OAAO,CAAC,MAAM,QAAQ,SAAS,EAAE,WAAW,KAAK,EAAE,OAAO,EAAE,IAAI,OAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,OAAK,QAAQ,IAAI,CAAC,CAAC;AAE7H,WAAO,WACJ,OAAO,CAAC,MAAM,QAAQ,SAAS,EAAE,WAAW,CAAC,EAC7C;AAAA,MACC,CAAC,KAAK,SAAM;AAzHpB;AAyHwB,gDACX,MADW;AAAA,UAEd,CAAC,KAAK,WAAW,GAAG;AAAA,YAClB,OAAO,KAAK,YAAY,mBAAmB;AAAA,YAC3C,aAAa,KAAK,YAAY,mBAAmB;AAAA,YACjD,WAAW,KAAK,aAAa;AAAA,YAC7B,MAAM,KAAK;AAAA,YACX,QAAQ,KAAK;AAAA,YACb,aAAY,UAAK,eAAL,mBAAiB;AAAA,YAC7B,SAAS,KAAK;AAAA,YACd,SAAS,QAAQ,KAAK,WAAW;AAAA,YACjC,WAAW,KAAK;AAAA,YAChB,UAAU,KAAK;AAAA,YACf,UAAU,KAAK;AAAA,UACjB;AAAA,QACF;AAAA;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACJ;AAEA,SAAO,MAAY;AACjB,UAAM,WAAW,OAAO,KAAK,MAAM;AAEnC,UAAM,eAAe,OAAO;AAAA,OACzB,MAAM,cAAc,SAAS,IAAI,CAAC,eAAe,OAAO,UAAU,EAAE,IAAI,CAAC,GAAG,KAAK,MAC/E,IAAI,CAAC,OAA2G;AAA3G,qBAAC,eAAa,aAAa,uBAAuB,YAAY,uBAAuB,WAlJnG,IAkJc,IAAoG,iBAApG,IAAoG,CAAnG,eAAa,eAAa,yBAAuB,cAAY,yBAAuB;AAlJnG,YAAAC,KAAAC;AAkJ4H;AAAA,UACpH;AAAA,UACG;AAAA,YACC,aAAa;AAAA,YACb,KAAK;AAAA,YACL,QAAQ,CAAC;AAAA,YACT,cAAaD,MAAA,2CAAa,uBAAb,gBAAAA,IAAiC;AAAA,YAC9C,wBAAuBC,MAAA,+DAAuB,uBAAvB,gBAAAA,IAA2C;AAAA,YAClE,YAAY;AAAA,YACZ,YAAY;AAAA,aACT;AAAA,QAET;AAAA,OAAC;AAAA,IACH;AAEA,UAAM,OAAO,OAAO,YAAY,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAK5F,UAAM,SAAS,OAAO;AAAA,MACpB,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAO,eAAoB;AAAG,gBAAC,YAAY,MAAM,QAAQ,UAAU,CAAC;AAAA,QAAC,CAAC;AAAA,IACvG;AAEA,UAAM,kBAAkB,MAAM,cAAc,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC;AACjE,UAAM,oBAAiD,OAAO;AAAA,MAC5D,gBAAgB;AAAA,QAAI,CAAC,OAAsC;AAAtC,uBAAE,eAAa,YA5K1C,IA4K2B,IAA+B,iBAA/B,IAA+B,CAA7B,eAAa;AA5K1C;AA6KQ,kBAAC,aAAa,iBAAE,aAAa,cAAa,gDAAa,uBAAb,mBAAiC,SAAW,KAAM;AAAA;AAAA,MAC9F;AAAA,IAAC;AAEH,WAAO,EAAE,MAAM,OAAO;AAAA,MAClB,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,iCAAK,SAAL,EAAa,QAAQ,OAAO,GAAG,EAAE,EAAC,CAAC;AAAA,IACvF,GAAqC,kBAAkB;AAAA,EAC3D;AACF;","names":["FieldType","tries","names","_a","_b"]}