@oscarpalmer/abydon 0.3.0 → 0.4.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/dist/index.js CHANGED
@@ -34,22 +34,41 @@ function getNodes(node) {
34
34
  return /^documentfragment$/i.test(node.constructor.name) ? [...node.childNodes] : [node];
35
35
  }
36
36
 
37
+ // src/fragment.ts
38
+ function createFragment(strings, expressions) {
39
+ const data = {
40
+ expressions,
41
+ strings,
42
+ nodes: []
43
+ };
44
+ const instance = Object.create({
45
+ append(parent) {
46
+ if (data.nodes.length > 0) {
47
+ return parent.append(...data.nodes);
48
+ }
49
+ const parsed = parse(data);
50
+ const templated = createTemplate(parsed);
51
+ data.nodes.splice(0, data.nodes.length, ...getNodes(templated));
52
+ parent.append(...data.nodes);
53
+ }
54
+ });
55
+ return instance;
56
+ }
57
+
37
58
  // src/html.ts
38
- function html(strings, ...values) {
39
- const parsed = parse(strings, values);
40
- const templated = createTemplate(parsed);
41
- return getNodes(templated);
59
+ function html2(strings, ...values) {
60
+ return createFragment(strings, values);
42
61
  }
43
- var parse = function(parts, values) {
44
- const { length } = parts;
62
+ function parse(data) {
63
+ const { length } = data.strings;
45
64
  let template = "";
46
65
  for (let index = 0;index < length; index += 1) {
47
- const part = parts[index];
48
- const value = values[index];
49
- template += isNullableOrWhitespace(value) ? part : `${part}${value}`;
66
+ const part = data.strings[index];
67
+ const expression = data.expressions[index];
68
+ template += isNullableOrWhitespace(expression) ? part : `${part}${expression}`;
50
69
  }
51
70
  return template;
52
- };
71
+ }
53
72
  export {
54
- html
73
+ html2 as html
55
74
  };
package/package.json CHANGED
@@ -35,5 +35,5 @@
35
35
  "watch": "bun build ./src/index.ts --outfile ./dist/index.js --watch"
36
36
  },
37
37
  "types": "src/types.d.ts",
38
- "version": "0.3.0"
38
+ "version": "0.4.0"
39
39
  }
@@ -0,0 +1,40 @@
1
+ import {createTemplate, getNodes} from './helpers/dom';
2
+ import {parse} from './html';
3
+
4
+ export type Fragment = {
5
+ append(parent: Node): void;
6
+ };
7
+
8
+ export type FragmentData = {
9
+ expressions: unknown[];
10
+ nodes: Node[];
11
+ strings: TemplateStringsArray;
12
+ };
13
+
14
+ export function createFragment(
15
+ strings: TemplateStringsArray,
16
+ expressions: unknown[],
17
+ ): Fragment {
18
+ const data: FragmentData = {
19
+ expressions,
20
+ strings,
21
+ nodes: [],
22
+ };
23
+
24
+ const instance = Object.create({
25
+ append(parent: ParentNode) {
26
+ if (data.nodes.length > 0) {
27
+ return parent.append(...data.nodes);
28
+ }
29
+
30
+ const parsed = parse(data);
31
+ const templated = createTemplate(parsed);
32
+
33
+ data.nodes.splice(0, data.nodes.length, ...getNodes(templated));
34
+
35
+ parent.append(...data.nodes);
36
+ },
37
+ });
38
+
39
+ return instance;
40
+ }
package/src/html.ts CHANGED
@@ -1,26 +1,25 @@
1
1
  import {isNullableOrWhitespace} from '@oscarpalmer/atoms/is';
2
- import {createTemplate, getNodes} from './helpers/dom';
2
+ import {createFragment, type FragmentData, type Fragment} from './fragment';
3
3
 
4
4
  export function html(
5
5
  strings: TemplateStringsArray,
6
6
  ...values: unknown[]
7
- ): Node[] {
8
- const parsed = parse(strings, values);
9
- const templated = createTemplate(parsed);
10
-
11
- return getNodes(templated);
7
+ ): Fragment {
8
+ return createFragment(strings, values);
12
9
  }
13
10
 
14
- function parse(parts: TemplateStringsArray, values: unknown[]): string {
15
- const {length} = parts;
11
+ export function parse(data: FragmentData): string {
12
+ const {length} = data.strings;
16
13
 
17
14
  let template = '';
18
15
 
19
16
  for (let index = 0; index < length; index += 1) {
20
- const part = parts[index];
21
- const value = values[index];
17
+ const part = data.strings[index];
18
+ const expression = data.expressions[index];
22
19
 
23
- template += isNullableOrWhitespace(value) ? part : `${part}${value}`;
20
+ template += isNullableOrWhitespace(expression)
21
+ ? part
22
+ : `${part}${expression}`;
24
23
  }
25
24
 
26
25
  return template;
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
- export * from './html';
1
+ export type {Fragment} from './fragment';
2
+ export {html} from './html';
@@ -0,0 +1,9 @@
1
+ export type Fragment = {
2
+ append(parent: Node): void;
3
+ };
4
+ export type FragmentData = {
5
+ expressions: unknown[];
6
+ nodes: Node[];
7
+ strings: TemplateStringsArray;
8
+ };
9
+ export declare function createFragment(strings: TemplateStringsArray, expressions: unknown[]): Fragment;
package/types/html.d.ts CHANGED
@@ -1 +1,3 @@
1
- export declare function html(strings: TemplateStringsArray, ...values: unknown[]): Node[];
1
+ import { type FragmentData, type Fragment } from './fragment';
2
+ export declare function html(strings: TemplateStringsArray, ...values: unknown[]): Fragment;
3
+ export declare function parse(data: FragmentData): string;
package/types/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export * from './html';
1
+ export type { Fragment } from './fragment';
2
+ export { html } from './html';