Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API: create extended library for node #3214

Merged
merged 1 commit into from
Oct 8, 2021
Merged

API: create extended library for node #3214

merged 1 commit into from
Oct 8, 2021

Conversation

blueridger
Copy link
Member

@blueridger blueridger commented Oct 4, 2021

Description

Up until now, we've only been adding modules to our library that are browser compatible, because we've used the same export for both web and node. This has meant that 3rd-party developers working in a node environment have been missing out on some SUPER USEFUL stuff that we've built.

This PR:

  • moves api/index.js to api/lib/base.js
  • creates a new api/lib/node.js module that extends the base with useful modules that aren't browser friendly, and updates the node build to use this
  • adds a yarn shell command to packages/sourcecred, which opens a node shell with both the web and node builds already imported as sc and scClient, respectively.

Test plan

yarn build && yarn shell
Results in spoilers:

sc
$ sc
{
  api: {
    graph: Object [Module] {
      graph: [Getter],
      _hackyIdentityNameReferenceDetector: [Getter]
    },
    credrank: Object [Module] { credrank: [Getter] },
    grain: Object [Module] {
      grain: [Getter],
      executeGrainIntegrationsFromGrainInput: [Getter]
    }
  },
  instance: {
    readInstance: Object [Module] {
      getNetworkReadInstance: [Getter],
      getOriginReadInstance: [Getter],
      ReadInstance: [Getter]
    },
    LocalInstance: [class (anonymous) extends Ud]
  },
  core: {
    address: Object [Module] { makeAddressModule: [Getter] },
    algorithm: {
      markovChain: [Object [Module]],
      graphToMarkovChain: [Object [Module]]
    },
    graph: Object [Module] {
      NodeAddress: [Getter],
      EdgeAddress: [Getter],
      Direction: [Getter],
      Graph: [Getter],
      nodeToString: [Getter],
      edgeToString: [Getter],
      edgeToStrings: [Getter],
      edgeToParts: [Getter],
      compareGraphs: [Getter]
    },
    weightedGraph: Object [Module] {
      empty: [Getter],
      toJSON: [Getter],
      fromJSON: [Getter],
      merge: [Getter],
      overrideWeights: [Getter]
    },
    weights: Object [Module] {
      edgeWeightParser: [Getter],
      empty: [Getter],
      copy: [Getter],
      merge: [Getter],
      parser: [Getter],
      toJSON: [Getter],
      fromJSON: [Getter],
      compareWeights: [Getter]
    },
    credGraph: Object [Module] {
      CredGraph: [Getter],
      jsonParser: [Getter],
      parser: [Getter]
    },
    CredGrainView: [class lh]
  },
  ledger: {
    ledger: Object [Module] { Ledger: [Getter] },
    identity: Object [Module] {
      identityIdParser: [Getter],
      delimitedIdentityIdParser: [Getter],
      newIdentity: [Getter],
      contractions: [Getter],
      graphNode: [Getter],
      identityParser: [Getter],
      IDENTITY_PREFIX: [Getter],
      identityTypeParser: [Getter],
      nameFromString: [Getter],
      nameParser: [Getter],
      aliasParser: [Getter]
    },
    grain: Object [Module] {
      ZERO: [Getter],
      DECIMAL_PRECISION: [Getter],
      ONE: [Getter],
      add: [Getter],
      sub: [Getter],
      mul: [Getter],
      div: [Getter],
      lt: [Getter],
      gt: [Getter],
      lte: [Getter],
      gte: [Getter],
      eq: [Getter],
      fromString: [Getter],
      format: [Getter],
      formatAndTrim: [Getter],
      multiplyFloat: [Getter],
      divideFloat: [Getter],
      fromInteger: [Getter],
      fromFloatString: [Getter],
      fromApproximateFloat: [Getter],
      toFloatRatio: [Getter],
      splitBudget: [Getter],
      sum: [Getter],
      parser: [Getter]
    },
    utils: Object [Module] {
      diffLedger: [Getter],
      ensureIdentityExists: [Getter],
      distributions: [Getter]
    },
    manager: Object [Module] { LedgerManager: [Getter] },
    storage: Object [Module] { GithubStorage: [Getter] }
  },
  plugins: {
    ConstructorPlugin: [class ConstructorPlugin],
    github: {
      declaration: [Object [Module]],
      edges: [Object [Module]],
      nodes: [Object [Module]],
      GithubPlugin: [class pm]
    },
    ethereum: { declaration: [Object [Module]], utils: [Object [Module]] },
    discourse: {
      address: [Object [Module]],
      declaration: [Object [Module]],
      DiscoursePlugin: [class xg]
    },
    discord: {
      declaration: [Object [Module]],
      utils: [Object [Module]],
      DiscordPlugin: [class Fg]
    },
    initiatives: { declaration: [Object [Module]], InitiativesPlugin: [class Ty] },
    declarationParser: z { _f: [Function (anonymous)], _phantomT: undefined },
    identityProposalsParser: z { _f: [Function (anonymous)], _phantomT: undefined },
    coerceNameFromString: [Function: gn]
  }
}
scClient
$ scClient
{
  api: {
    graph: Object [Module] {
      graph: [Getter],
      _hackyIdentityNameReferenceDetector: [Getter]
    },
    credrank: Object [Module] { credrank: [Getter] },
    grain: Object [Module] {
      grain: [Getter],
      executeGrainIntegrationsFromGrainInput: [Getter]
    }
  },
  instance: {
    readInstance: Object [Module] {
      getNetworkReadInstance: [Getter],
      getOriginReadInstance: [Getter],
      ReadInstance: [Getter]
    }
  },
  core: {
    address: Object [Module] { makeAddressModule: [Getter] },
    algorithm: {
      markovChain: [Object [Module]],
      graphToMarkovChain: [Object [Module]]
    },
    graph: Object [Module] {
      NodeAddress: [Getter],
      EdgeAddress: [Getter],
      Direction: [Getter],
      Graph: [Getter],
      nodeToString: [Getter],
      edgeToString: [Getter],
      edgeToStrings: [Getter],
      edgeToParts: [Getter],
      compareGraphs: [Getter]
    },
    weightedGraph: Object [Module] {
      empty: [Getter],
      toJSON: [Getter],
      fromJSON: [Getter],
      merge: [Getter],
      overrideWeights: [Getter]
    },
    weights: Object [Module] {
      edgeWeightParser: [Getter],
      empty: [Getter],
      copy: [Getter],
      merge: [Getter],
      parser: [Getter],
      toJSON: [Getter],
      fromJSON: [Getter],
      compareWeights: [Getter]
    },
    credGraph: Object [Module] {
      CredGraph: [Getter],
      jsonParser: [Getter],
      parser: [Getter]
    },
    CredGrainView: [class nh]
  },
  ledger: {
    ledger: Object [Module] { Ledger: [Getter] },
    identity: Object [Module] {
      identityIdParser: [Getter],
      delimitedIdentityIdParser: [Getter],
      newIdentity: [Getter],
      contractions: [Getter],
      graphNode: [Getter],
      identityParser: [Getter],
      IDENTITY_PREFIX: [Getter],
      identityTypeParser: [Getter],
      nameFromString: [Getter],
      nameParser: [Getter],
      aliasParser: [Getter]
    },
    grain: Object [Module] {
      ZERO: [Getter],
      DECIMAL_PRECISION: [Getter],
      ONE: [Getter],
      add: [Getter],
      sub: [Getter],
      mul: [Getter],
      div: [Getter],
      lt: [Getter],
      gt: [Getter],
      lte: [Getter],
      gte: [Getter],
      eq: [Getter],
      fromString: [Getter],
      format: [Getter],
      formatAndTrim: [Getter],
      multiplyFloat: [Getter],
      divideFloat: [Getter],
      fromInteger: [Getter],
      fromFloatString: [Getter],
      fromApproximateFloat: [Getter],
      toFloatRatio: [Getter],
      splitBudget: [Getter],
      sum: [Getter],
      parser: [Getter]
    },
    utils: Object [Module] {
      diffLedger: [Getter],
      ensureIdentityExists: [Getter],
      distributions: [Getter]
    },
    manager: Object [Module] { LedgerManager: [Getter] },
    storage: Object [Module] { GithubStorage: [Getter] }
  },
  plugins: {
    ConstructorPlugin: [class ConstructorPlugin],
    github: {
      declaration: [Object [Module]],
      edges: [Object [Module]],
      nodes: [Object [Module]]
    },
    ethereum: { declaration: [Object [Module]], utils: [Object [Module]] },
    discourse: { address: [Object [Module]], declaration: [Object [Module]] },
    discord: { declaration: [Object [Module]], utils: [Object [Module]] },
    initiatives: { declaration: [Object [Module]] },
    declarationParser: q { _f: [Function (anonymous)], _phantomT: undefined },
    identityProposalsParser: q { _f: [Function (anonymous)], _phantomT: undefined },
    coerceNameFromString: [Function: we]
  }
}

Copy link
Contributor

@hozzjss hozzjss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All looks really good thanks for this!!

@blueridger blueridger merged commit 852294f into main Oct 8, 2021
@blueridger blueridger deleted the lib branch October 8, 2021 18:41
@blueridger blueridger linked an issue Oct 9, 2021 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Disk-friendly exports package
3 participants