@bendyline/docblocks 2.7.9 → 2.7.10

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.
@@ -14,7 +14,7 @@ This notice is included in the published npm tarball. Transitive packages instal
14
14
 
15
15
  | Package | Version | License | Source |
16
16
  | --- | --- | --- | --- |
17
- | @bendyline/squisq | 2.13.8 | MIT | https://github.com/bendyline/squisq |
17
+ | @bendyline/squisq | 2.13.9 | MIT | https://github.com/bendyline/squisq |
18
18
  | @bendyline/squisq-graph | 2.13.1 | MIT | https://github.com/bendyline/squisq |
19
19
  | @types/debug | 4.1.12 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped |
20
20
  | @types/hast | 3.0.4 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped |
@@ -133,7 +133,7 @@ This notice is included in the published npm tarball. Transitive packages instal
133
133
  Package-local license, copying, and notice files are reproduced below. Where a published package omits its repository license, the reviewed aggregate or README identified in `Source files` supplies the retained material.
134
134
 
135
135
  ==============================================================================
136
- Components: @bendyline/squisq-graph@2.13.1, @bendyline/squisq@2.13.8
136
+ Components: @bendyline/squisq-graph@2.13.1, @bendyline/squisq@2.13.9
137
137
  Source files: node_modules/@bendyline/squisq-graph/LICENSE, node_modules/@bendyline/squisq/LICENSE
138
138
  ==============================================================================
139
139
  MIT License
@@ -189,7 +189,7 @@ repository license, the pinned upstream copy is vendored and identified below.
189
189
  COMPONENTS
190
190
 
191
191
  ==============================================================================
192
- Components: @bendyline/squisq@2.13.8
192
+ Components: @bendyline/squisq@2.13.9
193
193
  Source files: node_modules/@bendyline/squisq/NOTICE.md
194
194
  ==============================================================================
195
195
  # Third-Party Notices for @bendyline/squisq
@@ -220,7 +220,7 @@ third-party license texts for bundled code and data are shipped in
220
220
  THIRD_PARTY_LICENSES.txt.
221
221
 
222
222
  ==============================================================================
223
- Components: @bendyline/squisq@2.13.8
223
+ Components: @bendyline/squisq@2.13.9
224
224
  Source files: node_modules/@bendyline/squisq/THIRD_PARTY_LICENSES.txt
225
225
  ==============================================================================
226
226
  THIRD-PARTY LICENSES FOR @bendyline/squisq
@@ -1,5 +1,5 @@
1
1
  import { MarkdownDocument } from '@bendyline/squisq/markdown';
2
- import { C as CatalogSortOrder } from './settings-C-TS15JZ.js';
2
+ import { C as CatalogSortOrder } from './settings-D_CL7AJA.js';
3
3
 
