@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.
Files changed (189) hide show
  1. package/.agents/plugins/marketplace.json +21 -0
  2. package/.codex-plugin/plugin.json +21 -0
  3. package/.mcp.json +18 -0
  4. package/LICENSE +339 -0
  5. package/LICENSE-MIT +21 -0
  6. package/README.md +108 -2
  7. package/README.zh-CN.md +89 -0
  8. package/THIRD_PARTY_NOTICES.md +35 -0
  9. package/dist/cli.d.ts +27 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +234 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/export/files.d.ts +4 -0
  14. package/dist/export/files.d.ts.map +1 -0
  15. package/dist/export/files.js +44 -0
  16. package/dist/export/files.js.map +1 -0
  17. package/dist/export/gikz.d.ts +11 -0
  18. package/dist/export/gikz.d.ts.map +1 -0
  19. package/dist/export/gikz.js +28 -0
  20. package/dist/export/gikz.js.map +1 -0
  21. package/dist/export/html.d.ts +14 -0
  22. package/dist/export/html.d.ts.map +1 -0
  23. package/dist/export/html.js +97 -0
  24. package/dist/export/html.js.map +1 -0
  25. package/dist/export/semantic.d.ts +43 -0
  26. package/dist/export/semantic.d.ts.map +1 -0
  27. package/dist/export/semantic.js +212 -0
  28. package/dist/export/semantic.js.map +1 -0
  29. package/dist/export/viewer-themes.d.ts +76 -0
  30. package/dist/export/viewer-themes.d.ts.map +1 -0
  31. package/dist/export/viewer-themes.js +169 -0
  32. package/dist/export/viewer-themes.js.map +1 -0
  33. package/dist/export/workspace.d.ts +4 -0
  34. package/dist/export/workspace.d.ts.map +1 -0
  35. package/dist/export/workspace.js +25 -0
  36. package/dist/export/workspace.js.map +1 -0
  37. package/dist/gikz-browser.js +770 -0
  38. package/dist/index.d.ts +5 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +84 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/server.d.ts +35 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +187 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/studio/artifact.d.ts +37 -0
  47. package/dist/studio/artifact.d.ts.map +1 -0
  48. package/dist/studio/artifact.js +61 -0
  49. package/dist/studio/artifact.js.map +1 -0
  50. package/dist/studio/browser.d.ts +7 -0
  51. package/dist/studio/browser.d.ts.map +1 -0
  52. package/dist/studio/browser.js +67 -0
  53. package/dist/studio/browser.js.map +1 -0
  54. package/dist/studio/install.d.ts +4 -0
  55. package/dist/studio/install.d.ts.map +1 -0
  56. package/dist/studio/install.js +60 -0
  57. package/dist/studio/install.js.map +1 -0
  58. package/dist/tools/apps-api-tools.d.ts +4 -0
  59. package/dist/tools/apps-api-tools.d.ts.map +1 -0
  60. package/dist/tools/apps-api-tools.js +96 -0
  61. package/dist/tools/apps-api-tools.js.map +1 -0
  62. package/dist/tools/educational-templates.d.ts +33 -0
  63. package/dist/tools/educational-templates.d.ts.map +1 -0
  64. package/dist/tools/educational-templates.js +261 -0
  65. package/dist/tools/educational-templates.js.map +1 -0
  66. package/dist/tools/export-tools.d.ts +3 -0
  67. package/dist/tools/export-tools.d.ts.map +1 -0
  68. package/dist/tools/export-tools.js +118 -0
  69. package/dist/tools/export-tools.js.map +1 -0
  70. package/dist/tools/geogebra-tools.d.ts +15 -0
  71. package/dist/tools/geogebra-tools.d.ts.map +1 -0
  72. package/dist/tools/geogebra-tools.js +3442 -0
  73. package/dist/tools/geogebra-tools.js.map +1 -0
  74. package/dist/tools/index.d.ts +43 -0
  75. package/dist/tools/index.d.ts.map +1 -0
  76. package/dist/tools/index.js +183 -0
  77. package/dist/tools/index.js.map +1 -0
  78. package/dist/tools/performance-tools.d.ts +7 -0
  79. package/dist/tools/performance-tools.d.ts.map +1 -0
  80. package/dist/tools/performance-tools.js +312 -0
  81. package/dist/tools/performance-tools.js.map +1 -0
  82. package/dist/tools/templates/algebra-templates.d.ts +7 -0
  83. package/dist/tools/templates/algebra-templates.d.ts.map +1 -0
  84. package/dist/tools/templates/algebra-templates.js +568 -0
  85. package/dist/tools/templates/algebra-templates.js.map +1 -0
  86. package/dist/tools/templates/geometry-templates.d.ts +7 -0
  87. package/dist/tools/templates/geometry-templates.d.ts.map +1 -0
  88. package/dist/tools/templates/geometry-templates.js +492 -0
  89. package/dist/tools/templates/geometry-templates.js.map +1 -0
  90. package/dist/types/geogebra.d.ts +103 -0
  91. package/dist/types/geogebra.d.ts.map +1 -0
  92. package/dist/types/geogebra.js +34 -0
  93. package/dist/types/geogebra.js.map +1 -0
  94. package/dist/types/mcp.d.ts +125 -0
  95. package/dist/types/mcp.d.ts.map +1 -0
  96. package/dist/types/mcp.js +19 -0
  97. package/dist/types/mcp.js.map +1 -0
  98. package/dist/utils/app-info.d.ts +12 -0
  99. package/dist/utils/app-info.d.ts.map +1 -0
  100. package/dist/utils/app-info.js +30 -0
  101. package/dist/utils/app-info.js.map +1 -0
  102. package/dist/utils/errors.d.ts +37 -0
  103. package/dist/utils/errors.d.ts.map +1 -0
  104. package/dist/utils/errors.js +72 -0
  105. package/dist/utils/errors.js.map +1 -0
  106. package/dist/utils/gemini-compatibility.d.ts +39 -0
  107. package/dist/utils/gemini-compatibility.d.ts.map +1 -0
  108. package/dist/utils/gemini-compatibility.js +154 -0
  109. package/dist/utils/gemini-compatibility.js.map +1 -0
  110. package/dist/utils/geogebra-instance.d.ts +252 -0
  111. package/dist/utils/geogebra-instance.d.ts.map +1 -0
  112. package/dist/utils/geogebra-instance.js +1560 -0
  113. package/dist/utils/geogebra-instance.js.map +1 -0
  114. package/dist/utils/geogebra-mock.d.ts +172 -0
  115. package/dist/utils/geogebra-mock.d.ts.map +1 -0
  116. package/dist/utils/geogebra-mock.js +732 -0
  117. package/dist/utils/geogebra-mock.js.map +1 -0
  118. package/dist/utils/logger.d.ts +4 -0
  119. package/dist/utils/logger.d.ts.map +1 -0
  120. package/dist/utils/logger.js +46 -0
  121. package/dist/utils/logger.js.map +1 -0
  122. package/dist/utils/performance/index.d.ts +76 -0
  123. package/dist/utils/performance/index.d.ts.map +1 -0
  124. package/dist/utils/performance/index.js +163 -0
  125. package/dist/utils/performance/index.js.map +1 -0
  126. package/dist/utils/performance/instance-pool.d.ts +78 -0
  127. package/dist/utils/performance/instance-pool.d.ts.map +1 -0
  128. package/dist/utils/performance/instance-pool.js +268 -0
  129. package/dist/utils/performance/instance-pool.js.map +1 -0
  130. package/dist/utils/validation.d.ts +92 -0
  131. package/dist/utils/validation.d.ts.map +1 -0
  132. package/dist/utils/validation.js +557 -0
  133. package/dist/utils/validation.js.map +1 -0
  134. package/dist/widget.html +110 -0
  135. package/docs/APPS-API-BRIDGE.md +28 -0
  136. package/docs/MODERNIZATION.md +15 -0
  137. package/docs/TANGENT-REGRESSION.md +34 -0
  138. package/docs/VALIDATION.md +26 -0
  139. package/docs/VISUAL-STANDARD.md +26 -0
  140. package/docs/images/native-construction.png +0 -0
  141. package/examples/tangent-construction.json +26 -0
  142. package/gikz/LICENSE +339 -0
  143. package/gikz/PROVENANCE.md +8 -0
  144. package/gikz/browser.cjs +2 -0
  145. package/gikz/cli.cjs +195 -0
  146. package/gikz/core.cjs +806 -0
  147. package/mcp.json +20 -0
  148. package/package.json +107 -4
  149. package/plugin.json +35 -0
  150. package/runtime/package.json +4 -0
  151. package/scripts/build-plugin.cjs +15 -0
  152. package/scripts/build-widget.cjs +7 -0
  153. package/skills/geogebra-construct/SKILL.md +40 -0
  154. package/skills/geogebra-setup/SKILL.md +37 -0
  155. package/skills/geometry-export/SKILL.md +31 -0
  156. package/src/cli.ts +212 -0
  157. package/src/export/files.ts +26 -0
  158. package/src/export/gikz.ts +22 -0
  159. package/src/export/html.ts +108 -0
  160. package/src/export/semantic.ts +180 -0
  161. package/src/export/viewer-themes.ts +165 -0
  162. package/src/export/workspace.ts +15 -0
  163. package/src/index.ts +71 -0
  164. package/src/server.ts +168 -0
  165. package/src/studio/artifact.ts +50 -0
  166. package/src/studio/browser.ts +38 -0
  167. package/src/studio/install.ts +43 -0
  168. package/src/tools/apps-api-tools.ts +96 -0
  169. package/src/tools/educational-templates.ts +299 -0
  170. package/src/tools/export-tools.ts +110 -0
  171. package/src/tools/geogebra-tools.ts +3836 -0
  172. package/src/tools/index.ts +192 -0
  173. package/src/tools/performance-tools.ts +322 -0
  174. package/src/tools/templates/algebra-templates.ts +619 -0
  175. package/src/tools/templates/geometry-templates.ts +550 -0
  176. package/src/types/geogebra.ts +140 -0
  177. package/src/types/global.d.ts +31 -0
  178. package/src/types/mcp.ts +141 -0
  179. package/src/utils/app-info.ts +35 -0
  180. package/src/utils/errors.ts +97 -0
  181. package/src/utils/gemini-compatibility.ts +193 -0
  182. package/src/utils/geogebra-instance.ts +1712 -0
  183. package/src/utils/geogebra-mock.ts +867 -0
  184. package/src/utils/logger.ts +60 -0
  185. package/src/utils/performance/index.ts +211 -0
  186. package/src/utils/performance/instance-pool.ts +323 -0
  187. package/src/utils/validation.ts +647 -0
  188. package/tsconfig.json +35 -0
  189. 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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"}