@maxisoft/instantcms-mcp 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +308 -0
- package/dist/__tests__/artifact-tool.test.js +196 -0
- package/dist/__tests__/db-tool.test.js +152 -0
- package/dist/__tests__/define-tool.test.js +106 -0
- package/dist/__tests__/find-tool.test.js +185 -0
- package/dist/__tests__/get-component-api.test.js +144 -0
- package/dist/__tests__/hardening.test.js +73 -0
- package/dist/__tests__/hooks-tool.test.js +173 -0
- package/dist/__tests__/mcp-integration-extra.test.js +166 -0
- package/dist/__tests__/mcp-integration.test.js +53 -0
- package/dist/__tests__/pagination.test.js +114 -0
- package/dist/__tests__/performance-baseline.test.js +56 -0
- package/dist/__tests__/project-patch.test.js +144 -0
- package/dist/__tests__/project-source.test.js +44 -0
- package/dist/__tests__/project-workflows-extra.test.js +165 -0
- package/dist/__tests__/project-workflows.test.js +51 -0
- package/dist/__tests__/scaffold-addon-roundtrip.test.js +287 -0
- package/dist/__tests__/serialization.test.js +170 -0
- package/dist/__tests__/source-knowledge-parsers.test.js +42 -0
- package/dist/__tests__/template-development.test.js +78 -0
- package/dist/__tests__/template-productivity.test.js +87 -0
- package/dist/__tests__/tools.test.js +2143 -0
- package/dist/data/components.js +2818 -0
- package/dist/data/controllers-map.js +7571 -0
- package/dist/data/core-api.js +9356 -0
- package/dist/data/database-schema.js +4555 -0
- package/dist/data/events-map.js +1339 -0
- package/dist/data/fields-map.js +3692 -0
- package/dist/data/hooks.js +2257 -0
- package/dist/data/js-api.js +123 -0
- package/dist/data/libs-api.js +264 -0
- package/dist/data/routes-map.js +203 -0
- package/dist/data/schemas-validation.js +255 -0
- package/dist/data/schemas.js +1404 -0
- package/dist/data/traits-map.js +1004 -0
- package/dist/data/version-profiles.js +41 -0
- package/dist/data/widgets-map.js +131 -0
- package/dist/data/wysiwyg-map.js +486 -0
- package/dist/generated/components-source.js +14748 -0
- package/dist/generated/hooks-source.js +3399 -0
- package/dist/generated/knowledge-meta.js +101 -0
- package/dist/index.js +13 -0
- package/dist/registry/database-tools.js +112 -0
- package/dist/registry/extension-tools.js +473 -0
- package/dist/registry/generator-tools.js +506 -0
- package/dist/registry/knowledge-tools.js +441 -0
- package/dist/registry/language-tools.js +99 -0
- package/dist/registry/meta-tools.js +152 -0
- package/dist/registry/project-tools.js +48 -0
- package/dist/registry/resources.js +98 -0
- package/dist/registry/source-tools.js +211 -0
- package/dist/registry/template-development-tools.js +79 -0
- package/dist/server.js +32 -0
- package/dist/tools/addon-tool.js +1437 -0
- package/dist/tools/admin-partial-tool.js +498 -0
- package/dist/tools/api-tool.js +294 -0
- package/dist/tools/artifact-tool.js +95 -0
- package/dist/tools/cache-tool.js +360 -0
- package/dist/tools/component-tool.js +415 -0
- package/dist/tools/controllers-tool.js +125 -0
- package/dist/tools/cron-tool.js +197 -0
- package/dist/tools/crud-tool.js +659 -0
- package/dist/tools/db-tool.js +198 -0
- package/dist/tools/email-tool.js +222 -0
- package/dist/tools/external-api-tool.js +596 -0
- package/dist/tools/filter-tool.js +341 -0
- package/dist/tools/form-tool.js +275 -0
- package/dist/tools/grid-tool.js +189 -0
- package/dist/tools/hooks-tool.js +104 -0
- package/dist/tools/import-export-tool.js +548 -0
- package/dist/tools/lang-tool.js +251 -0
- package/dist/tools/layout-override-tool.js +125 -0
- package/dist/tools/layout-tool.js +548 -0
- package/dist/tools/maria-tool.js +127 -0
- package/dist/tools/mariadb.js +201 -0
- package/dist/tools/migration-tool.js +329 -0
- package/dist/tools/oauth-tool.js +520 -0
- package/dist/tools/parser/components-parser.js +76 -0
- package/dist/tools/parser/controllers-parser.js +313 -0
- package/dist/tools/parser/core-parser.js +294 -0
- package/dist/tools/parser/coverage-generator.js +424 -0
- package/dist/tools/parser/events-parser.js +127 -0
- package/dist/tools/parser/fields-parser.js +382 -0
- package/dist/tools/parser/hooks-parser.js +106 -0
- package/dist/tools/parser/sql-parser.js +197 -0
- package/dist/tools/parser/traits-parser.js +161 -0
- package/dist/tools/parser/widgets-parser.js +150 -0
- package/dist/tools/permission-tool.js +348 -0
- package/dist/tools/project-patch-tool.js +73 -0
- package/dist/tools/project-source-tool.js +188 -0
- package/dist/tools/project-workflow-tool.js +186 -0
- package/dist/tools/requirement-tool.js +212 -0
- package/dist/tools/scaffold-tool.js +815 -0
- package/dist/tools/seo-tool.js +412 -0
- package/dist/tools/source-tool.js +155 -0
- package/dist/tools/template-development-tool.js +271 -0
- package/dist/tools/template-overrides-tool.js +294 -0
- package/dist/tools/template-productivity-tool.js +319 -0
- package/dist/tools/template-tool.js +665 -0
- package/dist/tools/test-tool.js +183 -0
- package/dist/tools/webhook-tool.js +427 -0
- package/dist/tools/widget-tool.js +331 -0
- package/dist/tools/wysiwyg-tool.js +137 -0
- package/dist/types/scaffold.js +68 -0
- package/dist/utils/define-tool.js +37 -0
- package/dist/utils/find-tool.js +97 -0
- package/dist/utils/mcp-result.js +18 -0
- package/dist/utils/pagination.js +27 -0
- package/dist/utils/serialization.js +27 -0
- package/package.json +94 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const template_productivity_tool_js_1 = require("../tools/template-productivity-tool.js");
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const yaml_1 = require("yaml");
|
|
6
|
+
describe('template productivity workflows', () => {
|
|
7
|
+
test('updates untouched overrides and returns a patch', () => {
|
|
8
|
+
const result = (0, template_productivity_tool_js_1.mergeTemplateOverrides)({ 'controllers/content/view.tpl.php': 'old upstream' }, { 'templates/modern/controllers/content/view.tpl.php': 'old upstream' }, { 'templates/modern/controllers/content/view.tpl.php': 'new upstream' });
|
|
9
|
+
expect(result.files['controllers/content/view.tpl.php']).toBe('new upstream');
|
|
10
|
+
expect(result.summary.auto_merged).toBe(1);
|
|
11
|
+
expect(result.patch.patch).toContain('+new upstream');
|
|
12
|
+
});
|
|
13
|
+
test('preserves customized overrides and reports a conflict', () => {
|
|
14
|
+
const result = (0, template_productivity_tool_js_1.mergeTemplateOverrides)({ 'controllers/content/view.tpl.php': 'custom theme' }, { 'controllers/content/view.tpl.php': 'old upstream' }, { 'controllers/content/view.tpl.php': 'new upstream' });
|
|
15
|
+
expect(result.files['controllers/content/view.tpl.php']).toBe('custom theme');
|
|
16
|
+
expect(result.summary.conflicts).toBe(1);
|
|
17
|
+
expect(result.patch.is_empty).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
test('applies one unambiguous upstream delta to a customized override', () => {
|
|
20
|
+
const result = (0, template_productivity_tool_js_1.mergeTemplateOverrides)({ 'controllers/content/view.tpl.php': 'custom header\nold block\ncustom footer' }, { 'controllers/content/view.tpl.php': 'base header\nold block\nbase footer' }, { 'controllers/content/view.tpl.php': 'base header\nnew block\nbase footer' });
|
|
21
|
+
expect(result.files['controllers/content/view.tpl.php']).toBe('custom header\nnew block\ncustom footer');
|
|
22
|
+
expect(result.results[0].status).toBe('upstream_delta_applied');
|
|
23
|
+
});
|
|
24
|
+
test('reports accessibility and HTML quality issues', () => {
|
|
25
|
+
const result = (0, template_productivity_tool_js_1.auditTemplateFrontend)({
|
|
26
|
+
'main.tpl.php': '<html><h1>Title</h1><h3>Section</h3><img src="a.jpg"><a target="_blank">x</a><div id="same"></div><div id="same"></div></html>',
|
|
27
|
+
});
|
|
28
|
+
expect(result.is_valid).toBe(false);
|
|
29
|
+
expect(result.diagnostics.map(item => item.code)).toEqual(expect.arrayContaining([
|
|
30
|
+
'IMAGE_MISSING_ALT',
|
|
31
|
+
'UNSAFE_BLANK_TARGET',
|
|
32
|
+
'DUPLICATE_HTML_ID',
|
|
33
|
+
'SKIPPED_HEADING_LEVEL',
|
|
34
|
+
'HTML_LANG_MISSING',
|
|
35
|
+
]));
|
|
36
|
+
});
|
|
37
|
+
test('extracts repeated design values and existing custom properties', () => {
|
|
38
|
+
const result = (0, template_productivity_tool_js_1.extractTemplateDesignTokens)({
|
|
39
|
+
'css/main.css': ':root{--brand:#123456}.a{color:#123456;padding:1rem}.b{color:#123456;gap:1rem}',
|
|
40
|
+
});
|
|
41
|
+
expect(result.existing_custom_properties['--brand']).toBe('#123456');
|
|
42
|
+
expect(result.colors[0]).toEqual({ value: '#123456', uses: 3 });
|
|
43
|
+
expect(result.suggested_tokens_css).toContain('--space-1: 1rem');
|
|
44
|
+
});
|
|
45
|
+
test('compares rendered, guarded and layout widget positions', () => {
|
|
46
|
+
const result = (0, template_productivity_tool_js_1.auditTemplateWidgetPositions)({
|
|
47
|
+
'main.tpl.php': "<?= $this->widgets('header') ?><?= $this->widgets('sidebar') ?><?= $this->hasWidgetsOn('sidebar') ?>",
|
|
48
|
+
'layout.yaml': 'layout:\n rows:\n - cols:\n - position: header\n - position: footer\n',
|
|
49
|
+
});
|
|
50
|
+
expect(result.layout_not_rendered).toContain('footer');
|
|
51
|
+
expect(result.rendered_not_in_layout).toContain('sidebar');
|
|
52
|
+
expect(result.unguarded_positions).toContain('header');
|
|
53
|
+
});
|
|
54
|
+
test('scaffolds reproducible Docker and Playwright visual tests', () => {
|
|
55
|
+
const result = (0, template_productivity_tool_js_1.scaffoldTemplateE2eEnvironment)({ theme: 'studio_theme' });
|
|
56
|
+
expect(result.files['template-e2e/compose.yaml']).toContain('mcr.microsoft.com/playwright');
|
|
57
|
+
expect(result.files['template-e2e/tests/template.spec.mjs']).toContain('toHaveScreenshot');
|
|
58
|
+
expect(result.files['template-e2e/php/Dockerfile']).toContain('docker-php-ext-install');
|
|
59
|
+
expect((0, yaml_1.parse)(result.files['template-e2e/compose.yaml']).services.visual.image).toContain('playwright');
|
|
60
|
+
for (const path of [
|
|
61
|
+
'template-e2e/playwright.config.mjs',
|
|
62
|
+
'template-e2e/tests/template.spec.mjs',
|
|
63
|
+
]) {
|
|
64
|
+
const syntax = (0, node_child_process_1.spawnSync)(process.execPath, ['--input-type=module', '--check', '-'], {
|
|
65
|
+
input: result.files[path],
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
});
|
|
68
|
+
expect(syntax.status).toBe(0);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
test('indexes upstream templates with reproducible provenance', () => {
|
|
72
|
+
const result = (0, template_productivity_tool_js_1.indexUpstreamTemplateSources)({ 'templates/modern/controllers/content/view.tpl.php': '<?php echo 1;' }, { repository: 'instantsoft/icms2', ref: 'abc123' });
|
|
73
|
+
expect(result.files_indexed).toBe(1);
|
|
74
|
+
expect(result.templates[0]).toEqual(expect.objectContaining({
|
|
75
|
+
controller: 'content',
|
|
76
|
+
action: 'view',
|
|
77
|
+
sha256: expect.stringMatching(/^[a-f0-9]{64}$/),
|
|
78
|
+
}));
|
|
79
|
+
expect(result.templates[0].source_url).toContain('/blob/abc123/');
|
|
80
|
+
});
|
|
81
|
+
test('scaffolds PHP static-analysis configuration', () => {
|
|
82
|
+
const result = (0, template_productivity_tool_js_1.scaffoldTemplatePhpQuality)({ theme: 'studio_theme', php_min: '7.2' });
|
|
83
|
+
expect(JSON.parse(result.files['composer.quality.json'])['require-dev']).toHaveProperty('phpstan/phpstan');
|
|
84
|
+
expect(result.files['phpcs.xml']).toContain('PHPCompatibility');
|
|
85
|
+
expect(result.files['phpstan.neon']).toContain('templates/studio_theme');
|
|
86
|
+
});
|
|
87
|
+
});
|