2.0.0 • Published 28 days ago

@making-sense/antlr-editor v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
28 days ago

ANTLR Editor

ANTLR Editor CI NPM version Storybook

ANTLR Typescript editor.

Usage

Install

yarn add @making-sense/antlr-editor antlr4ts monaco-editor @monaco-editor/react

Create React app

As far as antlr4ts require some node modules which are no longer provided by Webpack@5, you have to complete the webpack configuration thanks to react-app-rewired (or eject your CRA application, what we will not recommend here), following these steps:

  • Install react-app-rewired, assert, path and util as devDependency
yarn add -D react-app-rewired assert path util
  • Override the create-react-app webpack config file

At the root of your project, create the config-overrides.js file and add the following code to it:

/*
We use this file to in order to be able to use webpack plugin without ejecting from CRA.
This file is picked up by react-app-rewired that we use in place of react-scripts
*/

module.exports = function override(config) {
    if (!config.resolve.fallback) {
        config.resolve.fallback = {};
    }

    config.resolve.fallback["assert"] = require.resolve("assert");
    config.resolve.fallback["path"] = require.resolve("path");
    config.resolve.fallback["util"] = require.resolve("util");

    if (!config.plugins) {
        config.plugins = [];
    }
    return config;
};
  • Switch the existing calls to react-scripts in your project scripts for start, build and test
  /* package.json */

  "scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
-   "test": "react-scripts test",
+   "test": "react-app-rewired test",
    "eject": "react-scripts eject"
}

VTLEditor

yarn add @making-sense/vtl-2-0-antlr-tools-ts
import { AntlrEditor as VTLEditor } from "@making-sense/antlr-editor";
import { getSuggestionsFromRange, monarchDefinition } from "./vtl-monaco";
import * as VTLTools from "@making-sense/vtl-2-0-antlr-tools-ts";

const customTools = { ...VTLTools, getSuggestionsFromRange, monarchDefinition };

const Editor = () => {
    return <VTLEditor tools={customTools} />;
};

export default Editor;

Developement mode

Storybook

yarn storybook

Linked app

git clone https://github.com/Making-Sense-Info/ANTLR-Editor
cd ANTLR-Editor
yarn

# Start the test app in watch mode
yarn start-test-app

# Link in an external project in watch mode
yarn link-in-app test-app # ../YOUR-APP is supposed to exist

AntlrEditor Props

NameTypeDefault value
scriptstring-
setScriptFunction-
customFetcherFunction *-
toolsTools *-
variablesVariables *{ }
variablesInputURLsVariableURLs *
onListErrorsFunctionundefined
heightstring"50vh"
widthstring"100%"
themestring"vs-dark"
optionsIStandaloneEditorConstructionOptions{}

See details about * props below

Props

tools

tools has to be mainly antlr4 auto-generated Lexer & Parser.

NameTypeDefault value
idstring-
initialRulestring-
grammarstring-
LexerAntlr4 Lexer-
ParserAntlr4 Parser-

Have a look to VTL 2.0 Antlr Tools for example.

For autosuggestion, provide getSuggestionsFromRange (example here).

For highlighting, provide monarchDefinition (example here)

customFetcher

customFetcher enable to provide a custom fetch, adding Authorization header for instance:

u => fetch(u, headers:{ Authorization: 'Bearer XXX'})

This function will be used to fetch variableURLs & sdmxResultURL props.

variables

variables enable to pass an object to provide auto-suggestion.

The shape of this object is:

const obj = {
    "var1": {"type": "STRING", "role": "IDENTIFIER"},
    "var2": {"type": "INTEGER", "role": "MEASURE"},
}

variableURLs

variableURLs enable to pass an array of string to fetch to provide auto-suggestion:

["http://metadata/1", "http://metadata/2"]

The shape of each fetched resources has to be:

[
    { "name": "var1", "type": "STRING", "role": "IDENTIFIER" },
    { "name": "var2", "type": "INTEGER", "role": "MEASURE" }
]
2.0.0

28 days ago

1.0.1

30 days ago

1.0.0

1 month ago

0.3.2

2 months ago

0.3.0

4 months ago

0.3.1

4 months ago

0.2.1

4 months ago

0.2.0

7 months ago

0.1.0

7 months ago