You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP
Socket
Sign inDemoInstall
Socket

@openfga/syntax-transformer

Package Overview
Dependencies
Maintainers
0
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openfga/syntax-transformer

Javascript implementation of ANTLR Grammar for the OpenFGA DSL and parser from and to the OpenFGA JSON Syntax

0.2.0-beta.22
latest
Source
npm
Version published
Weekly downloads
8.2K
10.98%
Maintainers
0
Weekly downloads
 
Created
Source

OpenFGA Language - JS

Javascript implementation of ANTLR Grammar for the OpenFGA DSL and parser from and to the OpenFGA JSON Syntax

@openfga/syntax-transformer

Installation

npm install @openfga/syntax-transformer

Usage

Transformer

Example transform DSL model to JSON, and from JSON to DSL.

import { transformer } from "@openfga/syntax-transformer";

let dslString = `model
  schema 1.1
type user
type folder
  relations
    define viewer: [user]`;

// Transform from DSL model to a JSON object
const generatedJsonObject = transformer.transformDSLToJSONObject(dslString);

// Transform from DSL to a JSON string
const generatedJsonString = transformer.transformDSLToJSONString(dslString);

// Transform from a JSON string to DSL
const generatedDsl = transformer.transformJSONStringToDSL(generatedJsonString);

Transform Mod File to JSON

import { transformer } from "@openfga/syntax-transformer";

...

const modFileContents = `schema: "1.2"
contents:
  - core.fga
  - board.fga
  - wiki.fga`

// Transform from fga.mod to an object
const jsonModFile = transformer.TransformModFile(modFileContents)

Transform set of Modules To Model

import { transformer } from "@openfga/syntax-transformer";

...

const files: transformer.ModuleFile[] = [];
files.push({
    name: "core.fga",
    contents: `module core
    type user`
  },
  {
    name: "board.fga",
    contents: `module core
    type board`
  },
  {
    name: "wiki.fga",
		contents: `module core
    type wiki`
  }
);

// Compile module files into a complete model
const jsonModel = transformer.transformModuleFilesToModel(files, "1.2");

/*
{
  "schema_version": "1.2",
  "type_definitions": [
    {
      "type": "user",
      "metadata": {
        "module": "core",
        "source_info": {
          "file": "core.fga"
        }
      }
    },
    {
      "type": "board",
      "metadata": {
        "module": "core",
        "source_info": {
          "file": "board.fga"
        }
      }
    },
    {
      "type": "wiki",
      "metadata": {
        "module": "core",
        "source_info": {
          "file": "wiki.fga"
        }
      }
    }
  ]
}
*/

Validation

import { errors, validator } from "@openfga/syntax-transformer";

...

let dslString = `model
  schema 1.2
type user
type folder
  relations
    define viewer: [user]`;

// Attempt validation of model
try {
  validator.validateDSL(dslString);
} catch (err) {
  if (err instanceof errors.BaseMultiError) {
    // Handle generated errors
  } else {
    console.error("Unhandled Exception: " + err);
  }
}

License

This project is licensed under the Apache-2.0 license. See the LICENSE file for more info.

Keywords

openfga

FAQs

Package last updated on 30 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts