wp-typia 0.22.1 → 0.22.3

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.
@@ -20,7 +20,7 @@ import {
20
20
  snapshotWorkspaceFiles,
21
21
  toPascalCase,
22
22
  updateWorkspaceInventorySource
23
- } from "./cli-5md428hf.js";
23
+ } from "./cli-x0h03qqe.js";
24
24
  import {
25
25
  CLI_DIAGNOSTIC_CODES,
26
26
  createCliDiagnosticCodeError
@@ -11,7 +11,7 @@ import {
11
11
  // package.json
12
12
  var package_default = {
13
13
  name: "wp-typia",
14
- version: "0.22.1",
14
+ version: "0.22.3",
15
15
  description: "Canonical CLI package for wp-typia scaffolding and project workflows",
16
16
  packageManager: "bun@1.3.11",
17
17
  type: "module",
@@ -81,7 +81,7 @@ var package_default = {
81
81
  "@bunli/tui": "0.6.0",
82
82
  "@bunli/utils": "0.6.0",
83
83
  "@wp-typia/api-client": "^0.4.5",
84
- "@wp-typia/project-tools": "0.22.1",
84
+ "@wp-typia/project-tools": "0.22.3",
85
85
  "better-result": "^2.7.0",
86
86
  react: "^19.2.5",
87
87
  "react-dom": "^19.2.5",
@@ -854,4 +854,4 @@ function createPlugin(input) {
854
854
  }
855
855
  export { createPlugin, package_default, CREATE_OPTION_METADATA, ADD_OPTION_METADATA, INIT_OPTION_METADATA, MIGRATE_OPTION_METADATA, MCP_OPTION_METADATA, SYNC_OPTION_METADATA, DOCTOR_OPTION_METADATA, TEMPLATES_OPTION_METADATA, GLOBAL_OPTION_METADATA, COMMAND_OPTION_METADATA_BY_GROUP, ALL_COMMAND_OPTION_METADATA, buildCommandOptions, collectOptionNamesByType, buildCommandOptionParser, COMMAND_ROUTING_METADATA, extractKnownOptionValuesFromArgv, resolveCommandOptionValues, collectPositionalIndexes, findFirstPositionalIndex, prefersStructuredCliOutput, emitCliDiagnosticFailure, writeStructuredCliDiagnosticError, ADD_KIND_IDS, WP_TYPIA_CANONICAL_CREATE_USAGE, WP_TYPIA_RESERVED_TOP_LEVEL_COMMAND_NAMES, WP_TYPIA_TOP_LEVEL_COMMAND_NAMES, WP_TYPIA_COMMAND_OPTION_GROUP_NAMES_BY_TOP_LEVEL_COMMAND, WP_TYPIA_CONFIG_SOURCES, mergeWpTypiaUserConfig, loadWpTypiaUserConfigFromSource, loadWpTypiaUserConfig, getCreateDefaults, getAddBlockDefaults, getMcpSchemaSources };
856
856
 
857
- //# debugId=E0DC9F2A7BC46CCF64756E2164756E21
857
+ //# debugId=CC09AC809AED3B1A64756E2164756E21
@@ -54,7 +54,7 @@ import {
54
54
  } from "./cli-sj5mtyzj.js";
55
55
  import {
56
56
  readWorkspaceInventory
57
- } from "./cli-5md428hf.js";
57
+ } from "./cli-x0h03qqe.js";
58
58
  import {
59
59
  getInvalidWorkspaceProjectReason,
60
60
  tryResolveWorkspaceProject
@@ -19,9 +19,9 @@ import {
19
19
  resolvePackageManagerId,
20
20
  resolveTemplateId,
21
21
  scaffoldProject
22
- } from "./cli-886tjd8m.js";
22
+ } from "./cli-tbd9x8b6.js";
23
23
  import"./cli-1sm60g1z.js";
24
- import"./cli-yzmkz95r.js";
24
+ import"./cli-prc42zqd.js";
25
25
  import"./cli-gcbre1zs.js";
26
26
  import"./cli-bq2v559b.js";
27
27
  import {
@@ -33,7 +33,7 @@ import {
33
33
  OFFICIAL_WORKSPACE_TEMPLATE_PACKAGE,
34
34
  isBuiltInTemplateId
35
35
  } from "./cli-tke8twkn.js";
36
- import"./cli-5md428hf.js";
36
+ import"./cli-x0h03qqe.js";
37
37
  import {
38
38
  createManagedTempRoot
39
39
  } from "./cli-t73q5aqz.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./cli-1sm60g1z.js";
5
5
  import {
6
6
  seedProjectMigrations
7
- } from "./cli-yzmkz95r.js";
7
+ } from "./cli-prc42zqd.js";
8
8
  import {
9
9
  ensureMigrationDirectories,
10
10
  isPlainObject,
@@ -59,7 +59,7 @@ import {
59
59
  toTitleCase,
60
60
  validateBlockSlug,
61
61
  validateNamespace
62
- } from "./cli-5md428hf.js";
62
+ } from "./cli-x0h03qqe.js";
63
63
  import {
64
64
  createManagedTempRoot
65
65
  } from "./cli-t73q5aqz.js";
@@ -12258,7 +12258,9 @@ function createScaffoldCompatibilityConfig(policy) {
12258
12258
  return {
12259
12259
  hardMinimums: capabilityPlan.hardMinimums,
12260
12260
  mode: getPolicyMode(capabilityPlan),
12261
+ optionalFeatureIds: capabilityPlan.optionalFeatures.map((feature) => feature.id),
12261
12262
  optionalFeatures: capabilityPlan.optionalFeatures.map((feature) => feature.label),
12263
+ requiredFeatureIds: capabilityPlan.requiredFeatures.map((feature) => feature.id),
12262
12264
  requiredFeatures: capabilityPlan.requiredFeatures.map((feature) => feature.label),
12263
12265
  runtimeGates: [
12264
12266
  ...capabilityPlan.requiredFeatures.flatMap(formatRuntimeGate),
@@ -14470,7 +14472,9 @@ type InteractivityActionShape = object;
14470
14472
  type InteractivityCallbackShape = object;
14471
14473
  type InteractivityContextShape = object;
14472
14474
  type InteractivityStateShape = object;
14473
- type InteractivityCallable = CallableFunction;
14475
+ type InteractivityCallable =
14476
+ | ((...args: unknown[]) => unknown)
14477
+ | ReturnType<typeof import('@wordpress/interactivity').withSyncEvent>;
14474
14478
  type InteractivityKey<T extends object> = Extract<keyof T, string>;
14475
14479
  type InteractivityMethodKey<T extends object> = {
14476
14480
  [Key in InteractivityKey<T>]: T[Key] extends InteractivityCallable ? Key : never;
@@ -14573,7 +14577,7 @@ export function defineInteractivityStore<
14573
14577
  };
14574
14578
  }
14575
14579
 
14576
- type InteractivityActionHandler = CallableFunction;
14580
+ type InteractivityActionHandler = InteractivityCallable;
14577
14581
 
14578
14582
  export interface {{pascalCase}}StoreActions {
14579
14583
  handleClick: InteractivityActionHandler;
@@ -17317,6 +17321,6 @@ async function resolveOptionalInteractiveExternalLayerId({
17317
17321
  }
17318
17322
  }
17319
17323
 
17320
- export { syncPersistenceRestArtifacts, copyInterpolatedDirectory, listInterpolatedDirectoryOutputs, getPrimaryDevelopmentScript, getOptionalOnboardingSteps, getOptionalOnboardingNote, getOptionalOnboardingShortNote, formatNonEmptyTargetDirectoryError, require_semver2 as require_semver, parseTemplateLocator, resolveExternalTemplateLayers, resolveTemplateSeed, normalizeOptionalCliString, resolveLocalCliPathOption, assertExternalLayerCompositionOptions, assertBuiltInTemplateVariantAllowed, parseAlternateRenderTargets, parseCompoundInnerBlocksPreset, OPTIONAL_WORDPRESS_AI_CLIENT_COMPATIBILITY, REQUIRED_WORKSPACE_ABILITY_COMPATIBILITY, resolveScaffoldCompatibilityPolicy, renderScaffoldCompatibilityConfig, updatePluginHeaderCompatibility, getDefaultAnswers, resolveTemplateId, resolvePackageManagerId, collectScaffoldAnswers, DATA_STORAGE_MODES, PERSISTENCE_POLICIES, isDataStorageMode, isPersistencePolicy, scaffoldProject, resolveOptionalInteractiveExternalLayerId };
17324
+ export { syncPersistenceRestArtifacts, copyInterpolatedDirectory, listInterpolatedDirectoryOutputs, getPrimaryDevelopmentScript, getOptionalOnboardingSteps, getOptionalOnboardingNote, getOptionalOnboardingShortNote, formatNonEmptyTargetDirectoryError, require_semver2 as require_semver, parseTemplateLocator, resolveExternalTemplateLayers, resolveTemplateSeed, normalizeOptionalCliString, resolveLocalCliPathOption, assertExternalLayerCompositionOptions, assertBuiltInTemplateVariantAllowed, parseAlternateRenderTargets, parseCompoundInnerBlocksPreset, OPTIONAL_WORDPRESS_AI_CLIENT_COMPATIBILITY, REQUIRED_WORKSPACE_ABILITY_COMPATIBILITY, resolveScaffoldCompatibilityPolicy, createScaffoldCompatibilityConfig, renderScaffoldCompatibilityConfig, updatePluginHeaderCompatibility, getDefaultAnswers, resolveTemplateId, resolvePackageManagerId, collectScaffoldAnswers, DATA_STORAGE_MODES, PERSISTENCE_POLICIES, isDataStorageMode, isPersistencePolicy, scaffoldProject, resolveOptionalInteractiveExternalLayerId };
17321
17325
 
17322
- //# debugId=9B1DFAD9F6BA017E64756E2164756E21
17326
+ //# debugId=FF630622235F6B3064756E2164756E21
@@ -171212,93 +171212,192 @@ function getMutableBlockHooks(blockJson, blockJsonRelativePath) {
171212
171212
  }
171213
171213
  return blockHooks;
171214
171214
  }
171215
- function assertVariationDoesNotExist(projectDir, blockSlug, variationSlug, inventory) {
171216
- const variationPath = path.join(projectDir, "src", "blocks", blockSlug, "variations", `${variationSlug}.ts`);
171217
- if (fs.existsSync(variationPath)) {
171218
- throw new Error(`A variation already exists at ${path.relative(projectDir, variationPath)}. Choose a different name.`);
171215
+ function assertScaffoldDoesNotExist(options) {
171216
+ for (const collision of options.filesystemCollisions) {
171217
+ const targetPath = path.join(options.projectDir, collision.relativePath);
171218
+ if (fs.existsSync(targetPath)) {
171219
+ throw new Error(`${collision.label} already exists at ${path.relative(options.projectDir, targetPath)}. Choose a different name.`);
171220
+ }
171219
171221
  }
171220
- if (inventory.variations.some((entry) => entry.block === blockSlug && entry.slug === variationSlug)) {
171221
- throw new Error(`A variation inventory entry already exists for ${blockSlug}/${variationSlug}. Choose a different name.`);
171222
+ if (options.inventoryCollision && options.inventoryCollision.entries.some(options.inventoryCollision.exists)) {
171223
+ throw new Error(options.inventoryCollision.message);
171222
171224
  }
171223
171225
  }
171226
+ function assertVariationDoesNotExist(projectDir, blockSlug, variationSlug, inventory) {
171227
+ assertScaffoldDoesNotExist({
171228
+ filesystemCollisions: [
171229
+ {
171230
+ label: "A variation",
171231
+ relativePath: path.join("src", "blocks", blockSlug, "variations", `${variationSlug}.ts`)
171232
+ }
171233
+ ],
171234
+ inventoryCollision: {
171235
+ entries: inventory.variations,
171236
+ exists: (entry) => entry.block === blockSlug && entry.slug === variationSlug,
171237
+ message: `A variation inventory entry already exists for ${blockSlug}/${variationSlug}. Choose a different name.`
171238
+ },
171239
+ projectDir
171240
+ });
171241
+ }
171242
+ function assertBlockStyleDoesNotExist(projectDir, blockSlug, styleSlug, inventory) {
171243
+ assertScaffoldDoesNotExist({
171244
+ filesystemCollisions: [
171245
+ {
171246
+ label: "A block style",
171247
+ relativePath: path.join("src", "blocks", blockSlug, "styles", `${styleSlug}.ts`)
171248
+ }
171249
+ ],
171250
+ inventoryCollision: {
171251
+ entries: inventory.blockStyles,
171252
+ exists: (entry) => entry.block === blockSlug && entry.slug === styleSlug,
171253
+ message: `A block style inventory entry already exists for ${blockSlug}/${styleSlug}. Choose a different name.`
171254
+ },
171255
+ projectDir
171256
+ });
171257
+ }
171258
+ function assertBlockTransformDoesNotExist(projectDir, blockSlug, transformSlug, inventory) {
171259
+ assertScaffoldDoesNotExist({
171260
+ filesystemCollisions: [
171261
+ {
171262
+ label: "A block transform",
171263
+ relativePath: path.join("src", "blocks", blockSlug, "transforms", `${transformSlug}.ts`)
171264
+ }
171265
+ ],
171266
+ inventoryCollision: {
171267
+ entries: inventory.blockTransforms,
171268
+ exists: (entry) => entry.block === blockSlug && entry.slug === transformSlug,
171269
+ message: `A block transform inventory entry already exists for ${blockSlug}/${transformSlug}. Choose a different name.`
171270
+ },
171271
+ projectDir
171272
+ });
171273
+ }
171224
171274
  function assertPatternDoesNotExist(projectDir, patternSlug, inventory) {
171225
- const patternPath = path.join(projectDir, "src", "patterns", `${patternSlug}.php`);
171226
- if (fs.existsSync(patternPath)) {
171227
- throw new Error(`A pattern already exists at ${path.relative(projectDir, patternPath)}. Choose a different name.`);
171228
- }
171229
- if (inventory.patterns.some((entry) => entry.slug === patternSlug)) {
171230
- throw new Error(`A pattern inventory entry already exists for ${patternSlug}. Choose a different name.`);
171231
- }
171275
+ assertScaffoldDoesNotExist({
171276
+ filesystemCollisions: [
171277
+ {
171278
+ label: "A pattern",
171279
+ relativePath: path.join("src", "patterns", `${patternSlug}.php`)
171280
+ }
171281
+ ],
171282
+ inventoryCollision: {
171283
+ entries: inventory.patterns,
171284
+ exists: (entry) => entry.slug === patternSlug,
171285
+ message: `A pattern inventory entry already exists for ${patternSlug}. Choose a different name.`
171286
+ },
171287
+ projectDir
171288
+ });
171232
171289
  }
171233
171290
  function assertBindingSourceDoesNotExist(projectDir, bindingSourceSlug, inventory) {
171234
- const bindingSourceDir = path.join(projectDir, "src", "bindings", bindingSourceSlug);
171235
- if (fs.existsSync(bindingSourceDir)) {
171236
- throw new Error(`A binding source already exists at ${path.relative(projectDir, bindingSourceDir)}. Choose a different name.`);
171237
- }
171238
- if (inventory.bindingSources.some((entry) => entry.slug === bindingSourceSlug)) {
171239
- throw new Error(`A binding source inventory entry already exists for ${bindingSourceSlug}. Choose a different name.`);
171240
- }
171291
+ assertScaffoldDoesNotExist({
171292
+ filesystemCollisions: [
171293
+ {
171294
+ label: "A binding source",
171295
+ relativePath: path.join("src", "bindings", bindingSourceSlug)
171296
+ }
171297
+ ],
171298
+ inventoryCollision: {
171299
+ entries: inventory.bindingSources,
171300
+ exists: (entry) => entry.slug === bindingSourceSlug,
171301
+ message: `A binding source inventory entry already exists for ${bindingSourceSlug}. Choose a different name.`
171302
+ },
171303
+ projectDir
171304
+ });
171241
171305
  }
171242
171306
  function assertRestResourceDoesNotExist(projectDir, restResourceSlug, inventory) {
171243
- const restResourceDir = path.join(projectDir, "src", "rest", restResourceSlug);
171244
- const restResourcePhpPath = path.join(projectDir, "inc", "rest", `${restResourceSlug}.php`);
171245
- if (fs.existsSync(restResourceDir)) {
171246
- throw new Error(`A REST resource already exists at ${path.relative(projectDir, restResourceDir)}. Choose a different name.`);
171247
- }
171248
- if (fs.existsSync(restResourcePhpPath)) {
171249
- throw new Error(`A REST resource bootstrap already exists at ${path.relative(projectDir, restResourcePhpPath)}. Choose a different name.`);
171250
- }
171251
- if (inventory.restResources.some((entry) => entry.slug === restResourceSlug)) {
171252
- throw new Error(`A REST resource inventory entry already exists for ${restResourceSlug}. Choose a different name.`);
171253
- }
171307
+ assertScaffoldDoesNotExist({
171308
+ filesystemCollisions: [
171309
+ {
171310
+ label: "A REST resource",
171311
+ relativePath: path.join("src", "rest", restResourceSlug)
171312
+ },
171313
+ {
171314
+ label: "A REST resource bootstrap",
171315
+ relativePath: path.join("inc", "rest", `${restResourceSlug}.php`)
171316
+ }
171317
+ ],
171318
+ inventoryCollision: {
171319
+ entries: inventory.restResources,
171320
+ exists: (entry) => entry.slug === restResourceSlug,
171321
+ message: `A REST resource inventory entry already exists for ${restResourceSlug}. Choose a different name.`
171322
+ },
171323
+ projectDir
171324
+ });
171254
171325
  }
171255
171326
  function assertAdminViewDoesNotExist(projectDir, adminViewSlug, inventory) {
171256
- const adminViewDir = path.join(projectDir, "src", "admin-views", adminViewSlug);
171257
- const adminViewPhpPath = path.join(projectDir, "inc", "admin-views", `${adminViewSlug}.php`);
171258
- if (fs.existsSync(adminViewDir)) {
171259
- throw new Error(`An admin view already exists at ${path.relative(projectDir, adminViewDir)}. Choose a different name.`);
171260
- }
171261
- if (fs.existsSync(adminViewPhpPath)) {
171262
- throw new Error(`An admin view bootstrap already exists at ${path.relative(projectDir, adminViewPhpPath)}. Choose a different name.`);
171263
- }
171264
- if (inventory.adminViews.some((entry) => entry.slug === adminViewSlug)) {
171265
- throw new Error(`An admin view inventory entry already exists for ${adminViewSlug}. Choose a different name.`);
171266
- }
171327
+ assertScaffoldDoesNotExist({
171328
+ filesystemCollisions: [
171329
+ {
171330
+ label: "An admin view",
171331
+ relativePath: path.join("src", "admin-views", adminViewSlug)
171332
+ },
171333
+ {
171334
+ label: "An admin view bootstrap",
171335
+ relativePath: path.join("inc", "admin-views", `${adminViewSlug}.php`)
171336
+ }
171337
+ ],
171338
+ inventoryCollision: {
171339
+ entries: inventory.adminViews,
171340
+ exists: (entry) => entry.slug === adminViewSlug,
171341
+ message: `An admin view inventory entry already exists for ${adminViewSlug}. Choose a different name.`
171342
+ },
171343
+ projectDir
171344
+ });
171267
171345
  }
171268
171346
  function assertAbilityDoesNotExist(projectDir, abilitySlug, inventory) {
171269
- const abilityDir = path.join(projectDir, "src", "abilities", abilitySlug);
171270
- const abilityPhpPath = path.join(projectDir, "inc", "abilities", `${abilitySlug}.php`);
171271
- if (fs.existsSync(abilityDir)) {
171272
- throw new Error(`An ability scaffold already exists at ${path.relative(projectDir, abilityDir)}. Choose a different name.`);
171273
- }
171274
- if (fs.existsSync(abilityPhpPath)) {
171275
- throw new Error(`An ability bootstrap already exists at ${path.relative(projectDir, abilityPhpPath)}. Choose a different name.`);
171276
- }
171277
- if (inventory.abilities.some((entry) => entry.slug === abilitySlug)) {
171278
- throw new Error(`An ability inventory entry already exists for ${abilitySlug}. Choose a different name.`);
171279
- }
171347
+ assertScaffoldDoesNotExist({
171348
+ filesystemCollisions: [
171349
+ {
171350
+ label: "An ability scaffold",
171351
+ relativePath: path.join("src", "abilities", abilitySlug)
171352
+ },
171353
+ {
171354
+ label: "An ability bootstrap",
171355
+ relativePath: path.join("inc", "abilities", `${abilitySlug}.php`)
171356
+ }
171357
+ ],
171358
+ inventoryCollision: {
171359
+ entries: inventory.abilities,
171360
+ exists: (entry) => entry.slug === abilitySlug,
171361
+ message: `An ability inventory entry already exists for ${abilitySlug}. Choose a different name.`
171362
+ },
171363
+ projectDir
171364
+ });
171280
171365
  }
171281
171366
  function assertAiFeatureDoesNotExist(projectDir, aiFeatureSlug, inventory) {
171282
- const aiFeatureDir = path.join(projectDir, "src", "ai-features", aiFeatureSlug);
171283
- const aiFeaturePhpPath = path.join(projectDir, "inc", "ai-features", `${aiFeatureSlug}.php`);
171284
- if (fs.existsSync(aiFeatureDir)) {
171285
- throw new Error(`An AI feature already exists at ${path.relative(projectDir, aiFeatureDir)}. Choose a different name.`);
171286
- }
171287
- if (fs.existsSync(aiFeaturePhpPath)) {
171288
- throw new Error(`An AI feature bootstrap already exists at ${path.relative(projectDir, aiFeaturePhpPath)}. Choose a different name.`);
171289
- }
171290
- if (inventory.aiFeatures.some((entry) => entry.slug === aiFeatureSlug)) {
171291
- throw new Error(`An AI feature inventory entry already exists for ${aiFeatureSlug}. Choose a different name.`);
171292
- }
171367
+ assertScaffoldDoesNotExist({
171368
+ filesystemCollisions: [
171369
+ {
171370
+ label: "An AI feature",
171371
+ relativePath: path.join("src", "ai-features", aiFeatureSlug)
171372
+ },
171373
+ {
171374
+ label: "An AI feature bootstrap",
171375
+ relativePath: path.join("inc", "ai-features", `${aiFeatureSlug}.php`)
171376
+ }
171377
+ ],
171378
+ inventoryCollision: {
171379
+ entries: inventory.aiFeatures,
171380
+ exists: (entry) => entry.slug === aiFeatureSlug,
171381
+ message: `An AI feature inventory entry already exists for ${aiFeatureSlug}. Choose a different name.`
171382
+ },
171383
+ projectDir
171384
+ });
171293
171385
  }
171294
171386
  function assertEditorPluginDoesNotExist(projectDir, editorPluginSlug, inventory) {
171295
- const editorPluginDir = path.join(projectDir, "src", "editor-plugins", editorPluginSlug);
171296
- if (fs.existsSync(editorPluginDir)) {
171297
- throw new Error(`An editor plugin already exists at ${path.relative(projectDir, editorPluginDir)}. Choose a different name.`);
171298
- }
171299
- if (inventory.editorPlugins.some((entry) => entry.slug === editorPluginSlug)) {
171300
- throw new Error(`An editor plugin inventory entry already exists for ${editorPluginSlug}. Choose a different name.`);
171301
- }
171387
+ assertScaffoldDoesNotExist({
171388
+ filesystemCollisions: [
171389
+ {
171390
+ label: "An editor plugin",
171391
+ relativePath: path.join("src", "editor-plugins", editorPluginSlug)
171392
+ }
171393
+ ],
171394
+ inventoryCollision: {
171395
+ entries: inventory.editorPlugins,
171396
+ exists: (entry) => entry.slug === editorPluginSlug,
171397
+ message: `An editor plugin inventory entry already exists for ${editorPluginSlug}. Choose a different name.`
171398
+ },
171399
+ projectDir
171400
+ });
171302
171401
  }
171303
171402
  function formatAddHelpText() {
171304
171403
  return `Usage:
@@ -171518,7 +171617,9 @@ var WORKSPACE_COMPATIBILITY_CONFIG_FIELD = ` compatibility?: {
171518
171617
  wordpress?: string;
171519
171618
  };
171520
171619
  mode: 'baseline' | 'optional' | 'required';
171620
+ optionalFeatureIds: string[];
171521
171621
  optionalFeatures: string[];
171622
+ requiredFeatureIds: string[];
171522
171623
  requiredFeatures: string[];
171523
171624
  runtimeGates: string[];
171524
171625
  };
@@ -172036,6 +172137,27 @@ function ensureInterfaceField(source, interfaceName, fieldName, fieldSource) {
172036
172137
  return `${start}${body}${body.length > 0 && !body.endsWith(lineEnding) ? lineEnding : ""}${formattedFieldSource}${end}`;
172037
172138
  });
172038
172139
  }
172140
+ function normalizeInterfaceFieldBlock(source, interfaceName, fieldName, fieldSource, requiredFragments) {
172141
+ const interfacePattern = new RegExp(`(export\\s+interface\\s+${escapeRegex(interfaceName)}\\s*\\{\\r?\\n)([\\s\\S]*?)(\\r?\\n\\})`, "u");
172142
+ return source.replace(interfacePattern, (match, start, body, end) => {
172143
+ const fieldPattern = new RegExp(`(^([ \\t]*)${escapeRegex(fieldName)}\\??:\\s*\\{[ \\t]*\\r?\\n)([\\s\\S]*?)(^\\2\\};\\r?\\n?)`, "mu");
172144
+ const fieldMatch = fieldPattern.exec(body);
172145
+ if (!fieldMatch) {
172146
+ return match;
172147
+ }
172148
+ const existingFieldSource = fieldMatch[0];
172149
+ if (requiredFragments.every((fragment) => existingFieldSource.includes(fragment))) {
172150
+ return match;
172151
+ }
172152
+ const lineEnding = start.endsWith(`\r
172153
+ `) ? `\r
172154
+ ` : `
172155
+ `;
172156
+ const formattedFieldSource = `${fieldSource.replace(/\r?\n$/u, "").split(`
172157
+ `).join(lineEnding)}${lineEnding}`;
172158
+ return `${start}${body.slice(0, fieldMatch.index)}${formattedFieldSource}${body.slice(fieldMatch.index + existingFieldSource.length)}${end}`;
172159
+ });
172160
+ }
172039
172161
  function updateWorkspaceInventorySource(source, {
172040
172162
  blockEntries = [],
172041
172163
  blockStyleEntries = [],
@@ -172067,7 +172189,9 @@ function updateWorkspaceInventorySource(source, {
172067
172189
  nextSource = ensureInterfaceField(nextSource, "WorkspaceBindingSourceConfig", "attribute", "\tattribute?: string;");
172068
172190
  nextSource = ensureInterfaceField(nextSource, "WorkspaceBindingSourceConfig", "block", "\tblock?: string;");
172069
172191
  nextSource = ensureInterfaceField(nextSource, "WorkspaceAbilityConfig", "compatibility", WORKSPACE_COMPATIBILITY_CONFIG_FIELD);
172192
+ nextSource = normalizeInterfaceFieldBlock(nextSource, "WorkspaceAbilityConfig", "compatibility", WORKSPACE_COMPATIBILITY_CONFIG_FIELD, ["optionalFeatureIds: string[];", "requiredFeatureIds: string[];"]);
172070
172193
  nextSource = ensureInterfaceField(nextSource, "WorkspaceAiFeatureConfig", "compatibility", WORKSPACE_COMPATIBILITY_CONFIG_FIELD);
172194
+ nextSource = normalizeInterfaceFieldBlock(nextSource, "WorkspaceAiFeatureConfig", "compatibility", WORKSPACE_COMPATIBILITY_CONFIG_FIELD, ["optionalFeatureIds: string[];", "requiredFeatureIds: string[];"]);
172071
172195
  nextSource = appendEntriesAtMarker(nextSource, EDITOR_PLUGIN_CONFIG_ENTRY_MARKER, editorPluginEntries);
172072
172196
  return nextSource;
172073
172197
  }
@@ -172080,6 +172204,6 @@ async function appendWorkspaceInventoryEntries(projectDir, options) {
172080
172204
  }
172081
172205
  }
172082
172206
 
172083
- export { HOOKED_BLOCK_POSITION_SET, HOOKED_BLOCK_ANCHOR_PATTERN, toKebabCase, toSnakeCase, toPascalCase, toCamelCase, toSegmentPascalCase, toTitleCase, validateBlockSlug, validateNamespace, normalizeBlockSlug, resolveNonEmptyNormalizedBlockSlug, buildBlockCssClassName, buildFrontendCssClassName, resolveScaffoldIdentifiers, ADD_KIND_IDS, REST_RESOURCE_METHOD_IDS, EDITOR_PLUGIN_SLOT_IDS, resolveEditorPluginSlotAlias, ADD_BLOCK_TEMPLATE_IDS, REST_RESOURCE_NAMESPACE_PATTERN, assertValidGeneratedSlug, resolveRestResourceNamespace, assertValidRestResourceMethods, assertValidHookedBlockPosition, getWorkspaceBootstrapPath, buildWorkspacePhpPrefix, isAddBlockTemplateId, quoteTsString, patchFile, readOptionalFile, snapshotWorkspaceFiles, rollbackWorkspaceMutation, resolveWorkspaceBlock, assertValidHookAnchor, assertValidEditorPluginSlot, readWorkspaceBlockJson, getMutableBlockHooks, assertVariationDoesNotExist, assertPatternDoesNotExist, assertBindingSourceDoesNotExist, assertRestResourceDoesNotExist, assertAdminViewDoesNotExist, assertAbilityDoesNotExist, assertAiFeatureDoesNotExist, assertEditorPluginDoesNotExist, formatAddHelpText, require_typescript, escapeRegex, quotePhpString, hasPhpFunctionDefinition, findPhpFunctionRange, replacePhpFunctionDefinition, readWorkspaceInventory, getWorkspaceBlockSelectOptions, updateWorkspaceInventorySource, appendWorkspaceInventoryEntries };
172207
+ export { HOOKED_BLOCK_POSITION_SET, HOOKED_BLOCK_ANCHOR_PATTERN, toKebabCase, toSnakeCase, toPascalCase, toCamelCase, toSegmentPascalCase, toTitleCase, validateBlockSlug, validateNamespace, normalizeBlockSlug, resolveNonEmptyNormalizedBlockSlug, buildBlockCssClassName, buildFrontendCssClassName, resolveScaffoldIdentifiers, ADD_KIND_IDS, REST_RESOURCE_METHOD_IDS, EDITOR_PLUGIN_SLOT_IDS, resolveEditorPluginSlotAlias, ADD_BLOCK_TEMPLATE_IDS, REST_RESOURCE_NAMESPACE_PATTERN, assertValidGeneratedSlug, resolveRestResourceNamespace, assertValidRestResourceMethods, assertValidHookedBlockPosition, getWorkspaceBootstrapPath, buildWorkspacePhpPrefix, isAddBlockTemplateId, quoteTsString, patchFile, readOptionalFile, snapshotWorkspaceFiles, rollbackWorkspaceMutation, resolveWorkspaceBlock, assertValidHookAnchor, assertValidEditorPluginSlot, readWorkspaceBlockJson, getMutableBlockHooks, assertVariationDoesNotExist, assertBlockStyleDoesNotExist, assertBlockTransformDoesNotExist, assertPatternDoesNotExist, assertBindingSourceDoesNotExist, assertRestResourceDoesNotExist, assertAdminViewDoesNotExist, assertAbilityDoesNotExist, assertAiFeatureDoesNotExist, assertEditorPluginDoesNotExist, formatAddHelpText, require_typescript, escapeRegex, quotePhpString, hasPhpFunctionDefinition, findPhpFunctionRange, replacePhpFunctionDefinition, readWorkspaceInventory, getWorkspaceBlockSelectOptions, updateWorkspaceInventorySource, appendWorkspaceInventoryEntries };
172084
172208
 
172085
- //# debugId=9C33172215A7E9B864756E2164756E21
172209
+ //# debugId=C51F6016D6101EE964756E2164756E21
package/dist-bunli/cli.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  mergeWpTypiaUserConfig,
20
20
  package_default,
21
21
  writeStructuredCliDiagnosticError
22
- } from "./cli-0p8wz4a4.js";
22
+ } from "./cli-mpgt29xc.js";
23
23
  import"./cli-03j0axbt.js";
24
24
  import {
25
25
  GLOBAL_FLAGS,
@@ -2453,7 +2453,7 @@ async function formatCliError(error) {
2453
2453
  }
2454
2454
  async function createWpTypiaCli(options = {}) {
2455
2455
  applyStandaloneSupportLayoutEnv();
2456
- const { wpTypiaCommands } = await import("./command-list-tgyxdhb0.js");
2456
+ const { wpTypiaCommands } = await import("./command-list-wzej5c7v.js");
2457
2457
  const cli = await createCLI({
2458
2458
  ...bunliConfig,
2459
2459
  description: package_default.description,