@metamask/ocap-kernel
Version:
OCap kernel core components
1 lines • 2.77 kB
Source Map (JSON)
{"version":3,"file":"parse-ref.cjs","sourceRoot":"","sources":["../../../src/store/utils/parse-ref.ts"],"names":[],"mappings":";;AAgBA,4BA0CC;AA1DD,yCAAoC;AASpC;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,OAAO,CAAC;IACZ,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,GAAG,CAAC,CAAC;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;QACR,KAAK,GAAG;YACN,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,SAAS,CAAC;QACf;YACE,IAAA,aAAI,EAAA,6BAA6B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;QACjD,IAAA,aAAI,EAAA,0BAA0B,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;IACvC,IAAI,SAAS,CAAC;IACd,IAAI,KAAK,CAAC;IACV,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/C,IAAA,aAAI,EAAA,+BAA+B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,CAAC;QACD,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtD,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO;QACL,OAAO;QACP,SAAS;QACT,SAAS;QACT,KAAK;KACM,CAAC;AAChB,CAAC","sourcesContent":["import { Fail } from '@endo/errors';\n\ntype RefParts = {\n context: 'kernel' | 'vat' | 'remote';\n direction?: 'export' | 'import';\n isPromise: boolean;\n index: string;\n};\n\n/**\n * Parse an alleged ref string into its components.\n *\n * @param ref - The string to be parsed.\n *\n * @returns an object with all of the ref string components as individual properties.\n */\nexport function parseRef(ref: string): RefParts {\n let context;\n let typeIdx = 1;\n\n switch (ref[0]) {\n case 'k':\n context = 'kernel';\n break;\n case 'o':\n case 'p':\n typeIdx = 0;\n context = 'vat';\n break;\n case 'r':\n context = 'remote';\n break;\n case undefined:\n default:\n Fail`invalid reference context ${ref[0]}`;\n }\n if (ref[typeIdx] !== 'p' && ref[typeIdx] !== 'o') {\n Fail`invalid reference type ${ref[typeIdx]}`;\n }\n const isPromise = ref[typeIdx] === 'p';\n let direction;\n let index;\n if (context === 'kernel') {\n index = ref.slice(2);\n } else {\n const dirIdx = typeIdx + 1;\n if (ref[dirIdx] !== '+' && ref[dirIdx] !== '-') {\n Fail`invalid reference direction ${ref[dirIdx]}`;\n }\n direction = ref[dirIdx] === '+' ? 'export' : 'import';\n index = ref.slice(dirIdx + 1);\n }\n return {\n context,\n direction,\n isPromise,\n index,\n } as RefParts;\n}\n"]}