lambdaorm-cli
TypeScript icon, indicating that this package has built-in type declarations

1.2.2 • Public • Published

λORM CLI

λORM CLI is a command line application to use λORM

Installation

Install the package globally to use the CLI commands to help you create and maintain projects

npm install lambdaorm-cli -g

CLI

Command Description
version Prints lambdaorm version this project uses.
init Generates lambdaorm project structure.
sync Synchronize database.
execute Execute an expression lambda.
metadata Return metadata of query expression.
parameters Return parameters of query expression.
model Return model of query expression.
plan Return plan execution of query expression.
schema Return schema information.
import Import data from file to database.
export Export data from a database.
build add configuration, model and repositories according to the language.
drop Removes all database objects but not the database.

Usage

version

Prints lambdaorm version this project uses.

lambdaorm version

Result:

Global lambdaorm cli version: 0.9.21
Local lambdaorm version: 0.8.96

init

will create the project folder with the basic structure.

lambdaorm init -w lab

It will generate:

├── data
└── lambdaORM.yaml

init client node

will create the project folder with the basic structure.

lambdaorm init -w client-lab -u http://localhost:9291

It will generate:

├── data
└── lambdaORM.yaml

sync

Synchronize Stage configured in lambdaORM schema with database/s.

lambdaorm sync

In the case the default stage is associated with several data sources, it generates a file for each data source and a file with the current model.

data
├── default-ddl-20231201T191054280Z-sync-Catalog.sql
├── default-ddl-20231201T191054280Z-sync-Crm.sql
├── default-ddl-20231201T191054281Z-sync-Ordering.json
├── default-model.json

execute

Execute an expression lambda.

lambdaorm execute -e .env -q "Orders.filter(p => p.customerId == customerId).include(p => [p.customer.map(p => p.name), p.details.include(p => p.product.include(p => p.category.map(p => p.name)).map(p => p.name)).map(p => [p.quantity, p.unitPrice])]).page(1,1)" -d "{\"customerId\": \"HANAR\"}"

Result:

[
  {
    "id": 3,
    "customerId": "HANAR",
    "employeeId": 4,
    "orderDate": "1996-07-08T00:00:00.000+02:00",
    "requiredDate": "1996-08-05",
    "shippedDate": "1996-07-12",
    "shipViaId": 2,
    "freight": 65.83,
    "name": "Hanari Carnes",
    "address": "Rua do Pao, 67",
    "city": "Rio de Janeiro",
    "region": "RJ",
    "postalCode": "05454-876",
    "country": "Brazil",
    "details": [
      {
        "quantity": 10,
        "unitPrice": 7.7,
        "product": {
          "name": "Jack's New England Clam Chowder",
          "category": {
            "name": "Seafood"
          }
        }
      },
      {
        "quantity": 35,
        "unitPrice": 42.4,
        "product": {
          "name": "Manjimup Dried Apples",
          "category": {
            "name": "Produce"
          }
        }
      },
      {
        "quantity": 15,
        "unitPrice": 16.8,
        "product": {
          "name": "Louisiana Fiery Hot Pepper Sauce",
          "category": {
            "name": "Condiments"
          }
        }
      }
    ],
    "customer": {
      "name": "Hanari Carnes"
    }
  }
]

In this example:

  • The .env file is used to obtain the environment variables.
  • The lambda expression is used to obtain an order from the "HANAR" client.

Plan

Return plan execution of query expression.

lambdaorm plan -e .env -s default -q "Orders.filter(p => p.customerId == customerId).include(p => p.customer.map(p => p.name)).order(p=> p.id).page(1,1)" -o beautiful

Result:

