Ejemplo n.º 1
0
export async function loadPackagesAndModulesOfSnapshot(snapshot) {
  // embedded package definitions
  if (snapshot.packagesToRegister) {
    for (let pName of snapshot.packagesToRegister) {
      try { await registerPackage(pName); } catch (err) {
        console.error(`Failed to register package ${pName}`);
      }
    }
  }


  if (snapshot.packages) {
    let packages = packagesOfSnapshot(snapshot);

    for (let { files, url } of packages) {
      // if a package with the same url already is loaded in the runtime then
      // compare its version with the version of the package that gets loaded.  If
      // the version to-load is older, keep the newer version.
      // FIXME: ensure old objects continue to work!
      let packageLookup = lookupPackage(url),
          p = packageLookup && packageLookup.pkg;
      if (p) {
        let loadedVersion = p.version,
            {version: versionInSpec} = JSON.parse(files["package.json"]);
        try {
          if (versionInSpec && loadedVersion &&
              semver.lte(versionInSpec, loadedVersion, true)) {
            console.log(`[load morph] Package ${url} is loaded in version ${loadedVersion}`
                      + ` which is newer than ${versionInSpec}. Will NOT load older variant.`);
            continue;
          }
        } catch (err) {
          console.warn(`Error in package version comparison: `, err);
        }
      }
      let r = await createFiles(url, files);
          p = await ensurePackage(url);
      await p.reload({forgetEnv: false, forgetDeps: false});
      // ensure object package instance
      const { default: ObjectPackage } = await System.import("lively.classes/object-classes.js");
      objectScriptingEnabled = !!ObjectPackage;
      objectScriptingEnabled && ObjectPackage.withId(p.name);
    }
  }

  // referenced packages / modules, e.g. b/c instances have classes from them
  // load required modules
  await Promise.all(
    requiredModulesOfSnapshot(snapshot)
      .map(modId => (System.get(modId) ? null : System.import(modId))
                .catch(e => console.error(`Error loading ${modId}`, e))));
}
Ejemplo n.º 2
0
export function deserializeMorph(idAndSnapshot, options={}) {
  return deserializeWithMigrations(
    idAndSnapshot, 
    options.migrations || migrations,
    normalizeOptions(options));
}
Ejemplo n.º 3
0
export function serializeMorph(m, options) {
  return serialize(m, normalizeOptions(options));
}