wp-typia 0.22.5 → 0.22.7

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.
@@ -2,6 +2,9 @@
2
2
  import {
3
3
  exports_external
4
4
  } from "./cli-hv2yedw2.js";
5
+ import {
6
+ ADD_KIND_IDS
7
+ } from "./cli-fys8vm2t.js";
5
8
  import {
6
9
  CLI_DIAGNOSTIC_CODES,
7
10
  createCliCommandError,
@@ -11,7 +14,7 @@ import {
11
14
  // package.json
12
15
  var package_default = {
13
16
  name: "wp-typia",
14
- version: "0.22.5",
17
+ version: "0.22.7",
15
18
  description: "Canonical CLI package for wp-typia scaffolding and project workflows",
16
19
  packageManager: "bun@1.3.11",
17
20
  type: "module",
@@ -81,7 +84,7 @@ var package_default = {
81
84
  "@bunli/tui": "0.6.0",
82
85
  "@bunli/utils": "0.6.0",
83
86
  "@wp-typia/api-client": "^0.4.5",
84
- "@wp-typia/project-tools": "0.22.5",
87
+ "@wp-typia/project-tools": "0.22.7",
85
88
  "better-result": "^2.7.0",
86
89
  react: "^19.2.5",
87
90
  "react-dom": "^19.2.5",
@@ -467,6 +470,9 @@ function buildArgvWalkerRoutingMetadata(...metadataMaps) {
467
470
  };
468
471
  }
469
472
  var COMMAND_ROUTING_METADATA = buildArgvWalkerRoutingMetadata(ALL_COMMAND_OPTION_METADATA);
473
+ function createMissingOptionValueError(optionLabel) {
474
+ return createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.MISSING_ARGUMENT, `\`${optionLabel}\` requires a value.`);
475
+ }
470
476
  function extractKnownOptionValuesFromArgv(argv, options) {
471
477
  const flags = {};
472
478
  const nextArgv = [];
@@ -492,7 +498,7 @@ function extractKnownOptionValuesFromArgv(argv, options) {
492
498
  }
493
499
  const next = argv[index + 1];
494
500
  if (!next || next.startsWith("-")) {
495
- throw new Error(`\`${arg}\` requires a value.`);
501
+ throw createMissingOptionValueError(arg);
496
502
  }
497
503
  flags[shortFlag.name] = next;
498
504
  index += 1;
@@ -517,14 +523,14 @@ function extractKnownOptionValuesFromArgv(argv, options) {
517
523
  }
518
524
  if (inlineValue !== undefined) {
519
525
  if (!inlineValue) {
520
- throw new Error(`\`--${rawName}\` requires a value.`);
526
+ throw createMissingOptionValueError(`--${rawName}`);
521
527
  }
522
528
  flags[rawName] = inlineValue;
523
529
  continue;
524
530
  }
525
531
  const next = argv[index + 1];
526
532
  if (!next || next.startsWith("-")) {
527
- throw new Error(`\`--${rawName}\` requires a value.`);
533
+ throw createMissingOptionValueError(`--${rawName}`);
528
534
  }
529
535
  flags[rawName] = next;
530
536
  index += 1;
@@ -698,23 +704,6 @@ function writeStructuredCliDiagnosticError(argv, error) {
698
704
  process.exitCode = 1;
699
705
  return true;
700
706
  }
701
-
702
- // src/add-kind-ids.ts
703
- var ADD_KIND_IDS = [
704
- "admin-view",
705
- "block",
706
- "variation",
707
- "style",
708
- "transform",
709
- "pattern",
710
- "binding-source",
711
- "rest-resource",
712
- "ability",
713
- "ai-feature",
714
- "hooked-block",
715
- "editor-plugin"
716
- ];
717
-
718
707
  // src/command-registry.ts
719
708
  var WP_TYPIA_CANONICAL_CREATE_USAGE = "wp-typia create <project-dir>";
720
709
  var WP_TYPIA_COMMAND_REGISTRY = [
@@ -863,6 +852,78 @@ var WP_TYPIA_CONFIG_SOURCES = [
863
852
  ".wp-typiarc",
864
853
  ".wp-typiarc.json"
865
854
  ];
855
+ var wpTypiaSchemaSourceSchema = exports_external.object({
856
+ namespace: exports_external.string(),
857
+ path: exports_external.string()
858
+ }).strict();
859
+ var createConfigSchema = exports_external.object({
860
+ "alternate-render-targets": exports_external.string().optional(),
861
+ "inner-blocks-preset": exports_external.string().optional(),
862
+ "data-storage": exports_external.string().optional(),
863
+ "dry-run": exports_external.boolean().optional(),
864
+ "external-layer-id": exports_external.string().optional(),
865
+ "external-layer-source": exports_external.string().optional(),
866
+ namespace: exports_external.string().optional(),
867
+ "no-install": exports_external.boolean().optional(),
868
+ "package-manager": exports_external.string().optional(),
869
+ "persistence-policy": exports_external.string().optional(),
870
+ "php-prefix": exports_external.string().optional(),
871
+ "query-post-type": exports_external.string().optional(),
872
+ template: exports_external.string().optional(),
873
+ "text-domain": exports_external.string().optional(),
874
+ variant: exports_external.string().optional(),
875
+ "with-migration-ui": exports_external.boolean().optional(),
876
+ "with-test-preset": exports_external.boolean().optional(),
877
+ "with-wp-env": exports_external.boolean().optional(),
878
+ yes: exports_external.boolean().optional()
879
+ }).strict();
880
+ var addBlockConfigSchema = exports_external.object({
881
+ "alternate-render-targets": exports_external.string().optional(),
882
+ "data-storage": exports_external.string().optional(),
883
+ "external-layer-id": exports_external.string().optional(),
884
+ "external-layer-source": exports_external.string().optional(),
885
+ "inner-blocks-preset": exports_external.string().optional(),
886
+ "persistence-policy": exports_external.string().optional(),
887
+ template: exports_external.string().optional()
888
+ }).strict();
889
+ var addConfigSchema = exports_external.object({
890
+ block: addBlockConfigSchema.optional()
891
+ }).strict();
892
+ var mcpConfigSchema = exports_external.object({
893
+ schemaSources: exports_external.array(wpTypiaSchemaSourceSchema).optional()
894
+ }).strict();
895
+ var wpTypiaUserConfigSchema = exports_external.object({
896
+ add: addConfigSchema.optional(),
897
+ create: createConfigSchema.optional(),
898
+ mcp: mcpConfigSchema.optional()
899
+ }).strict();
900
+ function formatIssuePath(issuePath) {
901
+ if (issuePath.length === 0) {
902
+ return "config";
903
+ }
904
+ return issuePath.map((segment) => typeof segment === "number" ? `[${segment}]` : `.${String(segment)}`).join("").replace(/^\./u, "");
905
+ }
906
+ function formatConfigValidationIssue(issue) {
907
+ const pathLabel = formatIssuePath(issue.path);
908
+ if (issue.code === "unrecognized_keys") {
909
+ const keys = issue.keys.map((key) => `"${String(key)}"`).join(", ");
910
+ const label = issue.keys.length === 1 ? "unknown key" : "unknown keys";
911
+ return `${pathLabel}: ${label} ${keys}. Unknown keys are errors in wp-typia config.`;
912
+ }
913
+ return `${pathLabel}: ${issue.message}`;
914
+ }
915
+ function validateWpTypiaUserConfig(value, source) {
916
+ const result = wpTypiaUserConfigSchema.safeParse(value);
917
+ if (result.success) {
918
+ return result.data;
919
+ }
920
+ const issueLines = result.error.issues.map(formatConfigValidationIssue);
921
+ throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, [
922
+ `Invalid wp-typia config at ${source}.`,
923
+ ...issueLines.map((line) => `- ${line}`)
924
+ ].join(`
925
+ `));
926
+ }
866
927
  function deepMerge(base, incoming) {
867
928
  const merged = { ...base };
868
929
  for (const [key, value] of Object.entries(incoming)) {
@@ -884,18 +945,21 @@ async function readJsonFile(filePath) {
884
945
  source = await fs.readFile(filePath, "utf8");
885
946
  } catch (error) {
886
947
  if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
887
- return null;
948
+ return;
888
949
  }
889
950
  throw error;
890
951
  }
891
952
  try {
892
- const parsed = JSON.parse(source);
893
- return isRecord(parsed) ? parsed : null;
953
+ return JSON.parse(source);
894
954
  } catch (error) {
895
955
  const message = error instanceof Error ? error.message : String(error);
896
956
  throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, `Unable to parse ${filePath}: ${message}`, error instanceof Error ? { cause: error } : undefined);
897
957
  }
898
958
  }
959
+ async function readWpTypiaConfigFile(filePath) {
960
+ const parsed = await readJsonFile(filePath);
961
+ return parsed === undefined ? null : validateWpTypiaUserConfig(parsed, filePath);
962
+ }
899
963
  function resolveConfigPath(cwd, source) {
900
964
  if (source.startsWith("~/")) {
901
965
  return path.join(os.homedir(), source.slice(2));
@@ -906,21 +970,23 @@ function mergeWpTypiaUserConfig(base, incoming) {
906
970
  return deepMerge(base, incoming);
907
971
  }
908
972
  async function loadWpTypiaUserConfigFromSource(cwd, source) {
909
- const config = await readJsonFile(resolveConfigPath(cwd, source));
973
+ const config = await readWpTypiaConfigFile(resolveConfigPath(cwd, source));
910
974
  return config ?? {};
911
975
  }
912
976
  async function loadWpTypiaUserConfig(cwd) {
913
977
  let merged = {};
914
978
  for (const source of WP_TYPIA_CONFIG_SOURCES) {
915
979
  const configPath = resolveConfigPath(cwd, source);
916
- const config = await readJsonFile(configPath);
980
+ const config = await readWpTypiaConfigFile(configPath);
917
981
  if (config) {
918
982
  merged = deepMerge(merged, config);
919
983
  }
920
984
  }
921
- const packageJson = await readJsonFile(path.join(cwd, "package.json"));
922
- if (packageJson && isRecord(packageJson["wp-typia"])) {
923
- merged = deepMerge(merged, packageJson["wp-typia"]);
985
+ const packageJsonPath = path.join(cwd, "package.json");
986
+ const packageJson = await readJsonFile(packageJsonPath);
987
+ if (isRecord(packageJson) && "wp-typia" in packageJson) {
988
+ const packageConfig = validateWpTypiaUserConfig(packageJson["wp-typia"], `${packageJsonPath}#wp-typia`);
989
+ merged = deepMerge(merged, packageConfig);
924
990
  }
925
991
  return merged;
926
992
  }
@@ -938,6 +1004,6 @@ function getMcpSchemaSources(config) {
938
1004
  function createPlugin(input) {
939
1005
  return input;
940
1006
  }
941
- export { createPlugin, package_default, collectPositionalIndexes, findFirstPositionalIndex, 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, normalizeCliOutputFormatArgv, validateCliOutputFormatArgv, 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 };
1007
+ export { createPlugin, package_default, collectPositionalIndexes, findFirstPositionalIndex, 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, createMissingOptionValueError, extractKnownOptionValuesFromArgv, resolveCommandOptionValues, normalizeCliOutputFormatArgv, validateCliOutputFormatArgv, prefersStructuredCliOutput, emitCliDiagnosticFailure, writeStructuredCliDiagnosticError, 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 };
942
1008
 
943
- //# debugId=B9D55210C12B16C464756E2164756E21
1009
+ //# debugId=8CED1A44380ADAE964756E2164756E21
@@ -21,8 +21,9 @@ import {
21
21
  escapeRegex,
22
22
  readWorkspaceInventory,
23
23
  resolveEditorPluginSlotAlias
24
- } from "./cli-j30rk466.js";
24
+ } from "./cli-ta3y0hp2.js";
25
25
  import"./cli-t73q5aqz.js";
26
+ import"./cli-fys8vm2t.js";
26
27
  import {
27
28
  CLI_DIAGNOSTIC_CODES,
28
29
  createCliCommandError,
@@ -35,8 +36,8 @@ import {
35
36
  getInvalidWorkspaceProjectReason,
36
37
  parseWorkspacePackageJson,
37
38
  tryResolveWorkspaceProject
38
- } from "./cli-btbpt84c.js";
39
- import"./cli-6bhfzq5e.js";
39
+ } from "./cli-hhp1d348.js";
40
+ import"./cli-52ke0ptp.js";
40
41
  import"./cli-xnn9xjcy.js";
41
42
 
42
43
  // ../wp-typia-project-tools/src/runtime/cli-doctor-environment.ts
@@ -175,6 +176,9 @@ function createDoctorScopeCheck(status, detail) {
175
176
  function getWorkspaceBootstrapRelativePath(packageName) {
176
177
  return `${packageName.split("/").pop() ?? packageName}.php`;
177
178
  }
179
+ function resolveWorkspaceBootstrapPath(projectDir, packageName) {
180
+ return path2.join(projectDir, getWorkspaceBootstrapRelativePath(packageName));
181
+ }
178
182
  function checkExistingFiles(projectDir, label, filePaths) {
179
183
  const missing = filePaths.filter((filePath) => typeof filePath === "string").filter((filePath) => !fs2.existsSync(path2.join(projectDir, filePath)));
180
184
  return createDoctorCheck2(label, missing.length === 0 ? "pass" : "fail", missing.length === 0 ? "All referenced files exist" : `Missing: ${missing.join(", ")}`);
@@ -182,8 +186,7 @@ function checkExistingFiles(projectDir, label, filePaths) {
182
186
 
183
187
  // ../wp-typia-project-tools/src/runtime/cli-doctor-workspace-bindings.ts
184
188
  function checkWorkspaceBindingBootstrap(projectDir, packageName) {
185
- const packageBaseName = packageName.split("/").pop() ?? packageName;
186
- const bootstrapPath = path3.join(projectDir, `${packageBaseName}.php`);
189
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
187
190
  if (!fs3.existsSync(bootstrapPath)) {
188
191
  return createDoctorCheck2("Binding bootstrap", "fail", `Missing ${path3.basename(bootstrapPath)}`);
189
192
  }
@@ -558,8 +561,7 @@ function checkWorkspaceBlockIframeCompatibility(projectDir, blockSlug) {
558
561
  ];
559
562
  }
560
563
  function checkWorkspacePatternBootstrap(projectDir, packageName) {
561
- const packageBaseName = packageName.split("/").pop() ?? packageName;
562
- const bootstrapPath = path4.join(projectDir, `${packageBaseName}.php`);
564
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
563
565
  if (!fs4.existsSync(bootstrapPath)) {
564
566
  return createDoctorCheck2("Pattern bootstrap", "fail", `Missing ${path4.basename(bootstrapPath)}`);
565
567
  }
@@ -715,8 +717,7 @@ function checkWorkspaceRestResourceConfig(restResource) {
715
717
  return createDoctorCheck2(`REST resource config ${restResource.slug}`, hasNamespace && hasMethods ? "pass" : "fail", hasNamespace && hasMethods ? `REST resource namespace ${restResource.namespace} with methods ${restResource.methods.join(", ")}` : "REST resource namespace or methods are invalid");
716
718
  }
717
719
  function checkWorkspaceRestResourceBootstrap(projectDir, packageName, phpPrefix) {
718
- const packageBaseName = packageName.split("/").pop() ?? packageName;
719
- const bootstrapPath = path5.join(projectDir, `${packageBaseName}.php`);
720
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
720
721
  if (!fs5.existsSync(bootstrapPath)) {
721
722
  return createDoctorCheck2("REST resource bootstrap", "fail", `Missing ${path5.basename(bootstrapPath)}`);
722
723
  }
@@ -755,8 +756,7 @@ function checkWorkspaceAbilityConfig(projectDir, ability) {
755
756
  }
756
757
  }
757
758
  function checkWorkspaceAbilityBootstrap(projectDir, packageName, phpPrefix) {
758
- const packageBaseName = packageName.split("/").pop() ?? packageName;
759
- const bootstrapPath = path5.join(projectDir, `${packageBaseName}.php`);
759
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
760
760
  if (!fs5.existsSync(bootstrapPath)) {
761
761
  return createDoctorCheck2("Ability bootstrap", "fail", `Missing ${path5.basename(bootstrapPath)}`);
762
762
  }
@@ -811,8 +811,7 @@ function checkWorkspaceAiFeatureConfig(aiFeature) {
811
811
  return createDoctorCheck2(`AI feature config ${aiFeature.slug}`, hasNamespace ? "pass" : "fail", hasNamespace ? `AI feature namespace ${aiFeature.namespace} is valid` : "AI feature namespace is invalid");
812
812
  }
813
813
  function checkWorkspaceAiFeatureBootstrap(projectDir, packageName, phpPrefix) {
814
- const packageBaseName = packageName.split("/").pop() ?? packageName;
815
- const bootstrapPath = path5.join(projectDir, `${packageBaseName}.php`);
814
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
816
815
  if (!fs5.existsSync(bootstrapPath)) {
817
816
  return createDoctorCheck2("AI feature bootstrap", "fail", `Missing ${path5.basename(bootstrapPath)}`);
818
817
  }
@@ -840,8 +839,7 @@ function checkWorkspaceEditorPluginConfig(editorPlugin) {
840
839
  return createDoctorCheck2(`Editor plugin config ${editorPlugin.slug}`, isValidSlot ? "pass" : "fail", isValidSlot ? `Editor plugin slot ${editorPlugin.slot} is supported as ${normalizedSlot}` : `Unsupported editor plugin slot "${editorPlugin.slot}". Expected one of: ${EDITOR_PLUGIN_SLOT_IDS.join(", ")} or legacy aliases PluginSidebar, PluginDocumentSettingPanel.`);
841
840
  }
842
841
  function checkWorkspaceEditorPluginBootstrap(projectDir, packageName, phpPrefix) {
843
- const packageBaseName = packageName.split("/").pop() ?? packageName;
844
- const bootstrapPath = path5.join(projectDir, `${packageBaseName}.php`);
842
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
845
843
  if (!fs5.existsSync(bootstrapPath)) {
846
844
  return createDoctorCheck2("Editor plugin bootstrap", "fail", `Missing ${path5.basename(bootstrapPath)}`);
847
845
  }
@@ -895,8 +893,7 @@ function checkWorkspaceAdminViewConfig(adminView, inventory) {
895
893
  return createDoctorCheck2(`Admin view config ${adminView.slug}`, isValid ? "pass" : "fail", isValid ? `Admin view source ${source} is list-capable` : "Admin view source must use rest-resource:<slug> with a list-capable REST resource or core-data:<postType|taxonomy>/<name>");
896
894
  }
897
895
  function checkWorkspaceAdminViewBootstrap(projectDir, packageName, phpPrefix) {
898
- const packageBaseName = packageName.split("/").pop() ?? packageName;
899
- const bootstrapPath = path5.join(projectDir, `${packageBaseName}.php`);
896
+ const bootstrapPath = resolveWorkspaceBootstrapPath(projectDir, packageName);
900
897
  if (!fs5.existsSync(bootstrapPath)) {
901
898
  return createDoctorCheck2("Admin view bootstrap", "fail", `Missing ${path5.basename(bootstrapPath)}`);
902
899
  }
@@ -1117,4 +1114,4 @@ export {
1117
1114
  getDoctorChecks
1118
1115
  };
1119
1116
 
1120
- //# debugId=08A020B4B453391764756E2164756E21
1117
+ //# debugId=3C7A7D362A24E1A964756E2164756E21
@@ -0,0 +1,20 @@
1
+ // @bun
2
+ // ../wp-typia-project-tools/src/runtime/cli-add-kind-ids.ts
3
+ var ADD_KIND_IDS = [
4
+ "admin-view",
5
+ "block",
6
+ "variation",
7
+ "style",
8
+ "transform",
9
+ "pattern",
10
+ "binding-source",
11
+ "rest-resource",
12
+ "ability",
13
+ "ai-feature",
14
+ "hooked-block",
15
+ "editor-plugin"
16
+ ];
17
+
18
+ export { ADD_KIND_IDS };
19
+
20
+ //# debugId=B2A14CEE6DB922C564756E2164756E21
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  parsePackageManagerField
4
- } from "./cli-6bhfzq5e.js";
4
+ } from "./cli-52ke0ptp.js";
5
5
 
6
6
  // ../wp-typia-project-tools/src/runtime/workspace-project.ts
7
7
  import fs from "fs";