4
4
  /**
5
5
  * Synchronous outside-in path layout.
@@ -1,3 +1,128 @@
1
+ // src/workspace-settings/sha256.ts
2
+ var ROUND_CONSTANTS = new Uint32Array([
3
+ 1116352408,
4
+ 1899447441,
5
+ 3049323471,
6
+ 3921009573,
7
+ 961987163,
8
+ 1508970993,
9
+ 2453635748,
10
+ 2870763221,
11
+ 3624381080,
12
+ 310598401,
13
+ 607225278,
14
+ 1426881987,
15
+ 1925078388,
16
+ 2162078206,
17
+ 2614888103,
18
+ 3248222580,
19
+ 3835390401,
20
+ 4022224774,
21
+ 264347078,
22
+ 604807628,
23
+ 770255983,
24
+ 1249150122,
25
+ 1555081692,
26
+ 1996064986,
27
+ 2554220882,
28
+ 2821834349,
29
+ 2952996808,
30
+ 3210313671,
31
+ 3336571891,
32
+ 3584528711,
33
+ 113926993,
34
+ 338241895,
35
+ 666307205,
36
+ 773529912,
37
+ 1294757372,
38
+ 1396182291,
39
+ 1695183700,
40
+ 1986661051,
41
+ 2177026350,
42
+ 2456956037,
43
+ 2730485921,
44
+ 2820302411,
45
+ 3259730800,
46
+ 3345764771,
47
+ 3516065817,
48
+ 3600352804,
49
+ 4094571909,
50
+ 275423344,
51
+ 430227734,
52
+ 506948616,
53
+ 659060556,
54
+ 883997877,
55
+ 958139571,
56
+ 1322822218,
57
+ 1537002063,
58
+ 1747873779,
59
+ 1955562222,
60
+ 2024104815,
61
+ 2227730452,
62
+ 2361852424,
63
+ 2428436474,
64
+ 2756734187,
65
+ 3204031479,
66
+ 3329325298
67
+ ]);
68
+ var INITIAL_HASH = [
69
+ 1779033703,
70
+ 3144134277,
71
+ 1013904242,
72
+ 2773480762,
73
+ 1359893119,
74
+ 2600822924,
75
+ 528734635,
76
+ 1541459225
77
+ ];
78
+ function rotateRight(value, bits) {
79
+ return value >>> bits | value << 32 - bits;
80
+ }
81
+ function sha256Bytes(input) {
82
+ const blocks = new Uint8Array(Math.ceil((input.length + 9) / 64) * 64);
83
+ blocks.set(input);
84
+ blocks[input.length] = 128;
85
+ const view = new DataView(blocks.buffer);
86
+ const bitLength = input.length * 8;
87
+ view.setUint32(blocks.length - 8, Math.floor(bitLength / 4294967296));
88
+ view.setUint32(blocks.length - 4, bitLength >>> 0);
89
+ const hash = [...INITIAL_HASH];
90
+ const schedule = new Uint32Array(64);
91
+ for (let offset = 0; offset < blocks.length; offset += 64) {
92
+ for (let i = 0; i < 16; i += 1) schedule[i] = view.getUint32(offset + i * 4);
93
+ for (let i = 16; i < 64; i += 1) {
94
+ const early = schedule[i - 15];
95
+ const late = schedule[i - 2];
96
+ const s0 = rotateRight(early, 7) ^ rotateRight(early, 18) ^ early >>> 3;
97
+ const s1 = rotateRight(late, 17) ^ rotateRight(late, 19) ^ late >>> 10;
98
+ schedule[i] = schedule[i - 16] + s0 + schedule[i - 7] + s1;
99
+ }
100
+ let [a, b, c, d, e, f, g, h] = hash;
101
+ for (let i = 0; i < 64; i += 1) {
102
+ const s1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);
103
+ const choice = e & f ^ ~e & g;
104
+ const temp1 = h + s1 + choice + ROUND_CONSTANTS[i] + schedule[i] >>> 0;
105
+ const s0 = rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22);
106
+ const majority = a & b ^ a & c ^ b & c;
107
+ const temp2 = s0 + majority >>> 0;
108
+ h = g;
109
+ g = f;
110
+ f = e;
111
+ e = d + temp1 >>> 0;
112
+ d = c;
113
+ c = b;
114
+ b = a;
115
+ a = temp1 + temp2 >>> 0;
116
+ }
117
+ const round = [a, b, c, d, e, f, g, h];
118
+ for (let i = 0; i < 8; i += 1) hash[i] = hash[i] + round[i] >>> 0;
119
+ }
120
+ const digest = new Uint8Array(32);
121
+ const out = new DataView(digest.buffer);
122
+ for (let i = 0; i < 8; i += 1) out.setUint32(i * 4, hash[i]);
123
+ return digest;
124
+ }
125
+
1
126
  // src/workspace-settings/catalog.ts
2
127
  var CATALOG_GENERATOR = "docblocks-workspace-catalog";
3
128
  var CATALOG_FORMAT_VERSION = 1;
@@ -324,8 +449,10 @@ function buildCatalogMarkdownDocument(catalog, outputPath) {
324
449
  return { type: "document", children };
325
450
  }
326
451
  async function sha256Hex(text) {
327
- const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(text));
328
- return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
452
+ const bytes = new TextEncoder().encode(text);
453
+ const subtle = globalThis.crypto?.subtle;
454
+ const digest = subtle ? new Uint8Array(await subtle.digest("SHA-256", bytes)) : sha256Bytes(bytes);
455
+ return [...digest].map((byte) => byte.toString(16).padStart(2, "0")).join("");
329
456
  }
330
457
 
331
458
  // src/workspace-settings/outside-in-layout.ts
@@ -13,6 +13,7 @@ var WORKSPACE_SETTINGS_LIMITS = {
13
13
  maxFileBytes: 64 * 1024,
14
14
  maxTitleCharacters: 256,
15
15
  maxPathCharacters: 1024,
16
+ maxUrlCharacters: 2048,
16
17
  maxSchemaCharacters: 2048,
17
18
  maxExcludes: 64,
18
19
  minKeep: 1,
@@ -105,6 +106,37 @@ function checkOutputTemplatePath(value, format) {
105
106
  return { ok: false, message: shapeMessage(error) };
106
107
  }
107
108
  }
109
+ function validateSiteUrl(value) {
110
+ const label = "documents.siteUrl";
111
+ if (typeof value !== "string" || value.length === 0 || value.length > WORKSPACE_SETTINGS_LIMITS.maxUrlCharacters) {
112
+ fail(
113
+ `${label} must be a URL of at most ${WORKSPACE_SETTINGS_LIMITS.maxUrlCharacters} characters.`
114
+ );
115
+ }
116
+ let url;
117
+ try {
118
+ url = new URL(value);
119
+ } catch {
120
+ fail(`${label} must be an absolute URL, such as "https://example.com/posts/".`);
121
+ }
122
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
123
+ fail(`${label} must be an http or https URL.`);
124
+ }
125
+ if (url.search || url.hash || value.includes("?") || value.includes("#")) {
126
+ fail(`${label} must not have a query or fragment.`);
127
+ }
128
+ return value;
129
+ }
130
+ function optionalSiteUrl(value) {
131
+ return value === void 0 ? void 0 : validateSiteUrl(value);
132
+ }
133
+ function checkSiteUrl(value) {
134
+ try {
135
+ return { ok: true, url: validateSiteUrl(value) };
136
+ } catch (error) {
137
+ return { ok: false, message: shapeMessage(error) };
138
+ }
139
+ }
108
140
  function parseOutputTemplates(value) {
109
141
  if (value === void 0) return void 0;
110
142
  const record = exactRecord(value, "documents.outputTemplates", WORKSPACE_OUTPUT_TEMPLATE_FORMATS);
@@ -173,7 +205,7 @@ function compact(value) {
173
205
  const entries = Object.entries(value).filter(([, field]) => field !== void 0);
174
206
  return entries.length > 0 ? Object.fromEntries(entries) : void 0;
175
207
  }
176
- var DOCUMENT_SETTINGS_KEYS = ["defaultTheme", "outputTemplates"];
208
+ var DOCUMENT_SETTINGS_KEYS = ["defaultTheme", "outputTemplates", "siteUrl"];
177
209
  function parseWorkspaceSettings(value) {
178
210
  const root = isRecord(value) ? value : fail("Workspace settings must be a JSON object.");
179
211
  const version = root.version;
@@ -200,7 +232,8 @@ function parseWorkspaceSettings(value) {
200
232
  const record = exactRecord(root.documents, "documents", DOCUMENT_SETTINGS_KEYS);
201
233
  documents = compact({
202
234
  defaultTheme: optionalTheme(record.defaultTheme, "documents.defaultTheme"),
203
- outputTemplates: parseOutputTemplates(record.outputTemplates)
235
+ outputTemplates: parseOutputTemplates(record.outputTemplates),
236
+ siteUrl: optionalSiteUrl(record.siteUrl)
204
237
  });
205
238
  }
206
239
  let versionHistory;
@@ -310,7 +343,8 @@ function serializeWorkspaceSettings(settings) {
310
343
  const { outputTemplates } = normalized.documents;
311
344
  ordered.documents = {
312
345
  ...pick(normalized.documents, ["defaultTheme"]),
313
- ...outputTemplates ? { outputTemplates: pick(outputTemplates, WORKSPACE_OUTPUT_TEMPLATE_FORMATS) } : {}
346
+ ...outputTemplates ? { outputTemplates: pick(outputTemplates, WORKSPACE_OUTPUT_TEMPLATE_FORMATS) } : {},
347
+ ...pick(normalized.documents, ["siteUrl"])
314
348
  };
315
349
  }
316
350
  if (normalized.versionHistory) {
@@ -417,7 +451,8 @@ function parseWorkspaceSettingsPatch(value) {
417
451
  record.defaultTheme,
418
452
  (input) => optionalTheme(input, "documents.defaultTheme")
419
453
  ),
420
- outputTemplates: nullable(record.outputTemplates, parseOutputTemplates)
454
+ outputTemplates: nullable(record.outputTemplates, parseOutputTemplates),
455
+ siteUrl: nullable(record.siteUrl, optionalSiteUrl)
421
456
  }) ?? {};
422
457
  }
423
458
  if (root.versionHistory !== void 0) {
@@ -485,7 +520,7 @@ function tryApplyWorkspaceSettingsPatch(base, patch) {
485
520
  }
486
521
  }
487
522
  function isDefaultWorkspaceSettings(settings) {
488
- return settings?.documents?.defaultTheme === void 0 && settings?.documents?.outputTemplates === void 0 && settings?.versionHistory?.enabled === void 0 && settings?.versionHistory?.keep === void 0 && settings?.catalog?.html?.enabled !== true && settings?.catalog?.json?.enabled !== true;
523
+ return settings?.documents?.defaultTheme === void 0 && settings?.documents?.outputTemplates === void 0 && settings?.documents?.siteUrl === void 0 && settings?.versionHistory?.enabled === void 0 && settings?.versionHistory?.keep === void 0 && settings?.catalog?.html?.enabled !== true && settings?.catalog?.json?.enabled !== true;
489
524
  }
490
525
  function resolveWorkspaceDefaultThemeId(settings) {
491
526
  return settings?.documents?.defaultTheme;
@@ -494,6 +529,11 @@ function resolveWorkspaceOutputTemplate(settings, format) {
494
529
  const templates = settings?.documents?.outputTemplates;
495
530
  return format === "html" ? templates?.html : void 0;
496
531
  }
532
+ function resolveWorkspaceSiteUrl(settings) {
533
+ const url = settings?.documents?.siteUrl;
534
+ if (url === void 0) return void 0;
535
+ return url.endsWith("/") ? url : `${url}/`;
536
+ }
497
537
  function resolveFallbackThemeId(frontmatterThemeId, settings) {
498
538
  if (frontmatterThemeId) return void 0;
499
539
  return resolveWorkspaceDefaultThemeId(settings);
@@ -536,6 +576,8 @@ export {
536
576
  EMPTY_WORKSPACE_SETTINGS,
537
577
  validateOutputTemplatePath,
538
578
  checkOutputTemplatePath,
579
+ validateSiteUrl,
580
+ checkSiteUrl,
539
581
  validateCatalogOutputPath,
540
582
  checkCatalogOutputPath,
541
583
  parseWorkspaceSettings,
@@ -550,6 +592,7 @@ export {
550
592
  isDefaultWorkspaceSettings,
551
593
  resolveWorkspaceDefaultThemeId,
552
594
  resolveWorkspaceOutputTemplate,
595
+ resolveWorkspaceSiteUrl,
553
596
  resolveFallbackThemeId,
554
597
  resolveWorkspaceVersioningEnabled,
555
598
  resolveCatalogOutputs
@@ -21,6 +21,7 @@ declare const WORKSPACE_SETTINGS_LIMITS: {
21
21
  readonly maxFileBytes: number;
22
22
  readonly maxTitleCharacters: 256;
23
23
  readonly maxPathCharacters: 1024;
24
+ readonly maxUrlCharacters: 2048;
24
25
  readonly maxSchemaCharacters: 2048;
25
26
  readonly maxExcludes: 64;
26
27
  readonly minKeep: 1;
@@ -48,6 +49,12 @@ interface WorkspaceDocumentSettings {
48
49
  * always wins.
49
50
  */
