@vived/host 5.4.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,20 @@ class GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {
43
43
  this.getAssetUC
44
44
  .getAsset(assetID)
45
45
  .then((asset) => {
46
- callback(asset.fileURL ? asset.fileURL : undefined);
46
+ // Prefer the remote streaming URL. For a freshly uploaded asset the
47
+ // backend has not produced a fileURL yet, but the host is still holding
48
+ // the uploaded bytes locally — fall back to the blob URL so it can be
49
+ // streamed this session without a reload. blobURL is the managed URL
50
+ // created by setFile (revoked on dispose), so no new object URL leaks.
51
+ if (asset.fileURL) {
52
+ callback(asset.fileURL);
53
+ }
54
+ else if (asset.blobURL) {
55
+ callback(asset.blobURL);
56
+ }
57
+ else {
58
+ callback(undefined);
59
+ }
47
60
  })
48
61
  .catch((e) => {
49
62
  this.error(e.message);
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":";;;AA0BA,oEAIC;AA9BD,sCAAqD;AACrD,yCAA0C;AAC1C,0CAKqB;AAOrB,MAAsB,wBACpB,SAAQ,kBAAW;IADrB;;QAMW,gBAAW,GAAG,sBAAsB,CAAC;IAIhD,CAAC;;AAVD,4DAUC;AANiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B;AAQpD,SAAgB,4BAA4B,CAC1C,SAAoB;IAEpB,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,2BAA4B,SAAQ,wBAAwB;IAChE,IAAY,UAAU;QACpB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAa,mBAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IA6BO,aAAa,CAAC,OAAgB;QACpC,MAAM,WAAW,GAAG,OAAqB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,+BAAoB,CAC5B,IAAI,CAAC,WAAW,EAChB,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACxB,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAzClD,WAAM,GAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACxC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,UAAU;iBACZ,QAAQ,CAAC,OAAO,CAAC;iBACjB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACtB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,OAAe,EAAE,OAAgB,EAAE,EAAE;YACpD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,oCAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC;QAkBA,MAAM,WAAW,GAAG,4BAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport { GetAssetUC } from \"../../Assets\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type GetAssetStreamURLAction = (\r\n assetID: string,\r\n callback: (url: string | undefined) => void\r\n) => void;\r\n\r\nexport abstract class GetAssetStreamURLHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"GetAssetStreamURLHandler\";\r\n\r\n readonly requestType = \"GET_ASSET_STREAM_URL\";\r\n\r\n abstract action: GetAssetStreamURLAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeGetAssetStreamURLHandler(\r\n appObject: AppObject\r\n): GetAssetStreamURLHandler {\r\n return new GetAssetStreamURLHandlerImp(appObject);\r\n}\r\n\r\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\r\n private get getAssetUC() {\r\n try {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n action: GetAssetStreamURLAction = (assetID, callback) => {\r\n if (!this.getAssetUC) {\r\n this.error(\"Unable to find GetAssetUC\");\r\n callback(undefined);\r\n return;\r\n }\r\n\r\n this.getAssetUC\r\n .getAsset(assetID)\r\n .then((asset) => {\r\n callback(asset.fileURL ? asset.fileURL : undefined);\r\n })\r\n .catch((e: Error) => {\r\n this.error(e.message);\r\n callback(undefined);\r\n });\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 1) {\r\n const { assetID, callback } = this.castPayloadV1(payload);\r\n this.action(assetID, callback);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private castPayloadV1(payload: unknown): Payload_V1 {\r\n const castPayload = payload as Payload_V1;\r\n if (!castPayload.assetID || !castPayload.callback) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetStreamURLHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\ntype Payload_V1 = {\r\n assetID: string;\r\n callback: (url: string | undefined) => void;\r\n};\r\n"]}
1
+ {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport { GetAssetUC } from \"../../Assets\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type GetAssetStreamURLAction = (\r\n assetID: string,\r\n callback: (url: string | undefined) => void\r\n) => void;\r\n\r\nexport abstract class GetAssetStreamURLHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"GetAssetStreamURLHandler\";\r\n\r\n readonly requestType = \"GET_ASSET_STREAM_URL\";\r\n\r\n abstract action: GetAssetStreamURLAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeGetAssetStreamURLHandler(\r\n appObject: AppObject\r\n): GetAssetStreamURLHandler {\r\n return new GetAssetStreamURLHandlerImp(appObject);\r\n}\r\n\r\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\r\n private get getAssetUC() {\r\n try {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n action: GetAssetStreamURLAction = (assetID, callback) => {\r\n if (!this.getAssetUC) {\r\n this.error(\"Unable to find GetAssetUC\");\r\n callback(undefined);\r\n return;\r\n }\r\n\r\n this.getAssetUC\r\n .getAsset(assetID)\r\n .then((asset) => {\r\n // Prefer the remote streaming URL. For a freshly uploaded asset the\r\n // backend has not produced a fileURL yet, but the host is still holding\r\n // the uploaded bytes locally — fall back to the blob URL so it can be\r\n // streamed this session without a reload. blobURL is the managed URL\r\n // created by setFile (revoked on dispose), so no new object URL leaks.\r\n if (asset.fileURL) {\r\n callback(asset.fileURL);\r\n } else if (asset.blobURL) {\r\n callback(asset.blobURL);\r\n } else {\r\n callback(undefined);\r\n }\r\n })\r\n .catch((e: Error) => {\r\n this.error(e.message);\r\n callback(undefined);\r\n });\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 1) {\r\n const { assetID, callback } = this.castPayloadV1(payload);\r\n this.action(assetID, callback);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private castPayloadV1(payload: unknown): Payload_V1 {\r\n const castPayload = payload as Payload_V1;\r\n if (!castPayload.assetID || !castPayload.callback) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetStreamURLHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\ntype Payload_V1 = {\r\n assetID: string;\r\n callback: (url: string | undefined) => void;\r\n};\r\n"]}
@@ -8,6 +8,6 @@ function savePersistentStates(appObjects) {
8
8
  appObjects.submitWarning("savePersistentStates", "Unable to find SavePersistentStatesUC");
9
9
  return;
10
10
  }
