@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.
Files changed (109) hide show
  1. package/.eslintrc.json +30 -0
  2. package/.swcrc +29 -0
  3. package/DEV.md +84 -0
  4. package/README.md +145 -0
  5. package/TASKS.md +13 -0
  6. package/TODO.md +28 -0
  7. package/docs/.nojekyll +1 -0
  8. package/docs/assets/hierarchy.js +1 -0
  9. package/docs/assets/highlight.css +120 -0
  10. package/docs/assets/icons.js +18 -0
  11. package/docs/assets/icons.svg +1 -0
  12. package/docs/assets/main.js +60 -0
  13. package/docs/assets/navigation.js +1 -0
  14. package/docs/assets/search.js +1 -0
  15. package/docs/assets/style.css +1633 -0
  16. package/docs/classes/StacheTransformStream.html +13 -0
  17. package/docs/hierarchy.html +1 -0
  18. package/docs/index.html +73 -0
  19. package/docs/interfaces/Context.html +3 -0
  20. package/docs/interfaces/ContextProvider.html +10 -0
  21. package/docs/interfaces/PartialTagContextLambda.html +11 -0
  22. package/docs/interfaces/PartialTagContextLambdaResult.html +7 -0
  23. package/docs/interfaces/SectionTagCallback.html +12 -0
  24. package/docs/interfaces/SectionTagContextRecord.html +4 -0
  25. package/docs/interfaces/Tag.html +45 -0
  26. package/docs/interfaces/VariableTagContextLambda.html +4 -0
  27. package/docs/interfaces/VariableTagContextRecord.html +3 -0
  28. package/docs/media/StacheStream.ts +79 -0
  29. package/docs/modules.html +1 -0
  30. package/docs/types/ContextTypes.html +3 -0
  31. package/docs/types/JsonType.html +2 -0
  32. package/docs/types/PartialTagContext.html +4 -0
  33. package/docs/types/SectionTagContext.html +4 -0
  34. package/docs/types/TemplateName.html +9 -0
  35. package/docs/types/VariableTagContext.html +4 -0
  36. package/docs/types/VariableTagContextPrimitive.html +3 -0
  37. package/docs-assets/images/context-dotted-found.png +0 -0
  38. package/docs-assets/images/context-dotted-not-found.png +0 -0
  39. package/docs-assets/images/context-not-found.png +0 -0
  40. package/package.json +3 -6
  41. package/project.json +26 -0
  42. package/src/global.d.ts +10 -0
  43. package/src/index.ts +67 -0
  44. package/src/lib/parse/Parse.spec.ts +50 -0
  45. package/src/lib/parse/Parse.ts +92 -0
  46. package/src/lib/parse/README.md +62 -0
  47. package/src/lib/plan_base_v2.md +33 -0
  48. package/src/lib/plan_comment.md +53 -0
  49. package/src/lib/plan_implicit-iterator.md +213 -0
  50. package/src/lib/plan_inverted-sections.md +160 -0
  51. package/src/lib/plan_partials.md +237 -0
  52. package/src/lib/plan_sections.md +167 -0
  53. package/src/lib/plan_stache-stream.md +110 -0
  54. package/src/lib/plan_whitespace.md +98 -0
  55. package/src/lib/queue/Queue.spec.ts +275 -0
  56. package/src/lib/queue/Queue.ts +253 -0
  57. package/src/lib/queue/README.md +110 -0
  58. package/src/lib/stache-stream/README.md +45 -0
  59. package/src/lib/stache-stream/StacheStream.spec.ts +107 -0
  60. package/src/lib/stache-stream/StacheStream.ts +79 -0
  61. package/src/lib/tag/README.md +95 -0
  62. package/src/lib/tag/Tag.spec.ts +212 -0
  63. package/src/lib/tag/Tag.ts +295 -0
  64. package/src/lib/template/README.md +102 -0
  65. package/src/lib/template/Template-comment.spec.ts +76 -0
  66. package/src/lib/template/Template-inverted-section.spec.ts +85 -0
  67. package/src/lib/template/Template-partials.spec.ts +125 -0
  68. package/src/lib/template/Template-section.spec.ts +142 -0
  69. package/src/lib/template/Template.spec.ts +178 -0
  70. package/src/lib/template/Template.ts +614 -0
  71. package/src/lib/test/streams.ts +36 -0
  72. package/src/lib/tokenize/README.md +97 -0
  73. package/src/lib/tokenize/Tokenize.spec.ts +364 -0
  74. package/src/lib/tokenize/Tokenize.ts +374 -0
  75. package/src/lib/{types.d.ts → types.ts} +73 -25
  76. package/tsconfig.json +21 -0
  77. package/tsconfig.lib.json +16 -0
  78. package/tsconfig.spec.json +21 -0
  79. package/typedoc.mjs +15 -0
  80. package/vite.config.ts +27 -0
  81. package/vitest.setup.ts +6 -0
  82. package/src/global.d.js +0 -8
  83. package/src/global.d.js.map +0 -1
  84. package/src/index.d.ts +0 -7
  85. package/src/index.js +0 -24
  86. package/src/index.js.map +0 -1
  87. package/src/lib/parse/Parse.d.ts +0 -14
  88. package/src/lib/parse/Parse.js +0 -79
  89. package/src/lib/parse/Parse.js.map +0 -1
  90. package/src/lib/queue/Queue.d.ts +0 -32
  91. package/src/lib/queue/Queue.js +0 -181
  92. package/src/lib/queue/Queue.js.map +0 -1
  93. package/src/lib/stache-stream/StacheStream.d.ts +0 -22
  94. package/src/lib/stache-stream/StacheStream.js +0 -71
  95. package/src/lib/stache-stream/StacheStream.js.map +0 -1
  96. package/src/lib/tag/Tag.d.ts +0 -33
  97. package/src/lib/tag/Tag.js +0 -231
  98. package/src/lib/tag/Tag.js.map +0 -1
  99. package/src/lib/template/Template.d.ts +0 -18
  100. package/src/lib/template/Template.js +0 -428
  101. package/src/lib/template/Template.js.map +0 -1
  102. package/src/lib/test/streams.d.ts +0 -2
  103. package/src/lib/test/streams.js +0 -39
  104. package/src/lib/test/streams.js.map +0 -1
  105. package/src/lib/tokenize/Tokenize.d.ts +0 -22
  106. package/src/lib/tokenize/Tokenize.js +0 -268
  107. package/src/lib/tokenize/Tokenize.js.map +0 -1
  108. package/src/lib/types.js +0 -33
  109. package/src/lib/types.js.map +0 -1
