Skip to content
Snippets Groups Projects
make-ocfl-index.js 1.98 KiB
Newer Older
PTSEFTON's avatar
PTSEFTON committed
// Simple Demo script to show usage

const path = require('path');
const fs = require('fs-extra');
const ocfl = require("ocfl");
const hasha = require('hasha');
PTSEFTON's avatar
PTSEFTON committed
const OCFLRepository = require('ocfl').Repository;
var argv = require('yargs').argv;
var Utils  = require("ro-crate").Utils
var ROCrate = require('ro-crate').ROCrate;
var utils = new Utils();


const URL_HASH_ALGORITHM = 'md5';

PTSEFTON's avatar
PTSEFTON committed
// This is an asynchronous library so you need to call using await, or use promises


PTSEFTON's avatar
PTSEFTON committed
async function main() {
  // OCFL repo - exists?
PTSEFTON's avatar
PTSEFTON committed
  const repoPath = argv.repo ? argv.repo : "ocfl_demo";
  // Make or open a database
  // Get or open an OCFL repo
  var repo = new OCFLRepository();
  var index = [];
  var init = await repo.load(repoPath);
  var objects = await repo.objects();
  var p;
  for (let o of  Object.keys(objects)) {
    var object = objects[o];
    const inv = await (object.getInventory());
    var headState = inv.versions[inv.head].state;
    for (let hash of Object.keys(headState)){
        if (headState[hash].includes("ro-crate-metadata.jsonld")) {
            p = inv.manifest[hash][0];
            break;
        }
    }

    var rocrateFile = path.join(object.path, p);
    console.log("GOT", rocrateFile);
    var json =  JSON.parse(fs.readFileSync(rocrateFile));
    crate = new ROCrate(json);
    crate.index();
    var dataset = crate.getRootDataset()
    console.log(dataset['@id'], dataset['description'], p);
    var newItem = {
      "@id": dataset["@id"],
      uri_id: hasha(dataset["@id"], { algorithm: URL_HASH_ALGORITHM }),
      name: utils.asArray(dataset.name)[0],
      description: utils.asArray(dataset.description)[0],
      datePublished: utils.asArray(dataset.name)[0],
      path: path.relative(repoPath, object.path)
PTSEFTON's avatar
PTSEFTON committed
    }
    index.push(newItem);

    fs.writeFileSync(path.join(repo.path, "index.json"), JSON.stringify(index, null, 2));
    /* 
    TODO

    - Find the dataset []

    - Sumamarize it

    - add to an index object

    - write out the object

    */

  }
}
main();