11
- uc.saveLocally();
11
+ uc.copyToClipboard();
12
12
  }
13
13
  //# sourceMappingURL=savePersistentStates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"savePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/savePersistentStates.ts"],"names":[],"mappings":";;AAGA,oDAWC;AAbD,sEAAqE;AAErE,SAAgB,oBAAoB,CAAC,UAAyB;IAC5D,MAAM,EAAE,GAAG,6CAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,UAAU,CAAC,aAAa,CACtB,sBAAsB,EACtB,uCAAuC,CACxC,CAAC;QACF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,WAAW,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport function savePersistentStates(appObjects: AppObjectRepo) {\n const uc = SavePersistentStatesUC.get(appObjects);\n if (!uc) {\n appObjects.submitWarning(\n \"savePersistentStates\",\n \"Unable to find SavePersistentStatesUC\"\n );\n return;\n }\n\n uc.saveLocally();\n}\n"]}
1
+ {"version":3,"file":"savePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/savePersistentStates.ts"],"names":[],"mappings":";;AAGA,oDAWC;AAbD,sEAAqE;AAErE,SAAgB,oBAAoB,CAAC,UAAyB;IAC5D,MAAM,EAAE,GAAG,6CAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,UAAU,CAAC,aAAa,CACtB,sBAAsB,EACtB,uCAAuC,CACxC,CAAC;QACF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport function savePersistentStates(appObjects: AppObjectRepo) {\n const uc = SavePersistentStatesUC.get(appObjects);\n if (!uc) {\n appObjects.submitWarning(\n \"savePersistentStates\",\n \"Unable to find SavePersistentStatesUC\"\n );\n return;\n }\n\n uc.copyToClipboard();\n}\n"]}
@@ -6,7 +6,7 @@ const SavePersistentStates_1 = require("../UCs/SavePersistentStates");
6
6
  class SavePersistentStatesMock extends SavePersistentStates_1.SavePersistentStatesUC {
7
7
  constructor(appObject) {
8
8
  super(appObject, SavePersistentStates_1.SavePersistentStatesUC.type);
9
- this.saveLocally = jest.fn();
9
+ this.copyToClipboard = jest.fn();
10
10
  }
11
11
  }
