@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.
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -7
- package/dist/src/browser.d.ts +0 -1
- package/dist/src/browser.js +0 -2
- package/dist/src/browser.js.map +0 -1
- package/dist/src/commands/opengraph/html.d.ts +0 -4
- package/dist/src/commands/opengraph/html.js +0 -47
- package/dist/src/commands/opengraph/html.js.map +0 -1
- package/dist/src/commands/opengraph/html.test.d.ts +0 -1
- package/dist/src/commands/opengraph/html.test.js +0 -79
- package/dist/src/commands/opengraph/html.test.js.map +0 -1
- package/dist/src/commands/opengraph/svelte.d.ts +0 -7
- package/dist/src/commands/opengraph/svelte.js +0 -77
- package/dist/src/commands/opengraph/svelte.js.map +0 -1
- package/dist/src/commands/opengraph/svelte.test.d.ts +0 -1
- package/dist/src/commands/opengraph/svelte.test.js +0 -189
- package/dist/src/commands/opengraph/svelte.test.js.map +0 -1
- package/dist/src/commands/opengraph/utils.d.ts +0 -8
- package/dist/src/commands/opengraph/utils.js +0 -136
- package/dist/src/commands/opengraph/utils.js.map +0 -1
- package/dist/src/commands/opengraph/utils.test.d.ts +0 -1
- package/dist/src/commands/opengraph/utils.test.js +0 -215
- package/dist/src/commands/opengraph/utils.test.js.map +0 -1
- package/dist/src/lib/browser.d.ts +0 -55
- package/dist/src/lib/browser.js +0 -52
- package/dist/src/lib/browser.js.map +0 -1
- package/dist/src/lib/browser.test.d.ts +0 -1
- package/dist/src/lib/browser.test.js +0 -67
- package/dist/src/lib/browser.test.js.map +0 -1
- package/dist/src/lib/config/config.d.ts +0 -9
- package/dist/src/lib/config/config.js +0 -56
- package/dist/src/lib/config/config.js.map +0 -1
- package/dist/src/lib/config/config.test.d.ts +0 -1
- package/dist/src/lib/config/config.test.js +0 -71
- package/dist/src/lib/config/config.test.js.map +0 -1
- package/dist/src/lib/config/config.test.ts +0 -88
- package/dist/src/lib/config/config.ts +0 -74
- package/dist/src/lib/config/defaults.json +0 -145
- package/dist/src/lib/config/defaults.yaml +0 -151
- package/dist/src/lib/config/schema.d.ts +0 -172
- package/dist/src/lib/config/schema.js +0 -8
- package/dist/src/lib/config/schema.js.map +0 -1
- package/dist/src/lib/config/schema.json +0 -663
- package/dist/src/lib/config/schema.ts +0 -294
- package/dist/src/lib/config/user-error.config.yaml +0 -2
- package/dist/src/lib/config/user.config.yaml +0 -2
- package/dist/src/lib/deep-merge.d.ts +0 -1
- package/dist/src/lib/deep-merge.js +0 -27
- package/dist/src/lib/deep-merge.js.map +0 -1
- package/dist/src/lib/deep-merge.test.d.ts +0 -1
- package/dist/src/lib/deep-merge.test.js +0 -29
- package/dist/src/lib/deep-merge.test.js.map +0 -1
- package/dist/src/lib/vibrant.d.ts +0 -21
- package/dist/src/lib/vibrant.js +0 -78
- package/dist/src/lib/vibrant.js.map +0 -1
- package/dist/src/lib/vibrant.test.d.ts +0 -1
- package/dist/src/lib/vibrant.test.js +0 -164
- package/dist/src/lib/vibrant.test.js.map +0 -1
- package/dist/src/sdk.d.ts +0 -4
- package/dist/src/sdk.js +0 -4
- package/dist/src/sdk.js.map +0 -1
- package/dist/src/types.d.ts +0 -2
- package/dist/src/types.js +0 -2
- 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, };
|
package/dist/src/lib/browser.js
DELETED
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,QAAQ,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC5D,OAAO,UAAU,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAO5D,SAAS,UAAU,CAAC,cAAuB;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAA;IACzB,MAAM,MAAM,GAAG,QAAkB,CAAA;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAEpC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAA;IAEpC,IAAI,cAAc,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAoB,CAAA;YACrF,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAW,CAAA;YAE5D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACvF,CAAC;YAED,OAAO,YAAY,CAAA;QACpB,CAAC;aAAM,CAAC;YACP,qBAAqB;YACrB,OAAO,CAAC,IAAI,CAAC,kCAAkC,cAAc,EAAE,CAAC,CAAA;YAChE,oBAAoB;QACrB,CAAC;IACF,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IACD,oBAAoB;IAEpB,OAAO,MAAM,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,IAAY;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACZ,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,GAAG,CAA4B,CAAA;QAC3C,CAAC;QACD,OAAO,SAAS,CAAA;IACjB,CAAC,EACD,GAAqD,CACrD,CAAA;AACF,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,KAAc;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAG,CAAA;IAC3B,IAAI,OAAO,GAA4B,GAAyC,CAAA;IAEhF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAA;IAClD,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;AACzB,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAe,CAAA"}
|
|
@@ -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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"}
|