npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@cognite/cdf-cli

v2.6.1

Published

A CLI for Cognite Data Fusion

Downloads

644

Readme

CDF CLI

The CDF CLI's aim is to make it easier for developers to develop an app or solution on top of CDF. The CLI's current focus is on enabling key data modeling functionality, and we will expand towards other features in the future.

NOTE: This package is still in early alpha and under active development. We will document and test actively, but please file bug report via the Cognite Hub group

Install (Globally)

yarn global add @cognite/cdf-cli

Commands

We currently support these top level commands

| Top Level Command | Description | | ------------------------- | ---------------------------------------------------------- | | cdf signin | Login with the CLI (alias: login) | | cdf signout | Logout the currently logged-in user (alias: logout) | | cdf status | Show user's logged-in status (fails is user not logged in) |

Data-models (alias: dm)

| Data model Commands | Description | | ------------------------ | ------------------------- | | cdf data-models create | Creates a new data model. |

| cdf data-models list | List data models. | | cdf data-models publish | Updates a data model with a new GraphQL definition. | | cdf data-models generate-js-sdk | Create a JavaScript (TypeScript) SDK from a data model to query and populate data, with code completion, type checks, and more. | | cdf data-models generate | Generate a JavaScript GraphQL client for the data model. Powered by https://the-guild.dev/graphql/codegen. |

Options (Global)

These global --options are supported for helping with the executions

| Templates Command | Description | | ----------------- | ---------------------------------------------------------------------------------- | | --help | Show help message and command description | | --verbose | Show debug logs and detailed message to the users helping with debugging | | --interactive | (Default: true) Show prompts rather than failing if required arguments are missing |

Command Description

Signin

See the login section for more details

cdf signin
cdf login

Signout

This will logout and clear the global config files for the CLI.

cdf signout
cdf logout

Status

This command will tell about the login status and later on status of the backend your project is connected to.

cdf status

Javascript and Typescript SDK generation

This functionality creates a FDMQueryClient that is auto-generated from the specified data model which enables type-safe CDF data querying and ingestion against your data models.

This tool reduces boilerplate. And you can easily use it along side Apollo.

import { FDMQueryClientBuilder } from './generated'; // you can change the output via the --output-directory when running `generate-js-sdk`

// for application development, we recommend using this in conjunction with @cognite/sdk
const client = FDMQueryClientBuilder.fromClient(/**Your CogniteClient Here, this would be provided by @cognite/sdk**/);

// for simple script, you can also use
// const client = FDMQueryClientBuilder.fromToken();
// which gives you a client that will be able to access your data model for 30 minutes

Hint: Feel free to checkout the generated/sample.ts for how to use the SDK!

Querying

With FDM, you get access to list, search, getById, and aggregate queries for every type you define.

To run these queries, use the runQuery command and it will autocomplete all of the fields.

Basic query with no variables

client
  .runQuery({
    searchMovie: {
      items: {
        __scalar: true, // use __scalar to get all the scalars back (i.e. String, Int values).
        name: true, // or just type the property name as key and `true` as value to get the data back
      },
    },
  })
  .then((response) => {
    // do something with `response.data`
  });

You'll notice that the response you get back is according to the field selection in the runQuery command.

Basic querying

For most queries, you would like to specify some parameters (i.e. query for search commands, or limit for page size).

Optionally, you can pass arguments for search queries, filters and more directly with __args.

Optionally, you can also provide a name to the query via __name

client
  .runQuery({
    searchMovie: {
      __name: 'myQuery',
      __args: { query: 'some string', limit: 1000 }, // you can specify the parameters right in here
      items: {
        name: true,
      },
    },
  })
  .then((response) => {
    // do something with `response.data`
  });

On Interfaces

You can use the on_XXX to specify fields for specific types of data you would like back

client
  .runQuery({
    listPerson: {
      __typename: true,
      on_Actor: {
        name: true,
        didWinOscar: true,
      },
    },
  })
  .then(({[account]}) => {
    if (account.__typename === 'Actor') {
      // now account has type Actor
      console.log(account.name);
      console.log(account.id);
    }
  });

