Neo's Personal Matrix

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

    8.0.3 • Public • Published

    postdfm

    Process over Delphi Forms (.dfm) files via an AST.

    Inspired by the excellent PostCSS tool, motivated by my rage at the Delphi IDE. [npm](https://www.npm js.com/package/postdfm) Continuous Integration > Continuous Deployment > Codecov branch

    Table of Contents

    Installation

    The postdfm project is an interface wrapping all the separate modules together.

    # npm
    $ npm install postdfm
    
    # yarn
    $ yarn add postdfm

    Example Usage

    import fs from "fs";
    import postdfm from "postdfm";
    
    // only if implementing your own plugin
    import { Plugin } from "@postdfm/plugin";
    
    class SomePlugin extends Plugin {
      install(hooks) {
        hooks.string.tap(ast => {
          // manipulate AST here
        }
    
        // all AST types can be manipulated, see AST.ASTTypes
    
        // also available:
        // - "after" hook for certain types
        hooks.after.object.tap(ast => {
          // manipulate AST here
        })
        // - "all" hook for everything - excludes "after" hooks
        hooks.all.tap(ast => {
          // manipulate AST here
        })
      }
    }
    
    const cisDfm = fs.readFileSync(
      "cis.dfm",
      //.dfm files tend to be ascii instead of utf8
      "ascii"
    );
    
    const runner = postdfm({
      transformers: [new SomePlugin()],
    });
    
    const transDfm = runner.processSync(dfm, {
      //filename used for reporting errors
      from: "cis.dfm",
    });
    
    fs.writeFileSync("trans.dfm", transDfm);

    Reference

    Runner instance

    Create a runner by calling the postdfm function.

    import postdfm from "postdfm";
    
    const runner = postdfm();

    postdfm(options?: RunnerOptions)

    Create a Runner instance using RunnerOptions

    runner.process(dfm: string, processingOptions: ProcessingOptions): Promise<string>

    Process a file through the runner asynchronously.

    runner.processSync(dfm: string, processingOptions: ProcessingOptions): string

    Process a file through the runner synchronously.

    RunnerOptions

    Options to pass to an instance of Runner.

    options.plugins: Plugin[]

    Array of transformations to perform on AST.

    options.parser: Parser = "@postdfm/dfm2ast"

    Parser to use, defaults to @postdfm/dfm2ast.

    options.stringifier: Stringifier = "@postdfm/ast2dfm"

    Stringifier to use, defaults to @postdfm/ast2dfm.

    Plugin

    A class that extends the @postdfm/plugin Plugin, extending the install() method.

    See @postdfm/plugin for more information.

    Parser

    A function that takes a string, parses it, and returns an AST.

    (dfm: string): AST.Root

    Stringifier

    A function that takes an AST, stringifies it, and returns a string.

    (ast: AST.Root): string

    ProcessingOptions

    processingOptions.from

    The file which is being processed. Used when throwing syntax errors.

    Documentation

    You can find the generated typedoc documentation here.

    Contributing

    Bug reports and feature requests are greatly appreciated, as are pull requests.

    Please see the Contributing Guide for instructions on how to contribute to this project.

    License

    Licensed under the MIT License.

    Install

    npm i postdfm

    DownloadsWeekly Downloads

    4

    Version

    8.0.3

    License

    MIT

    Unpacked Size

    10.5 kB

    Total Files

    4

    Last publish

    Collaborators

    • spiltcoffee