Files
noodl-docs/javascript/extending/build-script/overview.md
Eric Tuvesson 53f0d6320e Initial commit
Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com>
Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com>
Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com>
Co-Authored-By: Michael Cartner <32543275+michaelcartner@users.noreply.github.com>
2023-09-05 12:08:55 +02:00

2.7 KiB

title, hide_title
title hide_title
Create a build script true
<head> </head>

Build scripts

Noodl has a way where you can hook into the different build events that are triggered from the editor.

:::danger

This is an experimental feature, that might be changed in the future.

:::

Where to use it?

Create a build script

To add a build script it has to be placed inside a folder in the project. As long as the file ends with .build.js it will be picked up by Noodl.

The execution order of the build scripts are based on alphabetical order.

my-noodl-project/
    .noodl/
        build-scripts/
            [HERE]

Example

Here is an example of what kind of events you can listen to:

module.exports = {
  async onPreBuild(context) {
    // Occurs before the build.
  },
  async onPostBuild(context) {
    // Occurs after the build.
  },
  async onPreDeploy(context) {
    // Occurs before the build is deployed.
  },
  async onPostDeploy(context) {
    // Occurs after the build is deployed.
  },
};

What is Context?

Context is a little different in each method, but generally have the same methods.

:::note

More documentation to come later!

:::

General

workspaceId: string;

project: ProjectModel;

environment: {
  name: string;
  description: string;
  masterKey: string;
  appId: string;
} | undefined;

/**
 *
 * @param options
 * @param callback
 */
activity(options: { message: string; successMessage?: string; }, callback: () => Promise<void>): Promise<void>;

/**
 *
 * @param type
 * @param message
 */
notify(type: 'notice' | 'success' | 'error', message: string): void;

/**
 * Returns a list of all the pages with absolute paths.
 *
 * @returns [
 *    {
 *      title: "page title",
 *      path: "/path-1/path-2",
 *      meta: {}
 *    },
 *    // ...
 *  ]
 */
getPages(options: {
  expandPaths?: (route: RouteNode) => Promise<string[]>;
}): Promise<readonly PageObject[]>;

/**
 * Create a index.html page similar to the one created for the web app.
 *
 * @returns a string containg the HTML code.
 */
createIndexPage(options: {
  /**
   * Override the title from project settings.
   *
   * Default: undefined
   */
  title?: string;

  /**
   * Append the headcode from the project settings.
   *
   * Default: undefined
   */
  headCode?: string;
}): Promise<string>;

/**
 * Returns a traversal graph of the nodes.
 *
 * @param selector
 * @returns
 */
graphTraverse(
  selector: (node: NodeGraphModel.Node) => boolean,
  options: NodeGraphTraverserOptions
): NodeGraphTraverser;