{
  "entity": "Orders",
  "dialect": "MongoDB",
  "source": "Ordering",
  "sentence": "[{ \"$match\" : { \"CustomerID\":{{customerId}} } }, { \"$project\" :{ \"_id\": 0 , \"id\":\"$_id\", \"customerId\":\"$CustomerID\", \"orderDate\":\"$OrderDate\", \"__customerId\":\"$CustomerID\" }} , { \"$sort\" :{ \"_id\":1 } } , { \"$skip\" : 0 }, { \"$limit\" : 1 } , { \"$project\": { \"_id\": 0 } }]",
  "children": [
    {
      "entity": "Customers",
      "dialect": "PostgreSQL",
      "source": "Crm",
      "sentence": "SELECT c.CompanyName AS \"name\", c.CustomerID AS \"LambdaOrmParentId\" FROM Customers c  WHERE  c.CustomerID IN ($1) "
    }
  ]
}

In this example:

  • The .env file is used to obtain the environment variables.
  • The Plan obtained is about the stage default.
  • The lambda expression is used to obtain an order from the "HANAR" client.
  • The plan is obtained in a beautiful format.

import

Import data from file to datasources asociados a un stage.

```sh
lambdaorm import -e .env -s default -d ./data.json

In this example:

  • The datasources associated with the default stage are known.
  • The .env file is used to obtain environment variables.
  • Data is obtained from data.json file

export

Export data from a datasource associated to a stage.

lambdaorm export  -s stage1 -e .env 

In this example:

  • Data is exported from the datasources associated with stage1.
  • The .env file is used to obtain the environment variables.
  • A file called "stage1-export.json" will be created with all the data associated with the stage1 datasources.

Build

Running the build command will create or update the following:

  • Folder that will contain the source code and is taken from the "infrastructure.paths.scr" configuration in the lambdaorm.yaml file
  • Folder that will contain the domain files, the path is relative to the src folder and is taken from the "infrastructure.paths.domain" configuration in the lambdaorm.yaml file
  • Model file: file with the definition of the entities
  • Repository files: one file for each entity with data access methods
  • Install the necessary dependencies according to the databases used

Build Node example

Add configuration, model and repositories according to the language.

lambdaorm build -l node

Result:

├── data
├── lambdaORM.yaml
├── package.json
├── src
│   └── countries
│       └── domain
│           ├── model.ts
│           ├── repositoryCountry.ts
│           └── repositoryState.ts
└── tsconfig.json

Build Client Node example

lambdaorm build -l client-node --all -u http://localhost:9291

Result:

├── data
├── lambdaORM.yaml
├── package.json
├── src
│   ├── index.ts
│   └── northwind
│       └── domain
│           ├── model.ts
│           ├── repositoryCategory.ts
│           ├── repositoryCustomer.ts
│           ├── repositoryOrdersDetail.ts
│           ├── repositoryOrder.ts
│           └── repositoryProduct.ts
└── tsconfig.json

Drop

Removes all database objects but not the database.

lambdaorm drop -e .env -s default
lambdaorm drop -e .env -s insights

Result:

data
├── default-ddl-20231129T110712162Z-sync-Catalog.sql
├── default-ddl-20231129T110712163Z-sync-Crm.sql
├── default-ddl-20231129T110712163Z-sync-Ordering.json
├── default-ddl-20231129T111730593Z-clean-Catalog.sql
├── default-ddl-20231129T111730594Z-clean-Crm.sql
├── default-ddl-20231129T111730594Z-clean-Ordering.json
├── insights-ddl-20231129T110303423Z-sync-Insights.sql
└── insights-ddl-20231129T111738316Z-clean-Insights.sql

In this example:

  • The .env file is used to obtain the environment variables.
  • The first execution drops all the database objects associated with the default datasources.
  • The second execution drops all the database objects associated with the insights data sources.
  • The clean files associated with each datasource of each stage are generated.
  • The model file associated with each stage is removed.

Documentation

Full documentation is available in the Wiki.

Related projects

Labs

You can access various labs at github.com/lambda-orm/lambdaorm-labs

Package Sidebar

Install

npm i lambdaorm-cli

Weekly Downloads

169

Version

1.2.2

License

MIT

Unpacked Size

266 kB

Total Files

184

Last publish

Collaborators

  • flaviolrita