@wp-typia/project-tools 0.11.1
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/README.md +32 -0
- package/dist/runtime/cli-add.d.ts +38 -0
- package/dist/runtime/cli-add.js +561 -0
- package/dist/runtime/cli-core.d.ts +25 -0
- package/dist/runtime/cli-core.js +25 -0
- package/dist/runtime/cli-doctor.d.ts +34 -0
- package/dist/runtime/cli-doctor.js +131 -0
- package/dist/runtime/cli-help.d.ts +9 -0
- package/dist/runtime/cli-help.js +37 -0
- package/dist/runtime/cli-prompt.d.ts +21 -0
- package/dist/runtime/cli-prompt.js +53 -0
- package/dist/runtime/cli-scaffold.d.ts +79 -0
- package/dist/runtime/cli-scaffold.js +206 -0
- package/dist/runtime/cli-templates.d.ts +30 -0
- package/dist/runtime/cli-templates.js +61 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/json-utils.d.ts +10 -0
- package/dist/runtime/json-utils.js +12 -0
- package/dist/runtime/local-dev-presets.d.ts +26 -0
- package/dist/runtime/local-dev-presets.js +132 -0
- package/dist/runtime/metadata-analysis.d.ts +11 -0
- package/dist/runtime/metadata-analysis.js +285 -0
- package/dist/runtime/metadata-model.d.ts +84 -0
- package/dist/runtime/metadata-model.js +59 -0
- package/dist/runtime/metadata-parser.d.ts +53 -0
- package/dist/runtime/metadata-parser.js +794 -0
- package/dist/runtime/metadata-php-render.d.ts +29 -0
- package/dist/runtime/metadata-php-render.js +549 -0
- package/dist/runtime/metadata-projection.d.ts +7 -0
- package/dist/runtime/metadata-projection.js +233 -0
- package/dist/runtime/migration-constants.d.ts +15 -0
- package/dist/runtime/migration-constants.js +16 -0
- package/dist/runtime/migration-diff.d.ts +2 -0
- package/dist/runtime/migration-diff.js +537 -0
- package/dist/runtime/migration-fixtures.d.ts +8 -0
- package/dist/runtime/migration-fixtures.js +94 -0
- package/dist/runtime/migration-fuzz-plan.d.ts +2 -0
- package/dist/runtime/migration-fuzz-plan.js +50 -0
- package/dist/runtime/migration-manifest.d.ts +19 -0
- package/dist/runtime/migration-manifest.js +129 -0
- package/dist/runtime/migration-project.d.ts +94 -0
- package/dist/runtime/migration-project.js +1101 -0
- package/dist/runtime/migration-render.d.ts +11 -0
- package/dist/runtime/migration-render.js +741 -0
- package/dist/runtime/migration-risk.d.ts +4 -0
- package/dist/runtime/migration-risk.js +52 -0
- package/dist/runtime/migration-types.d.ts +249 -0
- package/dist/runtime/migration-types.js +1 -0
- package/dist/runtime/migration-ui-capability.d.ts +17 -0
- package/dist/runtime/migration-ui-capability.js +190 -0
- package/dist/runtime/migration-utils.d.ts +69 -0
- package/dist/runtime/migration-utils.js +246 -0
- package/dist/runtime/migrations.d.ts +249 -0
- package/dist/runtime/migrations.js +1061 -0
- package/dist/runtime/object-utils.d.ts +12 -0
- package/dist/runtime/object-utils.js +14 -0
- package/dist/runtime/package-managers.d.ts +28 -0
- package/dist/runtime/package-managers.js +156 -0
- package/dist/runtime/package-versions.d.ts +10 -0
- package/dist/runtime/package-versions.js +68 -0
- package/dist/runtime/scaffold-onboarding.d.ts +32 -0
- package/dist/runtime/scaffold-onboarding.js +99 -0
- package/dist/runtime/scaffold.d.ts +146 -0
- package/dist/runtime/scaffold.js +612 -0
- package/dist/runtime/schema-core.d.ts +267 -0
- package/dist/runtime/schema-core.js +597 -0
- package/dist/runtime/starter-manifests.d.ts +25 -0
- package/dist/runtime/starter-manifests.js +383 -0
- package/dist/runtime/string-case.d.ts +36 -0
- package/dist/runtime/string-case.js +69 -0
- package/dist/runtime/template-builtins.d.ts +38 -0
- package/dist/runtime/template-builtins.js +72 -0
- package/dist/runtime/template-defaults.d.ts +75 -0
- package/dist/runtime/template-defaults.js +65 -0
- package/dist/runtime/template-registry.d.ts +36 -0
- package/dist/runtime/template-registry.js +94 -0
- package/dist/runtime/template-render.d.ts +24 -0
- package/dist/runtime/template-render.js +113 -0
- package/dist/runtime/template-source.d.ts +71 -0
- package/dist/runtime/template-source.js +821 -0
- package/dist/runtime/typia-tags.d.ts +1 -0
- package/dist/runtime/typia-tags.js +1 -0
- package/package.json +79 -0
- package/templates/_shared/base/languages/.gitkeep +1 -0
- package/templates/_shared/base/package.json.mustache +41 -0
- package/templates/_shared/base/scripts/sync-types-to-block-json.ts.mustache +118 -0
- package/templates/_shared/base/src/hooks.ts.mustache +19 -0
- package/templates/_shared/base/src/validator-toolkit.ts.mustache +31 -0
- package/templates/_shared/base/tsconfig.json.mustache +21 -0
- package/templates/_shared/base/webpack.config.js.mustache +99 -0
- package/templates/_shared/base/{{slugKebabCase}}.php.mustache +53 -0
- package/templates/_shared/compound/core/package.json.mustache +45 -0
- package/templates/_shared/compound/core/scripts/add-compound-child.ts.mustache +559 -0
- package/templates/_shared/compound/core/scripts/block-config.ts.mustache +13 -0
- package/templates/_shared/compound/core/scripts/sync-types-to-block-json.ts.mustache +53 -0
- package/templates/_shared/compound/core/webpack.config.js.mustache +141 -0
- package/templates/_shared/compound/core/{{slugKebabCase}}.php.mustache +51 -0
- package/templates/_shared/compound/persistence/package.json.mustache +50 -0
- package/templates/_shared/compound/persistence/scripts/block-config.ts.mustache +59 -0
- package/templates/_shared/compound/persistence/scripts/sync-rest-contracts.ts.mustache +101 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/api-types.ts.mustache +21 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/api-validators.ts.mustache +32 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/api.ts.mustache +68 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/block.json.mustache +52 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/data.ts.mustache +192 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/edit.tsx.mustache +123 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/hooks.ts.mustache +11 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/interactivity.ts.mustache +132 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/render.php.mustache +158 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/save.tsx.mustache +3 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/types.ts.mustache +56 -0
- package/templates/_shared/compound/persistence/src/blocks/{{slugKebabCase}}/validators.ts.mustache +32 -0
- package/templates/_shared/compound/persistence-auth/{{slugKebabCase}}.php.mustache +294 -0
- package/templates/_shared/compound/persistence-public/{{slugKebabCase}}.php.mustache +312 -0
- package/templates/_shared/migration-ui/common/src/admin/migration-dashboard.tsx +394 -0
- package/templates/_shared/migration-ui/common/src/migration-detector.ts +9 -0
- package/templates/_shared/migration-ui/common/src/migrations/helpers.ts +490 -0
- package/templates/_shared/migration-ui/common/src/migrations/index.ts +886 -0
- package/templates/_shared/persistence/auth/{{slugKebabCase}}.php.mustache +290 -0
- package/templates/_shared/persistence/core/package.json.mustache +46 -0
- package/templates/_shared/persistence/core/scripts/sync-rest-contracts.ts.mustache +113 -0
- package/templates/_shared/persistence/core/scripts/sync-types-to-block-json.ts.mustache +125 -0
- package/templates/_shared/persistence/core/src/api-types.ts.mustache +21 -0
- package/templates/_shared/persistence/core/src/api-validators.ts.mustache +32 -0
- package/templates/_shared/persistence/core/src/api.ts.mustache +68 -0
- package/templates/_shared/persistence/core/src/data.ts.mustache +192 -0
- package/templates/_shared/persistence/core/src/index.tsx.mustache +25 -0
- package/templates/_shared/persistence/core/src/interactivity.ts.mustache +134 -0
- package/templates/_shared/persistence/core/src/save.tsx.mustache +5 -0
- package/templates/_shared/persistence/core/src/validators.ts.mustache +32 -0
- package/templates/_shared/persistence/core/{{slugKebabCase}}.php.mustache +336 -0
- package/templates/_shared/persistence/public/{{slugKebabCase}}.php.mustache +308 -0
- package/templates/_shared/presets/test-preset/.wp-env.test.json.mustache +16 -0
- package/templates/_shared/presets/test-preset/playwright.config.ts.mustache +22 -0
- package/templates/_shared/presets/test-preset/scripts/wait-for-wp-env.mjs.mustache +102 -0
- package/templates/_shared/presets/test-preset/scripts/wp-env-utils.cjs.mustache +32 -0
- package/templates/_shared/presets/test-preset/tests/e2e/smoke.spec.ts.mustache +34 -0
- package/templates/_shared/presets/wp-env/.wp-env.json.mustache +16 -0
- package/templates/_shared/rest-helpers/auth/inc/rest-auth.php.mustache +37 -0
- package/templates/_shared/rest-helpers/public/inc/rest-public.php.mustache +314 -0
- package/templates/_shared/rest-helpers/shared/inc/rest-shared.php.mustache +58 -0
- package/templates/_shared/workspace/persistence-auth/inc/rest-auth.php.mustache +36 -0
- package/templates/_shared/workspace/persistence-auth/inc/rest-shared.php.mustache +55 -0
- package/templates/_shared/workspace/persistence-auth/server.php.mustache +237 -0
- package/templates/_shared/workspace/persistence-public/inc/rest-public.php.mustache +273 -0
- package/templates/_shared/workspace/persistence-public/inc/rest-shared.php.mustache +55 -0
- package/templates/_shared/workspace/persistence-public/server.php.mustache +252 -0
- package/templates/basic/src/block.json.mustache +51 -0
- package/templates/basic/src/edit.tsx.mustache +128 -0
- package/templates/basic/src/editor.scss.mustache +8 -0
- package/templates/basic/src/hooks.ts.mustache +18 -0
- package/templates/basic/src/index.tsx.mustache +45 -0
- package/templates/basic/src/save.tsx.mustache +30 -0
- package/templates/basic/src/style.scss.mustache +40 -0
- package/templates/basic/src/types.ts.mustache +56 -0
- package/templates/basic/src/validators.ts.mustache +26 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/block.json.mustache +37 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/children.ts.mustache +25 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/edit.tsx.mustache +93 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/hooks.ts.mustache +11 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/index.tsx.mustache +25 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/save.tsx.mustache +32 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/style.scss.mustache +31 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/types.ts.mustache +13 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}/validators.ts.mustache +17 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/block.json.mustache +35 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/edit.tsx.mustache +50 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/hooks.ts.mustache +11 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/index.tsx.mustache +25 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/save.tsx.mustache +24 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/types.ts.mustache +12 -0
- package/templates/compound/src/blocks/{{slugKebabCase}}-item/validators.ts.mustache +17 -0
- package/templates/interactivity/package.json.mustache +42 -0
- package/templates/interactivity/src/block.json.mustache +73 -0
- package/templates/interactivity/src/edit.tsx.mustache +270 -0
- package/templates/interactivity/src/index.tsx.mustache +32 -0
- package/templates/interactivity/src/interactivity.ts.mustache +152 -0
- package/templates/interactivity/src/save.tsx.mustache +101 -0
- package/templates/interactivity/src/style.scss.mustache +60 -0
- package/templates/interactivity/src/types.ts.mustache +32 -0
- package/templates/interactivity/src/validators.ts.mustache +36 -0
- package/templates/persistence/src/block.json.mustache +52 -0
- package/templates/persistence/src/edit.tsx.mustache +165 -0
- package/templates/persistence/src/render.php.mustache +126 -0
- package/templates/persistence/src/style.scss.mustache +46 -0
- package/templates/persistence/src/types.ts.mustache +55 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
const ALIGNMENT_VALUES = ["left", "center", "right", "justify"];
|
|
2
|
+
const INTERACTIVE_MODE_VALUES = ["click", "hover", "auto"];
|
|
3
|
+
const ANIMATION_VALUES = ["none", "bounce", "pulse", "shake", "flip"];
|
|
4
|
+
const DEFAULT_COMPOUND_CHILD_BODY_PLACEHOLDER = "Add supporting details for this internal item.";
|
|
5
|
+
function createConstraints(overrides = {}) {
|
|
6
|
+
return {
|
|
7
|
+
exclusiveMaximum: null,
|
|
8
|
+
exclusiveMinimum: null,
|
|
9
|
+
format: null,
|
|
10
|
+
maxLength: null,
|
|
11
|
+
maxItems: null,
|
|
12
|
+
maximum: null,
|
|
13
|
+
minLength: null,
|
|
14
|
+
minItems: null,
|
|
15
|
+
minimum: null,
|
|
16
|
+
multipleOf: null,
|
|
17
|
+
pattern: null,
|
|
18
|
+
typeTag: null,
|
|
19
|
+
...overrides,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function createAttribute({ constraints, defaultValue, enumValues = null, kind, required, sourceType, }) {
|
|
23
|
+
const hasDefault = defaultValue !== undefined;
|
|
24
|
+
return {
|
|
25
|
+
ts: {
|
|
26
|
+
items: null,
|
|
27
|
+
kind,
|
|
28
|
+
properties: null,
|
|
29
|
+
required,
|
|
30
|
+
union: null,
|
|
31
|
+
},
|
|
32
|
+
typia: {
|
|
33
|
+
constraints: createConstraints(constraints),
|
|
34
|
+
defaultValue: hasDefault ? defaultValue : null,
|
|
35
|
+
hasDefault,
|
|
36
|
+
},
|
|
37
|
+
wp: {
|
|
38
|
+
defaultValue: hasDefault ? defaultValue : null,
|
|
39
|
+
enum: enumValues,
|
|
40
|
+
hasDefault,
|
|
41
|
+
type: sourceType,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function createManifest(sourceType, attributes) {
|
|
46
|
+
return {
|
|
47
|
+
attributes,
|
|
48
|
+
manifestVersion: 2,
|
|
49
|
+
sourceType,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function buildBasicStarterManifest(variables) {
|
|
53
|
+
return createManifest(`${variables.pascalCase}Attributes`, {
|
|
54
|
+
alignment: createAttribute({
|
|
55
|
+
defaultValue: "left",
|
|
56
|
+
enumValues: [...ALIGNMENT_VALUES],
|
|
57
|
+
kind: "string",
|
|
58
|
+
required: false,
|
|
59
|
+
sourceType: "string",
|
|
60
|
+
}),
|
|
61
|
+
className: createAttribute({
|
|
62
|
+
constraints: {
|
|
63
|
+
maxLength: 100,
|
|
64
|
+
},
|
|
65
|
+
defaultValue: "",
|
|
66
|
+
kind: "string",
|
|
67
|
+
required: false,
|
|
68
|
+
sourceType: "string",
|
|
69
|
+
}),
|
|
70
|
+
content: createAttribute({
|
|
71
|
+
constraints: {
|
|
72
|
+
maxLength: 1000,
|
|
73
|
+
},
|
|
74
|
+
defaultValue: "",
|
|
75
|
+
kind: "string",
|
|
76
|
+
required: true,
|
|
77
|
+
sourceType: "string",
|
|
78
|
+
}),
|
|
79
|
+
id: createAttribute({
|
|
80
|
+
constraints: {
|
|
81
|
+
format: "uuid",
|
|
82
|
+
},
|
|
83
|
+
kind: "string",
|
|
84
|
+
required: false,
|
|
85
|
+
sourceType: "string",
|
|
86
|
+
}),
|
|
87
|
+
isVisible: createAttribute({
|
|
88
|
+
defaultValue: true,
|
|
89
|
+
kind: "boolean",
|
|
90
|
+
required: false,
|
|
91
|
+
sourceType: "boolean",
|
|
92
|
+
}),
|
|
93
|
+
schemaVersion: createAttribute({
|
|
94
|
+
constraints: {
|
|
95
|
+
typeTag: "uint32",
|
|
96
|
+
},
|
|
97
|
+
defaultValue: 1,
|
|
98
|
+
kind: "number",
|
|
99
|
+
required: false,
|
|
100
|
+
sourceType: "number",
|
|
101
|
+
}),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function buildInteractivityStarterManifest(variables) {
|
|
105
|
+
return createManifest(`${variables.pascalCase}Attributes`, {
|
|
106
|
+
alignment: createAttribute({
|
|
107
|
+
defaultValue: "left",
|
|
108
|
+
enumValues: [...ALIGNMENT_VALUES],
|
|
109
|
+
kind: "string",
|
|
110
|
+
required: false,
|
|
111
|
+
sourceType: "string",
|
|
112
|
+
}),
|
|
113
|
+
animation: createAttribute({
|
|
114
|
+
defaultValue: "none",
|
|
115
|
+
enumValues: [...ANIMATION_VALUES],
|
|
116
|
+
kind: "string",
|
|
117
|
+
required: false,
|
|
118
|
+
sourceType: "string",
|
|
119
|
+
}),
|
|
120
|
+
autoPlayInterval: createAttribute({
|
|
121
|
+
constraints: {
|
|
122
|
+
minimum: 0,
|
|
123
|
+
typeTag: "uint32",
|
|
124
|
+
},
|
|
125
|
+
defaultValue: 0,
|
|
126
|
+
kind: "number",
|
|
127
|
+
required: false,
|
|
128
|
+
sourceType: "number",
|
|
129
|
+
}),
|
|
130
|
+
clickCount: createAttribute({
|
|
131
|
+
constraints: {
|
|
132
|
+
minimum: 0,
|
|
133
|
+
typeTag: "uint32",
|
|
134
|
+
},
|
|
135
|
+
defaultValue: 0,
|
|
136
|
+
kind: "number",
|
|
137
|
+
required: false,
|
|
138
|
+
sourceType: "number",
|
|
139
|
+
}),
|
|
140
|
+
content: createAttribute({
|
|
141
|
+
constraints: {
|
|
142
|
+
maxLength: 1000,
|
|
143
|
+
},
|
|
144
|
+
defaultValue: "",
|
|
145
|
+
kind: "string",
|
|
146
|
+
required: true,
|
|
147
|
+
sourceType: "string",
|
|
148
|
+
}),
|
|
149
|
+
interactiveMode: createAttribute({
|
|
150
|
+
defaultValue: "click",
|
|
151
|
+
enumValues: [...INTERACTIVE_MODE_VALUES],
|
|
152
|
+
kind: "string",
|
|
153
|
+
required: false,
|
|
154
|
+
sourceType: "string",
|
|
155
|
+
}),
|
|
156
|
+
isAnimating: createAttribute({
|
|
157
|
+
defaultValue: false,
|
|
158
|
+
kind: "boolean",
|
|
159
|
+
required: false,
|
|
160
|
+
sourceType: "boolean",
|
|
161
|
+
}),
|
|
162
|
+
isVisible: createAttribute({
|
|
163
|
+
defaultValue: true,
|
|
164
|
+
kind: "boolean",
|
|
165
|
+
required: false,
|
|
166
|
+
sourceType: "boolean",
|
|
167
|
+
}),
|
|
168
|
+
maxClicks: createAttribute({
|
|
169
|
+
constraints: {
|
|
170
|
+
minimum: 0,
|
|
171
|
+
typeTag: "uint32",
|
|
172
|
+
},
|
|
173
|
+
defaultValue: 10,
|
|
174
|
+
kind: "number",
|
|
175
|
+
required: false,
|
|
176
|
+
sourceType: "number",
|
|
177
|
+
}),
|
|
178
|
+
showCounter: createAttribute({
|
|
179
|
+
defaultValue: true,
|
|
180
|
+
kind: "boolean",
|
|
181
|
+
required: false,
|
|
182
|
+
sourceType: "boolean",
|
|
183
|
+
}),
|
|
184
|
+
uniqueId: createAttribute({
|
|
185
|
+
defaultValue: "",
|
|
186
|
+
kind: "string",
|
|
187
|
+
required: false,
|
|
188
|
+
sourceType: "string",
|
|
189
|
+
}),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function buildPersistenceStarterManifest(variables) {
|
|
193
|
+
return createManifest(`${variables.pascalCase}Attributes`, {
|
|
194
|
+
alignment: createAttribute({
|
|
195
|
+
defaultValue: "left",
|
|
196
|
+
enumValues: [...ALIGNMENT_VALUES],
|
|
197
|
+
kind: "string",
|
|
198
|
+
required: false,
|
|
199
|
+
sourceType: "string",
|
|
200
|
+
}),
|
|
201
|
+
buttonLabel: createAttribute({
|
|
202
|
+
constraints: {
|
|
203
|
+
maxLength: 40,
|
|
204
|
+
minLength: 1,
|
|
205
|
+
},
|
|
206
|
+
defaultValue: "Persist Count",
|
|
207
|
+
kind: "string",
|
|
208
|
+
required: false,
|
|
209
|
+
sourceType: "string",
|
|
210
|
+
}),
|
|
211
|
+
content: createAttribute({
|
|
212
|
+
constraints: {
|
|
213
|
+
maxLength: 250,
|
|
214
|
+
minLength: 1,
|
|
215
|
+
},
|
|
216
|
+
defaultValue: `${variables.title} persistence block`,
|
|
217
|
+
kind: "string",
|
|
218
|
+
required: true,
|
|
219
|
+
sourceType: "string",
|
|
220
|
+
}),
|
|
221
|
+
isVisible: createAttribute({
|
|
222
|
+
defaultValue: true,
|
|
223
|
+
kind: "boolean",
|
|
224
|
+
required: false,
|
|
225
|
+
sourceType: "boolean",
|
|
226
|
+
}),
|
|
227
|
+
resourceKey: createAttribute({
|
|
228
|
+
constraints: {
|
|
229
|
+
maxLength: 100,
|
|
230
|
+
minLength: 1,
|
|
231
|
+
},
|
|
232
|
+
defaultValue: "primary",
|
|
233
|
+
kind: "string",
|
|
234
|
+
required: false,
|
|
235
|
+
sourceType: "string",
|
|
236
|
+
}),
|
|
237
|
+
showCount: createAttribute({
|
|
238
|
+
defaultValue: true,
|
|
239
|
+
kind: "boolean",
|
|
240
|
+
required: false,
|
|
241
|
+
sourceType: "boolean",
|
|
242
|
+
}),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function buildCompoundParentStarterManifest(variables) {
|
|
246
|
+
const attributes = {
|
|
247
|
+
heading: createAttribute({
|
|
248
|
+
constraints: {
|
|
249
|
+
maxLength: 80,
|
|
250
|
+
minLength: 1,
|
|
251
|
+
},
|
|
252
|
+
defaultValue: variables.title,
|
|
253
|
+
kind: "string",
|
|
254
|
+
required: true,
|
|
255
|
+
sourceType: "string",
|
|
256
|
+
}),
|
|
257
|
+
intro: createAttribute({
|
|
258
|
+
constraints: {
|
|
259
|
+
maxLength: 180,
|
|
260
|
+
minLength: 1,
|
|
261
|
+
},
|
|
262
|
+
defaultValue: "Add and reorder internal items inside this compound block.",
|
|
263
|
+
kind: "string",
|
|
264
|
+
required: false,
|
|
265
|
+
sourceType: "string",
|
|
266
|
+
}),
|
|
267
|
+
showDividers: createAttribute({
|
|
268
|
+
defaultValue: true,
|
|
269
|
+
kind: "boolean",
|
|
270
|
+
required: false,
|
|
271
|
+
sourceType: "boolean",
|
|
272
|
+
}),
|
|
273
|
+
};
|
|
274
|
+
if (variables.compoundPersistenceEnabled === "true") {
|
|
275
|
+
attributes.showCount = createAttribute({
|
|
276
|
+
defaultValue: true,
|
|
277
|
+
kind: "boolean",
|
|
278
|
+
required: false,
|
|
279
|
+
sourceType: "boolean",
|
|
280
|
+
});
|
|
281
|
+
attributes.buttonLabel = createAttribute({
|
|
282
|
+
constraints: {
|
|
283
|
+
maxLength: 40,
|
|
284
|
+
minLength: 1,
|
|
285
|
+
},
|
|
286
|
+
defaultValue: "Persist Count",
|
|
287
|
+
kind: "string",
|
|
288
|
+
required: false,
|
|
289
|
+
sourceType: "string",
|
|
290
|
+
});
|
|
291
|
+
attributes.resourceKey = createAttribute({
|
|
292
|
+
constraints: {
|
|
293
|
+
maxLength: 100,
|
|
294
|
+
minLength: 1,
|
|
295
|
+
},
|
|
296
|
+
defaultValue: "primary",
|
|
297
|
+
kind: "string",
|
|
298
|
+
required: false,
|
|
299
|
+
sourceType: "string",
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
return createManifest(`${variables.pascalCase}Attributes`, attributes);
|
|
303
|
+
}
|
|
304
|
+
function buildCompoundChildStarterManifest(variables) {
|
|
305
|
+
return buildCompoundChildStarterManifestDocument(`${variables.pascalCase}ItemAttributes`, variables.compoundChildTitle);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Builds the starter manifest used by generated compound child blocks.
|
|
309
|
+
*/
|
|
310
|
+
export function buildCompoundChildStarterManifestDocument(childTypeName, childTitle, bodyPlaceholder = DEFAULT_COMPOUND_CHILD_BODY_PLACEHOLDER) {
|
|
311
|
+
return createManifest(childTypeName, {
|
|
312
|
+
body: createAttribute({
|
|
313
|
+
constraints: {
|
|
314
|
+
maxLength: 280,
|
|
315
|
+
minLength: 1,
|
|
316
|
+
},
|
|
317
|
+
defaultValue: bodyPlaceholder,
|
|
318
|
+
kind: "string",
|
|
319
|
+
required: true,
|
|
320
|
+
sourceType: "string",
|
|
321
|
+
}),
|
|
322
|
+
title: createAttribute({
|
|
323
|
+
constraints: {
|
|
324
|
+
maxLength: 80,
|
|
325
|
+
minLength: 1,
|
|
326
|
+
},
|
|
327
|
+
defaultValue: childTitle,
|
|
328
|
+
kind: "string",
|
|
329
|
+
required: true,
|
|
330
|
+
sourceType: "string",
|
|
331
|
+
}),
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Returns the starter manifest files that should be seeded for a built-in
|
|
336
|
+
* template before the first sync.
|
|
337
|
+
*/
|
|
338
|
+
export function getStarterManifestFiles(templateId, variables) {
|
|
339
|
+
if (templateId === "basic") {
|
|
340
|
+
return [
|
|
341
|
+
{
|
|
342
|
+
document: buildBasicStarterManifest(variables),
|
|
343
|
+
relativePath: "src/typia.manifest.json",
|
|
344
|
+
},
|
|
345
|
+
];
|
|
346
|
+
}
|
|
347
|
+
if (templateId === "interactivity") {
|
|
348
|
+
return [
|
|
349
|
+
{
|
|
350
|
+
document: buildInteractivityStarterManifest(variables),
|
|
351
|
+
relativePath: "src/typia.manifest.json",
|
|
352
|
+
},
|
|
353
|
+
];
|
|
354
|
+
}
|
|
355
|
+
if (templateId === "persistence") {
|
|
356
|
+
return [
|
|
357
|
+
{
|
|
358
|
+
document: buildPersistenceStarterManifest(variables),
|
|
359
|
+
relativePath: "src/typia.manifest.json",
|
|
360
|
+
},
|
|
361
|
+
];
|
|
362
|
+
}
|
|
363
|
+
if (templateId === "compound") {
|
|
364
|
+
return [
|
|
365
|
+
{
|
|
366
|
+
document: buildCompoundParentStarterManifest(variables),
|
|
367
|
+
relativePath: `src/blocks/${variables.slugKebabCase}/typia.manifest.json`,
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
document: buildCompoundChildStarterManifest(variables),
|
|
371
|
+
relativePath: `src/blocks/${variables.slugKebabCase}-item/typia.manifest.json`,
|
|
372
|
+
},
|
|
373
|
+
];
|
|
374
|
+
}
|
|
375
|
+
return [];
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Serializes a starter manifest using the generated-project JSON formatting
|
|
379
|
+
* convention.
|
|
380
|
+
*/
|
|
381
|
+
export function stringifyStarterManifest(document) {
|
|
382
|
+
return `${JSON.stringify(document, null, "\t")}\n`;
|
|
383
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize arbitrary text into a kebab-case identifier.
|
|
3
|
+
*
|
|
4
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
5
|
+
* @returns A lowercase kebab-case string with collapsed separators.
|
|
6
|
+
*/
|
|
7
|
+
export declare function toKebabCase(input: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Normalize arbitrary text into a snake_case identifier.
|
|
10
|
+
*
|
|
11
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
12
|
+
* @returns A lowercase snake_case string derived from the kebab-case form.
|
|
13
|
+
*/
|
|
14
|
+
export declare function toSnakeCase(input: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Normalize arbitrary text into a PascalCase identifier.
|
|
17
|
+
*
|
|
18
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
19
|
+
* @returns A PascalCase string derived from the normalized kebab-case form.
|
|
20
|
+
*/
|
|
21
|
+
export declare function toPascalCase(input: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Convert delimited text to PascalCase while preserving each segment's
|
|
24
|
+
* existing internal casing.
|
|
25
|
+
*
|
|
26
|
+
* @param input Raw text split on non-alphanumeric boundaries.
|
|
27
|
+
* @returns A PascalCase string that preserves acronyms inside segments.
|
|
28
|
+
*/
|
|
29
|
+
export declare function toSegmentPascalCase(input: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Normalize arbitrary text into a human-readable title.
|
|
32
|
+
*
|
|
33
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
34
|
+
* @returns A title-cased string derived from the normalized kebab-case form.
|
|
35
|
+
*/
|
|
36
|
+
export declare function toTitleCase(input: string): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
function capitalizeSegment(segment) {
|
|
2
|
+
return segment.charAt(0).toUpperCase() + segment.slice(1);
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Normalize arbitrary text into a kebab-case identifier.
|
|
6
|
+
*
|
|
7
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
8
|
+
* @returns A lowercase kebab-case string with collapsed separators.
|
|
9
|
+
*/
|
|
10
|
+
export function toKebabCase(input) {
|
|
11
|
+
return input
|
|
12
|
+
.trim()
|
|
13
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
14
|
+
.replace(/[^A-Za-z0-9]+/g, "-")
|
|
15
|
+
.replace(/^-+|-+$/g, "")
|
|
16
|
+
.replace(/-{2,}/g, "-")
|
|
17
|
+
.toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normalize arbitrary text into a snake_case identifier.
|
|
21
|
+
*
|
|
22
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
23
|
+
* @returns A lowercase snake_case string derived from the kebab-case form.
|
|
24
|
+
*/
|
|
25
|
+
export function toSnakeCase(input) {
|
|
26
|
+
return toKebabCase(input).replace(/-/g, "_");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Normalize arbitrary text into a PascalCase identifier.
|
|
30
|
+
*
|
|
31
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
32
|
+
* @returns A PascalCase string derived from the normalized kebab-case form.
|
|
33
|
+
*/
|
|
34
|
+
export function toPascalCase(input) {
|
|
35
|
+
return toKebabCase(input)
|
|
36
|
+
.split("-")
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.map(capitalizeSegment)
|
|
39
|
+
.join("");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convert delimited text to PascalCase while preserving each segment's
|
|
43
|
+
* existing internal casing.
|
|
44
|
+
*
|
|
45
|
+
* @param input Raw text split on non-alphanumeric boundaries.
|
|
46
|
+
* @returns A PascalCase string that preserves acronyms inside segments.
|
|
47
|
+
*/
|
|
48
|
+
export function toSegmentPascalCase(input) {
|
|
49
|
+
return input
|
|
50
|
+
.replace(/[^A-Za-z0-9]+/g, " ")
|
|
51
|
+
.trim()
|
|
52
|
+
.split(/\s+/)
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.map(capitalizeSegment)
|
|
55
|
+
.join("");
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Normalize arbitrary text into a human-readable title.
|
|
59
|
+
*
|
|
60
|
+
* @param input Raw text that may contain spaces, punctuation, or camelCase.
|
|
61
|
+
* @returns A title-cased string derived from the normalized kebab-case form.
|
|
62
|
+
*/
|
|
63
|
+
export function toTitleCase(input) {
|
|
64
|
+
return toKebabCase(input)
|
|
65
|
+
.split("-")
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.map(capitalizeSegment)
|
|
68
|
+
.join(" ");
|
|
69
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type BuiltInTemplateId } from "./template-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which persistence layer is applied when materializing the built-in
|
|
4
|
+
* `persistence` template.
|
|
5
|
+
*/
|
|
6
|
+
export type BuiltInPersistencePolicy = "authenticated" | "public";
|
|
7
|
+
export interface BuiltInTemplateVariantOptions {
|
|
8
|
+
persistenceEnabled?: boolean;
|
|
9
|
+
persistencePolicy?: BuiltInPersistencePolicy;
|
|
10
|
+
}
|
|
11
|
+
export interface MaterializedBuiltInTemplateSource {
|
|
12
|
+
id: BuiltInTemplateId;
|
|
13
|
+
defaultCategory: string;
|
|
14
|
+
description: string;
|
|
15
|
+
features: string[];
|
|
16
|
+
format: "wp-typia";
|
|
17
|
+
templateDir: string;
|
|
18
|
+
cleanup?: () => Promise<void>;
|
|
19
|
+
selectedVariant?: string | null;
|
|
20
|
+
warnings?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns the ordered overlay directories for a built-in template.
|
|
24
|
+
*
|
|
25
|
+
* Persistence templates include the shared base, the persistence core layer,
|
|
26
|
+
* the selected policy layer, and the thin template overlay. All other built-ins
|
|
27
|
+
* resolve to the shared base plus their own template directory.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getBuiltInTemplateLayerDirs(templateId: BuiltInTemplateId, { persistenceEnabled, persistencePolicy, }?: BuiltInTemplateVariantOptions): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Materializes a built-in template into a temporary directory by copying each
|
|
32
|
+
* resolved layer in order.
|
|
33
|
+
*
|
|
34
|
+
* Callers should invoke the returned `cleanup` function when they no longer
|
|
35
|
+
* need the materialized directory. If copying fails, the temporary directory is
|
|
36
|
+
* removed before the error is rethrown.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveBuiltInTemplateSource(templateId: BuiltInTemplateId, options?: BuiltInTemplateVariantOptions): Promise<MaterializedBuiltInTemplateSource>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { promises as fsp } from "node:fs";
|
|
4
|
+
import { getTemplateById, SHARED_BASE_TEMPLATE_ROOT, SHARED_COMPOUND_TEMPLATE_ROOT, SHARED_PERSISTENCE_TEMPLATE_ROOT, SHARED_REST_HELPER_TEMPLATE_ROOT, } from "./template-registry.js";
|
|
5
|
+
/**
|
|
6
|
+
* Returns the ordered overlay directories for a built-in template.
|
|
7
|
+
*
|
|
8
|
+
* Persistence templates include the shared base, the persistence core layer,
|
|
9
|
+
* the selected policy layer, and the thin template overlay. All other built-ins
|
|
10
|
+
* resolve to the shared base plus their own template directory.
|
|
11
|
+
*/
|
|
12
|
+
export function getBuiltInTemplateLayerDirs(templateId, { persistenceEnabled = false, persistencePolicy = "authenticated", } = {}) {
|
|
13
|
+
if (templateId === "persistence") {
|
|
14
|
+
return [
|
|
15
|
+
SHARED_BASE_TEMPLATE_ROOT,
|
|
16
|
+
path.join(SHARED_REST_HELPER_TEMPLATE_ROOT, "shared"),
|
|
17
|
+
path.join(SHARED_PERSISTENCE_TEMPLATE_ROOT, "core"),
|
|
18
|
+
path.join(SHARED_REST_HELPER_TEMPLATE_ROOT, persistencePolicy === "public" ? "public" : "auth"),
|
|
19
|
+
path.join(SHARED_PERSISTENCE_TEMPLATE_ROOT, persistencePolicy === "public" ? "public" : "auth"),
|
|
20
|
+
getTemplateById(templateId).templateDir,
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
if (templateId === "compound") {
|
|
24
|
+
const layers = [
|
|
25
|
+
SHARED_BASE_TEMPLATE_ROOT,
|
|
26
|
+
path.join(SHARED_COMPOUND_TEMPLATE_ROOT, "core"),
|
|
27
|
+
getTemplateById(templateId).templateDir,
|
|
28
|
+
];
|
|
29
|
+
if (persistenceEnabled) {
|
|
30
|
+
layers.push(path.join(SHARED_REST_HELPER_TEMPLATE_ROOT, "shared"), path.join(SHARED_COMPOUND_TEMPLATE_ROOT, "persistence"), path.join(SHARED_REST_HELPER_TEMPLATE_ROOT, persistencePolicy === "public" ? "public" : "auth"), path.join(SHARED_COMPOUND_TEMPLATE_ROOT, persistencePolicy === "public" ? "persistence-public" : "persistence-auth"));
|
|
31
|
+
}
|
|
32
|
+
return layers;
|
|
33
|
+
}
|
|
34
|
+
return [SHARED_BASE_TEMPLATE_ROOT, getTemplateById(templateId).templateDir];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Materializes a built-in template into a temporary directory by copying each
|
|
38
|
+
* resolved layer in order.
|
|
39
|
+
*
|
|
40
|
+
* Callers should invoke the returned `cleanup` function when they no longer
|
|
41
|
+
* need the materialized directory. If copying fails, the temporary directory is
|
|
42
|
+
* removed before the error is rethrown.
|
|
43
|
+
*/
|
|
44
|
+
export async function resolveBuiltInTemplateSource(templateId, options = {}) {
|
|
45
|
+
const template = getTemplateById(templateId);
|
|
46
|
+
const tempRoot = await fsp.mkdtemp(path.join(os.tmpdir(), "wp-typia-template-"));
|
|
47
|
+
const templateDir = path.join(tempRoot, templateId);
|
|
48
|
+
try {
|
|
49
|
+
await fsp.mkdir(templateDir, { recursive: true });
|
|
50
|
+
for (const layerDir of getBuiltInTemplateLayerDirs(templateId, options)) {
|
|
51
|
+
await fsp.cp(layerDir, templateDir, {
|
|
52
|
+
recursive: true,
|
|
53
|
+
force: true,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
await fsp.rm(tempRoot, { force: true, recursive: true });
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
id: template.id,
|
|
63
|
+
defaultCategory: template.defaultCategory,
|
|
64
|
+
description: template.description,
|
|
65
|
+
features: template.features,
|
|
66
|
+
format: "wp-typia",
|
|
67
|
+
templateDir,
|
|
68
|
+
cleanup: async () => {
|
|
69
|
+
await fsp.rm(tempRoot, { force: true, recursive: true });
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal built-in template metadata defaults used by scaffold rendering.
|
|
3
|
+
*/
|
|
4
|
+
export declare const BUILTIN_BLOCK_METADATA_VERSION = "0.1.0";
|
|
5
|
+
/**
|
|
6
|
+
* Built-in parent block metadata defaults keyed by template id.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BUILTIN_TEMPLATE_METADATA_DEFAULTS: Readonly<{
|
|
9
|
+
basic: Readonly<{
|
|
10
|
+
category: "text";
|
|
11
|
+
icon: "smiley";
|
|
12
|
+
}>;
|
|
13
|
+
interactivity: Readonly<{
|
|
14
|
+
category: "widgets";
|
|
15
|
+
icon: "smiley";
|
|
16
|
+
}>;
|
|
17
|
+
persistence: Readonly<{
|
|
18
|
+
category: "widgets";
|
|
19
|
+
icon: "database";
|
|
20
|
+
}>;
|
|
21
|
+
compound: Readonly<{
|
|
22
|
+
category: "widgets";
|
|
23
|
+
icon: "screenoptions";
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Shared hidden child block metadata defaults for compound scaffolds.
|
|
28
|
+
*/
|
|
29
|
+
export declare const COMPOUND_CHILD_BLOCK_METADATA_DEFAULTS: Readonly<{
|
|
30
|
+
category: "widgets";
|
|
31
|
+
icon: "excerpt-view";
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Legacy built-in template ids that were removed in favor of persistence modes.
|
|
35
|
+
*/
|
|
36
|
+
export declare const REMOVED_BUILTIN_TEMPLATE_IDS: readonly ["data", "persisted"];
|
|
37
|
+
/**
|
|
38
|
+
* Union of removed built-in template ids accepted by compatibility checks.
|
|
39
|
+
*/
|
|
40
|
+
export type RemovedBuiltInTemplateId = (typeof REMOVED_BUILTIN_TEMPLATE_IDS)[number];
|
|
41
|
+
/**
|
|
42
|
+
* Returns the metadata defaults for a built-in scaffold template id.
|
|
43
|
+
*
|
|
44
|
+
* @param templateId Built-in template id whose metadata defaults should be read.
|
|
45
|
+
* @returns The stable category/icon defaults used by scaffold rendering.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getBuiltInTemplateMetadataDefaults(templateId: keyof typeof BUILTIN_TEMPLATE_METADATA_DEFAULTS): Readonly<{
|
|
48
|
+
category: "text";
|
|
49
|
+
icon: "smiley";
|
|
50
|
+
}> | Readonly<{
|
|
51
|
+
category: "widgets";
|
|
52
|
+
icon: "smiley";
|
|
53
|
+
}> | Readonly<{
|
|
54
|
+
category: "widgets";
|
|
55
|
+
icon: "database";
|
|
56
|
+
}> | Readonly<{
|
|
57
|
+
category: "widgets";
|
|
58
|
+
icon: "screenoptions";
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Checks whether a template id points at a removed built-in scaffold.
|
|
62
|
+
*
|
|
63
|
+
* @param templateId Template id supplied to scaffold resolution.
|
|
64
|
+
* @returns True when the template id is one of the removed legacy built-ins.
|
|
65
|
+
*/
|
|
66
|
+
export declare function isRemovedBuiltInTemplateId(templateId: string): templateId is RemovedBuiltInTemplateId;
|
|
67
|
+
/**
|
|
68
|
+
* Builds the stable recovery guidance shown for removed built-in template ids.
|
|
69
|
+
*
|
|
70
|
+
* @param templateId Removed template id, where `data` maps to the public policy and
|
|
71
|
+
* `persisted` maps to the authenticated policy.
|
|
72
|
+
* @returns A user-facing error string in the form
|
|
73
|
+
* `Built-in template "<id>" was removed. Use --template persistence --persistence-policy <policy> instead.`
|
|
74
|
+
*/
|
|
75
|
+
export declare function getRemovedBuiltInTemplateMessage(templateId: RemovedBuiltInTemplateId): string;
|