littoral-templates 0.2.1 → 0.3.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/CHANGELOG.md +19 -0
- package/README.md +132 -25
- package/dist/index.d.ts +63 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -26
- package/dist/index.js.map +1 -1
- package/package.json +12 -5
package/CHANGELOG.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## 0.3.0
|
5
|
+
|
6
|
+
* Turn the package into an ESM module (back again).
|
7
|
+
(Should work with Deno in the meanwhile.)
|
8
|
+
* Update dependencies: no impact on shipped code.
|
9
|
+
* Add functions: `when`, `withNewlineAppended`, and `commaSeparated`.
|
10
|
+
* Rename `NestedString` to `Template`, leaving `NestedString` as an alias.
|
11
|
+
This is not a breaking change, but I might deprecate and remove `NestedString` in the future.
|
12
|
+
* Add {T|J}SDoc.
|
13
|
+
|
14
|
+
|
15
|
+
## 0.2.2
|
16
|
+
|
17
|
+
* Fix internal `flatten` function for empty arrays.
|
18
|
+
+ Use “fat arrow” syntax everywhere.
|
19
|
+
* Improve unit testing setup using Mocha + Chai.
|
20
|
+
(No impact on shipped code.)
|
21
|
+
|
22
|
+
|
4
23
|
## 0.2.1
|
5
24
|
|
6
25
|
* Declare as a CommonJS module again.
|
package/README.md
CHANGED
@@ -3,48 +3,155 @@
|
|
3
3
|
A small JavaScript/TypeScript framework to do templating comfortably using the [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) syntax in either JavaScript or TypeScript.
|
4
4
|
It doesn't come with its own syntax, like frameworks like [mustache](https://mustache.github.io/), and [handlebars](https://handlebarsjs.com/) do.
|
5
5
|
|
6
|
-
The repository's name is a play on "temporal literals" and "littoral", begin phonetically close to "literal".
|
7
|
-
The latter word indicates the part of a body of water (lake, sea, or ocean) that's closest to shore, usually shallow, and possibly not always entirely submerged.
|
8
|
-
The name tries to convey that implementing templates with this framework doesn't require you to "wade too far into the water".
|
9
|
-
|
10
6
|
Instead, templates look as follows:
|
11
7
|
|
12
8
|
```typescript
|
13
|
-
|
9
|
+
[
|
10
|
+
`top-level`,
|
11
|
+
[ `still top-level, but on a new line` ],
|
12
|
+
indent(1)([
|
13
|
+
`this is indented (1 level)`,
|
14
|
+
indent(2)([
|
15
|
+
`this is much more indented (3 levels)`
|
16
|
+
])
|
17
|
+
])
|
18
|
+
]
|
19
|
+
```
|
20
|
+
|
21
|
+
Instances of the `Template` type are arrays of strings nested to an arbitrary depth/level.
|
22
|
+
(Depth 0 corresponds to a single string).
|
23
|
+
To convert this to a proper string, use the `asString` function, as follows:
|
24
|
+
|
25
|
+
```typescript
|
26
|
+
import {asString, indentWith} from "littoral-templates"
|
14
27
|
|
15
|
-
const indent = indentWith("
|
28
|
+
const indent = indentWith(" ")
|
16
29
|
|
17
30
|
console.log(
|
18
|
-
asString(
|
19
|
-
`top-level`,
|
20
|
-
[ `still top-level, but on a new line` ],
|
21
|
-
indent(1)([
|
22
|
-
`this is indented (1 level)`,
|
23
|
-
indent(2)([
|
24
|
-
`this is much more indented (3 levels)`
|
25
|
-
])
|
26
|
-
])
|
27
|
-
])
|
31
|
+
asString(<the template from the listing above>)
|
28
32
|
)
|
29
|
-
|
30
33
|
```
|
31
34
|
|
32
|
-
(The contents of the code above can be found in [`src/test/test-in-README.ts`](./src/test/test-in-README.ts) as well.)
|
33
35
|
This code produces the following text on the JavaScript console:
|
34
36
|
|
35
37
|
```
|
36
38
|
top-level
|
37
39
|
still top-level, but on a new line
|
38
|
-
|
39
|
-
|
40
|
+
this is indented (1 level)
|
41
|
+
this is even more indented (3 levels)
|
42
|
+
```
|
43
|
+
|
44
|
+
|
45
|
+
### Iterating over collections
|
46
|
+
|
47
|
+
A common activity in templates is to iterate over a collection and map each item to text.
|
48
|
+
These sub-texts would then have to be joined together, and taking care of correct indentation is then usually quite a hassle.
|
49
|
+
Using the `Template` type, you can simply use the `Array.map` function, as follows:
|
50
|
+
|
51
|
+
```typescript
|
52
|
+
import {asString, indentWith} from "littoral-templates"
|
53
|
+
|
54
|
+
const indent = indentWith(" ")
|
55
|
+
|
56
|
+
console.log(
|
57
|
+
asString([
|
58
|
+
`my items:`,
|
59
|
+
indent(1)(
|
60
|
+
["foo", "bar"].map((item, index) => `item ${index + 1}: "${item}"`)
|
61
|
+
)
|
62
|
+
])
|
63
|
+
)
|
64
|
+
```
|
65
|
+
|
66
|
+
This code produces the following text on the JavaScript console:
|
67
|
+
|
68
|
+
```
|
69
|
+
my items:
|
70
|
+
item 1: foo
|
71
|
+
item 2: bar
|
72
|
+
```
|
73
|
+
|
74
|
+
|
75
|
+
### Including content conditionally
|
76
|
+
|
77
|
+
Another common activity in templates is to include some content conditionally.
|
78
|
+
This package provides the convenient `when` function for that.
|
79
|
+
An example of its usage is as follows:
|
80
|
+
|
81
|
+
```typescript
|
82
|
+
[
|
83
|
+
`foo`,
|
84
|
+
`bar`,
|
85
|
+
when(n === 3)([
|
86
|
+
`lizard`,
|
87
|
+
`sfdeljknesv`
|
88
|
+
])
|
89
|
+
]
|
90
|
+
```
|
40
91
|
|
92
|
+
After applying the `asString`, and assuming the variable `n` holds the value `3`, this evaluates to:
|
93
|
+
|
94
|
+
```
|
95
|
+
foo
|
96
|
+
bar
|
97
|
+
lizard
|
98
|
+
sfdeljknesv
|
99
|
+
```
|
100
|
+
|
101
|
+
In case the argument to the function call after `when(<some boolean condition>)` has side effects, you want to turn that into a thunk, as follows:
|
102
|
+
|
103
|
+
```typescript
|
104
|
+
let touched = 0
|
105
|
+
const template = [
|
106
|
+
`foo`,
|
107
|
+
`bar`,
|
108
|
+
when(n === 3)(() => [
|
109
|
+
`${++touched}lizard`,
|
110
|
+
`sfdeljknesv`
|
111
|
+
])
|
112
|
+
]
|
41
113
|
```
|
42
114
|
|
115
|
+
Using side effects inside a template can be useful to store information that's needed elsewhere in the text-to-generate.
|
116
|
+
An example of that would be to keep track of imports that have to appear before their usage.
|
117
|
+
|
43
118
|
|
44
|
-
|
119
|
+
### Other convenience functions
|
45
120
|
|
46
|
-
|
47
|
-
|
48
|
-
*
|
49
|
-
|
121
|
+
Other convenience functions are:
|
122
|
+
|
123
|
+
* `withNewlineAppended`: Wrap this around a template function (see definition below) to produce a template function that adds a newline after any item fed to the original template function.
|
124
|
+
|
125
|
+
A _template function_ is any function that produces an instance of `Template`.
|
126
|
+
|
127
|
+
An example of the usage of `withNewlineAppended` is
|
128
|
+
|
129
|
+
```typescript
|
130
|
+
[1, 2, 3].map(withNewlineAppended((num) => `${num}`))
|
131
|
+
```
|
132
|
+
|
133
|
+
which should produce the following text:
|
134
|
+
|
135
|
+
```
|
136
|
+
1
|
137
|
+
|
138
|
+
2
|
139
|
+
|
140
|
+
3
|
141
|
+
|
142
|
+
```
|
143
|
+
|
144
|
+
* `commaSeparated`: Given a list of strings, this function adds a comma after every string, except for the last one.
|
145
|
+
|
146
|
+
E.g., `commaSeparated(["1", "2", "3"])` becomes `["1,", "2,", "3"]`.
|
147
|
+
This is useful e.g. for rendering “pretty” import statements.
|
148
|
+
|
149
|
+
_Note_ that this only works on a list of strings, not an any instance of `Template`.
|
150
|
+
|
151
|
+
|
152
|
+
### Package name
|
153
|
+
|
154
|
+
The repository's name is a play on "temporal literals" and "littoral", begin phonetically close to "literal".
|
155
|
+
The latter word indicates the part of a body of water (lake, sea, or ocean) that's closest to shore, usually shallow, and possibly not always entirely submerged.
|
156
|
+
The name tries to convey that implementing templates with this framework doesn't require you to "wade too far into the water".
|
50
157
|
|
package/dist/index.d.ts
CHANGED
@@ -1,13 +1,69 @@
|
|
1
|
-
export declare type NestedString = string | Array<NestedString>;
|
2
|
-
declare type NestedStringFunction<T> = (_: NestedString) => T;
|
3
1
|
/**
|
4
|
-
*
|
2
|
+
* A type definition for “templates” that consist of array of strings nested to an arbitrary depth.
|
3
|
+
* (Depth 0 corresponds to just a single string.)
|
4
|
+
*
|
5
|
+
* @since version 0.3.0
|
5
6
|
*/
|
6
|
-
export
|
7
|
+
export type Template = string | Array<Template>;
|
7
8
|
/**
|
8
|
-
*
|
9
|
-
*
|
9
|
+
* An alias for the {@link Template} type definition.
|
10
|
+
* Note: this type might be deprecated and removed (per a major version) in the future.
|
10
11
|
*/
|
11
|
-
export
|
12
|
+
export type NestedString = Template;
|
13
|
+
type TemplateFunction<T> = (_: Template) => T;
|
14
|
+
/**
|
15
|
+
* @returns {string} - the given template joined as one string, taking care of proper newline endings.
|
16
|
+
*/
|
17
|
+
export declare const asString: (template: Template) => string;
|
18
|
+
/**
|
19
|
+
* @returns {function} - a function to instantiate a function to indent a sub-template.
|
20
|
+
* The function always returns an array of strings.
|
21
|
+
*
|
22
|
+
* Its usage looks as follows:
|
23
|
+
* <pre>
|
24
|
+
* indentWith(" ")(2)([
|
25
|
+
* `this is indented 2 levels`
|
26
|
+
* ])
|
27
|
+
* </pre>
|
28
|
+
*
|
29
|
+
* Usually, one sets up the following function constant before:
|
30
|
+
* <pre>
|
31
|
+
* const indent = indentWith(" ")
|
32
|
+
* </pre>
|
33
|
+
*/
|
34
|
+
export declare const indentWith: (singleIndentation: string) => (indentLevel?: number) => TemplateFunction<string[]>;
|
35
|
+
/**
|
36
|
+
* Allows for the following syntax:
|
37
|
+
* <pre>
|
38
|
+
* [
|
39
|
+
* when(<some boolean condition>)(
|
40
|
+
* <stuff to include when boolean condition is true>
|
41
|
+
* )
|
42
|
+
* ]
|
43
|
+
* </pre>
|
44
|
+
*
|
45
|
+
* and
|
46
|
+
*
|
47
|
+
* <pre>
|
48
|
+
* [
|
49
|
+
* when(<some boolean condition>)(
|
50
|
+
* () => <stuff to include when boolean condition is true>
|
51
|
+
* )
|
52
|
+
* ]
|
53
|
+
* </pre>
|
54
|
+
*
|
55
|
+
* In the latter case, it's guaranteed that the thunk ({@see https://en.wikipedia.org/wiki/Thunk})
|
56
|
+
* is only evaluated (/run) when the boolean condition is true.
|
57
|
+
* That is useful in case the stuff to include produces side effects.
|
58
|
+
*/
|
59
|
+
export declare const when: (bool: boolean) => (whenResult: (() => Template) | Template) => Template;
|
60
|
+
/**
|
61
|
+
* @return a function that composes the given template function with the action of "adding a newline after".
|
62
|
+
*/
|
63
|
+
export declare const withNewlineAppended: <T>(templateFunc: (t: T) => Template) => (t: T) => Template[];
|
64
|
+
/**
|
65
|
+
* @return the given array of strings but with commas added after each string except the last one.
|
66
|
+
*/
|
67
|
+
export declare const commaSeparated: (strings: string[]) => string[];
|
12
68
|
export {};
|
13
69
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AAE/C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAA;AAGnC,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAA;AA6B7C;;GAEG;AACH,eAAO,MAAM,QAAQ,aAdN,QAAQ,WAc2F,CAAA;AAoBlH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,sBAAuB,MAAM,oBAClC,MAAM,KAAO,gBAAgB,CAAC,MAAM,EAAE,CAInD,CAAA;AAGL;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,IAAI,SAAU,OAAO,kBAEX,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,aAIQ,CAAA;AAG1D;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,SAC/D,CAAC,eAA0B,CAAA;AAGnC;;GAEG;AACH,eAAO,MAAM,cAAc,YAAa,MAAM,EAAE,aACiC,CAAA"}
|
package/dist/index.js
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
"use strict";
|
2
1
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
3
2
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
4
3
|
if (ar || !(i in from)) {
|
@@ -8,32 +7,35 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
8
7
|
}
|
9
8
|
return to.concat(ar || Array.prototype.slice.call(from));
|
10
9
|
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.indentWith = exports.asString = void 0;
|
13
10
|
/**
|
14
11
|
* Polyfill/shim for ES2019's Array.prototype.flat(..).
|
15
12
|
*/
|
16
|
-
function
|
17
|
-
return Array.isArray(
|
18
|
-
?
|
19
|
-
: [
|
20
|
-
}
|
13
|
+
var flatten = function (template) {
|
14
|
+
return Array.isArray(template)
|
15
|
+
? template.map(flatten).reduce(function (arrL, arrR) { return __spreadArray(__spreadArray([], arrL, true), arrR, true); }, [])
|
16
|
+
: [template];
|
17
|
+
};
|
21
18
|
/**
|
22
19
|
* @returns {function(*=): *} - a function that maps over a single string using mapString, or an array of strings using mapStrings.
|
23
20
|
* If an array is given, that array is completely (i.e.: recursively) flattened first, before the mapStrings function is applied.
|
21
|
+
* (This function is only used internally.)
|
24
22
|
*/
|
25
|
-
function
|
26
|
-
return function (
|
27
|
-
return Array.isArray(
|
28
|
-
? mapStrings(flatten(
|
29
|
-
: mapString(
|
23
|
+
var mapNestedString = function (mapString, mapStrings) {
|
24
|
+
return function (template) {
|
25
|
+
return Array.isArray(template)
|
26
|
+
? mapStrings(flatten(template))
|
27
|
+
: mapString(template);
|
30
28
|
};
|
31
|
-
}
|
32
|
-
var withNewlineEnsured = function (str) {
|
29
|
+
};
|
30
|
+
var withNewlineEnsured = function (str) {
|
31
|
+
return str.charAt(str.length - 1) === '\n'
|
32
|
+
? str
|
33
|
+
: (str + "\n");
|
34
|
+
};
|
33
35
|
/**
|
34
|
-
* @returns {string} - the given
|
36
|
+
* @returns {string} - the given template joined as one string, taking care of proper newline endings.
|
35
37
|
*/
|
36
|
-
|
38
|
+
export var asString = mapNestedString(withNewlineEnsured, function (strings) { return strings.map(withNewlineEnsured).join(""); });
|
37
39
|
/**
|
38
40
|
* Polyfill/shim for ES2015's String.prototype.repeat which doesn't work for some reason in the test...
|
39
41
|
*/
|
@@ -51,14 +53,72 @@ var repeat = function (str, n) {
|
|
51
53
|
return result;
|
52
54
|
};
|
53
55
|
/**
|
54
|
-
* @returns {function} - a function to instantiate a function to indent a
|
55
|
-
* The function always returns strings.
|
56
|
+
* @returns {function} - a function to instantiate a function to indent a sub-template.
|
57
|
+
* The function always returns an array of strings.
|
58
|
+
*
|
59
|
+
* Its usage looks as follows:
|
60
|
+
* <pre>
|
61
|
+
* indentWith(" ")(2)([
|
62
|
+
* `this is indented 2 levels`
|
63
|
+
* ])
|
64
|
+
* </pre>
|
65
|
+
*
|
66
|
+
* Usually, one sets up the following function constant before:
|
67
|
+
* <pre>
|
68
|
+
* const indent = indentWith(" ")
|
69
|
+
* </pre>
|
70
|
+
*/
|
71
|
+
export var indentWith = function (singleIndentation) {
|
72
|
+
return function (indentLevel) {
|
73
|
+
if (indentLevel === void 0) { indentLevel = 1; }
|
74
|
+
var indentationPrefix = repeat(singleIndentation, indentLevel);
|
75
|
+
var indentLine = function (str) { return str.split("\n").map(function (line) { return (line.length > 0 ? indentationPrefix : "") + line; }).join("\n"); };
|
76
|
+
return mapNestedString(function (string) { return [indentLine(string)]; }, function (strings) { return strings.map(indentLine); });
|
77
|
+
};
|
78
|
+
};
|
79
|
+
/**
|
80
|
+
* Allows for the following syntax:
|
81
|
+
* <pre>
|
82
|
+
* [
|
83
|
+
* when(<some boolean condition>)(
|
84
|
+
* <stuff to include when boolean condition is true>
|
85
|
+
* )
|
86
|
+
* ]
|
87
|
+
* </pre>
|
88
|
+
*
|
89
|
+
* and
|
90
|
+
*
|
91
|
+
* <pre>
|
92
|
+
* [
|
93
|
+
* when(<some boolean condition>)(
|
94
|
+
* () => <stuff to include when boolean condition is true>
|
95
|
+
* )
|
96
|
+
* ]
|
97
|
+
* </pre>
|
98
|
+
*
|
99
|
+
* In the latter case, it's guaranteed that the thunk ({@see https://en.wikipedia.org/wiki/Thunk})
|
100
|
+
* is only evaluated (/run) when the boolean condition is true.
|
101
|
+
* That is useful in case the stuff to include produces side effects.
|
56
102
|
*/
|
57
|
-
var
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
103
|
+
export var when = function (bool) {
|
104
|
+
return bool
|
105
|
+
? function (whenResult) {
|
106
|
+
return typeof whenResult === "function"
|
107
|
+
? whenResult()
|
108
|
+
: whenResult;
|
109
|
+
}
|
110
|
+
: function (_whenResult) { return []; };
|
111
|
+
};
|
112
|
+
/**
|
113
|
+
* @return a function that composes the given template function with the action of "adding a newline after".
|
114
|
+
*/
|
115
|
+
export var withNewlineAppended = function (templateFunc) {
|
116
|
+
return function (t) { return [templateFunc(t), ""]; };
|
117
|
+
};
|
118
|
+
/**
|
119
|
+
* @return the given array of strings but with commas added after each string except the last one.
|
120
|
+
*/
|
121
|
+
export var commaSeparated = function (strings) {
|
122
|
+
return strings.map(function (str, index) { return "".concat(str).concat(index + 1 < strings.length ? "," : ""); });
|
123
|
+
};
|
64
124
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
{
|
2
2
|
"name": "littoral-templates",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.3.0",
|
4
4
|
"description": "A small JavaScript/TypeScript framework to do templating comfortably using the template literal syntax in either JavaScript or TypeScript.",
|
5
|
+
"type": "module",
|
5
6
|
"main": "dist/index.js",
|
6
7
|
"types": "dist/index.d.ts",
|
7
8
|
"scripts": {
|
8
9
|
"build": "tsc",
|
10
|
+
"watch-build": "tsc --watch",
|
9
11
|
"clean": "rm -rf dist",
|
10
12
|
"pretest": "npm-run-all build",
|
11
|
-
"test": "
|
13
|
+
"test": "mocha dist/test/*.js",
|
14
|
+
"watch-test": "mocha --watch dist/test/*.js"
|
12
15
|
},
|
13
16
|
"repository": {
|
14
17
|
"type": "git",
|
@@ -25,8 +28,12 @@
|
|
25
28
|
},
|
26
29
|
"homepage": "https://github.com/dslmeinte/littoral-templates#readme",
|
27
30
|
"devDependencies": {
|
28
|
-
"@types/
|
29
|
-
"
|
30
|
-
"
|
31
|
+
"@types/chai": "5.0.1",
|
32
|
+
"@types/mocha": "10.0.9",
|
33
|
+
"@types/node": "18.19.64",
|
34
|
+
"chai": "5.1.2",
|
35
|
+
"mocha": "10.8.2",
|
36
|
+
"npm-run-all": "4.1.5",
|
37
|
+
"typescript": "5.6.3"
|
31
38
|
}
|
32
39
|
}
|