@spwig/theme-cli 1.0.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/README.md +278 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +99 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/component.d.ts +13 -0
- package/dist/commands/component.d.ts.map +1 -0
- package/dist/commands/component.js +229 -0
- package/dist/commands/component.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +249 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/package.d.ts +12 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +320 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +204 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/component_manifest_schema.json +221 -0
- package/dist/schemas/theme_manifest_schema.json +267 -0
- package/dist/templates/components/blank.template.html.template +4 -0
- package/dist/templates/components/footer.manifest.json.template +11 -0
- package/dist/templates/components/footer.template.html.template +36 -0
- package/dist/templates/components/header.manifest.json.template +11 -0
- package/dist/templates/components/header.schema.json.template +23 -0
- package/dist/templates/components/header.template.html.template +39 -0
- package/dist/templates/components/schema.json.template +15 -0
- package/dist/templates/components/section.manifest.json.template +11 -0
- package/dist/templates/components/section.template.html.template +13 -0
- package/dist/templates/components/utility.manifest.json.template +11 -0
- package/dist/templates/theme/README.md.template +64 -0
- package/dist/templates/theme/design_tokens.json.template +66 -0
- package/dist/templates/theme/manifest.json.template +40 -0
- package/dist/utils/file-system.d.ts +49 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +115 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/validation.d.ts +40 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +98 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
- package/schemas/component_manifest_schema.json +221 -0
- package/schemas/theme_manifest_schema.json +267 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command
|
|
3
|
+
* Validates theme or component packages
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { ThemeValidator, ComponentValidator } from '@spwig/theme-validator';
|
|
10
|
+
export async function validateCommand(targetPath = '.', options) {
|
|
11
|
+
console.log(chalk.blue.bold('\n🔍 Spwig Theme SDK - Validate Package\n'));
|
|
12
|
+
const absolutePath = path.resolve(targetPath);
|
|
13
|
+
// Check if directory exists
|
|
14
|
+
if (!(await fs.pathExists(absolutePath))) {
|
|
15
|
+
console.error(chalk.red('Error:'), `Directory does not exist: ${absolutePath}`);
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
// Auto-detect type if not specified
|
|
19
|
+
let type = options.type;
|
|
20
|
+
if (!type) {
|
|
21
|
+
const spinner = ora('Auto-detecting package type...').start();
|
|
22
|
+
type = await detectPackageType(absolutePath);
|
|
23
|
+
spinner.succeed(`Detected ${type} package`);
|
|
24
|
+
}
|
|
25
|
+
console.log(chalk.gray('Path:'), absolutePath);
|
|
26
|
+
console.log(chalk.gray('Type:'), type);
|
|
27
|
+
console.log();
|
|
28
|
+
// Run validation
|
|
29
|
+
const spinner = ora(`Validating ${type}...`).start();
|
|
30
|
+
try {
|
|
31
|
+
if (type === 'theme') {
|
|
32
|
+
return await validateTheme(absolutePath, options.verbose || false, spinner);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return await validateComponent(absolutePath, options.verbose || false, spinner);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
spinner.fail('Validation failed with error');
|
|
40
|
+
console.error(chalk.red('\nError:'), error instanceof Error ? error.message : error);
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Auto-detect package type (theme or component)
|
|
46
|
+
*/
|
|
47
|
+
async function detectPackageType(packagePath) {
|
|
48
|
+
const manifestPath = path.join(packagePath, 'manifest.json');
|
|
49
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
50
|
+
console.error(chalk.red('Error:'), 'No manifest.json found');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const manifest = await fs.readJSON(manifestPath);
|
|
55
|
+
// Theme packages have bundled_components or page_schemas
|
|
56
|
+
if (manifest.bundled_components || manifest.page_schemas || manifest.design_tokens) {
|
|
57
|
+
return 'theme';
|
|
58
|
+
}
|
|
59
|
+
// Component packages have tier_compatibility and regions
|
|
60
|
+
if (manifest.tier_compatibility || manifest.regions) {
|
|
61
|
+
return 'component';
|
|
62
|
+
}
|
|
63
|
+
// Default to theme if unclear
|
|
64
|
+
return 'theme';
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error(chalk.red('Error:'), 'Failed to parse manifest.json');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate theme package
|
|
73
|
+
*/
|
|
74
|
+
async function validateTheme(themePath, verbose, spinner) {
|
|
75
|
+
const validator = new ThemeValidator(themePath);
|
|
76
|
+
const result = await validator.validate();
|
|
77
|
+
if (result.isValid) {
|
|
78
|
+
spinner.succeed(chalk.green('✅ Theme validation passed!'));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
spinner.fail(chalk.red('❌ Theme validation failed'));
|
|
82
|
+
}
|
|
83
|
+
console.log();
|
|
84
|
+
// Show theme info
|
|
85
|
+
if (result.themeInfo) {
|
|
86
|
+
console.log(chalk.bold('Theme Information:'));
|
|
87
|
+
console.log(chalk.gray(' Name:'), result.themeInfo.display_name);
|
|
88
|
+
console.log(chalk.gray(' ID:'), result.themeInfo.name);
|
|
89
|
+
console.log(chalk.gray(' Version:'), result.themeInfo.version);
|
|
90
|
+
console.log(chalk.gray(' Author:'), result.themeInfo.author);
|
|
91
|
+
if (result.themeInfo.bundled_components) {
|
|
92
|
+
console.log(chalk.gray(' Components:'), result.themeInfo.bundled_components.length);
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
}
|
|
96
|
+
// Show errors
|
|
97
|
+
if (result.errors.length > 0) {
|
|
98
|
+
console.log(chalk.red.bold(`❌ ERRORS (${result.errors.length}):`));
|
|
99
|
+
for (const error of result.errors) {
|
|
100
|
+
console.log(chalk.red(' •'), error.message);
|
|
101
|
+
if (verbose && error.path) {
|
|
102
|
+
console.log(chalk.gray(` Path: ${error.path}`));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
// Show warnings
|
|
108
|
+
if (result.warnings.length > 0) {
|
|
109
|
+
console.log(chalk.yellow.bold(`⚠️ WARNINGS (${result.warnings.length}):`));
|
|
110
|
+
for (const warning of result.warnings) {
|
|
111
|
+
console.log(chalk.yellow(' •'), warning.message);
|
|
112
|
+
if (warning.suggestion) {
|
|
113
|
+
console.log(chalk.gray(` 💡 ${warning.suggestion}`));
|
|
114
|
+
}
|
|
115
|
+
if (verbose && warning.path) {
|
|
116
|
+
console.log(chalk.gray(` Path: ${warning.path}`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
console.log();
|
|
120
|
+
}
|
|
121
|
+
// Summary
|
|
122
|
+
if (result.errors.length === 0 && result.warnings.length === 0) {
|
|
123
|
+
console.log(chalk.green('✨ No errors or warnings found!'));
|
|
124
|
+
console.log(chalk.gray('Your theme is ready to package.'));
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
else if (result.errors.length === 0) {
|
|
128
|
+
console.log(chalk.yellow('⚠️ Validation passed with warnings'));
|
|
129
|
+
console.log(chalk.gray('Consider addressing warnings before packaging'));
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(chalk.red('❌ Validation failed'));
|
|
134
|
+
console.log(chalk.gray('Please fix errors before packaging'));
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Validate component package
|
|
140
|
+
*/
|
|
141
|
+
async function validateComponent(componentPath, verbose, spinner) {
|
|
142
|
+
const validator = new ComponentValidator(componentPath);
|
|
143
|
+
const result = await validator.validate();
|
|
144
|
+
if (result.isValid) {
|
|
145
|
+
spinner.succeed(chalk.green('✅ Component validation passed!'));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
spinner.fail(chalk.red('❌ Component validation failed'));
|
|
149
|
+
}
|
|
150
|
+
console.log();
|
|
151
|
+
// Show component info
|
|
152
|
+
if (result.componentInfo) {
|
|
153
|
+
console.log(chalk.bold('Component Information:'));
|
|
154
|
+
console.log(chalk.gray(' Name:'), result.componentInfo.display_name);
|
|
155
|
+
console.log(chalk.gray(' ID:'), result.componentInfo.name);
|
|
156
|
+
console.log(chalk.gray(' Version:'), result.componentInfo.version);
|
|
157
|
+
console.log(chalk.gray(' Author:'), result.componentInfo.author);
|
|
158
|
+
console.log(chalk.gray(' Category:'), result.componentInfo.category);
|
|
159
|
+
console.log(chalk.gray(' Tiers:'), result.componentInfo.tier_compatibility.join(', '));
|
|
160
|
+
console.log();
|
|
161
|
+
}
|
|
162
|
+
// Show errors
|
|
163
|
+
if (result.errors.length > 0) {
|
|
164
|
+
console.log(chalk.red.bold(`❌ ERRORS (${result.errors.length}):`));
|
|
165
|
+
for (const error of result.errors) {
|
|
166
|
+
console.log(chalk.red(' •'), error.message);
|
|
167
|
+
if (verbose && error.path) {
|
|
168
|
+
console.log(chalk.gray(` Path: ${error.path}`));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
console.log();
|
|
172
|
+
}
|
|
173
|
+
// Show warnings
|
|
174
|
+
if (result.warnings.length > 0) {
|
|
175
|
+
console.log(chalk.yellow.bold(`⚠️ WARNINGS (${result.warnings.length}):`));
|
|
176
|
+
for (const warning of result.warnings) {
|
|
177
|
+
console.log(chalk.yellow(' •'), warning.message);
|
|
178
|
+
if (warning.suggestion) {
|
|
179
|
+
console.log(chalk.gray(` 💡 ${warning.suggestion}`));
|
|
180
|
+
}
|
|
181
|
+
if (verbose && warning.path) {
|
|
182
|
+
console.log(chalk.gray(` Path: ${warning.path}`));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
console.log();
|
|
186
|
+
}
|
|
187
|
+
// Summary
|
|
188
|
+
if (result.errors.length === 0 && result.warnings.length === 0) {
|
|
189
|
+
console.log(chalk.green('✨ No errors or warnings found!'));
|
|
190
|
+
console.log(chalk.gray('Your component is ready to use.'));
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
else if (result.errors.length === 0) {
|
|
194
|
+
console.log(chalk.yellow('⚠️ Validation passed with warnings'));
|
|
195
|
+
console.log(chalk.gray('Consider addressing warnings for best practices'));
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(chalk.red('❌ Validation failed'));
|
|
200
|
+
console.log(chalk.gray('Please fix errors before using this component'));
|
|
201
|
+
return 1;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Programmatic API for Spwig Theme CLI
|
|
3
|
+
* Allows using CLI functionality from Node.js code
|
|
4
|
+
*/
|
|
5
|
+
export { initCommand } from './commands/init.js';
|
|
6
|
+
export { validateCommand } from './commands/validate.js';
|
|
7
|
+
export { packageCommand } from './commands/package.js';
|
|
8
|
+
export { componentCommand } from './commands/component.js';
|
|
9
|
+
export type { InitOptions } from './commands/init.js';
|
|
10
|
+
export type { ValidateOptions } from './commands/validate.js';
|
|
11
|
+
export type { PackageOptions } from './commands/package.js';
|
|
12
|
+
export type { ComponentOptions } from './commands/component.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Programmatic API for Spwig Theme CLI
|
|
3
|
+
* Allows using CLI functionality from Node.js code
|
|
4
|
+
*/
|
|
5
|
+
export { initCommand } from './commands/init.js';
|
|
6
|
+
export { validateCommand } from './commands/validate.js';
|
|
7
|
+
export { packageCommand } from './commands/package.js';
|
|
8
|
+
export { componentCommand } from './commands/component.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Component Manifest Schema",
|
|
4
|
+
"description": "Schema for Spwig component package manifests",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"name",
|
|
8
|
+
"version",
|
|
9
|
+
"display_name",
|
|
10
|
+
"description",
|
|
11
|
+
"author",
|
|
12
|
+
"tier_compatibility",
|
|
13
|
+
"regions"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"name": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
19
|
+
"minLength": 2,
|
|
20
|
+
"maxLength": 50,
|
|
21
|
+
"description": "Component identifier (lowercase, alphanumeric with underscores)"
|
|
22
|
+
},
|
|
23
|
+
"version": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
|
|
26
|
+
"description": "Semantic version (e.g., 1.0.0)"
|
|
27
|
+
},
|
|
28
|
+
"display_name": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"maxLength": 100,
|
|
32
|
+
"description": "Human-readable component name"
|
|
33
|
+
},
|
|
34
|
+
"description": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"minLength": 10,
|
|
37
|
+
"maxLength": 500,
|
|
38
|
+
"description": "Component description for marketplace listing"
|
|
39
|
+
},
|
|
40
|
+
"author": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"minLength": 1,
|
|
43
|
+
"maxLength": 100,
|
|
44
|
+
"description": "Component author/vendor name"
|
|
45
|
+
},
|
|
46
|
+
"tier_compatibility": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"minItems": 1,
|
|
49
|
+
"uniqueItems": true,
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"enum": ["A", "B", "C"]
|
|
53
|
+
},
|
|
54
|
+
"description": "Security tiers this component is compatible with"
|
|
55
|
+
},
|
|
56
|
+
"regions": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"minItems": 1,
|
|
59
|
+
"uniqueItems": true,
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"pattern": "^[a-z][a-z0-9_]*$"
|
|
63
|
+
},
|
|
64
|
+
"description": "Page regions this component can be placed in"
|
|
65
|
+
},
|
|
66
|
+
"props_schema": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"description": "JSON Schema defining component properties",
|
|
69
|
+
"required": ["type", "properties"],
|
|
70
|
+
"properties": {
|
|
71
|
+
"type": {
|
|
72
|
+
"const": "object"
|
|
73
|
+
},
|
|
74
|
+
"properties": {
|
|
75
|
+
"type": "object"
|
|
76
|
+
},
|
|
77
|
+
"required": {
|
|
78
|
+
"type": "array",
|
|
79
|
+
"items": {
|
|
80
|
+
"type": "string"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"assets": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"properties": {
|
|
88
|
+
"css": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"pattern": "^assets/.*\\.css$"
|
|
93
|
+
},
|
|
94
|
+
"description": "CSS files relative to component root"
|
|
95
|
+
},
|
|
96
|
+
"js": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"pattern": "^assets/.*\\.js$"
|
|
101
|
+
},
|
|
102
|
+
"description": "JavaScript files relative to component root"
|
|
103
|
+
},
|
|
104
|
+
"images": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"pattern": "^assets/.*\\.(png|jpg|jpeg|svg|gif|webp)$"
|
|
109
|
+
},
|
|
110
|
+
"description": "Image files relative to component root"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"additionalProperties": false
|
|
114
|
+
},
|
|
115
|
+
"dependencies": {
|
|
116
|
+
"type": "array",
|
|
117
|
+
"items": {
|
|
118
|
+
"type": "object",
|
|
119
|
+
"required": ["name", "min_version"],
|
|
120
|
+
"properties": {
|
|
121
|
+
"name": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"pattern": "^[a-z][a-z0-9_]*$"
|
|
124
|
+
},
|
|
125
|
+
"min_version": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
|
|
128
|
+
},
|
|
129
|
+
"max_version": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"description": "Component dependencies on other components"
|
|
136
|
+
},
|
|
137
|
+
"locales": {
|
|
138
|
+
"type": "array",
|
|
139
|
+
"items": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"pattern": "^[a-z]{2}(_[A-Z]{2})?$"
|
|
142
|
+
},
|
|
143
|
+
"description": "Supported locale codes (e.g., en, es, fr, en_US)"
|
|
144
|
+
},
|
|
145
|
+
"preview": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"pattern": "^preview\\.(png|jpg|jpeg|webp)$",
|
|
148
|
+
"description": "Preview image filename (recommended: 600x800px, max 5MB)"
|
|
149
|
+
},
|
|
150
|
+
"category": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"enum": [
|
|
153
|
+
"hero",
|
|
154
|
+
"header",
|
|
155
|
+
"footer",
|
|
156
|
+
"content",
|
|
157
|
+
"product",
|
|
158
|
+
"collection",
|
|
159
|
+
"cart",
|
|
160
|
+
"checkout",
|
|
161
|
+
"marketing",
|
|
162
|
+
"social",
|
|
163
|
+
"navigation",
|
|
164
|
+
"utility"
|
|
165
|
+
],
|
|
166
|
+
"description": "Component category for marketplace organization"
|
|
167
|
+
},
|
|
168
|
+
"tags": {
|
|
169
|
+
"type": "array",
|
|
170
|
+
"maxItems": 10,
|
|
171
|
+
"items": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
174
|
+
"maxLength": 30
|
|
175
|
+
},
|
|
176
|
+
"description": "Searchable tags for marketplace"
|
|
177
|
+
},
|
|
178
|
+
"license": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"enum": ["MIT", "Apache-2.0", "GPL-3.0", "Proprietary"],
|
|
181
|
+
"default": "Proprietary",
|
|
182
|
+
"description": "Component license type"
|
|
183
|
+
},
|
|
184
|
+
"changelog": {
|
|
185
|
+
"type": "array",
|
|
186
|
+
"items": {
|
|
187
|
+
"type": "object",
|
|
188
|
+
"required": ["version", "date", "changes"],
|
|
189
|
+
"properties": {
|
|
190
|
+
"version": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
|
|
193
|
+
},
|
|
194
|
+
"date": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
197
|
+
},
|
|
198
|
+
"changes": {
|
|
199
|
+
"type": "array",
|
|
200
|
+
"minItems": 1,
|
|
201
|
+
"items": {
|
|
202
|
+
"type": "string"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"description": "Version history and changes"
|
|
208
|
+
},
|
|
209
|
+
"min_platform_version": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
|
|
212
|
+
"description": "Minimum platform version required"
|
|
213
|
+
},
|
|
214
|
+
"max_platform_version": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
|
|
217
|
+
"description": "Maximum platform version supported"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"additionalProperties": false
|
|
221
|
+
}
|