50
51
  readonly outputTemplates?: WorkspaceOutputTemplates;
52
+ /**
53
+ * Public `http(s)` address the workspace root is published at, such as
54
+ * `https://example.com/posts/`. Rendered Web pages use it to give their
55
+ * social preview pictures the absolute URLs social sites require.
56
+ */
57
+ readonly siteUrl?: string;
51
58
  }
52
59
  interface WorkspaceVersionHistorySettings {
53
60
  /** Absent inherits the app-wide preference. */
@@ -99,6 +106,16 @@ declare function checkOutputTemplatePath(value: unknown, format: WorkspaceOutput
99
106
  ok: false;
100
107
  message: string;
101
108
  };
109
+ /** Validate a configured site address: an absolute `http(s)` URL with no query or fragment. */
110
+ declare function validateSiteUrl(value: unknown): string;
111
+ /** Try-form for UI validation messages. */
112
+ declare function checkSiteUrl(value: unknown): {
113
+ ok: true;
114
+ url: string;
115
+ } | {
116
+ ok: false;
117
+ message: string;
118
+ };
102
119
  type CatalogOutputKind = 'html' | 'json';
103
120
  /**
104
121
  * Validate a configured catalog output path. Outputs may never land inside
@@ -158,8 +175,8 @@ declare function tryApplyWorkspaceSettingsPatch(base: WorkspaceSettings | null,
158
175
  };
159
176
  /**
160
177
  * True when settings change nothing about how DocBlocks treats the folder: no
161
- * default theme or page template, no version-history choice, and no catalog
162
- * output turned on.
178
+ * default theme, page template, or site address, no version-history choice,
179
+ * and no catalog output turned on.
163
180
  * Fields that only configure a disabled output (a catalog title, path, order,
164
181
  * or page theme) are inert. Such settings are never worth creating a
165
182
  * `.docblocks/` folder for.
@@ -169,6 +186,11 @@ declare function isDefaultWorkspaceSettings(settings: WorkspaceSettings | null |
169
186
  declare function resolveWorkspaceDefaultThemeId(settings: WorkspaceSettings | null | undefined): string | undefined;
170
187
  /** The workspace default page template for a rendered format, workspace-relative. */
171
188
  declare function resolveWorkspaceOutputTemplate(settings: WorkspaceSettings | null | undefined, format: string): string | undefined;
189
+ /**
190
+ * The address the workspace root is published at, as a folder URL (ending in
191
+ * `/`) that workspace paths resolve against, or undefined when none is set.
192
+ */
193
+ declare function resolveWorkspaceSiteUrl(settings: WorkspaceSettings | null | undefined): string | undefined;
172
194
  /**
173
195
  * The theme a renderer should be told about explicitly. Every Squisq
174
196
  * exporter lets an explicit theme beat the document's own frontmatter, so a
@@ -193,4 +215,4 @@ interface ResolvedCatalogOutputs {
193
215
  /** Effective catalog configuration, or null when no output is enabled. */
194
216
  declare function resolveCatalogOutputs(settings: WorkspaceSettings | null | undefined): ResolvedCatalogOutputs | null;
195
217
 
196
- export { isEmptyWorkspaceSettingsPatch as A, parseWorkspaceSettings as B, type CatalogSortOrder as C, DEFAULT_CATALOG_HTML_PATH as D, EMPTY_WORKSPACE_SETTINGS as E, parseWorkspaceSettingsPatch as F, parseWorkspaceSettingsText as G, resolveCatalogOutputs as H, resolveFallbackThemeId as I, resolveWorkspaceDefaultThemeId as J, resolveWorkspaceOutputTemplate as K, resolveWorkspaceVersioningEnabled as L, serializeWorkspaceSettings as M, tryApplyWorkspaceSettingsPatch as N, validateCatalogOutputPath as O, validateOutputTemplatePath as P, type ResolvedCatalogOutputs as R, UnsupportedWorkspaceSettingsVersionError as U, type WorkspaceSettings as W, type WorkspaceSettingsPatch as a, CATALOG_JSON_CONTENT_MODES as b, CATALOG_SORT_ORDERS as c, type CatalogJsonContent as d, type CatalogOutputKind as e, DEFAULT_CATALOG_JSON_PATH as f, DEFAULT_CATALOG_TITLE as g, WORKSPACE_OUTPUT_TEMPLATE_FORMATS as h, WORKSPACE_SETTINGS_DIRECTORY as i, WORKSPACE_SETTINGS_LIMITS as j, WORKSPACE_SETTINGS_PATH as k, WORKSPACE_SETTINGS_VERSION as l, WORKSPACE_THEME_ID_PATTERN as m, type WorkspaceCatalogHtmlSettings as n, type WorkspaceCatalogJsonSettings as o, type WorkspaceCatalogSettings as p, type WorkspaceDocumentSettings as q, type WorkspaceOutputTemplateFormat as r, type WorkspaceOutputTemplates as s, type WorkspaceSettingsParseResult as t, type WorkspaceVersionHistorySettings as u, applyWorkspaceSettingsPatch as v, checkCatalogOutputPath as w, checkOutputTemplatePath as x, diffWorkspaceSettings as y, isDefaultWorkspaceSettings as z };
218
+ export { isDefaultWorkspaceSettings as A, isEmptyWorkspaceSettingsPatch as B, type CatalogSortOrder as C, DEFAULT_CATALOG_HTML_PATH as D, EMPTY_WORKSPACE_SETTINGS as E, parseWorkspaceSettings as F, parseWorkspaceSettingsPatch as G, parseWorkspaceSettingsText as H, resolveCatalogOutputs as I, resolveFallbackThemeId as J, resolveWorkspaceDefaultThemeId as K, resolveWorkspaceOutputTemplate as L, resolveWorkspaceSiteUrl as M, resolveWorkspaceVersioningEnabled as N, serializeWorkspaceSettings as O, tryApplyWorkspaceSettingsPatch as P, validateCatalogOutputPath as Q, type ResolvedCatalogOutputs as R, validateOutputTemplatePath as S, validateSiteUrl as T, UnsupportedWorkspaceSettingsVersionError as U, type WorkspaceSettings as W, type WorkspaceSettingsPatch as a, CATALOG_JSON_CONTENT_MODES as b, CATALOG_SORT_ORDERS as c, type CatalogJsonContent as d, type CatalogOutputKind as e, DEFAULT_CATALOG_JSON_PATH as f, DEFAULT_CATALOG_TITLE as g, WORKSPACE_OUTPUT_TEMPLATE_FORMATS as h, WORKSPACE_SETTINGS_DIRECTORY as i, WORKSPACE_SETTINGS_LIMITS as j, WORKSPACE_SETTINGS_PATH as k, WORKSPACE_SETTINGS_VERSION as l, WORKSPACE_THEME_ID_PATTERN as m, type WorkspaceCatalogHtmlSettings as n, type WorkspaceCatalogJsonSettings as o, type WorkspaceCatalogSettings as p, type WorkspaceDocumentSettings as q, type WorkspaceOutputTemplateFormat as r, type WorkspaceOutputTemplates as s, type WorkspaceSettingsParseResult as t, type WorkspaceVersionHistorySettings as u, applyWorkspaceSettingsPatch as v, checkCatalogOutputPath as w, checkOutputTemplatePath as x, checkSiteUrl as y, diffWorkspaceSettings as z };
@@ -1,4 +1,4 @@
1
- import { W as WorkspaceSettings, a as WorkspaceSettingsPatch } from '../settings-C-TS15JZ.js';
1
+ import { W as WorkspaceSettings, a as WorkspaceSettingsPatch } from '../settings-D_CL7AJA.js';
2
2
  import '../workspace-path-CWVrcuPL.js';
3
3
 
4
4
  /**
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  parseWorkspaceSettings,
3
3
  parseWorkspaceSettingsPatch
4
- } from "../chunk-PQBUG5DY.js";
4
+ } from "../chunk-Q7DU2EEB.js";
5
5
  import {
6
6
  HOST_WIRE_LIMITS,
7
7
  isBoundedString
@@ -1,8 +1,8 @@
1
1
  import { o as FileSystemProviderV2, n as FileSystemProviderCapabilities } from '../v2-DwxWjFC0.js';
2
2
  import { a as WorkspacePath } from '../workspace-path-CWVrcuPL.js';
3
- import { e as CatalogDocumentFormat, g as CatalogOutlineEntry } from '../catalog-BmEXHaZf.js';
3
+ import { e as CatalogDocumentFormat, g as CatalogOutlineEntry } from '../catalog-flfSruLW.js';
4
4
  import '@bendyline/squisq/markdown';
5
- import '../settings-C-TS15JZ.js';
5
+ import '../settings-D_CL7AJA.js';
6
6
 
7
7
  /**
8
8
  * What the index reads from. Only read methods are reachable, so the index
@@ -3,7 +3,7 @@ import {
3
3
  chooseOutsideInMarkdownPath,
4
4
  normalizeLineEndings,
5
5
  resolveOutsideInLayout
6
- } from "../chunk-L7HADBCQ.js";
6
+ } from "../chunk-3CCINQX5.js";
7
7
  import {
8
8
  isCompanionDirectoryName,
9
9
  isDiscoverableWorkspaceEntry,
@@ -1,7 +1,7 @@
1
- import { R as ResolvedCatalogOutputs, W as WorkspaceSettings, a as WorkspaceSettingsPatch } from '../settings-C-TS15JZ.js';
2
- export { b as CATALOG_JSON_CONTENT_MODES, c as CATALOG_SORT_ORDERS, d as CatalogJsonContent, e as CatalogOutputKind, C as CatalogSortOrder, D as DEFAULT_CATALOG_HTML_PATH, f as DEFAULT_CATALOG_JSON_PATH, g as DEFAULT_CATALOG_TITLE, E as EMPTY_WORKSPACE_SETTINGS, U as UnsupportedWorkspaceSettingsVersionError, h as WORKSPACE_OUTPUT_TEMPLATE_FORMATS, i as WORKSPACE_SETTINGS_DIRECTORY, j as WORKSPACE_SETTINGS_LIMITS, k as WORKSPACE_SETTINGS_PATH, l as WORKSPACE_SETTINGS_VERSION, m as WORKSPACE_THEME_ID_PATTERN, n as WorkspaceCatalogHtmlSettings, o as WorkspaceCatalogJsonSettings, p as WorkspaceCatalogSettings, q as WorkspaceDocumentSettings, r as WorkspaceOutputTemplateFormat, s as WorkspaceOutputTemplates, t as WorkspaceSettingsParseResult, u as WorkspaceVersionHistorySettings, v as applyWorkspaceSettingsPatch, w as checkCatalogOutputPath, x as checkOutputTemplatePath, y as diffWorkspaceSettings, z as isDefaultWorkspaceSettings, A as isEmptyWorkspaceSettingsPatch, B as parseWorkspaceSettings, F as parseWorkspaceSettingsPatch, G as parseWorkspaceSettingsText, H as resolveCatalogOutputs, I as resolveFallbackThemeId, J as resolveWorkspaceDefaultThemeId, K as resolveWorkspaceOutputTemplate, L as resolveWorkspaceVersioningEnabled, M as serializeWorkspaceSettings, N as tryApplyWorkspaceSettingsPatch, O as validateCatalogOutputPath, P as validateOutputTemplatePath } from '../settings-C-TS15JZ.js';
3
- import { C as CatalogEntry, W as WorkspaceCatalog } from '../catalog-BmEXHaZf.js';
4
- export { a as CATALOG_FORMAT_VERSION, b as CATALOG_GENERATOR, c as CATALOG_LIMITS, d as CatalogDateRecord, e as CatalogDocumentFormat, f as CatalogEntryHints, g as CatalogOutlineEntry, h as CatalogSource, O as OUTSIDE_IN_FORMAT_IDS, i as OutsideInFormatId, j as OutsideInLayout, k as buildCatalogMarkdownDocument, l as catalogEntryForUnreadable, m as catalogEntryFromDocument, n as catalogEntryFromMarkdown, o as chooseOutsideInMarkdownPath, p as createWorkspaceCatalog, q as isGeneratedCatalogHtml, r as isGeneratedCatalogJson, s as readCatalogDateHistory, t as readCatalogHtmlDigest, u as relativeCatalogLink, v as relocateOutsideInLayout, w as resolveOutsideInLayout, x as serializeCatalogJson, y as sortCatalogEntries, z as stampCatalogDates, A as stampCatalogHtml } from '../catalog-BmEXHaZf.js';
1
+ import { R as ResolvedCatalogOutputs, W as WorkspaceSettings, a as WorkspaceSettingsPatch } from '../settings-D_CL7AJA.js';
2
+ export { b as CATALOG_JSON_CONTENT_MODES, c as CATALOG_SORT_ORDERS, d as CatalogJsonContent, e as CatalogOutputKind, C as CatalogSortOrder, D as DEFAULT_CATALOG_HTML_PATH, f as DEFAULT_CATALOG_JSON_PATH, g as DEFAULT_CATALOG_TITLE, E as EMPTY_WORKSPACE_SETTINGS, U as UnsupportedWorkspaceSettingsVersionError, h as WORKSPACE_OUTPUT_TEMPLATE_FORMATS, i as WORKSPACE_SETTINGS_DIRECTORY, j as WORKSPACE_SETTINGS_LIMITS, k as WORKSPACE_SETTINGS_PATH, l as WORKSPACE_SETTINGS_VERSION, m as WORKSPACE_THEME_ID_PATTERN, n as WorkspaceCatalogHtmlSettings, o as WorkspaceCatalogJsonSettings, p as WorkspaceCatalogSettings, q as WorkspaceDocumentSettings, r as WorkspaceOutputTemplateFormat, s as WorkspaceOutputTemplates, t as WorkspaceSettingsParseResult, u as WorkspaceVersionHistorySettings, v as applyWorkspaceSettingsPatch, w as checkCatalogOutputPath, x as checkOutputTemplatePath, y as checkSiteUrl, z as diffWorkspaceSettings, A as isDefaultWorkspaceSettings, B as isEmptyWorkspaceSettingsPatch, F as parseWorkspaceSettings, G as parseWorkspaceSettingsPatch, H as parseWorkspaceSettingsText, I as resolveCatalogOutputs, J as resolveFallbackThemeId, K as resolveWorkspaceDefaultThemeId, L as resolveWorkspaceOutputTemplate, M as resolveWorkspaceSiteUrl, N as resolveWorkspaceVersioningEnabled, O as serializeWorkspaceSettings, P as tryApplyWorkspaceSettingsPatch, Q as validateCatalogOutputPath, S as validateOutputTemplatePath, T as validateSiteUrl } from '../settings-D_CL7AJA.js';
3
+ import { C as CatalogEntry, W as WorkspaceCatalog } from '../catalog-flfSruLW.js';
4
+ export { a as CATALOG_FORMAT_VERSION, b as CATALOG_GENERATOR, c as CATALOG_LIMITS, d as CatalogDateRecord, e as CatalogDocumentFormat, f as CatalogEntryHints, g as CatalogOutlineEntry, h as CatalogSource, O as OUTSIDE_IN_FORMAT_IDS, i as OutsideInFormatId, j as OutsideInLayout, k as buildCatalogMarkdownDocument, l as catalogEntryForUnreadable, m as catalogEntryFromDocument, n as catalogEntryFromMarkdown, o as chooseOutsideInMarkdownPath, p as createWorkspaceCatalog, q as isGeneratedCatalogHtml, r as isGeneratedCatalogJson, s as readCatalogDateHistory, t as readCatalogHtmlDigest, u as relativeCatalogLink, v as relocateOutsideInLayout, w as resolveOutsideInLayout, x as serializeCatalogJson, y as sortCatalogEntries, z as stampCatalogDates, A as stampCatalogHtml } from '../catalog-flfSruLW.js';
5
5
  import { MarkdownDocument } from '@bendyline/squisq/markdown';
6
6
  import { v as FileSystemVersion, o as FileSystemProviderV2 } from '../v2-DwxWjFC0.js';
7
7
  import { a as WorkspacePath } from '../workspace-path-CWVrcuPL.js';
@@ -51,6 +51,13 @@ declare const WORKSPACE_SETTINGS_JSON_SCHEMA: {
51
51
  };
52
52
  };
53
53
  };
54
+ readonly siteUrl: {
55
+ readonly type: "string";
56
+ readonly format: "uri";
57
+ readonly pattern: "^https?://[^?#]+$";
58
+ readonly maxLength: 2048;
59
+ readonly description: "Public address this folder is published at, such as \"https://example.com/posts/\". Gives rendered Web pages absolute social preview image URLs.";
60
+ };
54
61
  };
55
62
  };
56
63
  readonly versionHistory: {
@@ -22,7 +22,7 @@ import {
22
22
  sortCatalogEntries,
23
23
  stampCatalogDates,
24
24
  stampCatalogHtml
25
- } from "../chunk-L7HADBCQ.js";
25
+ } from "../chunk-3CCINQX5.js";
26
26
  import {
27
27
  CATALOG_JSON_CONTENT_MODES,
28
28
  CATALOG_SORT_ORDERS,
@@ -40,6 +40,7 @@ import {
40
40
  applyWorkspaceSettingsPatch,
41
41
  checkCatalogOutputPath,
42
42
  checkOutputTemplatePath,
43
+ checkSiteUrl,
43
44
  diffWorkspaceSettings,
44
45
  isDefaultWorkspaceSettings,
45
46
  isEmptyWorkspaceSettingsPatch,
@@ -50,12 +51,14 @@ import {
50
51
  resolveFallbackThemeId,
51
52
  resolveWorkspaceDefaultThemeId,
52
53
  resolveWorkspaceOutputTemplate,
54
+ resolveWorkspaceSiteUrl,
53
55
  resolveWorkspaceVersioningEnabled,
54
56
  serializeWorkspaceSettings,
55
57
  tryApplyWorkspaceSettingsPatch,
56
58
  validateCatalogOutputPath,
57
- validateOutputTemplatePath
58
- } from "../chunk-PQBUG5DY.js";
59
+ validateOutputTemplatePath,
60
+ validateSiteUrl
61
+ } from "../chunk-Q7DU2EEB.js";
59
62
  import {
60
63
  SQUISQ_RUNTIME_DIRECTORY_NAME,
61
64
  isDiscoverableWorkspaceEntry,
@@ -111,6 +114,13 @@ var WORKSPACE_SETTINGS_JSON_SCHEMA = {
111
114
  description: 'Workspace-relative HTML page template for Web pages, such as "_templates/post.html". Its unnamed <slot> receives the page content.'
112
115
  }
113
116
  }
117
+ },
118
+ siteUrl: {
119
+ type: "string",
120
+ format: "uri",
121
+ pattern: "^https?://[^?#]+$",
122
+ maxLength: WORKSPACE_SETTINGS_LIMITS.maxUrlCharacters,
123
+ description: 'Public address this folder is published at, such as "https://example.com/posts/". Gives rendered Web pages absolute social preview image URLs.'
114
124
  }
115
125
  }
116
126
  },
@@ -815,6 +825,7 @@ export {
815
825
  catalogEntryFromMarkdown,
816
826
  checkCatalogOutputPath,
817
827
  checkOutputTemplatePath,
828
+ checkSiteUrl,
818
829
  chooseOutsideInMarkdownPath,
819
830
  collectWorkspaceCatalog,
820
831
  createWorkspaceCatalog,
@@ -842,6 +853,7 @@ export {
842
853
  resolveOutsideInLayout,
843
854
  resolveWorkspaceDefaultThemeId,
844
855
  resolveWorkspaceOutputTemplate,
856
+ resolveWorkspaceSiteUrl,
845
857
  resolveWorkspaceVersioningEnabled,
846
858
  saveWorkspaceSettingsPatch,
847
859
  serializeCatalogJson,
@@ -851,5 +863,6 @@ export {
851
863
  stampCatalogHtml,
852
864
  tryApplyWorkspaceSettingsPatch,
853
865
  validateCatalogOutputPath,
854
- validateOutputTemplatePath
866
+ validateOutputTemplatePath,
867
+ validateSiteUrl
855
868
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks",
3
- "version": "2.7.9",
3
+ "version": "2.7.10",
4
4
  "description": "Core data structures and filesystem abstractions for DocBlocks",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -126,7 +126,7 @@
126
126
  "typecheck": "tsc --noEmit"
127
127
  },
128
128
  "dependencies": {
129
- "@bendyline/squisq": "2.13.8",
129
+ "@bendyline/squisq": "2.13.9",
130
130
  "zod": "3.25.76"
131
131
  }
132
132
  }