@styleflow.app/flowpress-astro-core 0.2.0-beta.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/CHANGELOG.md +16 -0
- package/README.md +47 -0
- package/dist/astro/BaseLayout.astro +49 -0
- package/dist/astro/DefaultTemplate.astro +34 -0
- package/dist/astro/GutenbergRenderer.astro +324 -0
- package/dist/client.d.ts +35 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +233 -0
- package/dist/client.js.map +1 -0
- package/dist/env.d.ts +13 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +39 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/styleflow.d.ts +30 -0
- package/dist/styleflow.d.ts.map +1 -0
- package/dist/styleflow.js +47 -0
- package/dist/styleflow.js.map +1 -0
- package/dist/template-hierarchy.d.ts +16 -0
- package/dist/template-hierarchy.d.ts.map +1 -0
- package/dist/template-hierarchy.js +169 -0
- package/dist/template-hierarchy.js.map +1 -0
- package/dist/templates.d.ts +19 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +20 -0
- package/dist/templates.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +109 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
export class FlowpressGraphqlError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
errors;
|
|
4
|
+
operationName;
|
|
5
|
+
endpoint;
|
|
6
|
+
constructor(message, status, errors, operationName, endpoint, cause) {
|
|
7
|
+
super(message, cause === undefined ? undefined : { cause });
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.errors = errors;
|
|
10
|
+
this.operationName = operationName;
|
|
11
|
+
this.endpoint = endpoint;
|
|
12
|
+
this.name = "FlowpressGraphqlError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class FlowpressClient {
|
|
16
|
+
endpoint;
|
|
17
|
+
timeoutMs;
|
|
18
|
+
headers;
|
|
19
|
+
debug;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
const endpoint = options.endpoint.trim();
|
|
22
|
+
if (!endpoint) {
|
|
23
|
+
throw new Error("FlowPress GraphQL endpoint is required.");
|
|
24
|
+
}
|
|
25
|
+
new URL(endpoint);
|
|
26
|
+
this.endpoint = endpoint;
|
|
27
|
+
this.timeoutMs = options.timeoutMs ?? 15_000;
|
|
28
|
+
this.headers = { ...options.headers };
|
|
29
|
+
this.debug = options.debug ?? false;
|
|
30
|
+
}
|
|
31
|
+
async request(query, variables = {}) {
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
34
|
+
const operationName = getOperationName(query);
|
|
35
|
+
const safeEndpoint = sanitizeEndpoint(this.endpoint);
|
|
36
|
+
try {
|
|
37
|
+
let response;
|
|
38
|
+
try {
|
|
39
|
+
response = await fetch(this.endpoint, {
|
|
40
|
+
method: "POST",
|
|
41
|
+
headers: {
|
|
42
|
+
"content-type": "application/json",
|
|
43
|
+
...this.headers
|
|
44
|
+
},
|
|
45
|
+
body: JSON.stringify({ query, variables }),
|
|
46
|
+
signal: controller.signal
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const timedOut = controller.signal.aborted;
|
|
51
|
+
const detail = error instanceof Error && error.message
|
|
52
|
+
? ` ${error.message}`
|
|
53
|
+
: "";
|
|
54
|
+
throw new FlowpressGraphqlError(timedOut
|
|
55
|
+
? `FlowPress GraphQL ${operationName} timed out after ${this.timeoutMs}ms at ${safeEndpoint}.`
|
|
56
|
+
: `FlowPress GraphQL ${operationName} could not reach ${safeEndpoint}.${detail}`, undefined, undefined, operationName, safeEndpoint, error);
|
|
57
|
+
}
|
|
58
|
+
const body = await response.text();
|
|
59
|
+
let payload;
|
|
60
|
+
try {
|
|
61
|
+
payload = JSON.parse(body);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const contentType = response.headers.get("content-type") || "unknown content type";
|
|
65
|
+
throw new FlowpressGraphqlError(`FlowPress GraphQL ${operationName} returned ${response.status} `
|
|
66
|
+
+ `with ${contentType}, not JSON, from ${safeEndpoint}.`, response.status, undefined, operationName, safeEndpoint, error);
|
|
67
|
+
}
|
|
68
|
+
if (!response.ok || payload.errors?.length || payload.data === undefined) {
|
|
69
|
+
const errors = payload.errors?.map((error) => {
|
|
70
|
+
if (this.debug) {
|
|
71
|
+
return error;
|
|
72
|
+
}
|
|
73
|
+
return error.message ? { message: error.message } : {};
|
|
74
|
+
});
|
|
75
|
+
const messages = errors
|
|
76
|
+
?.flatMap((error) => [
|
|
77
|
+
error.message,
|
|
78
|
+
this.debug ? error.extensions?.debugMessage : undefined
|
|
79
|
+
])
|
|
80
|
+
.filter((message) => Boolean(message));
|
|
81
|
+
throw new FlowpressGraphqlError(messages?.join("; ")
|
|
82
|
+
|| `FlowPress GraphQL ${operationName} failed with ${response.status} at ${safeEndpoint}.`, response.status, errors, operationName, safeEndpoint);
|
|
83
|
+
}
|
|
84
|
+
return payload.data;
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
clearTimeout(timer);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async getCapabilities() {
|
|
91
|
+
const data = await this.request(`query FlowpressCapabilities {
|
|
92
|
+
styleflowCapabilities {
|
|
93
|
+
schemaVersion
|
|
94
|
+
wpGraphql
|
|
95
|
+
acfPro
|
|
96
|
+
wpGraphqlAcf
|
|
97
|
+
rankMath
|
|
98
|
+
wpml
|
|
99
|
+
woocommerce
|
|
100
|
+
contactForm7
|
|
101
|
+
defaultLocale
|
|
102
|
+
locales { code slug homeUrl }
|
|
103
|
+
}
|
|
104
|
+
}`);
|
|
105
|
+
return data.styleflowCapabilities;
|
|
106
|
+
}
|
|
107
|
+
async getRoute(uri, locale) {
|
|
108
|
+
const data = await this.request(`query FlowpressRoute($uri: String!, $locale: String) {
|
|
109
|
+
sfRouteByUri(uri: $uri, locale: $locale) {
|
|
110
|
+
uri status queryType locale isFrontPage isPostsPage frontPageMode
|
|
111
|
+
postType taxonomy slug term databaseId termId authorNicename authorId
|
|
112
|
+
pageTemplate mimeType postFormat templateCandidates
|
|
113
|
+
content { loader databaseId termId }
|
|
114
|
+
seo {
|
|
115
|
+
title description canonicalUrl robots headHtml
|
|
116
|
+
hreflang { locale url }
|
|
117
|
+
jsonLd { raw }
|
|
118
|
+
openGraph { title description image { url altText } }
|
|
119
|
+
twitterMeta { title description image { url altText } }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}`, { uri, locale: locale ?? null });
|
|
123
|
+
if (!data.sfRouteByUri) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
...data.sfRouteByUri,
|
|
128
|
+
seo: normalizeGraphqlSeo(data.sfRouteByUri.seo)
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async getRoutes(locale) {
|
|
132
|
+
const data = await this.request(`query FlowpressRoutes($locale: String) {
|
|
133
|
+
sfRoutes(locale: $locale) {
|
|
134
|
+
uri status queryType locale isFrontPage isPostsPage frontPageMode
|
|
135
|
+
postType taxonomy slug term databaseId termId authorNicename authorId
|
|
136
|
+
pageTemplate mimeType postFormat templateCandidates
|
|
137
|
+
content { loader databaseId termId }
|
|
138
|
+
seo {
|
|
139
|
+
title description canonicalUrl robots headHtml
|
|
140
|
+
hreflang { locale url }
|
|
141
|
+
jsonLd { raw }
|
|
142
|
+
openGraph { title description image { url altText } }
|
|
143
|
+
twitterMeta { title description image { url altText } }
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}`, { locale: locale ?? null });
|
|
147
|
+
return data.sfRoutes.map((route) => ({
|
|
148
|
+
...route,
|
|
149
|
+
seo: normalizeGraphqlSeo(route.seo)
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
async getContent(loader, variables) {
|
|
153
|
+
const data = await this.request(`query FlowpressContent(
|
|
154
|
+
$loader: String!,
|
|
155
|
+
$databaseId: Int,
|
|
156
|
+
$termId: Int,
|
|
157
|
+
$uri: String,
|
|
158
|
+
$locale: String
|
|
159
|
+
) {
|
|
160
|
+
sfContentByLoader(
|
|
161
|
+
loader: $loader,
|
|
162
|
+
databaseId: $databaseId,
|
|
163
|
+
termId: $termId,
|
|
164
|
+
uri: $uri,
|
|
165
|
+
locale: $locale
|
|
166
|
+
) {
|
|
167
|
+
title excerpt content contentBlocksJson projectFieldsJson
|
|
168
|
+
}
|
|
169
|
+
}`, {
|
|
170
|
+
loader,
|
|
171
|
+
databaseId: variables.databaseId ?? null,
|
|
172
|
+
termId: variables.termId ?? null,
|
|
173
|
+
uri: variables.uri ?? null,
|
|
174
|
+
locale: variables.locale ?? null
|
|
175
|
+
});
|
|
176
|
+
const content = data.sfContentByLoader;
|
|
177
|
+
if (!content) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
const { contentBlocksJson, projectFieldsJson, ...rest } = content;
|
|
181
|
+
return {
|
|
182
|
+
...rest,
|
|
183
|
+
contentBlocks: parseJson(contentBlocksJson, []),
|
|
184
|
+
projectFields: parseJson(projectFieldsJson, {})
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function getOperationName(query) {
|
|
189
|
+
return query.match(/\b(?:query|mutation|subscription)\s+([_A-Za-z][_0-9A-Za-z]*)/)?.[1] || "AnonymousOperation";
|
|
190
|
+
}
|
|
191
|
+
function sanitizeEndpoint(endpoint) {
|
|
192
|
+
const url = new URL(endpoint);
|
|
193
|
+
url.username = "";
|
|
194
|
+
url.password = "";
|
|
195
|
+
url.search = "";
|
|
196
|
+
url.hash = "";
|
|
197
|
+
return url.toString();
|
|
198
|
+
}
|
|
199
|
+
function normalizeGraphqlSeo(seo) {
|
|
200
|
+
if (!seo)
|
|
201
|
+
return null;
|
|
202
|
+
const social = (value) => value
|
|
203
|
+
? {
|
|
204
|
+
title: value.title ?? null,
|
|
205
|
+
description: value.description ?? null,
|
|
206
|
+
image: value.image
|
|
207
|
+
? { url: value.image.url, alt: value.image.altText ?? null }
|
|
208
|
+
: null
|
|
209
|
+
}
|
|
210
|
+
: null;
|
|
211
|
+
return {
|
|
212
|
+
title: seo.title ?? null,
|
|
213
|
+
description: seo.description ?? null,
|
|
214
|
+
canonicalUrl: seo.canonicalUrl ?? null,
|
|
215
|
+
robots: seo.robots ?? null,
|
|
216
|
+
headHtml: seo.headHtml ?? null,
|
|
217
|
+
jsonLd: parseJson(seo.jsonLd?.raw, null),
|
|
218
|
+
hreflang: seo.hreflang ?? null,
|
|
219
|
+
openGraph: social(seo.openGraph),
|
|
220
|
+
twitter: social(seo.twitterMeta)
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function parseJson(value, fallback) {
|
|
224
|
+
if (!value)
|
|
225
|
+
return fallback;
|
|
226
|
+
try {
|
|
227
|
+
return JSON.parse(value);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return fallback;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type AstroOutputMode = "static" | "server";
|
|
2
|
+
export interface FlowpressEnvironment {
|
|
3
|
+
appEnv: string;
|
|
4
|
+
projectName: string;
|
|
5
|
+
projectSlug: string;
|
|
6
|
+
outputMode: AstroOutputMode;
|
|
7
|
+
siteUrl: string;
|
|
8
|
+
backendUrl: string;
|
|
9
|
+
graphqlUrl: string;
|
|
10
|
+
localAstroPort: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function readFlowpressEnvironment(env?: NodeJS.ProcessEnv): FlowpressEnvironment;
|
|
13
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AA0BD,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAsBtB"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
function required(env, key) {
|
|
2
|
+
const value = env[key]?.trim();
|
|
3
|
+
if (!value) {
|
|
4
|
+
throw new Error(`Missing required environment variable ${key}.`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function validUrl(value, key) {
|
|
9
|
+
try {
|
|
10
|
+
return new URL(value).toString().replace(/\/$/, "");
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
throw new Error(`${key} must be an absolute URL.`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function port(value, key) {
|
|
17
|
+
const parsed = Number.parseInt(value, 10);
|
|
18
|
+
if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65_535) {
|
|
19
|
+
throw new Error(`${key} must be a valid TCP port.`);
|
|
20
|
+
}
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
export function readFlowpressEnvironment(env = process.env) {
|
|
24
|
+
const outputMode = required(env, "ASTRO_OUTPUT_MODE");
|
|
25
|
+
if (outputMode !== "static" && outputMode !== "server") {
|
|
26
|
+
throw new Error("ASTRO_OUTPUT_MODE must be static or server.");
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
appEnv: required(env, "APP_ENV"),
|
|
30
|
+
projectName: required(env, "PROJECT_NAME"),
|
|
31
|
+
projectSlug: required(env, "PROJECT_SLUG"),
|
|
32
|
+
outputMode,
|
|
33
|
+
siteUrl: validUrl(required(env, "SITE_URL"), "SITE_URL"),
|
|
34
|
+
backendUrl: validUrl(required(env, "BACKEND_URL"), "BACKEND_URL"),
|
|
35
|
+
graphqlUrl: validUrl(required(env, "BACKEND_GRAPHQL_URL"), "BACKEND_GRAPHQL_URL"),
|
|
36
|
+
localAstroPort: port(required(env, "LOCAL_ASTRO_PORT"), "LOCAL_ASTRO_PORT")
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAaA,SAAS,QAAQ,CAAC,GAAsB,EAAE,GAAW;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,2BAA2B,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,GAAW;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,4BAA4B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACtD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;QAChC,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAC1C,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAC1C,UAAU;QACV,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QACxD,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC;QACjE,UAAU,EAAE,QAAQ,CAClB,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAC,EACpC,qBAAqB,CACtB;QACD,cAAc,EAAE,IAAI,CAClB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,EACjC,kBAAkB,CACnB;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface StyleflowContractAxes {
|
|
2
|
+
color: {
|
|
3
|
+
tones: string[];
|
|
4
|
+
intensities: Array<string | number>;
|
|
5
|
+
surfaces: string[];
|
|
6
|
+
};
|
|
7
|
+
layout: {
|
|
8
|
+
roles: string[];
|
|
9
|
+
densities: string[];
|
|
10
|
+
};
|
|
11
|
+
typography: {
|
|
12
|
+
types: string[];
|
|
13
|
+
variants: Record<string, string[]>;
|
|
14
|
+
weights: string[];
|
|
15
|
+
};
|
|
16
|
+
interaction: {
|
|
17
|
+
priorities: string[];
|
|
18
|
+
states: string[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface StyleflowContract {
|
|
22
|
+
axes: StyleflowContractAxes;
|
|
23
|
+
}
|
|
24
|
+
export type DynamicStyleflowProps = Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* CMS values can outlive a contract revision. Invalid values fail closed to
|
|
27
|
+
* component defaults before reaching Styleflow's Astro runtime.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveDynamicStyleflowProps(input: DynamicStyleflowProps, defaults: DynamicStyleflowProps, contract: StyleflowContract): DynamicStyleflowProps;
|
|
30
|
+
//# sourceMappingURL=styleflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styleflow.d.ts","sourceRoot":"","sources":["../src/styleflow.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAkB5D;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,iBAAiB,GAC1B,qBAAqB,CAmCvB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const AXIS_BY_PROP = {
|
|
2
|
+
tone: ["color", "tones"],
|
|
3
|
+
intensity: ["color", "intensities"],
|
|
4
|
+
surface: ["color", "surfaces"],
|
|
5
|
+
layoutRole: ["layout", "roles"],
|
|
6
|
+
density: ["layout", "densities"],
|
|
7
|
+
ty: ["typography", "types"],
|
|
8
|
+
w: ["typography", "weights"],
|
|
9
|
+
interactivePriority: ["interaction", "priorities"],
|
|
10
|
+
interactionState: ["interaction", "states"]
|
|
11
|
+
};
|
|
12
|
+
function sameAxisValue(candidate, allowed) {
|
|
13
|
+
return String(candidate) === String(allowed);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* CMS values can outlive a contract revision. Invalid values fail closed to
|
|
17
|
+
* component defaults before reaching Styleflow's Astro runtime.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveDynamicStyleflowProps(input, defaults, contract) {
|
|
20
|
+
const resolved = { ...defaults };
|
|
21
|
+
for (const [key, value] of Object.entries(input)) {
|
|
22
|
+
if (value === undefined || value === null || value === "") {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (key === "v") {
|
|
26
|
+
const type = String(input.ty ?? defaults.ty ?? "");
|
|
27
|
+
const variants = contract.axes.typography.variants[type] ?? [];
|
|
28
|
+
resolved.v = variants.some((variant) => sameAxisValue(value, variant))
|
|
29
|
+
? value
|
|
30
|
+
: defaults.v;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const axisPath = AXIS_BY_PROP[key];
|
|
34
|
+
if (!axisPath) {
|
|
35
|
+
resolved[key] = value;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const [group, axis] = axisPath;
|
|
39
|
+
const groups = contract.axes;
|
|
40
|
+
const allowed = groups[group]?.[axis] ?? [];
|
|
41
|
+
resolved[key] = allowed.some((item) => sameAxisValue(value, item))
|
|
42
|
+
? value
|
|
43
|
+
: defaults[key];
|
|
44
|
+
}
|
|
45
|
+
return resolved;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=styleflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styleflow.js","sourceRoot":"","sources":["../src/styleflow.ts"],"names":[],"mappings":"AA2BA,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;IACnC,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;IAC9B,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IAChC,EAAE,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;IAC3B,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;IAC5B,mBAAmB,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IAClD,gBAAgB,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;CACnC,CAAC;AAEX,SAAS,aAAa,CAAC,SAAkB,EAAE,OAAgB;IACzD,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAA4B,EAC5B,QAA+B,EAC/B,QAA2B;IAE3B,MAAM,QAAQ,GAA0B,EAAE,GAAG,QAAQ,EAAE,CAAC;IAExD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/D,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpE,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAgC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAGvB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAChE,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TemplateContext } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mirrors the WordPress classic template hierarchy, without file extensions.
|
|
4
|
+
* WordPress is still the source of truth at runtime and may filter candidates
|
|
5
|
+
* before returning them to Astro; this pure function powers tests and offline
|
|
6
|
+
* scaffolding.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getTemplateCandidates(context: TemplateContext): string[];
|
|
9
|
+
export interface TemplateResolution<T> {
|
|
10
|
+
name: string;
|
|
11
|
+
component: T;
|
|
12
|
+
candidates: string[];
|
|
13
|
+
source: "project" | "core";
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveTemplate<T>(candidates: string[], projectTemplates: Readonly<Record<string, T>>, coreTemplates: Readonly<Record<string, T>>): TemplateResolution<T>;
|
|
16
|
+
//# sourceMappingURL=template-hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-hierarchy.d.ts","sourceRoot":"","sources":["../src/template-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsDlD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CA8FxE;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAC7C,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GACzC,kBAAkB,CAAC,CAAC,CAAC,CAwBvB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
function slugPart(value) {
|
|
2
|
+
return String(value ?? "")
|
|
3
|
+
.trim()
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/\.php$/i, "")
|
|
6
|
+
.replace(/[^a-z0-9_%\-\u0080-\uFFFF]+/gu, "-")
|
|
7
|
+
.replace(/^-+|-+$/g, "");
|
|
8
|
+
}
|
|
9
|
+
function assignedTemplatePart(value) {
|
|
10
|
+
return String(value ?? "")
|
|
11
|
+
.trim()
|
|
12
|
+
.replace(/\.php$/i, "")
|
|
13
|
+
.split("/")
|
|
14
|
+
.map((part) => slugPart(part))
|
|
15
|
+
.filter(Boolean)
|
|
16
|
+
.join("/");
|
|
17
|
+
}
|
|
18
|
+
function unique(values) {
|
|
19
|
+
return [...new Set(values.filter((value) => Boolean(value)))];
|
|
20
|
+
}
|
|
21
|
+
function pageCandidates(context) {
|
|
22
|
+
return unique([
|
|
23
|
+
context.pageTemplate && context.pageTemplate !== "default"
|
|
24
|
+
? assignedTemplatePart(context.pageTemplate)
|
|
25
|
+
: null,
|
|
26
|
+
context.slug ? `page-${slugPart(context.slug)}` : null,
|
|
27
|
+
context.databaseId ? `page-${context.databaseId}` : null,
|
|
28
|
+
"page",
|
|
29
|
+
"singular",
|
|
30
|
+
"index"
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
function attachmentMimeCandidates(mimeType) {
|
|
34
|
+
const [type = "", subtype = ""] = String(mimeType ?? "")
|
|
35
|
+
.toLowerCase()
|
|
36
|
+
.split("/", 2);
|
|
37
|
+
const normalizedType = slugPart(type);
|
|
38
|
+
const normalizedSubtype = slugPart(subtype);
|
|
39
|
+
return unique([
|
|
40
|
+
normalizedType && normalizedSubtype
|
|
41
|
+
? `${normalizedType}-${normalizedSubtype}`
|
|
42
|
+
: null,
|
|
43
|
+
normalizedSubtype || null,
|
|
44
|
+
normalizedType || null
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Mirrors the WordPress classic template hierarchy, without file extensions.
|
|
49
|
+
* WordPress is still the source of truth at runtime and may filter candidates
|
|
50
|
+
* before returning them to Astro; this pure function powers tests and offline
|
|
51
|
+
* scaffolding.
|
|
52
|
+
*/
|
|
53
|
+
export function getTemplateCandidates(context) {
|
|
54
|
+
switch (context.queryType) {
|
|
55
|
+
case "front-page":
|
|
56
|
+
return unique([
|
|
57
|
+
"front-page",
|
|
58
|
+
...(context.frontPageMode === "posts"
|
|
59
|
+
? ["home", "index"]
|
|
60
|
+
: pageCandidates(context))
|
|
61
|
+
]);
|
|
62
|
+
case "home":
|
|
63
|
+
return ["home", "index"];
|
|
64
|
+
case "privacy-policy":
|
|
65
|
+
return unique(["privacy-policy", ...pageCandidates(context)]);
|
|
66
|
+
case "page":
|
|
67
|
+
return pageCandidates(context);
|
|
68
|
+
case "single":
|
|
69
|
+
return unique([
|
|
70
|
+
context.postType && context.slug
|
|
71
|
+
? `single-${slugPart(context.postType)}-${slugPart(context.slug)}`
|
|
72
|
+
: null,
|
|
73
|
+
context.postType ? `single-${slugPart(context.postType)}` : null,
|
|
74
|
+
"single",
|
|
75
|
+
"singular",
|
|
76
|
+
"index"
|
|
77
|
+
]);
|
|
78
|
+
case "attachment":
|
|
79
|
+
return unique([
|
|
80
|
+
...attachmentMimeCandidates(context.mimeType),
|
|
81
|
+
"attachment",
|
|
82
|
+
context.slug ? `single-attachment-${slugPart(context.slug)}` : null,
|
|
83
|
+
"single-attachment",
|
|
84
|
+
"single",
|
|
85
|
+
"singular",
|
|
86
|
+
"index"
|
|
87
|
+
]);
|
|
88
|
+
case "post-type-archive":
|
|
89
|
+
return unique([
|
|
90
|
+
context.postType ? `archive-${slugPart(context.postType)}` : null,
|
|
91
|
+
"archive",
|
|
92
|
+
"index"
|
|
93
|
+
]);
|
|
94
|
+
case "category":
|
|
95
|
+
return unique([
|
|
96
|
+
context.slug ? `category-${slugPart(context.slug)}` : null,
|
|
97
|
+
context.termId ? `category-${context.termId}` : null,
|
|
98
|
+
"category",
|
|
99
|
+
"archive",
|
|
100
|
+
"index"
|
|
101
|
+
]);
|
|
102
|
+
case "tag":
|
|
103
|
+
return unique([
|
|
104
|
+
context.slug ? `tag-${slugPart(context.slug)}` : null,
|
|
105
|
+
context.termId ? `tag-${context.termId}` : null,
|
|
106
|
+
"tag",
|
|
107
|
+
"archive",
|
|
108
|
+
"index"
|
|
109
|
+
]);
|
|
110
|
+
case "taxonomy":
|
|
111
|
+
return unique([
|
|
112
|
+
context.taxonomy && context.term
|
|
113
|
+
? `taxonomy-${slugPart(context.taxonomy)}-${slugPart(context.term)}`
|
|
114
|
+
: null,
|
|
115
|
+
context.taxonomy ? `taxonomy-${slugPart(context.taxonomy)}` : null,
|
|
116
|
+
"taxonomy",
|
|
117
|
+
"archive",
|
|
118
|
+
"index"
|
|
119
|
+
]);
|
|
120
|
+
case "author":
|
|
121
|
+
return unique([
|
|
122
|
+
context.authorNicename
|
|
123
|
+
? `author-${slugPart(context.authorNicename)}`
|
|
124
|
+
: null,
|
|
125
|
+
context.authorId ? `author-${context.authorId}` : null,
|
|
126
|
+
"author",
|
|
127
|
+
"archive",
|
|
128
|
+
"index"
|
|
129
|
+
]);
|
|
130
|
+
case "date":
|
|
131
|
+
return ["date", "archive", "index"];
|
|
132
|
+
case "search":
|
|
133
|
+
return ["search", "index"];
|
|
134
|
+
case "embed":
|
|
135
|
+
return unique([
|
|
136
|
+
context.postType && context.postFormat
|
|
137
|
+
? `embed-${slugPart(context.postType)}-${slugPart(context.postFormat)}`
|
|
138
|
+
: null,
|
|
139
|
+
context.postType ? `embed-${slugPart(context.postType)}` : null,
|
|
140
|
+
"embed"
|
|
141
|
+
]);
|
|
142
|
+
case "archive":
|
|
143
|
+
return ["archive", "index"];
|
|
144
|
+
case "404":
|
|
145
|
+
return ["404", "index"];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
export function resolveTemplate(candidates, projectTemplates, coreTemplates) {
|
|
149
|
+
for (const candidate of candidates) {
|
|
150
|
+
const project = projectTemplates[candidate];
|
|
151
|
+
if (project) {
|
|
152
|
+
return { name: candidate, component: project, candidates, source: "project" };
|
|
153
|
+
}
|
|
154
|
+
const core = coreTemplates[candidate];
|
|
155
|
+
if (core) {
|
|
156
|
+
return { name: candidate, component: core, candidates, source: "core" };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const projectIndex = projectTemplates.index;
|
|
160
|
+
if (projectIndex) {
|
|
161
|
+
return { name: "index", component: projectIndex, candidates, source: "project" };
|
|
162
|
+
}
|
|
163
|
+
const coreIndex = coreTemplates.index;
|
|
164
|
+
if (!coreIndex) {
|
|
165
|
+
throw new Error("FlowPress requires a core index template.");
|
|
166
|
+
}
|
|
167
|
+
return { name: "index", component: coreIndex, candidates, source: "core" };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=template-hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-hierarchy.js","sourceRoot":"","sources":["../src/template-hierarchy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const coreTemplates: {
|
|
2
|
+
readonly index: unknown;
|
|
3
|
+
readonly singular: unknown;
|
|
4
|
+
readonly single: unknown;
|
|
5
|
+
readonly page: unknown;
|
|
6
|
+
readonly archive: unknown;
|
|
7
|
+
readonly taxonomy: unknown;
|
|
8
|
+
readonly category: unknown;
|
|
9
|
+
readonly tag: unknown;
|
|
10
|
+
readonly author: unknown;
|
|
11
|
+
readonly date: unknown;
|
|
12
|
+
readonly search: unknown;
|
|
13
|
+
readonly home: unknown;
|
|
14
|
+
readonly attachment: unknown;
|
|
15
|
+
readonly embed: unknown;
|
|
16
|
+
readonly "privacy-policy": unknown;
|
|
17
|
+
readonly "404": unknown;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAiBhB,CAAC"}
|