{"version":3,"file":"index.mjs","sources":["../src/spec.ts","../src/utils.ts","../src/chain.ts","../src/account.ts","../src/assetName.ts","../src/assetType.ts","../src/assetId.ts"],"sourcesContent":["import { IdentifierSpec } from \"./types\";\n\nconst CAIP2: IdentifierSpec = {\n  name: \"chainId\",\n  regex: \"[-:a-zA-Z0-9]{5,41}\",\n  parameters: {\n    delimiter: \":\",\n    values: {\n      0: {\n        name: \"namespace\",\n        regex: \"[-a-z0-9]{3,8}\",\n      },\n      1: {\n        name: \"reference\",\n        regex: \"[-a-zA-Z0-9]{1,32}\",\n      },\n    },\n  },\n};\n\nconst CAIP10: IdentifierSpec = {\n  name: \"accountId\",\n  regex: \"[-:a-zA-Z0-9]{7,106}\",\n  parameters: {\n    delimiter: \":\",\n    values: {\n      0: {\n        name: \"namespace\",\n        regex: \"[-a-z0-9]{3,8}\",\n      },\n      1: {\n        name: \"reference\",\n        regex: \"[-a-zA-Z0-9]{1,32}\",\n      },\n      2: {\n        name: \"address\",\n        regex: \"[a-zA-Z0-9]{1,64}\",\n      },\n    },\n  },\n};\n\n// represents namespace:reference in CAIP-19\nconst AssetName: IdentifierSpec = {\n  name: \"assetName\",\n  regex: \"[-:a-zA-Z0-9]{5,73}\",\n  parameters: {\n    delimiter: \":\",\n    values: {\n      0: {\n        name: \"namespace\",\n        regex: \"[-a-z0-9]{3,8}\",\n      },\n      1: {\n        name: \"reference\",\n        regex: \"[-a-zA-Z0-9]{1,64}\",\n      },\n    },\n  },\n};\n\nconst CAIP19AssetType: IdentifierSpec = {\n  name: \"assetType\",\n  regex: \"[-:a-zA-Z0-9]{11,115}\",\n  parameters: {\n    delimiter: \"/\",\n    values: {\n      0: CAIP2,\n      1: AssetName,\n    },\n  },\n};\n\nconst CAIP19AssetId: IdentifierSpec = {\n  name: \"assetId\",\n  regex: \"[-:a-zA-Z0-9]{13,148}\",\n  parameters: {\n    delimiter: \"/\",\n    values: {\n      0: CAIP2,\n      1: AssetName,\n      2: {\n        name: \"tokenId\",\n        regex: \"[-a-zA-Z0-9]{1,32}\",\n      },\n    },\n  },\n};\n\nexport const CAIP = {\n  \"2\": CAIP2,\n  \"10\": CAIP10,\n  \"19\": {\n    assetName: AssetName,\n    assetType: CAIP19AssetType,\n    assetId: CAIP19AssetId,\n  },\n};\n","import { IdentifierSpec, Params } from \"./types\";\n\nexport function splitParams(id: string, spec: IdentifierSpec): string[] {\n  return id.split(spec.parameters.delimiter);\n}\n\nexport function getParams<T>(id: string, spec: IdentifierSpec): T {\n  const arr = splitParams(id, spec);\n  const params = {};\n  arr.forEach((value, index) => {\n    params[spec.parameters.values[index].name] = value;\n  });\n  return params as T;\n}\n\nexport function joinParams(params: Params, spec: IdentifierSpec): string {\n  return Object.values(spec.parameters.values)\n    .map(parameter => {\n      const param = params[parameter.name];\n      return typeof param === \"string\"\n        ? param\n        : joinParams(param, parameter as IdentifierSpec);\n    })\n    .join(spec.parameters.delimiter);\n}\n\nexport function isValidId(id: string, spec: IdentifierSpec): boolean {\n  // console.log(\"id\", id);\n  // console.log(\"spec\", spec);\n  // console.log(\"before regex\");\n  if (!new RegExp(spec.regex).test(id)) return false;\n  // console.log(\"after regex\");\n  // console.log(\"before split\");\n  const params = splitParams(id, spec);\n  // console.log(\"after split\");\n  // console.log(\"params\", params);\n  // console.log(\"before length\");\n  if (params.length !== Object.keys(spec.parameters.values).length)\n    return false;\n  // console.log(\"after length\");\n  // console.log(\"before matches\");\n  const matches = params\n    .map((param, index) =>\n      new RegExp(spec.parameters.values[index].regex).test(param)\n    )\n    .filter(x => !!x);\n  if (matches.length !== params.length) return false;\n  // console.log(\"after matches\");\n  return true;\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface ChainIdParams {\n  namespace: string;\n  reference: string;\n}\n\nexport class ChainId {\n  public static spec: IdentifierSpec = CAIP[\"2\"];\n\n  public static parse(id: string): ChainIdParams {\n    if (!isValidId(id, this.spec)) {\n      throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n    }\n    return new ChainId(getParams<ChainIdParams>(id, this.spec)).toJSON();\n  }\n\n  public static format(params: ChainIdParams): string {\n    return joinParams(params as any, this.spec);\n  }\n\n  public namespace: string;\n  public reference: string;\n\n  constructor(params: ChainIdParams | string) {\n    if (typeof params === \"string\") {\n      params = ChainId.parse(params);\n    }\n\n    this.namespace = params.namespace;\n    this.reference = params.reference;\n  }\n\n  public toString(): string {\n    return ChainId.format(this.toJSON());\n  }\n\n  public toJSON(): ChainIdParams {\n    return {\n      namespace: this.namespace,\n      reference: this.reference,\n    };\n  }\n}\n","import { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AccountIdSplitParams extends ChainIdParams {\n  address: string;\n}\nexport interface AccountIdParams {\n  chainId: string | ChainIdParams;\n  address: string;\n}\n\nexport class AccountId {\n  public static spec: IdentifierSpec = CAIP[\"10\"];\n\n  public static parse(id: string): AccountIdParams {\n    if (!isValidId(id, this.spec)) {\n      throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n    }\n    const { namespace, reference, address } = getParams<AccountIdSplitParams>(\n      id,\n      this.spec\n    );\n    const chainId = new ChainId({ namespace, reference });\n    return new AccountId({ chainId, address }).toJSON();\n  }\n\n  public static format(params: AccountIdParams): string {\n    const chainId = new ChainId(params.chainId);\n    const splitParams: AccountIdSplitParams = {\n      ...chainId.toJSON(),\n      address: params.address,\n    };\n    return joinParams(splitParams as any, this.spec);\n  }\n\n  public chainId: ChainId;\n  public address: string;\n\n  constructor(params: AccountIdParams | string) {\n    if (typeof params === \"string\") {\n      params = AccountId.parse(params);\n    }\n\n    this.chainId = new ChainId(params.chainId);\n    this.address = params.address;\n  }\n\n  public toString(): string {\n    return AccountId.format(this.toJSON());\n  }\n\n  public toJSON(): AccountIdParams {\n    return {\n      chainId: this.chainId.toJSON(),\n      address: this.address,\n    };\n  }\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetNameParams {\n  namespace: string;\n  reference: string;\n}\n\nexport class AssetName {\n  public static spec: IdentifierSpec = CAIP[\"19\"].assetName;\n\n  public static parse(id: string): AssetNameParams {\n    if (!isValidId(id, this.spec)) {\n      throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n    }\n    return new AssetName(getParams<AssetNameParams>(id, this.spec)).toJSON();\n  }\n\n  public static format(params: AssetNameParams): string {\n    return joinParams(params as any, this.spec);\n  }\n\n  public namespace: string;\n  public reference: string;\n\n  constructor(params: AssetNameParams | string) {\n    if (typeof params === \"string\") {\n      params = AssetName.parse(params);\n    }\n\n    this.namespace = params.namespace;\n    this.reference = params.reference;\n  }\n\n  public toString(): string {\n    return AssetName.format(this.toJSON());\n  }\n\n  public toJSON(): AssetNameParams {\n    return {\n      namespace: this.namespace,\n      reference: this.reference,\n    };\n  }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetTypeParams {\n  chainId: string | ChainIdParams;\n  assetName: string | AssetNameParams;\n}\n\nexport class AssetType {\n  public static spec: IdentifierSpec = CAIP[\"19\"].assetType;\n\n  public static parse(id: string): AssetTypeParams {\n    if (!isValidId(id, this.spec)) {\n      throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n    }\n    return new AssetType(getParams<AssetTypeParams>(id, this.spec)).toJSON();\n  }\n\n  public static format(params: AssetTypeParams): string {\n    return joinParams(params as any, this.spec);\n  }\n\n  public chainId: ChainId;\n  public assetName: AssetName;\n\n  constructor(params: AssetTypeParams | string) {\n    if (typeof params === \"string\") {\n      params = AssetType.parse(params);\n    }\n\n    this.chainId = new ChainId(params.chainId);\n    this.assetName = new AssetName(params.assetName);\n  }\n\n  public toString(): string {\n    return AssetType.format(this.toJSON());\n  }\n\n  public toJSON(): AssetTypeParams {\n    return {\n      chainId: this.chainId.toJSON(),\n      assetName: this.assetName,\n    };\n  }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetIdParams {\n  chainId: string | ChainIdParams;\n  assetName: string | AssetNameParams;\n  tokenId: string;\n}\n\nexport class AssetId {\n  public static spec: IdentifierSpec = CAIP[\"19\"].assetId;\n\n  public static parse(id: string): AssetIdParams {\n    if (!isValidId(id, this.spec)) {\n      throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n    }\n    return new AssetId(getParams<AssetIdParams>(id, this.spec)).toJSON();\n  }\n\n  public static format(params: AssetIdParams): string {\n    return joinParams(params as any, this.spec);\n  }\n\n  public chainId: ChainId;\n  public assetName: AssetName;\n  public tokenId: string;\n\n  constructor(params: AssetIdParams | string) {\n    if (typeof params === \"string\") {\n      params = AssetId.parse(params);\n    }\n\n    this.chainId = new ChainId(params.chainId);\n    this.assetName = new AssetName(params.assetName);\n    this.tokenId = params.tokenId;\n  }\n\n  public toString(): string {\n    return AssetId.format(this.toJSON());\n  }\n\n  public toJSON(): AssetIdParams {\n    return {\n      chainId: this.chainId.toJSON(),\n      assetName: this.assetName.toJSON(),\n      tokenId: this.tokenId,\n    };\n  }\n}\n"],"names":["CAIP2","name","regex","parameters","delimiter","values","CAIP10","AssetName","CAIP19AssetType","CAIP19AssetId","CAIP","assetName","assetType","assetId","splitParams","id","spec","split","getParams","arr","params","forEach","value","index","joinParams","Object","map","parameter","param","join","isValidId","RegExp","test","length","keys","matches","filter","x","ChainId","parse","namespace","reference","Error","toJSON","format","toString","AccountId","chainId","address","AssetType","AssetId","tokenId"],"mappings":"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"}