@funcstache/stache-stream 0.2.2 → 0.2.3
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/.eslintrc.json +30 -0
- package/.swcrc +29 -0
- package/DEV.md +84 -0
- package/README.md +145 -0
- package/TASKS.md +13 -0
- package/TODO.md +28 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +120 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1633 -0
- package/docs/classes/StacheTransformStream.html +13 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +73 -0
- package/docs/interfaces/Context.html +3 -0
- package/docs/interfaces/ContextProvider.html +10 -0
- package/docs/interfaces/PartialTagContextLambda.html +11 -0
- package/docs/interfaces/PartialTagContextLambdaResult.html +7 -0
- package/docs/interfaces/SectionTagCallback.html +12 -0
- package/docs/interfaces/SectionTagContextRecord.html +4 -0
- package/docs/interfaces/Tag.html +45 -0
- package/docs/interfaces/VariableTagContextLambda.html +4 -0
- package/docs/interfaces/VariableTagContextRecord.html +3 -0
- package/docs/media/StacheStream.ts +79 -0
- package/docs/modules.html +1 -0
- package/docs/types/ContextTypes.html +3 -0
- package/docs/types/JsonType.html +2 -0
- package/docs/types/PartialTagContext.html +4 -0
- package/docs/types/SectionTagContext.html +4 -0
- package/docs/types/TemplateName.html +9 -0
- package/docs/types/VariableTagContext.html +4 -0
- package/docs/types/VariableTagContextPrimitive.html +3 -0
- package/docs-assets/images/context-dotted-found.png +0 -0
- package/docs-assets/images/context-dotted-not-found.png +0 -0
- package/docs-assets/images/context-not-found.png +0 -0
- package/package.json +3 -6
- package/project.json +26 -0
- package/src/global.d.ts +10 -0
- package/src/index.ts +67 -0
- package/src/lib/parse/Parse.spec.ts +50 -0
- package/src/lib/parse/Parse.ts +92 -0
- package/src/lib/parse/README.md +62 -0
- package/src/lib/plan_base_v2.md +33 -0
- package/src/lib/plan_comment.md +53 -0
- package/src/lib/plan_implicit-iterator.md +213 -0
- package/src/lib/plan_inverted-sections.md +160 -0
- package/src/lib/plan_partials.md +237 -0
- package/src/lib/plan_sections.md +167 -0
- package/src/lib/plan_stache-stream.md +110 -0
- package/src/lib/plan_whitespace.md +98 -0
- package/src/lib/queue/Queue.spec.ts +275 -0
- package/src/lib/queue/Queue.ts +253 -0
- package/src/lib/queue/README.md +110 -0
- package/src/lib/stache-stream/README.md +45 -0
- package/src/lib/stache-stream/StacheStream.spec.ts +107 -0
- package/src/lib/stache-stream/StacheStream.ts +79 -0
- package/src/lib/tag/README.md +95 -0
- package/src/lib/tag/Tag.spec.ts +212 -0
- package/src/lib/tag/Tag.ts +295 -0
- package/src/lib/template/README.md +102 -0
- package/src/lib/template/Template-comment.spec.ts +76 -0
- package/src/lib/template/Template-inverted-section.spec.ts +85 -0
- package/src/lib/template/Template-partials.spec.ts +125 -0
- package/src/lib/template/Template-section.spec.ts +142 -0
- package/src/lib/template/Template.spec.ts +178 -0
- package/src/lib/template/Template.ts +614 -0
- package/src/lib/test/streams.ts +36 -0
- package/src/lib/tokenize/README.md +97 -0
- package/src/lib/tokenize/Tokenize.spec.ts +364 -0
- package/src/lib/tokenize/Tokenize.ts +374 -0
- package/src/lib/{types.d.ts → types.ts} +73 -25
- package/tsconfig.json +21 -0
- package/tsconfig.lib.json +16 -0
- package/tsconfig.spec.json +21 -0
- package/typedoc.mjs +15 -0
- package/vite.config.ts +27 -0
- package/vitest.setup.ts +6 -0
- package/src/global.d.js +0 -8
- package/src/global.d.js.map +0 -1
- package/src/index.d.ts +0 -7
- package/src/index.js +0 -24
- package/src/index.js.map +0 -1
- package/src/lib/parse/Parse.d.ts +0 -14
- package/src/lib/parse/Parse.js +0 -79
- package/src/lib/parse/Parse.js.map +0 -1
- package/src/lib/queue/Queue.d.ts +0 -32
- package/src/lib/queue/Queue.js +0 -181
- package/src/lib/queue/Queue.js.map +0 -1
- package/src/lib/stache-stream/StacheStream.d.ts +0 -22
- package/src/lib/stache-stream/StacheStream.js +0 -71
- package/src/lib/stache-stream/StacheStream.js.map +0 -1
- package/src/lib/tag/Tag.d.ts +0 -33
- package/src/lib/tag/Tag.js +0 -231
- package/src/lib/tag/Tag.js.map +0 -1
- package/src/lib/template/Template.d.ts +0 -18
- package/src/lib/template/Template.js +0 -428
- package/src/lib/template/Template.js.map +0 -1
- package/src/lib/test/streams.d.ts +0 -2
- package/src/lib/test/streams.js +0 -39
- package/src/lib/test/streams.js.map +0 -1
- package/src/lib/tokenize/Tokenize.d.ts +0 -22
- package/src/lib/tokenize/Tokenize.js +0 -268
- package/src/lib/tokenize/Tokenize.js.map +0 -1
- package/src/lib/types.js +0 -33
- package/src/lib/types.js.map +0 -1
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": ["../../.eslintrc.json"],
|
|
3
|
+
"ignorePatterns": ["!**/*"],
|
|
4
|
+
"overrides": [
|
|
5
|
+
{
|
|
6
|
+
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
|
7
|
+
"rules": {}
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"files": ["*.ts", "*.tsx"],
|
|
11
|
+
"rules": {}
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"files": ["*.js", "*.jsx"],
|
|
15
|
+
"rules": {}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"files": ["*.json"],
|
|
19
|
+
"parser": "jsonc-eslint-parser",
|
|
20
|
+
"rules": {
|
|
21
|
+
"@nx/dependency-checks": [
|
|
22
|
+
"error",
|
|
23
|
+
{
|
|
24
|
+
"ignoredFiles": ["{projectRoot}/vite.config.{js,ts,mjs,mts}"]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
package/.swcrc
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsc": {
|
|
3
|
+
"target": "es2022",
|
|
4
|
+
"parser": {
|
|
5
|
+
"syntax": "typescript",
|
|
6
|
+
"decorators": true,
|
|
7
|
+
"dynamicImport": true
|
|
8
|
+
},
|
|
9
|
+
"transform": {
|
|
10
|
+
"decoratorMetadata": true,
|
|
11
|
+
"legacyDecorator": true
|
|
12
|
+
},
|
|
13
|
+
"keepClassNames": true,
|
|
14
|
+
"externalHelpers": true,
|
|
15
|
+
"loose": true
|
|
16
|
+
},
|
|
17
|
+
"module": {
|
|
18
|
+
"type": "commonjs"
|
|
19
|
+
},
|
|
20
|
+
"sourceMaps": true,
|
|
21
|
+
"exclude": [
|
|
22
|
+
"jest.config.ts",
|
|
23
|
+
".*\\.spec.tsx?$",
|
|
24
|
+
".*\\.test.tsx?$",
|
|
25
|
+
"./src/jest-setup.ts$",
|
|
26
|
+
"./**/jest-setup.ts$",
|
|
27
|
+
".*.js$"
|
|
28
|
+
]
|
|
29
|
+
}
|
package/DEV.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# stache-stream
|
|
2
|
+
|
|
3
|
+
stache-stream
|
|
4
|
+
|
|
5
|
+
## Development
|
|
6
|
+
|
|
7
|
+
### Commands
|
|
8
|
+
|
|
9
|
+
build:
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
nx build stache-stream
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
test:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
nx test stache-stream
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
build docs:
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npx typedoc
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
version:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npx nx release version --dry-run --projects=stache-stream --access=public
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
publish:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npx nx release publish --dry-run --projects=stache-stream --access=public --otp=XXXXXX
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Documentation
|
|
40
|
+
|
|
41
|
+
### Context
|
|
42
|
+
|
|
43
|
+
#### Dotted paths
|
|
44
|
+
|
|
45
|
+
When working with dotted paths from tags: any path element that is not the **last** element and is a
|
|
46
|
+
`function` will be treated as an async function that returns an object.
|
|
47
|
+
|
|
48
|
+
When a dotted tag value refers to something like a partial then the final element in the path must
|
|
49
|
+
return a a value of the appropriate type, for example a `PartialTagContext`. The intermediate
|
|
50
|
+
elements return a `Context` instance, i.e. an `object`.
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// tag value is ">a.b.c"
|
|
54
|
+
// context finally looks like this:
|
|
55
|
+
{
|
|
56
|
+
a: {
|
|
57
|
+
b: async () => ({
|
|
58
|
+
c: () => PartialTagContextLambda,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Variable values
|
|
65
|
+
|
|
66
|
+
Look up context until `dotted[0]` is found then look for `dotted[n+1]` in the result of `dotted[0]`.
|
|
67
|
+
|
|
68
|
+
<img src="./docs-assets/images/context-dotted-found.png" alt="Look up context until `dotted[0]` is found
|
|
69
|
+
then look for `dotted[n+1]` in the result of `dotted[0]`." maxwidth="600px">
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
Look up context until `dotted[0]` is found then look for `dotted[n+1]` in the result of `dotted[0]`
|
|
74
|
+
if not found return `undefined`.
|
|
75
|
+
|
|
76
|
+
<img src="./docs-assets/images/context-dotted-not-found.png" alt="Look up context until `dotted[0]` is
|
|
77
|
+
found then look for `dotted[n+1]` in the result of `dotted[0]` if not found return `undefined`.">
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
Look up context, if `dotted[0]` is not found then return `undefined`.
|
|
82
|
+
|
|
83
|
+
<img src="./docs-assets/images/context-not-found.png" alt="Look up context, if `dotted[0]` is not found
|
|
84
|
+
then return `undefined`.">
|
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Streaming Mustache Template Rendering
|
|
2
|
+
|
|
3
|
+
A [Mustache](https://mustache.github.io/) template renderer for JavaScript focused on returning
|
|
4
|
+
results as quickly as possible.
|
|
5
|
+
|
|
6
|
+
This library renders a Mustache template as it's read, rather than loading the entire template into
|
|
7
|
+
memory before processing. The values of tags in the Mustache template are rendered as soon as
|
|
8
|
+
possible and written to the output stream.
|
|
9
|
+
|
|
10
|
+
stache-stream is intended to be used as part of a server-side rendering platform that generates
|
|
11
|
+
HTML, whose goal is to provide a superior Web user experience on all kinds of devices - especially
|
|
12
|
+
devices with lower memory and CPU capabilities.
|
|
13
|
+
|
|
14
|
+
> [!TIP]
|
|
15
|
+
> There are two other packages with higher level abstractions for streaming mustache rendering.
|
|
16
|
+
>
|
|
17
|
+
> - The "funcstache" package is a library that renders a complete mustache template from a collection
|
|
18
|
+
> of components in a file system. See the [funcstache
|
|
19
|
+
> docs](https://codeberg.org/rlmcneary2/funcstache/src/branch/main/libs/funcstache).
|
|
20
|
+
> - Koa middleware for serving rendered HTML. See the [koa-middleware
|
|
21
|
+
> docs](https://codeberg.org/rlmcneary2/funcstache/src/branch/main/libs/koa-middleware).
|
|
22
|
+
|
|
23
|
+
## Overview
|
|
24
|
+
|
|
25
|
+
The library is constructed to maximize asynchronous processing of a template and streaming a result
|
|
26
|
+
as quickly as possible.
|
|
27
|
+
|
|
28
|
+
- A [ReadableStream](https://nodejs.org/api/webstreams.html#class-readablestream) created from a
|
|
29
|
+
Mustache template, for example, a string or a file.
|
|
30
|
+
- Context that prefers the use of async functions (lambdas) to provide the data rendered into the
|
|
31
|
+
template.
|
|
32
|
+
- A [WritableStream](https://nodejs.org/api/webstreams.html#class-writablestream) that will receive
|
|
33
|
+
the rendered template output.
|
|
34
|
+
|
|
35
|
+
This functionality is wrapped in a
|
|
36
|
+
[StacheTransformStream](src/lib/stache-stream/StacheStream.ts) that implements a
|
|
37
|
+
NodeJS [TransformStream](https://nodejs.org/api/webstreams.html#class-transformstream).
|
|
38
|
+
|
|
39
|
+
The components that comprise a `StacheTransformStream` instance process a Mustache Template in this
|
|
40
|
+
order:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
ReadableStream -> (Parse → Tokenize → Queue → Template) → WritableStream
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Use
|
|
47
|
+
|
|
48
|
+
When using a `StacheTransformStream` you will need to provide a Mustache template as the source
|
|
49
|
+
`ReadableStream` and options that include the `ContextProvider` to be used to render data into the
|
|
50
|
+
template.
|
|
51
|
+
|
|
52
|
+
The following example includes a template with two variables that are replaced. The output
|
|
53
|
+
illustrates how chunks are written to the output as they become available.
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
// Mustache template in the ReadableStream:
|
|
57
|
+
// "Dear {{title}} {{name}},\n\nYou may already be a winner!"
|
|
58
|
+
|
|
59
|
+
const stacheTransformStream = new StacheTransformStream({
|
|
60
|
+
contextProvider: {
|
|
61
|
+
context: { name: "Alice Brown" },
|
|
62
|
+
getContextValue: async (tag) => (tag.key === "title" ? "Doctor" : ""),
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
for await (const chunk of readable.pipeThrough(stacheTransformStream)) {
|
|
67
|
+
await writable.getWriter().write(chunk);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Writable stream output chunks:
|
|
71
|
+
// "Dear "
|
|
72
|
+
// "Doctor"
|
|
73
|
+
// " "
|
|
74
|
+
// "Alice Brown"
|
|
75
|
+
// ",\n\nYou may already be a winner!"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Asynchronously render a partial's replacement
|
|
79
|
+
|
|
80
|
+
A more complex example renders a partial tag by reading the partial's replacement - another
|
|
81
|
+
mustache template - from a file. The replacement template has a variable for the current date
|
|
82
|
+
which named `newsItemDate` which is replaced with a value from newsItem's parent's context.
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
// Mustache template in the ReadableStream:
|
|
86
|
+
// "<article>Latest news: {{ >newsItem }}</article>"
|
|
87
|
+
|
|
88
|
+
// `newsItem` template:
|
|
89
|
+
// "<p>As of {{newsItemDate}} - in the news...</p>"
|
|
90
|
+
|
|
91
|
+
const stacheTransformStream = new StacheTransformStream({
|
|
92
|
+
contextProvider: {
|
|
93
|
+
context: {
|
|
94
|
+
newsItemDate: new Date().toString(),
|
|
95
|
+
newsItem: async (tag: Tag): Promise<ReadableStream> => {
|
|
96
|
+
const fileName = "latest-news-item.mustache";
|
|
97
|
+
const file = fs.createReadStream(fileName, { encoding: "utf-8" });
|
|
98
|
+
return ReadableStream.from(file);
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
for await (const chunk of readable.pipeThrough(stacheTransformStream)) {
|
|
105
|
+
await writable.getWriter().write(chunk);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Improve web page performance
|
|
110
|
+
|
|
111
|
+
The previous example is trivial and a little silly, but being able to render a template containing
|
|
112
|
+
HTML and write it to an output stream as soon as possible can have significant performance
|
|
113
|
+
improvements for display in a web browser. Consider the following pseudo-code for a Mustache
|
|
114
|
+
template that outputs a complete HTML file.
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<!-- HTML with embedded Mustache tags. -->
|
|
118
|
+
|
|
119
|
+
<html>
|
|
120
|
+
<head>
|
|
121
|
+
<!-- load CSS files and other assets -->
|
|
122
|
+
<link rel="stylesheet" href="styles.css" />
|
|
123
|
+
</head>
|
|
124
|
+
<body>
|
|
125
|
+
<!--
|
|
126
|
+
The content for the page at this route is generated dynamically, maybe it's a table with data
|
|
127
|
+
that varies depending on the search params...
|
|
128
|
+
-->
|
|
129
|
+
<section>{{>aboveTheFoldContent}}</section>
|
|
130
|
+
<section>{{>content}}</section>
|
|
131
|
+
</body>
|
|
132
|
+
</html>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
When rendered using stache-stream all the content up to the `{{>content}}` partial tag is sent to
|
|
136
|
+
the browser immediately. Browsers will parse streamed response data as it arrives and where possible
|
|
137
|
+
will begin to render the web page. In the case of a head tag with CSS and other assets the browser
|
|
138
|
+
will begin to download those assets in the background as soon as they are parsed. This is a main
|
|
139
|
+
goal of stache-stream to improve the experience in a browser by allowing web pages to load and
|
|
140
|
+
render more quickly.
|
|
141
|
+
|
|
142
|
+
We can also break the page content into separate blocks - for example, content that appears "above
|
|
143
|
+
the fold" will be transformed on the server and sent down as soon as that is complete, without
|
|
144
|
+
waiting for the rest of the content to be rendered. THis can be especially helpful when display data
|
|
145
|
+
is fetched from storage.
|
package/TASKS.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# tasks
|
|
2
|
+
|
|
3
|
+
09-21-2025
|
|
4
|
+
|
|
5
|
+
- [x] Run tests for stache-stream and verify that the new context lookup functions are working properly.
|
|
6
|
+
- [x] When working with dotted paths: any element that is not the **last** element and is a function
|
|
7
|
+
will be treated as an async function that returns an object.
|
|
8
|
+
- [x] Template matches nested start and end tags. `npx nx test stache-stream --testFile=libs/stache-stream/src/lib/v2/template/Template.spec.ts`
|
|
9
|
+
- [x] render `section` tag `npx nx test stache-stream --testFile=libs/stache-stream/src/lib/v2/template/Template.spec.ts`
|
|
10
|
+
- [x] Start the website and get the application running! `LOG_LEVEL=debug npx nx serve website`
|
|
11
|
+
- [ ] Fix the TODO in "libs/stache-stream/src/lib/template/Template.ts" so that section lambdas are handled correctly.
|
|
12
|
+
- [ ] Add an async function to get section context? This is not in the spec but fits stache-stream.
|
|
13
|
+
- [ ] Remove `parent` from Tag interface.
|
package/TODO.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# TODO
|
|
2
|
+
|
|
3
|
+
## Spec Features
|
|
4
|
+
|
|
5
|
+
A collection of requirements in the specification that haven't been implemented, both required and
|
|
6
|
+
optional.
|
|
7
|
+
|
|
8
|
+
| ID | Status | Priority | Optional | Name | Description |
|
|
9
|
+
| --- | ------ | -------- | -------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
10
|
+
| 1 | [x] | high | | Comment | `Tag` correctly assigns type `comment`, but `Queue` has no `comment` case (token silently dropped) and `Template` has no handler. The handler must also apply standalone whitespace and newline suppression. |
|
|
11
|
+
| 2 | [x] | high | | Standalone suppression — sections | `#handleSection` and `#handleInverted` flush pending whitespace (writing it) rather than suppressing it; neither suppresses the trailing newline. Only `#handlePartial` implements correct standalone detection. When implemented, update `"suppresses a standalone comment line inside a section body"` in `Template-comment.spec.ts` — its expected value of `"\n"` should become `""`. |
|
|
12
|
+
| 3 | [ ] | medium | ✓ | Block | `Tag` throws before assigning type `block`; `Queue` and `Template` have no handler. |
|
|
13
|
+
| 4 | [ ] | medium | ✓ | Parent | `Tag` throws before assigning type `parent`; `Queue` and `Template` have no handler. |
|
|
14
|
+
| 5 | [ ] | low | | Set delimiter | `Tag` has no `=` case (defaults to `variable` type); `Tokenize` hard-codes `{{`/`}}` with no mechanism to change them; no pipeline stage applies updated delimiters. |
|
|
15
|
+
| 6 | [ ] | low | ✓ | Dynamic partial | `Tag` throws; no pipeline stage resolves the partial name at runtime. |
|
|
16
|
+
| 7 | [ ] | low | ✓ | Dynamic parent | `Tag` throws; no pipeline stage resolves the parent name at runtime. |
|
|
17
|
+
|
|
18
|
+
## Notes
|
|
19
|
+
|
|
20
|
+
### Parent token name resolution (TODO 4)
|
|
21
|
+
|
|
22
|
+
Research into GRMustache, mustache.java, and hogan.js shows that all three libraries that implement `{{<}}` resolve the parent name through a **separate template registry**, not the data context:
|
|
23
|
+
|
|
24
|
+
- **GRMustache** — a `TemplateRepository` configured with a root (bundle, directory, or dictionary); parent names are resource names or relative file paths.
|
|
25
|
+
- **mustache.java** — a `MustacheFactory` configured with a classpath root, `File` directory, or custom `MustacheResolver`; parent names resolved the same way as partials, through the factory.
|
|
26
|
+
- **hogan.js** — the caller pre-compiles all templates and passes them as a plain dictionary to `render(context, partials)`; the parent name is a key in that dictionary.
|
|
27
|
+
|
|
28
|
+
In funcstache's current model, partials are resolved via lambdas *in* the context, which is the opposite pattern. Implementing parent tokens will likely require a parallel resolution mechanism (a template registry or a second argument to the renderer) rather than using the context hash.
|
package/docs/.nojekyll
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
window.hierarchyData = "eJyrVirKzy8pVrKKjtVRKkpNy0lNLsnMzytWsqqurQUAmx4Kpg=="
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--light-hl-0: #008000;
|
|
3
|
+
--dark-hl-0: #6A9955;
|
|
4
|
+
--light-hl-1: #0000FF;
|
|
5
|
+
--dark-hl-1: #569CD6;
|
|
6
|
+
--light-hl-2: #000000;
|
|
7
|
+
--dark-hl-2: #D4D4D4;
|
|
8
|
+
--light-hl-3: #0070C1;
|
|
9
|
+
--dark-hl-3: #4FC1FF;
|
|
10
|
+
--light-hl-4: #795E26;
|
|
11
|
+
--dark-hl-4: #DCDCAA;
|
|
12
|
+
--light-hl-5: #001080;
|
|
13
|
+
--dark-hl-5: #9CDCFE;
|
|
14
|
+
--light-hl-6: #A31515;
|
|
15
|
+
--dark-hl-6: #CE9178;
|
|
16
|
+
--light-hl-7: #AF00DB;
|
|
17
|
+
--dark-hl-7: #C586C0;
|
|
18
|
+
--light-hl-8: #267F99;
|
|
19
|
+
--dark-hl-8: #4EC9B0;
|
|
20
|
+
--light-hl-9: #800000;
|
|
21
|
+
--dark-hl-9: #808080;
|
|
22
|
+
--light-hl-10: #800000;
|
|
23
|
+
--dark-hl-10: #569CD6;
|
|
24
|
+
--light-hl-11: #E50000;
|
|
25
|
+
--dark-hl-11: #9CDCFE;
|
|
26
|
+
--light-hl-12: #0000FF;
|
|
27
|
+
--dark-hl-12: #CE9178;
|
|
28
|
+
--light-hl-13: #000000;
|
|
29
|
+
--dark-hl-13: #C8C8C8;
|
|
30
|
+
--light-code-background: #FFFFFF;
|
|
31
|
+
--dark-code-background: #1E1E1E;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@media (prefers-color-scheme: light) { :root {
|
|
35
|
+
--hl-0: var(--light-hl-0);
|
|
36
|
+
--hl-1: var(--light-hl-1);
|
|
37
|
+
--hl-2: var(--light-hl-2);
|
|
38
|
+
--hl-3: var(--light-hl-3);
|
|
39
|
+
--hl-4: var(--light-hl-4);
|
|
40
|
+
--hl-5: var(--light-hl-5);
|
|
41
|
+
--hl-6: var(--light-hl-6);
|
|
42
|
+
--hl-7: var(--light-hl-7);
|
|
43
|
+
--hl-8: var(--light-hl-8);
|
|
44
|
+
--hl-9: var(--light-hl-9);
|
|
45
|
+
--hl-10: var(--light-hl-10);
|
|
46
|
+
--hl-11: var(--light-hl-11);
|
|
47
|
+
--hl-12: var(--light-hl-12);
|
|
48
|
+
--hl-13: var(--light-hl-13);
|
|
49
|
+
--code-background: var(--light-code-background);
|
|
50
|
+
} }
|
|
51
|
+
|
|
52
|
+
@media (prefers-color-scheme: dark) { :root {
|
|
53
|
+
--hl-0: var(--dark-hl-0);
|
|
54
|
+
--hl-1: var(--dark-hl-1);
|
|
55
|
+
--hl-2: var(--dark-hl-2);
|
|
56
|
+
--hl-3: var(--dark-hl-3);
|
|
57
|
+
--hl-4: var(--dark-hl-4);
|
|
58
|
+
--hl-5: var(--dark-hl-5);
|
|
59
|
+
--hl-6: var(--dark-hl-6);
|
|
60
|
+
--hl-7: var(--dark-hl-7);
|
|
61
|
+
--hl-8: var(--dark-hl-8);
|
|
62
|
+
--hl-9: var(--dark-hl-9);
|
|
63
|
+
--hl-10: var(--dark-hl-10);
|
|
64
|
+
--hl-11: var(--dark-hl-11);
|
|
65
|
+
--hl-12: var(--dark-hl-12);
|
|
66
|
+
--hl-13: var(--dark-hl-13);
|
|
67
|
+
--code-background: var(--dark-code-background);
|
|
68
|
+
} }
|
|
69
|
+
|
|
70
|
+
:root[data-theme='light'] {
|
|
71
|
+
--hl-0: var(--light-hl-0);
|
|
72
|
+
--hl-1: var(--light-hl-1);
|
|
73
|
+
--hl-2: var(--light-hl-2);
|
|
74
|
+
--hl-3: var(--light-hl-3);
|
|
75
|
+
--hl-4: var(--light-hl-4);
|
|
76
|
+
--hl-5: var(--light-hl-5);
|
|
77
|
+
--hl-6: var(--light-hl-6);
|
|
78
|
+
--hl-7: var(--light-hl-7);
|
|
79
|
+
--hl-8: var(--light-hl-8);
|
|
80
|
+
--hl-9: var(--light-hl-9);
|
|
81
|
+
--hl-10: var(--light-hl-10);
|
|
82
|
+
--hl-11: var(--light-hl-11);
|
|
83
|
+
--hl-12: var(--light-hl-12);
|
|
84
|
+
--hl-13: var(--light-hl-13);
|
|
85
|
+
--code-background: var(--light-code-background);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
:root[data-theme='dark'] {
|
|
89
|
+
--hl-0: var(--dark-hl-0);
|
|
90
|
+
--hl-1: var(--dark-hl-1);
|
|
91
|
+
--hl-2: var(--dark-hl-2);
|
|
92
|
+
--hl-3: var(--dark-hl-3);
|
|
93
|
+
--hl-4: var(--dark-hl-4);
|
|
94
|
+
--hl-5: var(--dark-hl-5);
|
|
95
|
+
--hl-6: var(--dark-hl-6);
|
|
96
|
+
--hl-7: var(--dark-hl-7);
|
|
97
|
+
--hl-8: var(--dark-hl-8);
|
|
98
|
+
--hl-9: var(--dark-hl-9);
|
|
99
|
+
--hl-10: var(--dark-hl-10);
|
|
100
|
+
--hl-11: var(--dark-hl-11);
|
|
101
|
+
--hl-12: var(--dark-hl-12);
|
|
102
|
+
--hl-13: var(--dark-hl-13);
|
|
103
|
+
--code-background: var(--dark-code-background);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.hl-0 { color: var(--hl-0); }
|
|
107
|
+
.hl-1 { color: var(--hl-1); }
|
|
108
|
+
.hl-2 { color: var(--hl-2); }
|
|
109
|
+
.hl-3 { color: var(--hl-3); }
|
|
110
|
+
.hl-4 { color: var(--hl-4); }
|
|
111
|
+
.hl-5 { color: var(--hl-5); }
|
|
112
|
+
.hl-6 { color: var(--hl-6); }
|
|
113
|
+
.hl-7 { color: var(--hl-7); }
|
|
114
|
+
.hl-8 { color: var(--hl-8); }
|
|
115
|
+
.hl-9 { color: var(--hl-9); }
|
|
116
|
+
.hl-10 { color: var(--hl-10); }
|
|
117
|
+
.hl-11 { color: var(--hl-11); }
|
|
118
|
+
.hl-12 { color: var(--hl-12); }
|
|
119
|
+
.hl-13 { color: var(--hl-13); }
|
|
120
|
+
pre, code { background: var(--code-background); }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
(function() {
|
|
2
|
+
addIcons();
|
|
3
|
+
function addIcons() {
|
|
4
|
+
if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons);
|
|
5
|
+
const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg"));
|
|
6
|
+
svg.innerHTML = `<g id="icon-1" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-2" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-4" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">N</text></g><g id="icon-8" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">E</text></g><g id="icon-16" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-32" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">V</text></g><g id="icon-64" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">F</text></g><g id="icon-128" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-256" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">I</text></g><g id="icon-512" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-1024" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-2048" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-method)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-4096" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">F</text></g><g id="icon-8192" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-16384" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-32768" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-65536" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-131072" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-262144" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-524288" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-1048576" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-2097152" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-4194304" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-reference)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">R</text></g><g id="icon-8388608" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="6,5 6,19 18,19, 18,10 13,5"></polygon><line x1="9" y1="9" x2="13" y2="9"></line><line x1="9" y1="12" x2="15" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line></g></g><g id="icon-folder" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="5,5 10,5 12,8 19,8 19,18 5,18"></polygon></g></g><g id="icon-chevronDown" class="tsd-no-select"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-icon-text)"></path></g><g id="icon-chevronSmall" class="tsd-no-select"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-icon-text)"></path></g><g id="icon-checkbox" class="tsd-no-select"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></g><g id="icon-menu" class="tsd-no-select"><rect x="1" y="3" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-icon-text)"></rect></g><g id="icon-search" class="tsd-no-select"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-icon-text)"></path></g><g id="icon-anchor" class="tsd-no-select"><g stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></g></g><g id="icon-alertNote" class="tsd-no-select"><path fill="var(--color-alert-note)" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g><g id="icon-alertTip" class="tsd-no-select"><path fill="var(--color-alert-tip)" d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></g><g id="icon-alertImportant" class="tsd-no-select"><path fill="var(--color-alert-important)" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertWarning" class="tsd-no-select"><path fill="var(--color-alert-warning)" d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertCaution" class="tsd-no-select"><path fill="var(--color-alert-caution)" d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g>`;
|
|
7
|
+
svg.style.display = "none";
|
|
8
|
+
if (location.protocol === "file:") updateUseElements();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function updateUseElements() {
|
|
12
|
+
document.querySelectorAll("use").forEach(el => {
|
|
13
|
+
if (el.getAttribute("href").includes("#icon-")) {
|
|
14
|
+
el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#"));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
})()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg"><g id="icon-1" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-2" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-4" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">N</text></g><g id="icon-8" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">E</text></g><g id="icon-16" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-32" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">V</text></g><g id="icon-64" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">F</text></g><g id="icon-128" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-256" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">I</text></g><g id="icon-512" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-1024" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-2048" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-method)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">M</text></g><g id="icon-4096" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">F</text></g><g id="icon-8192" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-16384" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">C</text></g><g id="icon-32768" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">P</text></g><g id="icon-65536" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-131072" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-262144" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-524288" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-1048576" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">A</text></g><g id="icon-2097152" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">T</text></g><g id="icon-4194304" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-reference)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dy="0.35em" text-anchor="middle">R</text></g><g id="icon-8388608" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="6,5 6,19 18,19, 18,10 13,5"></polygon><line x1="9" y1="9" x2="13" y2="9"></line><line x1="9" y1="12" x2="15" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line></g></g><g id="icon-folder" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="5,5 10,5 12,8 19,8 19,18 5,18"></polygon></g></g><g id="icon-chevronDown" class="tsd-no-select"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-icon-text)"></path></g><g id="icon-chevronSmall" class="tsd-no-select"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-icon-text)"></path></g><g id="icon-checkbox" class="tsd-no-select"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></g><g id="icon-menu" class="tsd-no-select"><rect x="1" y="3" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-icon-text)"></rect></g><g id="icon-search" class="tsd-no-select"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-icon-text)"></path></g><g id="icon-anchor" class="tsd-no-select"><g stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></g></g><g id="icon-alertNote" class="tsd-no-select"><path fill="var(--color-alert-note)" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g><g id="icon-alertTip" class="tsd-no-select"><path fill="var(--color-alert-tip)" d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></g><g id="icon-alertImportant" class="tsd-no-select"><path fill="var(--color-alert-important)" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertWarning" class="tsd-no-select"><path fill="var(--color-alert-warning)" d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertCaution" class="tsd-no-select"><path fill="var(--color-alert-caution)" d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g></svg>
|