@luzzle/web.tools 0.0.69 → 0.0.71

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.
Files changed (64) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +6 -7
  3. package/dist/src/browser.d.ts +0 -1
  4. package/dist/src/browser.js +0 -2
  5. package/dist/src/browser.js.map +0 -1
  6. package/dist/src/commands/opengraph/html.d.ts +0 -4
  7. package/dist/src/commands/opengraph/html.js +0 -47
  8. package/dist/src/commands/opengraph/html.js.map +0 -1
  9. package/dist/src/commands/opengraph/html.test.d.ts +0 -1
  10. package/dist/src/commands/opengraph/html.test.js +0 -79
  11. package/dist/src/commands/opengraph/html.test.js.map +0 -1
  12. package/dist/src/commands/opengraph/svelte.d.ts +0 -7
  13. package/dist/src/commands/opengraph/svelte.js +0 -77
  14. package/dist/src/commands/opengraph/svelte.js.map +0 -1
  15. package/dist/src/commands/opengraph/svelte.test.d.ts +0 -1
  16. package/dist/src/commands/opengraph/svelte.test.js +0 -189
  17. package/dist/src/commands/opengraph/svelte.test.js.map +0 -1
  18. package/dist/src/commands/opengraph/utils.d.ts +0 -8
  19. package/dist/src/commands/opengraph/utils.js +0 -136
  20. package/dist/src/commands/opengraph/utils.js.map +0 -1
  21. package/dist/src/commands/opengraph/utils.test.d.ts +0 -1
  22. package/dist/src/commands/opengraph/utils.test.js +0 -215
  23. package/dist/src/commands/opengraph/utils.test.js.map +0 -1
  24. package/dist/src/lib/browser.d.ts +0 -55
  25. package/dist/src/lib/browser.js +0 -52
  26. package/dist/src/lib/browser.js.map +0 -1
  27. package/dist/src/lib/browser.test.d.ts +0 -1
  28. package/dist/src/lib/browser.test.js +0 -67
  29. package/dist/src/lib/browser.test.js.map +0 -1
  30. package/dist/src/lib/config/config.d.ts +0 -9
  31. package/dist/src/lib/config/config.js +0 -56
  32. package/dist/src/lib/config/config.js.map +0 -1
  33. package/dist/src/lib/config/config.test.d.ts +0 -1
  34. package/dist/src/lib/config/config.test.js +0 -71
  35. package/dist/src/lib/config/config.test.js.map +0 -1
  36. package/dist/src/lib/config/config.test.ts +0 -88
  37. package/dist/src/lib/config/config.ts +0 -74
  38. package/dist/src/lib/config/defaults.json +0 -145
  39. package/dist/src/lib/config/defaults.yaml +0 -151
  40. package/dist/src/lib/config/schema.d.ts +0 -172
  41. package/dist/src/lib/config/schema.js +0 -8
  42. package/dist/src/lib/config/schema.js.map +0 -1
  43. package/dist/src/lib/config/schema.json +0 -663
  44. package/dist/src/lib/config/schema.ts +0 -294
  45. package/dist/src/lib/config/user-error.config.yaml +0 -2
  46. package/dist/src/lib/config/user.config.yaml +0 -2
  47. package/dist/src/lib/deep-merge.d.ts +0 -1
  48. package/dist/src/lib/deep-merge.js +0 -27
  49. package/dist/src/lib/deep-merge.js.map +0 -1
  50. package/dist/src/lib/deep-merge.test.d.ts +0 -1
  51. package/dist/src/lib/deep-merge.test.js +0 -29
  52. package/dist/src/lib/deep-merge.test.js.map +0 -1
  53. package/dist/src/lib/vibrant.d.ts +0 -21
  54. package/dist/src/lib/vibrant.js +0 -78
  55. package/dist/src/lib/vibrant.js.map +0 -1
  56. package/dist/src/lib/vibrant.test.d.ts +0 -1
  57. package/dist/src/lib/vibrant.test.js +0 -164
  58. package/dist/src/lib/vibrant.test.js.map +0 -1
  59. package/dist/src/sdk.d.ts +0 -4
  60. package/dist/src/sdk.js +0 -4
  61. package/dist/src/sdk.js.map +0 -1
  62. package/dist/src/types.d.ts +0 -2
  63. package/dist/src/types.js +0 -2
  64. package/dist/src/types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/commands/opengraph/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,215 +0,0 @@
