wp-typia 0.24.1 → 0.24.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.
- package/dist-bunli/.bunli/commands.gen.js +346 -323
- package/dist-bunli/{cli-gaq29kzp.js → cli-377p86mf.js} +1 -1
- package/dist-bunli/{cli-1xt99e09.js → cli-4pzxbk4s.js} +36 -13
- package/dist-bunli/{cli-zjw3eqfj.js → cli-84c7wff4.js} +1 -1
- package/dist-bunli/{cli-add-mr731xtv.js → cli-add-mxxk5rep.js} +20 -12
- package/dist-bunli/{cli-doctor-kf9gwdhh.js → cli-doctor-6fyxq940.js} +2 -2
- package/dist-bunli/{cli-h2v72j8q.js → cli-fv4h3ydt.js} +188 -188
- package/dist-bunli/{cli-init-557vq109.js → cli-init-7avk42dh.js} +2 -2
- package/dist-bunli/{cli-4ah8dawy.js → cli-kfm9mm68.js} +3130 -3132
- package/dist-bunli/{cli-scaffold-bt1ttnkg.js → cli-scaffold-0bb6pr3w.js} +95 -133
- package/dist-bunli/{cli-fzhkqzc7.js → cli-tj7ajdvf.js} +1 -1
- package/dist-bunli/cli.js +2 -2
- package/dist-bunli/{command-list-bd2582k1.js → command-list-bgwaa2f4.js} +73 -33
- package/dist-bunli/{migrations-ky53fj2h.js → migrations-3vngdy51.js} +2 -2
- package/dist-bunli/node-cli.js +154 -161
- package/package.json +2 -2
|
@@ -170921,9 +170921,162 @@ Additional information: BADCLIENT: Bad error code, ${badCode} not found in range
|
|
|
170921
170921
|
} });
|
|
170922
170922
|
});
|
|
170923
170923
|
|
|
170924
|
-
// ../wp-typia-project-tools/src/runtime/
|
|
170925
|
-
|
|
170926
|
-
|
|
170924
|
+
// ../wp-typia-project-tools/src/runtime/string-case.ts
|
|
170925
|
+
var COMMON_ACRONYM_PREFIXES = [
|
|
170926
|
+
"HTML",
|
|
170927
|
+
"HTTP",
|
|
170928
|
+
"JSON",
|
|
170929
|
+
"REST",
|
|
170930
|
+
"UUID",
|
|
170931
|
+
"AJAX",
|
|
170932
|
+
"API",
|
|
170933
|
+
"CPT",
|
|
170934
|
+
"CSS",
|
|
170935
|
+
"CTA",
|
|
170936
|
+
"DOM",
|
|
170937
|
+
"PHP",
|
|
170938
|
+
"SQL",
|
|
170939
|
+
"SVG",
|
|
170940
|
+
"URL",
|
|
170941
|
+
"XML",
|
|
170942
|
+
"ID",
|
|
170943
|
+
"JS",
|
|
170944
|
+
"UI",
|
|
170945
|
+
"WP"
|
|
170946
|
+
];
|
|
170947
|
+
var COMMON_ACRONYM_LOWERCASE_SUFFIXES = ["slug"];
|
|
170948
|
+
function capitalizeSegment(segment) {
|
|
170949
|
+
return segment.charAt(0).toUpperCase() + segment.slice(1);
|
|
170950
|
+
}
|
|
170951
|
+
function findCommonAcronymPrefix(segment) {
|
|
170952
|
+
return COMMON_ACRONYM_PREFIXES.find((prefix) => segment.startsWith(prefix));
|
|
170953
|
+
}
|
|
170954
|
+
function isCommonAcronymLowercaseSuffix(suffix) {
|
|
170955
|
+
return COMMON_ACRONYM_LOWERCASE_SUFFIXES.includes(suffix);
|
|
170956
|
+
}
|
|
170957
|
+
function splitKnownAcronymSegment(segment) {
|
|
170958
|
+
const prefixes = [];
|
|
170959
|
+
let remaining = segment;
|
|
170960
|
+
while (remaining.length > 0) {
|
|
170961
|
+
const prefix = findCommonAcronymPrefix(remaining);
|
|
170962
|
+
if (!prefix) {
|
|
170963
|
+
break;
|
|
170964
|
+
}
|
|
170965
|
+
const suffix = remaining.slice(prefix.length);
|
|
170966
|
+
if (/^[A-Z][a-z]/.test(suffix)) {
|
|
170967
|
+
return [...prefixes, prefix, suffix].join("-");
|
|
170968
|
+
}
|
|
170969
|
+
if (/^[a-z]+$/.test(suffix) && isCommonAcronymLowercaseSuffix(suffix)) {
|
|
170970
|
+
return [...prefixes, prefix, suffix].join("-");
|
|
170971
|
+
}
|
|
170972
|
+
if (!findCommonAcronymPrefix(suffix)) {
|
|
170973
|
+
break;
|
|
170974
|
+
}
|
|
170975
|
+
prefixes.push(prefix);
|
|
170976
|
+
remaining = suffix;
|
|
170977
|
+
}
|
|
170978
|
+
return segment;
|
|
170979
|
+
}
|
|
170980
|
+
function splitAcronymBoundary(value) {
|
|
170981
|
+
return value.replace(/[A-Z]{2,}[a-z]+/g, splitKnownAcronymSegment);
|
|
170982
|
+
}
|
|
170983
|
+
function toKebabCase(input) {
|
|
170984
|
+
return splitAcronymBoundary(input.trim()).replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[^A-Za-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-").toLowerCase();
|
|
170985
|
+
}
|
|
170986
|
+
function toSnakeCase(input) {
|
|
170987
|
+
return toKebabCase(input).replace(/-/g, "_");
|
|
170988
|
+
}
|
|
170989
|
+
function toPascalCase(input) {
|
|
170990
|
+
return toKebabCase(input).split("-").filter(Boolean).map(capitalizeSegment).join("");
|
|
170991
|
+
}
|
|
170992
|
+
function toCamelCase(input) {
|
|
170993
|
+
const pascalCase = toPascalCase(input);
|
|
170994
|
+
return `${pascalCase.charAt(0).toLowerCase()}${pascalCase.slice(1)}`;
|
|
170995
|
+
}
|
|
170996
|
+
function toSegmentPascalCase(input) {
|
|
170997
|
+
return input.replace(/[^A-Za-z0-9]+/g, " ").trim().split(/\s+/).filter(Boolean).map(capitalizeSegment).join("");
|
|
170998
|
+
}
|
|
170999
|
+
function toTitleCase(input) {
|
|
171000
|
+
return toKebabCase(input).split("-").filter(Boolean).map(capitalizeSegment).join(" ");
|
|
171001
|
+
}
|
|
171002
|
+
|
|
171003
|
+
// ../wp-typia-project-tools/src/runtime/scaffold-identifiers.ts
|
|
171004
|
+
var BLOCK_SLUG_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
171005
|
+
var PHP_PREFIX_PATTERN = /^[a-z_][a-z0-9_]*$/;
|
|
171006
|
+
var PHP_PREFIX_MAX_LENGTH = 50;
|
|
171007
|
+
function validateBlockSlug(input) {
|
|
171008
|
+
return BLOCK_SLUG_PATTERN.test(input) || "Use lowercase letters, numbers, and hyphens only";
|
|
171009
|
+
}
|
|
171010
|
+
function validateNamespace(input) {
|
|
171011
|
+
return BLOCK_SLUG_PATTERN.test(toKebabCase(input)) ? true : "Use lowercase letters, numbers, and hyphens only";
|
|
171012
|
+
}
|
|
171013
|
+
function validateTextDomain(input) {
|
|
171014
|
+
return BLOCK_SLUG_PATTERN.test(toKebabCase(input)) ? true : "Use lowercase letters, numbers, and hyphens only";
|
|
171015
|
+
}
|
|
171016
|
+
function validatePhpPrefix(input) {
|
|
171017
|
+
const normalizedPrefix = toSnakeCase(input);
|
|
171018
|
+
if (normalizedPrefix.length > PHP_PREFIX_MAX_LENGTH) {
|
|
171019
|
+
return `Use ${PHP_PREFIX_MAX_LENGTH} characters or fewer to keep generated database identifiers within MySQL limits`;
|
|
171020
|
+
}
|
|
171021
|
+
return PHP_PREFIX_PATTERN.test(normalizedPrefix) ? true : "Use letters, numbers, and underscores only, starting with a letter";
|
|
171022
|
+
}
|
|
171023
|
+
function assertValidIdentifier(label, value, validate) {
|
|
171024
|
+
const result = validate(value);
|
|
171025
|
+
if (result !== true) {
|
|
171026
|
+
throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, typeof result === "string" ? `${label}: ${result}` : `${label} is invalid`);
|
|
171027
|
+
}
|
|
171028
|
+
return value;
|
|
171029
|
+
}
|
|
171030
|
+
function normalizeBlockSlug(input) {
|
|
171031
|
+
return toKebabCase(input);
|
|
171032
|
+
}
|
|
171033
|
+
function resolveNonEmptyNormalizedBlockSlug(options) {
|
|
171034
|
+
const normalizedSlug = normalizeBlockSlug(options.input);
|
|
171035
|
+
if (normalizedSlug.length > 0) {
|
|
171036
|
+
return normalizedSlug;
|
|
171037
|
+
}
|
|
171038
|
+
if (options.input.trim().length === 0) {
|
|
171039
|
+
throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.MISSING_ARGUMENT, `${options.label} is required. Use \`${options.usage}\`.`);
|
|
171040
|
+
}
|
|
171041
|
+
throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, `${options.label} "${options.input.trim()}" normalizes to an empty slug. Use letters or numbers so wp-typia can generate a block slug.`);
|
|
171042
|
+
}
|
|
171043
|
+
function resolveValidatedBlockSlug(value) {
|
|
171044
|
+
return assertValidIdentifier("Block slug", normalizeBlockSlug(value), validateBlockSlug);
|
|
171045
|
+
}
|
|
171046
|
+
function resolveValidatedNamespace(value) {
|
|
171047
|
+
return assertValidIdentifier("Namespace", toKebabCase(value), validateNamespace);
|
|
171048
|
+
}
|
|
171049
|
+
function resolveValidatedTextDomain(value) {
|
|
171050
|
+
return assertValidIdentifier("Text domain", toKebabCase(value), validateTextDomain);
|
|
171051
|
+
}
|
|
171052
|
+
function resolveValidatedPhpPrefix(value) {
|
|
171053
|
+
return assertValidIdentifier("PHP prefix", toSnakeCase(value), validatePhpPrefix);
|
|
171054
|
+
}
|
|
171055
|
+
function buildBlockCssClassName(namespace, slug) {
|
|
171056
|
+
const normalizedSlug = resolveValidatedBlockSlug(slug);
|
|
171057
|
+
const normalizedNamespace = typeof namespace === "string" && namespace.trim().length > 0 ? resolveValidatedNamespace(namespace) : "";
|
|
171058
|
+
if (normalizedNamespace === normalizedSlug) {
|
|
171059
|
+
return `wp-block-${normalizedSlug}-block`;
|
|
171060
|
+
}
|
|
171061
|
+
return normalizedNamespace.length > 0 ? `wp-block-${normalizedNamespace}-${normalizedSlug}` : `wp-block-${normalizedSlug}`;
|
|
171062
|
+
}
|
|
171063
|
+
function buildFrontendCssClassName(blockCssClassName) {
|
|
171064
|
+
return `${blockCssClassName}-frontend`;
|
|
171065
|
+
}
|
|
171066
|
+
function resolveScaffoldIdentifiers({
|
|
171067
|
+
namespace,
|
|
171068
|
+
phpPrefix,
|
|
171069
|
+
slug,
|
|
171070
|
+
textDomain
|
|
171071
|
+
}) {
|
|
171072
|
+
const normalizedSlug = resolveValidatedBlockSlug(slug);
|
|
171073
|
+
return {
|
|
171074
|
+
namespace: resolveValidatedNamespace(namespace),
|
|
171075
|
+
phpPrefix: resolveValidatedPhpPrefix(phpPrefix ?? normalizedSlug),
|
|
171076
|
+
slug: normalizedSlug,
|
|
171077
|
+
textDomain: resolveValidatedTextDomain(textDomain ?? normalizedSlug)
|
|
171078
|
+
};
|
|
171079
|
+
}
|
|
170927
171080
|
|
|
170928
171081
|
// ../wp-typia-project-tools/src/runtime/pattern-catalog-section-roles.ts
|
|
170929
171082
|
import {
|
|
@@ -171143,6 +171296,8 @@ function validatePatternContentSectionRoles({
|
|
|
171143
171296
|
}
|
|
171144
171297
|
|
|
171145
171298
|
// ../wp-typia-project-tools/src/runtime/pattern-catalog.ts
|
|
171299
|
+
import fs from "fs";
|
|
171300
|
+
import path from "path";
|
|
171146
171301
|
var PATTERN_CATALOG_SCOPE_IDS = ["full", "section"];
|
|
171147
171302
|
var PATTERN_SLUG_PATTERN = /^[a-z][a-z0-9-]*$/u;
|
|
171148
171303
|
var PATTERN_TAG_PATTERN = /^[a-z0-9][a-z0-9-]*$/u;
|
|
@@ -171380,85 +171535,6 @@ var HOOKED_BLOCK_POSITION_IDS = ["before", "after", "firstChild", "lastChild"];
|
|
|
171380
171535
|
var HOOKED_BLOCK_POSITION_SET = new Set(HOOKED_BLOCK_POSITION_IDS);
|
|
171381
171536
|
var HOOKED_BLOCK_ANCHOR_PATTERN = /^[a-z0-9-]+\/[a-z0-9-]+$/;
|
|
171382
171537
|
|
|
171383
|
-
// ../wp-typia-project-tools/src/runtime/string-case.ts
|
|
171384
|
-
var COMMON_ACRONYM_PREFIXES = [
|
|
171385
|
-
"HTML",
|
|
171386
|
-
"HTTP",
|
|
171387
|
-
"JSON",
|
|
171388
|
-
"REST",
|
|
171389
|
-
"UUID",
|
|
171390
|
-
"AJAX",
|
|
171391
|
-
"API",
|
|
171392
|
-
"CPT",
|
|
171393
|
-
"CSS",
|
|
171394
|
-
"CTA",
|
|
171395
|
-
"DOM",
|
|
171396
|
-
"PHP",
|
|
171397
|
-
"SQL",
|
|
171398
|
-
"SVG",
|
|
171399
|
-
"URL",
|
|
171400
|
-
"XML",
|
|
171401
|
-
"ID",
|
|
171402
|
-
"JS",
|
|
171403
|
-
"UI",
|
|
171404
|
-
"WP"
|
|
171405
|
-
];
|
|
171406
|
-
var COMMON_ACRONYM_LOWERCASE_SUFFIXES = ["slug"];
|
|
171407
|
-
function capitalizeSegment(segment) {
|
|
171408
|
-
return segment.charAt(0).toUpperCase() + segment.slice(1);
|
|
171409
|
-
}
|
|
171410
|
-
function findCommonAcronymPrefix(segment) {
|
|
171411
|
-
return COMMON_ACRONYM_PREFIXES.find((prefix) => segment.startsWith(prefix));
|
|
171412
|
-
}
|
|
171413
|
-
function isCommonAcronymLowercaseSuffix(suffix) {
|
|
171414
|
-
return COMMON_ACRONYM_LOWERCASE_SUFFIXES.includes(suffix);
|
|
171415
|
-
}
|
|
171416
|
-
function splitKnownAcronymSegment(segment) {
|
|
171417
|
-
const prefixes = [];
|
|
171418
|
-
let remaining = segment;
|
|
171419
|
-
while (remaining.length > 0) {
|
|
171420
|
-
const prefix = findCommonAcronymPrefix(remaining);
|
|
171421
|
-
if (!prefix) {
|
|
171422
|
-
break;
|
|
171423
|
-
}
|
|
171424
|
-
const suffix = remaining.slice(prefix.length);
|
|
171425
|
-
if (/^[A-Z][a-z]/.test(suffix)) {
|
|
171426
|
-
return [...prefixes, prefix, suffix].join("-");
|
|
171427
|
-
}
|
|
171428
|
-
if (/^[a-z]+$/.test(suffix) && isCommonAcronymLowercaseSuffix(suffix)) {
|
|
171429
|
-
return [...prefixes, prefix, suffix].join("-");
|
|
171430
|
-
}
|
|
171431
|
-
if (!findCommonAcronymPrefix(suffix)) {
|
|
171432
|
-
break;
|
|
171433
|
-
}
|
|
171434
|
-
prefixes.push(prefix);
|
|
171435
|
-
remaining = suffix;
|
|
171436
|
-
}
|
|
171437
|
-
return segment;
|
|
171438
|
-
}
|
|
171439
|
-
function splitAcronymBoundary(value) {
|
|
171440
|
-
return value.replace(/[A-Z]{2,}[a-z]+/g, splitKnownAcronymSegment);
|
|
171441
|
-
}
|
|
171442
|
-
function toKebabCase(input) {
|
|
171443
|
-
return splitAcronymBoundary(input.trim()).replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[^A-Za-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-").toLowerCase();
|
|
171444
|
-
}
|
|
171445
|
-
function toSnakeCase(input) {
|
|
171446
|
-
return toKebabCase(input).replace(/-/g, "_");
|
|
171447
|
-
}
|
|
171448
|
-
function toPascalCase(input) {
|
|
171449
|
-
return toKebabCase(input).split("-").filter(Boolean).map(capitalizeSegment).join("");
|
|
171450
|
-
}
|
|
171451
|
-
function toCamelCase(input) {
|
|
171452
|
-
const pascalCase = toPascalCase(input);
|
|
171453
|
-
return `${pascalCase.charAt(0).toLowerCase()}${pascalCase.slice(1)}`;
|
|
171454
|
-
}
|
|
171455
|
-
function toSegmentPascalCase(input) {
|
|
171456
|
-
return input.replace(/[^A-Za-z0-9]+/g, " ").trim().split(/\s+/).filter(Boolean).map(capitalizeSegment).join("");
|
|
171457
|
-
}
|
|
171458
|
-
function toTitleCase(input) {
|
|
171459
|
-
return toKebabCase(input).split("-").filter(Boolean).map(capitalizeSegment).join(" ");
|
|
171460
|
-
}
|
|
171461
|
-
|
|
171462
171538
|
// ../wp-typia-project-tools/src/runtime/cli-add-validation.ts
|
|
171463
171539
|
var WORKSPACE_GENERATED_SLUG_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
171464
171540
|
var WORDPRESS_POST_TYPE_PATTERN = /^[a-z0-9_][a-z0-9_-]*$/u;
|
|
@@ -171755,36 +171831,6 @@ function assertValidIntegrationEnvService(service = "none") {
|
|
|
171755
171831
|
throw new Error(`Integration environment service must be one of: ${INTEGRATION_ENV_SERVICE_IDS.join(", ")}.`);
|
|
171756
171832
|
}
|
|
171757
171833
|
|
|
171758
|
-
// ../wp-typia-project-tools/src/runtime/fs-async.ts
|
|
171759
|
-
import { promises as fsp } from "fs";
|
|
171760
|
-
async function pathExists(filePath) {
|
|
171761
|
-
try {
|
|
171762
|
-
await fsp.access(filePath);
|
|
171763
|
-
return true;
|
|
171764
|
-
} catch {
|
|
171765
|
-
return false;
|
|
171766
|
-
}
|
|
171767
|
-
}
|
|
171768
|
-
async function readOptionalUtf8File(filePath) {
|
|
171769
|
-
try {
|
|
171770
|
-
return await fsp.readFile(filePath, "utf8");
|
|
171771
|
-
} catch (error) {
|
|
171772
|
-
if (isFileNotFoundError(error)) {
|
|
171773
|
-
return null;
|
|
171774
|
-
}
|
|
171775
|
-
throw error;
|
|
171776
|
-
}
|
|
171777
|
-
}
|
|
171778
|
-
function getNodeErrorCode(error) {
|
|
171779
|
-
return getOptionalNodeErrorCode(error) ?? "";
|
|
171780
|
-
}
|
|
171781
|
-
function getOptionalNodeErrorCode(error) {
|
|
171782
|
-
return typeof error === "object" && error !== null && "code" in error ? String(error.code) : undefined;
|
|
171783
|
-
}
|
|
171784
|
-
function isFileNotFoundError(error) {
|
|
171785
|
-
return getOptionalNodeErrorCode(error) === "ENOENT";
|
|
171786
|
-
}
|
|
171787
|
-
|
|
171788
171834
|
// ../wp-typia-project-tools/src/runtime/cli-add-help.ts
|
|
171789
171835
|
function formatAddHelpText() {
|
|
171790
171836
|
return `Usage:
|
|
@@ -171796,7 +171842,7 @@ function formatAddHelpText() {
|
|
|
171796
171842
|
wp-typia add variation <name> --block <block-slug> [--dry-run]
|
|
171797
171843
|
wp-typia add style <name> --block <block-slug> [--dry-run]
|
|
171798
171844
|
wp-typia add transform <name> --from <namespace/block> --to <block-slug|namespace/block-slug> [--dry-run]
|
|
171799
|
-
wp-typia add pattern <name> [--scope <full|section>] [--section-role <role>] [--catalog-title <title>] [--tags <tag
|
|
171845
|
+
wp-typia add pattern <name> [--scope <full|section>] [--section-role <role>] [--catalog-title <title>] [--tags <tag,...>] [--tag <tag>...] [--thumbnail-url <url>] [--dry-run]
|
|
171800
171846
|
wp-typia add binding-source <name> [--block <block-slug|namespace/block-slug> --attribute <attribute>] [--from-post-meta|--post-meta <post-meta> [--meta-path <field>]] [--dry-run]
|
|
171801
171847
|
wp-typia add contract <name> [--type <ExportedTypeName>] [--dry-run]
|
|
171802
171848
|
wp-typia add rest-resource <name> [--namespace <vendor/v1>] [--methods <${REST_RESOURCE_METHOD_IDS.join(",")}>] [--route-pattern <route-pattern>] [--permission-callback <callback>] [--controller-class <ClassName>] [--controller-extends <BaseClass>] [--dry-run]
|
|
@@ -171824,7 +171870,7 @@ Notes:
|
|
|
171824
171870
|
\`add variation\` targets an existing block slug from \`scripts/block-config.ts\`.
|
|
171825
171871
|
\`add style\` registers a Block Styles option for an existing generated block.
|
|
171826
171872
|
\`add transform\` adds a block-to-block transform into an existing generated block.
|
|
171827
|
-
\`add pattern\` scaffolds a namespaced PHP pattern shell under \`src/patterns/full/\` or \`src/patterns/sections/\` and records typed catalog metadata in \`PATTERNS\`; pass \`--catalog-title "Hero Photo"\` to override the generated catalog title,
|
|
171873
|
+
\`add pattern\` scaffolds a namespaced PHP pattern shell under \`src/patterns/full/\` or \`src/patterns/sections/\` and records typed catalog metadata in \`PATTERNS\`; pass \`--catalog-title "Hero Photo"\` to override the generated catalog title, pass \`--tags hero,landing\` for a comma-separated tag list, and repeat \`--tag hero --tag landing\` for single tag values.
|
|
171828
171874
|
\`add binding-source\` scaffolds shared PHP and editor registration under \`src/bindings/\`; pass \`--block\` and \`--attribute\` together to declare an end-to-end bindable attribute on an existing generated block. Pass \`--from-post-meta\` or \`--post-meta\` to generate a source backed by a typed post-meta contract; \`--meta-path\` selects one top-level field as the default binding arg.
|
|
171829
171875
|
\`add contract\` registers a standalone TypeScript wire contract under \`src/contracts/\` and generates a stable JSON Schema artifact without creating PHP route glue.
|
|
171830
171876
|
\`add rest-resource\` scaffolds plugin-level TypeScript REST contracts under \`src/rest/\` and PHP route glue under \`inc/rest/\`. Use \`--route-pattern\`, \`--permission-callback\`, \`--controller-class\`, and \`--controller-extends\` when an existing WordPress controller or permission model needs to own part of the generated route surface.
|
|
@@ -171835,87 +171881,41 @@ Notes:
|
|
|
171835
171881
|
\`add hooked-block\` patches an existing workspace block's \`block.json\` \`blockHooks\` metadata.
|
|
171836
171882
|
\`add editor-plugin\` scaffolds a document-level editor extension under \`src/editor-plugins/\`; legacy aliases \`PluginSidebar\` and \`PluginDocumentSettingPanel\` resolve to \`sidebar\` and \`document-setting-panel\`.`;
|
|
171837
171883
|
}
|
|
171884
|
+
// ../wp-typia-project-tools/src/runtime/cli-add-filesystem.ts
|
|
171885
|
+
import { promises as fsp2 } from "fs";
|
|
171886
|
+
import path2 from "path";
|
|
171838
171887
|
|
|
171839
|
-
// ../wp-typia-project-tools/src/runtime/
|
|
171840
|
-
|
|
171841
|
-
|
|
171842
|
-
|
|
171843
|
-
|
|
171844
|
-
|
|
171845
|
-
}
|
|
171846
|
-
|
|
171847
|
-
return BLOCK_SLUG_PATTERN.test(toKebabCase(input)) ? true : "Use lowercase letters, numbers, and hyphens only";
|
|
171848
|
-
}
|
|
171849
|
-
function validateTextDomain(input) {
|
|
171850
|
-
return BLOCK_SLUG_PATTERN.test(toKebabCase(input)) ? true : "Use lowercase letters, numbers, and hyphens only";
|
|
171851
|
-
}
|
|
171852
|
-
function validatePhpPrefix(input) {
|
|
171853
|
-
const normalizedPrefix = toSnakeCase(input);
|
|
171854
|
-
if (normalizedPrefix.length > PHP_PREFIX_MAX_LENGTH) {
|
|
171855
|
-
return `Use ${PHP_PREFIX_MAX_LENGTH} characters or fewer to keep generated database identifiers within MySQL limits`;
|
|
171856
|
-
}
|
|
171857
|
-
return PHP_PREFIX_PATTERN.test(normalizedPrefix) ? true : "Use letters, numbers, and underscores only, starting with a letter";
|
|
171858
|
-
}
|
|
171859
|
-
function assertValidIdentifier(label, value, validate) {
|
|
171860
|
-
const result = validate(value);
|
|
171861
|
-
if (result !== true) {
|
|
171862
|
-
throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, typeof result === "string" ? `${label}: ${result}` : `${label} is invalid`);
|
|
171888
|
+
// ../wp-typia-project-tools/src/runtime/fs-async.ts
|
|
171889
|
+
import { promises as fsp } from "fs";
|
|
171890
|
+
async function pathExists(filePath) {
|
|
171891
|
+
try {
|
|
171892
|
+
await fsp.access(filePath);
|
|
171893
|
+
return true;
|
|
171894
|
+
} catch {
|
|
171895
|
+
return false;
|
|
171863
171896
|
}
|
|
171864
|
-
return value;
|
|
171865
|
-
}
|
|
171866
|
-
function normalizeBlockSlug(input) {
|
|
171867
|
-
return toKebabCase(input);
|
|
171868
171897
|
}
|
|
171869
|
-
function
|
|
171870
|
-
|
|
171871
|
-
|
|
171872
|
-
|
|
171873
|
-
|
|
171874
|
-
|
|
171875
|
-
|
|
171898
|
+
async function readOptionalUtf8File(filePath) {
|
|
171899
|
+
try {
|
|
171900
|
+
return await fsp.readFile(filePath, "utf8");
|
|
171901
|
+
} catch (error) {
|
|
171902
|
+
if (isFileNotFoundError(error)) {
|
|
171903
|
+
return null;
|
|
171904
|
+
}
|
|
171905
|
+
throw error;
|
|
171876
171906
|
}
|
|
171877
|
-
throw createCliDiagnosticCodeError(CLI_DIAGNOSTIC_CODES.INVALID_ARGUMENT, `${options.label} "${options.input.trim()}" normalizes to an empty slug. Use letters or numbers so wp-typia can generate a block slug.`);
|
|
171878
|
-
}
|
|
171879
|
-
function resolveValidatedBlockSlug(value) {
|
|
171880
|
-
return assertValidIdentifier("Block slug", normalizeBlockSlug(value), validateBlockSlug);
|
|
171881
|
-
}
|
|
171882
|
-
function resolveValidatedNamespace(value) {
|
|
171883
|
-
return assertValidIdentifier("Namespace", toKebabCase(value), validateNamespace);
|
|
171884
|
-
}
|
|
171885
|
-
function resolveValidatedTextDomain(value) {
|
|
171886
|
-
return assertValidIdentifier("Text domain", toKebabCase(value), validateTextDomain);
|
|
171887
171907
|
}
|
|
171888
|
-
function
|
|
171889
|
-
return
|
|
171890
|
-
}
|
|
171891
|
-
function buildBlockCssClassName(namespace, slug) {
|
|
171892
|
-
const normalizedSlug = resolveValidatedBlockSlug(slug);
|
|
171893
|
-
const normalizedNamespace = typeof namespace === "string" && namespace.trim().length > 0 ? resolveValidatedNamespace(namespace) : "";
|
|
171894
|
-
if (normalizedNamespace === normalizedSlug) {
|
|
171895
|
-
return `wp-block-${normalizedSlug}-block`;
|
|
171896
|
-
}
|
|
171897
|
-
return normalizedNamespace.length > 0 ? `wp-block-${normalizedNamespace}-${normalizedSlug}` : `wp-block-${normalizedSlug}`;
|
|
171908
|
+
function getNodeErrorCode(error) {
|
|
171909
|
+
return getOptionalNodeErrorCode(error) ?? "";
|
|
171898
171910
|
}
|
|
171899
|
-
function
|
|
171900
|
-
return
|
|
171911
|
+
function getOptionalNodeErrorCode(error) {
|
|
171912
|
+
return typeof error === "object" && error !== null && "code" in error ? String(error.code) : undefined;
|
|
171901
171913
|
}
|
|
171902
|
-
function
|
|
171903
|
-
|
|
171904
|
-
phpPrefix,
|
|
171905
|
-
slug,
|
|
171906
|
-
textDomain
|
|
171907
|
-
}) {
|
|
171908
|
-
const normalizedSlug = resolveValidatedBlockSlug(slug);
|
|
171909
|
-
return {
|
|
171910
|
-
namespace: resolveValidatedNamespace(namespace),
|
|
171911
|
-
phpPrefix: resolveValidatedPhpPrefix(phpPrefix ?? normalizedSlug),
|
|
171912
|
-
slug: normalizedSlug,
|
|
171913
|
-
textDomain: resolveValidatedTextDomain(textDomain ?? normalizedSlug)
|
|
171914
|
-
};
|
|
171914
|
+
function isFileNotFoundError(error) {
|
|
171915
|
+
return getOptionalNodeErrorCode(error) === "ENOENT";
|
|
171915
171916
|
}
|
|
171917
|
+
|
|
171916
171918
|
// ../wp-typia-project-tools/src/runtime/cli-add-filesystem.ts
|
|
171917
|
-
import { promises as fsp2 } from "fs";
|
|
171918
|
-
import path2 from "path";
|
|
171919
171919
|
function getWorkspaceBootstrapPath(workspace) {
|
|
171920
171920
|
const workspaceBaseName = workspace.packageName.split("/").pop() ?? workspace.packageName;
|
|
171921
171921
|
return path2.join(workspace.projectDir, `${workspaceBaseName}.php`);
|
|
@@ -173818,6 +173818,6 @@ async function appendWorkspaceInventoryEntries(projectDir, options) {
|
|
|
173818
173818
|
await writeFile(blockConfigPath, nextSource, "utf8");
|
|
173819
173819
|
}
|
|
173820
173820
|
}
|
|
173821
|
-
export { toKebabCase, toSnakeCase, toPascalCase, toCamelCase, toSegmentPascalCase, toTitleCase, validateBlockSlug, validateNamespace, normalizeBlockSlug, resolveNonEmptyNormalizedBlockSlug, buildBlockCssClassName, buildFrontendCssClassName, resolveScaffoldIdentifiers, PATTERN_CATALOG_SCOPE_IDS, isValidPatternThumbnailUrl, resolvePatternCatalogContentFile, validatePatternCatalog, formatPatternCatalogDiagnostics, REST_RESOURCE_METHOD_IDS, MANUAL_REST_CONTRACT_HTTP_METHOD_IDS, MANUAL_REST_CONTRACT_AUTH_IDS, EDITOR_PLUGIN_SLOT_IDS, resolveEditorPluginSlotAlias, ADD_BLOCK_TEMPLATE_IDS, suggestAddBlockTemplateId, HOOKED_BLOCK_POSITION_SET, HOOKED_BLOCK_ANCHOR_PATTERN, REST_RESOURCE_NAMESPACE_PATTERN, assertValidGeneratedSlug, assertValidTypeScriptIdentifier, resolveRestResourceNamespace, assertValidPostMetaPostType, resolvePostMetaKey, assertValidRestResourceMethods, resolveOptionalPhpCallbackReference, resolveOptionalPhpClassReference, assertValidManualRestContractHttpMethod, assertValidManualRestContractAuth, isGeneratedRestResourceRoutePatternCompatible, collectRestRouteNamedCaptureNames, resolveManualRestContractPathPattern, resolveGeneratedRestResourceRoutePattern, assertValidHookedBlockPosition, buildWorkspacePhpPrefix, isAddBlockTemplateId, quoteTsString, assertValidHookAnchor, assertValidEditorPluginSlot, assertValidIntegrationEnvService, pathExists, readOptionalUtf8File, getNodeErrorCode, getOptionalNodeErrorCode, isFileNotFoundError, getWorkspaceBootstrapPath, patchFile, readOptionalFile, snapshotWorkspaceFiles, rollbackWorkspaceMutation, resolveWorkspaceBlock, readWorkspaceBlockJson, getMutableBlockHooks, assertVariationDoesNotExist, assertBlockStyleDoesNotExist, assertBlockTransformDoesNotExist, assertPatternDoesNotExist, assertBindingSourceDoesNotExist, assertRestResourceDoesNotExist, assertPostMetaDoesNotExist, assertContractDoesNotExist, assertAdminViewDoesNotExist, assertAbilityDoesNotExist, assertAiFeatureDoesNotExist, assertEditorPluginDoesNotExist, formatAddHelpText, require_typescript, getPropertyNameText, readWorkspaceInventory, readWorkspaceInventoryAsync, getWorkspaceBlockSelectOptions, getWorkspaceBlockSelectOptionsAsync, escapeRegex, quotePhpString, hasPhpFunctionDefinition, hasPhpFunctionCall, findPhpFunctionRange, replacePhpFunctionDefinition, updateWorkspaceInventorySource, appendWorkspaceInventoryEntries };
|
|
173821
|
+
export { toKebabCase, toSnakeCase, toPascalCase, toCamelCase, toSegmentPascalCase, toTitleCase, validateBlockSlug, validateNamespace, normalizeBlockSlug, resolveNonEmptyNormalizedBlockSlug, buildBlockCssClassName, buildFrontendCssClassName, resolveScaffoldIdentifiers, PATTERN_SECTION_ROLE_PATTERN, PATTERN_CATALOG_SCOPE_IDS, PATTERN_TAG_PATTERN, isValidPatternThumbnailUrl, resolvePatternCatalogContentFile, validatePatternCatalog, formatPatternCatalogDiagnostics, REST_RESOURCE_METHOD_IDS, MANUAL_REST_CONTRACT_HTTP_METHOD_IDS, MANUAL_REST_CONTRACT_AUTH_IDS, EDITOR_PLUGIN_SLOT_IDS, resolveEditorPluginSlotAlias, ADD_BLOCK_TEMPLATE_IDS, suggestAddBlockTemplateId, HOOKED_BLOCK_POSITION_SET, HOOKED_BLOCK_ANCHOR_PATTERN, REST_RESOURCE_NAMESPACE_PATTERN, assertValidGeneratedSlug, assertValidTypeScriptIdentifier, resolveRestResourceNamespace, assertValidPostMetaPostType, resolvePostMetaKey, assertValidRestResourceMethods, resolveOptionalPhpCallbackReference, resolveOptionalPhpClassReference, assertValidManualRestContractHttpMethod, assertValidManualRestContractAuth, isGeneratedRestResourceRoutePatternCompatible, collectRestRouteNamedCaptureNames, resolveManualRestContractPathPattern, resolveGeneratedRestResourceRoutePattern, assertValidHookedBlockPosition, buildWorkspacePhpPrefix, isAddBlockTemplateId, quoteTsString, assertValidHookAnchor, assertValidEditorPluginSlot, assertValidIntegrationEnvService, pathExists, readOptionalUtf8File, getNodeErrorCode, getOptionalNodeErrorCode, isFileNotFoundError, getWorkspaceBootstrapPath, patchFile, readOptionalFile, snapshotWorkspaceFiles, rollbackWorkspaceMutation, resolveWorkspaceBlock, readWorkspaceBlockJson, getMutableBlockHooks, assertVariationDoesNotExist, assertBlockStyleDoesNotExist, assertBlockTransformDoesNotExist, assertPatternDoesNotExist, assertBindingSourceDoesNotExist, assertRestResourceDoesNotExist, assertPostMetaDoesNotExist, assertContractDoesNotExist, assertAdminViewDoesNotExist, assertAbilityDoesNotExist, assertAiFeatureDoesNotExist, assertEditorPluginDoesNotExist, formatAddHelpText, require_typescript, getPropertyNameText, readWorkspaceInventory, readWorkspaceInventoryAsync, getWorkspaceBlockSelectOptions, getWorkspaceBlockSelectOptionsAsync, escapeRegex, quotePhpString, hasPhpFunctionDefinition, hasPhpFunctionCall, findPhpFunctionRange, replacePhpFunctionDefinition, updateWorkspaceInventorySource, appendWorkspaceInventoryEntries };
|
|
173822
173822
|
|
|
173823
|
-
//# debugId=
|
|
173823
|
+
//# debugId=ECEDE0CAF67562F064756E2164756E21
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
getPackageVersions
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-84c7wff4.js";
|
|
5
5
|
import"./cli-8hxf9qw6.js";
|
|
6
6
|
import {
|
|
7
7
|
discoverMigrationInitLayout
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
snapshotWorkspaceFiles,
|
|
14
14
|
toPascalCase,
|
|
15
15
|
updateWorkspaceInventorySource
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-fv4h3ydt.js";
|
|
17
17
|
import"./cli-cvxvcw7c.js";
|
|
18
18
|
import"./cli-bajwv85z.js";
|
|
19
19
|
import {
|