Novel Preposterous Mockery

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

    1.3.2 • Public • Published

    Build Status npm version GitHub last commit


    🔌 Concordia Compiler plug-in interface

    How to create a plug-in

    👉 The following procedure requires Concordia Compiler 2.0.0-alpha-19 or later

    1. Choose wisely your plug-in name, making sure that it starts with concordialang-. We recommend that it contains the target frameworks - e.g. concordialang-foo-bar if you will use the (hypothetical) frameworks "foo" and "bar".
    2. Create a new repository and clone it.
    3. Create a new file package.json (e.g., npm init).
    4. Install the packages concordialang-types and concordialang-plugin as dependencies (e.g., npm i concordialang-types concordialang-plugin).
    5. Add the property "concordiaPlugin": true to your package.json.
    6. Create a file (e.g., src/index.ts) with a class that implements the interface Plugin (see API).
    7. Make sure that the created class has a default export (i.e, export default class).
    8. Set the property "main" from your package.json to the JS file that contains the created class (e.g., "dist/index.js").
    9. Check your plug-in execution (see some tips below).
    10. Publish your package if you desire to install it by name.

    Note: You can use JavaScript instead of TypeScript.

    How to check your plug-in execution

    1. Create a new project with the file package.json (e.g., npm init --yes).
    2. Create a simple Concordia feature file (e.g., features/example.feature).
    3. Install Concordia Compiler (npm i -D concordialang) and run the init command (npx concordia --init).
    4. Install your plug-in from its directory (e.g., npm i -D /path/to/your-plugin)
    5. Run Concordia with your plug-in (e.g., npx concordia -p your-plugin) and see with it is executed correctly.

    How to publish your plug-in

    1. Make sure you have an NPM account.
    2. Enter your project folder and run npm login.
    3. Create a property "files" into your package.json that indicates the (source code) files to distribute.
    4. Make sure the property "version" of your package file was set correctly.
    5. Run npm publish --dry-run to simulate the publishing.
    6. Make sure its all correct and then run npm publish.


    See fake-plugin for a simple example.


    export interface Plugin {
        // Test Generation and Execution
         * Multi-platform command to start a testing server, if needed.
         * 👉 Set its value only if the testing framework does need a testing server.
         * @example
         *      "selenium-standalone start"
        serveCommand?: string;
         * Generates source code from abstract test scripts, according to the given options.
         * @param abstractTestScripts Abstract test scripts
         * @param options Options
         * @return Generation results.
        generateCode?: (
            abstractTestScripts: AbstractTestScript[],
            options: TestScriptGenerationOptions
        ) => Promise< TestScriptGenerationResult >;
         * Executes test scripts, according to the given options.
         * @param options Execution options.
         * @return Execution results.
        executeCode?: ( options: TestScriptExecutionOptions ) => Promise< TestScriptExecutionResult >;
         * Converts a file produced by the execution of test scripts (e.g. a JSON or a XML file).
         * @param filePath Input file.
         * @return Execution results.
        convertReportFile?: ( filePath: string ) => Promise< TestScriptExecutionResult >;
        // Events
         * Event that happens before the compiler reports the test script results.
         * @param result Test script execution result.
         * @param options Test script execution options.
    	beforeReporting?: ( result?: TestScriptExecutionResult, options?: TestScriptExecutionOptions ) => Promise< void >;
         * Event that happens after the compiler reports the test script results.
         * @param result Test script execution result.
         * @param options Test script execution options.
        afterReporting?: ( result?: TestScriptExecutionResult, options?: TestScriptExecutionOptions ) => Promise< void >;

    Please see the src folder for more information about the used types.


    AGPL © Thiago Delgado Pinto

    GNU Affero General Public License version 3


    npm i concordialang-plugin

    DownloadsWeekly Downloads






    Unpacked Size

    31 kB

    Total Files


    Last publish


    • thiagodp