12
12
  exports.SavePersistentStatesMock = SavePersistentStatesMock;
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStatesMock.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":";;;AAWA,oEAIC;AAdD,sEAAqE;AAErE,MAAa,wBAAyB,SAAQ,6CAAsB;IAGlE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,6CAAsB,CAAC,IAAI,CAAC,CAAC;QAHhD,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIxB,CAAC;CACF;AAND,4DAMC;AAED,SAAgB,4BAA4B,CAAC,UAAyB;IACpE,OAAO,IAAI,wBAAwB,CACjC,UAAU,CAAC,WAAW,CAAC,0BAA0B,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport class SavePersistentStatesMock extends SavePersistentStatesUC {\n saveLocally = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n }\n}\n\nexport function makeSavePersistentStatesMock(appObjects: AppObjectRepo) {\n return new SavePersistentStatesMock(\n appObjects.getOrCreate(\"SavePersistentStatesMock\")\n );\n}\n"]}
1
+ {"version":3,"file":"SavePersistentStatesMock.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":";;;AAWA,oEAIC;AAdD,sEAAqE;AAErE,MAAa,wBAAyB,SAAQ,6CAAsB;IAGlE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,6CAAsB,CAAC,IAAI,CAAC,CAAC;QAHhD,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAI5B,CAAC;CACF;AAND,4DAMC;AAED,SAAgB,4BAA4B,CAAC,UAAyB;IACpE,OAAO,IAAI,wBAAwB,CACjC,UAAU,CAAC,WAAW,CAAC,0BAA0B,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport class SavePersistentStatesMock extends SavePersistentStatesUC {\n copyToClipboard = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n }\n}\n\nexport function makeSavePersistentStatesMock(appObjects: AppObjectRepo) {\n return new SavePersistentStatesMock(\n appObjects.getOrCreate(\"SavePersistentStatesMock\")\n );\n}\n"]}
@@ -20,7 +20,7 @@ class SavePersistentStatesUCImp extends SavePersistentStatesUC {
20
20
  }
21
21
  constructor(appObject) {
22
22
  super(appObject, SavePersistentStatesUC.type);
23
- this.saveLocally = () => {
23
+ this.copyToClipboard = () => {
24
24
  if (!this.stateMachine)
25
25
  return;
26
26
  const states = [];
@@ -37,11 +37,9 @@ class SavePersistentStatesUCImp extends SavePersistentStatesUC {
37
37
  }
38
38
  });
39
39
  const statesData = JSON.stringify(states);
40
- const a = document.createElement("a");
41
- const file = new Blob([statesData], { type: "text/plain" });
42
- a.href = URL.createObjectURL(file);
43
- a.download = "persistentStates.json";
44
- a.click();
40
+ navigator.clipboard.writeText(statesData).catch((e) => {
41
+ this.warn(`Unable to copy persistent states to the clipboard: ${e}`);
42
+ });
45
43
  };
46
44
  this.appObjects.registerSingleton(this);
