@lydt/geogebra-studio 0.0.0-stage → 0.4.0-rc.2
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/.agents/plugins/marketplace.json +21 -0
- package/.codex-plugin/plugin.json +21 -0
- package/.mcp.json +18 -0
- package/LICENSE +339 -0
- package/LICENSE-MIT +21 -0
- package/README.md +108 -2
- package/README.zh-CN.md +89 -0
- package/THIRD_PARTY_NOTICES.md +35 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +234 -0
- package/dist/cli.js.map +1 -0
- package/dist/export/files.d.ts +4 -0
- package/dist/export/files.d.ts.map +1 -0
- package/dist/export/files.js +44 -0
- package/dist/export/files.js.map +1 -0
- package/dist/export/gikz.d.ts +11 -0
- package/dist/export/gikz.d.ts.map +1 -0
- package/dist/export/gikz.js +28 -0
- package/dist/export/gikz.js.map +1 -0
- package/dist/export/html.d.ts +14 -0
- package/dist/export/html.d.ts.map +1 -0
- package/dist/export/html.js +97 -0
- package/dist/export/html.js.map +1 -0
- package/dist/export/semantic.d.ts +43 -0
- package/dist/export/semantic.d.ts.map +1 -0
- package/dist/export/semantic.js +212 -0
- package/dist/export/semantic.js.map +1 -0
- package/dist/export/viewer-themes.d.ts +76 -0
- package/dist/export/viewer-themes.d.ts.map +1 -0
- package/dist/export/viewer-themes.js +169 -0
- package/dist/export/viewer-themes.js.map +1 -0
- package/dist/export/workspace.d.ts +4 -0
- package/dist/export/workspace.d.ts.map +1 -0
- package/dist/export/workspace.js +25 -0
- package/dist/export/workspace.js.map +1 -0
- package/dist/gikz-browser.js +770 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +187 -0
- package/dist/server.js.map +1 -0
- package/dist/studio/artifact.d.ts +37 -0
- package/dist/studio/artifact.d.ts.map +1 -0
- package/dist/studio/artifact.js +61 -0
- package/dist/studio/artifact.js.map +1 -0
- package/dist/studio/browser.d.ts +7 -0
- package/dist/studio/browser.d.ts.map +1 -0
- package/dist/studio/browser.js +67 -0
- package/dist/studio/browser.js.map +1 -0
- package/dist/studio/install.d.ts +4 -0
- package/dist/studio/install.d.ts.map +1 -0
- package/dist/studio/install.js +60 -0
- package/dist/studio/install.js.map +1 -0
- package/dist/tools/apps-api-tools.d.ts +4 -0
- package/dist/tools/apps-api-tools.d.ts.map +1 -0
- package/dist/tools/apps-api-tools.js +96 -0
- package/dist/tools/apps-api-tools.js.map +1 -0
- package/dist/tools/educational-templates.d.ts +33 -0
- package/dist/tools/educational-templates.d.ts.map +1 -0
- package/dist/tools/educational-templates.js +261 -0
- package/dist/tools/educational-templates.js.map +1 -0
- package/dist/tools/export-tools.d.ts +3 -0
- package/dist/tools/export-tools.d.ts.map +1 -0
- package/dist/tools/export-tools.js +118 -0
- package/dist/tools/export-tools.js.map +1 -0
- package/dist/tools/geogebra-tools.d.ts +15 -0
- package/dist/tools/geogebra-tools.d.ts.map +1 -0
- package/dist/tools/geogebra-tools.js +3442 -0
- package/dist/tools/geogebra-tools.js.map +1 -0
- package/dist/tools/index.d.ts +43 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +183 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/performance-tools.d.ts +7 -0
- package/dist/tools/performance-tools.d.ts.map +1 -0
- package/dist/tools/performance-tools.js +312 -0
- package/dist/tools/performance-tools.js.map +1 -0
- package/dist/tools/templates/algebra-templates.d.ts +7 -0
- package/dist/tools/templates/algebra-templates.d.ts.map +1 -0
- package/dist/tools/templates/algebra-templates.js +568 -0
- package/dist/tools/templates/algebra-templates.js.map +1 -0
- package/dist/tools/templates/geometry-templates.d.ts +7 -0
- package/dist/tools/templates/geometry-templates.d.ts.map +1 -0
- package/dist/tools/templates/geometry-templates.js +492 -0
- package/dist/tools/templates/geometry-templates.js.map +1 -0
- package/dist/types/geogebra.d.ts +103 -0
- package/dist/types/geogebra.d.ts.map +1 -0
- package/dist/types/geogebra.js +34 -0
- package/dist/types/geogebra.js.map +1 -0
- package/dist/types/mcp.d.ts +125 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +19 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/utils/app-info.d.ts +12 -0
- package/dist/utils/app-info.d.ts.map +1 -0
- package/dist/utils/app-info.js +30 -0
- package/dist/utils/app-info.js.map +1 -0
- package/dist/utils/errors.d.ts +37 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +72 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gemini-compatibility.d.ts +39 -0
- package/dist/utils/gemini-compatibility.d.ts.map +1 -0
- package/dist/utils/gemini-compatibility.js +154 -0
- package/dist/utils/gemini-compatibility.js.map +1 -0
- package/dist/utils/geogebra-instance.d.ts +252 -0
- package/dist/utils/geogebra-instance.d.ts.map +1 -0
- package/dist/utils/geogebra-instance.js +1560 -0
- package/dist/utils/geogebra-instance.js.map +1 -0
- package/dist/utils/geogebra-mock.d.ts +172 -0
- package/dist/utils/geogebra-mock.d.ts.map +1 -0
- package/dist/utils/geogebra-mock.js +732 -0
- package/dist/utils/geogebra-mock.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance/index.d.ts +76 -0
- package/dist/utils/performance/index.d.ts.map +1 -0
- package/dist/utils/performance/index.js +163 -0
- package/dist/utils/performance/index.js.map +1 -0
- package/dist/utils/performance/instance-pool.d.ts +78 -0
- package/dist/utils/performance/instance-pool.d.ts.map +1 -0
- package/dist/utils/performance/instance-pool.js +268 -0
- package/dist/utils/performance/instance-pool.js.map +1 -0
- package/dist/utils/validation.d.ts +92 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +557 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/widget.html +110 -0
- package/docs/APPS-API-BRIDGE.md +28 -0
- package/docs/MODERNIZATION.md +15 -0
- package/docs/TANGENT-REGRESSION.md +34 -0
- package/docs/VALIDATION.md +26 -0
- package/docs/VISUAL-STANDARD.md +26 -0
- package/docs/images/native-construction.png +0 -0
- package/examples/tangent-construction.json +26 -0
- package/gikz/LICENSE +339 -0
- package/gikz/PROVENANCE.md +8 -0
- package/gikz/browser.cjs +2 -0
- package/gikz/cli.cjs +195 -0
- package/gikz/core.cjs +806 -0
- package/mcp.json +20 -0
- package/package.json +107 -4
- package/plugin.json +35 -0
- package/runtime/package.json +4 -0
- package/scripts/build-plugin.cjs +15 -0
- package/scripts/build-widget.cjs +7 -0
- package/skills/geogebra-construct/SKILL.md +40 -0
- package/skills/geogebra-setup/SKILL.md +37 -0
- package/skills/geometry-export/SKILL.md +31 -0
- package/src/cli.ts +212 -0
- package/src/export/files.ts +26 -0
- package/src/export/gikz.ts +22 -0
- package/src/export/html.ts +108 -0
- package/src/export/semantic.ts +180 -0
- package/src/export/viewer-themes.ts +165 -0
- package/src/export/workspace.ts +15 -0
- package/src/index.ts +71 -0
- package/src/server.ts +168 -0
- package/src/studio/artifact.ts +50 -0
- package/src/studio/browser.ts +38 -0
- package/src/studio/install.ts +43 -0
- package/src/tools/apps-api-tools.ts +96 -0
- package/src/tools/educational-templates.ts +299 -0
- package/src/tools/export-tools.ts +110 -0
- package/src/tools/geogebra-tools.ts +3836 -0
- package/src/tools/index.ts +192 -0
- package/src/tools/performance-tools.ts +322 -0
- package/src/tools/templates/algebra-templates.ts +619 -0
- package/src/tools/templates/geometry-templates.ts +550 -0
- package/src/types/geogebra.ts +140 -0
- package/src/types/global.d.ts +31 -0
- package/src/types/mcp.ts +141 -0
- package/src/utils/app-info.ts +35 -0
- package/src/utils/errors.ts +97 -0
- package/src/utils/gemini-compatibility.ts +193 -0
- package/src/utils/geogebra-instance.ts +1712 -0
- package/src/utils/geogebra-mock.ts +867 -0
- package/src/utils/logger.ts +60 -0
- package/src/utils/performance/index.ts +211 -0
- package/src/utils/performance/instance-pool.ts +323 -0
- package/src/utils/validation.ts +647 -0
- package/tsconfig.json +35 -0
- package/widget/main.ts +12 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation utilities for GeoGebra MCP tools
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validatePointName = validatePointName;
|
|
7
|
+
exports.validateObjectName = validateObjectName;
|
|
8
|
+
exports.validateCoordinates = validateCoordinates;
|
|
9
|
+
exports.validateRadius = validateRadius;
|
|
10
|
+
exports.validatePolygonVertices = validatePolygonVertices;
|
|
11
|
+
exports.validateLinearEquation = validateLinearEquation;
|
|
12
|
+
exports.validateRequiredParams = validateRequiredParams;
|
|
13
|
+
exports.validateFunctionExpression = validateFunctionExpression;
|
|
14
|
+
exports.validateParametricExpressions = validateParametricExpressions;
|
|
15
|
+
exports.validateImplicitExpression = validateImplicitExpression;
|
|
16
|
+
exports.validateDomainRange = validateDomainRange;
|
|
17
|
+
exports.validateFunctionStyling = validateFunctionStyling;
|
|
18
|
+
exports.validateAlgebraicExpression = validateAlgebraicExpression;
|
|
19
|
+
exports.validateEquation = validateEquation;
|
|
20
|
+
exports.validateVariableName = validateVariableName;
|
|
21
|
+
exports.validateSystemOfEquations = validateSystemOfEquations;
|
|
22
|
+
exports.validateVariablesList = validateVariablesList;
|
|
23
|
+
exports.validateSliderParameters = validateSliderParameters;
|
|
24
|
+
exports.validateAnimationSpeed = validateAnimationSpeed;
|
|
25
|
+
exports.validateAnimationDirection = validateAnimationDirection;
|
|
26
|
+
exports.validateAnimationExportParameters = validateAnimationExportParameters;
|
|
27
|
+
/**
|
|
28
|
+
* Validate point name (GeoGebra naming conventions)
|
|
29
|
+
*/
|
|
30
|
+
function validatePointName(name) {
|
|
31
|
+
if (!name || typeof name !== 'string') {
|
|
32
|
+
return { isValid: false, error: 'Point name must be a non-empty string' };
|
|
33
|
+
}
|
|
34
|
+
if (name.length === 0) {
|
|
35
|
+
return { isValid: false, error: 'Point name cannot be empty' };
|
|
36
|
+
}
|
|
37
|
+
// GeoGebra naming rules: start with letter, can contain letters, numbers, underscore
|
|
38
|
+
const namePattern = /^[a-zA-Z][a-zA-Z0-9_]*$/;
|
|
39
|
+
if (!namePattern.test(name)) {
|
|
40
|
+
return { isValid: false, error: 'Point name must start with a letter and contain only letters, numbers, and underscores' };
|
|
41
|
+
}
|
|
42
|
+
return { isValid: true };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate object name (general GeoGebra naming conventions)
|
|
46
|
+
*/
|
|
47
|
+
function validateObjectName(name) {
|
|
48
|
+
return validatePointName(name); // Same rules apply
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validate coordinates
|
|
52
|
+
*/
|
|
53
|
+
function validateCoordinates(x, y) {
|
|
54
|
+
if (typeof x !== 'number' || typeof y !== 'number') {
|
|
55
|
+
return { isValid: false, error: 'Coordinates must be numbers' };
|
|
56
|
+
}
|
|
57
|
+
if (!isFinite(x) || !isFinite(y)) {
|
|
58
|
+
return { isValid: false, error: 'Coordinates must be finite numbers' };
|
|
59
|
+
}
|
|
60
|
+
// Reasonable coordinate range for visualization
|
|
61
|
+
const maxCoord = 1000000;
|
|
62
|
+
if (Math.abs(x) > maxCoord || Math.abs(y) > maxCoord) {
|
|
63
|
+
return { isValid: false, error: `Coordinates must be within range [-${maxCoord}, ${maxCoord}]` };
|
|
64
|
+
}
|
|
65
|
+
return { isValid: true };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validate radius
|
|
69
|
+
*/
|
|
70
|
+
function validateRadius(radius) {
|
|
71
|
+
if (typeof radius !== 'number') {
|
|
72
|
+
return { isValid: false, error: 'Radius must be a number' };
|
|
73
|
+
}
|
|
74
|
+
if (!isFinite(radius)) {
|
|
75
|
+
return { isValid: false, error: 'Radius must be a finite number' };
|
|
76
|
+
}
|
|
77
|
+
if (radius < 0) {
|
|
78
|
+
return { isValid: false, error: 'Radius must be non-negative' };
|
|
79
|
+
}
|
|
80
|
+
if (radius > 1000000) {
|
|
81
|
+
return { isValid: false, error: 'Radius must be reasonable (≤ 1,000,000)' };
|
|
82
|
+
}
|
|
83
|
+
return { isValid: true };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate polygon vertices
|
|
87
|
+
*/
|
|
88
|
+
function validatePolygonVertices(vertices) {
|
|
89
|
+
if (!Array.isArray(vertices)) {
|
|
90
|
+
return { isValid: false, error: 'Vertices must be an array' };
|
|
91
|
+
}
|
|
92
|
+
if (vertices.length < 3) {
|
|
93
|
+
return { isValid: false, error: 'Polygon must have at least 3 vertices' };
|
|
94
|
+
}
|
|
95
|
+
if (vertices.length > 100) {
|
|
96
|
+
return { isValid: false, error: 'Polygon cannot have more than 100 vertices' };
|
|
97
|
+
}
|
|
98
|
+
// Check for duplicate vertices
|
|
99
|
+
const uniqueVertices = new Set(vertices);
|
|
100
|
+
if (uniqueVertices.size !== vertices.length) {
|
|
101
|
+
return { isValid: false, error: 'Polygon vertices must be unique' };
|
|
102
|
+
}
|
|
103
|
+
// Validate each vertex name
|
|
104
|
+
for (let i = 0; i < vertices.length; i++) {
|
|
105
|
+
const vertex = vertices[i];
|
|
106
|
+
if (!vertex) {
|
|
107
|
+
return { isValid: false, error: `Vertex ${i + 1} is undefined or empty` };
|
|
108
|
+
}
|
|
109
|
+
const validation = validatePointName(vertex);
|
|
110
|
+
if (!validation.isValid) {
|
|
111
|
+
return { isValid: false, error: `Vertex ${i + 1}: ${validation.error}` };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { isValid: true };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Validate linear equation format
|
|
118
|
+
*/
|
|
119
|
+
function validateLinearEquation(equation) {
|
|
120
|
+
if (!equation || typeof equation !== 'string') {
|
|
121
|
+
return { isValid: false, error: 'Equation must be a non-empty string' };
|
|
122
|
+
}
|
|
123
|
+
if (!equation.includes('=')) {
|
|
124
|
+
return { isValid: false, error: 'Equation must contain an equals sign (=)' };
|
|
125
|
+
}
|
|
126
|
+
// Basic validation for common linear equation formats
|
|
127
|
+
const patterns = [
|
|
128
|
+
/^y\s*=\s*[+-]?\s*\d*\.?\d*\s*\*?\s*x\s*[+-]\s*\d+\.?\d*$/, // y = mx + b
|
|
129
|
+
/^y\s*=\s*[+-]?\s*\d+\.?\d*\s*\*?\s*x$/, // y = mx
|
|
130
|
+
/^y\s*=\s*[+-]?\s*\d+\.?\d*$/, // y = b (horizontal line)
|
|
131
|
+
/^x\s*=\s*[+-]?\s*\d+\.?\d*$/, // x = a (vertical line)
|
|
132
|
+
/^[+-]?\s*\d*\.?\d*\s*\*?\s*x\s*[+-]\s*\d*\.?\d*\s*\*?\s*y\s*=\s*[+-]?\s*\d+\.?\d*$/, // ax + by = c
|
|
133
|
+
];
|
|
134
|
+
const normalizedEq = equation.replace(/\s+/g, ' ').trim();
|
|
135
|
+
const isValidFormat = patterns.some(pattern => pattern.test(normalizedEq));
|
|
136
|
+
if (!isValidFormat) {
|
|
137
|
+
return {
|
|
138
|
+
isValid: false,
|
|
139
|
+
error: 'Equation format not recognized. Use formats like "y = 2x + 3", "x = 5", or "2x + 3y = 6"'
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return { isValid: true };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validate that required parameters are provided for a given method
|
|
146
|
+
*/
|
|
147
|
+
function validateRequiredParams(params, required) {
|
|
148
|
+
for (const param of required) {
|
|
149
|
+
if (!(param in params) || params[param] === undefined || params[param] === null) {
|
|
150
|
+
return { isValid: false, error: `Missing required parameter: ${param}` };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { isValid: true };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate function expression for standard functions f(x) = ...
|
|
157
|
+
*/
|
|
158
|
+
function validateFunctionExpression(expression) {
|
|
159
|
+
if (!expression || typeof expression !== 'string') {
|
|
160
|
+
return { isValid: false, error: 'Function expression must be a non-empty string' };
|
|
161
|
+
}
|
|
162
|
+
const trimmed = expression.trim();
|
|
163
|
+
if (trimmed.length === 0) {
|
|
164
|
+
return { isValid: false, error: 'Function expression cannot be empty' };
|
|
165
|
+
}
|
|
166
|
+
// Basic validation for function expressions
|
|
167
|
+
// Allow common mathematical functions and operators
|
|
168
|
+
const allowedPattern = /^[x\d\+\-\*\/\^\(\)\.\s,sincotaglnbsqrtepie]*$/i;
|
|
169
|
+
if (!allowedPattern.test(trimmed)) {
|
|
170
|
+
return { isValid: false, error: 'Function expression contains invalid characters. Use only x, numbers, +, -, *, /, ^, (), sin, cos, tan, log, ln, sqrt, abs, e, pi' };
|
|
171
|
+
}
|
|
172
|
+
// Check for balanced parentheses
|
|
173
|
+
let parenCount = 0;
|
|
174
|
+
for (const char of trimmed) {
|
|
175
|
+
if (char === '(')
|
|
176
|
+
parenCount++;
|
|
177
|
+
if (char === ')')
|
|
178
|
+
parenCount--;
|
|
179
|
+
if (parenCount < 0) {
|
|
180
|
+
return { isValid: false, error: 'Unbalanced parentheses in function expression' };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (parenCount !== 0) {
|
|
184
|
+
return { isValid: false, error: 'Unbalanced parentheses in function expression' };
|
|
185
|
+
}
|
|
186
|
+
return { isValid: true };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Validate parametric function expressions
|
|
190
|
+
*/
|
|
191
|
+
function validateParametricExpressions(xExpr, yExpr, parameter) {
|
|
192
|
+
if (!parameter || typeof parameter !== 'string') {
|
|
193
|
+
return { isValid: false, error: 'Parameter name must be a non-empty string' };
|
|
194
|
+
}
|
|
195
|
+
// Validate parameter name (typically t, u, s, etc.)
|
|
196
|
+
const paramPattern = /^[a-zA-Z][a-zA-Z0-9]*$/;
|
|
197
|
+
if (!paramPattern.test(parameter)) {
|
|
198
|
+
return { isValid: false, error: 'Parameter name must start with a letter and contain only letters and numbers' };
|
|
199
|
+
}
|
|
200
|
+
// Validate x expression
|
|
201
|
+
const xValidation = validateParametricExpression(xExpr, parameter);
|
|
202
|
+
if (!xValidation.isValid) {
|
|
203
|
+
return { isValid: false, error: `X expression: ${xValidation.error}` };
|
|
204
|
+
}
|
|
205
|
+
// Validate y expression
|
|
206
|
+
const yValidation = validateParametricExpression(yExpr, parameter);
|
|
207
|
+
if (!yValidation.isValid) {
|
|
208
|
+
return { isValid: false, error: `Y expression: ${yValidation.error}` };
|
|
209
|
+
}
|
|
210
|
+
return { isValid: true };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Validate a single parametric expression
|
|
214
|
+
*/
|
|
215
|
+
function validateParametricExpression(expression, parameter) {
|
|
216
|
+
if (!expression || typeof expression !== 'string') {
|
|
217
|
+
return { isValid: false, error: 'Expression must be a non-empty string' };
|
|
218
|
+
}
|
|
219
|
+
const trimmed = expression.trim();
|
|
220
|
+
if (trimmed.length === 0) {
|
|
221
|
+
return { isValid: false, error: 'Expression cannot be empty' };
|
|
222
|
+
}
|
|
223
|
+
// Allow the parameter variable and common mathematical functions
|
|
224
|
+
const escapedParam = parameter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
225
|
+
const allowedPattern = new RegExp(`^[${escapedParam}\\d\\+\\-\\*\\/\\^\\(\\)\\.\\s,sincotaglnbsqrtepie]*$`, 'i');
|
|
226
|
+
if (!allowedPattern.test(trimmed)) {
|
|
227
|
+
return { isValid: false, error: `Expression contains invalid characters. Use only ${parameter}, numbers, +, -, *, /, ^, (), sin, cos, tan, log, ln, sqrt, abs, e, pi` };
|
|
228
|
+
}
|
|
229
|
+
// Check for balanced parentheses
|
|
230
|
+
let parenCount = 0;
|
|
231
|
+
for (const char of trimmed) {
|
|
232
|
+
if (char === '(')
|
|
233
|
+
parenCount++;
|
|
234
|
+
if (char === ')')
|
|
235
|
+
parenCount--;
|
|
236
|
+
if (parenCount < 0) {
|
|
237
|
+
return { isValid: false, error: 'Unbalanced parentheses in expression' };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (parenCount !== 0) {
|
|
241
|
+
return { isValid: false, error: 'Unbalanced parentheses in expression' };
|
|
242
|
+
}
|
|
243
|
+
return { isValid: true };
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Validate implicit function expression
|
|
247
|
+
*/
|
|
248
|
+
function validateImplicitExpression(expression) {
|
|
249
|
+
if (!expression || typeof expression !== 'string') {
|
|
250
|
+
return { isValid: false, error: 'Implicit expression must be a non-empty string' };
|
|
251
|
+
}
|
|
252
|
+
const trimmed = expression.trim();
|
|
253
|
+
if (trimmed.length === 0) {
|
|
254
|
+
return { isValid: false, error: 'Implicit expression cannot be empty' };
|
|
255
|
+
}
|
|
256
|
+
// Must contain both x and y variables
|
|
257
|
+
if (!trimmed.includes('x') || !trimmed.includes('y')) {
|
|
258
|
+
return { isValid: false, error: 'Implicit expression must contain both x and y variables' };
|
|
259
|
+
}
|
|
260
|
+
// Allow x, y, numbers, and mathematical functions
|
|
261
|
+
const allowedPattern = /^[xy\d\+\-\*\/\^\(\)\.\s,sincotaglnbsqrtepie=]*$/i;
|
|
262
|
+
if (!allowedPattern.test(trimmed)) {
|
|
263
|
+
return { isValid: false, error: 'Implicit expression contains invalid characters. Use only x, y, numbers, +, -, *, /, ^, (), sin, cos, tan, log, ln, sqrt, abs, e, pi, =' };
|
|
264
|
+
}
|
|
265
|
+
// Check for balanced parentheses
|
|
266
|
+
let parenCount = 0;
|
|
267
|
+
for (const char of trimmed) {
|
|
268
|
+
if (char === '(')
|
|
269
|
+
parenCount++;
|
|
270
|
+
if (char === ')')
|
|
271
|
+
parenCount--;
|
|
272
|
+
if (parenCount < 0) {
|
|
273
|
+
return { isValid: false, error: 'Unbalanced parentheses in implicit expression' };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (parenCount !== 0) {
|
|
277
|
+
return { isValid: false, error: 'Unbalanced parentheses in implicit expression' };
|
|
278
|
+
}
|
|
279
|
+
return { isValid: true };
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Validate domain range parameters
|
|
283
|
+
*/
|
|
284
|
+
function validateDomainRange(min, max, paramName = 'parameter') {
|
|
285
|
+
if (typeof min !== 'number' || typeof max !== 'number') {
|
|
286
|
+
return { isValid: false, error: `${paramName} range bounds must be numbers` };
|
|
287
|
+
}
|
|
288
|
+
if (!isFinite(min) || !isFinite(max)) {
|
|
289
|
+
return { isValid: false, error: `${paramName} range bounds must be finite numbers` };
|
|
290
|
+
}
|
|
291
|
+
if (min >= max) {
|
|
292
|
+
return { isValid: false, error: `${paramName} minimum must be less than maximum` };
|
|
293
|
+
}
|
|
294
|
+
// Reasonable range limits
|
|
295
|
+
const maxRange = 1000000;
|
|
296
|
+
if (Math.abs(min) > maxRange || Math.abs(max) > maxRange) {
|
|
297
|
+
return { isValid: false, error: `${paramName} range must be within [-${maxRange}, ${maxRange}]` };
|
|
298
|
+
}
|
|
299
|
+
const rangeDiff = max - min;
|
|
300
|
+
if (rangeDiff < 0.001) {
|
|
301
|
+
return { isValid: false, error: `${paramName} range must be at least 0.001 units wide` };
|
|
302
|
+
}
|
|
303
|
+
if (rangeDiff > maxRange * 2) {
|
|
304
|
+
return { isValid: false, error: `${paramName} range cannot exceed ${maxRange * 2} units wide` };
|
|
305
|
+
}
|
|
306
|
+
return { isValid: true };
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Validate function styling parameters
|
|
310
|
+
*/
|
|
311
|
+
function validateFunctionStyling(color, thickness, style) {
|
|
312
|
+
if (color !== undefined) {
|
|
313
|
+
if (typeof color !== 'string') {
|
|
314
|
+
return { isValid: false, error: 'Color must be a string' };
|
|
315
|
+
}
|
|
316
|
+
// Basic color validation (hex, named colors, rgb)
|
|
317
|
+
const colorPattern = /^(#[0-9A-Fa-f]{6}|#[0-9A-Fa-f]{3}|rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)|[a-zA-Z]+)$/;
|
|
318
|
+
if (!colorPattern.test(color.trim())) {
|
|
319
|
+
return { isValid: false, error: 'Color must be a valid hex color (#RRGGBB), RGB value (rgb(r,g,b)), or color name' };
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (thickness !== undefined) {
|
|
323
|
+
if (typeof thickness !== 'number') {
|
|
324
|
+
return { isValid: false, error: 'Line thickness must be a number' };
|
|
325
|
+
}
|
|
326
|
+
if (!isFinite(thickness)) {
|
|
327
|
+
return { isValid: false, error: 'Line thickness must be a finite number' };
|
|
328
|
+
}
|
|
329
|
+
if (thickness < 1 || thickness > 10) {
|
|
330
|
+
return { isValid: false, error: 'Line thickness must be between 1 and 10' };
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (style !== undefined) {
|
|
334
|
+
if (typeof style !== 'string') {
|
|
335
|
+
return { isValid: false, error: 'Line style must be a string' };
|
|
336
|
+
}
|
|
337
|
+
const validStyles = ['solid', 'dashed', 'dotted'];
|
|
338
|
+
if (!validStyles.includes(style.toLowerCase())) {
|
|
339
|
+
return { isValid: false, error: `Line style must be one of: ${validStyles.join(', ')}` };
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return { isValid: true };
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Validate algebraic expression for CAS operations
|
|
346
|
+
*/
|
|
347
|
+
function validateAlgebraicExpression(expression) {
|
|
348
|
+
if (!expression || typeof expression !== 'string') {
|
|
349
|
+
return { isValid: false, error: 'Expression must be a non-empty string' };
|
|
350
|
+
}
|
|
351
|
+
const trimmed = expression.trim();
|
|
352
|
+
if (trimmed.length === 0) {
|
|
353
|
+
return { isValid: false, error: 'Expression cannot be empty' };
|
|
354
|
+
}
|
|
355
|
+
// Allow common mathematical symbols, variables, and functions
|
|
356
|
+
const allowedPattern = /^[a-zA-Z\d\+\-\*\/\^\(\)\.\s,=]*$/;
|
|
357
|
+
if (!allowedPattern.test(trimmed)) {
|
|
358
|
+
return {
|
|
359
|
+
isValid: false,
|
|
360
|
+
error: 'Expression contains invalid characters. Use only variables, numbers, +, -, *, /, ^, =, ()'
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
// Check for balanced parentheses
|
|
364
|
+
let parenCount = 0;
|
|
365
|
+
for (const char of trimmed) {
|
|
366
|
+
if (char === '(')
|
|
367
|
+
parenCount++;
|
|
368
|
+
if (char === ')')
|
|
369
|
+
parenCount--;
|
|
370
|
+
if (parenCount < 0) {
|
|
371
|
+
return { isValid: false, error: 'Unbalanced parentheses in expression' };
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (parenCount !== 0) {
|
|
375
|
+
return { isValid: false, error: 'Unbalanced parentheses in expression' };
|
|
376
|
+
}
|
|
377
|
+
return { isValid: true };
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Validate equation format for solving
|
|
381
|
+
*/
|
|
382
|
+
function validateEquation(equation) {
|
|
383
|
+
if (!equation || typeof equation !== 'string') {
|
|
384
|
+
return { isValid: false, error: 'Equation must be a non-empty string' };
|
|
385
|
+
}
|
|
386
|
+
const trimmed = equation.trim();
|
|
387
|
+
if (trimmed.length === 0) {
|
|
388
|
+
return { isValid: false, error: 'Equation cannot be empty' };
|
|
389
|
+
}
|
|
390
|
+
// Check if equation contains exactly one equals sign
|
|
391
|
+
const equalsSigns = (trimmed.match(/=/g) || []).length;
|
|
392
|
+
if (equalsSigns === 0) {
|
|
393
|
+
return { isValid: false, error: 'Equation must contain an equals sign (=)' };
|
|
394
|
+
}
|
|
395
|
+
if (equalsSigns > 1) {
|
|
396
|
+
return { isValid: false, error: 'Equation cannot contain multiple equals signs' };
|
|
397
|
+
}
|
|
398
|
+
// Validate both sides of the equation
|
|
399
|
+
const parts = trimmed.split('=');
|
|
400
|
+
const leftSide = parts[0]?.trim() || '';
|
|
401
|
+
const rightSide = parts[1]?.trim() || '';
|
|
402
|
+
const leftValidation = validateAlgebraicExpression(leftSide);
|
|
403
|
+
if (!leftValidation.isValid) {
|
|
404
|
+
return { isValid: false, error: `Left side of equation: ${leftValidation.error}` };
|
|
405
|
+
}
|
|
406
|
+
const rightValidation = validateAlgebraicExpression(rightSide);
|
|
407
|
+
if (!rightValidation.isValid) {
|
|
408
|
+
return { isValid: false, error: `Right side of equation: ${rightValidation.error}` };
|
|
409
|
+
}
|
|
410
|
+
return { isValid: true };
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Validate variable name for CAS operations
|
|
414
|
+
*/
|
|
415
|
+
function validateVariableName(variable) {
|
|
416
|
+
if (!variable || typeof variable !== 'string') {
|
|
417
|
+
return { isValid: false, error: 'Variable name must be a non-empty string' };
|
|
418
|
+
}
|
|
419
|
+
const trimmed = variable.trim();
|
|
420
|
+
if (trimmed.length === 0) {
|
|
421
|
+
return { isValid: false, error: 'Variable name cannot be empty' };
|
|
422
|
+
}
|
|
423
|
+
// Variable must be a single letter or letter followed by digits/underscores
|
|
424
|
+
const variablePattern = /^[a-zA-Z][a-zA-Z0-9_]*$/;
|
|
425
|
+
if (!variablePattern.test(trimmed)) {
|
|
426
|
+
return {
|
|
427
|
+
isValid: false,
|
|
428
|
+
error: 'Variable name must start with a letter and contain only letters, numbers, and underscores'
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
// Check for reserved function names
|
|
432
|
+
const reservedNames = ['sin', 'cos', 'tan', 'log', 'ln', 'abs', 'sqrt', 'exp', 'pi', 'e'];
|
|
433
|
+
if (reservedNames.includes(trimmed.toLowerCase())) {
|
|
434
|
+
return { isValid: false, error: `"${trimmed}" is a reserved function name and cannot be used as a variable` };
|
|
435
|
+
}
|
|
436
|
+
return { isValid: true };
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Validate system of equations
|
|
440
|
+
*/
|
|
441
|
+
function validateSystemOfEquations(equations) {
|
|
442
|
+
if (!Array.isArray(equations)) {
|
|
443
|
+
return { isValid: false, error: 'Equations must be provided as an array' };
|
|
444
|
+
}
|
|
445
|
+
if (equations.length === 0) {
|
|
446
|
+
return { isValid: false, error: 'At least one equation must be provided' };
|
|
447
|
+
}
|
|
448
|
+
if (equations.length > 10) {
|
|
449
|
+
return { isValid: false, error: 'Cannot solve more than 10 equations simultaneously' };
|
|
450
|
+
}
|
|
451
|
+
// Validate each equation
|
|
452
|
+
for (let i = 0; i < equations.length; i++) {
|
|
453
|
+
const equation = equations[i];
|
|
454
|
+
if (equation === undefined || equation === null) {
|
|
455
|
+
return { isValid: false, error: `Equation ${i + 1} is undefined or null` };
|
|
456
|
+
}
|
|
457
|
+
const validation = validateEquation(equation);
|
|
458
|
+
if (!validation.isValid) {
|
|
459
|
+
return { isValid: false, error: `Equation ${i + 1}: ${validation.error}` };
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return { isValid: true };
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Validate variables list for system solving
|
|
466
|
+
*/
|
|
467
|
+
function validateVariablesList(variables) {
|
|
468
|
+
if (!Array.isArray(variables)) {
|
|
469
|
+
return { isValid: false, error: 'Variables must be provided as an array' };
|
|
470
|
+
}
|
|
471
|
+
if (variables.length === 0) {
|
|
472
|
+
return { isValid: false, error: 'At least one variable must be specified' };
|
|
473
|
+
}
|
|
474
|
+
if (variables.length > 10) {
|
|
475
|
+
return { isValid: false, error: 'Cannot solve for more than 10 variables simultaneously' };
|
|
476
|
+
}
|
|
477
|
+
// Validate each variable name
|
|
478
|
+
for (let i = 0; i < variables.length; i++) {
|
|
479
|
+
const variable = variables[i];
|
|
480
|
+
if (variable === undefined || variable === null) {
|
|
481
|
+
return { isValid: false, error: `Variable ${i + 1} is undefined or null` };
|
|
482
|
+
}
|
|
483
|
+
const validation = validateVariableName(variable);
|
|
484
|
+
if (!validation.isValid) {
|
|
485
|
+
return { isValid: false, error: `Variable ${i + 1}: ${validation.error}` };
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
// Check for duplicate variables
|
|
489
|
+
const uniqueVars = new Set(variables);
|
|
490
|
+
if (uniqueVars.size !== variables.length) {
|
|
491
|
+
return { isValid: false, error: 'Variables list cannot contain duplicates' };
|
|
492
|
+
}
|
|
493
|
+
return { isValid: true };
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Validates slider parameters for creation
|
|
497
|
+
*/
|
|
498
|
+
function validateSliderParameters(name, min, max, increment, defaultValue) {
|
|
499
|
+
// Validate name
|
|
500
|
+
const nameValidation = validateObjectName(name);
|
|
501
|
+
if (!nameValidation.isValid) {
|
|
502
|
+
return nameValidation;
|
|
503
|
+
}
|
|
504
|
+
// Validate range
|
|
505
|
+
if (min >= max) {
|
|
506
|
+
return { isValid: false, error: 'Minimum value must be less than maximum value' };
|
|
507
|
+
}
|
|
508
|
+
// Validate increment
|
|
509
|
+
if (increment !== undefined && increment <= 0) {
|
|
510
|
+
return { isValid: false, error: 'Increment must be positive' };
|
|
511
|
+
}
|
|
512
|
+
// Validate default value
|
|
513
|
+
if (defaultValue !== undefined && (defaultValue < min || defaultValue > max)) {
|
|
514
|
+
return { isValid: false, error: 'Default value must be within the specified range' };
|
|
515
|
+
}
|
|
516
|
+
return { isValid: true };
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Validates animation speed parameter
|
|
520
|
+
*/
|
|
521
|
+
function validateAnimationSpeed(speed) {
|
|
522
|
+
if (speed <= 0) {
|
|
523
|
+
return { isValid: false, error: 'Animation speed must be positive' };
|
|
524
|
+
}
|
|
525
|
+
if (speed > 10) {
|
|
526
|
+
return { isValid: false, error: 'Animation speed should not exceed 10 for reasonable performance' };
|
|
527
|
+
}
|
|
528
|
+
return { isValid: true };
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Validates animation direction parameter
|
|
532
|
+
*/
|
|
533
|
+
function validateAnimationDirection(direction) {
|
|
534
|
+
if (direction && !['forward', 'backward', 'oscillating'].includes(direction)) {
|
|
535
|
+
return { isValid: false, error: 'Animation direction must be "forward", "backward", or "oscillating"' };
|
|
536
|
+
}
|
|
537
|
+
return { isValid: true };
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Validates parameters for animation export
|
|
541
|
+
*/
|
|
542
|
+
function validateAnimationExportParameters(frameCount, frameDelay, totalDuration) {
|
|
543
|
+
if (frameCount <= 0 || !Number.isInteger(frameCount)) {
|
|
544
|
+
return { isValid: false, error: 'Frame count must be a positive integer' };
|
|
545
|
+
}
|
|
546
|
+
if (frameCount > 300) {
|
|
547
|
+
return { isValid: false, error: 'Frame count should not exceed 300 for reasonable file size' };
|
|
548
|
+
}
|
|
549
|
+
if (frameDelay <= 0) {
|
|
550
|
+
return { isValid: false, error: 'Frame delay must be positive' };
|
|
551
|
+
}
|
|
552
|
+
if (totalDuration !== undefined && totalDuration <= 0) {
|
|
553
|
+
return { isValid: false, error: 'Total duration must be positive' };
|
|
554
|
+
}
|
|
555
|
+
return { isValid: true };
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|