@haverstack/eleventy 0.2.0
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/LICENSE +21 -0
- package/README.md +91 -0
- package/dist/assets.d.ts +52 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +148 -0
- package/dist/assets.js.map +1 -0
- package/dist/check.d.ts +35 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +141 -0
- package/dist/check.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +122 -0
- package/dist/cli.js.map +1 -0
- package/dist/emit.d.ts +72 -0
- package/dist/emit.d.ts.map +1 -0
- package/dist/emit.js +147 -0
- package/dist/emit.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/feeds.d.ts +24 -0
- package/dist/feeds.d.ts.map +1 -0
- package/dist/feeds.js +103 -0
- package/dist/feeds.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/load.d.ts +86 -0
- package/dist/load.d.ts.map +1 -0
- package/dist/load.js +258 -0
- package/dist/load.js.map +1 -0
- package/dist/markdown.d.ts +23 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +81 -0
- package/dist/markdown.js.map +1 -0
- package/dist/publish.d.ts +45 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +79 -0
- package/dist/publish.js.map +1 -0
- package/dist/resolve.d.ts +119 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +411 -0
- package/dist/resolve.js.map +1 -0
- package/dist/scaffold.d.ts +22 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +98 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/templates.d.ts +34 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +171 -0
- package/dist/templates.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +123 -0
- package/dist/types.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @haverstack/eleventy — resolve phase
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* Turn a `StackIndex` into a site: one URL per record, the sidecar
|
|
5
|
+
* cascade applied, collections filtered and sorted, menus pointed at real
|
|
6
|
+
* URLs. A pure function of the index and this build's config — it runs no
|
|
7
|
+
* queries.
|
|
8
|
+
*
|
|
9
|
+
* Fatal faults throw `HaverstackEleventyError` (the `check` command
|
|
10
|
+
* catches them): two sidecars at the same scope for one record, and two
|
|
11
|
+
* records resolving to the same path. Softer problems — a dangling menu
|
|
12
|
+
* target, an item that names both `url` and `recordId` — are collected in
|
|
13
|
+
* `warnings` and the build continues.
|
|
14
|
+
*
|
|
15
|
+
* See docs/design.md § Resolve.
|
|
16
|
+
*/
|
|
17
|
+
import type { RecordId, StackRecord } from '@haverstack/core';
|
|
18
|
+
import type { StackIndex } from './load.js';
|
|
19
|
+
/**
|
|
20
|
+
* How this site derives a permalink for a listing member when no sidecar
|
|
21
|
+
* overrides it. `'title'` slugifies the record's `title` (default);
|
|
22
|
+
* `'recordId'` publishes under the opaque record id; a function lets the
|
|
23
|
+
* site decide. See docs/design.md § slugStrategy.
|
|
24
|
+
*/
|
|
25
|
+
export type SlugStrategy = 'title' | 'recordId' | ((record: StackRecord) => string);
|
|
26
|
+
export interface ResolveConfig {
|
|
27
|
+
slugStrategy: SlugStrategy;
|
|
28
|
+
/**
|
|
29
|
+
* `true` (default): throw `HaverstackEleventyError` listing every fatal
|
|
30
|
+
* fault. `false`: collect them in `ResolvedSite.errors` and resolve
|
|
31
|
+
* best-effort — what the `check` command uses to report them all.
|
|
32
|
+
*/
|
|
33
|
+
strict?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** A fault that fails a build: conflicting sidecars, or a path two records share. */
|
|
36
|
+
export interface ResolveError {
|
|
37
|
+
kind: 'sidecar-conflict' | 'path-collision';
|
|
38
|
+
message: string;
|
|
39
|
+
recordIds: RecordId[];
|
|
40
|
+
/** Present on a collision. */
|
|
41
|
+
path?: string;
|
|
42
|
+
}
|
|
43
|
+
/** The sidecar cascade's result for one record — never a raw sidecar. */
|
|
44
|
+
export interface ResolvedMeta {
|
|
45
|
+
slug?: string;
|
|
46
|
+
template?: string;
|
|
47
|
+
/** Reserved for curated collections; not read until they land. */
|
|
48
|
+
order?: number;
|
|
49
|
+
hidden?: boolean;
|
|
50
|
+
draft?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface ResolvedPage {
|
|
53
|
+
record: StackRecord;
|
|
54
|
+
/** Site-root-relative path, e.g. `/about/history/`. */
|
|
55
|
+
url: string;
|
|
56
|
+
meta: ResolvedMeta;
|
|
57
|
+
/** Explicit `meta.template`, or inferred from the page's shape. */
|
|
58
|
+
template: string;
|
|
59
|
+
/** `unlistedAt` set, or the cascade set `hidden` — out of nav, feeds and the sitemap. */
|
|
60
|
+
unlisted: boolean;
|
|
61
|
+
children: ResolvedPage[];
|
|
62
|
+
}
|
|
63
|
+
export interface ResolvedMember {
|
|
64
|
+
record: StackRecord;
|
|
65
|
+
url: string;
|
|
66
|
+
meta: ResolvedMeta;
|
|
67
|
+
template: string;
|
|
68
|
+
unlisted: boolean;
|
|
69
|
+
/** `true` when `url` came from a sidecar `slug` rather than `slugStrategy`. */
|
|
70
|
+
slugExplicit: boolean;
|
|
71
|
+
/** The record's canonical URL when it lives on another site; else `null`. */
|
|
72
|
+
canonical: string | null;
|
|
73
|
+
}
|
|
74
|
+
export interface ResolvedCollection {
|
|
75
|
+
/** The listing root's slug — the key in `collections`. */
|
|
76
|
+
slug: string;
|
|
77
|
+
rootUrl: string;
|
|
78
|
+
/** Listed members only (drafts and unlisted excluded), sorted. */
|
|
79
|
+
members: ResolvedMember[];
|
|
80
|
+
}
|
|
81
|
+
export interface ResolvedMenuItem {
|
|
82
|
+
label: string;
|
|
83
|
+
order: number;
|
|
84
|
+
/** External/absolute URL as written, or a resolved permalink. `#` when dangling. */
|
|
85
|
+
url: string;
|
|
86
|
+
rel?: string;
|
|
87
|
+
dangling: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface ResolvedMenu {
|
|
90
|
+
handle: string;
|
|
91
|
+
label?: string;
|
|
92
|
+
items: ResolvedMenuItem[];
|
|
93
|
+
}
|
|
94
|
+
export interface ResolveWarning {
|
|
95
|
+
kind: string;
|
|
96
|
+
message: string;
|
|
97
|
+
recordId?: RecordId;
|
|
98
|
+
}
|
|
99
|
+
export interface ResolvedSite {
|
|
100
|
+
site: StackRecord | null;
|
|
101
|
+
/** Every `site@1` record by handle — for cross-site links in templates. */
|
|
102
|
+
sites: Map<string, StackRecord>;
|
|
103
|
+
owner: StackRecord | null;
|
|
104
|
+
/** Root pages, each carrying its resolved subtree. Drafts pruned. */
|
|
105
|
+
pages: ResolvedPage[];
|
|
106
|
+
pagesByUrl: Map<string, ResolvedPage>;
|
|
107
|
+
/** Every built member, deduped, including unlisted ones. */
|
|
108
|
+
members: ResolvedMember[];
|
|
109
|
+
/** By listing-root slug. */
|
|
110
|
+
collections: Map<string, ResolvedCollection>;
|
|
111
|
+
/** By handle. */
|
|
112
|
+
menus: Map<string, ResolvedMenu>;
|
|
113
|
+
/** Fatal faults, collected rather than thrown when `strict` is `false`. */
|
|
114
|
+
errors: ResolveError[];
|
|
115
|
+
warnings: ResolveWarning[];
|
|
116
|
+
}
|
|
117
|
+
export declare function slugify(input: string): string;
|
|
118
|
+
export declare function resolve(index: StackIndex, config: ResolveConfig): ResolvedSite;
|
|
119
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI9D,OAAO,KAAK,EAAwC,UAAU,EAAE,MAAM,WAAW,CAAC;AAElF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,4DAA4D;IAC5D,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,4BAA4B;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C,iBAAiB;IACjB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,2EAA2E;IAC3E,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AA2BD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C;AA6JD,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,YAAY,CAwN9E"}
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @haverstack/eleventy — resolve phase
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* Turn a `StackIndex` into a site: one URL per record, the sidecar
|
|
5
|
+
* cascade applied, collections filtered and sorted, menus pointed at real
|
|
6
|
+
* URLs. A pure function of the index and this build's config — it runs no
|
|
7
|
+
* queries.
|
|
8
|
+
*
|
|
9
|
+
* Fatal faults throw `HaverstackEleventyError` (the `check` command
|
|
10
|
+
* catches them): two sidecars at the same scope for one record, and two
|
|
11
|
+
* records resolving to the same path. Softer problems — a dangling menu
|
|
12
|
+
* target, an item that names both `url` and `recordId` — are collected in
|
|
13
|
+
* `warnings` and the build continues.
|
|
14
|
+
*
|
|
15
|
+
* See docs/design.md § Resolve.
|
|
16
|
+
*/
|
|
17
|
+
import { ARTICLE, BOOKMARK, PAGE, PHOTO, POST } from '@haverstack/commons';
|
|
18
|
+
import { SITE_MEMBERSHIP_LABEL } from './types.js';
|
|
19
|
+
import { HaverstackEleventyError } from './errors.js';
|
|
20
|
+
// -------------------------------------------------------
|
|
21
|
+
// Type-keyed lookups — by baseId, so a future @2 still matches.
|
|
22
|
+
// -------------------------------------------------------
|
|
23
|
+
const baseId = (typeId) => typeId.split('@')[0];
|
|
24
|
+
const MEMBER_TEMPLATE = {
|
|
25
|
+
[baseId(ARTICLE.id)]: 'article',
|
|
26
|
+
[baseId(POST.id)]: 'post',
|
|
27
|
+
[baseId(PHOTO.id)]: 'photo',
|
|
28
|
+
[baseId(BOOKMARK.id)]: 'bookmark',
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Types whose own draft convention is "`publishedAt` present". Others
|
|
32
|
+
* build every record. A custom member type that declares its own
|
|
33
|
+
* `publishedAt` is not detected here yet — it would need the registered
|
|
34
|
+
* schema, which this phase deliberately does not fetch.
|
|
35
|
+
*/
|
|
36
|
+
const TYPE_HAS_PUBLISHED_AT = new Set([baseId(ARTICLE.id), baseId(PAGE.id)]);
|
|
37
|
+
// -------------------------------------------------------
|
|
38
|
+
// Small helpers
|
|
39
|
+
// -------------------------------------------------------
|
|
40
|
+
export function slugify(input) {
|
|
41
|
+
return input
|
|
42
|
+
.normalize('NFKD')
|
|
43
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
44
|
+
.toLowerCase()
|
|
45
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
46
|
+
.replace(/^-+|-+$/g, '');
|
|
47
|
+
}
|
|
48
|
+
function pushInto(map, key, value) {
|
|
49
|
+
const list = map.get(key);
|
|
50
|
+
if (list)
|
|
51
|
+
list.push(value);
|
|
52
|
+
else
|
|
53
|
+
map.set(key, [value]);
|
|
54
|
+
}
|
|
55
|
+
function pickMeta(record) {
|
|
56
|
+
if (!record)
|
|
57
|
+
return {};
|
|
58
|
+
const c = record.content;
|
|
59
|
+
const meta = {};
|
|
60
|
+
if (typeof c.slug === 'string')
|
|
61
|
+
meta.slug = c.slug;
|
|
62
|
+
if (typeof c.template === 'string')
|
|
63
|
+
meta.template = c.template;
|
|
64
|
+
if (typeof c.order === 'number')
|
|
65
|
+
meta.order = c.order;
|
|
66
|
+
if (typeof c.hidden === 'boolean')
|
|
67
|
+
meta.hidden = c.hidden;
|
|
68
|
+
if (typeof c.draft === 'boolean')
|
|
69
|
+
meta.draft = c.draft;
|
|
70
|
+
return meta;
|
|
71
|
+
}
|
|
72
|
+
/** Collects sidecar-cascade errors; returns the merged meta best-effort (first of each scope). */
|
|
73
|
+
class MetaResolver {
|
|
74
|
+
index;
|
|
75
|
+
errors = [];
|
|
76
|
+
reported = new Set();
|
|
77
|
+
constructor(index) {
|
|
78
|
+
this.index = index;
|
|
79
|
+
}
|
|
80
|
+
resolve(recordId) {
|
|
81
|
+
const set = this.index.sidecarsByParent.get(recordId);
|
|
82
|
+
if (!set)
|
|
83
|
+
return {};
|
|
84
|
+
for (const [list, scope] of [
|
|
85
|
+
[set.unscoped, 'with no for-site scope'],
|
|
86
|
+
[set.thisSite, 'scoped to this site'],
|
|
87
|
+
]) {
|
|
88
|
+
if (list.length > 1 && !this.reported.has(recordId)) {
|
|
89
|
+
this.reported.add(recordId);
|
|
90
|
+
this.errors.push({
|
|
91
|
+
kind: 'sidecar-conflict',
|
|
92
|
+
recordIds: [recordId, ...list.map((r) => r.id)],
|
|
93
|
+
message: `Record ${recordId} has ${list.length} page-meta sidecars ${scope} ` +
|
|
94
|
+
`(${list.map((r) => r.id).join(', ')}). Picking one silently produces a site that ` +
|
|
95
|
+
`differs between runs — remove the extra.`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { ...pickMeta(set.unscoped[0]), ...pickMeta(set.thisSite[0]) };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function isDraft(record, meta) {
|
|
103
|
+
if (meta.draft)
|
|
104
|
+
return true;
|
|
105
|
+
return TYPE_HAS_PUBLISHED_AT.has(baseId(record.typeId)) && !record.content.publishedAt;
|
|
106
|
+
}
|
|
107
|
+
const isUnlisted = (record, meta) => Boolean(record.unlistedAt) || meta.hidden === true;
|
|
108
|
+
/** Path for a page: its ancestor slugs, `index` dropped, wrapped in slashes. */
|
|
109
|
+
function pagePath(node) {
|
|
110
|
+
const segments = [];
|
|
111
|
+
for (let cur = node; cur; cur = cur.parent) {
|
|
112
|
+
const slug = cur.record.content.slug;
|
|
113
|
+
if (typeof slug === 'string' && slug && slug !== 'index')
|
|
114
|
+
segments.unshift(slug);
|
|
115
|
+
}
|
|
116
|
+
return segments.length ? `/${segments.join('/')}/` : '/';
|
|
117
|
+
}
|
|
118
|
+
/** Path for a page reached only through the raw record graph — a cross-site link target. */
|
|
119
|
+
function rawPagePath(index, pageId) {
|
|
120
|
+
const segments = [];
|
|
121
|
+
const seen = new Set();
|
|
122
|
+
let current = index.byId.get(pageId);
|
|
123
|
+
while (current && baseId(current.typeId) === baseId(PAGE.id)) {
|
|
124
|
+
if (seen.has(current.id))
|
|
125
|
+
break;
|
|
126
|
+
seen.add(current.id);
|
|
127
|
+
const slug = current.content.slug;
|
|
128
|
+
if (typeof slug === 'string' && slug && slug !== 'index')
|
|
129
|
+
segments.unshift(slug);
|
|
130
|
+
const parentId = current.parentId;
|
|
131
|
+
current = parentId ? index.byId.get(parentId) : undefined;
|
|
132
|
+
}
|
|
133
|
+
const siteId = current && index.sitesById.has(current.id) ? current.id : null;
|
|
134
|
+
return { path: segments.length ? `/${segments.join('/')}/` : '/', siteId };
|
|
135
|
+
}
|
|
136
|
+
function memberSlug(record, meta, config) {
|
|
137
|
+
if (meta.slug)
|
|
138
|
+
return { slug: meta.slug, explicit: true };
|
|
139
|
+
const strategy = config.slugStrategy;
|
|
140
|
+
if (typeof strategy === 'function')
|
|
141
|
+
return { slug: strategy(record) || record.id, explicit: false };
|
|
142
|
+
if (strategy === 'recordId')
|
|
143
|
+
return { slug: record.id, explicit: false };
|
|
144
|
+
const title = record.content.title;
|
|
145
|
+
const fromTitle = typeof title === 'string' ? slugify(title) : '';
|
|
146
|
+
return { slug: fromTitle || record.id, explicit: false };
|
|
147
|
+
}
|
|
148
|
+
function pageTemplate(node, meta) {
|
|
149
|
+
if (meta.template)
|
|
150
|
+
return meta.template;
|
|
151
|
+
if (node.record.content.collection)
|
|
152
|
+
return 'listing';
|
|
153
|
+
if (node.record.content.slug === 'index' && node.parent === null)
|
|
154
|
+
return 'home';
|
|
155
|
+
return 'content';
|
|
156
|
+
}
|
|
157
|
+
const memberTemplate = (record, meta) => meta.template ?? MEMBER_TEMPLATE[baseId(record.typeId)] ?? 'content';
|
|
158
|
+
function memberCanonical(record, site) {
|
|
159
|
+
const url = record.content.url;
|
|
160
|
+
if (typeof url !== 'string' || !url || !site)
|
|
161
|
+
return null;
|
|
162
|
+
const base = String(site.content.baseUrl ?? '').replace(/\/+$/, '');
|
|
163
|
+
return base && url.startsWith(base) ? null : url;
|
|
164
|
+
}
|
|
165
|
+
function meaningfulDate(record) {
|
|
166
|
+
const publishedAt = record.content.publishedAt;
|
|
167
|
+
const parsed = typeof publishedAt === 'string' ? Date.parse(publishedAt) : NaN;
|
|
168
|
+
return Number.isNaN(parsed) ? record.createdAt.getTime() : parsed;
|
|
169
|
+
}
|
|
170
|
+
function sortMembers(members, order) {
|
|
171
|
+
const sorted = [...members];
|
|
172
|
+
if (order === 'oldest') {
|
|
173
|
+
sorted.sort((a, b) => meaningfulDate(a.record) - meaningfulDate(b.record));
|
|
174
|
+
}
|
|
175
|
+
else if (order === 'title') {
|
|
176
|
+
sorted.sort((a, b) => String(a.record.content.title ?? '').localeCompare(String(b.record.content.title ?? '')));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
sorted.sort((a, b) => meaningfulDate(b.record) - meaningfulDate(a.record));
|
|
180
|
+
}
|
|
181
|
+
return sorted;
|
|
182
|
+
}
|
|
183
|
+
function siteMembership(record) {
|
|
184
|
+
const out = [];
|
|
185
|
+
for (const a of record.associations ?? []) {
|
|
186
|
+
if (a.kind === 'relationship' &&
|
|
187
|
+
a.label === SITE_MEMBERSHIP_LABEL &&
|
|
188
|
+
a.target.scope === 'record') {
|
|
189
|
+
out.push(a.target.recordId);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
// -------------------------------------------------------
|
|
195
|
+
// resolve
|
|
196
|
+
// -------------------------------------------------------
|
|
197
|
+
export function resolve(index, config) {
|
|
198
|
+
const { site } = index;
|
|
199
|
+
const warnings = [];
|
|
200
|
+
const metaResolver = new MetaResolver(index);
|
|
201
|
+
// 1. Pages — recurse the tree, dropping draft subtrees.
|
|
202
|
+
const pagesById = new Map();
|
|
203
|
+
const pages = [];
|
|
204
|
+
const walk = (node, parent) => {
|
|
205
|
+
const meta = metaResolver.resolve(node.record.id);
|
|
206
|
+
if (isDraft(node.record, meta)) {
|
|
207
|
+
if (node.children.length > 0) {
|
|
208
|
+
warnings.push({
|
|
209
|
+
kind: 'draft-page-subtree',
|
|
210
|
+
recordId: node.record.id,
|
|
211
|
+
message: `Page ${node.record.id} is a draft; ${node.children.length} descendant page(s) are excluded with it.`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const resolvedPage = {
|
|
217
|
+
record: node.record,
|
|
218
|
+
url: pagePath(node),
|
|
219
|
+
meta,
|
|
220
|
+
template: pageTemplate(node, meta),
|
|
221
|
+
unlisted: isUnlisted(node.record, meta),
|
|
222
|
+
children: [],
|
|
223
|
+
};
|
|
224
|
+
pagesById.set(node.record.id, resolvedPage);
|
|
225
|
+
if (parent)
|
|
226
|
+
parent.children.push(resolvedPage);
|
|
227
|
+
else
|
|
228
|
+
pages.push(resolvedPage);
|
|
229
|
+
for (const child of node.children)
|
|
230
|
+
walk(child, resolvedPage);
|
|
231
|
+
};
|
|
232
|
+
for (const root of index.pageRoots)
|
|
233
|
+
walk(root, null);
|
|
234
|
+
// 2. Members — one ResolvedMember per record, shared across collections.
|
|
235
|
+
const membersById = new Map();
|
|
236
|
+
const collections = new Map();
|
|
237
|
+
for (const [rootId, candidates] of index.membersByListingRoot) {
|
|
238
|
+
const root = pagesById.get(rootId);
|
|
239
|
+
if (!root)
|
|
240
|
+
continue; // listing page was a draft
|
|
241
|
+
const spec = index.pagesById.get(rootId)?.record.content.collection;
|
|
242
|
+
const listed = [];
|
|
243
|
+
for (const candidate of candidates) {
|
|
244
|
+
const meta = metaResolver.resolve(candidate.id);
|
|
245
|
+
if (isDraft(candidate, meta))
|
|
246
|
+
continue; // not built at all
|
|
247
|
+
let member = membersById.get(candidate.id);
|
|
248
|
+
if (!member) {
|
|
249
|
+
const { slug, explicit } = memberSlug(candidate, meta, config);
|
|
250
|
+
member = {
|
|
251
|
+
record: candidate,
|
|
252
|
+
url: `${root.url}${slug}/`,
|
|
253
|
+
meta,
|
|
254
|
+
template: memberTemplate(candidate, meta),
|
|
255
|
+
unlisted: isUnlisted(candidate, meta),
|
|
256
|
+
slugExplicit: explicit,
|
|
257
|
+
canonical: memberCanonical(candidate, site),
|
|
258
|
+
};
|
|
259
|
+
membersById.set(candidate.id, member);
|
|
260
|
+
}
|
|
261
|
+
if (!member.unlisted)
|
|
262
|
+
listed.push(member);
|
|
263
|
+
}
|
|
264
|
+
collections.set(root.record.content.slug, {
|
|
265
|
+
slug: root.record.content.slug,
|
|
266
|
+
rootUrl: root.url,
|
|
267
|
+
members: sortMembers(listed, spec?.order),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
// 3. Collision detection — pages and built members, per site.
|
|
271
|
+
const byUrl = new Map();
|
|
272
|
+
for (const page of pagesById.values()) {
|
|
273
|
+
pushInto(byUrl, page.url, { recordId: page.record.id, kind: 'page', explicit: true });
|
|
274
|
+
}
|
|
275
|
+
for (const member of membersById.values()) {
|
|
276
|
+
pushInto(byUrl, member.url, {
|
|
277
|
+
recordId: member.record.id,
|
|
278
|
+
kind: 'member',
|
|
279
|
+
explicit: member.slugExplicit,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
const errors = [...metaResolver.errors];
|
|
283
|
+
for (const [url, entries] of byUrl) {
|
|
284
|
+
if (entries.length < 2)
|
|
285
|
+
continue;
|
|
286
|
+
errors.push({
|
|
287
|
+
kind: 'path-collision',
|
|
288
|
+
path: url,
|
|
289
|
+
recordIds: entries.map((e) => e.recordId),
|
|
290
|
+
message: `Path collision at ${url}:\n` +
|
|
291
|
+
entries
|
|
292
|
+
.map((e) => ` - ${e.recordId} (${e.kind}, slug ${e.explicit ? 'explicit' : 'derived'})`)
|
|
293
|
+
.join('\n'),
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
// 4. Menus — resolve every recordId to a URL.
|
|
297
|
+
const resolveLink = (recordId) => {
|
|
298
|
+
const localPage = pagesById.get(recordId);
|
|
299
|
+
if (localPage)
|
|
300
|
+
return localPage.url;
|
|
301
|
+
const localMember = membersById.get(recordId);
|
|
302
|
+
if (localMember)
|
|
303
|
+
return localMember.url;
|
|
304
|
+
const record = index.byId.get(recordId);
|
|
305
|
+
if (!record)
|
|
306
|
+
return null;
|
|
307
|
+
if (baseId(record.typeId) === baseId(PAGE.id)) {
|
|
308
|
+
const { path, siteId } = rawPagePath(index, recordId);
|
|
309
|
+
const target = siteId ? index.sitesById.get(siteId) : undefined;
|
|
310
|
+
if (target && target.id !== site?.id) {
|
|
311
|
+
return `${String(target.content.baseUrl ?? '').replace(/\/+$/, '')}${path}`;
|
|
312
|
+
}
|
|
313
|
+
return path;
|
|
314
|
+
}
|
|
315
|
+
// A member on another site: link to that site, best effort.
|
|
316
|
+
const otherSiteId = siteMembership(record).find((id) => id !== site?.id && index.sitesById.has(id));
|
|
317
|
+
if (otherSiteId) {
|
|
318
|
+
const target = index.sitesById.get(otherSiteId);
|
|
319
|
+
warnings.push({
|
|
320
|
+
kind: 'cross-site-member-approx',
|
|
321
|
+
recordId,
|
|
322
|
+
message: `Menu link to ${recordId} on site "${target.content.handle}" resolves only to that site's root; cross-site member permalinks are not derivable here.`,
|
|
323
|
+
});
|
|
324
|
+
return `${String(target.content.baseUrl ?? '').replace(/\/+$/, '')}/`;
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
};
|
|
328
|
+
const menus = new Map();
|
|
329
|
+
for (const [handle, menuRecords] of index.menusByHandle) {
|
|
330
|
+
if (menuRecords.length > 1) {
|
|
331
|
+
warnings.push({
|
|
332
|
+
kind: 'duplicate-menu-handle',
|
|
333
|
+
message: `Handle "${handle}" names ${menuRecords.length} menus on this site; using ${menuRecords[0].id}.`,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
const menu = menuRecords[0];
|
|
337
|
+
const rawItems = menu.content.items ?? [];
|
|
338
|
+
const items = [];
|
|
339
|
+
for (const item of [...rawItems].sort((a, b) => Number(a.order) - Number(b.order))) {
|
|
340
|
+
const label = String(item.label ?? '');
|
|
341
|
+
const hasUrl = typeof item.url === 'string' && item.url.length > 0;
|
|
342
|
+
const hasRecordId = typeof item.recordId === 'string' && item.recordId.length > 0;
|
|
343
|
+
if (hasUrl && hasRecordId) {
|
|
344
|
+
warnings.push({
|
|
345
|
+
kind: 'menu-item-ambiguous',
|
|
346
|
+
message: `Menu "${handle}" item "${label}" sets both url and recordId; using url.`,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
if (!hasUrl && !hasRecordId) {
|
|
350
|
+
warnings.push({
|
|
351
|
+
kind: 'menu-item-empty',
|
|
352
|
+
message: `Menu "${handle}" item "${label}" sets neither url nor recordId; skipped.`,
|
|
353
|
+
});
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
let url;
|
|
357
|
+
let dangling = false;
|
|
358
|
+
if (hasUrl) {
|
|
359
|
+
url = item.url;
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const resolved = resolveLink(item.recordId);
|
|
363
|
+
if (resolved === null) {
|
|
364
|
+
dangling = true;
|
|
365
|
+
url = '#';
|
|
366
|
+
warnings.push({
|
|
367
|
+
kind: 'menu-dangling',
|
|
368
|
+
recordId: item.recordId,
|
|
369
|
+
message: `Menu "${handle}" item "${label}" points at ${item.recordId}, which did not resolve.`,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
url = resolved;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
items.push({
|
|
377
|
+
label,
|
|
378
|
+
order: Number(item.order),
|
|
379
|
+
url,
|
|
380
|
+
rel: typeof item.rel === 'string' ? item.rel : undefined,
|
|
381
|
+
dangling,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
menus.set(handle, {
|
|
385
|
+
handle,
|
|
386
|
+
label: typeof menu.content.label === 'string' ? menu.content.label : undefined,
|
|
387
|
+
items,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
const pagesByUrl = new Map();
|
|
391
|
+
for (const page of pagesById.values())
|
|
392
|
+
pagesByUrl.set(page.url, page);
|
|
393
|
+
if (config.strict !== false && errors.length > 0) {
|
|
394
|
+
const where = site ? `site "${site.content.handle}"` : 'the site';
|
|
395
|
+
throw new HaverstackEleventyError(`${errors.length} fatal fault${errors.length > 1 ? 's' : ''} resolving ${where}:\n\n` +
|
|
396
|
+
errors.map((e) => e.message).join('\n\n'));
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
site,
|
|
400
|
+
sites: index.sitesByHandle,
|
|
401
|
+
owner: index.owner,
|
|
402
|
+
pages,
|
|
403
|
+
pagesByUrl,
|
|
404
|
+
members: [...membersById.values()],
|
|
405
|
+
collections,
|
|
406
|
+
menus,
|
|
407
|
+
errors,
|
|
408
|
+
warnings,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @haverstack/eleventy — `eject`
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* Writes a starter `haverstack-base` layout into the site's `_includes`
|
|
5
|
+
* so the whole build can flow through an editable Eleventy layout. The
|
|
6
|
+
* build never writes here — ejecting is a deliberate one-off.
|
|
7
|
+
*/
|
|
8
|
+
export interface EjectableTemplate {
|
|
9
|
+
filename: string;
|
|
10
|
+
contents: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const EJECTABLE_TEMPLATES: EjectableTemplate[];
|
|
13
|
+
export interface EjectResult {
|
|
14
|
+
written: string[];
|
|
15
|
+
skipped: string[];
|
|
16
|
+
}
|
|
17
|
+
/** Write each ejectable template into `includesDir`, skipping existing files unless `force`. */
|
|
18
|
+
export declare function runEject(includesDir: string, opts?: {
|
|
19
|
+
force?: boolean;
|
|
20
|
+
}): Promise<EjectResult>;
|
|
21
|
+
export declare function formatEjectResult(result: EjectResult, includesDir: string): string;
|
|
22
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0DD,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAElD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,gGAAgG;AAChG,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUlF"}
|