@longform/longform 0.0.4 → 0.0.6

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.
@@ -0,0 +1,511 @@
1
+ 'use strict';
2
+
3
+ const sniffTestRe = /^(?:(?:(--).*)|(?: *(@|#).*)|(?: *[\w\-]+(?::[\w\-]+)?(?:[#.[][^\n]+)?(::).*)|(?: +([\["]).*)|(\ \ .*))$/gmi, element1 = /((?:\ \ )+)? ?([\w\-]+(?::[\w\-]+)?)([#\.\[][^\n]*)?::(?: ({{?|[^\n]+))?/gmi, directive1 = /((?:\ \ )+)? ?@([\w][\w\-]+)(?::: ?([^\n]+)?)?/gmi, attribute1 = /((?:\ \ )+)\[(\w[\w-]*(?::\w[\w-]*)?)(?:=([^\n]+))?\]/, preformattedClose = /[ \t]*}}?[ \t]*/, id1 = /((?:\ \ )+)?#(#)?([\w\-]+)(?: ([\["]))?/gmi, idnt1 = /^(\ \ )+/, text1 = /^((?:\ \ )+)([^ \n][^\n]*)$/i, paramsRe = /(?:(#|\.)([^#.\[\n]+)|(?:\[(\w[\w\-]*(?::\w[\w\-]*)?)(?:=([^\n\]]+))?\]))/g, refRe = /#\[([\w\-]+)\]/g, escapeRe = /([&<>"'#\[\]{}])/g, templateLinesRe = /^(\ \ )?([^\n]+)$/gmi, voids = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wrb']);
4
+ let m1, m2, m3;
5
+ const entities = {
6
+ '&': '&amp;',
7
+ '<': '&lt;',
8
+ '>': '&gt;',
9
+ '"': '&quot;',
10
+ "'": '&apos;',
11
+ // '#': '&num;',
12
+ // '[': '&lbrak;',
13
+ // ']': '&rbrak;',
14
+ // '{': '&rbrace;',
15
+ // '}': '&lbrace;',
16
+ };
17
+ function escape(value) {
18
+ return value.replace(escapeRe, (match) => {
19
+ return entities[match] ?? match;
20
+ });
21
+ }
22
+ function makeElement(indent = 0) {
23
+ return {
24
+ indent,
25
+ html: '',
26
+ attrs: {},
27
+ };
28
+ }
29
+ function makeFragment(type = 'bare') {
30
+ return {
31
+ type,
32
+ html: '',
33
+ template: false,
34
+ mountable: false,
35
+ els: [],
36
+ refs: [],
37
+ mountPoints: [],
38
+ };
39
+ }
40
+ /**
41
+ * Parses a longform document into a object containing the root and fragments
42
+ * in the output format.
43
+ *
44
+ * @param {string} doc - The longform document to parse.
45
+ * @returns {ParsedResult}
46
+ */
47
+ function longform(doc, debug = () => { }) {
48
+ let textIndent = null, verbatimSerialize = true, verbatimIndent = null, verbatimFirst = false, element = makeElement(), fragment = makeFragment()
49
+ // the root fragment
50
+ , root = null;
51
+ // ids of claimed fragments
52
+ const claimed = new Set()
53
+ // parsed fragments
54
+ , parsed = new Map(), output = Object.create(null);
55
+ output.fragments = Object.create(null);
56
+ output.templates = Object.create(null);
57
+ /**
58
+ * Closes any current in progress element definition
59
+ * and creates a new working element.
60
+ */
61
+ function applyIndent(targetIndent) {
62
+ if (element.tag != null) {
63
+ const root = fragment.type === 'range'
64
+ ? targetIndent < 2
65
+ : fragment.html === '';
66
+ fragment.html += `<${element.tag}`;
67
+ if (root) {
68
+ if (fragment.type === 'root') {
69
+ fragment.html += ` data-lf-root`;
70
+ }
71
+ else if (fragment.type === 'bare' || fragment.type === 'range') {
72
+ fragment.html += ` data-lf="${fragment.id}"`;
73
+ }
74
+ }
75
+ if (element.mount != null) {
76
+ fragment.html += ` data-lf-mount="${element.mount}"`;
77
+ }
78
+ if (element.id != null) {
79
+ fragment.html += ' id="' + element.id + '"';
80
+ }
81
+ if (element.class != null) {
82
+ fragment.html += ' class="' + element.class + '"';
83
+ }
84
+ for (const attr of Object.entries(element.attrs)) {
85
+ if (attr[1] == null) {
86
+ fragment.html += ' ' + attr[0];
87
+ }
88
+ else {
89
+ fragment.html += ` ${attr[0]}="${attr[1]}"`;
90
+ }
91
+ }
92
+ fragment.html += '>';
93
+ if (!voids.has(element.tag) && element.text != null) {
94
+ fragment.html += element.text;
95
+ }
96
+ if (!voids.has(element.tag)) {
97
+ fragment.els.push(element);
98
+ }
99
+ }
100
+ if (targetIndent <= element.indent) {
101
+ element = makeElement(targetIndent);
102
+ while (fragment.els.length !== 0 && (targetIndent == null ||
103
+ fragment.els[fragment.els.length - 1].indent !== targetIndent - 1)) {
104
+ const element = fragment.els.pop();
105
+ fragment.html += `</${element?.tag}>`;
106
+ }
107
+ if (targetIndent === 0) {
108
+ debug(0, '<', fragment.type, fragment.id);
109
+ if (fragment.template) {
110
+ output.templates[fragment.id] = fragment.html;
111
+ }
112
+ else if (fragment.type === 'root') {
113
+ root = fragment;
114
+ }
115
+ else {
116
+ parsed.set(fragment.id, fragment);
117
+ }
118
+ fragment = makeFragment();
119
+ }
120
+ }
121
+ else {
122
+ element = makeElement(targetIndent);
123
+ }
124
+ }
125
+ while ((m1 = sniffTestRe.exec(doc))) {
126
+ if (m1[1] === '--') {
127
+ continue;
128
+ }
129
+ else if (fragment.template) {
130
+ fragment.html += m1[0];
131
+ }
132
+ // If this is a script tag or preformatted block
133
+ // we want to retain the intended formatting less
134
+ // the indent. Preformatting can apply to any element
135
+ // by ending the declaration with `:: {`.
136
+ if (verbatimIndent != null) {
137
+ // inside a script or preformatted block
138
+ idnt1.lastIndex = 0;
139
+ m2 = idnt1.exec(m1[0]);
140
+ const indent = m2 == null
141
+ ? null
142
+ : m2[0].length / 2;
143
+ if (m2 == null || indent <= verbatimIndent) {
144
+ fragment.html += '\n';
145
+ debug(indent, '}', m2?.[0]);
146
+ applyIndent(indent);
147
+ verbatimIndent = null;
148
+ verbatimFirst = false;
149
+ textIndent = indent;
150
+ if (preformattedClose.test(m1[0])) {
151
+ continue;
152
+ }
153
+ }
154
+ else {
155
+ const line = m1[0].replace(' '.repeat(verbatimIndent + 1), '');
156
+ debug(indent, '{', line);
157
+ if (element.tag != null) {
158
+ applyIndent(indent);
159
+ }
160
+ if (verbatimFirst) {
161
+ verbatimFirst = false;
162
+ }
163
+ else {
164
+ fragment.html += '\n';
165
+ }
166
+ if (verbatimSerialize) {
167
+ fragment.html += escape(line);
168
+ }
169
+ else {
170
+ fragment.html += line;
171
+ }
172
+ continue;
173
+ }
174
+ }
175
+ if (m1[0].trim() === '') {
176
+ continue;
177
+ }
178
+ switch (m1[2] ?? m1[3] ?? m1[4]) {
179
+ // deno-lint-ignore no-fallthrough
180
+ case '#': {
181
+ id1.lastIndex = 0;
182
+ m2 = id1.exec(m1[0]);
183
+ if (m2 != null) {
184
+ const indent = (m2[1]?.length ?? 0) / 2;
185
+ if (element.tag != null || textIndent != null) {
186
+ applyIndent(indent);
187
+ textIndent = null;
188
+ }
189
+ debug(indent, 'id', m2[2], m2[3], m2[4]);
190
+ fragment.id = m2[3];
191
+ if (indent === 0) {
192
+ if (m2[4] == '[') {
193
+ fragment.type = 'range';
194
+ }
195
+ else if (m2[4] === '"') {
196
+ fragment.type = 'text';
197
+ }
198
+ else if (m2[2] != null) {
199
+ fragment.type = 'bare';
200
+ }
201
+ else {
202
+ fragment.type = 'embed';
203
+ element.id = fragment.id;
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ }
209
+ case '@':
210
+ case '[':
211
+ // deno-lint-ignore no-fallthrough
212
+ case '::': {
213
+ element1.lastIndex = 0;
214
+ // fall through if m1[3] is a # or @
215
+ m2 = m1[2] ?? m1[4] != null
216
+ ? null
217
+ : element1.exec(m1[0]);
218
+ // if null then invalid element selector
219
+ // allow the default text case to handle
220
+ if (m2 != null) {
221
+ const indent = (m2[1]?.length ?? 0) / 2, tg = m2[2], ar = m2[3], pr = m2[4] === '{' || m2[4] === '{{';
222
+ const tx = pr ? null : m2[4];
223
+ debug(indent, 'e', tg, pr, tx);
224
+ if (element.tag != null ||
225
+ element.indent > indent) {
226
+ applyIndent(indent);
227
+ }
228
+ element.indent = indent;
229
+ element.tag = tg;
230
+ textIndent = null;
231
+ if (indent === 0 && fragment.id == null) {
232
+ if (root != null) ;
233
+ else {
234
+ fragment.type = 'root';
235
+ root = fragment;
236
+ }
237
+ }
238
+ if (ar != null) {
239
+ debug(indent, 'a', ar);
240
+ while ((m2 = paramsRe.exec(ar))) {
241
+ if (m2[1] === '#') {
242
+ element.id = m2[2];
243
+ }
244
+ else if (m2[1] === '.') {
245
+ if (element.class == null) {
246
+ element.class = m2[2];
247
+ }
248
+ else {
249
+ element.class += ' ' + m2[2];
250
+ }
251
+ }
252
+ else {
253
+ if (m2[3] === 'id') {
254
+ if (element.id == null) {
255
+ element.id = m2[4];
256
+ }
257
+ }
258
+ else if (m2[3] === 'class') {
259
+ if (element.class == null) {
260
+ element.class = m2[4];
261
+ }
262
+ else {
263
+ element.class += ' ' + m2[4];
264
+ }
265
+ }
266
+ else {
267
+ element.attrs[m2[3]] = m2[4];
268
+ }
269
+ }
270
+ }
271
+ }
272
+ // this is a hack to get temp support of mounting
273
+ // working. In the future it will be moved to a
274
+ // server specific process.
275
+ if (element.mount != null) {
276
+ const id = element.mount;
277
+ applyIndent(indent + 1);
278
+ fragment.mountPoints.push({
279
+ id,
280
+ part: fragment.html,
281
+ });
282
+ fragment.html = '';
283
+ applyIndent(indent);
284
+ break;
285
+ }
286
+ if (!pr && tx != null) {
287
+ element.text = tx;
288
+ }
289
+ else if (pr) {
290
+ verbatimFirst = true;
291
+ verbatimIndent = indent;
292
+ verbatimSerialize = m2[4] === '{';
293
+ }
294
+ break;
295
+ }
296
+ attribute1.lastIndex = 0;
297
+ m2 = m1[2] != null
298
+ ? null
299
+ : attribute1.exec(m1[0]);
300
+ if (m2 != null && element.tag != null) {
301
+ debug('a', m2[2], m2[3]);
302
+ if (m2[2] === 'id') {
303
+ if (element.id == null) {
304
+ element.id = m2[3].trim();
305
+ }
306
+ }
307
+ else if (m2[2] === 'class') {
308
+ if (element.class != null) {
309
+ element.class += ' ' + m2[3].trim();
310
+ }
311
+ else {
312
+ element.class = m2[3].trim();
313
+ }
314
+ }
315
+ else if (element.attrs[m2[2]] != null) {
316
+ element.attrs[m2[2]] += m2[3];
317
+ }
318
+ else {
319
+ element.attrs[m2[2]] = m2[3];
320
+ }
321
+ break;
322
+ }
323
+ directive1.lastIndex = 0;
324
+ m2 = m1[3] != null
325
+ ? null
326
+ : directive1.exec(m1[0]);
327
+ if (m2 != null) {
328
+ const indent = (m2[1]?.length ?? 0) / 2;
329
+ if (element.tag != null || textIndent != null) {
330
+ applyIndent(indent);
331
+ }
332
+ debug(indent, 'd', m2[2], m2[3]);
333
+ switch (m2[2]) {
334
+ case 'doctype': {
335
+ fragment.html += `<!doctype ${m2[3] ?? 'html'}>`;
336
+ break;
337
+ }
338
+ case 'xml': {
339
+ fragment.html += `<?xml ${m2[3] ?? 'version="1.0" encoding="UTF-8"'}?>`;
340
+ break;
341
+ }
342
+ case 'template': {
343
+ let indented = false;
344
+ fragment.template = indent === 0;
345
+ templateLinesRe.lastIndex = sniffTestRe.lastIndex;
346
+ while ((m2 = templateLinesRe.exec(doc))) {
347
+ if (m2[1] == null && !indented && fragment.id == null) {
348
+ id1.lastIndex = 0;
349
+ m3 = id1.exec(m2[0]);
350
+ if (m3 != null)
351
+ fragment.id = m3[3];
352
+ fragment.html += m2[0];
353
+ }
354
+ else if (m2[1] == null && indented) {
355
+ sniffTestRe.lastIndex = templateLinesRe.lastIndex - m2[0].length;
356
+ break;
357
+ }
358
+ else {
359
+ fragment.html += '\n' + m2[0];
360
+ if (m2[1] != null)
361
+ indented = true;
362
+ }
363
+ }
364
+ applyIndent(0);
365
+ break;
366
+ }
367
+ case 'mount': {
368
+ if (m2[3] == null) {
369
+ throw new Error('Mount points must have a name');
370
+ }
371
+ else if (fragment.type !== 'root') {
372
+ throw new Error('Mounting is only allowed on a root element');
373
+ }
374
+ fragment.mountable = true;
375
+ element.mount = m2[3].trim();
376
+ break;
377
+ }
378
+ }
379
+ break;
380
+ }
381
+ }
382
+ default: {
383
+ m2 = text1.exec(m1[0]);
384
+ if (m2 == null) {
385
+ break;
386
+ }
387
+ const indent = m2[1].length / 2;
388
+ const tx = m2[2].trim();
389
+ debug(indent, 't', m2[2]);
390
+ if (element.tag != null) {
391
+ applyIndent(indent);
392
+ fragment.html += tx;
393
+ }
394
+ else if (fragment.type === 'text' && fragment.html === '') {
395
+ fragment.html += tx;
396
+ }
397
+ else {
398
+ fragment.html += ' ' + tx;
399
+ }
400
+ textIndent = indent;
401
+ while ((m2 = refRe.exec(tx))) {
402
+ const start = fragment.html.length + m2.index - tx.length;
403
+ fragment.refs.push({
404
+ id: m2[1],
405
+ start,
406
+ end: start + m2[0].length,
407
+ });
408
+ }
409
+ break;
410
+ }
411
+ }
412
+ }
413
+ applyIndent(0);
414
+ const arr = Array.from(parsed.values());
415
+ function flatten(fragment) {
416
+ // work backwards so we don't change the html string length
417
+ // for the later replacements
418
+ for (let j = fragment.refs.length - 1; j >= 0; j--) {
419
+ const ref = fragment.refs[j];
420
+ if (claimed.has(ref.id) || !parsed.has(ref.id)) {
421
+ fragment.html = fragment.html.slice(0, ref.start)
422
+ + fragment.html.slice(ref.end);
423
+ }
424
+ else {
425
+ const child = flatten(parsed.get(ref.id));
426
+ fragment.html = fragment.html.slice(0, ref.start)
427
+ + child.html
428
+ + fragment.html.slice(ref.end);
429
+ if (child.type === 'embed') {
430
+ claimed.add(child.id);
431
+ }
432
+ }
433
+ }
434
+ fragment.refs = [];
435
+ return fragment;
436
+ }
437
+ if (root?.mountable) {
438
+ output.mountable = true;
439
+ output.tail = root.html;
440
+ output.mountPoints = root.mountPoints;
441
+ return output;
442
+ }
443
+ for (let i = 0; i < parsed.size + 1; i++) {
444
+ let fragment;
445
+ if (i === 0 && root == null) {
446
+ continue;
447
+ }
448
+ else if (i === 0) {
449
+ fragment = root;
450
+ }
451
+ else {
452
+ fragment = arr[i - 1];
453
+ }
454
+ if (fragment.refs.length === 0) {
455
+ continue;
456
+ }
457
+ flatten(fragment);
458
+ }
459
+ if (root?.html != null) {
460
+ output.root = root.html;
461
+ output.selector = `[data-lf-root]`;
462
+ }
463
+ for (let i = 0; i < arr.length; i++) {
464
+ let selector;
465
+ const fragment = arr[i];
466
+ if (fragment == null || claimed.has(fragment.id)) {
467
+ continue;
468
+ }
469
+ if (fragment.type === 'embed') {
470
+ selector = `[id=${fragment.id}]`;
471
+ }
472
+ else if (fragment.type === 'bare') {
473
+ selector = `[data-lf=${fragment.id}]`;
474
+ }
475
+ else if (fragment.type === 'range') {
476
+ selector = `[data-lf=${fragment.id}]`;
477
+ }
478
+ output.fragments[fragment.id] = {
479
+ id: fragment.id,
480
+ selector,
481
+ type: fragment.type,
482
+ html: fragment.html,
483
+ };
484
+ }
485
+ return output;
486
+ }
487
+ const templateRe = /(?:#{([\w][\w\-_]*)})|(?:#\[([\w][\w\-_]+)\])/g;
488
+ /**
489
+ * Processes a client side Longform template to HTML fragment string.
490
+ *
491
+ * @param fragment - The fragment identifier.
492
+ * @param args - A record of template arguments.
493
+ * @param getFragment - A function which returns an already processed fragment's HTML string.
494
+ * @returns The processed template.
495
+ */
496
+ function processTemplate(template, args, getFragment) {
497
+ const lf = template.replace(templateRe, (_match, param, ref) => {
498
+ if (ref != null) {
499
+ const fragment = getFragment(ref);
500
+ if (fragment == null)
501
+ return '';
502
+ return fragment;
503
+ }
504
+ return args[param] != null ? escape(args[param].toString()) : '';
505
+ });
506
+ return Object.values(longform(lf).fragments)[0]?.html ?? null;
507
+ }
508
+
509
+ exports.longform = longform;
510
+ exports.processTemplate = processTemplate;
511
+ //# sourceMappingURL=longform.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longform.cjs","sources":["../lib/lib/mod.js/longform.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,70 +1,18 @@
1
- declare module "types" {
2
- export type WorkingElement = {
3
- indent: number;
4
- key?: string;
5
- id?: string;
6
- tag?: string;
7
- class?: string;
8
- attrs: Record<string, string | null>;
9
- text?: string;
10
- html: string;
11
- mount?: string;
12
- };
13
- export type WorkingFragmentType = 'root' | 'embed' | 'bare' | 'range' | 'text' | 'mount' | 'template';
14
- export type FragmentType = 'embed' | 'bare' | 'range' | 'text';
15
- export type FragmentRef = {
16
- id: string;
17
- start: number;
18
- end: number;
19
- };
20
- export type WorkingFragment = {
21
- id?: string;
22
- template: boolean;
23
- mountable: boolean;
24
- type: WorkingFragmentType;
25
- html: string;
26
- refs: FragmentRef[];
27
- els: WorkingElement[];
28
- mountPoints: MountPoint[];
29
- };
30
- export type Fragment = {
31
- id: string;
32
- selector: string;
33
- type: FragmentType;
34
- html: string;
35
- };
36
- export type MountPoint = {
37
- id: string;
38
- part: string;
39
- };
40
- export type ParsedResult = {
41
- mountable?: boolean;
42
- root: string | null;
43
- selector: string | null;
44
- mountPoints: MountPoint[];
45
- tail?: string;
46
- fragments: Record<string, Fragment>;
47
- templates: Record<string, string>;
48
- };
49
- }
50
- declare module "longform" {
51
- import type { FragmentType, ParsedResult, Fragment } from "types";
52
- export type { FragmentType, Fragment, ParsedResult };
53
- /**
54
- * Parses a longform document into a object containing the root and fragments
55
- * in the output format.
56
- *
57
- * @param {string} doc - The longform document to parse.
58
- * @returns {ParsedResult}
59
- */
60
- export function longform(doc: string, debug?: (...d: unknown[]) => void): ParsedResult;
61
- /**
62
- * Processes a client side Longform template to HTML fragment string.
63
- *
64
- * @param fragment - The fragment identifier.
65
- * @param args - A record of template arguments.
66
- * @param getFragment - A function which returns an already processed fragment's HTML string.
67
- * @returns The processed template.
68
- */
69
- export function processTemplate(template: string, args: Record<string, string | number>, getFragment: (fragment: string) => string | undefined): string | undefined;
70
- }
1
+ import type { ParsedResult } from "./types.ts";
2
+ /**
3
+ * Parses a longform document into a object containing the root and fragments
4
+ * in the output format.
5
+ *
6
+ * @param {string} doc - The longform document to parse.
7
+ * @returns {ParsedResult}
8
+ */
9
+ export declare function longform(doc: string, debug?: (...d: unknown[]) => void): ParsedResult;
10
+ /**
11
+ * Processes a client side Longform template to HTML fragment string.
12
+ *
13
+ * @param fragment - The fragment identifier.
14
+ * @param args - A record of template arguments.
15
+ * @param getFragment - A function which returns an already processed fragment's HTML string.
16
+ * @returns The processed template.
17
+ */
18
+ export declare function processTemplate(template: string, args: Record<string, string | number>, getFragment: (fragment: string) => string | undefined): string | undefined;