47
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":";;;AAsBA,gEAIC;AA1BD,sCAKqB;AACrB,0CAA+C;AAG/C,MAAsB,sBAAuB,SAAQ,kBAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AAVH,wDAWC;AAVQ,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,2BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA4BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QA3BhD,gBAAW,GAAG,GAAS,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,QAAQ,GAAG,uBAAuB,CAAC;YACrC,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { HostStateMachine } from \"../Entities\";\nimport { SandboxStateData } from \"./setSandboxStatesFromData\";\n\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\n static type = \"SavePersistentStatesUC\";\n\n abstract saveLocally(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<SavePersistentStatesUC>(\n SavePersistentStatesUC.type,\n appObjects\n );\n }\n}\n\nexport function makeSavePersistentStatesUC(\n appObject: AppObject\n): SavePersistentStatesUC {\n return new SavePersistentStatesUCImp(appObject);\n}\n\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n saveLocally = (): void => {\n if (!this.stateMachine) return;\n\n const states: SandboxStateData[] = [];\n this.stateMachine.states.forEach((stateID) => {\n const state = this.stateMachine?.getStateByID(stateID);\n if (state) {\n const rVal: SandboxStateData = {\n assets: state.assets,\n data: state.stateData,\n id: state.id,\n name: state.name\n };\n\n states.push(rVal);\n }\n });\n\n const statesData = JSON.stringify(states);\n const a = document.createElement(\"a\");\n const file = new Blob([statesData], { type: \"text/plain\" });\n a.href = URL.createObjectURL(file);\n a.download = \"persistentStates.json\";\n a.click();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
1
+ {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":";;;AAsBA,gEAIC;AA1BD,sCAKqB;AACrB,0CAA+C;AAG/C,MAAsB,sBAAuB,SAAQ,kBAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AAVH,wDAWC;AAVQ,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,2BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA0BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAzBhD,oBAAe,GAAG,GAAS,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpD,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { HostStateMachine } from \"../Entities\";\nimport { SandboxStateData } from \"./setSandboxStatesFromData\";\n\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\n static type = \"SavePersistentStatesUC\";\n\n abstract copyToClipboard(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<SavePersistentStatesUC>(\n SavePersistentStatesUC.type,\n appObjects\n );\n }\n}\n\nexport function makeSavePersistentStatesUC(\n appObject: AppObject\n): SavePersistentStatesUC {\n return new SavePersistentStatesUCImp(appObject);\n}\n\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n copyToClipboard = (): void => {\n if (!this.stateMachine) return;\n\n const states: SandboxStateData[] = [];\n this.stateMachine.states.forEach((stateID) => {\n const state = this.stateMachine?.getStateByID(stateID);\n if (state) {\n const rVal: SandboxStateData = {\n assets: state.assets,\n data: state.stateData,\n id: state.id,\n name: state.name\n };\n\n states.push(rVal);\n }\n });\n\n const statesData = JSON.stringify(states);\n navigator.clipboard.writeText(statesData).catch((e) => {\n this.warn(`Unable to copy persistent states to the clipboard: ${e}`);\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -38,7 +38,20 @@ class GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {
38
38
  this.getAssetUC
39
39
  .getAsset(assetID)
40
40
  .then((asset) => {
41
- callback(asset.fileURL ? asset.fileURL : undefined);
41
+ // Prefer the remote streaming URL. For a freshly uploaded asset the
42
+ // backend has not produced a fileURL yet, but the host is still holding
43
+ // the uploaded bytes locally — fall back to the blob URL so it can be
44
+ // streamed this session without a reload. blobURL is the managed URL
45
+ // created by setFile (revoked on dispose), so no new object URL leaks.
46
+ if (asset.fileURL) {
47
+ callback(asset.fileURL);
48
+ }
49
+ else if (asset.blobURL) {
50
+ callback(asset.blobURL);
51
+ }
52
+ else {
53
+ callback(undefined);
54
+ }
42
55
  })
43
56
  .catch((e) => {
44
57
  this.error(e.message);
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,iBAAiB,EAEjB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAOrB,MAAM,OAAgB,wBACpB,SAAQ,WAAW;IADrB;;QAMW,gBAAW,GAAG,sBAAsB,CAAC;IAIhD,CAAC;;AANiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B;AAQpD,MAAM,UAAU,4BAA4B,CAC1C,SAAoB;IAEpB,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,2BAA4B,SAAQ,wBAAwB;IAChE,IAAY,UAAU;QACpB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAa,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IA6BO,aAAa,CAAC,OAAgB;QACpC,MAAM,WAAW,GAAG,OAAqB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,oBAAoB,CAC5B,IAAI,CAAC,WAAW,EAChB,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACxB,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAzClD,WAAM,GAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACxC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,UAAU;iBACZ,QAAQ,CAAC,OAAO,CAAC;iBACjB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACtB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,OAAe,EAAE,OAAgB,EAAE,EAAE;YACpD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC;QAkBA,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport { GetAssetUC } from \"../../Assets\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type GetAssetStreamURLAction = (\r\n assetID: string,\r\n callback: (url: string | undefined) => void\r\n) => void;\r\n\r\nexport abstract class GetAssetStreamURLHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"GetAssetStreamURLHandler\";\r\n\r\n readonly requestType = \"GET_ASSET_STREAM_URL\";\r\n\r\n abstract action: GetAssetStreamURLAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeGetAssetStreamURLHandler(\r\n appObject: AppObject\r\n): GetAssetStreamURLHandler {\r\n return new GetAssetStreamURLHandlerImp(appObject);\r\n}\r\n\r\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\r\n private get getAssetUC() {\r\n try {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n action: GetAssetStreamURLAction = (assetID, callback) => {\r\n if (!this.getAssetUC) {\r\n this.error(\"Unable to find GetAssetUC\");\r\n callback(undefined);\r\n return;\r\n }\r\n\r\n this.getAssetUC\r\n .getAsset(assetID)\r\n .then((asset) => {\r\n callback(asset.fileURL ? asset.fileURL : undefined);\r\n })\r\n .catch((e: Error) => {\r\n this.error(e.message);\r\n callback(undefined);\r\n });\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 1) {\r\n const { assetID, callback } = this.castPayloadV1(payload);\r\n this.action(assetID, callback);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private castPayloadV1(payload: unknown): Payload_V1 {\r\n const castPayload = payload as Payload_V1;\r\n if (!castPayload.assetID || !castPayload.callback) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetStreamURLHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\ntype Payload_V1 = {\r\n assetID: string;\r\n callback: (url: string | undefined) => void;\r\n};\r\n"]}
1
+ {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport { GetAssetUC } from \"../../Assets\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type GetAssetStreamURLAction = (\r\n assetID: string,\r\n callback: (url: string | undefined) => void\r\n) => void;\r\n\r\nexport abstract class GetAssetStreamURLHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"GetAssetStreamURLHandler\";\r\n\r\n readonly requestType = \"GET_ASSET_STREAM_URL\";\r\n\r\n abstract action: GetAssetStreamURLAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeGetAssetStreamURLHandler(\r\n appObject: AppObject\r\n): GetAssetStreamURLHandler {\r\n return new GetAssetStreamURLHandlerImp(appObject);\r\n}\r\n\r\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\r\n private get getAssetUC() {\r\n try {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n action: GetAssetStreamURLAction = (assetID, callback) => {\r\n if (!this.getAssetUC) {\r\n this.error(\"Unable to find GetAssetUC\");\r\n callback(undefined);\r\n return;\r\n }\r\n\r\n this.getAssetUC\r\n .getAsset(assetID)\r\n .then((asset) => {\r\n // Prefer the remote streaming URL. For a freshly uploaded asset the\r\n // backend has not produced a fileURL yet, but the host is still holding\r\n // the uploaded bytes locally — fall back to the blob URL so it can be\r\n // streamed this session without a reload. blobURL is the managed URL\r\n // created by setFile (revoked on dispose), so no new object URL leaks.\r\n if (asset.fileURL) {\r\n callback(asset.fileURL);\r\n } else if (asset.blobURL) {\r\n callback(asset.blobURL);\r\n } else {\r\n callback(undefined);\r\n }\r\n })\r\n .catch((e: Error) => {\r\n this.error(e.message);\r\n callback(undefined);\r\n });\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 1) {\r\n const { assetID, callback } = this.castPayloadV1(payload);\r\n this.action(assetID, callback);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private castPayloadV1(payload: unknown): Payload_V1 {\r\n const castPayload = payload as Payload_V1;\r\n if (!castPayload.assetID || !castPayload.callback) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetStreamURLHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\ntype Payload_V1 = {\r\n assetID: string;\r\n callback: (url: string | undefined) => void;\r\n};\r\n"]}
@@ -5,6 +5,6 @@ export function savePersistentStates(appObjects) {
5
5
  appObjects.submitWarning("savePersistentStates", "Unable to find SavePersistentStatesUC");
6
6
  return;
7
7
  }
