@leadcms/sdk 3.3.10 → 3.3.12

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 (75) hide show
  1. package/dist/cli/bin/pull-settings.d.ts +6 -0
  2. package/dist/cli/bin/pull-settings.d.ts.map +1 -0
  3. package/dist/cli/bin/pull-settings.js +31 -0
  4. package/dist/cli/bin/pull-settings.js.map +1 -0
  5. package/dist/cli/bin/push-all.js +8 -1
  6. package/dist/cli/bin/push-all.js.map +1 -1
  7. package/dist/cli/bin/push-email-templates.js +13 -1
  8. package/dist/cli/bin/push-email-templates.js.map +1 -1
  9. package/dist/cli/bin/push-settings.d.ts +6 -0
  10. package/dist/cli/bin/push-settings.d.ts.map +1 -0
  11. package/dist/cli/bin/push-settings.js +34 -0
  12. package/dist/cli/bin/push-settings.js.map +1 -0
  13. package/dist/cli/bin/status-all.js +54 -2
  14. package/dist/cli/bin/status-all.js.map +1 -1
  15. package/dist/cli/bin/status-settings.d.ts +6 -0
  16. package/dist/cli/bin/status-settings.d.ts.map +1 -0
  17. package/dist/cli/bin/status-settings.js +27 -0
  18. package/dist/cli/bin/status-settings.js.map +1 -0
  19. package/dist/cli/index.js +20 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/cms-config-types.d.ts +4 -0
  26. package/dist/lib/cms-config-types.d.ts.map +1 -1
  27. package/dist/lib/cms-config-types.js +6 -0
  28. package/dist/lib/cms-config-types.js.map +1 -1
  29. package/dist/lib/cms.d.ts.map +1 -1
  30. package/dist/lib/cms.js +1 -0
  31. package/dist/lib/cms.js.map +1 -1
  32. package/dist/lib/config.d.ts +2 -0
  33. package/dist/lib/config.d.ts.map +1 -1
  34. package/dist/lib/config.js +6 -1
  35. package/dist/lib/config.js.map +1 -1
  36. package/dist/lib/data-service.js +1 -1
  37. package/dist/lib/data-service.js.map +1 -1
  38. package/dist/lib/settings-types.d.ts +120 -0
  39. package/dist/lib/settings-types.d.ts.map +1 -0
  40. package/dist/lib/settings-types.js +84 -0
  41. package/dist/lib/settings-types.js.map +1 -0
  42. package/dist/scripts/init-leadcms.d.ts.map +1 -1
  43. package/dist/scripts/init-leadcms.js +15 -1
  44. package/dist/scripts/init-leadcms.js.map +1 -1
  45. package/dist/scripts/leadcms-helpers.d.ts +1 -0
  46. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  47. package/dist/scripts/leadcms-helpers.js +1 -0
  48. package/dist/scripts/leadcms-helpers.js.map +1 -1
  49. package/dist/scripts/pull-all.d.ts +5 -1
  50. package/dist/scripts/pull-all.d.ts.map +1 -1
  51. package/dist/scripts/pull-all.js +32 -5
  52. package/dist/scripts/pull-all.js.map +1 -1
  53. package/dist/scripts/pull-settings.d.ts +19 -0
  54. package/dist/scripts/pull-settings.d.ts.map +1 -0
  55. package/dist/scripts/pull-settings.js +69 -0
  56. package/dist/scripts/pull-settings.js.map +1 -0
  57. package/dist/scripts/push-email-templates.d.ts +25 -0
  58. package/dist/scripts/push-email-templates.d.ts.map +1 -1
  59. package/dist/scripts/push-email-templates.js +66 -13
  60. package/dist/scripts/push-email-templates.js.map +1 -1
  61. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  62. package/dist/scripts/push-leadcms-content.js +29 -10
  63. package/dist/scripts/push-leadcms-content.js.map +1 -1
  64. package/dist/scripts/push-media.d.ts.map +1 -1
  65. package/dist/scripts/push-media.js +13 -8
  66. package/dist/scripts/push-media.js.map +1 -1
  67. package/dist/scripts/push-settings.d.ts +56 -0
  68. package/dist/scripts/push-settings.d.ts.map +1 -0
  69. package/dist/scripts/push-settings.js +272 -0
  70. package/dist/scripts/push-settings.js.map +1 -0
  71. package/dist/scripts/settings-manager.d.ts +52 -0
  72. package/dist/scripts/settings-manager.d.ts.map +1 -0
  73. package/dist/scripts/settings-manager.js +469 -0
  74. package/dist/scripts/settings-manager.js.map +1 -0
  75. package/package.json +1 -1
