@payloadcms/richtext-lexical 4.0.0-canary.34 → 4.0.0-canary.36
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/exports/client/bundled.css +1 -1
- package/dist/exports/client/index.js +17 -17
- package/dist/exports/client/index.js.map +3 -3
- package/dist/features/toolbars/shared/ToolbarDropdown/index.css +12 -11
- package/dist/field/bundled.css +1 -1
- package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +13 -6
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +13 -6
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +13 -6
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +13 -6
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/package.json +8 -8
- package/dist/dependencyChecker.spec.js +0 -16
- package/dist/dependencyChecker.spec.js.map +0 -1
- package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js +0 -92
- package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js.map +0 -1
- package/dist/features/converters/lexicalToJSX/Component/nodeTags.spec.js +0 -114
- package/dist/features/converters/lexicalToJSX/Component/nodeTags.spec.js.map +0 -1
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
- package/dist/features/link/markdownTransformer.spec.js +0 -195
- package/dist/features/link/markdownTransformer.spec.js.map +0 -1
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js +0 -65
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js.map +0 -1
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
- package/dist/lexical/utils/url.spec.js +0 -114
- package/dist/lexical/utils/url.spec.js.map +0 -1
- package/dist/utilities/jsx/jsx.spec.js +0 -178
- package/dist/utilities/jsx/jsx.spec.js.map +0 -1
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { absoluteRegExp, relativeOrAnchorRegExp, validateUrl } from './url.js';
|
|
3
|
-
describe('Lexical URL Regex Matchers', () => {
|
|
4
|
-
describe('relativeOrAnchorRegExp', () => {
|
|
5
|
-
it('validation for links it should match', async () => {
|
|
6
|
-
const shouldMatch = ['/path/to/resource', '/file-name.html', '/', '/dir/', '/path.with.dots/', '#anchor', '#section-title', '/path#fragment', '/page?id=123', '/page?id=123#section', '/search?q=test', '/?global=true'];
|
|
7
|
-
shouldMatch.forEach(testCase => {
|
|
8
|
-
expect(relativeOrAnchorRegExp.test(testCase)).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
it('validation for links it should not match', async () => {
|
|
12
|
-
const shouldNotMatch = ['match', 'http://example.com', 'relative/path', 'file.html', 'some#fragment', '#', '/#', '/path/with spaces', '', 'ftp://example.com'];
|
|
13
|
-
shouldNotMatch.forEach(testCase => {
|
|
14
|
-
expect(relativeOrAnchorRegExp.test(testCase)).not.toBe(true);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
describe('absoluteRegExp', () => {
|
|
19
|
-
it('validation for links it should match', async () => {
|
|
20
|
-
const shouldMatch = ['http://example.com', 'https://example.com', 'ftp://files.example.com', 'http://example.com/resource', 'https://example.com/resource?key=value', 'http://example.com/resource#anchor', 'http://www.example.com', 'https://sub.example.com/path/file', 'mailto:email@example.com', 'tel:+1234567890', 'http://user:pass@example.com', 'www.example.com', 'www.example.com/resource', 'www.example.com/resource?query=1', 'www.example.com#fragment'];
|
|
21
|
-
shouldMatch.forEach(testCase => {
|
|
22
|
-
expect(absoluteRegExp.test(testCase)).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('validation for links it should not match', async () => {
|
|
26
|
-
const shouldNotMatch = ['/relative/path', '#anchor', 'example.com', '://missing.scheme', 'http://', 'http:/example.com', 'ftp://example .com', 'http://example', 'not-a-url', 'http//example.com', 'https://example.com/ spaces'];
|
|
27
|
-
shouldNotMatch.forEach(testCase => {
|
|
28
|
-
expect(absoluteRegExp.test(testCase)).not.toBe(true);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
describe('validateUrl', () => {
|
|
33
|
-
describe('absolute URLs', () => {
|
|
34
|
-
it('should validate http and https URLs', () => {
|
|
35
|
-
const validUrls = ['http://example.com', 'https://example.com', 'http://www.example.com', 'https://sub.example.com/path/file', 'http://example.com/resource', 'https://example.com/resource?key=value', 'http://example.com/resource#anchor'];
|
|
36
|
-
validUrls.forEach(url => {
|
|
37
|
-
expect(validateUrl(url)).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it('should validate other protocol URLs', () => {
|
|
41
|
-
const validUrls = ['ftp://files.example.com', 'mailto:email@example.com', 'tel:+1234567890'];
|
|
42
|
-
validUrls.forEach(url => {
|
|
43
|
-
expect(validateUrl(url)).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
it('should validate www URLs without protocol', () => {
|
|
47
|
-
const validUrls = ['www.example.com', 'www.example.com/resource', 'www.example.com/resource?query=1', 'www.example.com#fragment'];
|
|
48
|
-
validUrls.forEach(url => {
|
|
49
|
-
expect(validateUrl(url)).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('relative URLs', () => {
|
|
54
|
-
it('should validate relative paths', () => {
|
|
55
|
-
const validUrls = ['/path/to/resource', '/file-name.html', '/', '/dir/', '/path.with.dots/', '/path#fragment'];
|
|
56
|
-
validUrls.forEach(url => {
|
|
57
|
-
expect(validateUrl(url)).toBe(true);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('anchor links', () => {
|
|
62
|
-
it('should validate anchor links', () => {
|
|
63
|
-
const validUrls = ['#anchor', '#section-title'];
|
|
64
|
-
validUrls.forEach(url => {
|
|
65
|
-
expect(validateUrl(url)).toBe(true);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('with query params', () => {
|
|
70
|
-
it('should validate relative URLs with query parameters', () => {
|
|
71
|
-
const validUrls = ['/page?id=123', '/search?q=test', '/products?category=electronics&sort=price', '/path?key=value&another=param', '/page?id=123&filter=active', '/?global=true'];
|
|
72
|
-
validUrls.forEach(url => {
|
|
73
|
-
expect(validateUrl(url)).toBe(true);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
it('should validate absolute URLs with query parameters', () => {
|
|
77
|
-
const validUrls = ['https://example.com?id=123', 'http://example.com/page?key=value', 'www.example.com?search=query', 'https://example.com/path?a=1&b=2&c=3'];
|
|
78
|
-
validUrls.forEach(url => {
|
|
79
|
-
expect(validateUrl(url)).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it('should validate URLs with query parameters and anchors', () => {
|
|
83
|
-
const validUrls = ['/page?id=123#section', 'https://example.com?key=value#anchor', '/search?q=test#results'];
|
|
84
|
-
validUrls.forEach(url => {
|
|
85
|
-
expect(validateUrl(url)).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe('edge cases', () => {
|
|
90
|
-
it('should handle the default https:// case', () => {
|
|
91
|
-
expect(validateUrl('https://')).toBe(true);
|
|
92
|
-
});
|
|
93
|
-
it('should return false for empty or invalid URLs', () => {
|
|
94
|
-
const invalidUrls = ['', 'not-a-url', 'example.com', 'relative/path', 'file.html', 'some#fragment', 'http://', 'http:/example.com', 'http//example.com'];
|
|
95
|
-
invalidUrls.forEach(url => {
|
|
96
|
-
expect(validateUrl(url)).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
it('should return false for URLs with spaces', () => {
|
|
100
|
-
const invalidUrls = ['/path/with spaces', 'http://example.com/ spaces', 'https://example.com/path with spaces'];
|
|
101
|
-
invalidUrls.forEach(url => {
|
|
102
|
-
expect(validateUrl(url)).toBe(false);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
it('should return false for malformed URLs', () => {
|
|
106
|
-
const invalidUrls = ['://missing.scheme', 'ftp://example .com', 'http://example', '#', '/#'];
|
|
107
|
-
invalidUrls.forEach(url => {
|
|
108
|
-
expect(validateUrl(url)).toBe(false);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=url.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url.spec.js","names":["describe","it","expect","absoluteRegExp","relativeOrAnchorRegExp","validateUrl","shouldMatch","forEach","testCase","test","toBe","shouldNotMatch","not","validUrls","url","invalidUrls"],"sources":["../../../src/lexical/utils/url.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { absoluteRegExp, relativeOrAnchorRegExp, validateUrl } from './url.js'\n\ndescribe('Lexical URL Regex Matchers', () => {\n describe('relativeOrAnchorRegExp', () => {\n it('validation for links it should match', async () => {\n const shouldMatch = [\n '/path/to/resource',\n '/file-name.html',\n '/',\n '/dir/',\n '/path.with.dots/',\n '#anchor',\n '#section-title',\n '/path#fragment',\n '/page?id=123',\n '/page?id=123#section',\n '/search?q=test',\n '/?global=true',\n ]\n\n shouldMatch.forEach((testCase) => {\n expect(relativeOrAnchorRegExp.test(testCase)).toBe(true)\n })\n })\n\n it('validation for links it should not match', async () => {\n const shouldNotMatch = [\n 'match',\n 'http://example.com',\n 'relative/path',\n 'file.html',\n 'some#fragment',\n '#',\n '/#',\n '/path/with spaces',\n '',\n 'ftp://example.com',\n ]\n\n shouldNotMatch.forEach((testCase) => {\n expect(relativeOrAnchorRegExp.test(testCase)).not.toBe(true)\n })\n })\n })\n\n describe('absoluteRegExp', () => {\n it('validation for links it should match', async () => {\n const shouldMatch = [\n 'http://example.com',\n 'https://example.com',\n 'ftp://files.example.com',\n 'http://example.com/resource',\n 'https://example.com/resource?key=value',\n 'http://example.com/resource#anchor',\n 'http://www.example.com',\n 'https://sub.example.com/path/file',\n 'mailto:email@example.com',\n 'tel:+1234567890',\n 'http://user:pass@example.com',\n 'www.example.com',\n 'www.example.com/resource',\n 'www.example.com/resource?query=1',\n 'www.example.com#fragment',\n ]\n\n shouldMatch.forEach((testCase) => {\n expect(absoluteRegExp.test(testCase)).toBe(true)\n })\n })\n\n it('validation for links it should not match', async () => {\n const shouldNotMatch = [\n '/relative/path',\n '#anchor',\n 'example.com',\n '://missing.scheme',\n 'http://',\n 'http:/example.com',\n 'ftp://example .com',\n 'http://example',\n 'not-a-url',\n 'http//example.com',\n 'https://example.com/ spaces',\n ]\n\n shouldNotMatch.forEach((testCase) => {\n expect(absoluteRegExp.test(testCase)).not.toBe(true)\n })\n })\n })\n\n describe('validateUrl', () => {\n describe('absolute URLs', () => {\n it('should validate http and https URLs', () => {\n const validUrls = [\n 'http://example.com',\n 'https://example.com',\n 'http://www.example.com',\n 'https://sub.example.com/path/file',\n 'http://example.com/resource',\n 'https://example.com/resource?key=value',\n 'http://example.com/resource#anchor',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate other protocol URLs', () => {\n const validUrls = ['ftp://files.example.com', 'mailto:email@example.com', 'tel:+1234567890']\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate www URLs without protocol', () => {\n const validUrls = [\n 'www.example.com',\n 'www.example.com/resource',\n 'www.example.com/resource?query=1',\n 'www.example.com#fragment',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('relative URLs', () => {\n it('should validate relative paths', () => {\n const validUrls = [\n '/path/to/resource',\n '/file-name.html',\n '/',\n '/dir/',\n '/path.with.dots/',\n '/path#fragment',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('anchor links', () => {\n it('should validate anchor links', () => {\n const validUrls = ['#anchor', '#section-title']\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('with query params', () => {\n it('should validate relative URLs with query parameters', () => {\n const validUrls = [\n '/page?id=123',\n '/search?q=test',\n '/products?category=electronics&sort=price',\n '/path?key=value&another=param',\n '/page?id=123&filter=active',\n '/?global=true',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate absolute URLs with query parameters', () => {\n const validUrls = [\n 'https://example.com?id=123',\n 'http://example.com/page?key=value',\n 'www.example.com?search=query',\n 'https://example.com/path?a=1&b=2&c=3',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n\n it('should validate URLs with query parameters and anchors', () => {\n const validUrls = [\n '/page?id=123#section',\n 'https://example.com?key=value#anchor',\n '/search?q=test#results',\n ]\n\n validUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(true)\n })\n })\n })\n\n describe('edge cases', () => {\n it('should handle the default https:// case', () => {\n expect(validateUrl('https://')).toBe(true)\n })\n\n it('should return false for empty or invalid URLs', () => {\n const invalidUrls = [\n '',\n 'not-a-url',\n 'example.com',\n 'relative/path',\n 'file.html',\n 'some#fragment',\n 'http://',\n 'http:/example.com',\n 'http//example.com',\n ]\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n\n it('should return false for URLs with spaces', () => {\n const invalidUrls = [\n '/path/with spaces',\n 'http://example.com/ spaces',\n 'https://example.com/path with spaces',\n ]\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n\n it('should return false for malformed URLs', () => {\n const invalidUrls = ['://missing.scheme', 'ftp://example .com', 'http://example', '#', '/#']\n\n invalidUrls.forEach((url) => {\n expect(validateUrl(url)).toBe(false)\n })\n })\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { extractPropsFromJSXPropsString } from './extractPropsFromJSXPropsString.js';
|
|
3
|
-
import { propsToJSXString } from './jsx.js';
|
|
4
|
-
describe('jsx', () => {
|
|
5
|
-
describe('prop string to object', () => {
|
|
6
|
-
const INPUT_AND_OUTPUT = [{
|
|
7
|
-
input: 'key="value"',
|
|
8
|
-
output: {
|
|
9
|
-
key: 'value'
|
|
10
|
-
}
|
|
11
|
-
}, {
|
|
12
|
-
input: "key='value'",
|
|
13
|
-
output: {
|
|
14
|
-
key: 'value'
|
|
15
|
-
},
|
|
16
|
-
inputFromOutput: 'key="value"'
|
|
17
|
-
}, {
|
|
18
|
-
input: 'key={[1, 2, 3]}',
|
|
19
|
-
output: {
|
|
20
|
-
key: [1, 2, 3]
|
|
21
|
-
}
|
|
22
|
-
}, {
|
|
23
|
-
input: 'key={[1, 2, 3, [1, 2]]}',
|
|
24
|
-
output: {
|
|
25
|
-
key: [1, 2, 3, [1, 2]]
|
|
26
|
-
}
|
|
27
|
-
}, {
|
|
28
|
-
input: 'object={4}',
|
|
29
|
-
output: {
|
|
30
|
-
object: 4
|
|
31
|
-
}
|
|
32
|
-
}, {
|
|
33
|
-
input: 'object={{"test": 1}}',
|
|
34
|
-
output: {
|
|
35
|
-
object: {
|
|
36
|
-
test: 1
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}, {
|
|
40
|
-
input: 'object={[1, 2, 3, [1, 2]]}',
|
|
41
|
-
output: {
|
|
42
|
-
object: [1, 2, 3, [1, 2]]
|
|
43
|
-
}
|
|
44
|
-
}, {
|
|
45
|
-
input: 'object={[1, 2]}',
|
|
46
|
-
output: {
|
|
47
|
-
object: [1, 2]
|
|
48
|
-
}
|
|
49
|
-
}, {
|
|
50
|
-
input: 'key="value" object={{key: "value"}}',
|
|
51
|
-
inputFromOutput: 'key="value" object={{"key": "value"}}',
|
|
52
|
-
output: {
|
|
53
|
-
key: 'value',
|
|
54
|
-
object: {
|
|
55
|
-
key: 'value'
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, {
|
|
59
|
-
input: 'global packageId="myId" uniqueId="some unique id!" update',
|
|
60
|
-
output: {
|
|
61
|
-
global: true,
|
|
62
|
-
packageId: 'myId',
|
|
63
|
-
uniqueId: 'some unique id!',
|
|
64
|
-
update: true
|
|
65
|
-
}
|
|
66
|
-
}, {
|
|
67
|
-
input: 'global key="value" object={{key: "value", something: "test", hello: 1}} packageId="myId" uniqueId="some unique id!" update',
|
|
68
|
-
inputFromOutput: 'global key="value" object={{"hello": 1, "key": "value", "something": "test"}} packageId="myId" uniqueId="some unique id!" update',
|
|
69
|
-
output: {
|
|
70
|
-
global: true,
|
|
71
|
-
key: 'value',
|
|
72
|
-
object: {
|
|
73
|
-
hello: 1,
|
|
74
|
-
key: 'value',
|
|
75
|
-
something: 'test'
|
|
76
|
-
},
|
|
77
|
-
packageId: 'myId',
|
|
78
|
-
uniqueId: 'some unique id!',
|
|
79
|
-
update: true
|
|
80
|
-
}
|
|
81
|
-
}, {
|
|
82
|
-
input: 'object={{hello: 1, key: "value", nested: { key: "value" }, something: "test", test: [1, 2, 3]}}',
|
|
83
|
-
inputFromOutput: 'object={{"hello": 1, "key": "value", "nested": {"key": "value"}, "something": "test", "test": [1, 2, 3]}}',
|
|
84
|
-
output: {
|
|
85
|
-
object: {
|
|
86
|
-
hello: 1,
|
|
87
|
-
key: 'value',
|
|
88
|
-
nested: {
|
|
89
|
-
key: 'value'
|
|
90
|
-
},
|
|
91
|
-
something: 'test',
|
|
92
|
-
test: [1, 2, 3]
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}, {
|
|
96
|
-
input: 'global key="value" object={{hello: 1, key: "value", nested: { key: "value" }, something: "test", test: [1, 2, 3]}} packageId="myId" uniqueId="some unique id!" update',
|
|
97
|
-
inputFromOutput: 'global key="value" object={{"hello": 1, "key": "value", "nested": { "key": "value" }, "something": "test", "test": [1, 2, 3]}} packageId="myId" uniqueId="some unique id!" update',
|
|
98
|
-
output: {
|
|
99
|
-
global: true,
|
|
100
|
-
key: 'value',
|
|
101
|
-
object: {
|
|
102
|
-
hello: 1,
|
|
103
|
-
key: 'value',
|
|
104
|
-
nested: {
|
|
105
|
-
key: 'value'
|
|
106
|
-
},
|
|
107
|
-
something: 'test',
|
|
108
|
-
test: [1, 2, 3]
|
|
109
|
-
},
|
|
110
|
-
packageId: 'myId',
|
|
111
|
-
uniqueId: 'some unique id!',
|
|
112
|
-
update: true
|
|
113
|
-
}
|
|
114
|
-
}, {
|
|
115
|
-
// Test if unquoted property keys in objects within arrays are supprted. This is
|
|
116
|
-
// supported through the more lenient JSOX parser, instead of using JSON.parse()
|
|
117
|
-
input: 'key={[1, 2, { hello: "there" }]}',
|
|
118
|
-
inputFromOutput: 'key={[1, 2, { "hello": "there" }]}',
|
|
119
|
-
output: {
|
|
120
|
-
key: [1, 2, {
|
|
121
|
-
hello: 'there'
|
|
122
|
-
}]
|
|
123
|
-
}
|
|
124
|
-
}, {
|
|
125
|
-
// Test if ` strings work
|
|
126
|
-
input: `key={[1, 2, { hello: \`there\` }]}`,
|
|
127
|
-
inputFromOutput: 'key={[1, 2, { "hello": "there" }]}',
|
|
128
|
-
output: {
|
|
129
|
-
key: [1, 2, {
|
|
130
|
-
hello: 'there'
|
|
131
|
-
}]
|
|
132
|
-
}
|
|
133
|
-
}, {
|
|
134
|
-
// Test if multiline ` strings work
|
|
135
|
-
input: `key={[1, 2, { hello: \`Hello
|
|
136
|
-
there\` }]}`,
|
|
137
|
-
inputFromOutput: 'key={[1, 2, { "hello": "Hello\\nthere" }]}',
|
|
138
|
-
output: {
|
|
139
|
-
key: [1, 2, {
|
|
140
|
-
hello: 'Hello\nthere'
|
|
141
|
-
}]
|
|
142
|
-
}
|
|
143
|
-
}];
|
|
144
|
-
for (const {
|
|
145
|
-
input,
|
|
146
|
-
output
|
|
147
|
-
} of INPUT_AND_OUTPUT) {
|
|
148
|
-
it(`can correctly convert to object: "${input.replace(/\n/g, '\\n')}"`, () => {
|
|
149
|
-
const propsObject = extractPropsFromJSXPropsString({
|
|
150
|
-
propsString: input
|
|
151
|
-
});
|
|
152
|
-
console.log({
|
|
153
|
-
output,
|
|
154
|
-
propsObject
|
|
155
|
-
});
|
|
156
|
-
expect(propsObject).toStrictEqual(output);
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
for (const {
|
|
160
|
-
input: originalInput,
|
|
161
|
-
inputFromOutput,
|
|
162
|
-
output
|
|
163
|
-
} of INPUT_AND_OUTPUT) {
|
|
164
|
-
const input = inputFromOutput || originalInput;
|
|
165
|
-
it(`can correctly convert from object: "${input.replace(/\n/g, '\\n')}"`, () => {
|
|
166
|
-
const propsString = propsToJSXString({
|
|
167
|
-
props: output
|
|
168
|
-
});
|
|
169
|
-
console.log({
|
|
170
|
-
input,
|
|
171
|
-
propsString
|
|
172
|
-
});
|
|
173
|
-
expect(propsString.replaceAll(' ', '')).toBe(input.replaceAll(' ', ''));
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
//# sourceMappingURL=jsx.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.spec.js","names":["describe","it","expect","extractPropsFromJSXPropsString","propsToJSXString","INPUT_AND_OUTPUT","input","output","key","inputFromOutput","object","test","global","packageId","uniqueId","update","hello","something","nested","replace","propsObject","propsString","console","log","toStrictEqual","originalInput","props","replaceAll","toBe"],"sources":["../../../src/utilities/jsx/jsx.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { extractPropsFromJSXPropsString } from './extractPropsFromJSXPropsString.js'\nimport { propsToJSXString } from './jsx.js'\n\ndescribe('jsx', () => {\n describe('prop string to object', () => {\n const INPUT_AND_OUTPUT: {\n input: string\n inputFromOutput?: string\n output: Record<string, any>\n }[] = [\n {\n input: 'key=\"value\"',\n output: {\n key: 'value',\n },\n },\n {\n input: \"key='value'\",\n output: {\n key: 'value',\n },\n inputFromOutput: 'key=\"value\"',\n },\n {\n input: 'key={[1, 2, 3]}',\n output: {\n key: [1, 2, 3],\n },\n },\n {\n input: 'key={[1, 2, 3, [1, 2]]}',\n output: {\n key: [1, 2, 3, [1, 2]],\n },\n },\n {\n input: 'object={4}',\n output: {\n object: 4,\n },\n },\n {\n input: 'object={{\"test\": 1}}',\n output: {\n object: { test: 1 },\n },\n },\n {\n input: 'object={[1, 2, 3, [1, 2]]}',\n output: {\n object: [1, 2, 3, [1, 2]],\n },\n },\n {\n input: 'object={[1, 2]}',\n output: {\n object: [1, 2],\n },\n },\n {\n input: 'key=\"value\" object={{key: \"value\"}}',\n inputFromOutput: 'key=\"value\" object={{\"key\": \"value\"}}',\n output: {\n key: 'value',\n object: { key: 'value' },\n },\n },\n {\n input: 'global packageId=\"myId\" uniqueId=\"some unique id!\" update',\n output: {\n global: true,\n packageId: 'myId',\n uniqueId: 'some unique id!',\n update: true,\n },\n },\n {\n input:\n 'global key=\"value\" object={{key: \"value\", something: \"test\", hello: 1}} packageId=\"myId\" uniqueId=\"some unique id!\" update',\n inputFromOutput:\n 'global key=\"value\" object={{\"hello\": 1, \"key\": \"value\", \"something\": \"test\"}} packageId=\"myId\" uniqueId=\"some unique id!\" update',\n output: {\n global: true,\n key: 'value',\n object: { hello: 1, key: 'value', something: 'test' },\n packageId: 'myId',\n uniqueId: 'some unique id!',\n update: true,\n },\n },\n {\n input:\n 'object={{hello: 1, key: \"value\", nested: { key: \"value\" }, something: \"test\", test: [1, 2, 3]}}',\n inputFromOutput:\n 'object={{\"hello\": 1, \"key\": \"value\", \"nested\": {\"key\": \"value\"}, \"something\": \"test\", \"test\": [1, 2, 3]}}',\n output: {\n object: {\n hello: 1,\n key: 'value',\n nested: { key: 'value' },\n something: 'test',\n test: [1, 2, 3],\n },\n },\n },\n {\n input:\n 'global key=\"value\" object={{hello: 1, key: \"value\", nested: { key: \"value\" }, something: \"test\", test: [1, 2, 3]}} packageId=\"myId\" uniqueId=\"some unique id!\" update',\n inputFromOutput:\n 'global key=\"value\" object={{\"hello\": 1, \"key\": \"value\", \"nested\": { \"key\": \"value\" }, \"something\": \"test\", \"test\": [1, 2, 3]}} packageId=\"myId\" uniqueId=\"some unique id!\" update',\n output: {\n global: true,\n key: 'value',\n object: {\n hello: 1,\n key: 'value',\n nested: { key: 'value' },\n something: 'test',\n test: [1, 2, 3],\n },\n packageId: 'myId',\n uniqueId: 'some unique id!',\n update: true,\n },\n },\n {\n // Test if unquoted property keys in objects within arrays are supprted. This is\n // supported through the more lenient JSOX parser, instead of using JSON.parse()\n input: 'key={[1, 2, { hello: \"there\" }]}',\n inputFromOutput: 'key={[1, 2, { \"hello\": \"there\" }]}',\n output: {\n key: [1, 2, { hello: 'there' }],\n },\n },\n {\n // Test if ` strings work\n input: `key={[1, 2, { hello: \\`there\\` }]}`,\n inputFromOutput: 'key={[1, 2, { \"hello\": \"there\" }]}',\n output: {\n key: [1, 2, { hello: 'there' }],\n },\n },\n {\n // Test if multiline ` strings work\n input: `key={[1, 2, { hello: \\`Hello\nthere\\` }]}`,\n inputFromOutput: 'key={[1, 2, { \"hello\": \"Hello\\\\nthere\" }]}',\n output: {\n key: [1, 2, { hello: 'Hello\\nthere' }],\n },\n },\n ]\n\n for (const { input, output } of INPUT_AND_OUTPUT) {\n it(`can correctly convert to object: \"${input.replace(/\\n/g, '\\\\n')}\"`, () => {\n const propsObject = extractPropsFromJSXPropsString({ propsString: input })\n console.log({ output, propsObject })\n\n expect(propsObject).toStrictEqual(output)\n })\n }\n\n for (const { input: originalInput, inputFromOutput, output } of INPUT_AND_OUTPUT) {\n const input = inputFromOutput || originalInput\n it(`can correctly convert from object: \"${input.replace(/\\n/g, '\\\\n')}\"`, () => {\n const propsString = propsToJSXString({ props: output })\n console.log({ input, propsString })\n\n expect(propsString.replaceAll(' ', '')).toBe(input.replaceAll(' ', ''))\n })\n }\n })\n})\n"],"mappings":"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","ignoreList":[]}
|