@krantho/config 0.0.0-stage → 1.0.1
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/dist/defaults.d.ts +15 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +148 -0
- package/dist/defaults.js.map +1 -0
- package/dist/define.d.ts +11 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +12 -0
- package/dist/define.js.map +1 -0
- package/dist/derive.d.ts +12 -0
- package/dist/derive.d.ts.map +1 -0
- package/dist/derive.js +90 -0
- package/dist/derive.js.map +1 -0
- package/dist/env.d.ts +19 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +89 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/leaves.d.ts +34 -0
- package/dist/leaves.d.ts.map +1 -0
- package/dist/leaves.js +724 -0
- package/dist/leaves.js.map +1 -0
- package/dist/llm-providers.d.ts +25 -0
- package/dist/llm-providers.d.ts.map +1 -0
- package/dist/llm-providers.js +41 -0
- package/dist/llm-providers.js.map +1 -0
- package/dist/node/index.d.ts +9 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +4 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/load.d.ts +20 -0
- package/dist/node/load.d.ts.map +1 -0
- package/dist/node/load.js +48 -0
- package/dist/node/load.js.map +1 -0
- package/dist/node/route-slug.d.ts +9 -0
- package/dist/node/route-slug.d.ts.map +1 -0
- package/dist/node/route-slug.js +23 -0
- package/dist/node/route-slug.js.map +1 -0
- package/dist/node/seo-definitions.d.ts +8 -0
- package/dist/node/seo-definitions.d.ts.map +1 -0
- package/dist/node/seo-definitions.js +124 -0
- package/dist/node/seo-definitions.js.map +1 -0
- package/dist/object-path.d.ts +17 -0
- package/dist/object-path.d.ts.map +1 -0
- package/dist/object-path.js +75 -0
- package/dist/object-path.js.map +1 -0
- package/dist/production.d.ts +9 -0
- package/dist/production.d.ts.map +1 -0
- package/dist/production.js +22 -0
- package/dist/production.js.map +1 -0
- package/dist/public.d.ts +61 -0
- package/dist/public.d.ts.map +1 -0
- package/dist/public.js +65 -0
- package/dist/public.js.map +1 -0
- package/dist/reference.d.ts +8 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +117 -0
- package/dist/reference.js.map +1 -0
- package/dist/resolve.d.ts +27 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +87 -0
- package/dist/resolve.js.map +1 -0
- package/dist/schema.d.ts +437 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +420 -0
- package/dist/schema.js.map +1 -0
- package/dist/sources.d.ts +10 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +17 -0
- package/dist/sources.js.map +1 -0
- package/dist/types.d.ts +413 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-events.d.ts +3 -0
- package/dist/webhook-events.d.ts.map +1 -0
- package/dist/webhook-events.js +3 -0
- package/dist/webhook-events.js.map +1 -0
- package/package.json +48 -3
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaves.js","sourceRoot":"","sources":["../src/leaves.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { LlmSection } from './types.js';
|
|
2
|
+
/** The LLM providers a site can use — the one list the schema and every consumer share */
|
|
3
|
+
export declare const LLM_PROVIDERS: readonly ["anthropic", "claude-code", "openai", "gemini", "openrouter", "ollama"];
|
|
4
|
+
/** One of the {@link LLM_PROVIDERS} */
|
|
5
|
+
export type LlmProviderName = (typeof LLM_PROVIDERS)[number];
|
|
6
|
+
/** How a provider's credential authenticates its calls */
|
|
7
|
+
export type LlmCredentialType = 'api-key' | 'oauth';
|
|
8
|
+
/** The configuration leaf that holds one provider's credential */
|
|
9
|
+
export interface LlmCredentialLeaf {
|
|
10
|
+
type: LlmCredentialType;
|
|
11
|
+
/** Dotted path into the tree, for example `llm.openai.apiKey` */
|
|
12
|
+
path: string;
|
|
13
|
+
/** The environment variable that sets it */
|
|
14
|
+
env: string;
|
|
15
|
+
/** The credential from code or the environment, when one is set */
|
|
16
|
+
value: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
/** The error for a claude-code provider without its subscription token, naming the variable that sets it */
|
|
19
|
+
export declare function claudeCodeTokenMissing(env: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* The leaf that holds a provider's credential, or null for a provider with none
|
|
22
|
+
* (ollama) or one that is not known. Each provider has a credential of its own.
|
|
23
|
+
*/
|
|
24
|
+
export declare function llmCredentialLeaf(llm: LlmSection, provider: string): LlmCredentialLeaf | null;
|
|
25
|
+
//# sourceMappingURL=llm-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-providers.d.ts","sourceRoot":"","sources":["../src/llm-providers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,0FAA0F;AAC1F,eAAO,MAAM,aAAa,mFAOhB,CAAA;AAEV,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnD,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,CAAA;IACvB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAA;IACX,mEAAmE;IACnE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B;AAWD,4GAA4G;AAC5G,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAW7F"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { envNameFor, leafByPath } from './leaves.js';
|
|
2
|
+
import { getPath } from './object-path.js';
|
|
3
|
+
/** The LLM providers a site can use — the one list the schema and every consumer share */
|
|
4
|
+
export const LLM_PROVIDERS = [
|
|
5
|
+
'anthropic',
|
|
6
|
+
'claude-code',
|
|
7
|
+
'openai',
|
|
8
|
+
'gemini',
|
|
9
|
+
'openrouter',
|
|
10
|
+
'ollama',
|
|
11
|
+
];
|
|
12
|
+
/** Where each provider's credential lives in the tree; ollama needs none */
|
|
13
|
+
const CREDENTIAL_LEAVES = {
|
|
14
|
+
anthropic: { type: 'api-key', path: 'llm.anthropic.apiKey' },
|
|
15
|
+
openai: { type: 'api-key', path: 'llm.openai.apiKey' },
|
|
16
|
+
gemini: { type: 'api-key', path: 'llm.gemini.apiKey' },
|
|
17
|
+
openrouter: { type: 'api-key', path: 'llm.openrouter.apiKey' },
|
|
18
|
+
'claude-code': { type: 'oauth', path: 'llm.claudeCode.authToken' },
|
|
19
|
+
};
|
|
20
|
+
/** The error for a claude-code provider without its subscription token, naming the variable that sets it */
|
|
21
|
+
export function claudeCodeTokenMissing(env) {
|
|
22
|
+
return `The claude-code provider needs a subscription token. Run \`claude setup-token\` and set ${env}. It is for development on your own machine.`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The leaf that holds a provider's credential, or null for a provider with none
|
|
26
|
+
* (ollama) or one that is not known. Each provider has a credential of its own.
|
|
27
|
+
*/
|
|
28
|
+
export function llmCredentialLeaf(llm, provider) {
|
|
29
|
+
const entry = CREDENTIAL_LEAVES[provider];
|
|
30
|
+
const leaf = entry ? leafByPath(entry.path) : undefined;
|
|
31
|
+
if (!entry || !leaf)
|
|
32
|
+
return null;
|
|
33
|
+
const value = getPath({ llm }, entry.path);
|
|
34
|
+
return {
|
|
35
|
+
type: entry.type,
|
|
36
|
+
path: entry.path,
|
|
37
|
+
env: envNameFor(leaf) ?? '',
|
|
38
|
+
value: typeof value === 'string' ? value : undefined,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=llm-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-providers.js","sourceRoot":"","sources":["../src/llm-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;CACA,CAAA;AAmBV,4EAA4E;AAC5E,MAAM,iBAAiB,GAAwE;IAC7F,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACtD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACtD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE;IAC9D,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;CACnE,CAAA;AAED,4GAA4G;AAC5G,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,2FAA2F,GAAG,8CAA8C,CAAA;AACrJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe,EAAE,QAAgB;IACjE,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;QAC3B,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KACrD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Node half of the package, published as `@krantho/config/node`: loading
|
|
3
|
+
* a site's whole configuration, including its SEO definition files.
|
|
4
|
+
*/
|
|
5
|
+
export type { LoadConfigOptions } from './load.js';
|
|
6
|
+
export { loadConfig } from './load.js';
|
|
7
|
+
export { decodeRouteSlug, encodeRouteSlug } from './route-slug.js';
|
|
8
|
+
export { readSeoDefinitions } from './seo-definitions.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { KranthoConfig, KranthoConfigInput } from '../types.js';
|
|
2
|
+
/** What a site's configuration is loaded from */
|
|
3
|
+
export interface LoadConfigOptions {
|
|
4
|
+
/** The developer's `krantho.config.ts` */
|
|
5
|
+
code?: KranthoConfigInput | undefined;
|
|
6
|
+
/** The environment; `process.env` in a running site */
|
|
7
|
+
env?: Record<string, string | undefined> | undefined;
|
|
8
|
+
/** Directory relative paths resolve against. Defaults to the working directory. */
|
|
9
|
+
cwd?: string | undefined;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Load a site's configuration into one validated instance: defaults, then the
|
|
13
|
+
* developer's code, then the environment, then the SEO definition files in
|
|
14
|
+
* `seo.configDir`. Every consumer — the API handler, the content loader, the
|
|
15
|
+
* Studio gate, the page cache, the tools — asks for it and gets the same
|
|
16
|
+
* instance, loaded once per process for the same code, working directory and
|
|
17
|
+
* environment. Throws a {@link KranthoConfigError} naming every problem.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadConfig(options?: LoadConfigOptions): KranthoConfig;
|
|
20
|
+
//# sourceMappingURL=load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/node/load.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGpE,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrC,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;IACpD,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,aAAa,CAiBzE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { buildEnvOverlay } from '../env.js';
|
|
2
|
+
import { resolveConfig } from '../resolve.js';
|
|
3
|
+
import { readSeoDefinitions } from './seo-definitions.js';
|
|
4
|
+
/**
|
|
5
|
+
* Loaded instances, per code object, then per working directory and
|
|
6
|
+
* environment — for the life of the process: a site loads one environment, so
|
|
7
|
+
* an entry per distinct environment stays a handful
|
|
8
|
+
*/
|
|
9
|
+
const loaded = new WeakMap();
|
|
10
|
+
function load(code, env, cwd) {
|
|
11
|
+
const config = resolveConfig(code, env, { cwd });
|
|
12
|
+
if (!config.seo.configDir)
|
|
13
|
+
return config;
|
|
14
|
+
const sources = new Map(config.sources);
|
|
15
|
+
sources.set('seo.definitions', 'file');
|
|
16
|
+
return {
|
|
17
|
+
...config,
|
|
18
|
+
seo: { ...config.seo, definitions: readSeoDefinitions(config.seo.configDir) },
|
|
19
|
+
sources,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load a site's configuration into one validated instance: defaults, then the
|
|
24
|
+
* developer's code, then the environment, then the SEO definition files in
|
|
25
|
+
* `seo.configDir`. Every consumer — the API handler, the content loader, the
|
|
26
|
+
* Studio gate, the page cache, the tools — asks for it and gets the same
|
|
27
|
+
* instance, loaded once per process for the same code, working directory and
|
|
28
|
+
* environment. Throws a {@link KranthoConfigError} naming every problem.
|
|
29
|
+
*/
|
|
30
|
+
export function loadConfig(options = {}) {
|
|
31
|
+
const code = options.code ?? {};
|
|
32
|
+
const env = options.env ?? {};
|
|
33
|
+
const cwd = options.cwd ?? process.cwd();
|
|
34
|
+
const overlay = buildEnvOverlay(env);
|
|
35
|
+
const key = JSON.stringify([cwd, overlay.values, overlay.issues]);
|
|
36
|
+
let byKey = loaded.get(code);
|
|
37
|
+
if (!byKey) {
|
|
38
|
+
byKey = new Map();
|
|
39
|
+
loaded.set(code, byKey);
|
|
40
|
+
}
|
|
41
|
+
let config = byKey.get(key);
|
|
42
|
+
if (!config) {
|
|
43
|
+
config = load(code, env, cwd);
|
|
44
|
+
byKey.set(key, config);
|
|
45
|
+
}
|
|
46
|
+
return config;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/node/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAYzD;;;;GAIG;AACH,MAAM,MAAM,GAAG,IAAI,OAAO,EAAkD,CAAA;AAE5E,SAAS,IAAI,CACX,IAAwB,EACxB,GAAuC,EACvC,GAAW;IAEX,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS;QAAE,OAAO,MAAM,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;IACtC,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC7E,OAAO;KACR,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,UAA6B,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACjE,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;QACjB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC;IACD,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route patterns as file names, for the `routes/` directory of SEO
|
|
3
|
+
* definitions: `/services/strategic/*` ↔ `services__strategic____WILD__`.
|
|
4
|
+
*/
|
|
5
|
+
/** Encode a URL pattern as a file name */
|
|
6
|
+
export declare function encodeRouteSlug(pattern: string): string;
|
|
7
|
+
/** Decode a file name back to its URL pattern */
|
|
8
|
+
export declare function decodeRouteSlug(slug: string): string;
|
|
9
|
+
//# sourceMappingURL=route-slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-slug.d.ts","sourceRoot":"","sources":["../../src/node/route-slug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route patterns as file names, for the `routes/` directory of SEO
|
|
3
|
+
* definitions: `/services/strategic/*` ↔ `services__strategic____WILD__`.
|
|
4
|
+
*/
|
|
5
|
+
/** Encode a URL pattern as a file name */
|
|
6
|
+
export function encodeRouteSlug(pattern) {
|
|
7
|
+
return pattern
|
|
8
|
+
.replace(/^\/+|\/+$/g, '') // trim leading/trailing slashes
|
|
9
|
+
.replace(/\*\*/g, '__GLOB__')
|
|
10
|
+
.replace(/\*/g, '__WILD__')
|
|
11
|
+
.replace(/\//g, '__');
|
|
12
|
+
}
|
|
13
|
+
/** Decode a file name back to its URL pattern */
|
|
14
|
+
export function decodeRouteSlug(slug) {
|
|
15
|
+
// Replace sentinels before path separators — sentinels contain '__' which
|
|
16
|
+
// the path-separator regex would otherwise split.
|
|
17
|
+
const restored = slug
|
|
18
|
+
.replace(/__GLOB__/g, '**')
|
|
19
|
+
.replace(/__WILD__/g, '*')
|
|
20
|
+
.replace(/__/g, '/');
|
|
21
|
+
return `/${restored}`;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=route-slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-slug.js","sourceRoot":"","sources":["../../src/node/route-slug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO;SACX,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,gCAAgC;SAC1D,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,QAAQ,GAAG,IAAI;SAClB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtB,OAAO,IAAI,QAAQ,EAAE,CAAA;AACvB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SeoDefinitions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read a directory of SEO definition files. A missing directory, or a
|
|
4
|
+
* missing scope directory in it, defines nothing; a file that does not parse
|
|
5
|
+
* or lacks a `@type` throws a {@link KranthoConfigError} naming it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function readSeoDefinitions(dir: string): SeoDefinitions;
|
|
8
|
+
//# sourceMappingURL=seo-definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-definitions.d.ts","sourceRoot":"","sources":["../../src/node/seo-definitions.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,aAAa,CAAA;AAiGlF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAO9D"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SEO definition files of `seo.configDir`:
|
|
3
|
+
*
|
|
4
|
+
* <configDir>/
|
|
5
|
+
* ├── site/ ← one file per entity
|
|
6
|
+
* │ ├── organization.yaml
|
|
7
|
+
* │ ├── founder.person.yaml ← role.type.yaml
|
|
8
|
+
* │ ├── _field-mappings.yaml
|
|
9
|
+
* │ └── _structure.yaml ← trail and kind of the scope's pages
|
|
10
|
+
* ├── collections/{collection}/ ← same layout as site/
|
|
11
|
+
* ├── documents/{collection}/{slug}.yaml
|
|
12
|
+
* └── routes/{slug-encoded}.yaml
|
|
13
|
+
*/
|
|
14
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
15
|
+
import { basename, extname, join } from 'node:path';
|
|
16
|
+
import { parse as parseYaml } from 'yaml';
|
|
17
|
+
import { KranthoConfigError } from '../errors.js';
|
|
18
|
+
import { seoScopeSchema } from '../schema.js';
|
|
19
|
+
import { decodeRouteSlug } from './route-slug.js';
|
|
20
|
+
const EXTENSIONS = new Set(['.yaml', '.yml', '.json']);
|
|
21
|
+
function isDirectory(path) {
|
|
22
|
+
try {
|
|
23
|
+
return statSync(path).isDirectory();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Definition files of a directory, in name order */
|
|
30
|
+
function definitionFiles(dir) {
|
|
31
|
+
return readdirSync(dir)
|
|
32
|
+
.filter((file) => EXTENSIONS.has(extname(file)))
|
|
33
|
+
.sort();
|
|
34
|
+
}
|
|
35
|
+
function parseFile(path) {
|
|
36
|
+
const text = readFileSync(path, 'utf-8');
|
|
37
|
+
try {
|
|
38
|
+
return extname(path) === '.json' ? JSON.parse(text) : parseYaml(text);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw new KranthoConfigError([`${path}: ${err instanceof Error ? err.message : String(err)}`]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** One entity file, checked against the scope schema */
|
|
45
|
+
function parseEntity(path) {
|
|
46
|
+
const raw = parseFile(path);
|
|
47
|
+
const parsed = seoScopeSchema.shape.entities.element.safeParse(raw && typeof raw === 'object' && !Array.isArray(raw) ? { properties: {}, ...raw } : raw);
|
|
48
|
+
if (!parsed.success) {
|
|
49
|
+
const issues = parsed.error.issues.map((issue) => {
|
|
50
|
+
const field = issue.path.map(String).join('.') || '(file)';
|
|
51
|
+
return `${path}: ${field === '@type' ? 'missing @type' : `${field}: ${issue.message}`}`;
|
|
52
|
+
});
|
|
53
|
+
throw new KranthoConfigError(issues);
|
|
54
|
+
}
|
|
55
|
+
return parsed.data;
|
|
56
|
+
}
|
|
57
|
+
/** A scope setting file (`_field-mappings`, `_structure`), checked against its schema */
|
|
58
|
+
function parseSetting(path, schema) {
|
|
59
|
+
const parsed = schema.safeParse(parseFile(path));
|
|
60
|
+
if (!parsed.success)
|
|
61
|
+
throw new KranthoConfigError([`${path}: ${parsed.error.message}`]);
|
|
62
|
+
return parsed.data;
|
|
63
|
+
}
|
|
64
|
+
/** A scope directory: its entity files, `_field-mappings` and `_structure` */
|
|
65
|
+
function readScope(dir) {
|
|
66
|
+
const entities = [];
|
|
67
|
+
let fieldMappings;
|
|
68
|
+
let structure;
|
|
69
|
+
for (const file of definitionFiles(dir)) {
|
|
70
|
+
const name = basename(file, extname(file));
|
|
71
|
+
const path = join(dir, file);
|
|
72
|
+
if (name === '_field-mappings') {
|
|
73
|
+
fieldMappings = parseSetting(path, seoScopeSchema.shape.fieldMappings);
|
|
74
|
+
}
|
|
75
|
+
else if (name === '_structure') {
|
|
76
|
+
structure = parseSetting(path, seoScopeSchema.shape.structure);
|
|
77
|
+
}
|
|
78
|
+
else if (!name.startsWith('_')) {
|
|
79
|
+
entities.push(parseEntity(path));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
entities,
|
|
84
|
+
...(fieldMappings ? { fieldMappings } : {}),
|
|
85
|
+
...(structure ? { structure } : {}),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Each subdirectory of `dir` as a scope, keyed by its name */
|
|
89
|
+
function readScopes(dir) {
|
|
90
|
+
if (!isDirectory(dir))
|
|
91
|
+
return {};
|
|
92
|
+
const scopes = {};
|
|
93
|
+
for (const name of readdirSync(dir).sort()) {
|
|
94
|
+
if (isDirectory(join(dir, name)))
|
|
95
|
+
scopes[name] = readScope(join(dir, name));
|
|
96
|
+
}
|
|
97
|
+
return scopes;
|
|
98
|
+
}
|
|
99
|
+
/** `routes/{slug-encoded}.yaml`, keyed by URL pattern */
|
|
100
|
+
function readRoutes(dir) {
|
|
101
|
+
if (!isDirectory(dir))
|
|
102
|
+
return {};
|
|
103
|
+
const routes = {};
|
|
104
|
+
for (const file of definitionFiles(dir)) {
|
|
105
|
+
routes[decodeRouteSlug(basename(file, extname(file)))] = {
|
|
106
|
+
entities: [parseEntity(join(dir, file))],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return routes;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Read a directory of SEO definition files. A missing directory, or a
|
|
113
|
+
* missing scope directory in it, defines nothing; a file that does not parse
|
|
114
|
+
* or lacks a `@type` throws a {@link KranthoConfigError} naming it.
|
|
115
|
+
*/
|
|
116
|
+
export function readSeoDefinitions(dir) {
|
|
117
|
+
const siteDir = join(dir, 'site');
|
|
118
|
+
return {
|
|
119
|
+
site: isDirectory(siteDir) ? readScope(siteDir) : null,
|
|
120
|
+
collections: readScopes(join(dir, 'collections')),
|
|
121
|
+
routes: readRoutes(join(dir, 'routes')),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=seo-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-definitions.js","sourceRoot":"","sources":["../../src/node/seo-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Plain object check — arrays, null and class instances are not plain */
|
|
2
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
3
|
+
/** Read a dotted path out of a nested object */
|
|
4
|
+
export declare function getPath(target: unknown, path: string): unknown;
|
|
5
|
+
/** Write a dotted path into a nested object, creating intermediate objects */
|
|
6
|
+
export declare function setPath(target: Record<string, unknown>, path: string, value: unknown): void;
|
|
7
|
+
/**
|
|
8
|
+
* Merge `overlay` onto `base`, recursing into plain objects.
|
|
9
|
+
* Arrays replace wholesale and `undefined` never overwrites.
|
|
10
|
+
*/
|
|
11
|
+
export declare function deepMerge<T>(base: T, overlay: unknown): T;
|
|
12
|
+
/**
|
|
13
|
+
* Dotted paths of every value in `target` that is not a plain object.
|
|
14
|
+
* `stopAt` paths are reported whole rather than descended into.
|
|
15
|
+
*/
|
|
16
|
+
export declare function leafPaths(target: unknown, stopAt: ReadonlySet<string>, prefix?: string): string[];
|
|
17
|
+
//# sourceMappingURL=object-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-path.d.ts","sourceRoot":"","sources":["../src/object-path.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAgB3F;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAUzD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,SAAK,GAAG,MAAM,EAAE,CAc7F"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Plain object check — arrays, null and class instances are not plain */
|
|
2
|
+
export function isPlainObject(value) {
|
|
3
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
4
|
+
return false;
|
|
5
|
+
const proto = Object.getPrototypeOf(value);
|
|
6
|
+
return proto === Object.prototype || proto === null;
|
|
7
|
+
}
|
|
8
|
+
/** Read a dotted path out of a nested object */
|
|
9
|
+
export function getPath(target, path) {
|
|
10
|
+
let current = target;
|
|
11
|
+
for (const segment of path.split('.')) {
|
|
12
|
+
if (!isPlainObject(current))
|
|
13
|
+
return undefined;
|
|
14
|
+
current = current[segment];
|
|
15
|
+
}
|
|
16
|
+
return current;
|
|
17
|
+
}
|
|
18
|
+
/** Write a dotted path into a nested object, creating intermediate objects */
|
|
19
|
+
export function setPath(target, path, value) {
|
|
20
|
+
const segments = path.split('.');
|
|
21
|
+
const last = segments.pop();
|
|
22
|
+
if (last === undefined)
|
|
23
|
+
return;
|
|
24
|
+
let current = target;
|
|
25
|
+
for (const segment of segments) {
|
|
26
|
+
const next = current[segment];
|
|
27
|
+
if (!isPlainObject(next)) {
|
|
28
|
+
const created = {};
|
|
29
|
+
current[segment] = created;
|
|
30
|
+
current = created;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
current = next;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
current[last] = value;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Merge `overlay` onto `base`, recursing into plain objects.
|
|
40
|
+
* Arrays replace wholesale and `undefined` never overwrites.
|
|
41
|
+
*/
|
|
42
|
+
export function deepMerge(base, overlay) {
|
|
43
|
+
if (overlay === undefined)
|
|
44
|
+
return base;
|
|
45
|
+
if (!isPlainObject(base) || !isPlainObject(overlay))
|
|
46
|
+
return overlay;
|
|
47
|
+
const merged = { ...base };
|
|
48
|
+
for (const [key, value] of Object.entries(overlay)) {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
continue;
|
|
51
|
+
merged[key] = deepMerge(merged[key], value);
|
|
52
|
+
}
|
|
53
|
+
return merged;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Dotted paths of every value in `target` that is not a plain object.
|
|
57
|
+
* `stopAt` paths are reported whole rather than descended into.
|
|
58
|
+
*/
|
|
59
|
+
export function leafPaths(target, stopAt, prefix = '') {
|
|
60
|
+
if (!isPlainObject(target))
|
|
61
|
+
return prefix ? [prefix] : [];
|
|
62
|
+
const paths = [];
|
|
63
|
+
for (const [key, value] of Object.entries(target)) {
|
|
64
|
+
if (value === undefined)
|
|
65
|
+
continue;
|
|
66
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
67
|
+
if (stopAt.has(path) || !isPlainObject(value)) {
|
|
68
|
+
paths.push(path);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
paths.push(...leafPaths(value, stopAt, path));
|
|
72
|
+
}
|
|
73
|
+
return paths;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=object-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-path.js","sourceRoot":"","sources":["../src/object-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { KranthoConfigTree } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Settings that start fine but are unsafe once the site serves real traffic.
|
|
4
|
+
*
|
|
5
|
+
* Advisory only: the server logs each one at startup and keeps going, so the
|
|
6
|
+
* operator decides whether to enforce them. Returns nothing outside production.
|
|
7
|
+
*/
|
|
8
|
+
export declare function productionWarnings(config: KranthoConfigTree, nodeEnv: string | undefined): string[];
|
|
9
|
+
//# sourceMappingURL=production.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.d.ts","sourceRoot":"","sources":["../src/production.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,EAAE,CAsBV"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings that start fine but are unsafe once the site serves real traffic.
|
|
3
|
+
*
|
|
4
|
+
* Advisory only: the server logs each one at startup and keeps going, so the
|
|
5
|
+
* operator decides whether to enforce them. Returns nothing outside production.
|
|
6
|
+
*/
|
|
7
|
+
export function productionWarnings(config, nodeEnv) {
|
|
8
|
+
if (nodeEnv !== 'production')
|
|
9
|
+
return [];
|
|
10
|
+
const warnings = [];
|
|
11
|
+
if (config.auth.mode === 'none') {
|
|
12
|
+
warnings.push('auth.mode is "none" in production: every visitor is an admin with full write access. Set KRANTHO_AUTH to "oidc" or "token".');
|
|
13
|
+
}
|
|
14
|
+
else if (!config.auth.jwtSecret) {
|
|
15
|
+
warnings.push('auth.jwtSecret is unset in production: each instance signs sessions with its own ephemeral key, so sign-ins fail across instances and restarts. Set KRANTHO_JWT_SECRET to a random value of at least 32 bytes.');
|
|
16
|
+
}
|
|
17
|
+
if (config.assistant.enabled && config.auth.mode === 'none') {
|
|
18
|
+
warnings.push('assistant.enabled with auth.mode "none" in production: every visitor can drive the assistant on the site\'s LLM credential. Set KRANTHO_AUTH to "oidc" or "token".');
|
|
19
|
+
}
|
|
20
|
+
return warnings;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=production.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.js","sourceRoot":"","sources":["../src/production.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAyB,EACzB,OAA2B;IAE3B,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,EAAE,CAAA;IAEvC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CACX,6HAA6H,CAC9H,CAAA;IACH,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CACX,gNAAgN,CACjN,CAAA;IACH,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CACX,oKAAoK,CACrK,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
package/dist/public.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser-safe half of the package, published as `@krantho/config/public`.
|
|
3
|
+
*
|
|
4
|
+
* Nothing here — or in anything it imports — may reach for a Node built-in, so
|
|
5
|
+
* a client bundle can import it without pulling in the resolver.
|
|
6
|
+
*/
|
|
7
|
+
import type { KranthoConfig, KranthoConfigTree, PageCacheStrategy, SharedCacheStrategy } from './types.js';
|
|
8
|
+
/** Placeholder written where a secret's value would be */
|
|
9
|
+
export declare const REDACTED = "[redacted]";
|
|
10
|
+
/**
|
|
11
|
+
* The only configuration a browser may see.
|
|
12
|
+
*
|
|
13
|
+
* Built by naming each field, so a leaf added to the tree can never reach a
|
|
14
|
+
* page by accident — least of all a secret one.
|
|
15
|
+
*/
|
|
16
|
+
export interface PublicConfig {
|
|
17
|
+
site: {
|
|
18
|
+
domain: string;
|
|
19
|
+
name: string;
|
|
20
|
+
language: string;
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
supportedLocales: string[];
|
|
23
|
+
defaultLocale: string;
|
|
24
|
+
logo?: string | undefined;
|
|
25
|
+
description?: string | undefined;
|
|
26
|
+
alternateName?: string | undefined;
|
|
27
|
+
sameAs: string[];
|
|
28
|
+
};
|
|
29
|
+
seo: {
|
|
30
|
+
/** Editorial limits every SEO check shares: Studio's editor, score and previews, and the API */
|
|
31
|
+
limits: {
|
|
32
|
+
metaDescription: {
|
|
33
|
+
minChars: number;
|
|
34
|
+
maxChars: number;
|
|
35
|
+
};
|
|
36
|
+
title: {
|
|
37
|
+
maxChars: number;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/** Reader profiles findings are reported for */
|
|
41
|
+
readers: string[];
|
|
42
|
+
};
|
|
43
|
+
/** How the site caches rendered pages: the strategy, and whether its instances share the cache */
|
|
44
|
+
cache: {
|
|
45
|
+
pages: PageCacheStrategy;
|
|
46
|
+
shared: SharedCacheStrategy;
|
|
47
|
+
};
|
|
48
|
+
features: {
|
|
49
|
+
media: boolean;
|
|
50
|
+
localization: boolean;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Project the resolved tree down to what is safe to serialize into a page */
|
|
54
|
+
export declare function toPublicConfig(config: KranthoConfigTree): PublicConfig;
|
|
55
|
+
/**
|
|
56
|
+
* The whole tree with every secret replaced by {@link REDACTED} and the
|
|
57
|
+
* resolution metadata dropped — safe to log or to return to an authenticated
|
|
58
|
+
* operator, never to an anonymous browser.
|
|
59
|
+
*/
|
|
60
|
+
export declare function redact(config: KranthoConfig | KranthoConfigTree): Record<string, unknown>;
|
|
61
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,YAAY,CAAA;AAEnB,0DAA0D;AAC1D,eAAO,MAAM,QAAQ,eAAe,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,gBAAgB,EAAE,MAAM,EAAE,CAAA;QAC1B,aAAa,EAAE,MAAM,CAAA;QACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC,MAAM,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IACD,GAAG,EAAE;QACH,gGAAgG;QAChG,MAAM,EAAE;YACN,eAAe,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;YACvD,KAAK,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAC5B,CAAA;QACD,gDAAgD;QAChD,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,kGAAkG;IAClG,KAAK,EAAE;QACL,KAAK,EAAE,iBAAiB,CAAA;QACxB,MAAM,EAAE,mBAAmB,CAAA;KAC5B,CAAA;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO,CAAA;QACd,YAAY,EAAE,OAAO,CAAA;KACtB,CAAA;CACF;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,YAAY,CAiCtE;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazF"}
|