1
- import { describe, test, expect, vi, afterEach } from 'vitest';
2
- import { getProps, findAndReplaceLuzzleUrls, bufferToBase64, replaceAsync } from './utils.js';
3
- import { Pieces } from '@luzzle/cli';
4
- import { Vibrant } from 'node-vibrant/node';
5
- import Sharp from 'sharp';
6
- import path from 'path';
7
- import * as cheerio from 'cheerio';
8
- import { getPalette } from '@luzzle/web.utils/server';
9
- vi.mock('@luzzle/cli');
10
- vi.mock('path');
11
- vi.mock('@luzzle/web.utils/server');
12
- const mocks = {
13
- Pieces: vi.mocked(Pieces),
14
- Vibrant: vi.mocked(Vibrant),
15
- Sharp: vi.mocked(Sharp),
16
- pathExtname: vi.spyOn(path, 'extname'),
17
- getPalette: vi.mocked(getPalette),
18
- };
19
- describe('src/commands/opengraph/utils', () => {
20
- afterEach(() => {
21
- vi.clearAllMocks();
22
- });
23
- describe('getProps', () => {
24
- test('should return opengraph props with correct data', async () => {
25
- const mockItem = {
26
- json_metadata: '{"title": "Test Title"}',
27
- keywords: '["tag1", "tag2"]',
28
- type: 'book',
29
- slug: 'test-book',
30
- };
31
- const mockIcon = {};
32
- const mockPieces = {};
33
- const mockConfig = {
34
- url: { app: 'http://localhost' },
35
- };
36
- const props = await getProps(mockItem, mockIcon, mockPieces, mockConfig);
37
- expect(props.metadata).toEqual({ title: 'Test Title' });
38
- expect(props.tags).toEqual(['tag1', 'tag2']);
39
- expect(props.size).toEqual({ width: 1200, height: 630 });
40
- expect(props.helpers.getPieceUrl()).toBe('http://localhost/pieces/book/test-book');
41
- expect(props.helpers.getPieceImageUrl('image.jpg', 100, 'jpg')).toBe('luzzle://image.jpg');
42
- });
43
- test('should return opengraph props with initial JSON parse data', async () => {
44
- const mockItem = {
45
- type: 'book',
46
- slug: 'test-book',
47
- };
48
- const mockIcon = {};
49
- const mockPieces = {};
50
- const mockConfig = {
51
- url: { app: 'http://localhost' },
52
- };
53
- const props = await getProps(mockItem, mockIcon, mockPieces, mockConfig);
54
- expect(props.metadata).toEqual({});
55
- expect(props.tags).toEqual([]);
56
- expect(props.size).toEqual({ width: 1200, height: 630 });
57
- expect(props.helpers.getPieceUrl()).toBe('http://localhost/pieces/book/test-book');
58
- expect(props.helpers.getPieceImageUrl('image.jpg', 100, 'jpg')).toBe('luzzle://image.jpg');
59
- });
60
- test('should return opengraph props with palette', async () => {
61
- const mockItem = {
62
- type: 'book',
63
- slug: 'test-book',
64
- media: 'media-id',
65
- };
66
- const mockIcon = {};
67
- const mockPieces = {
68
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
69
- };
70
- const mockConfig = {
71
- url: { app: 'http://localhost' },
72
- };
73
- const mockPalette = { VIBRANT: { hex: '#FFFFFF' } };
74
- mocks.getPalette.mockResolvedValue(mockPalette);
75
- const props = await getProps(mockItem, mockIcon, mockPieces, mockConfig);
76
- expect(props.metadata).toEqual({});
77
- expect(props.tags).toEqual([]);
78
- expect(props.palette).toBe(mockPalette);
79
- expect(props.size).toEqual({ width: 1200, height: 630 });
80
- expect(props.helpers.getPieceUrl()).toBe('http://localhost/pieces/book/test-book');
81
- expect(props.helpers.getPieceImageUrl('image.jpg', 100, 'jpg')).toBe('luzzle://image.jpg');
82
- });
83
- });
84
- describe('replaceAsync', () => {
85
- test('should replace all matches asynchronously', async () => {
86
- const str = 'Hello world, hello universe!';
87
- const regex = /hello/gi;
88
- const asyncFn = async (match) => Promise.resolve(match.toUpperCase());
89
- const result = await replaceAsync(str, regex, asyncFn);
90
- expect(result).toBe('HELLO world, HELLO universe!');
91
- });
92
- test('should handle no matches', async () => {
93
- const str = 'Hello world!';
94
- const regex = /foo/gi;
95
- const asyncFn = async (match) => Promise.resolve(match.toUpperCase());
96
- const result = await replaceAsync(str, regex, asyncFn);
97
- expect(result).toBe('Hello world!');
98
- });
99
- test('should handle multiple capture groups', async () => {
100
- const str = 'url("luzzle://image.png")';
101
- const regex = /url\(([\\'"]?)(.*?)\1\)/g;
102
- const asyncFn = async (_, quote, url) => {
103
- return `url(${quote}data:image/png;base64,${btoa(url)}${quote})`;
104
- };
105
- const result = await replaceAsync(str, regex, asyncFn);
106
- expect(result).toBe('url("data:image/png;base64,bHV6emxlOi8vaW1hZ2UucG5n")');
107
- });
108
- });
109
- describe('findAndReplaceLuzzleUrls', () => {
110
- test('should replace luzzle:// in img src', async () => {
111
- const html = '<html><body><img src="luzzle://image.jpg"></body></html>';
112
- const mockPieces = {
113
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
114
- };
115
- mocks.pathExtname.mockReturnValue('.jpg');
116
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
117
- const $ = cheerio.load(result);
118
- expect($('img').attr('src')).toBe('data:image/jpg;base64,aW1hZ2VfZGF0YQ==');
119
- });
120
- test('should replace luzzle:// in img srcset', async () => {
121
- const html = '<html><body><img srcset="luzzle://image.jpg 1x, luzzle://image@2x.jpg 2x"></body></html>';
122
- const mockPieces = {
123
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
124
- };
125
- mocks.pathExtname.mockReturnValue('.jpg');
126
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
127
- const $ = cheerio.load(result);
128
- expect($('img').attr('srcset')).toContain('data:image/jpg;base64,aW1hZ2VfZGF0YQ== 1x');
129
- expect($('img').attr('srcset')).toContain('data:image/jpg;base64,aW1hZ2VfZGF0YQ== 2x');
130
- });
131
- test('should replace luzzle:// in style tag url()', async () => {
132
- const html = '<html><head><style>body { background-image: url(luzzle://bg.png); }</style></head></html>';
133
- const mockPieces = {
134
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
135
- };
136
- mocks.pathExtname.mockReturnValue('.png');
137
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
138
- const $ = cheerio.load(result);
139
- expect($('style').html()).toContain('background-image: url(data:image/png;base64,aW1hZ2VfZGF0YQ==);');
140
- });
141
- test('should replace luzzle:// in inline style url()', async () => {
142
- const html = '<html><body><div style="background-image: url(\'luzzle://bg.png\');"></div></body></html>';
143
- const mockPieces = {
144
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
145
- };
146
- mocks.pathExtname.mockReturnValue('.png');
147
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
148
- const $ = cheerio.load(result);
149
- expect($('div').attr('style')).toContain("background-image: url('data:image/png;base64,aW1hZ2VfZGF0YQ==');");
150
- });
151
- test('should handle multiple luzzle urls in different elements', async () => {
152
- const html = `
153
- <html>
154
- <body>
155
- <img src="luzzle://img1.jpg">
156
- <img srcset="luzzle://img2.jpg 1x">
157
- <div style="background: url(luzzle://bg.png);"></div>
158
- <style>
159
- .hero { background: url("luzzle://hero.jpg"); }
160
- </style>
161
- </body>
162
- </html>
163
- `;
164
- const mockPieces = {
165
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
166
- };
167
- mocks.pathExtname
168
- .mockReturnValueOnce('.jpg')
169
- .mockReturnValueOnce('.jpg')
170
- .mockReturnValueOnce('.png')
171
- .mockReturnValueOnce('.png');
172
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
173
- const $ = cheerio.load(result);
174
- expect($('img').eq(0).attr('src')).toBe('data:image/jpg;base64,aW1hZ2VfZGF0YQ==');
175
- expect($('img').eq(1).attr('srcset')).toContain('data:image/jpg;base64,aW1hZ2VfZGF0YQ== 1x');
176
- expect($('div').attr('style')).toContain('background: url(data:image/png;base64,aW1hZ2VfZGF0YQ==);');
177
- expect($('style').html()).toContain('background: url("data:image/png;base64,aW1hZ2VfZGF0YQ==");');
178
- });
179
- test('should not modify non-luzzle urls', async () => {
180
- const html = `
181
- <html>
182
- <body>
183
- <img src="http://example.com/image.jpg">
184
- <img srcset="/image.jpg 1x">
185
- <div style="background: url(/bg.png);"></div>
186
- <style>
187
- .hero { background: url("http://example.com/hero.jpg"); }
188
- </style>
189
- </body>
190
- </html>
191
- `;
192
- const mockPieces = {
193
- getPieceAsset: vi.fn().mockResolvedValue(Buffer.from('image_data')),
194
- };
195
- mocks.pathExtname.mockReturnValue('.jpg');
196
- const result = await findAndReplaceLuzzleUrls(html, mockPieces);
197
- const $ = cheerio.load(result);
198
- expect($('img').eq(0).attr('src')).toBe('http://example.com/image.jpg');
199
- expect($('img').eq(1).attr('srcset')).toBe('/image.jpg 1x');
200
- // Cheerio might strip url() for simple cases, so check for the content
201
- expect($('div').attr('style')).toContain('background: url(/bg.png);');
202
- expect($('style').html()).toContain('background: url("http://example.com/hero.jpg");');
203
- expect($('style').html()).not.toContain('data:image/');
204
- expect(mockPieces.getPieceAsset).not.toHaveBeenCalled();
205
- });
206
- });
207
- describe('bufferToBase64', () => {
208
- test('should convert a buffer to a base64 data URL', () => {
209
- const buffer = Buffer.from('test_data');
210
- const base64 = bufferToBase64(buffer, 'text', 'plain');
211
- expect(base64).toBe('data:text/plain;base64,dGVzdF9kYXRh');
212
- });
213
- });
214
- });
215
- //# sourceMappingURL=utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/commands/opengraph/utils.test.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import { WebPieces } from "../types.js";
2
- import { Component } from "svelte";
3
- declare const ASSET_IMAGE_MATCHER: RegExp;
4
- declare const ASSET_PATH_MATCHER: RegExp;
5
- declare const OpengraphImageWidth = 1200;
6
- declare const OpengraphImageHeight = 630;
7
- declare const ASSET_SIZES: {
8
- readonly s: 125;
9
- readonly m: 250;
10
- readonly l: 500;
11
- readonly xl: 1000;
12
- };
13
- declare function getOpenGraphPath(type: string, id: string): string;
14
- declare function isImage(asset: string): boolean;
15
- declare function getAssetDir(type: string, id: string): string;
16
- declare function widthToSize(minWidth: number): keyof typeof ASSET_SIZES;
17
- declare function getImageAssetPath(type: string, id: string, asset: string, width: number, format: 'jpg' | 'avif'): string;
18
- declare function getAssetPath(type: string, id: string, asset: string): string;
19
- type PieceIconProps = {
20
- piece: WebPieces & {
21
- frontmatter: Record<string, unknown>;
22
- tags: string[];
23
- };
24
- size: {
25
- width: number;
26
- height: number;
27
- };
28
- lazy?: boolean;
29
- helpers: PieceComponentHelpers;
30
- };
31
- type PieceIconPalette = {
32
- accent: string;
33
- background: string;
34
- bodyText: string;
35
- muted: string;
36
- titleText: string;
37
- };
38
- type PieceComponentHelpers = {
39
- getPieceUrl: () => string;
40
- getPieceImageUrl: (image: string, minWidth: number, format: 'jpg' | 'avif') => string;
41
- };
42
- type PieceOpengraphProps = {
43
- Icon?: Component<PieceIconProps>;
44
- piece: WebPieces & {
45
- frontmatter: Record<string, unknown>;
46
- tags: string[];
47
- };
48
- size: {
49
- width: number;
50
- height: number;
51
- };
52
- palette?: PieceIconPalette;
53
- helpers: PieceComponentHelpers;
54
- };
55
- export { getOpenGraphPath, isImage, getAssetDir, widthToSize, getImageAssetPath, getAssetPath, ASSET_SIZES, ASSET_IMAGE_MATCHER, ASSET_PATH_MATCHER, OpengraphImageWidth, OpengraphImageHeight, type PieceIconProps, type PieceOpengraphProps, type PieceIconPalette, type PieceComponentHelpers, };
@@ -1,52 +0,0 @@
1
- const ASSET_IMAGE_MATCHER = /\.(jpg|jpeg|png|webp|avif|gif)$/i;
2
- const ASSET_PATH_MATCHER = /^(?:.*[\\/])?(([^/\\]+?)(?:\.([^.]+))?)$/;
3
- const OpengraphImageWidth = 1200;
4
- const OpengraphImageHeight = 630;
5
- const ASSET_SIZES = {
6
- s: 125,
7
- m: 250,
8
- l: 500,
9
- xl: 1000,
10
- };
11
- function getOpenGraphPath(type, id) {
12
- return `${type}/${id}/opengraph.png`;
13
- }
14
- function isImage(asset) {
15
- const match = asset.match(ASSET_PATH_MATCHER);
16
- const filename = match ? match[1] : asset;
17
- return ASSET_IMAGE_MATCHER.test(filename);
18
- }
19
- function getAssetDir(type, id) {
20
- return `${type}/${id}`;
21
- }
22
- function widthToSize(minWidth) {
23
- if (minWidth <= ASSET_SIZES.s) {
24
- return 's';
25
- }
26
- else if (minWidth <= ASSET_SIZES.m) {
27
- return 'm';
28
- }
29
- else if (minWidth <= ASSET_SIZES.l) {
30
- return 'l';
31
- }
32
- else {
33
- return 'xl';
34
- }
35
- }
36
- function getImageAssetPath(type, id, asset, width, format) {
37
- const match = asset.match(ASSET_PATH_MATCHER);
38
- const filename = match ? match[1] : asset;
39
- const basename = match ? match[2] : filename;
40
- const dir = getAssetDir(type, id);
41
- const size = widthToSize(width);
42
- return `${dir}/${basename}.${size}.${format}`;
43
- }
44
- function getAssetPath(type, id, asset) {
45
- const dir = getAssetDir(type, id);
46
- const match = asset.match(ASSET_PATH_MATCHER);
47
- /* v8 ignore next */
48
- const filename = match ? match[1] : asset;
49
- return `${dir}/${filename}`;
50
- }
51
- export { getOpenGraphPath, isImage, getAssetDir, widthToSize, getImageAssetPath, getAssetPath, ASSET_SIZES, ASSET_IMAGE_MATCHER, ASSET_PATH_MATCHER, OpengraphImageWidth, OpengraphImageHeight, };
52
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/lib/browser.ts"],"names":[],"mappings":"AAGA,MAAM,mBAAmB,GAAG,kCAAkC,CAAA;AAC9D,MAAM,kBAAkB,GAAG,0CAA0C,CAAA;AACrE,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAChC,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAChC,MAAM,WAAW,GAAG;IACnB,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;CACC,CAAA;AAEV,SAAS,gBAAgB,CAAC,IAAY,EAAE,EAAU;IACjD,OAAO,GAAG,IAAI,IAAI,EAAE,gBAAgB,CAAA;AACrC,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,EAAU;IAC5C,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAA;AACvB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACpC,IAAI,QAAQ,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAA;IACX,CAAC;SAAM,IAAI,QAAQ,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,CAAA;IACX,CAAC;SAAM,IAAI,QAAQ,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,CAAA;IACX,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CACzB,IAAY,EACZ,EAAU,EACV,KAAa,EACb,KAAa,EACb,MAAsB;IAEtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC5C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAE/B,OAAO,GAAG,GAAG,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,EAAE,CAAA;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,EAAU,EAAE,KAAa;IAC5D,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAC7C,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAEzC,OAAO,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAA;AAC5B,CAAC;AAoCD,OAAO,EACN,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GAKpB,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,67 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import { getImageAssetPath, isImage, getAssetPath, getAssetDir, getOpenGraphPath, } from './browser.js';
3
- describe('src/commands/assets/utils', () => {
4
- test('should return the path to the asset directory', () => {
5
- const path = getAssetDir('books', '1');
6
- expect(path).toBe('books/1');
7
- });
8
- test('should return the path to the variant for size s', () => {
9
- const path = getImageAssetPath('books', '1', 'image.jpg', 100, 'jpg');
10
- expect(path).toBe('books/1/image.s.jpg');
11
- });
12
- test('should return the path to the variant for size m', () => {
13
- const path = getImageAssetPath('books', '1', 'image.jpg', 200, 'jpg');
14
- expect(path).toBe('books/1/image.m.jpg');
15
- });
16
- test('should return the path to the variant for size l', () => {
17
- const path = getImageAssetPath('books', '1', 'image.jpg', 350, 'jpg');
18
- expect(path).toBe('books/1/image.l.jpg');
19
- });
20
- test('should return the path to the variant for size xl', () => {
21
- const path = getImageAssetPath('books', '1', 'image.jpg', 600, 'jpg');
22
- expect(path).toBe('books/1/image.xl.jpg');
23
- });
24
- test('should return the path to the variant for size xl when width is larger than 1000', () => {
25
- const path = getImageAssetPath('books', '1', 'image.jpg', 1200, 'jpg');
26
- expect(path).toBe('books/1/image.xl.jpg');
27
- });
28
- test('should return the path to the variant with avif format', () => {
29
- const path = getImageAssetPath('books', '1', 'image.jpg', 350, 'avif');
30
- expect(path).toBe('books/1/image.l.avif');
31
- });
32
- test('should return false if the asset is not an image', () => {
33
- expect(isImage('document.pdf')).toBe(false);
34
- });
35
- test('should return true if the asset is an image', () => {
36
- expect(isImage('image.jpg')).toBe(true);
37
- expect(isImage('image.jpeg')).toBe(true);
38
- expect(isImage('image.png')).toBe(true);
39
- expect(isImage('image.webp')).toBe(true);
40
- expect(isImage('image.avif')).toBe(true);
41
- expect(isImage('image.gif')).toBe(true);
42
- });
43
- test('should return false if the asset has no extension', () => {
44
- expect(isImage('image')).toBe(false);
45
- });
46
- test('isImage should handle asset without matching path', () => {
47
- expect(isImage('')).toBe(false);
48
- expect(isImage('invalid-asset-name')).toBe(false);
49
- });
50
- test('getImageAssetPath should handle asset without matching path', () => {
51
- const path = getImageAssetPath('books', '1', '', 350, 'jpg');
52
- expect(path).toBe('books/1/.l.jpg');
53
- const path2 = getImageAssetPath('books', '1', 'invalid-asset-name', 350, 'jpg');
54
- expect(path2).toBe('books/1/invalid-asset-name.l.jpg');
55
- });
56
- describe('getOpenGraphPath', () => {
57
- test('should return the correct opengraph path', () => {
58
- const path = getOpenGraphPath('post', '123');
59
- expect(path).toBe('post/123/opengraph.png');
60
- });
61
- });
62
- test('getAssetPath should handle asset with matching path', () => {
63
- const path = getAssetPath('books', '1', '/path/to/asset.jpg');
64
- expect(path).toBe('books/1/asset.jpg');
65
- });
66
- });
67
- //# sourceMappingURL=browser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.test.js","sourceRoot":"","sources":["../../../src/lib/browser.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { type Schema as Config } from './schema.js';
2
- export type ConfigPublic = {
3
- url: Pick<Config['url'], 'app' | 'luzzle_assets' | 'app_assets'>;
4
- text: Config['text'];
5
- };
6
- declare function loadConfig(userConfigPath?: string): Config;
7
- declare function getConfigValue(obj: Config, path: string): unknown;
8
- declare function setConfigValue(obj: Config, path: string, value: unknown): void;
9
- export { loadConfig, getConfigValue, setConfigValue, type Config };
@@ -1,56 +0,0 @@
1
- import { readFileSync, existsSync } from 'fs';
2
- import { parse as yamlParse } from 'yaml';
3
- import { Ajv } from 'ajv';
4
- import { deepMerge } from '../deep-merge.js';
5
- import defaults from './defaults.json' with { type: 'json' };
6
- import schemaJson from './schema.json' with { type: 'json' };
7
- function loadConfig(userConfigPath) {
8
- const schema = schemaJson;
9
- const config = defaults;
10
- const ajv = new Ajv();
11
- const validate = ajv.compile(schema);
12
- config.paths.config = userConfigPath;
13
- if (userConfigPath) {
14
- if (existsSync(userConfigPath)) {
15
- const userConfig = yamlParse(readFileSync(userConfigPath, 'utf8'));
16
- const mergedConfig = deepMerge(config, userConfig);
17
- if (!validate(mergedConfig)) {
18
- throw new Error(`Configuration validation failed: ${ajv.errorsText(validate.errors)}`);
19
- }
20
- return mergedConfig;
21
- }
22
- else {
23
- /* v8 ignore start */
24
- console.warn(`User config file not found at: ${userConfigPath}`);
25
- /* v8 ignore stop */
26
- }
27
- }
28
- /* v8 ignore start */
29
- if (!validate(config)) {
30
- throw new Error(`Configuration validation failed: ${ajv.errorsText(validate.errors)}`);
31
- }
32
- /* v8 ignore stop */
33
- return config;
34
- }
35
- function getConfigValue(obj, path) {
36
- return path.split('.').reduce((acc, key) => {
37
- if (acc && typeof acc === 'object' && key in acc) {
38
- return acc[key];
39
- }
40
- return undefined;
41
- }, obj);
42
- }
43
- function setConfigValue(obj, path, value) {
44
- const keys = path.split('.');
45
- const lastKey = keys.pop();
46
- let current = obj;
47
- for (const key of keys) {
48
- if (typeof current[key] !== 'object' || current[key] === null) {
49
- current[key] = {};
50
- }
51
- current = current[key];
52
- }
53
- current[lastKey] = value;
54
- }
55
- export { loadConfig, getConfigValue, setConfigValue };
56
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/config/config.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { loadConfig, getConfigValue, setConfigValue } from './config.js';
3
- describe('lib/config/config', () => {
4
- test('should validate default config against schema', async () => {
5
- try {
6
- const config = loadConfig();
7
- expect(config).toBeDefined();
8
- }
9
- catch (e) {
10
- if (e) {
11
- expect(e).toBeUndefined();
12
- }
13
- }
14
- });
15
- test('should load a user config', () => {
16
- const config = loadConfig(`${import.meta.dirname}/user.config.yaml`);
17
- expect(config).toBeDefined();
18
- });
19
- test('should load a user config', () => {
20
- const config = loadConfig(`${import.meta.dirname}/not.user.config.yaml`);
21
- expect(config).toBeDefined();
22
- });
23
- test('should throw an error if config validation fails with user config', () => {
24
- expect(() => loadConfig(`${import.meta.dirname}/user-error.config.yaml`)).toThrow('Configuration validation failed');
25
- });
26
- describe('getConfigValue', () => {
27
- test('should return the correct value for a given path', () => {
28
- const config = {
29
- a: {
30
- b: {
31
- c: 'value'
32
- }
33
- }
34
- };
35
- const value = getConfigValue(config, 'a.b.c');
36
- expect(value).toBe('value');
37
- });
38
- test('should return undefined for a non-existent path', () => {
39
- const config = {
40
- a: {
41
- b: {
42
- c: 'value'
43
- }
44
- }
45
- };
46
- const value = getConfigValue(config, 'a.b.d');
47
- expect(value).toBeUndefined();
48
- });
49
- });
50
- describe('setConfigValue', () => {
51
- test('should correctly set a value at a given path', () => {
52
- const config = {
53
- a: {
54
- b: {
55
- c: 'value'
56
- }
57
- }
58
- };
59
- setConfigValue(config, 'a.b.c', 'new-value');
60
- expect(config.a.b.c).toBe('new-value');
61
- });
62
- test('should create intermediate objects if they don\'t exist', () => {
63
- const config = {
64
- a: {}
65
- };
66
- setConfigValue(config, 'a.b.c', 'value');
67
- expect(config.a.b.c).toBe('value');
68
- });
69
- });
70
- });
71
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../../src/lib/config/config.test.ts"],"names":[],"mappings":"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"}