3.2.2 • Published 2 years ago

@raydiant/playlist-rule-engine v3.2.2

Weekly downloads
62
License
ISC
Repository
github
Last release
2 years ago

playlist-rule-engine

Rule engine for playlist playback.

Codeship Status for mirainc/playlist-rule-engine

Development

yarn install
yarn build

Testing

yarn test

Deployment

yarn deploy

Usage

Install:

npm install playlist-rule-engine

Usage:

import { RuleEngine, State } from 'playlist-rule-engine';
// See below for documentation on these data objects.
const playlists = {...};
const presentations = {...};
const dynamicState = {...};

const state = new State(playlists, presentations, dynamicState);
const ruleEngine = new RuleEngine('<playlistId>', state);

// Get the next item to play.
ruleEngine.next();

// Preview the next item in the queue.
ruleEngine.previewNext();

// See the results of rule evaluation.
ruleEngine.simulateNormalPlayback();

// Example usage
while(true) {
    const now = ruleEngine.next();
    const buffer = ruleEngine.previewNext();

    // The results of calling .next and .previewNext()
    // can then be consumed by application logic.
    // Examples assume custom play() and preload()
    // functions defined elsewhere.
    play(now);
    preload(buffer);

    await sleep(10000);
}
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

Data Structures

Playlists

{
    <playlistId>: {
        mode: 'sequential|shuffle|single|hold',
        items: [
            { 'presentationId': '<presentationId>' },
            { 'playlistId': '<nestedPlaylistId' },
        ],
        rule: <Rule> (optional),
        tags: {...} (optional),
    },
    ...
}

Presentations

{
    <presentationId>: {
        name: string,
        tags: {...} (optional),
    },
    ...
}

Dynamic State

An arbitrary flat object with keys/values. No nested objects.

{
    key: 'value',
    foo: 'bar',
    ...
}

Rules

Key-value match against either the tags on item in the playlist, or tags on the playlist itself.

tag_match

{
    type: 'tag_match',
    value: {
        applies_to: 'item|playlist',
        match: {
            <tagKey>: <tagValue>,
        }
    },
}

state_match

Key-value match against the dynamicState object passed into the RuleEngine instance.

{
    type: 'state_match',
    value: {
        <stateKey>: <stateValue>,
    },
}

and

Evaluates all rules in values and returns true if all rules evaluate to true.

{
    type: 'and',
    values: [
        <Rule>,
        <Rule>,
        ...
    ],
}

or

Evaluates all rules in values and returns true if one or more rules evaluate to true.

{
    type: 'or',
    values: [
        <Rule>,
        <Rule>,
        ...
    ],
}

Simulated Playback

RuleEngine.simulateNormalPlayback() is used to simulate and inspect rule evaluation results for a RuleEngine instance. It will return an object with the following properties:

{
    // The rule used by the playlist assigned to the rule engine.
    rule: <Rule>,
    result: {
        // Presentation items:
        {
            tags: {...},
            presentationId: string,
            willPlay: true|false
        },
        // Playlist items:
        {
            tags: {...},
            playlistId: string,
            willPlay: true|false,
            // Will include the SimulatedPlayback object for the
            // nested playlist if willPlay evaluates to true.
            playlist: <SimulatedPlayback>,
        },
        ...
    }
}
3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.1.15

2 years ago

3.1.12

2 years ago

3.1.11

2 years ago

3.1.14

2 years ago

3.1.13

2 years ago

3.1.10

2 years ago

3.1.9

2 years ago

3.1.8

2 years ago

3.1.3

2 years ago

3.1.2

2 years ago

3.1.7

2 years ago

3.1.6

2 years ago

3.1.5

2 years ago

3.1.4

2 years ago

3.1.1

3 years ago

3.1.0

3 years ago

3.0.0

3 years ago

2.2.10

3 years ago

2.2.9

3 years ago

2.2.8

3 years ago

2.2.7

3 years ago

2.2.6

3 years ago

2.2.5

3 years ago

2.2.4

3 years ago

2.2.1

3 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.2.0

3 years ago

2.1.5

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.2

3 years ago

2.1.1

4 years ago

2.0.0

4 years ago

1.0.3

4 years ago