8
- uc.saveLocally();
8
+ uc.copyToClipboard();
9
9
  }
10
10
  //# sourceMappingURL=savePersistentStates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"savePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/savePersistentStates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,MAAM,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,UAAU,CAAC,aAAa,CACtB,sBAAsB,EACtB,uCAAuC,CACxC,CAAC;QACF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,WAAW,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport function savePersistentStates(appObjects: AppObjectRepo) {\n const uc = SavePersistentStatesUC.get(appObjects);\n if (!uc) {\n appObjects.submitWarning(\n \"savePersistentStates\",\n \"Unable to find SavePersistentStatesUC\"\n );\n return;\n }\n\n uc.saveLocally();\n}\n"]}
1
+ {"version":3,"file":"savePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/savePersistentStates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,MAAM,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,UAAU,CAAC,aAAa,CACtB,sBAAsB,EACtB,uCAAuC,CACxC,CAAC;QACF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport function savePersistentStates(appObjects: AppObjectRepo) {\n const uc = SavePersistentStatesUC.get(appObjects);\n if (!uc) {\n appObjects.submitWarning(\n \"savePersistentStates\",\n \"Unable to find SavePersistentStatesUC\"\n );\n return;\n }\n\n uc.copyToClipboard();\n}\n"]}
@@ -2,7 +2,7 @@ import { SavePersistentStatesUC } from "../UCs/SavePersistentStates";
2
2
  export class SavePersistentStatesMock extends SavePersistentStatesUC {
3
3
  constructor(appObject) {
4
4
  super(appObject, SavePersistentStatesUC.type);
5
- this.saveLocally = jest.fn();
5
+ this.copyToClipboard = jest.fn();
6
6
  }
7
7
  }
