@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.
Files changed (38) hide show
  1. package/README.md +46 -0
  2. package/dist/blocks/bindings-codegen.d.ts +13 -0
  3. package/dist/blocks/bindings-codegen.js +210 -0
  4. package/dist/blocks/bindings-core.d.ts +116 -0
  5. package/dist/blocks/bindings-core.js +65 -0
  6. package/dist/blocks/bindings-diagnostics.d.ts +8 -0
  7. package/dist/blocks/bindings-diagnostics.js +95 -0
  8. package/dist/blocks/bindings-manifest.d.ts +12 -0
  9. package/dist/blocks/bindings-manifest.js +82 -0
  10. package/dist/blocks/bindings-settings.d.ts +27 -0
  11. package/dist/blocks/bindings-settings.js +115 -0
  12. package/dist/blocks/bindings.d.ts +2 -132
  13. package/dist/blocks/bindings.js +2 -598
  14. package/dist/blocks/shared/diagnostics.d.ts +13 -0
  15. package/dist/blocks/shared/diagnostics.js +19 -0
  16. package/dist/blocks/shared/object-utils.d.ts +2 -0
  17. package/dist/blocks/shared/object-utils.js +10 -0
  18. package/dist/blocks/shared/static-registration.d.ts +4 -0
  19. package/dist/blocks/shared/static-registration.js +32 -0
  20. package/dist/blocks/supports-diagnostics.d.ts +3 -0
  21. package/dist/blocks/supports-diagnostics.js +7 -0
  22. package/dist/blocks/supports-features.d.ts +10 -0
  23. package/dist/blocks/supports-features.js +53 -0
  24. package/dist/blocks/supports-manifest.d.ts +4 -0
  25. package/dist/blocks/supports-manifest.js +97 -0
  26. package/dist/blocks/supports-settings.d.ts +8 -0
  27. package/dist/blocks/supports-settings.js +42 -0
  28. package/dist/blocks/supports.d.ts +8 -14
  29. package/dist/blocks/supports.js +8 -209
  30. package/dist/blocks/variations-diagnostics.d.ts +6 -0
  31. package/dist/blocks/variations-diagnostics.js +123 -0
  32. package/dist/blocks/variations-manifest.d.ts +5 -0
  33. package/dist/blocks/variations-manifest.js +17 -0
  34. package/dist/blocks/variations-settings.d.ts +18 -0
  35. package/dist/blocks/variations-settings.js +50 -0
  36. package/dist/blocks/variations.d.ts +6 -3
  37. package/dist/blocks/variations.js +12 -211
  38. package/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ import type { WordPressCompatibilitySettings, WordPressVersion } from "./compatibility.js";
