Files
noodl-docs/javascript/extending/build-script/overview.md
kotte c4c2e18023 Feat/os fixes (#66)
* Feat: Add notices of creating empty git repos

* Feat: remove references to workspaces and cloud and add notices of old videos

* Feat: Remove workspace reference
2024-01-25 10:31:57 +01: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

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;