8
8
  export function makeSavePersistentStatesMock(appObjects) {
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStatesMock.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,OAAO,wBAAyB,SAAQ,sBAAsB;IAGlE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAHhD,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIxB,CAAC;CACF;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAyB;IACpE,OAAO,IAAI,wBAAwB,CACjC,UAAU,CAAC,WAAW,CAAC,0BAA0B,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport class SavePersistentStatesMock extends SavePersistentStatesUC {\n saveLocally = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n }\n}\n\nexport function makeSavePersistentStatesMock(appObjects: AppObjectRepo) {\n return new SavePersistentStatesMock(\n appObjects.getOrCreate(\"SavePersistentStatesMock\")\n );\n}\n"]}
1
+ {"version":3,"file":"SavePersistentStatesMock.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,OAAO,wBAAyB,SAAQ,sBAAsB;IAGlE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAHhD,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAI5B,CAAC;CACF;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAyB;IACpE,OAAO,IAAI,wBAAwB,CACjC,UAAU,CAAC,WAAW,CAAC,0BAA0B,CAAC,CACnD,CAAC;AACJ,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport { SavePersistentStatesUC } from \"../UCs/SavePersistentStates\";\n\nexport class SavePersistentStatesMock extends SavePersistentStatesUC {\n copyToClipboard = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n }\n}\n\nexport function makeSavePersistentStatesMock(appObjects: AppObjectRepo) {\n return new SavePersistentStatesMock(\n appObjects.getOrCreate(\"SavePersistentStatesMock\")\n );\n}\n"]}
@@ -15,7 +15,7 @@ class SavePersistentStatesUCImp extends SavePersistentStatesUC {
15
15
  }
16
16
  constructor(appObject) {
17
17
  super(appObject, SavePersistentStatesUC.type);
18
- this.saveLocally = () => {
18
+ this.copyToClipboard = () => {
19
19
  if (!this.stateMachine)
20
20
  return;
21
21
  const states = [];
@@ -32,11 +32,9 @@ class SavePersistentStatesUCImp extends SavePersistentStatesUC {
32
32
  }
33
33
  });
34
34
  const statesData = JSON.stringify(states);
35
- const a = document.createElement("a");
36
- const file = new Blob([statesData], { type: "text/plain" });
37
- a.href = URL.createObjectURL(file);
38
- a.download = "persistentStates.json";
39
- a.click();
35
+ navigator.clipboard.writeText(statesData).catch((e) => {
36
+ this.warn(`Unable to copy persistent states to the clipboard: ${e}`);
37
+ });
40
38
  };
41
39
  this.appObjects.registerSingleton(this);
