mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-06 08:25:19 +01:00
41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
import {state} from 'lstream';
|
|
|
|
export function activate(ctx) {
|
|
const {streams, services} = ctx;
|
|
const asyncInitializingJobs = new Set();
|
|
const startTime = performance.now();
|
|
streams.lifecycle = {
|
|
appReady: state(false),
|
|
projectLoaded: state(false)
|
|
};
|
|
services.lifecycle = {
|
|
startAsyncInitializingJob : job => {
|
|
if (!streams.lifecycle.projectLoaded.value) {
|
|
asyncInitializingJobs.add(job);
|
|
}
|
|
},
|
|
finishAsyncInitializingJob : job => {
|
|
asyncInitializingJobs.delete(job);
|
|
services.lifecycle.loadProjectRequest();
|
|
},
|
|
loadProjectRequest: () => {
|
|
if (streams.lifecycle.appReady.value &&
|
|
!streams.lifecycle.projectLoaded.value &&
|
|
services.extension.allExtensionsReady() &&
|
|
asyncInitializingJobs.size === 0) {
|
|
|
|
services.extension.activateAllExtensions();
|
|
ctx.projectService.load();
|
|
const onLoadTime = performance.now();
|
|
console.log("project loaded, took: " + ((onLoadTime - startTime) / 1000).toFixed(2) + ' sec');
|
|
streams.lifecycle.projectLoaded.value = true;
|
|
}
|
|
},
|
|
declareAppReady: () => {
|
|
streams.lifecycle.appReady.value = true;
|
|
services.lifecycle.loadProjectRequest();
|
|
}
|
|
}
|
|
}
|
|
|
|
export const BundleName = "@Lifecycle";
|