@wp-typia/block-types 0.3.0 → 0.3.2
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/README.md +46 -0
- package/dist/blocks/bindings-codegen.d.ts +13 -0
- package/dist/blocks/bindings-codegen.js +210 -0
- package/dist/blocks/bindings-core.d.ts +116 -0
- package/dist/blocks/bindings-core.js +65 -0
- package/dist/blocks/bindings-diagnostics.d.ts +8 -0
- package/dist/blocks/bindings-diagnostics.js +95 -0
- package/dist/blocks/bindings-manifest.d.ts +12 -0
- package/dist/blocks/bindings-manifest.js +82 -0
- package/dist/blocks/bindings-settings.d.ts +27 -0
- package/dist/blocks/bindings-settings.js +115 -0
- package/dist/blocks/bindings.d.ts +2 -132
- package/dist/blocks/bindings.js +2 -598
- package/dist/blocks/shared/diagnostics.d.ts +13 -0
- package/dist/blocks/shared/diagnostics.js +19 -0
- package/dist/blocks/shared/object-utils.d.ts +2 -0
- package/dist/blocks/shared/object-utils.js +10 -0
- package/dist/blocks/shared/static-registration.d.ts +4 -0
- package/dist/blocks/shared/static-registration.js +32 -0
- package/dist/blocks/supports-diagnostics.d.ts +3 -0
- package/dist/blocks/supports-diagnostics.js +7 -0
- package/dist/blocks/supports-features.d.ts +10 -0
- package/dist/blocks/supports-features.js +53 -0
- package/dist/blocks/supports-manifest.d.ts +4 -0
- package/dist/blocks/supports-manifest.js +97 -0
- package/dist/blocks/supports-settings.d.ts +8 -0
- package/dist/blocks/supports-settings.js +42 -0
- package/dist/blocks/supports.d.ts +8 -14
- package/dist/blocks/supports.js +8 -209
- package/dist/blocks/variations-diagnostics.d.ts +6 -0
- package/dist/blocks/variations-diagnostics.js +123 -0
- package/dist/blocks/variations-manifest.d.ts +5 -0
- package/dist/blocks/variations-manifest.js +17 -0
- package/dist/blocks/variations-settings.d.ts +18 -0
- package/dist/blocks/variations-settings.js +50 -0
- package/dist/blocks/variations.d.ts +6 -3
- package/dist/blocks/variations.js +12 -211
- package/package.json +1 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createWordPressBlockApiCompatibilityManifest, } from "./compatibility.js";
|
|
2
|
+
import { resolveDefineVariationSettings } from "./variations-settings.js";
|
|
3
|
+
export function collectBlockVariationCompatibilityFeatures() {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
area: "blockVariations",
|
|
7
|
+
feature: "editorRegistration",
|
|
8
|
+
},
|
|
9
|
+
];
|
|
10
|
+
}
|
|
11
|
+
export function createBlockVariationCompatibilityManifest(settings = {}) {
|
|
12
|
+
const resolved = resolveDefineVariationSettings({}, settings);
|
|
13
|
+
return createBlockVariationCompatibilityManifestFromSettings(resolved.compatibility);
|
|
14
|
+
}
|
|
15
|
+
export function createBlockVariationCompatibilityManifestFromSettings(settings) {
|
|
16
|
+
return createWordPressBlockApiCompatibilityManifest(collectBlockVariationCompatibilityFeatures(), settings);
|
|
17
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WordPressCompatibilitySettings } from "./compatibility.js";
|
|
2
|
+
import type { BlockAttributes } from "./registration.js";
|
|
3
|
+
import type { BlockVariationDefinition, DefineVariationInlineOptions, DefineVariationOptions, StripDefineVariationOptions } from "./variations.js";
|
|
4
|
+
export interface ResolvedDefineVariationSettings {
|
|
5
|
+
readonly compatibility: WordPressCompatibilitySettings;
|
|
6
|
+
readonly diagnostics: {
|
|
7
|
+
readonly allowMissingIsActive: boolean;
|
|
8
|
+
readonly requireIsActive: boolean;
|
|
9
|
+
readonly strict: boolean;
|
|
10
|
+
};
|
|
11
|
+
readonly logger: DefineVariationOptions["logger"];
|
|
12
|
+
readonly onDiagnostic: DefineVariationOptions["onDiagnostic"];
|
|
13
|
+
}
|
|
14
|
+
export declare function splitDefineVariationInput<TAttributes extends BlockAttributes, TVariation extends BlockVariationDefinition<TAttributes> & DefineVariationInlineOptions>(variation: TVariation): {
|
|
15
|
+
inlineOptions: DefineVariationInlineOptions;
|
|
16
|
+
variation: StripDefineVariationOptions<TVariation> & BlockVariationDefinition<TAttributes>;
|
|
17
|
+
};
|
|
18
|
+
export declare function resolveDefineVariationSettings(inlineOptions: DefineVariationInlineOptions, options: DefineVariationOptions): ResolvedDefineVariationSettings;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const DEFINE_VARIATION_INLINE_OPTION_KEYS = new Set([
|
|
2
|
+
"allowMissingIsActive",
|
|
3
|
+
"logger",
|
|
4
|
+
"minVersion",
|
|
5
|
+
"minWordPress",
|
|
6
|
+
"onDiagnostic",
|
|
7
|
+
"requireIsActive",
|
|
8
|
+
"strict",
|
|
9
|
+
]);
|
|
10
|
+
export function splitDefineVariationInput(variation) {
|
|
11
|
+
const inlineOptions = {};
|
|
12
|
+
const normalizedVariation = {};
|
|
13
|
+
for (const [key, value] of Object.entries(variation)) {
|
|
14
|
+
if (DEFINE_VARIATION_INLINE_OPTION_KEYS.has(key)) {
|
|
15
|
+
Object.assign(inlineOptions, { [key]: value });
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
normalizedVariation[key] = value;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
inlineOptions,
|
|
22
|
+
variation: normalizedVariation,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function resolveDefineVariationSettings(inlineOptions, options) {
|
|
26
|
+
const compatibility = {};
|
|
27
|
+
const allowUnknownFutureKeys = options.allowUnknownFutureKeys;
|
|
28
|
+
const minVersion = options.minVersion ??
|
|
29
|
+
options.minWordPress ??
|
|
30
|
+
inlineOptions.minVersion ??
|
|
31
|
+
inlineOptions.minWordPress;
|
|
32
|
+
const strict = options.strict ?? inlineOptions.strict ?? true;
|
|
33
|
+
if (allowUnknownFutureKeys !== undefined) {
|
|
34
|
+
Object.assign(compatibility, { allowUnknownFutureKeys });
|
|
35
|
+
}
|
|
36
|
+
if (minVersion !== undefined) {
|
|
37
|
+
Object.assign(compatibility, { minVersion });
|
|
38
|
+
}
|
|
39
|
+
Object.assign(compatibility, { strict });
|
|
40
|
+
return {
|
|
41
|
+
compatibility,
|
|
42
|
+
diagnostics: {
|
|
43
|
+
allowMissingIsActive: options.allowMissingIsActive ?? inlineOptions.allowMissingIsActive ?? false,
|
|
44
|
+
requireIsActive: options.requireIsActive ?? inlineOptions.requireIsActive ?? true,
|
|
45
|
+
strict,
|
|
46
|
+
},
|
|
47
|
+
logger: options.logger ?? inlineOptions.logger,
|
|
48
|
+
onDiagnostic: options.onDiagnostic ?? inlineOptions.onDiagnostic,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { BlockAttributes, BlockVariation, BlockVariationScope } from "./registration.js";
|
|
2
|
-
import { type WordPressBlockApiCompatibilityDiagnostic, type
|
|
2
|
+
import { type WordPressBlockApiCompatibilityDiagnostic, type WordPressBlockApiCompatibilityManifest, type WordPressCompatibilitySettings, type WordPressVersion } from "./compatibility.js";
|
|
3
|
+
import { type DiagnosticLogger } from "./shared/diagnostics.js";
|
|
4
|
+
import { collectBlockVariationCompatibilityFeatures, createBlockVariationCompatibilityManifest } from "./variations-manifest.js";
|
|
5
|
+
export { collectBlockVariationCompatibilityFeatures, createBlockVariationCompatibilityManifest, };
|
|
3
6
|
export type BlockVariationAttributeMap<TAttributes extends BlockAttributes = BlockAttributes> = Partial<TAttributes> & BlockAttributes;
|
|
4
7
|
export type BlockVariationInnerBlockTemplate = readonly [
|
|
5
8
|
name: string,
|
|
@@ -20,6 +23,7 @@ export interface BlockVariationDefinition<TAttributes extends BlockAttributes =
|
|
|
20
23
|
}
|
|
21
24
|
export interface DefineVariationInlineOptions {
|
|
22
25
|
readonly allowMissingIsActive?: boolean;
|
|
26
|
+
readonly logger?: DiagnosticLogger<BlockVariationDiagnostic>;
|
|
23
27
|
readonly minVersion?: WordPressVersion;
|
|
24
28
|
readonly minWordPress?: WordPressVersion;
|
|
25
29
|
readonly onDiagnostic?: (diagnostic: BlockVariationDiagnostic) => void;
|
|
@@ -28,6 +32,7 @@ export interface DefineVariationInlineOptions {
|
|
|
28
32
|
}
|
|
29
33
|
export interface DefineVariationOptions extends WordPressCompatibilitySettings {
|
|
30
34
|
readonly allowMissingIsActive?: boolean;
|
|
35
|
+
readonly logger?: DiagnosticLogger<BlockVariationDiagnostic>;
|
|
31
36
|
readonly minWordPress?: WordPressVersion;
|
|
32
37
|
readonly onDiagnostic?: (diagnostic: BlockVariationDiagnostic) => void;
|
|
33
38
|
readonly requireIsActive?: boolean;
|
|
@@ -72,8 +77,6 @@ export interface CreateBlockVariationRegistrationSourceOptions {
|
|
|
72
77
|
readonly functionName?: string;
|
|
73
78
|
readonly importSource?: string;
|
|
74
79
|
}
|
|
75
|
-
export declare function collectBlockVariationCompatibilityFeatures(): readonly WordPressBlockApiCompatibilityFeature[];
|
|
76
|
-
export declare function createBlockVariationCompatibilityManifest(settings?: DefineVariationOptions): WordPressBlockApiCompatibilityManifest;
|
|
77
80
|
export declare function getDefinedVariationMetadata(variation: unknown): DefinedBlockVariationMetadata | undefined;
|
|
78
81
|
export declare function getDefinedVariationBlockName(variation: unknown): string | undefined;
|
|
79
82
|
export declare function getDefinedVariationCompatibilityManifest(variation: unknown): WordPressBlockApiCompatibilityManifest | undefined;
|
|
@@ -1,145 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isObjectRecord } from "./shared/object-utils.js";
|
|
2
|
+
import { normalizeStaticRegistrationValue } from "./shared/static-registration.js";
|
|
3
|
+
import { createCollectionDiagnostics, createVariationDiagnostics, handleVariationDiagnostics, } from "./variations-diagnostics.js";
|
|
4
|
+
import { collectBlockVariationCompatibilityFeatures, createBlockVariationCompatibilityManifest, createBlockVariationCompatibilityManifestFromSettings, } from "./variations-manifest.js";
|
|
5
|
+
import { resolveDefineVariationSettings, splitDefineVariationInput, } from "./variations-settings.js";
|
|
6
|
+
export { collectBlockVariationCompatibilityFeatures, createBlockVariationCompatibilityManifest, };
|
|
2
7
|
export const DEFINED_BLOCK_VARIATION_METADATA = Symbol.for("@wp-typia/block-types/defined-variation");
|
|
3
8
|
export const DEFINED_BLOCK_VARIATIONS_METADATA = Symbol.for("@wp-typia/block-types/defined-variations");
|
|
4
|
-
const DEFINE_VARIATION_INLINE_OPTION_KEYS = new Set([
|
|
5
|
-
"allowMissingIsActive",
|
|
6
|
-
"minVersion",
|
|
7
|
-
"minWordPress",
|
|
8
|
-
"onDiagnostic",
|
|
9
|
-
"requireIsActive",
|
|
10
|
-
"strict",
|
|
11
|
-
]);
|
|
12
|
-
const STABLE_VARIATION_MARKER_ATTRIBUTES = [
|
|
13
|
-
"className",
|
|
14
|
-
"namespace",
|
|
15
|
-
"wpTypiaVariation",
|
|
16
|
-
];
|
|
17
|
-
function isObjectRecord(value) {
|
|
18
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
-
}
|
|
20
|
-
function splitDefineVariationInput(variation) {
|
|
21
|
-
const inlineOptions = {};
|
|
22
|
-
const normalizedVariation = {};
|
|
23
|
-
for (const [key, value] of Object.entries(variation)) {
|
|
24
|
-
if (DEFINE_VARIATION_INLINE_OPTION_KEYS.has(key)) {
|
|
25
|
-
Object.assign(inlineOptions, { [key]: value });
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
normalizedVariation[key] = value;
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
inlineOptions,
|
|
32
|
-
variation: normalizedVariation,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function resolveDefineVariationSettings(inlineOptions, options) {
|
|
36
|
-
const compatibility = {};
|
|
37
|
-
const allowUnknownFutureKeys = options.allowUnknownFutureKeys;
|
|
38
|
-
const minVersion = options.minVersion ??
|
|
39
|
-
options.minWordPress ??
|
|
40
|
-
inlineOptions.minVersion ??
|
|
41
|
-
inlineOptions.minWordPress;
|
|
42
|
-
const strict = options.strict ?? inlineOptions.strict ?? true;
|
|
43
|
-
if (allowUnknownFutureKeys !== undefined) {
|
|
44
|
-
Object.assign(compatibility, { allowUnknownFutureKeys });
|
|
45
|
-
}
|
|
46
|
-
if (minVersion !== undefined) {
|
|
47
|
-
Object.assign(compatibility, { minVersion });
|
|
48
|
-
}
|
|
49
|
-
Object.assign(compatibility, { strict });
|
|
50
|
-
return {
|
|
51
|
-
compatibility,
|
|
52
|
-
diagnostics: {
|
|
53
|
-
allowMissingIsActive: options.allowMissingIsActive ?? inlineOptions.allowMissingIsActive ?? false,
|
|
54
|
-
requireIsActive: options.requireIsActive ?? inlineOptions.requireIsActive ?? true,
|
|
55
|
-
strict,
|
|
56
|
-
},
|
|
57
|
-
onDiagnostic: options.onDiagnostic ?? inlineOptions.onDiagnostic,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function getDiagnosticSeverity(strict) {
|
|
61
|
-
return strict ? "error" : "warning";
|
|
62
|
-
}
|
|
63
|
-
export function collectBlockVariationCompatibilityFeatures() {
|
|
64
|
-
return [
|
|
65
|
-
{
|
|
66
|
-
area: "blockVariations",
|
|
67
|
-
feature: "editorRegistration",
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
}
|
|
71
|
-
export function createBlockVariationCompatibilityManifest(settings = {}) {
|
|
72
|
-
const resolved = resolveDefineVariationSettings({}, settings);
|
|
73
|
-
return createWordPressBlockApiCompatibilityManifest(collectBlockVariationCompatibilityFeatures(), resolved.compatibility);
|
|
74
|
-
}
|
|
75
|
-
function hasStableMarkerAttribute(attributes) {
|
|
76
|
-
if (!isObjectRecord(attributes)) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
return STABLE_VARIATION_MARKER_ATTRIBUTES.some((key) => key in attributes);
|
|
80
|
-
}
|
|
81
|
-
function createVariationDiagnostics(blockName, variation, options) {
|
|
82
|
-
const diagnostics = [];
|
|
83
|
-
const variationName = variation.name;
|
|
84
|
-
const attributes = variation.attributes;
|
|
85
|
-
const isActive = variation.isActive;
|
|
86
|
-
if (options.requireIsActive &&
|
|
87
|
-
!options.allowMissingIsActive &&
|
|
88
|
-
!variation.isDefault &&
|
|
89
|
-
isActive === undefined) {
|
|
90
|
-
diagnostics.push({
|
|
91
|
-
blockName,
|
|
92
|
-
code: "missing-is-active",
|
|
93
|
-
message: `Block variation "${variationName}" for "${blockName}" does not declare isActive; add an active discriminator or set allowMissingIsActive.`,
|
|
94
|
-
severity: "warning",
|
|
95
|
-
variationName,
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
if (options.requireIsActive &&
|
|
99
|
-
!options.allowMissingIsActive &&
|
|
100
|
-
!variation.isDefault &&
|
|
101
|
-
isActive === undefined &&
|
|
102
|
-
!hasStableMarkerAttribute(attributes)) {
|
|
103
|
-
diagnostics.push({
|
|
104
|
-
blockName,
|
|
105
|
-
code: "missing-stable-marker",
|
|
106
|
-
message: `Block variation "${variationName}" for "${blockName}" has no stable marker attribute such as className, namespace, or wpTypiaVariation.`,
|
|
107
|
-
severity: "warning",
|
|
108
|
-
variationName,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
if (Array.isArray(isActive)) {
|
|
112
|
-
for (const attribute of isActive) {
|
|
113
|
-
if (!isObjectRecord(attributes) || !(attribute in attributes)) {
|
|
114
|
-
diagnostics.push({
|
|
115
|
-
attribute,
|
|
116
|
-
blockName,
|
|
117
|
-
code: "unknown-is-active-attribute",
|
|
118
|
-
message: `Block variation "${variationName}" for "${blockName}" uses isActive attribute "${attribute}" that is not present in its attributes.`,
|
|
119
|
-
severity: "warning",
|
|
120
|
-
variationName,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return diagnostics;
|
|
126
|
-
}
|
|
127
|
-
function handleVariationDiagnostics(diagnostics, onDiagnostic) {
|
|
128
|
-
const errors = diagnostics.filter((diagnostic) => diagnostic.severity === "error");
|
|
129
|
-
if (errors.length > 0) {
|
|
130
|
-
throw new Error([
|
|
131
|
-
"WordPress block variation check failed:",
|
|
132
|
-
...errors.map((diagnostic) => `- ${diagnostic.message}`),
|
|
133
|
-
].join("\n"));
|
|
134
|
-
}
|
|
135
|
-
for (const diagnostic of diagnostics) {
|
|
136
|
-
if (onDiagnostic) {
|
|
137
|
-
onDiagnostic(diagnostic);
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
console.warn(`[wp-typia] ${diagnostic.message}`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
9
|
export function getDefinedVariationMetadata(variation) {
|
|
144
10
|
return isObjectRecord(variation)
|
|
145
11
|
? variation[DEFINED_BLOCK_VARIATION_METADATA]
|
|
@@ -159,12 +25,12 @@ export function getDefinedVariationsMetadata(variations) {
|
|
|
159
25
|
export function defineVariation(blockName, variation, options = {}) {
|
|
160
26
|
const { inlineOptions, variation: normalizedVariation } = splitDefineVariationInput(variation);
|
|
161
27
|
const resolved = resolveDefineVariationSettings(inlineOptions, options);
|
|
162
|
-
const manifest =
|
|
28
|
+
const manifest = createBlockVariationCompatibilityManifestFromSettings(resolved.compatibility);
|
|
163
29
|
const diagnostics = [
|
|
164
30
|
...manifest.diagnostics,
|
|
165
31
|
...createVariationDiagnostics(blockName, normalizedVariation, resolved.diagnostics),
|
|
166
32
|
];
|
|
167
|
-
handleVariationDiagnostics(diagnostics, resolved.onDiagnostic);
|
|
33
|
+
handleVariationDiagnostics(diagnostics, resolved.onDiagnostic, resolved.logger);
|
|
168
34
|
Object.defineProperty(normalizedVariation, DEFINED_BLOCK_VARIATION_METADATA, {
|
|
169
35
|
configurable: false,
|
|
170
36
|
enumerable: false,
|
|
@@ -177,42 +43,6 @@ export function defineVariation(blockName, variation, options = {}) {
|
|
|
177
43
|
});
|
|
178
44
|
return normalizedVariation;
|
|
179
45
|
}
|
|
180
|
-
function createCollectionDiagnostics(entries, strict) {
|
|
181
|
-
const diagnostics = [];
|
|
182
|
-
const seenNames = new Map();
|
|
183
|
-
const seenActiveMarkers = new Map();
|
|
184
|
-
for (const entry of entries) {
|
|
185
|
-
const nameKey = `${entry.blockName}:${entry.variation.name}`;
|
|
186
|
-
const activeMarker = Array.isArray(entry.variation.isActive)
|
|
187
|
-
? entry.variation.isActive.join("|")
|
|
188
|
-
: undefined;
|
|
189
|
-
if (seenNames.has(nameKey)) {
|
|
190
|
-
diagnostics.push({
|
|
191
|
-
blockName: entry.blockName,
|
|
192
|
-
code: "duplicate-variation-name",
|
|
193
|
-
message: `Duplicate block variation name "${entry.variation.name}" for "${entry.blockName}".`,
|
|
194
|
-
severity: getDiagnosticSeverity(strict),
|
|
195
|
-
variationName: entry.variation.name,
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
seenNames.set(nameKey, entry);
|
|
199
|
-
if (activeMarker && activeMarker.length > 0) {
|
|
200
|
-
const markerKey = `${entry.blockName}:${activeMarker}`;
|
|
201
|
-
const existing = seenActiveMarkers.get(markerKey);
|
|
202
|
-
if (existing) {
|
|
203
|
-
diagnostics.push({
|
|
204
|
-
blockName: entry.blockName,
|
|
205
|
-
code: "duplicate-active-marker",
|
|
206
|
-
message: `Block variations "${existing.variation.name}" and "${entry.variation.name}" for "${entry.blockName}" share the same isActive discriminator "${activeMarker}".`,
|
|
207
|
-
severity: "warning",
|
|
208
|
-
variationName: entry.variation.name,
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
seenActiveMarkers.set(markerKey, entry);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return diagnostics;
|
|
215
|
-
}
|
|
216
46
|
export function createBlockVariationRegistrationPlan(variations) {
|
|
217
47
|
return variations.map((variation) => {
|
|
218
48
|
const metadata = getDefinedVariationMetadata(variation);
|
|
@@ -234,7 +64,7 @@ export function defineVariations(variations, options = {}) {
|
|
|
234
64
|
...variationDiagnostics,
|
|
235
65
|
...collectionDiagnostics,
|
|
236
66
|
];
|
|
237
|
-
handleVariationDiagnostics(collectionDiagnostics, options.onDiagnostic);
|
|
67
|
+
handleVariationDiagnostics(collectionDiagnostics, options.onDiagnostic, options.logger);
|
|
238
68
|
const normalizedVariations = [...variations];
|
|
239
69
|
Object.defineProperty(normalizedVariations, DEFINED_BLOCK_VARIATIONS_METADATA, {
|
|
240
70
|
configurable: false,
|
|
@@ -247,41 +77,12 @@ export function defineVariations(variations, options = {}) {
|
|
|
247
77
|
});
|
|
248
78
|
return normalizedVariations;
|
|
249
79
|
}
|
|
250
|
-
function normalizeStaticRegistrationValue(value, path) {
|
|
251
|
-
if (value === undefined) {
|
|
252
|
-
return undefined;
|
|
253
|
-
}
|
|
254
|
-
if (value === null ||
|
|
255
|
-
typeof value === "boolean" ||
|
|
256
|
-
typeof value === "number" ||
|
|
257
|
-
typeof value === "string") {
|
|
258
|
-
return value;
|
|
259
|
-
}
|
|
260
|
-
if (typeof value === "function") {
|
|
261
|
-
throw new Error(`Cannot generate static variation registration code for function value at ${path}.`);
|
|
262
|
-
}
|
|
263
|
-
if (typeof value === "bigint" || typeof value === "symbol") {
|
|
264
|
-
throw new Error(`Cannot generate static variation registration code for ${typeof value} value at ${path}.`);
|
|
265
|
-
}
|
|
266
|
-
if (Array.isArray(value)) {
|
|
267
|
-
return value.map((entry, index) => normalizeStaticRegistrationValue(entry, `${path}[${index}]`));
|
|
268
|
-
}
|
|
269
|
-
if (isObjectRecord(value)) {
|
|
270
|
-
const normalized = {};
|
|
271
|
-
for (const [key, nestedValue] of Object.entries(value)) {
|
|
272
|
-
const nextValue = normalizeStaticRegistrationValue(nestedValue, `${path}.${key}`);
|
|
273
|
-
if (nextValue !== undefined) {
|
|
274
|
-
normalized[key] = nextValue;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
return normalized;
|
|
278
|
-
}
|
|
279
|
-
throw new Error(`Cannot generate static variation registration code for unsupported value at ${path}.`);
|
|
280
|
-
}
|
|
281
80
|
export function createStaticBlockVariationRegistrationSource(variations, options = {}) {
|
|
282
81
|
const importSource = options.importSource ?? "@wordpress/blocks";
|
|
283
82
|
const functionName = options.functionName ?? "registerWpTypiaBlockVariations";
|
|
284
|
-
const entries = createBlockVariationRegistrationPlan(variations).map((entry, index) => normalizeStaticRegistrationValue(entry, `variations[${index}]
|
|
83
|
+
const entries = createBlockVariationRegistrationPlan(variations).map((entry, index) => normalizeStaticRegistrationValue(entry, `variations[${index}]`, {
|
|
84
|
+
description: "variation",
|
|
85
|
+
}));
|
|
285
86
|
const serializedEntries = JSON.stringify(entries, null, 2);
|
|
286
87
|
return [
|
|
287
88
|
`import { registerBlockVariation } from ${JSON.stringify(importSource)};`,
|