@@ -1,231 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "Tag", {
6
- enumerable: true,
7
- get: function() {
8
- return Tag;
9
- }
10
- });
11
- const _types = require("../types");
12
- let Tag = class Tag {
13
- #content;
14
- #dynamic;
15
- #raw;
16
- #rawBraces;
17
- #type;
18
- #value;
19
- constructor(options){
20
- if (!options.value) {
21
- throw StacheStreamError("`options.value` must contain a string value.");
22
- }
23
- this.#content = options.content || "";
24
- this.#value = options.value;
25
- if (options.rawBraces === true) {
26
- this.#rawBraces = options.rawBraces;
27
- }
28
- }
29
- get content() {
30
- if (_types.ValueTagTypes.includes(this.type)) {
31
- return null;
32
- }
33
- return this.#content;
34
- }
35
- get dynamic() {
36
- return this.#dynamic === undefined ? false : this.#dynamic;
37
- }
38
- /** This should match a key in the Context associated with the template. */ get key() {
39
- return this.#tagName();
40
- }
41
- get raw() {
42
- if (this.#raw === undefined) {
43
- this.#extractValueInformation();
44
- if (this.#raw === undefined) {
45
- throw StacheStreamError("Failed to extract tag raw information from the tag value.");
46
- }
47
- }
48
- return this.#raw;
49
- }
50
- get type() {
51
- if (!this.#type) {
52
- this.#extractValueInformation();
53
- if (!this.#type) {
54
- throw StacheStreamError("Failed to extract tag type information from the tag value.");
55
- }
56
- }
57
- return this.#type;
58
- }
59
- get value() {
60
- return this.#normalizedTagValue();
61
- }
62
- /** The `value` passed to the constructor via the `option` parameter. Only really useful for
63
- * logging; prefer the `Tag.value` property. */ get valueOption() {
64
- return this.#value;
65
- }
66
- static copy(tag, options) {
67
- const { key, ...restOptions } = options || {};
68
- const allOptions = {
69
- content: tag.#content,
70
- rawBraces: tag.#rawBraces,
71
- value: tag.#value,
72
- ...restOptions
73
- };
74
- let nextTag = new Tag(allOptions);
75
- if (key) {
76
- const nextValue = nextTag.#value.replace(nextTag.#tagName(), key);
77
- nextTag = new Tag({
78
- ...allOptions,
79
- value: nextValue
80
- });
81
- }
82
- return nextTag;
83
- }
84
- static parse(tag, tokens = [
85
- "{",
86
- "}"
87
- ]) {
88
- let enterTokenCount = 0;
89
- for(let i = 0; i < tag.length; i++){
90
- if (tag[i] !== tokens[0]) {
91
- break;
92
- }
93
- enterTokenCount++;
94
- }
95
- if (enterTokenCount < 2) {
96
- return;
97
- }
98
- enterTokenCount = enterTokenCount <= 3 ? enterTokenCount : 3;
99
- const tagRight = tag.substring(enterTokenCount);
100
- let exitTokenCount = 0;
101
- for(let i = tagRight.length - 1; 0 <= i; i--){
102
- if (tagRight[i] !== tokens[1]) {
103
- break;
104
- }
105
- exitTokenCount++;
106
- }
107
- if (exitTokenCount < enterTokenCount) {
108
- return;
109
- }
110
- exitTokenCount = enterTokenCount < exitTokenCount ? enterTokenCount : exitTokenCount;
111
- const value = tagRight.substring(0, tagRight.length - exitTokenCount);
112
- if (!value) {
113
- return;
114
- }
115
- // console.log(
116
- // `---\nTag.parse:\n enterTokenCount=${enterTokenCount}\n exitTokenCount=${exitTokenCount}\n value='${value}'`
117
- // );
118
- try {
119
- return new Tag({
120
- value,
121
- rawBraces: enterTokenCount === 3
122
- });
123
- } catch {
124
- return;
125
- }
126
- }
127
- appendContent(text) {
128
- if (!_types.ContentTagTypes.includes(this.type)) {
129
- return;
130
- }
131
- this.#content = (this.#content || "") + text;
132
- }
133
- toJSON() {
134
- return this.toString();
135
- }
136
- toString() {
137
- return `${this.#rawBraces ? "{{{" : "{{"}${this.#value}${this.#rawBraces ? "}}}" : "}}"}`;
138
- }
139
- #extractValueInformation() {
140
- if (this.#rawBraces) {
141
- this.#raw = true;
142
- this.#type = this.value === "." ? "implicit" : "variable";
143
- return;
144
- }
145
- let dynamic = false;
146
- let raw = false;
147
- let tagType = "variable";
148
- const normalizedTagValue = this.value;
149
- switch(normalizedTagValue[0]){
150
- case ".":
151
- {
152
- tagType = "implicit";
153
- break;
154
- }
155
- case ">":
156
- {
157
- if (1 < normalizedTagValue.length && normalizedTagValue[1] === "*") {
158
- throw Error(`Dynamic partials are not implemented; tag value='${this.#value}'`);
159
- dynamic = true;
160
- }
161
- tagType = "partial";
162
- break;
163
- }
164
- case "#":
165
- {
166
- tagType = "section";
167
- break;
168
- }
169
- case "/":
170
- {
171
- tagType = "end";
172
- break;
173
- }
174
- case "&":
175
- {
176
- raw = true;
177
- if (normalizedTagValue.slice(1) === ".") {
178
- tagType = "implicit";
179
- }
180
- break;
181
- }
182
- case "^":
183
- {
184
- tagType = "inverted";
185
- break;
186
- }
187
- case "!":
188
- {
189
- tagType = "comment";
190
- break;
191
- }
192
- case "$":
193
- {
194
- throw Error(`Blocks are not implemented; tag value='${this.#value}'`);
195
- tagType = "block";
196
- break;
197
- }
198
- case "<":
199
- {
200
- if (1 < normalizedTagValue.length && normalizedTagValue[1] === "*") {
201
- throw Error(`Dynamic parents are not implemented; tag value='${this.#value}'`);
202
- dynamic = true;
203
- }
204
- throw Error(`Parents are not implemented; tag value='${this.#value}'`);
205
- tagType = "parent";
206
- break;
207
- }
208
- }
209
- this.#dynamic = dynamic;
210
- this.#raw = raw;
211
- this.#type = tagType;
212
- }
213
- #normalizedTagValue() {
214
- return this.#value.trim().replace(/\s/g, "");
215
- }
216
- #tagName() {
217
- let val = this.#normalizedTagValue();
218
- if (val.startsWith("&") || val.startsWith(">") || val.startsWith("#") || val.startsWith("^") || val.startsWith("/") || val.startsWith("!") || val.startsWith("$") || val.startsWith("<")) {
219
- val = val.substring(1);
220
- }
221
- if (val.startsWith("*")) {
222
- val = val.substring(1);
223
- }
224
- if (val.endsWith("?")) {
225
- val = val.slice(0, -1);
226
- }
227
- return val;
228
- }
229
- };
230
-
231
- //# sourceMappingURL=Tag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../libs/stache-stream/src/lib/tag/Tag.ts"],"sourcesContent":["import {\n ContentTagTagTypes,\n ContentTagTypes,\n Tag as TagType,\n ValueTagTagTypes,\n ValueTagTypes,\n} from \"../types\";\n\nexport class Tag implements TagType {\n #content: string;\n #dynamic: boolean | undefined;\n #raw: boolean | undefined;\n #rawBraces: boolean | undefined;\n #type: ValueTagTagTypes | ContentTagTagTypes | undefined;\n #value: string;\n\n constructor(options: TagOptions) {\n if (!options.value) {\n throw StacheStreamError(\"`options.value` must contain a string value.\");\n }\n\n this.#content = options.content || \"\";\n this.#value = options.value;\n\n if (options.rawBraces === true) {\n this.#rawBraces = options.rawBraces;\n }\n }\n\n get content() {\n if ((ValueTagTypes as readonly string[]).includes(this.type)) {\n return null;\n }\n\n return this.#content;\n }\n\n get dynamic(): boolean {\n return this.#dynamic === undefined ? false : this.#dynamic;\n }\n\n /** This should match a key in the Context associated with the template. */\n get key(): string {\n return this.#tagName();\n }\n\n get raw(): boolean {\n if (this.#raw === undefined) {\n this.#extractValueInformation();\n\n if (this.#raw === undefined) {\n throw StacheStreamError(\n \"Failed to extract tag raw information from the tag value.\"\n );\n }\n }\n\n return this.#raw;\n }\n\n get type(): ValueTagTagTypes | ContentTagTagTypes {\n if (!this.#type) {\n this.#extractValueInformation();\n\n if (!this.#type) {\n throw StacheStreamError(\n \"Failed to extract tag type information from the tag value.\"\n );\n }\n }\n\n return this.#type;\n }\n\n get value(): string {\n return this.#normalizedTagValue();\n }\n\n /** The `value` passed to the constructor via the `option` parameter. Only really useful for\n * logging; prefer the `Tag.value` property. */\n get valueOption(): string {\n return this.#value;\n }\n\n static copy(\n tag: Tag,\n options?: Partial<Omit<TagOptions, \"value\"> & { key?: string }>\n ): Tag {\n const { key, ...restOptions } = options || {};\n\n const allOptions: TagOptions = {\n content: tag.#content,\n rawBraces: tag.#rawBraces,\n value: tag.#value,\n ...restOptions,\n };\n\n let nextTag = new Tag(allOptions);\n\n if (key) {\n const nextValue = nextTag.#value.replace(nextTag.#tagName(), key);\n nextTag = new Tag({ ...allOptions, value: nextValue });\n }\n\n return nextTag;\n }\n\n static parse(\n tag: string,\n tokens: [enter: string, exit: string] = [\"{\", \"}\"]\n ): Tag | undefined {\n let enterTokenCount = 0;\n for (let i = 0; i < tag.length; i++) {\n if (tag[i] !== tokens[0]) {\n break;\n }\n\n enterTokenCount++;\n }\n\n if (enterTokenCount < 2) {\n return;\n }\n\n enterTokenCount = enterTokenCount <= 3 ? enterTokenCount : 3;\n const tagRight = tag.substring(enterTokenCount);\n\n let exitTokenCount = 0;\n for (let i = tagRight.length - 1; 0 <= i; i--) {\n if (tagRight[i] !== tokens[1]) {\n break;\n }\n\n exitTokenCount++;\n }\n\n if (exitTokenCount < enterTokenCount) {\n return;\n }\n\n exitTokenCount =\n enterTokenCount < exitTokenCount ? enterTokenCount : exitTokenCount;\n\n const value = tagRight.substring(0, tagRight.length - exitTokenCount);\n\n if (!value) {\n return;\n }\n\n // console.log(\n // `---\\nTag.parse:\\n enterTokenCount=${enterTokenCount}\\n exitTokenCount=${exitTokenCount}\\n value='${value}'`\n // );\n\n try {\n return new Tag({\n value,\n rawBraces: enterTokenCount === 3,\n });\n } catch {\n return;\n }\n }\n\n appendContent(text: string): void {\n if (!(ContentTagTypes as readonly string[]).includes(this.type)) {\n return;\n }\n\n this.#content = (this.#content || \"\") + text;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n toString(): string {\n return `${this.#rawBraces ? \"{{{\" : \"{{\"}${this.#value}${\n this.#rawBraces ? \"}}}\" : \"}}\"\n }`;\n }\n\n #extractValueInformation(): void {\n if (this.#rawBraces) {\n this.#raw = true;\n this.#type = this.value === \".\" ? \"implicit\" : \"variable\";\n return;\n }\n\n let dynamic = false;\n let raw = false;\n let tagType: ValueTagTagTypes | ContentTagTagTypes = \"variable\";\n const normalizedTagValue = this.value;\n switch (normalizedTagValue[0]) {\n case \".\": {\n tagType = \"implicit\";\n break;\n }\n case \">\": {\n if (1 < normalizedTagValue.length && normalizedTagValue[1] === \"*\") {\n throw Error(\n `Dynamic partials are not implemented; tag value='${this.#value}'`\n );\n dynamic = true;\n }\n tagType = \"partial\";\n break;\n }\n case \"#\": {\n tagType = \"section\";\n break;\n }\n case \"/\": {\n tagType = \"end\";\n break;\n }\n case \"&\": {\n raw = true;\n if (normalizedTagValue.slice(1) === \".\") {\n tagType = \"implicit\";\n }\n break;\n }\n case \"^\": {\n tagType = \"inverted\";\n break;\n }\n case \"!\": {\n tagType = \"comment\";\n break;\n }\n case \"$\": {\n throw Error(`Blocks are not implemented; tag value='${this.#value}'`);\n tagType = \"block\";\n break;\n }\n case \"<\": {\n if (1 < normalizedTagValue.length && normalizedTagValue[1] === \"*\") {\n throw Error(\n `Dynamic parents are not implemented; tag value='${this.#value}'`\n );\n dynamic = true;\n }\n throw Error(`Parents are not implemented; tag value='${this.#value}'`);\n tagType = \"parent\";\n break;\n }\n }\n\n this.#dynamic = dynamic;\n this.#raw = raw;\n this.#type = tagType;\n }\n\n #normalizedTagValue(): string {\n return this.#value.trim().replace(/\\s/g, \"\");\n }\n\n #tagName(): string {\n let val = this.#normalizedTagValue();\n if (\n val.startsWith(\"&\") ||\n val.startsWith(\">\") ||\n val.startsWith(\"#\") ||\n val.startsWith(\"^\") ||\n val.startsWith(\"/\") ||\n val.startsWith(\"!\") ||\n val.startsWith(\"$\") ||\n val.startsWith(\"<\")\n ) {\n val = val.substring(1);\n }\n\n if (val.startsWith(\"*\")) {\n val = val.substring(1);\n }\n\n if (val.endsWith(\"?\")) {\n val = val.slice(0, -1);\n }\n\n return val;\n }\n}\n\nexport interface TagAttributes {\n dynamic?: boolean;\n raw: boolean;\n tagType?: ContentTagTagTypes | ValueTagTagTypes;\n}\n\ninterface TagOptions {\n rawBraces?: boolean;\n content?: string;\n value: string;\n}\n"],"names":["Tag","content","dynamic","raw","rawBraces","type","value","constructor","options","StacheStreamError","ValueTagTypes","includes","undefined","key","tagName","extractValueInformation","normalizedTagValue","valueOption","copy","tag","restOptions","allOptions","nextTag","nextValue","replace","parse","tokens","enterTokenCount","i","length","tagRight","substring","exitTokenCount","appendContent","text","ContentTagTypes","toJSON","toString","tagType","Error","slice","trim","val","startsWith","endsWith"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { ReadableStream } from "node:stream/web";
2
- import { EventEmitter } from "node:events";
3
- import type { ContextProvider, ContextTypes, Tag as TagType, WriteToOutput } from "../types";
4
- export declare class Template extends EventEmitter<{
5
- inactive: [undefined];
6
- }> implements ContextProvider {
7
- #private;
8
- constructor({ contextProvider, readable, writeToOutput, ...options }: ConstructorParameters<typeof EventEmitter<{
9
- inactive: [undefined];
10
- }>>[0] & {
11
- contextProvider?: ContextProvider;
12
- readable: ReadableStream<string>;
13
- writeToOutput: WriteToOutput;
14
- });
15
- getContextValue<CTX extends ContextTypes>(tag: TagType): Promise<CTX | undefined>;
16
- read(): Template;
17
- get context(): ContextTypes;
18
- }