@wp-typia/project-tools 0.23.0 → 0.24.0
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/runtime/ai-feature-artifacts.js +4 -1
- package/dist/runtime/block-generator-service-spec.js +2 -1
- package/dist/runtime/built-in-block-non-ts-basic-artifacts.d.ts +9 -0
- package/dist/runtime/built-in-block-non-ts-basic-artifacts.js +84 -0
- package/dist/runtime/built-in-block-non-ts-compound-artifacts.d.ts +9 -0
- package/dist/runtime/built-in-block-non-ts-compound-artifacts.js +36 -0
- package/dist/runtime/built-in-block-non-ts-compound-templates.d.ts +23 -0
- package/dist/runtime/built-in-block-non-ts-compound-templates.js +453 -0
- package/dist/runtime/built-in-block-non-ts-family-artifacts.d.ts +8 -26
- package/dist/runtime/built-in-block-non-ts-family-artifacts.js +8 -1034
- package/dist/runtime/built-in-block-non-ts-interactivity-artifacts.d.ts +9 -0
- package/dist/runtime/built-in-block-non-ts-interactivity-artifacts.js +83 -0
- package/dist/runtime/built-in-block-non-ts-persistence-artifacts.d.ts +9 -0
- package/dist/runtime/built-in-block-non-ts-persistence-artifacts.js +33 -0
- package/dist/runtime/built-in-block-non-ts-persistence-templates.d.ts +23 -0
- package/dist/runtime/built-in-block-non-ts-persistence-templates.js +395 -0
- package/dist/runtime/cli-add-block-json.js +5 -1
- package/dist/runtime/cli-add-collision.js +8 -0
- package/dist/runtime/cli-add-help.js +14 -10
- package/dist/runtime/cli-add-kind-ids.d.ts +1 -1
- package/dist/runtime/cli-add-kind-ids.js +1 -0
- package/dist/runtime/cli-add-types.d.ts +45 -6
- package/dist/runtime/cli-add-types.js +2 -0
- package/dist/runtime/cli-add-validation.d.ts +7 -0
- package/dist/runtime/cli-add-validation.js +9 -0
- package/dist/runtime/cli-add-workspace-ability-anchors.d.ts +24 -0
- package/dist/runtime/cli-add-workspace-ability-anchors.js +294 -0
- package/dist/runtime/cli-add-workspace-ability-registry.d.ts +10 -0
- package/dist/runtime/cli-add-workspace-ability-registry.js +51 -0
- package/dist/runtime/cli-add-workspace-ability-scaffold.d.ts +1 -1
- package/dist/runtime/cli-add-workspace-ability-scaffold.js +5 -308
- package/dist/runtime/cli-add-workspace-admin-view-scaffold.js +6 -2
- package/dist/runtime/cli-add-workspace-admin-view-templates-core-data.d.ts +34 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-core-data.js +483 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-default.d.ts +30 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-default.js +310 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-rest.d.ts +25 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-rest.js +124 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-settings.d.ts +34 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-settings.js +370 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-shared.d.ts +49 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates-shared.js +259 -0
- package/dist/runtime/cli-add-workspace-admin-view-templates.d.ts +18 -27
- package/dist/runtime/cli-add-workspace-admin-view-templates.js +30 -1326
- package/dist/runtime/cli-add-workspace-ai-anchors.d.ts +4 -4
- package/dist/runtime/cli-add-workspace-ai-anchors.js +8 -233
- package/dist/runtime/cli-add-workspace-ai-scaffold.js +4 -2
- package/dist/runtime/cli-add-workspace-ai-source-emitters.d.ts +1 -4
- package/dist/runtime/cli-add-workspace-ai-source-emitters.js +1 -129
- package/dist/runtime/cli-add-workspace-ai-sync-rest-anchors.d.ts +5 -0
- package/dist/runtime/cli-add-workspace-ai-sync-rest-anchors.js +236 -0
- package/dist/runtime/cli-add-workspace-ai-sync-script-source.d.ts +4 -0
- package/dist/runtime/cli-add-workspace-ai-sync-script-source.js +145 -0
- package/dist/runtime/cli-add-workspace-assets.d.ts +6 -63
- package/dist/runtime/cli-add-workspace-assets.js +6 -950
- package/dist/runtime/cli-add-workspace-binding-source-anchors.d.ts +23 -0
- package/dist/runtime/cli-add-workspace-binding-source-anchors.js +112 -0
- package/dist/runtime/cli-add-workspace-binding-source-source-emitters.d.ts +33 -0
- package/dist/runtime/cli-add-workspace-binding-source-source-emitters.js +436 -0
- package/dist/runtime/cli-add-workspace-binding-source-types.d.ts +20 -0
- package/dist/runtime/cli-add-workspace-binding-source-types.js +1 -0
- package/dist/runtime/cli-add-workspace-binding-source.d.ts +40 -0
- package/dist/runtime/cli-add-workspace-binding-source.js +275 -0
- package/dist/runtime/cli-add-workspace-block-style.d.ts +22 -0
- package/dist/runtime/cli-add-workspace-block-style.js +148 -0
- package/dist/runtime/cli-add-workspace-block-transform.d.ts +32 -0
- package/dist/runtime/cli-add-workspace-block-transform.js +197 -0
- package/dist/runtime/cli-add-workspace-contract.js +1 -1
- package/dist/runtime/cli-add-workspace-core-variation.d.ts +20 -0
- package/dist/runtime/cli-add-workspace-core-variation.js +322 -0
- package/dist/runtime/cli-add-workspace-editor-plugin-anchors.d.ts +37 -0
- package/dist/runtime/cli-add-workspace-editor-plugin-anchors.js +206 -0
- package/dist/runtime/cli-add-workspace-editor-plugin-source-emitters.d.ts +47 -0
- package/dist/runtime/cli-add-workspace-editor-plugin-source-emitters.js +219 -0
- package/dist/runtime/cli-add-workspace-editor-plugin.d.ts +22 -0
- package/dist/runtime/cli-add-workspace-editor-plugin.js +78 -0
- package/dist/runtime/cli-add-workspace-hooked-block.d.ts +23 -0
- package/dist/runtime/cli-add-workspace-hooked-block.js +57 -0
- package/dist/runtime/cli-add-workspace-integration-env-files.d.ts +33 -0
- package/dist/runtime/cli-add-workspace-integration-env-files.js +65 -0
- package/dist/runtime/cli-add-workspace-integration-env-package-json.d.ts +38 -0
- package/dist/runtime/cli-add-workspace-integration-env-package-json.js +122 -0
- package/dist/runtime/cli-add-workspace-integration-env-source-emitters.d.ts +44 -0
- package/dist/runtime/cli-add-workspace-integration-env-source-emitters.js +262 -0
- package/dist/runtime/cli-add-workspace-integration-env.d.ts +3 -1
- package/dist/runtime/cli-add-workspace-integration-env.js +10 -313
- package/dist/runtime/cli-add-workspace-pattern-anchors.d.ts +10 -0
- package/dist/runtime/cli-add-workspace-pattern-anchors.js +95 -0
- package/dist/runtime/cli-add-workspace-pattern-options.d.ts +20 -0
- package/dist/runtime/cli-add-workspace-pattern-options.js +113 -0
- package/dist/runtime/cli-add-workspace-pattern-source-emitters.d.ts +20 -0
- package/dist/runtime/cli-add-workspace-pattern-source-emitters.js +57 -0
- package/dist/runtime/cli-add-workspace-pattern.d.ts +42 -0
- package/dist/runtime/cli-add-workspace-pattern.js +99 -0
- package/dist/runtime/cli-add-workspace-post-meta.js +1 -1
- package/dist/runtime/cli-add-workspace-registration-hooks.d.ts +50 -0
- package/dist/runtime/cli-add-workspace-registration-hooks.js +162 -0
- package/dist/runtime/cli-add-workspace-rest-anchors.d.ts +9 -4
- package/dist/runtime/cli-add-workspace-rest-anchors.js +9 -428
- package/dist/runtime/cli-add-workspace-rest-bootstrap-anchors.d.ts +17 -0
- package/dist/runtime/cli-add-workspace-rest-bootstrap-anchors.js +108 -0
- package/dist/runtime/cli-add-workspace-rest-contract-sync-anchors.d.ts +9 -0
- package/dist/runtime/cli-add-workspace-rest-contract-sync-anchors.js +142 -0
- package/dist/runtime/cli-add-workspace-rest-generated-source-emitters.d.ts +51 -0
- package/dist/runtime/cli-add-workspace-rest-generated-source-emitters.js +415 -0
- package/dist/runtime/cli-add-workspace-rest-generated.d.ts +9 -0
- package/dist/runtime/cli-add-workspace-rest-generated.js +160 -0
- package/dist/runtime/cli-add-workspace-rest-manual-source-emitters.d.ts +80 -0
- package/dist/runtime/cli-add-workspace-rest-manual-source-emitters.js +238 -0
- package/dist/runtime/cli-add-workspace-rest-manual.d.ts +8 -0
- package/dist/runtime/cli-add-workspace-rest-manual.js +266 -0
- package/dist/runtime/cli-add-workspace-rest-php-templates.d.ts +18 -0
- package/dist/runtime/cli-add-workspace-rest-php-templates.js +359 -0
- package/dist/runtime/cli-add-workspace-rest-resource-php-routing-template.d.ts +33 -0
- package/dist/runtime/cli-add-workspace-rest-resource-php-routing-template.js +145 -0
- package/dist/runtime/cli-add-workspace-rest-resource-sync-anchors.d.ts +9 -0
- package/dist/runtime/cli-add-workspace-rest-resource-sync-anchors.js +162 -0
- package/dist/runtime/cli-add-workspace-rest-schema-helper-php-template.d.ts +7 -0
- package/dist/runtime/cli-add-workspace-rest-schema-helper-php-template.js +193 -0
- package/dist/runtime/cli-add-workspace-rest-source-emitters.d.ts +5 -91
- package/dist/runtime/cli-add-workspace-rest-source-emitters.js +5 -642
- package/dist/runtime/cli-add-workspace-rest-source-utils.d.ts +17 -0
- package/dist/runtime/cli-add-workspace-rest-source-utils.js +50 -0
- package/dist/runtime/cli-add-workspace-rest-sync-script-shared.d.ts +56 -0
- package/dist/runtime/cli-add-workspace-rest-sync-script-shared.js +122 -0
- package/dist/runtime/cli-add-workspace-rest-types.d.ts +108 -0
- package/dist/runtime/cli-add-workspace-rest-types.js +1 -0
- package/dist/runtime/cli-add-workspace-rest.d.ts +3 -20
- package/dist/runtime/cli-add-workspace-rest.js +33 -788
- package/dist/runtime/cli-add-workspace-variation.d.ts +22 -0
- package/dist/runtime/cli-add-workspace-variation.js +162 -0
- package/dist/runtime/cli-add-workspace.d.ts +42 -107
- package/dist/runtime/cli-add-workspace.js +42 -674
- package/dist/runtime/cli-add.d.ts +3 -3
- package/dist/runtime/cli-add.js +2 -2
- package/dist/runtime/cli-core.d.ts +3 -2
- package/dist/runtime/cli-core.js +2 -2
- package/dist/runtime/cli-diagnostics.d.ts +3 -1
- package/dist/runtime/cli-diagnostics.js +17 -5
- package/dist/runtime/cli-doctor-workspace-bindings.js +63 -1
- package/dist/runtime/cli-doctor-workspace-block-addons.d.ts +12 -0
- package/dist/runtime/cli-doctor-workspace-block-addons.js +162 -0
- package/dist/runtime/cli-doctor-workspace-block-iframe.d.ts +9 -0
- package/dist/runtime/cli-doctor-workspace-block-iframe.js +228 -0
- package/dist/runtime/cli-doctor-workspace-block-metadata.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-block-metadata.js +111 -0
- package/dist/runtime/cli-doctor-workspace-blocks.js +6 -424
- package/dist/runtime/cli-doctor-workspace-features-abilities.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-abilities.js +112 -0
- package/dist/runtime/cli-doctor-workspace-features-admin-views.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-admin-views.js +128 -0
- package/dist/runtime/cli-doctor-workspace-features-ai.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-ai.js +57 -0
- package/dist/runtime/cli-doctor-workspace-features-editor-plugins.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-editor-plugins.js +80 -0
- package/dist/runtime/cli-doctor-workspace-features-post-meta.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-post-meta.js +77 -0
- package/dist/runtime/cli-doctor-workspace-features-rest.d.ts +11 -0
- package/dist/runtime/cli-doctor-workspace-features-rest.js +120 -0
- package/dist/runtime/cli-doctor-workspace-features.js +14 -487
- package/dist/runtime/cli-doctor.d.ts +54 -3
- package/dist/runtime/cli-doctor.js +92 -10
- package/dist/runtime/cli-help.js +12 -7
- package/dist/runtime/cli-init-package-json.js +4 -2
- package/dist/runtime/cli-prompt.d.ts +16 -2
- package/dist/runtime/cli-prompt.js +29 -12
- package/dist/runtime/cli-scaffold.d.ts +2 -1
- package/dist/runtime/cli-scaffold.js +19 -10
- package/dist/runtime/external-template-guards.js +4 -6
- package/dist/runtime/index.d.ts +6 -3
- package/dist/runtime/index.js +4 -2
- package/dist/runtime/json-utils.d.ts +62 -4
- package/dist/runtime/json-utils.js +78 -4
- package/dist/runtime/local-dev-presets.js +6 -2
- package/dist/runtime/migration-ui-capability.js +4 -1
- package/dist/runtime/migration-utils.js +4 -1
- package/dist/runtime/package-managers.js +6 -1
- package/dist/runtime/package-versions.d.ts +1 -0
- package/dist/runtime/package-versions.js +16 -3
- package/dist/runtime/pattern-catalog.d.ts +122 -0
- package/dist/runtime/pattern-catalog.js +471 -0
- package/dist/runtime/post-meta-binding-fields.d.ts +46 -0
- package/dist/runtime/post-meta-binding-fields.js +135 -0
- package/dist/runtime/scaffold-bootstrap.js +7 -2
- package/dist/runtime/scaffold-package-manager-files.js +5 -1
- package/dist/runtime/scaffold-repository-reference.js +4 -2
- package/dist/runtime/scaffold-template-variables.js +2 -1
- package/dist/runtime/scaffold.d.ts +18 -1
- package/dist/runtime/scaffold.js +55 -2
- package/dist/runtime/temp-roots.js +4 -1
- package/dist/runtime/template-layers.js +4 -1
- package/dist/runtime/template-registry.js +9 -3
- package/dist/runtime/template-source-contracts.d.ts +2 -0
- package/dist/runtime/template-source-normalization.js +2 -1
- package/dist/runtime/template-source-remote.js +18 -5
- package/dist/runtime/template-source-seeds.js +10 -3
- package/dist/runtime/typia-llm-json-schema.d.ts +24 -0
- package/dist/runtime/typia-llm-json-schema.js +33 -0
- package/dist/runtime/typia-llm-openapi-constraints.d.ts +20 -0
- package/dist/runtime/typia-llm-openapi-constraints.js +254 -0
- package/dist/runtime/typia-llm-projection.d.ts +25 -0
- package/dist/runtime/typia-llm-projection.js +58 -0
- package/dist/runtime/typia-llm-render.d.ts +21 -0
- package/dist/runtime/typia-llm-render.js +252 -0
- package/dist/runtime/typia-llm-sync.d.ts +10 -0
- package/dist/runtime/typia-llm-sync.js +63 -0
- package/dist/runtime/typia-llm-types.d.ts +197 -0
- package/dist/runtime/typia-llm-types.js +1 -0
- package/dist/runtime/typia-llm.d.ts +9 -255
- package/dist/runtime/typia-llm.js +5 -634
- package/dist/runtime/workspace-inventory-mutations.js +15 -1
- package/dist/runtime/workspace-inventory-parser-entries.d.ts +17 -0
- package/dist/runtime/workspace-inventory-parser-entries.js +157 -0
- package/dist/runtime/workspace-inventory-parser-validation.d.ts +104 -0
- package/dist/runtime/workspace-inventory-parser-validation.js +34 -0
- package/dist/runtime/workspace-inventory-parser.d.ts +3 -45
- package/dist/runtime/workspace-inventory-parser.js +3 -581
- package/dist/runtime/workspace-inventory-section-descriptors.d.ts +19 -0
- package/dist/runtime/workspace-inventory-section-descriptors.js +443 -0
- package/dist/runtime/workspace-inventory-templates.d.ts +3 -3
- package/dist/runtime/workspace-inventory-templates.js +10 -1
- package/dist/runtime/workspace-inventory-types.d.ts +10 -1
- package/dist/runtime/workspace-project.js +4 -6
- package/package.json +8 -3
- package/templates/_shared/compound/core/scripts/block-config.ts.mustache +22 -0
- package/templates/_shared/compound/core/scripts/sync-types-to-block-json.ts.mustache +103 -2
- package/templates/_shared/compound/core/src/inner-blocks-templates.ts.mustache +13 -0
- package/templates/_shared/compound/persistence/scripts/block-config.ts.mustache +22 -1
|
@@ -1,317 +1,14 @@
|
|
|
1
1
|
import { promises as fsp } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { syncTypeSchemas } from "@wp-typia/block-runtime/metadata-core";
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { buildAbilityClientSource, buildAbilityConfigEntry, buildAbilityConfigSource, buildAbilityDataSource, buildAbilityPhpSource,
|
|
8
|
-
import { ABILITY_EDITOR_ASSET, ABILITY_EDITOR_SCRIPT, ABILITY_REGISTRY_END_MARKER, ABILITY_REGISTRY_START_MARKER, ABILITY_SERVER_GLOB, WP_ABILITIES_SCRIPT_MODULE_ID, WP_CORE_ABILITIES_SCRIPT_MODULE_ID, } from "./cli-add-workspace-ability-types.js";
|
|
4
|
+
import { appendWorkspaceInventoryEntries, } from "./workspace-inventory.js";
|
|
5
|
+
import { ensureAbilityBootstrapAnchors, ensureAbilityBuildScriptAnchors, ensureAbilityPackageScripts, ensureAbilitySyncProjectAnchors, ensureAbilityWebpackAnchors, } from "./cli-add-workspace-ability-anchors.js";
|
|
6
|
+
import { resolveAbilityRegistryPath, writeAbilityRegistry, } from "./cli-add-workspace-ability-registry.js";
|
|
7
|
+
import { buildAbilityClientSource, buildAbilityConfigEntry, buildAbilityConfigSource, buildAbilityDataSource, buildAbilityPhpSource, buildAbilitySyncScriptSource, buildAbilityTypesSource, } from "./cli-add-workspace-ability-templates.js";
|
|
9
8
|
import { getWorkspaceBootstrapPath, patchFile, } from "./cli-add-shared.js";
|
|
10
|
-
import {
|
|
9
|
+
import { executeWorkspaceMutationPlan, } from "./cli-add-workspace-mutation.js";
|
|
11
10
|
import { updatePluginHeaderCompatibility, } from "./scaffold-compatibility.js";
|
|
12
|
-
import { DEFAULT_WORDPRESS_ABILITIES_VERSION, DEFAULT_WORDPRESS_CORE_ABILITIES_VERSION, } from "./package-versions.js";
|
|
13
|
-
import { escapeRegex, findPhpFunctionRange, hasPhpFunctionCall, hasPhpFunctionDefinition, replacePhpFunctionDefinition, } from "./php-utils.js";
|
|
14
11
|
import { toPascalCase } from "./string-case.js";
|
|
15
|
-
function resolveManagedDependencyVersion(existingVersion, requiredVersion) {
|
|
16
|
-
if (!existingVersion) {
|
|
17
|
-
return requiredVersion;
|
|
18
|
-
}
|
|
19
|
-
const existingMinimum = semver.minVersion(existingVersion);
|
|
20
|
-
const requiredMinimum = semver.minVersion(requiredVersion);
|
|
21
|
-
if (!existingMinimum || !requiredMinimum) {
|
|
22
|
-
return requiredVersion;
|
|
23
|
-
}
|
|
24
|
-
return semver.gte(existingMinimum, requiredMinimum)
|
|
25
|
-
? existingVersion
|
|
26
|
-
: requiredVersion;
|
|
27
|
-
}
|
|
28
|
-
async function resolveAbilityRegistryPath(projectDir) {
|
|
29
|
-
const abilitiesDir = path.join(projectDir, "src", "abilities");
|
|
30
|
-
for (const candidatePath of [
|
|
31
|
-
path.join(abilitiesDir, "index.ts"),
|
|
32
|
-
path.join(abilitiesDir, "index.js"),
|
|
33
|
-
]) {
|
|
34
|
-
if (await pathExists(candidatePath)) {
|
|
35
|
-
return candidatePath;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return path.join(abilitiesDir, "index.ts");
|
|
39
|
-
}
|
|
40
|
-
async function readAbilityRegistrySlugs(registryPath) {
|
|
41
|
-
const source = await readOptionalUtf8File(registryPath);
|
|
42
|
-
if (source === null) {
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
return Array.from(source.matchAll(/^\s*export\s+\*\s+from\s+['"]\.\/([^/'"]+)\/client(?:\.[cm]?[jt]sx?)?['"];?\s*$/gmu)).map((match) => match[1]);
|
|
46
|
-
}
|
|
47
|
-
async function writeAbilityRegistry(projectDir, abilitySlug) {
|
|
48
|
-
const abilitiesDir = path.join(projectDir, "src", "abilities");
|
|
49
|
-
const registryPath = await resolveAbilityRegistryPath(projectDir);
|
|
50
|
-
await fsp.mkdir(abilitiesDir, { recursive: true });
|
|
51
|
-
const existingAbilitySlugs = (await readWorkspaceInventoryAsync(projectDir)).abilities.map((entry) => entry.slug);
|
|
52
|
-
const existingRegistrySlugs = await readAbilityRegistrySlugs(registryPath);
|
|
53
|
-
const nextAbilitySlugs = Array.from(new Set([...existingAbilitySlugs, ...existingRegistrySlugs, abilitySlug])).sort();
|
|
54
|
-
const generatedSection = buildAbilityRegistrySource(nextAbilitySlugs);
|
|
55
|
-
const existingSource = (await readOptionalUtf8File(registryPath)) ?? "";
|
|
56
|
-
const generatedSectionPattern = new RegExp(`${escapeRegex(ABILITY_REGISTRY_START_MARKER)}[\\s\\S]*?${escapeRegex(ABILITY_REGISTRY_END_MARKER)}\\n?`, "u");
|
|
57
|
-
const nextSource = existingSource
|
|
58
|
-
? generatedSectionPattern.test(existingSource)
|
|
59
|
-
? existingSource.replace(generatedSectionPattern, generatedSection)
|
|
60
|
-
: `${existingSource.trimEnd()}\n\n${generatedSection}`
|
|
61
|
-
: generatedSection;
|
|
62
|
-
await fsp.writeFile(registryPath, nextSource, "utf8");
|
|
63
|
-
}
|
|
64
|
-
async function ensureAbilityBootstrapAnchors(workspace) {
|
|
65
|
-
const bootstrapPath = getWorkspaceBootstrapPath(workspace);
|
|
66
|
-
await patchFile(bootstrapPath, (source) => {
|
|
67
|
-
let nextSource = source;
|
|
68
|
-
const workspaceBaseName = workspace.packageName.split("/").pop() ?? workspace.packageName;
|
|
69
|
-
const loadFunctionName = `${workspace.workspace.phpPrefix}_load_workflow_abilities`;
|
|
70
|
-
const enqueueFunctionName = `${workspace.workspace.phpPrefix}_enqueue_workflow_abilities`;
|
|
71
|
-
const loadHook = `add_action( 'plugins_loaded', '${loadFunctionName}' );`;
|
|
72
|
-
const adminEnqueueHook = `add_action( 'admin_enqueue_scripts', '${enqueueFunctionName}' );`;
|
|
73
|
-
const editorEnqueueHook = `add_action( 'enqueue_block_editor_assets', '${enqueueFunctionName}' );`;
|
|
74
|
-
const loadFunction = `
|
|
75
|
-
|
|
76
|
-
function ${loadFunctionName}() {
|
|
77
|
-
\tforeach ( glob( __DIR__ . '${ABILITY_SERVER_GLOB}' ) ?: array() as $ability_module ) {
|
|
78
|
-
\t\trequire_once $ability_module;
|
|
79
|
-
\t}
|
|
80
|
-
}
|
|
81
|
-
`;
|
|
82
|
-
const enqueueFunction = `
|
|
83
|
-
|
|
84
|
-
function ${enqueueFunctionName}() {
|
|
85
|
-
\tif ( ! class_exists( 'WP_Ability' ) ) {
|
|
86
|
-
\t\treturn;
|
|
87
|
-
\t}
|
|
88
|
-
|
|
89
|
-
\t$script_path = __DIR__ . '/${ABILITY_EDITOR_SCRIPT}';
|
|
90
|
-
\t$asset_path = __DIR__ . '/${ABILITY_EDITOR_ASSET}';
|
|
91
|
-
|
|
92
|
-
\tif ( ! file_exists( $script_path ) || ! file_exists( $asset_path ) ) {
|
|
93
|
-
\t\treturn;
|
|
94
|
-
\t}
|
|
95
|
-
|
|
96
|
-
\t$asset = require $asset_path;
|
|
97
|
-
\tif ( ! is_array( $asset ) ) {
|
|
98
|
-
\t\t$asset = array();
|
|
99
|
-
\t}
|
|
100
|
-
|
|
101
|
-
\t$dependencies = isset( $asset['dependencies'] ) && is_array( $asset['dependencies'] )
|
|
102
|
-
\t\t? $asset['dependencies']
|
|
103
|
-
\t\t: array();
|
|
104
|
-
|
|
105
|
-
\tforeach ( array( '${WP_CORE_ABILITIES_SCRIPT_MODULE_ID}', '${WP_ABILITIES_SCRIPT_MODULE_ID}' ) as $ability_dependency ) {
|
|
106
|
-
\t\t$has_dependency = false;
|
|
107
|
-
\t\tforeach ( $dependencies as $dependency ) {
|
|
108
|
-
\t\t\t$dependency_id = is_array( $dependency ) && isset( $dependency['id'] )
|
|
109
|
-
\t\t\t\t? $dependency['id']
|
|
110
|
-
\t\t\t\t: $dependency;
|
|
111
|
-
\t\t\tif ( $dependency_id === $ability_dependency ) {
|
|
112
|
-
\t\t\t\t$has_dependency = true;
|
|
113
|
-
\t\t\t\tbreak;
|
|
114
|
-
\t\t\t}
|
|
115
|
-
\t\t}
|
|
116
|
-
\t\tif ( ! $has_dependency ) {
|
|
117
|
-
\t\t\t$dependencies[] = $ability_dependency;
|
|
118
|
-
\t\t}
|
|
119
|
-
\t}
|
|
120
|
-
|
|
121
|
-
\tif ( ! function_exists( 'wp_enqueue_script_module' ) ) {
|
|
122
|
-
\t\treturn;
|
|
123
|
-
\t}
|
|
124
|
-
|
|
125
|
-
\twp_enqueue_script_module(
|
|
126
|
-
\t\t'${workspaceBaseName}-abilities',
|
|
127
|
-
\t\tplugins_url( '${ABILITY_EDITOR_SCRIPT}', __FILE__ ),
|
|
128
|
-
\t\t$dependencies,
|
|
129
|
-
\t\tisset( $asset['version'] ) ? $asset['version'] : filemtime( $script_path )
|
|
130
|
-
\t);
|
|
131
|
-
}
|
|
132
|
-
`;
|
|
133
|
-
if (!hasPhpFunctionDefinition(nextSource, loadFunctionName)) {
|
|
134
|
-
nextSource = insertPhpSnippetBeforeWorkspaceAnchors(nextSource, loadFunction);
|
|
135
|
-
}
|
|
136
|
-
if (!hasPhpFunctionDefinition(nextSource, enqueueFunctionName)) {
|
|
137
|
-
nextSource = insertPhpSnippetBeforeWorkspaceAnchors(nextSource, enqueueFunction);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
const functionRange = findPhpFunctionRange(nextSource, enqueueFunctionName);
|
|
141
|
-
const functionSource = functionRange
|
|
142
|
-
? nextSource.slice(functionRange.start, functionRange.end)
|
|
143
|
-
: "";
|
|
144
|
-
if (!hasPhpFunctionCall(functionSource, "wp_enqueue_script_module")) {
|
|
145
|
-
const replacedSource = replacePhpFunctionDefinition(nextSource, enqueueFunctionName, enqueueFunction, { trimReplacementStart: true });
|
|
146
|
-
if (!replacedSource) {
|
|
147
|
-
throw new Error(`Unable to repair ${path.basename(bootstrapPath)} for ${enqueueFunctionName}.`);
|
|
148
|
-
}
|
|
149
|
-
nextSource = replacedSource;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (!nextSource.includes(loadHook)) {
|
|
153
|
-
nextSource = appendPhpSnippetBeforeClosingTag(nextSource, loadHook);
|
|
154
|
-
}
|
|
155
|
-
if (!nextSource.includes(adminEnqueueHook)) {
|
|
156
|
-
nextSource = appendPhpSnippetBeforeClosingTag(nextSource, adminEnqueueHook);
|
|
157
|
-
}
|
|
158
|
-
if (!nextSource.includes(editorEnqueueHook)) {
|
|
159
|
-
nextSource = appendPhpSnippetBeforeClosingTag(nextSource, editorEnqueueHook);
|
|
160
|
-
}
|
|
161
|
-
return nextSource;
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
async function ensureAbilityPackageScripts(workspace) {
|
|
165
|
-
const packageJsonPath = path.join(workspace.projectDir, "package.json");
|
|
166
|
-
const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, "utf8"));
|
|
167
|
-
const nextScripts = {
|
|
168
|
-
...(packageJson.scripts ?? {}),
|
|
169
|
-
"sync-abilities": packageJson.scripts?.["sync-abilities"] ?? "tsx scripts/sync-abilities.ts",
|
|
170
|
-
};
|
|
171
|
-
const nextDependencies = {
|
|
172
|
-
...(packageJson.dependencies ?? {}),
|
|
173
|
-
[WP_ABILITIES_SCRIPT_MODULE_ID]: resolveManagedDependencyVersion(packageJson.dependencies?.[WP_ABILITIES_SCRIPT_MODULE_ID], DEFAULT_WORDPRESS_ABILITIES_VERSION),
|
|
174
|
-
[WP_CORE_ABILITIES_SCRIPT_MODULE_ID]: resolveManagedDependencyVersion(packageJson.dependencies?.[WP_CORE_ABILITIES_SCRIPT_MODULE_ID], DEFAULT_WORDPRESS_CORE_ABILITIES_VERSION),
|
|
175
|
-
};
|
|
176
|
-
if (JSON.stringify(nextScripts) === JSON.stringify(packageJson.scripts ?? {}) &&
|
|
177
|
-
JSON.stringify(nextDependencies) === JSON.stringify(packageJson.dependencies ?? {})) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
packageJson.scripts = nextScripts;
|
|
181
|
-
packageJson.dependencies = nextDependencies;
|
|
182
|
-
await fsp.writeFile(packageJsonPath, `${JSON.stringify(packageJson, null, "\t")}\n`, "utf8");
|
|
183
|
-
}
|
|
184
|
-
async function ensureAbilitySyncProjectAnchors(workspace) {
|
|
185
|
-
const syncProjectScriptPath = path.join(workspace.projectDir, "scripts", "sync-project.ts");
|
|
186
|
-
await patchFile(syncProjectScriptPath, (source) => {
|
|
187
|
-
let nextSource = source;
|
|
188
|
-
const syncRestConst = "const syncRestScriptPath = path.join( 'scripts', 'sync-rest-contracts.ts' );";
|
|
189
|
-
const syncAbilitiesConst = "const syncAbilitiesScriptPath = path.join( 'scripts', 'sync-abilities.ts' );";
|
|
190
|
-
const syncRestBlockPattern = /if \( fs\.existsSync\( path\.resolve\( process\.cwd\(\), syncRestScriptPath \) \) \) \{\n\s*runSyncScript\( syncRestScriptPath, options \);\n\s*\}/u;
|
|
191
|
-
const syncAbilitiesBlock = [
|
|
192
|
-
"if ( fs.existsSync( path.resolve( process.cwd(), syncAbilitiesScriptPath ) ) ) {",
|
|
193
|
-
"\trunSyncScript( syncAbilitiesScriptPath, options );",
|
|
194
|
-
"}",
|
|
195
|
-
].join("\n");
|
|
196
|
-
if (!nextSource.includes(syncAbilitiesConst)) {
|
|
197
|
-
if (!nextSource.includes(syncRestConst)) {
|
|
198
|
-
throw new Error([
|
|
199
|
-
`ensureAbilitySyncProjectAnchors could not patch ${path.basename(syncProjectScriptPath)}.`,
|
|
200
|
-
"Missing the expected sync-rest script constant in scripts/sync-project.ts.",
|
|
201
|
-
"Restore the generated template or wire sync-abilities manually before retrying.",
|
|
202
|
-
].join(" "));
|
|
203
|
-
}
|
|
204
|
-
nextSource = nextSource.replace(syncRestConst, `${syncRestConst}\n${syncAbilitiesConst}`);
|
|
205
|
-
}
|
|
206
|
-
if (!nextSource.includes("runSyncScript( syncAbilitiesScriptPath, options );")) {
|
|
207
|
-
if (!syncRestBlockPattern.test(nextSource)) {
|
|
208
|
-
throw new Error([
|
|
209
|
-
`ensureAbilitySyncProjectAnchors could not patch ${path.basename(syncProjectScriptPath)}.`,
|
|
210
|
-
"Missing the expected sync-rest invocation block in scripts/sync-project.ts.",
|
|
211
|
-
"Restore the generated template or wire sync-abilities manually before retrying.",
|
|
212
|
-
].join(" "));
|
|
213
|
-
}
|
|
214
|
-
nextSource = nextSource.replace(syncRestBlockPattern, (match) => `${match}\n\n${syncAbilitiesBlock}`);
|
|
215
|
-
}
|
|
216
|
-
return nextSource;
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
async function ensureAbilityBuildScriptAnchors(workspace) {
|
|
220
|
-
const buildScriptPath = path.join(workspace.projectDir, "scripts", "build-workspace.mjs");
|
|
221
|
-
await patchFile(buildScriptPath, (source) => {
|
|
222
|
-
let nextSource = source;
|
|
223
|
-
if (/['"]src\/abilities\/index\.(?:ts|js)['"]/u.test(nextSource)) {
|
|
224
|
-
return nextSource;
|
|
225
|
-
}
|
|
226
|
-
const sharedEntriesPattern = /(for\s*\(\s*const\s+relativePath\s+of\s+\[)([\s\S]*?)(\]\s*\)\s*\{)/u;
|
|
227
|
-
const match = nextSource.match(sharedEntriesPattern);
|
|
228
|
-
if (!match ||
|
|
229
|
-
!/['"]src\/bindings\/index\.(?:ts|js)['"]/u.test(match[2]) ||
|
|
230
|
-
!/['"]src\/editor-plugins\/index\.(?:tsx|ts|js)['"]/u.test(match[2])) {
|
|
231
|
-
throw new Error([
|
|
232
|
-
`ensureAbilityBuildScriptAnchors could not patch ${path.basename(buildScriptPath)}.`,
|
|
233
|
-
"Missing the expected shared editor entries array in scripts/build-workspace.mjs.",
|
|
234
|
-
"Restore the generated template or wire abilities/index manually before retrying.",
|
|
235
|
-
].join(" "));
|
|
236
|
-
}
|
|
237
|
-
nextSource = nextSource.replace(sharedEntriesPattern, (fullMatch, sharedEntries) => {
|
|
238
|
-
const missingAbilityEntries = [
|
|
239
|
-
"'src/abilities/index.ts'",
|
|
240
|
-
"'src/abilities/index.js'",
|
|
241
|
-
].filter((entry) => !sharedEntries.includes(entry));
|
|
242
|
-
if (missingAbilityEntries.length === 0) {
|
|
243
|
-
return fullMatch;
|
|
244
|
-
}
|
|
245
|
-
const itemIndent = sharedEntries.match(/\n([ \t]*)['"]/u)?.[1] ?? "\t\t";
|
|
246
|
-
const trimmedEntries = sharedEntries.replace(/\s*$/u, "");
|
|
247
|
-
const trailingWhitespace = sharedEntries.slice(trimmedEntries.length);
|
|
248
|
-
const separator = trimmedEntries.trimEnd().endsWith(",") ? "" : ",";
|
|
249
|
-
const nextEntries = `${trimmedEntries}${separator}` +
|
|
250
|
-
missingAbilityEntries.map((entry) => `\n${itemIndent}${entry},`).join("") +
|
|
251
|
-
trailingWhitespace;
|
|
252
|
-
return fullMatch.replace(sharedEntries, nextEntries);
|
|
253
|
-
});
|
|
254
|
-
return nextSource;
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
async function ensureAbilityWebpackAnchors(workspace) {
|
|
258
|
-
const webpackConfigPath = path.join(workspace.projectDir, "webpack.config.js");
|
|
259
|
-
await patchFile(webpackConfigPath, (source) => {
|
|
260
|
-
if (/['"]abilities\/index['"]/u.test(source)) {
|
|
261
|
-
return source;
|
|
262
|
-
}
|
|
263
|
-
const optionalModuleReturnPattern = /(function\s+getOptionalModuleEntries\s*\(\)\s*\{[\s\S]*?)(\n\treturn Object\.fromEntries\(\s*entries\s*\);\n\})/u;
|
|
264
|
-
if (optionalModuleReturnPattern.test(source)) {
|
|
265
|
-
return source.replace(optionalModuleReturnPattern, `$1
|
|
266
|
-
|
|
267
|
-
\tfor ( const [ entryName, candidates ] of [
|
|
268
|
-
\t\t[
|
|
269
|
-
\t\t\t'abilities/index',
|
|
270
|
-
\t\t\t[ 'src/abilities/index.ts', 'src/abilities/index.js' ],
|
|
271
|
-
\t\t],
|
|
272
|
-
\t] ) {
|
|
273
|
-
\t\tfor ( const relativePath of candidates ) {
|
|
274
|
-
\t\t\tconst entryPath = path.resolve( process.cwd(), relativePath );
|
|
275
|
-
\t\t\tif ( ! fs.existsSync( entryPath ) ) {
|
|
276
|
-
\t\t\t\tcontinue;
|
|
277
|
-
\t\t\t}
|
|
278
|
-
|
|
279
|
-
\t\t\tentries.push( [ entryName, entryPath ] );
|
|
280
|
-
\t\t\tbreak;
|
|
281
|
-
\t\t}
|
|
282
|
-
\t}$2`);
|
|
283
|
-
}
|
|
284
|
-
const sharedEntriesPattern = /for\s*\(\s*const\s+\[\s*entryName\s*,\s*candidates\s*\]\s+of\s+\[([\s\S]*?)\]\s*\)\s*\{/u;
|
|
285
|
-
const match = source.match(sharedEntriesPattern);
|
|
286
|
-
if (!match ||
|
|
287
|
-
!match[1].includes("bindings/index") ||
|
|
288
|
-
!match[1].includes("editor-plugins/index")) {
|
|
289
|
-
throw new Error([
|
|
290
|
-
`ensureAbilityWebpackAnchors could not patch ${path.basename(webpackConfigPath)}.`,
|
|
291
|
-
"Missing the expected shared editor entries block in webpack.config.js.",
|
|
292
|
-
"Restore the generated template or wire abilities/index manually before retrying.",
|
|
293
|
-
].join(" "));
|
|
294
|
-
}
|
|
295
|
-
return source.replace(sharedEntriesPattern, (fullMatch, sharedEntries) => {
|
|
296
|
-
if (/['"]abilities\/index['"]/u.test(sharedEntries)) {
|
|
297
|
-
return fullMatch;
|
|
298
|
-
}
|
|
299
|
-
const tupleIndent = sharedEntries.match(/\n([ \t]*)\[/u)?.[1] ?? "\t\t";
|
|
300
|
-
const nestedIndent = `${tupleIndent}\t`;
|
|
301
|
-
const trimmedEntries = sharedEntries.replace(/\s*$/u, "");
|
|
302
|
-
const trailingWhitespace = sharedEntries.slice(trimmedEntries.length);
|
|
303
|
-
const separator = trimmedEntries.trimEnd().endsWith(",") ? "" : ",";
|
|
304
|
-
const abilityTuple = [
|
|
305
|
-
`${tupleIndent}[`,
|
|
306
|
-
`${nestedIndent}'abilities/index',`,
|
|
307
|
-
`${nestedIndent}[ 'src/abilities/index.ts', 'src/abilities/index.js' ],`,
|
|
308
|
-
`${tupleIndent}],`,
|
|
309
|
-
].join("\n");
|
|
310
|
-
const nextEntries = `${trimmedEntries}${separator}\n${abilityTuple}` + trailingWhitespace;
|
|
311
|
-
return fullMatch.replace(sharedEntries, nextEntries);
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
12
|
/**
|
|
316
13
|
* Write generated workflow ability sources and patch shared workspace anchors.
|
|
317
14
|
*/
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { promises as fsp } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { pathExists, readOptionalUtf8File } from './fs-async.js';
|
|
4
|
+
import { safeJsonParse } from './json-utils.js';
|
|
4
5
|
import { appendWorkspaceInventoryEntries, readWorkspaceInventoryAsync, } from './workspace-inventory.js';
|
|
5
6
|
import { buildAdminViewConfigEntry, buildAdminViewConfigSource, buildAdminViewEntrySource, buildAdminViewPhpSource, buildAdminViewRegistrySource, buildAdminViewScreenSource, buildAdminViewStyleSource, buildAdminViewTypesSource, buildCoreDataAdminViewDataSource, buildCoreDataAdminViewScreenSource, buildDefaultAdminViewDataSource, buildRestAdminViewDataSource, buildRestSettingsAdminViewConfigSource, buildRestSettingsAdminViewDataSource, buildRestSettingsAdminViewScreenSource, buildRestSettingsAdminViewTypesSource, } from './cli-add-workspace-admin-view-templates.js';
|
|
6
7
|
import { ADMIN_VIEWS_PHP_GLOB, isAdminViewCoreDataSource, isAdminViewManualSettingsRestResource, } from './cli-add-workspace-admin-view-types.js';
|
|
7
|
-
import { buildManualRestContractApiSource } from './cli-add-workspace-rest-source-emitters.js';
|
|
8
|
+
import { buildManualRestContractApiSource } from './cli-add-workspace-rest-manual-source-emitters.js';
|
|
8
9
|
import { getWorkspaceBootstrapPath, patchFile, } from './cli-add-shared.js';
|
|
9
10
|
import { appendPhpSnippetBeforeClosingTag, executeWorkspaceMutationPlan, insertPhpSnippetBeforeWorkspaceAnchors, } from './cli-add-workspace-mutation.js';
|
|
10
11
|
import { DEFAULT_WORDPRESS_CORE_DATA_VERSION, DEFAULT_WORDPRESS_DATA_VERSION, DEFAULT_WORDPRESS_DATAVIEWS_VERSION, DEFAULT_WP_TYPIA_DATAVIEWS_VERSION, resolveManagedPackageVersionRange, } from './package-versions.js';
|
|
@@ -60,7 +61,10 @@ async function ensureAdminViewPackageDependencies(workspace, adminViewSource, re
|
|
|
60
61
|
packageName: '@wordpress/data',
|
|
61
62
|
});
|
|
62
63
|
await patchFile(packageJsonPath, (source) => {
|
|
63
|
-
const packageJson =
|
|
64
|
+
const packageJson = safeJsonParse(source, {
|
|
65
|
+
context: 'admin view package manifest',
|
|
66
|
+
filePath: packageJsonPath,
|
|
67
|
+
});
|
|
64
68
|
const needsDataViews = !isAdminViewManualSettingsRestResource(restResource);
|
|
65
69
|
const coreDataDependencies = isAdminViewCoreDataSource(adminViewSource)
|
|
66
70
|
? {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type AdminViewCoreDataSource } from './cli-add-workspace-admin-view-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds TypeScript item and dataset types for a core-data-backed admin view.
|
|
4
|
+
*
|
|
5
|
+
* @param adminViewSlug - Admin-view slug used to derive generated type names.
|
|
6
|
+
* @param coreDataSource - WordPress core-data entity source for the admin view.
|
|
7
|
+
* @returns Generated TypeScript source for core-data admin-view types.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildCoreDataAdminViewTypesSource(adminViewSlug: string, coreDataSource: AdminViewCoreDataSource): string;
|
|
10
|
+
/**
|
|
11
|
+
* Builds a DataViews config module for a core-data-backed admin view.
|
|
12
|
+
*
|
|
13
|
+
* @param adminViewSlug - Admin-view slug used to derive generated identifiers.
|
|
14
|
+
* @param textDomain - WordPress i18n text domain for generated labels.
|
|
15
|
+
* @param coreDataSource - WordPress core-data entity source for field selection.
|
|
16
|
+
* @returns Generated TypeScript source for the core-data DataViews config.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildCoreDataAdminViewConfigSource(adminViewSlug: string, textDomain: string, coreDataSource: AdminViewCoreDataSource): string;
|
|
19
|
+
/**
|
|
20
|
+
* Builds data hooks for loading records from the WordPress core-data store.
|
|
21
|
+
*
|
|
22
|
+
* @param adminViewSlug - Admin-view slug used to derive generated identifiers.
|
|
23
|
+
* @param coreDataSource - WordPress core-data entity source for generated hooks.
|
|
24
|
+
* @returns Generated TypeScript source for core-data data access.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildCoreDataAdminViewDataSource(adminViewSlug: string, coreDataSource: AdminViewCoreDataSource): string;
|
|
27
|
+
/**
|
|
28
|
+
* Builds the React screen module for a core-data-backed admin view.
|
|
29
|
+
*
|
|
30
|
+
* @param adminViewSlug - Admin-view slug used to derive generated identifiers.
|
|
31
|
+
* @param textDomain - WordPress i18n text domain for generated labels.
|
|
32
|
+
* @returns Generated TSX source for the core-data admin-view screen.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildCoreDataAdminViewScreenSource(adminViewSlug: string, textDomain: string): string;
|