@deadair/plugin-sdk 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1062 -0
- package/dist/article.parse.d.ts +82 -0
- package/dist/article.parse.d.ts.map +1 -0
- package/dist/boundary.json.safe.d.ts +191 -0
- package/dist/boundary.json.safe.d.ts.map +1 -0
- package/dist/capabilities/analysis.d.ts +330 -0
- package/dist/capabilities/analysis.d.ts.map +1 -0
- package/dist/capabilities/charts.d.ts +134 -0
- package/dist/capabilities/charts.d.ts.map +1 -0
- package/dist/capabilities/enrichment.d.ts +255 -0
- package/dist/capabilities/enrichment.d.ts.map +1 -0
- package/dist/capabilities/llm.d.ts +318 -0
- package/dist/capabilities/llm.d.ts.map +1 -0
- package/dist/capabilities/mixer.d.ts +183 -0
- package/dist/capabilities/mixer.d.ts.map +1 -0
- package/dist/capabilities/music.provider.d.ts +245 -0
- package/dist/capabilities/music.provider.d.ts.map +1 -0
- package/dist/capabilities/news.d.ts +171 -0
- package/dist/capabilities/news.d.ts.map +1 -0
- package/dist/capabilities/scrobble.d.ts +133 -0
- package/dist/capabilities/scrobble.d.ts.map +1 -0
- package/dist/capabilities/search.d.ts +122 -0
- package/dist/capabilities/search.d.ts.map +1 -0
- package/dist/capabilities/similarity.d.ts +101 -0
- package/dist/capabilities/similarity.d.ts.map +1 -0
- package/dist/capabilities/speech.d.ts +211 -0
- package/dist/capabilities/speech.d.ts.map +1 -0
- package/dist/capabilities/weather.d.ts +192 -0
- package/dist/capabilities/weather.d.ts.map +1 -0
- package/dist/chunk-7QVYU63E.js +7 -0
- package/dist/chunk-7QVYU63E.js.map +1 -0
- package/dist/define.plugin.d.ts +56 -0
- package/dist/define.plugin.d.ts.map +1 -0
- package/dist/feed.parse.d.ts +97 -0
- package/dist/feed.parse.d.ts.map +1 -0
- package/dist/html.text.d.ts +71 -0
- package/dist/html.text.d.ts.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1153 -0
- package/dist/index.js.map +1 -0
- package/dist/match.text.d.ts +28 -0
- package/dist/match.text.d.ts.map +1 -0
- package/dist/plugin.api.version.d.ts +9 -0
- package/dist/plugin.api.version.d.ts.map +1 -0
- package/dist/plugin.base.d.ts +80 -0
- package/dist/plugin.base.d.ts.map +1 -0
- package/dist/plugin.config.fields.d.ts +524 -0
- package/dist/plugin.config.fields.d.ts.map +1 -0
- package/dist/plugin.config.read.d.ts +52 -0
- package/dist/plugin.config.read.d.ts.map +1 -0
- package/dist/plugin.error.d.ts +177 -0
- package/dist/plugin.error.d.ts.map +1 -0
- package/dist/plugin.host.d.ts +220 -0
- package/dist/plugin.host.d.ts.map +1 -0
- package/dist/plugin.host.response.d.ts +42 -0
- package/dist/plugin.host.response.d.ts.map +1 -0
- package/dist/plugin.http.d.ts +80 -0
- package/dist/plugin.http.d.ts.map +1 -0
- package/dist/plugin.lifecycle.d.ts +68 -0
- package/dist/plugin.lifecycle.d.ts.map +1 -0
- package/dist/plugin.manifest.d.ts +282 -0
- package/dist/plugin.manifest.d.ts.map +1 -0
- package/dist/plugin.permissions.d.ts +186 -0
- package/dist/plugin.permissions.d.ts.map +1 -0
- package/dist/testing/fake.plugin.host.d.ts +85 -0
- package/dist/testing/fake.plugin.host.d.ts.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +141 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ChartsProvider } from './capabilities/charts.js';
|
|
2
|
+
import type { EnrichmentProvider } from './capabilities/enrichment.js';
|
|
3
|
+
import type { MusicProviderCatalog, MusicProviderOAuth, MusicProviderSteer, MusicProviderStream } from './capabilities/music.provider.js';
|
|
4
|
+
import type { NewsProvider } from './capabilities/news.js';
|
|
5
|
+
import type { ScrobbleProvider } from './capabilities/scrobble.js';
|
|
6
|
+
import type { SearchProvider } from './capabilities/search.js';
|
|
7
|
+
import type { SimilarityProvider } from './capabilities/similarity.js';
|
|
8
|
+
import type { WeatherProvider } from './capabilities/weather.js';
|
|
9
|
+
import type { PluginManifest } from './plugin.manifest.js';
|
|
10
|
+
import type { PluginLifecycle } from './plugin.lifecycle.js';
|
|
11
|
+
/**
|
|
12
|
+
* A plugin instance: the lifecycle, plus whatever capability interfaces the
|
|
13
|
+
* plugin declared in `manifest.capabilities`.
|
|
14
|
+
*/
|
|
15
|
+
export type PluginInstance = PluginLifecycle;
|
|
16
|
+
/**
|
|
17
|
+
* Builds a fresh plugin instance. The host calls this once per configured
|
|
18
|
+
* installation, then calls `init(host)` on the result. Do no I/O here: keep
|
|
19
|
+
* the constructor cheap and put setup in `init`.
|
|
20
|
+
*/
|
|
21
|
+
export type PluginFactory<TInstance extends PluginInstance = PluginInstance> = () => TInstance;
|
|
22
|
+
/** What a plugin package default-exports. */
|
|
23
|
+
export interface DeadairPlugin<TInstance extends PluginInstance = PluginInstance> {
|
|
24
|
+
manifest: PluginManifest;
|
|
25
|
+
factory: PluginFactory<TInstance>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Instance shape for a `music-provider` plugin. Every capability method is
|
|
29
|
+
* optional: implement the subset you declared in `manifest.capabilities`.
|
|
30
|
+
*/
|
|
31
|
+
export type MusicProviderPluginInstance = PluginLifecycle & Partial<MusicProviderCatalog> & Partial<MusicProviderStream> & Partial<MusicProviderSteer> & Partial<MusicProviderOAuth>;
|
|
32
|
+
/** Instance shape for an `enrichment` plugin. */
|
|
33
|
+
export type EnrichmentPluginInstance = PluginLifecycle & EnrichmentProvider;
|
|
34
|
+
/** Instance shape for a `charts` plugin. */
|
|
35
|
+
export type ChartsPluginInstance = PluginLifecycle & ChartsProvider;
|
|
36
|
+
/** Instance shape for a `news` plugin. */
|
|
37
|
+
export type NewsPluginInstance = PluginLifecycle & NewsProvider;
|
|
38
|
+
/** Instance shape for a `similarity` plugin. */
|
|
39
|
+
export type SimilarityPluginInstance = PluginLifecycle & SimilarityProvider;
|
|
40
|
+
/** Instance shape for a `search` plugin. */
|
|
41
|
+
export type SearchPluginInstance = PluginLifecycle & SearchProvider;
|
|
42
|
+
/** Instance shape for a `weather` plugin. */
|
|
43
|
+
export type WeatherPluginInstance = PluginLifecycle & WeatherProvider;
|
|
44
|
+
/** Instance shape for a `scrobble` plugin. */
|
|
45
|
+
export type ScrobblePluginInstance = PluginLifecycle & ScrobbleProvider;
|
|
46
|
+
/**
|
|
47
|
+
* Pairs a manifest with its factory and returns the object a plugin package
|
|
48
|
+
* default-exports. Purely a typing helper: it does no validation, because the
|
|
49
|
+
* host validates the manifest with `pluginManifestSchema` at load time.
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* export default definePlugin(manifest, () => new MyPlugin());
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function definePlugin<TInstance extends PluginInstance>(manifest: PluginManifest, factory: PluginFactory<TInstance>): DeadairPlugin<TInstance>;
|
|
56
|
+
//# sourceMappingURL=define.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.plugin.d.ts","sourceRoot":"","sources":["../src/define.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC1I,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,SAAS,SAAS,cAAc,GAAG,cAAc,IAAI,MAAM,SAAS,CAAC;AAE/F,6CAA6C;AAC7C,MAAM,WAAW,aAAa,CAAC,SAAS,SAAS,cAAc,GAAG,cAAc;IAC5E,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,eAAe,GACrD,OAAO,CAAC,oBAAoB,CAAC,GAC7B,OAAO,CAAC,mBAAmB,CAAC,GAC5B,OAAO,CAAC,kBAAkB,CAAC,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEhC,iDAAiD;AACjD,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,YAAY,CAAC;AAEhE,gDAAgD;AAChD,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEpE,6CAA6C;AAC7C,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,eAAe,CAAC;AAEtE,8CAA8C;AAC9C,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAS,cAAc,EACzD,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAClC,aAAa,CAAC,SAAS,CAAC,CAE1B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { HostFetchInit, PluginHost } from './plugin.host.js';
|
|
2
|
+
/**
|
|
3
|
+
* A syndicated feed, as one shape, whichever of the three formats it arrived in.
|
|
4
|
+
*
|
|
5
|
+
* The sibling of `plugin.http.ts`, and here for the same reason: every plugin
|
|
6
|
+
* that reads a feed writes the same normalisation, and none of it is that
|
|
7
|
+
* plugin's opinion. RSS 2.0 dates an item with `pubDate` in RFC-822, Atom uses
|
|
8
|
+
* `published` in ISO-8601 and RSS 1.0 uses `dc:date`; a link is an element's
|
|
9
|
+
* text in two of them and an attribute in the third; a title is a bare string
|
|
10
|
+
* until somebody sets `type="html"` on it and it becomes an object. None of
|
|
11
|
+
* that is worth learning twice.
|
|
12
|
+
*
|
|
13
|
+
* ## It parses and it does not fetch
|
|
14
|
+
*
|
|
15
|
+
* {@link parseFeed} takes a string. That is what makes it testable against real
|
|
16
|
+
* documents with no host in the way, and it is the half other plugins will
|
|
17
|
+
* actually reuse. {@link fetchFeed} is the thin convenience on top, and it is
|
|
18
|
+
* thin deliberately: `host.fetch` already carries the allowlist, the pacing and
|
|
19
|
+
* the `Retry-After` back-off, so there is nothing left here but a status check.
|
|
20
|
+
*
|
|
21
|
+
* Caching and conditional GET (`ETag`, `Last-Modified`) are NOT here. They
|
|
22
|
+
* belong to whoever is polling — a plugin knows how often its own feeds are
|
|
23
|
+
* worth asking and this file does not — and putting a cache behind a pure
|
|
24
|
+
* parser would hide it from the one caller that must not be surprised by it.
|
|
25
|
+
*
|
|
26
|
+
* ## Tolerant in one specific direction
|
|
27
|
+
*
|
|
28
|
+
* A feed is somebody else's file, served by somebody else's edge, and the ways
|
|
29
|
+
* it goes wrong are not interesting: a truncated body, an HTML error page with
|
|
30
|
+
* a 200 on it, an item with no title. So a document that will not parse answers
|
|
31
|
+
* with no items rather than throwing, and an item missing the one field that
|
|
32
|
+
* makes it an item is dropped rather than guessed at. What is NOT tolerated is
|
|
33
|
+
* a bad status, because that is the upstream saying so itself.
|
|
34
|
+
*/
|
|
35
|
+
/** One entry, whatever the feed called it. */
|
|
36
|
+
export interface FeedItem {
|
|
37
|
+
/**
|
|
38
|
+
* A stable identifier for this entry, across polls and across restarts.
|
|
39
|
+
*
|
|
40
|
+
* The load-bearing field, and the reason it is never absent. Anything that
|
|
41
|
+
* polls a feed has to tell an arrival from something it has already seen,
|
|
42
|
+
* and the only alternative to an id is comparing timestamps — which fails
|
|
43
|
+
* on a publisher that back-dates, re-dates or omits them.
|
|
44
|
+
*
|
|
45
|
+
* Taken from `guid`, then Atom's `id`, then the link, and only then a hash
|
|
46
|
+
* of the title and date. The fallback is what makes the guarantee hold for
|
|
47
|
+
* a feed that supplies none of the three, and it is a hash rather than an
|
|
48
|
+
* index because a position in a list changes every time the list does.
|
|
49
|
+
*/
|
|
50
|
+
id: string;
|
|
51
|
+
title: string;
|
|
52
|
+
/** The entry's own words, as plain text. See {@link FEED_SUMMARY_MAX_CHARS}. */
|
|
53
|
+
summary?: string;
|
|
54
|
+
url?: string;
|
|
55
|
+
/** ISO-8601. Never a `Date`, and absent when the feed gave no readable one. */
|
|
56
|
+
publishedAt?: string;
|
|
57
|
+
author?: string;
|
|
58
|
+
categories?: string[];
|
|
59
|
+
}
|
|
60
|
+
/** A feed, and what it holds. */
|
|
61
|
+
export interface ParsedFeed {
|
|
62
|
+
title?: string;
|
|
63
|
+
/** Where the publication itself lives, as opposed to any one entry. */
|
|
64
|
+
homeUrl?: string;
|
|
65
|
+
/** Newest first where the feed said, and otherwise in the order it listed them. */
|
|
66
|
+
items: FeedItem[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* How much of an entry's own words are kept.
|
|
70
|
+
*
|
|
71
|
+
* A description is written for a browser and its destination here is a model's
|
|
72
|
+
* context and possibly a voice, neither of which wants three paragraphs of a
|
|
73
|
+
* press release. Generous enough to hold a real first paragraph, short enough
|
|
74
|
+
* that twenty of them still leave room to think.
|
|
75
|
+
*/
|
|
76
|
+
export declare const FEED_SUMMARY_MAX_CHARS = 500;
|
|
77
|
+
/**
|
|
78
|
+
* A feed document, read.
|
|
79
|
+
*
|
|
80
|
+
* Answers with an empty feed rather than throwing, for anything that is not one
|
|
81
|
+
* — a parse failure, an HTML page, an empty body. The caller's next move is the
|
|
82
|
+
* same in every case, and a plugin fanning out over five feeds must not lose
|
|
83
|
+
* four of them to the fifth.
|
|
84
|
+
*/
|
|
85
|
+
export declare function parseFeed(xml: string): ParsedFeed;
|
|
86
|
+
/**
|
|
87
|
+
* A feed off the network.
|
|
88
|
+
*
|
|
89
|
+
* Everything about the request except the status check is `host.fetch`'s: the
|
|
90
|
+
* allowlist, the pacing, the redirect re-checks, the body caps. What is left is
|
|
91
|
+
* the one decision a plugin should not be making differently from its
|
|
92
|
+
* neighbours — which {@link PluginErrorCode} a status means — and that is
|
|
93
|
+
* `plugin.http.ts`'s ladder, unmodified. A service with its own reading of a
|
|
94
|
+
* status layers that in front by calling {@link parseFeed} itself.
|
|
95
|
+
*/
|
|
96
|
+
export declare function fetchFeed(host: PluginHost, url: string, init?: HostFetchInit): Promise<ParsedFeed>;
|
|
97
|
+
//# sourceMappingURL=feed.parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed.parse.d.ts","sourceRoot":"","sources":["../src/feed.parse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,QAAQ;IACrB;;;;;;;;;;;;OAYG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,KAAK,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAuB1C;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgCjD;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBxG"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Somebody else's markup as something a person could be read aloud.
|
|
3
|
+
*
|
|
4
|
+
* Lifted out of `feed.parse.ts` when `article.parse.ts` needed the same two
|
|
5
|
+
* steps, and shared rather than copied for the reason `match.text.ts` gives
|
|
6
|
+
* about its own two: a difference between the copies would have one reader
|
|
7
|
+
* hand a model `&` while the other did not, and nobody would notice until
|
|
8
|
+
* a voice said it on air.
|
|
9
|
+
*
|
|
10
|
+
* Neither function knows anything about feeds or articles. What is here is the
|
|
11
|
+
* part that is true of any publisher's text: tags are not words, entities are
|
|
12
|
+
* not punctuation, and a paragraph's worth of whitespace is one space.
|
|
13
|
+
*/
|
|
14
|
+
export declare function decodeEntities(value: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Markup as plain text, capped.
|
|
17
|
+
*
|
|
18
|
+
* Tags out, entities decoded, whitespace collapsed, length bounded.
|
|
19
|
+
*
|
|
20
|
+
* Entities are decoded AFTER the tags come out, and that order matters: an
|
|
21
|
+
* escaped `<script>` would otherwise be turned into a tag by the decode
|
|
22
|
+
* and then survive the strip.
|
|
23
|
+
*
|
|
24
|
+
* @param maxChars - Where to cut. Absent means keep whatever there is, which is
|
|
25
|
+
* what a caller that has already bounded the input wants.
|
|
26
|
+
*/
|
|
27
|
+
export declare function plainText(raw: string, maxChars?: number): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Text cut at a word boundary where there is one nearby, with an ellipsis.
|
|
30
|
+
*
|
|
31
|
+
* A summary that ends mid-word reads as a broken feed rather than as a
|
|
32
|
+
* truncation, which is the difference between a listener hearing a station
|
|
33
|
+
* quoting a publisher and one hearing a station malfunction.
|
|
34
|
+
*/
|
|
35
|
+
export declare function truncateWords(value: string, maxChars: number): string;
|
|
36
|
+
/**
|
|
37
|
+
* The first sentence of a passage, as published, or the whole thing when it is
|
|
38
|
+
* one sentence.
|
|
39
|
+
*
|
|
40
|
+
* Here rather than in a caller because both consumers of prose need it and
|
|
41
|
+
* neither should be splitting sentences by hand: a station reads the opening
|
|
42
|
+
* line of a story aloud, and a truncation cuts at the last one that fits.
|
|
43
|
+
*/
|
|
44
|
+
export declare function firstSentence(value: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Text cut at the last SENTENCE that fits, with no ellipsis.
|
|
47
|
+
*
|
|
48
|
+
* The other kind of cut, and the one that belongs on anything a voice will read
|
|
49
|
+
* or a model will be told is the story: half a sentence is something to finish,
|
|
50
|
+
* and a model handed one finishes it out of its own head — which is exactly the
|
|
51
|
+
* failure a bulletin cannot have. Falls back to {@link truncateWords} when the
|
|
52
|
+
* first sentence is already longer than the cap, because a hard stop mid-clause
|
|
53
|
+
* is still better than three paragraphs.
|
|
54
|
+
*/
|
|
55
|
+
export declare function truncateSentences(value: string, maxChars: number): string;
|
|
56
|
+
/**
|
|
57
|
+
* The longest run of WHOLE sentences within a word count, or nothing.
|
|
58
|
+
*
|
|
59
|
+
* The word-counted sibling of {@link truncateSentences}, and the difference
|
|
60
|
+
* between them is the fallback rather than the unit. That one cuts mid-clause
|
|
61
|
+
* when the first sentence is already too long, because its caller would rather
|
|
62
|
+
* have a hard stop than three paragraphs. This one answers `undefined`, because
|
|
63
|
+
* its caller is choosing between a script and something else it can say
|
|
64
|
+
* instead, and half a sentence read aloud is worse than either.
|
|
65
|
+
*
|
|
66
|
+
* A passage already within the count comes back trimmed and otherwise
|
|
67
|
+
* untouched, so a caller can put this in front of everything rather than
|
|
68
|
+
* branching on the length itself.
|
|
69
|
+
*/
|
|
70
|
+
export declare function sentencesWithin(value: string, maxWords: number): string | undefined;
|
|
71
|
+
//# sourceMappingURL=html.text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.text.d.ts","sourceRoot":"","sources":["../src/html.text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4BH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrE;AA2BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYzE;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgBnF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export * from './boundary.json.safe.js';
|
|
2
|
+
export * from './capabilities/analysis.js';
|
|
3
|
+
export * from './capabilities/charts.js';
|
|
4
|
+
export * from './capabilities/enrichment.js';
|
|
5
|
+
export * from './capabilities/llm.js';
|
|
6
|
+
export * from './capabilities/mixer.js';
|
|
7
|
+
export * from './capabilities/music.provider.js';
|
|
8
|
+
export * from './capabilities/news.js';
|
|
9
|
+
export * from './capabilities/scrobble.js';
|
|
10
|
+
export * from './capabilities/search.js';
|
|
11
|
+
export * from './capabilities/similarity.js';
|
|
12
|
+
export * from './capabilities/speech.js';
|
|
13
|
+
export * from './capabilities/weather.js';
|
|
14
|
+
export * from './article.parse.js';
|
|
15
|
+
export * from './define.plugin.js';
|
|
16
|
+
export * from './feed.parse.js';
|
|
17
|
+
export * from './html.text.js';
|
|
18
|
+
export * from './match.text.js';
|
|
19
|
+
export * from './plugin.api.version.js';
|
|
20
|
+
export * from './plugin.base.js';
|
|
21
|
+
export * from './plugin.config.fields.js';
|
|
22
|
+
export * from './plugin.config.read.js';
|
|
23
|
+
export * from './plugin.error.js';
|
|
24
|
+
export * from './plugin.host.js';
|
|
25
|
+
export * from './plugin.host.response.js';
|
|
26
|
+
export * from './plugin.http.js';
|
|
27
|
+
export * from './plugin.lifecycle.js';
|
|
28
|
+
export * from './plugin.manifest.js';
|
|
29
|
+
export * from './plugin.permissions.js';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
|