How does it work?

For querying, we take inspiration from genql.

Upserting

To upsert (update or insert) data into your data model's types, you can use upsertNodes.

When you upsert, you must specify the externalId and any other required fields.

Basic Nodes

Loading basic nodes is very easy: simply pass in an array of JSON objects after specifying the type that you would like to load to.

await client.upsertNodes('Actor', [
  {
    name: 'Brad Pitt',
    externalId: 'bp',
  },
]);
await client.upsertNodes('Movie', [
  {
    name: "Ocean's 11",
    externalId: 'o11',
  },
]);

Relationships

We have a special case for any relationships, you must specify the externalId of the target instance, along with an optional space.

1:1 (direct) relationships

Just specify the target directly when updating the instance (node).

import { NodeRef } from './generated';

client.upsertNodes('Actor', [
  {
    name: 'Brad Pitt',
    externalId: 'bp',
    favMovie: { externalId: 'o11' },
  },
]);

many to many relationships

For loading relationships - 1:m (one to many) or m:n (many to many), specify first the property that the data should be loaded to to upsertEdges.

Note: you can also supply an externalId of the edge itself, or else it will be the combination of the start and end node - ${startNode.externalId}-${endNode.externalId}.

import { NodeRef } from './generated';

client.upsertEdges('Movie', 'actors', [
  {
    startNode: { externalId: 'o11' },
    endNode: { externalId: 'bp' },
  },
]);

Deleting

For deleting nodes data just use the deleteNodes and pass in the externalIds to be deleted for the specified type.

For deleting relationships - 1:m (one to many) or m:n (many to many), use the special NodeRef class and specify the start and end node's externalIds. Pass the array of relationships to be deleted to deleteEdges.

Note: for relationships (edges), you can also supply an externalId of the edge itself, or else it will be the combination of the start and end node - ${startNode.externalId}-${endNode.externalId}.

import { NodeRef } from './generated';
// deleting nodes
client.deleteNodes('Movie', ['bp']);

// deleting relationships
client.deleteEdges('Movie', 'actors', [
  {
    startNode: { externalId: 'o11' },
    endNode: { externalId: 'bp' },
  },
]);

Use with Apollo

Apollo is a popular react GraphQL client, you can use a function from the generated code to generate a query string and variables object to be passed to useQuery.

import { useQuery, ApolloProvider } from '@apollo/react-hooks';
import { generateQueryOp } from './generated';

const { query, variables } = generateQueryOp({
  countries: {
    __args: {
      filter: 'US',
    },
    name: 1,
    code: 1,
  },
});
const { data, error } = useQuery(gql(query), {
  variables,
});

Data models list

This command lists all the data models in a table like UI in your shell. However, for CI/CD this can be bothersome. Hence, the --simple provides an easy way to list all the data models in a simple list format.

--columns also allows for choosing specific columns to display. By default, all columns (data model external ID, name, space, version) are visible. For example cdf dm list --columns=name --columns=id will list the data models with columns name and id in that respective order.

Data models publish

This command publishs a new version of a data model definition by specifying the data model external ID, space and version. However, to skip specifying a version, --auto-increment can be used to publish a new version with a {current-version}+1 and <Anything>-{current-version}+1 logic, note that we use - as the delimiter to identify version. For example:

  • version 3 becomes 4
  • version beta-2 becomes beta-3
  • version alpha becomes alpha-1
  • version some.random.1 becomes some.random.1-1.

Data models generate

This command generates the client side code for the specified project.

Currently following plugins are supported only:

--operations-file option will specify which graphql operations to generate hooks, functions for, like certain mutation or query

Example:

cdf data-models generate --operations-file operations.graphql --plugins typescript typescript-operations

Metrics, Logs and Telemetry

Update Notifier

We check in background if a newer version of the package is published in npm and notify the user about the same if a newer version is available.

To opt-out set optOut to true in ~/.config/configstore/update-notifier-@cognite/cdf-cli.json or set env NO_UPDATE_NOTIFIER

Contributing to CDF CLI