@conradsix/c4m-schema 0.0.0-stage → 0.1.0-preview.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/README.md +14 -2
- package/dist/defineBlock.d.ts +25 -0
- package/dist/defineBlock.d.ts.map +1 -0
- package/dist/defineBlock.js +71 -0
- package/dist/defineBlock.js.map +1 -0
- package/dist/defineCatalogue.d.ts +42 -0
- package/dist/defineCatalogue.d.ts.map +1 -0
- package/dist/defineCatalogue.js +52 -0
- package/dist/defineCatalogue.js.map +1 -0
- package/dist/descriptor.d.ts +8 -0
- package/dist/descriptor.d.ts.map +1 -0
- package/dist/descriptor.js +2 -0
- package/dist/descriptor.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/isJsonEqual.d.ts +3 -0
- package/dist/isJsonEqual.d.ts.map +1 -0
- package/dist/isJsonEqual.js +26 -0
- package/dist/isJsonEqual.js.map +1 -0
- package/dist/markdownPageRef.d.ts +5 -0
- package/dist/markdownPageRef.d.ts.map +1 -0
- package/dist/markdownPageRef.js +28 -0
- package/dist/markdownPageRef.js.map +1 -0
- package/dist/menuActions.d.ts +61 -0
- package/dist/menuActions.d.ts.map +1 -0
- package/dist/menuActions.js +32 -0
- package/dist/menuActions.js.map +1 -0
- package/dist/pageSeo.d.ts +19 -0
- package/dist/pageSeo.d.ts.map +1 -0
- package/dist/pageSeo.js +18 -0
- package/dist/pageSeo.js.map +1 -0
- package/dist/references.d.ts +22 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +12 -0
- package/dist/references.js.map +1 -0
- package/dist/syncSchemas.d.ts +28 -0
- package/dist/syncSchemas.d.ts.map +1 -0
- package/dist/syncSchemas.js +50 -0
- package/dist/syncSchemas.js.map +1 -0
- package/package.json +45 -3
- package/src/defineBlock.ts +153 -0
- package/src/defineCatalogue.ts +118 -0
- package/src/descriptor.ts +10 -0
- package/src/index.ts +24 -0
- package/src/isJsonEqual.ts +26 -0
- package/src/markdownPageRef.ts +30 -0
- package/src/menuActions.ts +50 -0
- package/src/pageSeo.ts +23 -0
- package/src/references.ts +21 -0
- package/src/syncSchemas.ts +84 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Brian Tyler
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @conradsix/c4m-schema
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Block and menu action schemas for [C4M](https://github.com/conradsix/c4m), defined with zod 4, with every version a
|
|
4
|
+
type has had and the steps that upgrade stored data to the latest.
|
|
5
|
+
|
|
6
|
+
```ts
|
|
7
|
+
import { defineBlock, defineCatalogue, syncSchemas } from "@conradsix/c4m-schema";
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
- `defineBlock` and `defineCatalogue` declare block types and their versions.
|
|
11
|
+
- `syncSchemas` registers the versions the engine lacks and checks the rest are unchanged.
|
|
12
|
+
- `ImageRefSchema`, `PageRefSchema`, the `page-ref:` markdown link helpers, the page SEO limits and the standard menu
|
|
13
|
+
actions are the engine's own contracts.
|
|
14
|
+
|
|
15
|
+
ESM only, with `zod` 4 as a peer dependency. See the [C4M README](https://github.com/conradsix/c4m#block-schemas).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
type VersionedSchema = z.ZodObject;
|
|
3
|
+
type Upgrade<TFrom extends VersionedSchema, TTo extends VersionedSchema> = (block: z.output<TFrom>) => z.input<TTo>;
|
|
4
|
+
type BlockDefinition<TName extends string, TSchemas extends readonly VersionedSchema[], TLatest extends VersionedSchema> = {
|
|
5
|
+
readonly name: TName;
|
|
6
|
+
readonly schemas: TSchemas;
|
|
7
|
+
readonly latest: TLatest;
|
|
8
|
+
upgrade(block: z.output<TSchemas[number]>): z.output<TLatest>;
|
|
9
|
+
version<TNext extends VersionedSchema>(schema: TNext): NextVersion<TName, TSchemas, TLatest, TNext>;
|
|
10
|
+
};
|
|
11
|
+
type NextVersion<TName extends string, TSchemas extends readonly VersionedSchema[], TLatest extends VersionedSchema, TNext extends VersionedSchema> = {
|
|
12
|
+
from(upgrade: Upgrade<TLatest, TNext>): BlockDefinition<TName, readonly [...TSchemas, TNext], TNext>;
|
|
13
|
+
};
|
|
14
|
+
type Legacy<TVersions extends readonly VersionedSchema[]> = {
|
|
15
|
+
readonly versions: TVersions;
|
|
16
|
+
readonly upgrade: (block: z.output<TVersions[number]>) => object;
|
|
17
|
+
};
|
|
18
|
+
declare const versionOf: (name: string, schema: VersionedSchema) => number;
|
|
19
|
+
declare const defineBlock: <TName extends string, TBaseline extends VersionedSchema, const TLegacy extends readonly VersionedSchema[] = readonly []>(name: TName, definition: {
|
|
20
|
+
readonly baseline: TBaseline;
|
|
21
|
+
readonly legacy?: Legacy<TLegacy>;
|
|
22
|
+
}) => BlockDefinition<TName, readonly [...TLegacy, TBaseline], TBaseline>;
|
|
23
|
+
export { defineBlock, versionOf };
|
|
24
|
+
export type { BlockDefinition, Upgrade, VersionedSchema };
|
|
25
|
+
//# sourceMappingURL=defineBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineBlock.d.ts","sourceRoot":"","sources":["../src/defineBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,KAAK,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC;AAGnC,KAAK,OAAO,CAAC,KAAK,SAAS,eAAe,EAAE,GAAG,SAAS,eAAe,IAAI,CACzE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KACnB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAElB,KAAK,eAAe,CAClB,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,SAAS,eAAe,EAAE,EAC3C,OAAO,SAAS,eAAe,IAC7B;IACF,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAErB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGzB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE9D,OAAO,CAAC,KAAK,SAAS,eAAe,EACnC,MAAM,EAAE,KAAK,GACZ,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;CACjD,CAAC;AAEF,KAAK,WAAW,CACd,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,SAAS,eAAe,EAAE,EAC3C,OAAO,SAAS,eAAe,EAC/B,KAAK,SAAS,eAAe,IAC3B;IACF,IAAI,CACF,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAC/B,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;CACjE,CAAC;AAEF,KAAK,MAAM,CAAC,SAAS,SAAS,SAAS,eAAe,EAAE,IAAI;IAE1D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAG7B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC;CAClE,CAAC;AAoBF,QAAA,MAAM,SAAS,SAAU,MAAM,UAAU,eAAe,KAAG,MAO1D,CAAC;AAuDF,QAAA,MAAM,WAAW,GACf,KAAK,SAAS,MAAM,EACpB,SAAS,SAAS,eAAe,EACjC,KAAK,CAAC,OAAO,SAAS,SAAS,eAAe,EAAE,GAAG,SAAS,EAAE,QAExD,KAAK,cACC;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;CAAE,KAC9E,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CAcpE,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const literalOf = (schema, key) => {
|
|
3
|
+
const field = schema.shape[key];
|
|
4
|
+
return field instanceof z.ZodLiteral && field.values.size === 1
|
|
5
|
+
? [...field.values][0]
|
|
6
|
+
: undefined;
|
|
7
|
+
};
|
|
8
|
+
const versionOf = (name, schema) => {
|
|
9
|
+
const version = literalOf(schema, "__version");
|
|
10
|
+
if (literalOf(schema, "__typename") !== name || typeof version !== "number")
|
|
11
|
+
throw new Error(`Every ${name} schema needs the literals __typename "${name}" and a __version number`);
|
|
12
|
+
return version;
|
|
13
|
+
};
|
|
14
|
+
const itemAt = (items, index, name) => {
|
|
15
|
+
const item = items[index];
|
|
16
|
+
if (item === undefined)
|
|
17
|
+
throw new Error(`${name} has no version ${index + 1}`);
|
|
18
|
+
return item;
|
|
19
|
+
};
|
|
20
|
+
const upgradeChain = (chain, block) => {
|
|
21
|
+
const latest = chain.schemas.length;
|
|
22
|
+
let version = block.__version;
|
|
23
|
+
if (!Number.isInteger(version) || version < 1 || version > latest)
|
|
24
|
+
throw new Error(`${chain.name} has no version ${String(version)}`);
|
|
25
|
+
let data = block;
|
|
26
|
+
if (version < chain.baseline) {
|
|
27
|
+
if (!chain.legacy)
|
|
28
|
+
throw new Error(`${chain.name} has no legacy upgrade`);
|
|
29
|
+
data = { ...chain.legacy(data), __version: chain.baseline };
|
|
30
|
+
version = chain.baseline;
|
|
31
|
+
}
|
|
32
|
+
for (; version < latest; version++) {
|
|
33
|
+
const step = itemAt(chain.steps, version - chain.baseline, chain.name);
|
|
34
|
+
data = itemAt(chain.schemas, version, chain.name).parse(step(data));
|
|
35
|
+
}
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
const build = (chain) => ({
|
|
39
|
+
name: chain.name,
|
|
40
|
+
schemas: chain.schemas,
|
|
41
|
+
latest: itemAt(chain.schemas, chain.schemas.length - 1, chain.name),
|
|
42
|
+
upgrade: (block) => upgradeChain(chain, structuredClone(block)),
|
|
43
|
+
version: (schema) => {
|
|
44
|
+
if (versionOf(chain.name, schema) !== chain.schemas.length + 1)
|
|
45
|
+
throw new Error(`The next ${chain.name} version is ${chain.schemas.length + 1}`);
|
|
46
|
+
return {
|
|
47
|
+
from: (upgrade) => build({
|
|
48
|
+
...chain,
|
|
49
|
+
schemas: [...chain.schemas, schema],
|
|
50
|
+
steps: [...chain.steps, upgrade],
|
|
51
|
+
}),
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
// A block type and every version it has had. Versions from before the baseline upgrade to it through the legacy
|
|
56
|
+
// upgrade; each version added after it brings its own step.
|
|
57
|
+
const defineBlock = (name, definition) => {
|
|
58
|
+
const schemas = [...(definition.legacy?.versions ?? []), definition.baseline];
|
|
59
|
+
for (const [index, schema] of schemas.entries())
|
|
60
|
+
if (versionOf(name, schema) !== index + 1)
|
|
61
|
+
throw new Error(`${name} versions must run from 1 without gaps; version ${index + 1} is missing`);
|
|
62
|
+
return build({
|
|
63
|
+
name,
|
|
64
|
+
schemas,
|
|
65
|
+
baseline: schemas.length,
|
|
66
|
+
legacy: definition.legacy?.upgrade,
|
|
67
|
+
steps: [],
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
export { defineBlock, versionOf };
|
|
71
|
+
//# sourceMappingURL=defineBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineBlock.js","sourceRoot":"","sources":["../src/defineBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BlockDefinition, VersionedSchema } from "./defineBlock.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
type AnyBlock = BlockDefinition<string, readonly VersionedSchema[], VersionedSchema>;
|
|
4
|
+
type VersionOf<TSchema> = TSchema extends VersionedSchema ? z.output<TSchema> extends {
|
|
5
|
+
readonly __version: infer TVersion;
|
|
6
|
+
} ? TVersion : number : never;
|
|
7
|
+
type StoredSchemaOf<TBlocks extends readonly AnyBlock[]> = TBlocks[number]["schemas"][number];
|
|
8
|
+
type LatestSchemas<TBlocks extends readonly AnyBlock[]> = {
|
|
9
|
+
-readonly [K in keyof TBlocks]: TBlocks[K]["latest"];
|
|
10
|
+
};
|
|
11
|
+
type DescriptorsOf<TBlock extends AnyBlock> = {
|
|
12
|
+
[K in keyof TBlock["schemas"]]: {
|
|
13
|
+
readonly name: TBlock["name"];
|
|
14
|
+
readonly version: VersionOf<TBlock["schemas"][K]>;
|
|
15
|
+
readonly schema: TBlock["schemas"][K];
|
|
16
|
+
};
|
|
17
|
+
}[number];
|
|
18
|
+
type CurrentDescriptors<TBlocks extends readonly AnyBlock[]> = {
|
|
19
|
+
readonly [K in keyof TBlocks]: {
|
|
20
|
+
readonly name: TBlocks[K]["name"];
|
|
21
|
+
readonly version: VersionOf<TBlocks[K]["latest"]>;
|
|
22
|
+
readonly schema: TBlocks[K]["latest"];
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
type StoredUnion<TBlocks extends readonly AnyBlock[]> = z.ZodUnion<StoredSchemaOf<TBlocks>[]>;
|
|
26
|
+
type CurrentUnion<TBlocks extends readonly AnyBlock[]> = z.ZodUnion<LatestSchemas<TBlocks>>;
|
|
27
|
+
type BlockCatalogue<TBlocks extends readonly AnyBlock[]> = {
|
|
28
|
+
readonly blocks: TBlocks;
|
|
29
|
+
readonly descriptors: readonly DescriptorsOf<TBlocks[number]>[];
|
|
30
|
+
readonly current: CurrentDescriptors<TBlocks>;
|
|
31
|
+
readonly Stored: StoredUnion<TBlocks>;
|
|
32
|
+
readonly Current: CurrentUnion<TBlocks>;
|
|
33
|
+
readonly Block: z.ZodPipe<StoredUnion<TBlocks>, z.ZodTransform<z.output<CurrentUnion<TBlocks>>, z.output<StoredUnion<TBlocks>>>>;
|
|
34
|
+
readonly upgrade: (block: {
|
|
35
|
+
readonly __typename: string;
|
|
36
|
+
readonly __version: number;
|
|
37
|
+
}) => z.output<CurrentUnion<TBlocks>>;
|
|
38
|
+
};
|
|
39
|
+
declare const defineCatalogue: <const TBlocks extends readonly AnyBlock[]>(blocks: TBlocks) => BlockCatalogue<TBlocks>;
|
|
40
|
+
export { defineCatalogue };
|
|
41
|
+
export type { BlockCatalogue };
|
|
42
|
+
//# sourceMappingURL=defineCatalogue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineCatalogue.d.ts","sourceRoot":"","sources":["../src/defineCatalogue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { versionOf } from "./defineBlock.js";
|
|
3
|
+
// The blocks a host stores. Each block's name may appear once.
|
|
4
|
+
const defineCatalogue = (blocks) => {
|
|
5
|
+
const byName = new Map();
|
|
6
|
+
for (const block of blocks) {
|
|
7
|
+
if (byName.has(block.name))
|
|
8
|
+
throw new Error(`The catalogue has ${block.name} twice`);
|
|
9
|
+
byName.set(block.name, block);
|
|
10
|
+
}
|
|
11
|
+
const descriptors = blocks.flatMap((block) => block.schemas.map((schema) => ({
|
|
12
|
+
name: block.name,
|
|
13
|
+
version: versionOf(block.name, schema),
|
|
14
|
+
schema,
|
|
15
|
+
})));
|
|
16
|
+
const current = blocks.map((block) => ({
|
|
17
|
+
name: block.name,
|
|
18
|
+
version: versionOf(block.name, block.latest),
|
|
19
|
+
schema: block.latest,
|
|
20
|
+
}));
|
|
21
|
+
const Stored = z.union(descriptors.map((descriptor) => descriptor.schema));
|
|
22
|
+
const Current = z.union(blocks.map((block) => block.latest));
|
|
23
|
+
const upgrade = (block) => {
|
|
24
|
+
const definition = byName.get(block.__typename);
|
|
25
|
+
if (!definition)
|
|
26
|
+
throw new Error(`Unknown block ${block.__typename}`);
|
|
27
|
+
return definition.upgrade(block);
|
|
28
|
+
};
|
|
29
|
+
const Block = Stored.transform((block, ctx) => {
|
|
30
|
+
try {
|
|
31
|
+
return upgrade(block);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (!(error instanceof z.ZodError))
|
|
35
|
+
throw error;
|
|
36
|
+
for (const issue of error.issues)
|
|
37
|
+
ctx.issues.push({ code: "custom", message: issue.message, path: issue.path, input: block });
|
|
38
|
+
return z.NEVER;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
blocks,
|
|
43
|
+
descriptors,
|
|
44
|
+
current,
|
|
45
|
+
Stored,
|
|
46
|
+
Current,
|
|
47
|
+
Block,
|
|
48
|
+
upgrade,
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export { defineCatalogue };
|
|
52
|
+
//# sourceMappingURL=defineCatalogue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineCatalogue.js","sourceRoot":"","sources":["../src/defineCatalogue.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA0D7C,+DAA+D;AAC/D,MAAM,eAAe,GAAG,CACtB,MAAe,EACU,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC;QACrF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAA0B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAClE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QACtC,MAAM;KACP,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,CAAC,KAAkE,EAAW,EAAE;QAC9F,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,KAAoE,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAC;YAChD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;gBAC9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,WAAW;QACX,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK;QACL,OAAO;KAC8B,CAAC;AAC1C,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;CAC9B,CAAC;AAEF,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { defineBlock } from "./defineBlock.js";
|
|
2
|
+
export { defineCatalogue } from "./defineCatalogue.js";
|
|
3
|
+
export { extractMarkdownPageRefIds, fromMarkdownPageRefHref, toMarkdownPageRefHref, } from "./markdownPageRef.js";
|
|
4
|
+
export { defineMenuAction, EmptyActionV1Schema, ExternalLinkActionV1Schema, PageLinkActionV1Schema, standardMenuActions, } from "./menuActions.js";
|
|
5
|
+
export { PageSeoInputSchema, PublishablePageSeoSchema } from "./pageSeo.js";
|
|
6
|
+
export { ImageRefSchema, PageRefSchema, ResourceRefSchema } from "./references.js";
|
|
7
|
+
export { syncSchemas } from "./syncSchemas.js";
|
|
8
|
+
export type { BlockDefinition, Upgrade, VersionedSchema } from "./defineBlock.js";
|
|
9
|
+
export type { BlockCatalogue } from "./defineCatalogue.js";
|
|
10
|
+
export type { CmsSchemaDescriptor } from "./descriptor.js";
|
|
11
|
+
export type { EmptyActionV1, ExternalLinkActionV1, PageLinkActionV1 } from "./menuActions.js";
|
|
12
|
+
export type { PageSeoInput } from "./pageSeo.js";
|
|
13
|
+
export type { ImageRef, PageRef, ResourceRef } from "./references.js";
|
|
14
|
+
export type { RegisteredSchema, SchemaRegistry, SyncResult } from "./syncSchemas.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { defineBlock } from "./defineBlock.js";
|
|
2
|
+
export { defineCatalogue } from "./defineCatalogue.js";
|
|
3
|
+
export { extractMarkdownPageRefIds, fromMarkdownPageRefHref, toMarkdownPageRefHref, } from "./markdownPageRef.js";
|
|
4
|
+
export { defineMenuAction, EmptyActionV1Schema, ExternalLinkActionV1Schema, PageLinkActionV1Schema, standardMenuActions, } from "./menuActions.js";
|
|
5
|
+
export { PageSeoInputSchema, PublishablePageSeoSchema } from "./pageSeo.js";
|
|
6
|
+
export { ImageRefSchema, PageRefSchema, ResourceRefSchema } from "./references.js";
|
|
7
|
+
export { syncSchemas } from "./syncSchemas.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isJsonEqual.d.ts","sourceRoot":"","sources":["../src/isJsonEqual.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,WAAW,MAAO,MAAM,KAAK,MAAM,KAAG,OAQ3C,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const sortKeys = (value) => {
|
|
2
|
+
if (Array.isArray(value)) {
|
|
3
|
+
return value.map(sortKeys);
|
|
4
|
+
}
|
|
5
|
+
if (value !== null && typeof value === "object") {
|
|
6
|
+
return Object.keys(value)
|
|
7
|
+
.sort()
|
|
8
|
+
.reduce((acc, key) => {
|
|
9
|
+
acc[key] = sortKeys(value[key]);
|
|
10
|
+
return acc;
|
|
11
|
+
}, {});
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
};
|
|
15
|
+
const isJsonEqual = (a, b) => {
|
|
16
|
+
try {
|
|
17
|
+
const objA = sortKeys(JSON.parse(a));
|
|
18
|
+
const objB = sortKeys(JSON.parse(b));
|
|
19
|
+
return JSON.stringify(objA) === JSON.stringify(objB);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
export { isJsonEqual };
|
|
26
|
+
//# sourceMappingURL=isJsonEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isJsonEqual.js","sourceRoot":"","sources":["../src/isJsonEqual.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACtB,IAAI,EAAE;aACN,MAAM,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare const toMarkdownPageRefHref: (pageId: string) => string;
|
|
2
|
+
declare const fromMarkdownPageRefHref: (href: string) => string | undefined;
|
|
3
|
+
declare const extractMarkdownPageRefIds: (markdown: string) => string[];
|
|
4
|
+
export { extractMarkdownPageRefIds, fromMarkdownPageRefHref, toMarkdownPageRefHref };
|
|
5
|
+
//# sourceMappingURL=markdownPageRef.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownPageRef.d.ts","sourceRoot":"","sources":["../src/markdownPageRef.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,qBAAqB,WAAY,MAAM,KAAG,MAI/C,CAAC;AAEF,QAAA,MAAM,uBAAuB,SAAU,MAAM,KAAG,MAAM,GAAG,SAIxD,CAAC;AAEF,QAAA,MAAM,yBAAyB,aAAc,MAAM,KAAG,MAAM,EAW3D,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PageRefSchema } from "./references.js";
|
|
2
|
+
const MARKDOWN_PAGE_REF_PREFIX = "page-ref:";
|
|
3
|
+
const toMarkdownPageRefHref = (pageId) => {
|
|
4
|
+
const result = PageRefSchema.shape.id.safeParse(pageId);
|
|
5
|
+
if (!result.success)
|
|
6
|
+
throw new Error(`Invalid CMS page ID: ${pageId}`);
|
|
7
|
+
return `${MARKDOWN_PAGE_REF_PREFIX}${result.data}`;
|
|
8
|
+
};
|
|
9
|
+
const fromMarkdownPageRefHref = (href) => {
|
|
10
|
+
if (!href.startsWith(MARKDOWN_PAGE_REF_PREFIX))
|
|
11
|
+
return undefined;
|
|
12
|
+
const result = PageRefSchema.shape.id.safeParse(href.slice(MARKDOWN_PAGE_REF_PREFIX.length));
|
|
13
|
+
return result.success ? result.data : undefined;
|
|
14
|
+
};
|
|
15
|
+
const extractMarkdownPageRefIds = (markdown) => {
|
|
16
|
+
const ids = new Set();
|
|
17
|
+
for (const match of markdown.matchAll(/page-ref:([0-9a-f-]{36})/giu)) {
|
|
18
|
+
const id = match[1];
|
|
19
|
+
if (!id)
|
|
20
|
+
continue;
|
|
21
|
+
const result = PageRefSchema.shape.id.safeParse(id);
|
|
22
|
+
if (result.success)
|
|
23
|
+
ids.add(result.data);
|
|
24
|
+
}
|
|
25
|
+
return [...ids];
|
|
26
|
+
};
|
|
27
|
+
export { extractMarkdownPageRefIds, fromMarkdownPageRefHref, toMarkdownPageRefHref };
|
|
28
|
+
//# sourceMappingURL=markdownPageRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownPageRef.js","sourceRoot":"","sources":["../src/markdownPageRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAE7C,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;IACvE,OAAO,GAAG,wBAAwB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAsB,EAAE;IACnE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;QAAE,OAAO,SAAS,CAAC;IACjE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,QAAgB,EAAY,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,OAAO;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineBlock } from "./defineBlock.js";
|
|
3
|
+
declare const defineMenuAction: typeof defineBlock;
|
|
4
|
+
declare const EmptyActionV1Schema: z.ZodObject<{
|
|
5
|
+
__typename: z.ZodLiteral<"empty">;
|
|
6
|
+
__version: z.ZodLiteral<1>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const PageLinkActionV1Schema: z.ZodObject<{
|
|
9
|
+
__typename: z.ZodLiteral<"page-link">;
|
|
10
|
+
__version: z.ZodLiteral<1>;
|
|
11
|
+
pageRef: z.ZodObject<{
|
|
12
|
+
__typename: z.ZodLiteral<"page-ref">;
|
|
13
|
+
id: z.ZodUUID;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
declare const ExternalLinkActionV1Schema: z.ZodObject<{
|
|
18
|
+
__typename: z.ZodLiteral<"external-link">;
|
|
19
|
+
__version: z.ZodLiteral<1>;
|
|
20
|
+
url: z.ZodURL;
|
|
21
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
declare const standardMenuActions: readonly [import("./defineBlock.js").BlockDefinition<"empty", readonly [z.ZodObject<{
|
|
24
|
+
__typename: z.ZodLiteral<"empty">;
|
|
25
|
+
__version: z.ZodLiteral<1>;
|
|
26
|
+
}, z.core.$strip>], z.ZodObject<{
|
|
27
|
+
__typename: z.ZodLiteral<"empty">;
|
|
28
|
+
__version: z.ZodLiteral<1>;
|
|
29
|
+
}, z.core.$strip>>, import("./defineBlock.js").BlockDefinition<"page-link", readonly [z.ZodObject<{
|
|
30
|
+
__typename: z.ZodLiteral<"page-link">;
|
|
31
|
+
__version: z.ZodLiteral<1>;
|
|
32
|
+
pageRef: z.ZodObject<{
|
|
33
|
+
__typename: z.ZodLiteral<"page-ref">;
|
|
34
|
+
id: z.ZodUUID;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
37
|
+
}, z.core.$strip>], z.ZodObject<{
|
|
38
|
+
__typename: z.ZodLiteral<"page-link">;
|
|
39
|
+
__version: z.ZodLiteral<1>;
|
|
40
|
+
pageRef: z.ZodObject<{
|
|
41
|
+
__typename: z.ZodLiteral<"page-ref">;
|
|
42
|
+
id: z.ZodUUID;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
45
|
+
}, z.core.$strip>>, import("./defineBlock.js").BlockDefinition<"external-link", readonly [z.ZodObject<{
|
|
46
|
+
__typename: z.ZodLiteral<"external-link">;
|
|
47
|
+
__version: z.ZodLiteral<1>;
|
|
48
|
+
url: z.ZodURL;
|
|
49
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
50
|
+
}, z.core.$strip>], z.ZodObject<{
|
|
51
|
+
__typename: z.ZodLiteral<"external-link">;
|
|
52
|
+
__version: z.ZodLiteral<1>;
|
|
53
|
+
url: z.ZodURL;
|
|
54
|
+
openInNewTab: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
55
|
+
}, z.core.$strip>>];
|
|
56
|
+
type EmptyActionV1 = z.infer<typeof EmptyActionV1Schema>;
|
|
57
|
+
type PageLinkActionV1 = z.infer<typeof PageLinkActionV1Schema>;
|
|
58
|
+
type ExternalLinkActionV1 = z.infer<typeof ExternalLinkActionV1Schema>;
|
|
59
|
+
export { defineMenuAction, EmptyActionV1Schema, ExternalLinkActionV1Schema, PageLinkActionV1Schema, standardMenuActions, };
|
|
60
|
+
export type { EmptyActionV1, ExternalLinkActionV1, PageLinkActionV1 };
|
|
61
|
+
//# sourceMappingURL=menuActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuActions.d.ts","sourceRoot":"","sources":["../src/menuActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,QAAA,MAAM,gBAAgB,oBAAc,CAAC;AAGrC,QAAA,MAAM,mBAAmB;;;iBAGvB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;iBAQ1B,CAAC;AAEH,QAAA,MAAM,0BAA0B;;;;;iBAK9B,CAAC;AAGH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAIf,CAAC;AAEX,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACzD,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/D,KAAK,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEvE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,CAAC;AAEF,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineBlock } from "./defineBlock.js";
|
|
3
|
+
// Menu action types version and upgrade as blocks do.
|
|
4
|
+
const defineMenuAction = defineBlock;
|
|
5
|
+
// A menu item that only opens its children. The engine requires it to have some.
|
|
6
|
+
const EmptyActionV1Schema = z.object({
|
|
7
|
+
__typename: z.literal("empty"),
|
|
8
|
+
__version: z.literal(1),
|
|
9
|
+
});
|
|
10
|
+
const PageLinkActionV1Schema = z.object({
|
|
11
|
+
__typename: z.literal("page-link"),
|
|
12
|
+
__version: z.literal(1),
|
|
13
|
+
pageRef: z.object({
|
|
14
|
+
__typename: z.literal("page-ref"),
|
|
15
|
+
id: z.uuid(),
|
|
16
|
+
}),
|
|
17
|
+
openInNewTab: z.boolean().optional().default(false),
|
|
18
|
+
});
|
|
19
|
+
const ExternalLinkActionV1Schema = z.object({
|
|
20
|
+
__typename: z.literal("external-link"),
|
|
21
|
+
__version: z.literal(1),
|
|
22
|
+
url: z.url("Must be a valid URL"),
|
|
23
|
+
openInNewTab: z.boolean().optional().default(true),
|
|
24
|
+
});
|
|
25
|
+
// The menu actions every host has: a heading for children, a link to a page, and a link elsewhere.
|
|
26
|
+
const standardMenuActions = [
|
|
27
|
+
defineMenuAction("empty", { baseline: EmptyActionV1Schema }),
|
|
28
|
+
defineMenuAction("page-link", { baseline: PageLinkActionV1Schema }),
|
|
29
|
+
defineMenuAction("external-link", { baseline: ExternalLinkActionV1Schema }),
|
|
30
|
+
];
|
|
31
|
+
export { defineMenuAction, EmptyActionV1Schema, ExternalLinkActionV1Schema, PageLinkActionV1Schema, standardMenuActions, };
|
|
32
|
+
//# sourceMappingURL=menuActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuActions.js","sourceRoot":"","sources":["../src/menuActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,sDAAsD;AACtD,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACjC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;KACb,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC;AAEH,mGAAmG;AACnG,MAAM,mBAAmB,GAAG;IAC1B,gBAAgB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAC5D,gBAAgB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnE,gBAAgB,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC;CACnE,CAAC;AAMX,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const PageSeoInputSchema: z.ZodObject<{
|
|
3
|
+
title: z.ZodString;
|
|
4
|
+
description: z.ZodString;
|
|
5
|
+
socialImageId: z.ZodNullable<z.ZodUUID>;
|
|
6
|
+
index: z.ZodBoolean;
|
|
7
|
+
follow: z.ZodBoolean;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
declare const PublishablePageSeoSchema: z.ZodObject<{
|
|
10
|
+
socialImageId: z.ZodNullable<z.ZodUUID>;
|
|
11
|
+
index: z.ZodBoolean;
|
|
12
|
+
follow: z.ZodBoolean;
|
|
13
|
+
title: z.ZodString;
|
|
14
|
+
description: z.ZodString;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
type PageSeoInput = z.infer<typeof PageSeoInputSchema>;
|
|
17
|
+
export { PageSeoInputSchema, PublishablePageSeoSchema };
|
|
18
|
+
export type { PageSeoInput };
|
|
19
|
+
//# sourceMappingURL=pageSeo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageSeo.d.ts","sourceRoot":"","sources":["../src/pageSeo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,kBAAkB;;;;;;iBAMtB,CAAC;AAEH,QAAA,MAAM,wBAAwB;;;;;;iBAO5B,CAAC;AAEH,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/pageSeo.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const PageSeoInputSchema = z.object({
|
|
3
|
+
title: z.string().trim().max(60, "Use 60 characters or fewer"),
|
|
4
|
+
description: z.string().trim().max(160, "Use 160 characters or fewer"),
|
|
5
|
+
socialImageId: z.uuid().nullable(),
|
|
6
|
+
index: z.boolean(),
|
|
7
|
+
follow: z.boolean(),
|
|
8
|
+
});
|
|
9
|
+
const PublishablePageSeoSchema = PageSeoInputSchema.extend({
|
|
10
|
+
title: z.string().trim().min(1, "Enter an SEO title").max(60, "Use 60 characters or fewer"),
|
|
11
|
+
description: z
|
|
12
|
+
.string()
|
|
13
|
+
.trim()
|
|
14
|
+
.min(1, "Enter an SEO description")
|
|
15
|
+
.max(160, "Use 160 characters or fewer"),
|
|
16
|
+
});
|
|
17
|
+
export { PageSeoInputSchema, PublishablePageSeoSchema };
|
|
18
|
+
//# sourceMappingURL=pageSeo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageSeo.js","sourceRoot":"","sources":["../src/pageSeo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,6BAA6B,CAAC;IACtE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,CAAC;IAC3F,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,GAAG,CAAC,GAAG,EAAE,6BAA6B,CAAC;CAC3C,CAAC,CAAC;AAIH,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const ImageRefSchema: z.ZodObject<{
|
|
3
|
+
__typename: z.ZodLiteral<"image-ref">;
|
|
4
|
+
id: z.ZodUUID;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
declare const PageRefSchema: z.ZodObject<{
|
|
7
|
+
__typename: z.ZodLiteral<"page-ref">;
|
|
8
|
+
id: z.ZodUUID;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
declare const ResourceRefSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
11
|
+
__typename: z.ZodLiteral<"image-ref">;
|
|
12
|
+
id: z.ZodUUID;
|
|
13
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
14
|
+
__typename: z.ZodLiteral<"page-ref">;
|
|
15
|
+
id: z.ZodUUID;
|
|
16
|
+
}, z.core.$strip>]>;
|
|
17
|
+
type ImageRef = z.infer<typeof ImageRefSchema>;
|
|
18
|
+
type PageRef = z.infer<typeof PageRefSchema>;
|
|
19
|
+
type ResourceRef = z.infer<typeof ResourceRefSchema>;
|
|
20
|
+
export { ImageRefSchema, PageRefSchema, ResourceRefSchema };
|
|
21
|
+
export type { ImageRef, PageRef, ResourceRef };
|
|
22
|
+
//# sourceMappingURL=references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,cAAc;;;iBAGlB,CAAC;AAEH,QAAA,MAAM,aAAa;;;iBAGjB,CAAC;AAEH,QAAA,MAAM,iBAAiB;;;;;;mBAA2C,CAAC;AAEnE,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC/C,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC7C,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;AAE5D,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const ImageRefSchema = z.object({
|
|
3
|
+
__typename: z.literal("image-ref"),
|
|
4
|
+
id: z.uuid(),
|
|
5
|
+
});
|
|
6
|
+
const PageRefSchema = z.object({
|
|
7
|
+
__typename: z.literal("page-ref"),
|
|
8
|
+
id: z.uuid(),
|
|
9
|
+
});
|
|
10
|
+
const ResourceRefSchema = z.union([ImageRefSchema, PageRefSchema]);
|
|
11
|
+
export { ImageRefSchema, PageRefSchema, ResourceRefSchema };
|
|
12
|
+
//# sourceMappingURL=references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;CACb,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;CACb,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;AAMnE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
|