@@ -0,0 +1,469 @@
1
+ /**
2
+ * LeadCMS Settings Management
3
+ *
4
+ * Handles fetching, saving, reading, comparing, and pushing CMS settings.
5
+ * Settings are stored locally as:
6
+ * - ai-siteprofile/*.md (one file per AI.SiteProfile.* key)
7
+ * - content.json (all Content.* keys grouped)
8
+ * - media.json (all Media.* keys grouped)
9
+ *
10
+ * Language-specific settings go into locale subdirectories.
11
+ */
12
+ import fs from "fs/promises";
13
+ import path from "path";
14
+ import axios from "axios";
15
+ import { logger } from "../lib/logger.js";
16
+ import { TRACKED_SETTING_KEYS, CONTENT_SETTING_PREFIX, MEDIA_SETTING_PREFIX, aiSiteProfileKeyToFileName, fileNameToAiSiteProfileKey, isAiSiteProfileKey, isContentSettingKey, isMediaSettingKey, } from "../lib/settings-types.js";
17
+ // ── Constants ────────────────────────────────────────────────────────────────
18
+ const AI_SITEPROFILE_FOLDER = "ai-siteprofile";
19
+ // ── Export remote settings ───────────────────────────────────────────────────
20
+ /**
21
+ * Fetch all settings from the CMS via /api/settings/export
22
+ */
23
+ export async function fetchRemoteSettings(leadCMSUrl, leadCMSApiKey) {
24
+ if (!leadCMSUrl)
25
+ throw new Error("LeadCMS URL is not configured.");
26
+ if (!leadCMSApiKey)
27
+ throw new Error("LeadCMS API key is required to fetch settings.");
28
+ const url = new URL("/api/settings/export", leadCMSUrl);
29
+ logger.verbose(`[LeadCMS] Fetching settings from ${url.toString()}`);
30
+ const res = await axios.get(url.toString(), {
31
+ headers: {
32
+ Authorization: `Bearer ${leadCMSApiKey}`,
33
+ Accept: "text/json",
34
+ },
35
+ });
36
+ const allSettings = res.data || [];
37
+ logger.verbose(`[LeadCMS] Received ${allSettings.length} settings from CMS`);
38
+ return allSettings;
39
+ }
40
+ /**
41
+ * Filter remote settings to only tracked keys.
42
+ * Also filters out settings with null/empty values.
43
+ */
44
+ export function filterTrackedSettings(settings) {
45
+ return settings.filter((s) => {
46
+ if (!TRACKED_SETTING_KEYS.includes(s.key))
47
+ return false;
48
+ if (s.value === null || s.value === undefined || s.value === "")
49
+ return false;
50
+ return true;
51
+ });
52
+ }
53
+ // ── Save settings locally ────────────────────────────────────────────────────
54
+ /**
55
+ * Save fetched settings to the local settings directory.
56
+ *
57
+ * @param settings - Tracked settings from the CMS
58
+ * @param settingsDir - Resolved path to the settings directory
59
+ * @param defaultLanguage - The project's default language
60
+ * @param targetName - Optional: only save settings matching this key name
61
+ */
62
+ export async function saveSettingsLocally(settings, settingsDir, defaultLanguage, targetName) {
63
+ const reconcile = !targetName;
64
+ // Group settings by language
65
+ const byLanguage = new Map();
66
+ for (const setting of settings) {
67
+ if (targetName && setting.key !== targetName)
68
+ continue;
69
+ const lang = setting.language || null;
70
+ const langKey = lang || "__default__";
71
+ if (!byLanguage.has(langKey))
72
+ byLanguage.set(langKey, []);
73
+ byLanguage.get(langKey).push(setting);
74
+ }
75
+ for (const [langKey, langSettings] of byLanguage) {
76
+ const isDefault = langKey === "__default__";
77
+ const baseDir = isDefault ? settingsDir : path.join(settingsDir, langKey);
78
+ await saveSettingsForLanguage(langSettings, baseDir, reconcile);
79
+ }
80
+ if (reconcile) {
81
+ await reconcileMissingLanguages(settingsDir, byLanguage);
82
+ }
83
+ }
84
+ /**
85
+ * Save settings for a single language to a directory.
86
+ */
87
+ async function saveSettingsForLanguage(settings, baseDir, reconcile) {
88
+ // Group by category
89
+ const aiSettings = settings.filter((s) => isAiSiteProfileKey(s.key));
90
+ const contentSettings = settings.filter((s) => isContentSettingKey(s.key));
91
+ const mediaSettings = settings.filter((s) => isMediaSettingKey(s.key));
92
+ // Save AI SiteProfile as individual .md files
93
+ if (aiSettings.length > 0 || reconcile) {
94
+ const aiDir = path.join(baseDir, AI_SITEPROFILE_FOLDER);
95
+ if (aiSettings.length > 0) {
96
+ await fs.mkdir(aiDir, { recursive: true });
97
+ for (const setting of aiSettings) {
98
+ const fileName = aiSiteProfileKeyToFileName(setting.key) + ".md";
99
+ const filePath = path.join(aiDir, fileName);
100
+ await fs.writeFile(filePath, setting.value || "", "utf8");
101
+ logger.verbose(`[LeadCMS] Saved ${setting.key} → ${filePath}`);
102
+ }
103
+ }
104
+ if (reconcile) {
105
+ const keepFiles = new Set(aiSettings.map((s) => aiSiteProfileKeyToFileName(s.key) + ".md"));
106
+ const expectedTrackedFiles = TRACKED_SETTING_KEYS
107
+ .filter((key) => isAiSiteProfileKey(key))
108
+ .map((key) => aiSiteProfileKeyToFileName(key) + ".md");
109
+ for (const fileName of expectedTrackedFiles) {
110
+ if (keepFiles.has(fileName))
111
+ continue;
112
+ const filePath = path.join(aiDir, fileName);
113
+ try {
114
+ await fs.rm(filePath, { force: true });
115
+ }
116
+ catch {
117
+ // ignore missing files
118
+ }
119
+ }
120
+ try {
121
+ const remaining = await fs.readdir(aiDir);
122
+ if (remaining.length === 0) {
123
+ await fs.rm(aiDir, { recursive: true, force: true });
124
+ }
125
+ }
126
+ catch {
127
+ // ignore when directory does not exist
128
+ }
129
+ }
130
+ }
131
+ // Save Content settings as content.json
132
+ if (contentSettings.length > 0 || reconcile) {
133
+ await fs.mkdir(baseDir, { recursive: true });
134
+ const contentObj = {};
135
+ for (const s of contentSettings) {
136
+ // Strip the prefix for cleaner JSON keys
137
+ const shortKey = s.key.slice(CONTENT_SETTING_PREFIX.length);
138
+ contentObj[shortKey] = s.value || "";
139
+ }
140
+ const filePath = path.join(baseDir, "content.json");
141
+ if (Object.keys(contentObj).length > 0) {
142
+ await fs.writeFile(filePath, JSON.stringify(contentObj, null, 2) + "\n", "utf8");
143
+ logger.verbose(`[LeadCMS] Saved content settings → ${filePath}`);
144
+ }
145
+ else if (reconcile) {
146
+ try {
147
+ await fs.rm(filePath, { force: true });
148
+ }
149
+ catch {
150
+ // ignore missing files
151
+ }
152
+ }
153
+ }
154
+ // Save Media settings as media.json
155
+ if (mediaSettings.length > 0 || reconcile) {
156
+ await fs.mkdir(baseDir, { recursive: true });
157
+ const mediaObj = {};
158
+ for (const s of mediaSettings) {
159
+ const shortKey = s.key.slice(MEDIA_SETTING_PREFIX.length);
160
+ mediaObj[shortKey] = s.value || "";
161
+ }
162
+ const filePath = path.join(baseDir, "media.json");
163
+ if (Object.keys(mediaObj).length > 0) {
164
+ await fs.writeFile(filePath, JSON.stringify(mediaObj, null, 2) + "\n", "utf8");
165
+ logger.verbose(`[LeadCMS] Saved media settings → ${filePath}`);
166
+ }
167
+ else if (reconcile) {
168
+ try {
169
+ await fs.rm(filePath, { force: true });
170
+ }
171
+ catch {
172
+ // ignore missing files
173
+ }
174
+ }
175
+ }
176
+ if (reconcile) {
177
+ try {
178
+ const remaining = await fs.readdir(baseDir);
179
+ if (remaining.length === 0) {
180
+ await fs.rm(baseDir, { recursive: true, force: true });
181
+ }
182
+ }
183
+ catch {
184
+ // ignore when directory does not exist
185
+ }
186
+ }
187
+ }
188
+ async function reconcileMissingLanguages(settingsDir, byLanguage) {
189
+ const hasDefault = byLanguage.has("__default__");
190
+ if (!hasDefault) {
191
+ await saveSettingsForLanguage([], settingsDir, true);
192
+ }
193
+ try {
194
+ const entries = await fs.readdir(settingsDir, { withFileTypes: true });
195
+ for (const entry of entries) {
196
+ if (!entry.isDirectory())
197
+ continue;
198
+ if (entry.name === AI_SITEPROFILE_FOLDER)
199
+ continue;
200
+ if (!/^[a-z]{2}(-[a-zA-Z]{2,})?$/.test(entry.name))
201
+ continue;
202
+ if (byLanguage.has(entry.name))
203
+ continue;
204
+ const langDir = path.join(settingsDir, entry.name);
205
+ await saveSettingsForLanguage([], langDir, true);
206
+ }
207
+ }
208
+ catch {
209
+ return;
210
+ }
211
+ }
212
+ // ── Read local settings ──────────────────────────────────────────────────────
213
+ /**
214
+ * Read all locally stored settings from the settings directory.
215
+ *
216
+ * @param settingsDir - Resolved path to the settings directory
217
+ * @param defaultLanguage - The project's default language
218
+ * @returns Array of local setting values with their keys and languages
219
+ */
220
+ export async function readLocalSettings(settingsDir, defaultLanguage) {
221
+ const results = [];
222
+ try {
223
+ await fs.access(settingsDir);
224
+ }
225
+ catch {
226
+ // Settings directory doesn't exist yet
227
+ return results;
228
+ }
229
+ // Read default language settings
230
+ const defaultSettings = await readLocalSettingsForDir(settingsDir, null);
231
+ results.push(...defaultSettings);
232
+ // Scan for locale subdirectories
233
+ const entries = await fs.readdir(settingsDir, { withFileTypes: true });
234
+ for (const entry of entries) {
235
+ if (!entry.isDirectory())
236
+ continue;
237
+ // Skip the ai-siteprofile folder (it's not a language folder)
238
+ if (entry.name === AI_SITEPROFILE_FOLDER)
239
+ continue;
240
+ // Check if it looks like a locale directory
241
+ if (/^[a-z]{2}(-[a-zA-Z]{2,})?$/.test(entry.name)) {
242
+ const langDir = path.join(settingsDir, entry.name);
243
+ const langSettings = await readLocalSettingsForDir(langDir, entry.name);
244
+ results.push(...langSettings);
245
+ }
246
+ }
247
+ return results;
248
+ }
249
+ /**
250
+ * Read settings from a single directory (for one language).
251
+ */
252
+ async function readLocalSettingsForDir(dir, language) {
253
+ const results = [];
254
+ // Read AI SiteProfile .md files
255
+ const aiDir = path.join(dir, AI_SITEPROFILE_FOLDER);
256
+ try {
257
+ const aiFiles = await fs.readdir(aiDir);
258
+ for (const file of aiFiles) {
259
+ if (!file.endsWith(".md"))
260
+ continue;
261
+ const baseName = file.slice(0, -3); // strip .md
262
+ const key = fileNameToAiSiteProfileKey(baseName);
263
+ if (!key) {
264
+ logger.verbose(`[LeadCMS] Unknown ai-siteprofile file: ${file}, skipping`);
265
+ continue;
266
+ }
267
+ const content = await fs.readFile(path.join(aiDir, file), "utf8");
268
+ results.push({ key, value: content, language });
269
+ }
270
+ }
271
+ catch {
272
+ // ai-siteprofile directory doesn't exist
273
+ }
274
+ // Read content.json
275
+ try {
276
+ const contentPath = path.join(dir, "content.json");
277
+ const contentRaw = await fs.readFile(contentPath, "utf8");
278
+ const contentObj = JSON.parse(contentRaw);
279
+ for (const [shortKey, value] of Object.entries(contentObj)) {
280
+ const fullKey = CONTENT_SETTING_PREFIX + shortKey;
281
+ if (TRACKED_SETTING_KEYS.includes(fullKey)) {
282
+ results.push({ key: fullKey, value, language });
283
+ }
284
+ }
285
+ }
286
+ catch {
287
+ // content.json doesn't exist
288
+ }
289
+ // Read media.json
290
+ try {
291
+ const mediaPath = path.join(dir, "media.json");
292
+ const mediaRaw = await fs.readFile(mediaPath, "utf8");
293
+ const mediaObj = JSON.parse(mediaRaw);
294
+ for (const [shortKey, value] of Object.entries(mediaObj)) {
295
+ const fullKey = MEDIA_SETTING_PREFIX + shortKey;
296
+ if (TRACKED_SETTING_KEYS.includes(fullKey)) {
297
+ results.push({ key: fullKey, value, language });
298
+ }
299
+ }
300
+ }
301
+ catch {
302
+ // media.json doesn't exist
303
+ }
304
+ return results;
305
+ }
306
+ // ── Compare local vs remote ─────────────────────────────────────────────────
307
+ /**
308
+ * Build a comparison between local and remote settings.
309
+ * Only includes tracked settings.
310
+ */
311
+ export function buildSettingsStatus(localSettings, remoteSettings) {
312
+ const comparisons = [];
313
+ const seen = new Set();
314
+ // Build lookup for remote settings: "key|language" → SettingDetailsDto
315
+ const remoteMap = new Map();
316
+ for (const rs of remoteSettings) {
317
+ if (!TRACKED_SETTING_KEYS.includes(rs.key))
318
+ continue;
319
+ const mapKey = `${rs.key}|${rs.language || ""}`;
320
+ remoteMap.set(mapKey, rs);
321
+ }
322
+ // Build lookup for local settings: "key|language" → LocalSettingValue
323
+ const localMap = new Map();
324
+ for (const ls of localSettings) {
325
+ const mapKey = `${ls.key}|${ls.language || ""}`;
326
+ localMap.set(mapKey, ls);
327
+ }
328
+ // Compare all local settings against remote
329
+ for (const [mapKey, local] of localMap) {
330
+ seen.add(mapKey);
331
+ const remote = remoteMap.get(mapKey);
332
+ if (!remote) {
333
+ comparisons.push({
334
+ key: local.key,
335
+ language: local.language || null,
336
+ localValue: local.value,
337
+ remoteValue: null,
338
+ status: "local-only",
339
+ });
340
+ }
341
+ else if (local.value === (remote.value || "")) {
342
+ comparisons.push({
343
+ key: local.key,
344
+ language: local.language || null,
345
+ localValue: local.value,
346
+ remoteValue: remote.value || null,
347
+ status: "in-sync",
348
+ });
349
+ }
350
+ else {
351
+ comparisons.push({
352
+ key: local.key,
353
+ language: local.language || null,
354
+ localValue: local.value,
355
+ remoteValue: remote.value || null,
356
+ status: "modified",
357
+ });
358
+ }
359
+ }
360
+ // Check for remote-only settings
361
+ for (const [mapKey, remote] of remoteMap) {
362
+ if (seen.has(mapKey))
363
+ continue;
364
+ if (remote.value === null || remote.value === undefined || remote.value === "")
365
+ continue;
366
+ comparisons.push({
367
+ key: remote.key,
368
+ language: remote.language || null,
369
+ localValue: null,
370
+ remoteValue: remote.value || null,
371
+ status: "remote-only",
372
+ });
373
+ }
374
+ // Sort by key then language
375
+ comparisons.sort((a, b) => {
376
+ const keyCompare = a.key.localeCompare(b.key);
377
+ if (keyCompare !== 0)
378
+ return keyCompare;
379
+ return (a.language || "").localeCompare(b.language || "");
380
+ });
381
+ return {
382
+ comparisons,
383
+ totalTracked: TRACKED_SETTING_KEYS.length,
384
+ };
385
+ }
386
+ // ── Push settings ────────────────────────────────────────────────────────────
387
+ /**
388
+ * Determine what push operations are needed.
389
+ */
390
+ export function buildSettingsPushOperations(localSettings, remoteSettings) {
391
+ const operations = [];
392
+ // Build remote lookup
393
+ const remoteMap = new Map();
394
+ for (const rs of remoteSettings) {
395
+ if (!TRACKED_SETTING_KEYS.includes(rs.key))
396
+ continue;
397
+ const mapKey = `${rs.key}|${rs.language || ""}`;
398
+ remoteMap.set(mapKey, rs);
399
+ }
400
+ for (const local of localSettings) {
401
+ if (!TRACKED_SETTING_KEYS.includes(local.key))
402
+ continue;
403
+ const mapKey = `${local.key}|${local.language || ""}`;
404
+ const remote = remoteMap.get(mapKey);
405
+ if (!remote) {
406
+ operations.push({
407
+ type: "create",
408
+ key: local.key,
409
+ language: local.language || null,
410
+ localValue: local.value,
411
+ });
412
+ }
413
+ else if (local.value !== (remote.value || "")) {
414
+ operations.push({
415
+ type: "update",
416
+ key: local.key,
417
+ language: local.language || null,
418
+ localValue: local.value,
419
+ remoteValue: remote.value,
420
+ remoteId: remote.id,
421
+ });
422
+ }
423
+ else {
424
+ operations.push({
425
+ type: "unchanged",
426
+ key: local.key,
427
+ language: local.language || null,
428
+ localValue: local.value,
429
+ remoteValue: remote.value,
430
+ remoteId: remote.id,
431
+ });
432
+ }
433
+ }
434
+ return operations;
435
+ }
436
+ /**
437
+ * Push local settings to the CMS via /api/settings/import
438
+ */
439
+ export async function pushSettingsToRemote(operations, leadCMSUrl, leadCMSApiKey, dryRun = false) {
440
+ const toImport = operations.filter((op) => op.type === "create" || op.type === "update");
441
+ if (toImport.length === 0) {
442
+ logger.info("[LeadCMS] No settings changes to push.");
443
+ return null;
444
+ }
445
+ if (dryRun) {
446
+ logger.info("[LeadCMS] Dry run - would import the following settings:");
447
+ for (const op of toImport) {
448
+ const lang = op.language ? ` [${op.language}]` : "";
449
+ logger.info(` ${op.type}: ${op.key}${lang} = "${op.localValue}"`);
450
+ }
451
+ return null;
452
+ }
453
+ const importPayload = toImport.map((op) => ({
454
+ key: op.key,
455
+ value: op.localValue,
456
+ language: op.language,
457
+ source: "leadcms-sdk",
458
+ }));
459
+ const url = new URL("/api/settings/import", leadCMSUrl);
460
+ logger.verbose(`[LeadCMS] Pushing ${importPayload.length} settings to ${url.toString()}`);
461
+ const res = await axios.post(url.toString(), importPayload, {
462
+ headers: {
463
+ Authorization: `Bearer ${leadCMSApiKey}`,
464
+ "Content-Type": "application/json",
465
+ },
466
+ });
467
+ return res.data;
468
+ }
469
+ //# sourceMappingURL=settings-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/scripts/settings-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leadcms/sdk",
3
- "version": "3.3.10",
3
+ "version": "3.3.12",
4
4
  "description": "Official SDK and CLI tools for LeadCMS - framework-agnostic content management for static site generators",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",