@nxtedition/lib 26.8.7 → 27.0.0-alpha.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.
@@ -1,165 +0,0 @@
1
- import { test } from 'node:test'
2
- import assert from 'node:assert'
3
- import { makeTemplateCompiler } from './index.js'
4
- import * as rxjs from 'rxjs'
5
-
6
- const { resolveTemplate } = makeTemplateCompiler({
7
- ds: {
8
- record: {
9
- observe: () => rxjs.of({ foo: 'bar' }),
10
- },
11
- },
12
- })
13
-
14
- test('hash to int', async () => {
15
- const val = await resolveTemplate('{{test | hashaint() | mod(128)}}', { test: { foo: '11d1' } })
16
- assert.strictEqual(Number.isFinite(val), true)
17
- })
18
-
19
- test('baseValue', async () => {
20
- assert.strictEqual(await resolveTemplate('{{test}}', { test: '11d1' }), '11d1')
21
- assert.strictEqual(await resolveTemplate('{{test}}', { test: rxjs.of('11d1') }), '11d1')
22
- assert.strictEqual(
23
- await resolveTemplate('{{test.asd}}', { test: rxjs.of({ asd: '11d1' }) }),
24
- '11d1',
25
- )
26
- assert.strictEqual(
27
- await resolveTemplate('{{test.asd}}', { test: { asd: rxjs.of('11d1') } }),
28
- '11d1',
29
- )
30
- })
31
-
32
- test('integer ops', async () => {
33
- assert.strictEqual(await resolveTemplate('{{test | div(2)}}', { test: '8' }), 4)
34
- assert.strictEqual(await resolveTemplate('{{test | div(2)}}', { test: 8 }), 4)
35
- assert.strictEqual(await resolveTemplate('{{test | mul(2)}}', { test: '8' }), 16)
36
- assert.strictEqual(await resolveTemplate('{{test | mul(2)}}', { test: 8 }), 16)
37
- assert.strictEqual(await resolveTemplate('{{test | add(2)}}', { test: '10' }), 12)
38
- assert.strictEqual(await resolveTemplate('{{test | add(2)}}', { test: 10 }), 12)
39
- assert.strictEqual(await resolveTemplate('{{test | sub(2)}}', { test: '10' }), 8)
40
- assert.strictEqual(await resolveTemplate('{{test | sub(2)}}', { test: 10 }), 8)
41
- })
42
-
43
- test('null undefined args', async () => {
44
- assert.strictEqual(await resolveTemplate('{{asd | default(null, true)}}', {}), null)
45
- assert.strictEqual(await resolveTemplate('{{asd | default(undefined, true)}}', {}), undefined)
46
- })
47
-
48
- test('path var', async () => {
49
- assert.strictEqual(await resolveTemplate('{{test.foo}}', { test: { foo: '111' } }), '111')
50
- })
51
-
52
- test('replaces strings', async () => {
53
- assert.strictEqual(await resolveTemplate('{{test}}', { test: '111' }), '111')
54
- assert.strictEqual(await resolveTemplate('pre{{test}}post', { test: '111' }), 'pre111post')
55
- assert.strictEqual(
56
- await resolveTemplate('123{{test}}456{{test}}{{test}}', { test: 'body' }),
57
- '123body456bodybody',
58
- )
59
- assert.strictEqual(
60
- await resolveTemplate('test{{test.foo}}test{{test.bar.baz}}test', {
61
- test: { foo: '111', bar: { baz: '222' } },
62
- }),
63
- 'test111test222test',
64
- )
65
- assert.strictEqual(await resolveTemplate('{{ asd | default("te | st")}}', {}), 'te | st')
66
- assert.strictEqual(await resolveTemplate('{{ asd | default("test\n") }}', {}), 'test\n')
67
- assert.strictEqual(await resolveTemplate('{{ asd | default("test\n\n") }}', {}), 'test\n\n')
68
- assert.strictEqual(await resolveTemplate('{{ asd | default("test\r\n") }}', {}), 'test\r\n')
69
- })
70
-
71
- test('nested', async () => {
72
- assert.strictEqual(
73
- await resolveTemplate('{{ asd | default("{{foo}}") }}', { foo: '"test"' }),
74
- '"test"',
75
- )
76
- assert.strictEqual(await resolveTemplate('{{{{foo}}}}', { test: '111', foo: 'test' }), '111')
77
- assert.strictEqual(
78
- await resolveTemplate('f{{oo}}', { test: '111', foo: 'test', oo: 'oo' }),
79
- 'foo',
80
- )
81
- assert.strictEqual(
82
- await resolveTemplate('{{f{{oo}}}}', { test: '111', foo: 'test', oo: 'oo' }),
83
- 'test',
84
- )
85
- assert.strictEqual(await resolveTemplate('{{{{foo}}}}', { test: '111', foo: 'test' }), '111')
86
- assert.strictEqual(
87
- await resolveTemplate('{{{{f{{o}}o}}}}', { test: '111', foo: 'test', o: 'o' }),
88
- '111',
89
- )
90
- assert.strictEqual(
91
- await resolveTemplate('{{ asd | default("{{test}}")}}', { test: '111', foo: 'test' }),
92
- '111',
93
- )
94
- assert.strictEqual(
95
- await resolveTemplate('{{ asd | default("{{t{{es}}t}}")}}', {
96
- test: '111',
97
- foo: 'test',
98
- es: 'es',
99
- }),
100
- '111',
101
- )
102
- assert.strictEqual(
103
- await resolveTemplate('{{ asd | default("{{test | default("test\n")}}")}}', {}),
104
- 'test\n',
105
- )
106
- assert.strictEqual(
107
- await resolveTemplate('{{ asd | default("{{test | default("test\n\n")}}")}}', {}),
108
- 'test\n\n',
109
- )
110
- assert.strictEqual(
111
- await resolveTemplate('{{ asd | default("{{test | default("test\r\n")}}")}}', {}),
112
- 'test\r\n',
113
- )
114
- })
115
-
116
- test('append', async () => {
117
- assert.strictEqual(await resolveTemplate("{{test | append('1')}}", { test: '111' }), '1111')
118
- })
119
-
120
- test('object', async () => {
121
- const obj = { foo: 1 }
122
- assert.strictEqual(await resolveTemplate('{{test}}', { test: obj }), obj)
123
- })
124
-
125
- test('ds', async () => {
126
- assert.strictEqual(
127
- await resolveTemplate("{{test | ds() | pluck('foo')}}", { test: 'foo' }),
128
- 'bar',
129
- )
130
- })
131
-
132
- test('replace array', async () => {
133
- assert.deepStrictEqual(
134
- await resolveTemplate('{{test | join("#") | replace("foo", "bar") | split("#")}}', {
135
- test: ['foo', 'bar'],
136
- }),
137
- ['bar', 'bar'],
138
- )
139
- assert.deepStrictEqual(
140
- await resolveTemplate('{{test | join(",") | replace("foo", "bar") | split(",")}}', {
141
- test: ['foo', 'bar'],
142
- }),
143
- ['bar', 'bar'],
144
- )
145
- })
146
-
147
- test('You Do Not Know Me', async () => {
148
- assert.deepStrictEqual(
149
- await resolveTemplate('{{id | default("You Do Not Know", true)}} -', {}),
150
- 'You Do Not Know -',
151
- )
152
- })
153
-
154
- test('object 1', async () => {
155
- assert.deepStrictEqual(await resolveTemplate({ asd: ['{{foo}}'] }, { foo: 'bar' }), {
156
- asd: ['bar'],
157
- })
158
- })
159
-
160
- test('empty arg', async () => {
161
- assert.deepStrictEqual(
162
- await resolveTemplate('{{source.value | includes("salami") | ternary([], )}}', {}),
163
- undefined,
164
- )
165
- })
@@ -1,22 +0,0 @@
1
- import { parse } from 'acorn'
2
- import { generate } from 'astring'
3
-
4
- export default function (code) {
5
- const ast = parse(code, { ecmaVersion: 'latest' })
6
-
7
- const { body } = ast
8
-
9
- if (body.length > 0) {
10
- const lastStatement = body[body.length - 1]
11
-
12
- if (lastStatement.type !== 'ReturnStatement') {
13
- body[body.length - 1] = {
14
- type: 'ReturnStatement',
15
- argument:
16
- lastStatement.type === 'ExpressionStatement' ? lastStatement.expression : lastStatement,
17
- }
18
- }
19
- }
20
-
21
- return generate(ast)
22
- }
@@ -1,16 +0,0 @@
1
- import { test } from 'node:test'
2
- import assert from 'node:assert'
3
- import transform from './transform.js'
4
-
5
- test('transform', function () {
6
- assert.strictEqual(transform('const x = 2; x;'), 'const x = 2;\nreturn x;\n')
7
- assert.strictEqual(transform('[1,2,3];'), 'return [1, 2, 3];\n')
8
- assert.strictEqual(transform('[1,2,3]'), 'return [1, 2, 3];\n')
9
- assert.strictEqual(transform('x\n? \n2 \n: \n3'), `return x ? 2 : 3;\n`)
10
- // assert.strictEqual(transform('return x\n? \n2 \n: \n3'), `return x ? 2 : 3;\n`)
11
- // assert.strictEqual(transform('return\n x\n? \n2 \n: \n3'), `return x ? 2 : 3;\n`)
12
- assert.strictEqual(
13
- transform('$.width > $.height ? 30 : 20'),
14
- `return $.width > $.height ? 30 : 20;\n`,
15
- )
16
- })
package/weakCache.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export function makeWeakCache<FactoryArgs extends unknown[], CachedType>(
2
- valueSelector: (...args: FactoryArgs) => CachedType,
3
- keySelector?: (...args: FactoryArgs) => string,
4
- ): (...args: FactoryArgs) => CachedType
package/weakCache.js DELETED
@@ -1,25 +0,0 @@
1
- export function makeWeakCache(valueSelector, keySelector) {
2
- const cache = new Map()
3
- const finalizationRegistry = new FinalizationRegistry((key) => {
4
- const ref = cache.get(key)
5
- if (ref !== undefined && ref.deref() === undefined) {
6
- cache.delete(key)
7
- }
8
- })
9
- return (...args) => {
10
- const key = keySelector ? keySelector(...args) : args[0]
11
- const ref = cache.get(key)
12
- if (ref != null) {
13
- const deref = ref.deref()
14
- if (deref != null) {
15
- return deref
16
- }
17
- }
18
- const value = valueSelector(...args)
19
- if (value != null) {
20
- cache.set(key, new WeakRef(value))
21
- finalizationRegistry.register(value, key)
22
- }
23
- return value
24
- }
25
- }
package/yield.js DELETED
@@ -1,103 +0,0 @@
1
- const kDefaultSchedule = globalThis.setImmediate ?? ((fn) => setTimeout(fn, 0))
2
- let yieldSchedule = kDefaultSchedule
3
- const yieldQueue = []
4
-
5
- let yieldIndex = 0
6
- let yieldTimeout = 40
7
- let yieldActive = false
8
- let yieldScheduled = false
9
- let yieldTime = performance.now()
10
-
11
- export function setYieldDispatcher(schedule) {
12
- yieldSchedule = schedule ?? kDefaultSchedule
13
- }
14
-
15
- export function setYieldTimeout(timeout) {
16
- if (typeof timeout !== 'number' || timeout < 0) {
17
- throw new TypeError('timeout must be a positive number')
18
- }
19
- yieldTimeout = timeout
20
- }
21
-
22
- export function shouldYield(timeout) {
23
- if (timeout === undefined) {
24
- timeout = yieldTimeout
25
- }
26
-
27
- if (!yieldActive && performance.now() - yieldTime >= timeout) {
28
- yieldActive = true
29
- }
30
-
31
- return yieldActive
32
- }
33
-
34
- export function maybeYield(callback, opaque, timeout) {
35
- if (callback != null && typeof callback !== 'function') {
36
- throw new TypeError('callback must be a function')
37
- }
38
-
39
- if (shouldYield(timeout)) {
40
- return doYield(callback, opaque)
41
- }
42
-
43
- if (callback != null) {
44
- callback(null, opaque)
45
- }
46
-
47
- return null
48
- }
49
-
50
- export function doYield(callback, opaque) {
51
- if (callback != null && typeof callback !== 'function') {
52
- throw new TypeError('callback must be a function')
53
- }
54
-
55
- if (!yieldScheduled) {
56
- yieldScheduled = true
57
- yieldSchedule(dispatchYield)
58
- }
59
-
60
- if (callback != null) {
61
- yieldQueue.push(callback, opaque)
62
- return null
63
- }
64
-
65
- return new Promise((resolve) => {
66
- yieldQueue.push(resolve, opaque)
67
- })
68
- }
69
-
70
- function dispatchYield() {
71
- yieldTime = performance.now()
72
- yieldActive = false
73
-
74
- const maxIndex = yieldQueue.length
75
-
76
- while (yieldIndex < maxIndex) {
77
- const resolve = yieldQueue[yieldIndex]
78
- yieldQueue[yieldIndex] = null
79
- yieldIndex += 1
80
-
81
- const opaque = yieldQueue[yieldIndex]
82
- yieldQueue[yieldIndex] = null
83
- yieldIndex += 1
84
-
85
- resolve(opaque)
86
-
87
- if (shouldYield()) {
88
- break
89
- }
90
- }
91
-
92
- if (yieldIndex === yieldQueue.length) {
93
- yieldScheduled = false
94
- yieldQueue.splice(0)
95
- yieldIndex = 0
96
- } else {
97
- if (yieldIndex > 16 * 1024) {
98
- yieldQueue.splice(0, yieldIndex)
99
- yieldIndex = 0
100
- }
101
- yieldSchedule(dispatchYield)
102
- }
103
- }