Taichi Masuyama 3 лет назад
Родитель
Сommit
be0aeb2320
1 измененных файлов с 40 добавлено и 0 удалено
  1. 40 0
      packages/app/src/utils/vo/transfer-key.ts

+ 40 - 0
packages/app/src/utils/vo/transfer-key.ts

@@ -0,0 +1,40 @@
+const generalErrorPhrase = 'Failed to parse TransferKey from string';
+
+export class TransferKey {
+
+  private static _internalSeperator = '__grw_internal_tranferkey__'
+
+  public appUrl: URL
+
+  public key: string
+
+  constructor(appUrl: URL, key: string) {
+    this.appUrl = appUrl;
+    this.key = key;
+  }
+
+  static parse(str: string): TransferKey {
+    const splitted = str.split(TransferKey._internalSeperator);
+
+    if (splitted.length !== 2) {
+      throw Error(generalErrorPhrase);
+    }
+    const appUrlString = splitted[0];
+    const key = splitted[1];
+
+    let appUrl: URL | null;
+    try {
+      appUrl = new URL(appUrlString);
+    }
+    catch (e) {
+      throw Error(generalErrorPhrase + (e as Error));
+    }
+
+    return new TransferKey(appUrl, key);
+  }
+
+  static stringify(appUrl: URL, key: string): string {
+    return `${appUrl.origin}${TransferKey._internalSeperator}${key}`;
+  }
+
+}