42
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,OAAgB,sBAAuB,SAAQ,WAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AATM,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA4BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QA3BhD,gBAAW,GAAG,GAAS,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,QAAQ,GAAG,uBAAuB,CAAC;YACrC,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { HostStateMachine } from \"../Entities\";\nimport { SandboxStateData } from \"./setSandboxStatesFromData\";\n\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\n static type = \"SavePersistentStatesUC\";\n\n abstract saveLocally(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<SavePersistentStatesUC>(\n SavePersistentStatesUC.type,\n appObjects\n );\n }\n}\n\nexport function makeSavePersistentStatesUC(\n appObject: AppObject\n): SavePersistentStatesUC {\n return new SavePersistentStatesUCImp(appObject);\n}\n\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n saveLocally = (): void => {\n if (!this.stateMachine) return;\n\n const states: SandboxStateData[] = [];\n this.stateMachine.states.forEach((stateID) => {\n const state = this.stateMachine?.getStateByID(stateID);\n if (state) {\n const rVal: SandboxStateData = {\n assets: state.assets,\n data: state.stateData,\n id: state.id,\n name: state.name\n };\n\n states.push(rVal);\n }\n });\n\n const statesData = JSON.stringify(states);\n const a = document.createElement(\"a\");\n const file = new Blob([statesData], { type: \"text/plain\" });\n a.href = URL.createObjectURL(file);\n a.download = \"persistentStates.json\";\n a.click();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
1
+ {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,OAAgB,sBAAuB,SAAQ,WAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AATM,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA0BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAzBhD,oBAAe,GAAG,GAAS,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpD,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { HostStateMachine } from \"../Entities\";\nimport { SandboxStateData } from \"./setSandboxStatesFromData\";\n\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\n static type = \"SavePersistentStatesUC\";\n\n abstract copyToClipboard(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<SavePersistentStatesUC>(\n SavePersistentStatesUC.type,\n appObjects\n );\n }\n}\n\nexport function makeSavePersistentStatesUC(\n appObject: AppObject\n): SavePersistentStatesUC {\n return new SavePersistentStatesUCImp(appObject);\n}\n\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n copyToClipboard = (): void => {\n if (!this.stateMachine) return;\n\n const states: SandboxStateData[] = [];\n this.stateMachine.states.forEach((stateID) => {\n const state = this.stateMachine?.getStateByID(stateID);\n if (state) {\n const rVal: SandboxStateData = {\n assets: state.assets,\n data: state.stateData,\n id: state.id,\n name: state.name\n };\n\n states.push(rVal);\n }\n });\n\n const statesData = JSON.stringify(states);\n navigator.clipboard.writeText(statesData).catch((e) => {\n this.warn(`Unable to copy persistent states to the clipboard: ${e}`);\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, SavePersistentStatesUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { AppObject, AppObjectRepo } from "@vived/core";
2
2
  import { SavePersistentStatesUC } from "../UCs/SavePersistentStates";
3
3
  export declare class SavePersistentStatesMock extends SavePersistentStatesUC {
4
- saveLocally: jest.Mock<any, any, any>;
4
+ copyToClipboard: jest.Mock<any, any, any>;
5
5
  constructor(appObject: AppObject);
6
6
  }
7
7
  export declare function makeSavePersistentStatesMock(appObjects: AppObjectRepo): SavePersistentStatesMock;
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStatesMock.d.ts","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,wBAAyB,SAAQ,sBAAsB;IAClE,WAAW,2BAAa;gBAEZ,SAAS,EAAE,SAAS;CAGjC;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,aAAa,4BAIrE"}
1
+ {"version":3,"file":"SavePersistentStatesMock.d.ts","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/SavePersistentStatesMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,wBAAyB,SAAQ,sBAAsB;IAClE,eAAe,2BAAa;gBAEhB,SAAS,EAAE,SAAS;CAGjC;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,aAAa,4BAIrE"}
@@ -1,7 +1,7 @@
1
1
  import { AppObject, AppObjectRepo, AppObjectUC } from "@vived/core";
2
2
  export declare abstract class SavePersistentStatesUC extends AppObjectUC {
3
3
  static type: string;
4
- abstract saveLocally(): void;
4
+ abstract copyToClipboard(): void;
5
5
  static get(appObjects: AppObjectRepo): SavePersistentStatesUC | undefined;
6
6
  }
7
7
  export declare function makeSavePersistentStatesUC(appObject: AppObject): SavePersistentStatesUC;
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStates.d.ts","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,8BAAsB,sBAAuB,SAAQ,WAAW;IAC9D,MAAM,CAAC,IAAI,SAA4B;IAEvC,QAAQ,CAAC,WAAW,IAAI,IAAI;IAE5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa;CAMrC;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,GACnB,sBAAsB,CAExB"}
1
+ {"version":3,"file":"SavePersistentStates.d.ts","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,8BAAsB,sBAAuB,SAAQ,WAAW;IAC9D,MAAM,CAAC,IAAI,SAA4B;IAEvC,QAAQ,CAAC,eAAe,IAAI,IAAI;IAEhC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa;CAMrC;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,GACnB,sBAAsB,CAExB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/host",
3
- "version": "5.4.1",
3
+ "version": "5.5.0",
4
4
  "description": "Public Host package for the VIVED Learning App system",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",