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

0.5.0-next.1 • Public • Published

Enonic Wizardry

npm version

Functional utility library for Enonic XP. This library is intended to house reusable and tested code blocks based on enonic-fp that can be used in every project.

Enonic-fp

Enonic-wizardry is intended to supplement enonic-fp with common patterns.

Code generation

We recommend using this library together with the xp-codegen-plugin Gradle plugin. xp-codegen-plugin will create TypeScript interfaces for your content-types. Those interfaces will be very useful together with this library.

Building the project

npm run build

Usage

Get content by key service

In this example we have a service that returns an article by the key as json. Or if something goes wrong, we return an Internal Server Error instead.

import {fold} from "fp-ts/lib/IOEither";
import {pipe} from "fp-ts/lib/pipeable";
import {Request, Response} from "enonic-types/controller";
import {errorResponse, ok} from "enonic-fp/controller";
import {Article} from "../../site/content-types/article/article"; // 1
import {getContentByIds} from "enonic-wizardry/content";
import {forceArray} from "enonic-fp/array";

export function get(req: Request): Response { // 2
  const keys: Array<string> = forceArray(req.params.key); // ["key1", "key2", "key3"]

  const program = pipe( // 3
    getContentByIds<Article>(keys), // 4
    fold( // 5
      errorResponse(req), // 7
      ok // 8
    )
  );

  return program(); // 9
}
  1. We import an interface Article { ... } generated by xp-codegen-plugin.
  2. We use the imported Request and Response to control the shape of our controller.
  3. We use the pipe function from fp-ts to pipe the result of one function into the next one.
  4. We can use the getContentByIds function from content that query for the Content<Article> where the id is one of the strings in the keys-Array. The return type here is IOEither<EnonicError, ReadonlyArray<Content<Article>>>
  5. The last thing we usually do in pipe is to unpack the IOEither. This is done with fold(handleError, handleSuccess).
  6. The errorResponse(req: Request) function returns a new function that can be used as a callback by fold. This "new function", takes the EnonicError object as a parameter, and creates a Json Response with the correct status number, based on the errorKey of the EnonicError.
  7. We pass the ok function to fold as the second parameter. The ok creates a Response where the status is 200, and the parameter is the body. In this case the ReadonlyArray<Content<Article>> is assigned to thebody.
  8. We have so far constructed a constant program of type IO<Response>, but we have not yet performed a single side effect. It's time to perform those side effects, so we run the IO by calling it, and a Response is returned which out controller function can return.

API

  • Content

    • getContentByIds
    • createAll
    • createAndPublish
    • deleteAndPublish
    • modifyAndPublish
    • applyChangesToData
    • createMediaFromAttachment
  • Context

    • runAsSuperUser
    • runInDraftContext
  • Menu

    • getSubMenuByKey
  • Validation

    • validate

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.5.0-next.11latest

Version History

VersionDownloads (Last 7 Days)Published
0.5.0-next.11
0.5.0-next.04
0.3.150
0.3.140
0.3.130
0.3.120
0.3.110
0.3.100
0.3.90
0.3.80
0.3.70
0.3.60
0.3.50
0.3.40
0.3.30
0.3.20
0.3.10
0.3.00
0.3.0-beta10
0.2.430
0.2.420
0.2.410
0.2.400
0.2.390
0.2.380
0.2.370
0.2.360
0.2.350
0.2.340
0.2.330
0.2.320
0.2.310
0.2.300
0.2.290
0.2.280
0.2.270
0.2.250
0.2.240
0.2.230
0.2.220
0.2.210
0.2.200
0.2.190
0.2.180
0.2.170
0.2.160
0.2.150
0.2.140
0.2.130
0.2.120
0.2.110
0.2.100
0.2.90
0.2.80
0.2.70
0.2.60
0.2.50
0.2.40
0.2.30
0.2.20
0.2.10
0.2.00
0.1.150
0.1.140
0.1.130
0.1.120
0.1.110
0.1.100
0.1.90
0.1.80
0.1.70
0.1.60
0.1.50
0.1.40
0.1.30
0.1.20
0.1.10
0.1.00
0.0.80
0.0.70
0.0.60
0.0.50
0.0.40
0.0.30
0.0.20

Package Sidebar

Install

npm i enonic-wizardry

Weekly Downloads

5

Version

0.5.0-next.1

License

MIT

Unpacked Size

24.1 kB

Total Files

13

Last publish

Collaborators

  • tajakobsen
  • tommyjl