2
+ import type { BindingSourceDefinition, BindingSourceVersionGates, DefineBindingSourceInlineOptions, DefineBindingSourceOptions, StripDefineBindingSourceOptions } from "./bindings-core.js";
3
+ export declare const DEFINE_BINDING_SOURCE_INLINE_OPTION_KEYS: Set<string>;
4
+ export interface ResolvedDefineBindingSourceSettings {
5
+ readonly compatibility: WordPressCompatibilitySettings;
6
+ readonly features: {
7
+ readonly editor: boolean;
8
+ readonly fieldsList: boolean;
9
+ readonly metadata: boolean;
10
+ readonly server: boolean;
11
+ readonly supportedAttributesFilter: boolean;
12
+ };
13
+ readonly gates: BindingSourceVersionGates;
14
+ readonly logger: DefineBindingSourceOptions["logger"];
15
+ readonly onDiagnostic: DefineBindingSourceOptions["onDiagnostic"];
16
+ readonly strict: boolean;
17
+ }
18
+ export declare function isBindingSourceVersionGates(value: WordPressVersion | BindingSourceVersionGates | undefined): value is BindingSourceVersionGates;
19
+ export declare function splitDefineBindingSourceInput<TSource extends BindingSourceDefinition & DefineBindingSourceInlineOptions>(source: TSource): {
20
+ inlineOptions: DefineBindingSourceInlineOptions;
21
+ source: StripDefineBindingSourceOptions<TSource> & BindingSourceDefinition;
22
+ };
23
+ export declare function resolveMinWordPress(inlineOptions: DefineBindingSourceInlineOptions, options: DefineBindingSourceOptions): {
24
+ compatibility: WordPressCompatibilitySettings;
25
+ gates: BindingSourceVersionGates;
26
+ };
27
+ export declare function resolveDefineBindingSourceSettings(inlineOptions: DefineBindingSourceInlineOptions, options: DefineBindingSourceOptions, source: BindingSourceDefinition): ResolvedDefineBindingSourceSettings;
@@ -0,0 +1,115 @@
1
+ import { isObjectRecord } from "./shared/object-utils.js";
2
+ export const DEFINE_BINDING_SOURCE_INLINE_OPTION_KEYS = new Set([
3
+ "allowUnknownFutureKeys",
4
+ "editor",
5
+ "fieldsList",
6
+ "logger",
7
+ "minVersion",
8
+ "minWordPress",
9
+ "minWordPressEditor",
10
+ "minWordPressFieldsList",
11
+ "minWordPressServer",
12
+ "minWordPressSupportedAttributesFilter",
13
+ "onDiagnostic",
14
+ "server",
15
+ "strict",
16
+ "supportedAttributesFilter",
17
+ ]);
18
+ export function isBindingSourceVersionGates(value) {
19
+ return isObjectRecord(value);
20
+ }
21
+ export function splitDefineBindingSourceInput(source) {
22
+ const inlineOptions = {};
23
+ const normalizedSource = {};
24
+ for (const [key, value] of Object.entries(source)) {
25
+ if (DEFINE_BINDING_SOURCE_INLINE_OPTION_KEYS.has(key)) {
26
+ Object.assign(inlineOptions, { [key]: value });
27
+ continue;
28
+ }
29
+ normalizedSource[key] = value;
30
+ }
31
+ return {
32
+ inlineOptions,
33
+ source: normalizedSource,
34
+ };
35
+ }
36
+ export function resolveMinWordPress(inlineOptions, options) {
37
+ const optionMinWordPress = options.minWordPress;
38
+ const inlineMinWordPress = inlineOptions.minWordPress;
39
+ const optionGates = isBindingSourceVersionGates(optionMinWordPress)
40
+ ? optionMinWordPress
41
+ : {};
42
+ const inlineGates = isBindingSourceVersionGates(inlineMinWordPress)
43
+ ? inlineMinWordPress
44
+ : {};
45
+ const minVersion = options.minVersion ??
46
+ (typeof optionMinWordPress === "string" ? optionMinWordPress : undefined) ??
47
+ inlineOptions.minVersion ??
48
+ (typeof inlineMinWordPress === "string" ? inlineMinWordPress : undefined);
49
+ const compatibility = {
50
+ strict: options.strict ?? inlineOptions.strict ?? true,
51
+ };
52
+ if (options.allowUnknownFutureKeys ?? inlineOptions.allowUnknownFutureKeys) {
53
+ Object.assign(compatibility, {
54
+ allowUnknownFutureKeys: options.allowUnknownFutureKeys ?? inlineOptions.allowUnknownFutureKeys,
55
+ });
56
+ }
57
+ if (minVersion !== undefined) {
58
+ Object.assign(compatibility, { minVersion });
59
+ }
60
+ const gates = {};
61
+ const editor = options.minWordPressEditor ??
62
+ optionGates.editor ??
63
+ inlineOptions.minWordPressEditor ??
64
+ inlineGates.editor;
65
+ const fieldsList = options.minWordPressFieldsList ??
66
+ optionGates.fieldsList ??
67
+ inlineOptions.minWordPressFieldsList ??
68
+ inlineGates.fieldsList;
69
+ const server = options.minWordPressServer ??
70
+ optionGates.server ??
71
+ inlineOptions.minWordPressServer ??
72
+ inlineGates.server;
73
+ const supportedAttributesFilter = options.minWordPressSupportedAttributesFilter ??
74
+ optionGates.supportedAttributesFilter ??
75
+ inlineOptions.minWordPressSupportedAttributesFilter ??
76
+ inlineGates.supportedAttributesFilter;
77
+ if (editor !== undefined) {
78
+ Object.assign(gates, { editor });
79
+ }
80
+ if (fieldsList !== undefined) {
81
+ Object.assign(gates, { fieldsList });
82
+ }
83
+ if (server !== undefined) {
84
+ Object.assign(gates, { server });
85
+ }
86
+ if (supportedAttributesFilter !== undefined) {
87
+ Object.assign(gates, { supportedAttributesFilter });
88
+ }
89
+ return {
90
+ compatibility,
91
+ gates,
92
+ };
93
+ }
94
+ export function resolveDefineBindingSourceSettings(inlineOptions, options, source) {
95
+ const { compatibility, gates } = resolveMinWordPress(inlineOptions, options);
96
+ const strict = compatibility.strict ?? true;
97
+ const hasFields = (source.fields?.length ?? 0) > 0;
98
+ const hasBindableAttributes = (source.bindableAttributes?.length ?? 0) > 0;
99
+ return {
100
+ compatibility,
101
+ features: {
102
+ editor: options.editor ?? inlineOptions.editor ?? true,
103
+ fieldsList: options.fieldsList ?? inlineOptions.fieldsList ?? hasFields,
104
+ metadata: true,
105
+ server: options.server ?? inlineOptions.server ?? true,
106
+ supportedAttributesFilter: options.supportedAttributesFilter ??
107
+ inlineOptions.supportedAttributesFilter ??
108
+ hasBindableAttributes,
109
+ },
110
+ gates,
111
+ logger: options.logger ?? inlineOptions.logger,
112
+ onDiagnostic: options.onDiagnostic ?? inlineOptions.onDiagnostic,
113
+ strict,
114
+ };
115
+ }
@@ -1,132 +1,2 @@
1
- import type { BlockAttributes } from "./registration.js";
2
- import { type WordPressBlockApiCompatibilityDiagnostic, type WordPressBlockApiCompatibilityFeature, type WordPressBlockApiCompatibilityManifest, type WordPressCompatibilitySettings, type WordPressVersion } from "./compatibility.js";
3
- export type BindingSourceName = `${string}/${string}`;
4
- export type BindingSourceArgs = Readonly<Record<string, unknown>>;
5
- export type BindingFieldType = "array" | "boolean" | "integer" | "number" | "object" | "string";
6
- export interface BindingSourceField<TArgs extends BindingSourceArgs = BindingSourceArgs> {
7
- readonly args?: TArgs;
8
- readonly label: string;
9
- readonly name: string;
10
- readonly type?: BindingFieldType;
11
- }
12
- export type BlockBindingAttributeName<TAttributes extends BlockAttributes = BlockAttributes> = Extract<Exclude<keyof TAttributes, "metadata">, string>;
13
- export interface BindingSourceBindableAttributes<TAttributes extends BlockAttributes = BlockAttributes, TBlockName extends string = string, TAttributesList extends readonly BlockBindingAttributeName<TAttributes>[] = readonly BlockBindingAttributeName<TAttributes>[]> {
14
- readonly attributes: TAttributesList;
15
- readonly blockName: TBlockName;
16
- }
17
- export interface BindingSourceDefinition<TName extends string = string, TArgs extends BindingSourceArgs = BindingSourceArgs, TFields extends readonly BindingSourceField[] = readonly BindingSourceField[]> {
18
- readonly args?: TArgs;
19
- readonly bindableAttributes?: readonly BindingSourceBindableAttributes[];
20
- readonly fields?: TFields;
21
- readonly getValueCallback?: string;
22
- readonly label?: string;
23
- readonly name: TName;
24
- readonly usesContext?: readonly string[];
25
- }
26
- export interface BindingSourceVersionGates {
27
- readonly editor?: WordPressVersion;
28
- readonly fieldsList?: WordPressVersion;
29
- readonly server?: WordPressVersion;
30
- readonly supportedAttributesFilter?: WordPressVersion;
31
- }
32
- export interface DefineBindingSourceInlineOptions {
33
- readonly allowUnknownFutureKeys?: boolean;
34
- readonly editor?: boolean;
35
- readonly fieldsList?: boolean;
36
- readonly minVersion?: WordPressVersion;
37
- readonly minWordPress?: WordPressVersion | BindingSourceVersionGates;
38
- readonly minWordPressEditor?: WordPressVersion;
39
- readonly minWordPressFieldsList?: WordPressVersion;
40
- readonly minWordPressServer?: WordPressVersion;
41
- readonly minWordPressSupportedAttributesFilter?: WordPressVersion;
42
- readonly onDiagnostic?: (diagnostic: BindingSourceDiagnostic) => void;
43
- readonly server?: boolean;
44
- readonly strict?: boolean;
45
- readonly supportedAttributesFilter?: boolean;
46
- }
47
- export interface DefineBindingSourceOptions extends WordPressCompatibilitySettings {
48
- readonly editor?: boolean;
49
- readonly fieldsList?: boolean;
50
- readonly minWordPress?: WordPressVersion | BindingSourceVersionGates;
51
- readonly minWordPressEditor?: WordPressVersion;
52
- readonly minWordPressFieldsList?: WordPressVersion;
53
- readonly minWordPressServer?: WordPressVersion;
54
- readonly minWordPressSupportedAttributesFilter?: WordPressVersion;
55
- readonly onDiagnostic?: (diagnostic: BindingSourceDiagnostic) => void;
56
- readonly server?: boolean;
57
- readonly supportedAttributesFilter?: boolean;
58
- }
59
- export type StripDefineBindingSourceOptions<TSource> = Omit<TSource, keyof DefineBindingSourceInlineOptions>;
60
- export declare const DEFINED_BLOCK_BINDING_SOURCE_METADATA: unique symbol;
61
- export type DefinedBlockBindingSourceMetadataKey = typeof DEFINED_BLOCK_BINDING_SOURCE_METADATA;
62
- export interface DefinedBlockBindingSourceMetadata {
63
- readonly diagnostics: readonly BindingSourceDiagnostic[];
64
- readonly features: readonly WordPressBlockApiCompatibilityFeature[];
65
- readonly manifest: WordPressBlockApiCompatibilityManifest;
66
- }
67
- export type DefinedBindingSource<TName extends string = string, TArgs extends BindingSourceArgs = BindingSourceArgs, TFields extends readonly BindingSourceField[] = readonly BindingSourceField[], TSource extends BindingSourceDefinition = BindingSourceDefinition> = Readonly<StripDefineBindingSourceOptions<TSource>> & {
68
- readonly [DEFINED_BLOCK_BINDING_SOURCE_METADATA]?: DefinedBlockBindingSourceMetadata | undefined;
69
- readonly __wpTypiaBindingSourceArgs?: TArgs;
70
- readonly __wpTypiaBindingSourceFields?: TFields;
71
- readonly name: TName;
72
- };
73
- export interface BlockBinding<TSourceName extends string = string, TArgs extends BindingSourceArgs = BindingSourceArgs> {
74
- readonly args?: TArgs;
75
- readonly source: TSourceName;
76
- }
77
- type BindingSourceInferredArgs<TSource> = TSource extends {
78
- readonly __wpTypiaBindingSourceArgs?: infer TArgs extends BindingSourceArgs;
79
- } ? TArgs : BindingSourceArgs;
80
- export type Binding<TSource extends DefinedBindingSource | string, TArgs extends BindingSourceArgs = BindingSourceInferredArgs<TSource>> = TSource extends DefinedBindingSource<infer TName, infer TSourceArgs> ? TArgs extends TSourceArgs ? BlockBinding<TName, TArgs> : never : TSource extends string ? BlockBinding<TSource, TArgs> : never;
81
- export type BlockBindingMap<TAttributes extends BlockAttributes = BlockAttributes> = Readonly<Partial<Record<BlockBindingAttributeName<TAttributes>, BlockBinding>>>;
82
- export interface BlockMetadataBindings<TBindings extends Readonly<Record<string, BlockBinding | undefined>> = Readonly<Record<string, BlockBinding>>> {
83
- readonly bindings?: TBindings;
84
- }
85
- export type TypedBlockMetadataBindings<TAttributes extends BlockAttributes, TBindings extends BlockBindingMap<TAttributes> = BlockBindingMap<TAttributes>> = BlockMetadataBindings<TBindings>;
86
- export type BindingSourceDiagnosticCode = "duplicate-bindable-attribute" | "duplicate-field-name" | "fields-list-requires-editor" | "invalid-bindable-attribute" | "invalid-block-name" | "invalid-field-name" | "invalid-source-name" | "missing-php-callback";
87
- export interface BindingSourceAuthoringDiagnostic {
88
- readonly attribute?: string | undefined;
89
- readonly blockName?: string | undefined;
90
- readonly code: BindingSourceDiagnosticCode;
91
- readonly fieldName?: string | undefined;
92
- readonly message: string;
93
- readonly severity: "error" | "warning";
94
- readonly sourceName: string;
95
- }
96
- export type BindingSourceDiagnostic = BindingSourceAuthoringDiagnostic | WordPressBlockApiCompatibilityDiagnostic;
97
- export interface BindingSourceRegistrationEntry {
98
- readonly metadata: DefinedBlockBindingSourceMetadata;
99
- readonly source: DefinedBindingSource;
100
- }
101
- export interface CreatePhpBindingSourceRegistrationSourceOptions {
102
- readonly functionName?: string;
103
- readonly hook?: string;
104
- readonly includeOpeningTag?: boolean;
105
- readonly textDomain?: string;
106
- }
107
- export interface CreateEditorBindingSourceRegistrationSourceOptions {
108
- readonly functionName?: string;
109
- readonly importSource?: string;
110
- }
111
- export declare function collectBindingSourceCompatibilityFeatures(settings?: {
112
- readonly editor?: boolean;
113
- readonly fieldsList?: boolean;
114
- readonly metadata?: boolean;
115
- readonly server?: boolean;
116
- readonly supportedAttributesFilter?: boolean;
117
- }): readonly WordPressBlockApiCompatibilityFeature[];
118
- export declare function createBindingSourceCompatibilityManifest(settings?: DefineBindingSourceOptions): WordPressBlockApiCompatibilityManifest;
119
- export declare function getDefinedBindingSourceMetadata(source: unknown): DefinedBlockBindingSourceMetadata | undefined;
120
- export declare function getDefinedBindingSourceCompatibilityManifest(source: unknown): WordPressBlockApiCompatibilityManifest | undefined;
121
- export declare function defineBindingSource<const TSource extends BindingSourceDefinition & DefineBindingSourceInlineOptions>(source: TSource, options?: DefineBindingSourceOptions): DefinedBindingSource<Extract<TSource["name"], string>, TSource extends {
122
- readonly args: infer TArgs extends BindingSourceArgs;
123
- } ? TArgs : BindingSourceArgs, TSource extends {
124
- readonly fields: infer TFields extends readonly BindingSourceField[];
125
- } ? TFields : readonly BindingSourceField[], TSource>;
126
- export declare function defineBindableAttributes<TAttributes extends BlockAttributes = BlockAttributes, const TBlockName extends string = string, const TAttributesList extends readonly BlockBindingAttributeName<TAttributes>[] = readonly BlockBindingAttributeName<TAttributes>[]>(blockName: TBlockName, attributes: TAttributesList): BindingSourceBindableAttributes<TAttributes, TBlockName, TAttributesList>;
127
- export declare function defineBlockMetadataBindings<const TBindings extends Readonly<Record<string, BlockBinding | undefined>>>(bindings: TBindings): BlockMetadataBindings<TBindings>;
128
- export declare function defineTypedBlockMetadataBindings<TAttributes extends BlockAttributes, const TBindings extends BlockBindingMap<TAttributes> = BlockBindingMap<TAttributes>>(bindings: TBindings): TypedBlockMetadataBindings<TAttributes, TBindings>;
129
- export declare function createBindingSourceRegistrationPlan(sources: readonly DefinedBindingSource[]): readonly BindingSourceRegistrationEntry[];
130
- export declare function createPhpBindingSourceRegistrationSource(sources: DefinedBindingSource | readonly DefinedBindingSource[], options?: CreatePhpBindingSourceRegistrationSourceOptions): string;
131
- export declare function createEditorBindingSourceRegistrationSource(sources: DefinedBindingSource | readonly DefinedBindingSource[], options?: CreateEditorBindingSourceRegistrationSourceOptions): string;
132
- export {};
1
+ export * from "./bindings-core.js";
2
+ export * from "./bindings-codegen.js";