@metamesh/generator-sdk 0.17.0 → 0.19.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.
Files changed (397) hide show
  1. package/CHANGELOG.md +197 -0
  2. package/README.md +101 -65
  3. package/dist/authoring.d.ts +12 -5
  4. package/dist/authoring.d.ts.map +1 -1
  5. package/dist/authoring.js +7 -3
  6. package/dist/authoring.js.map +1 -1
  7. package/dist/docs/guides/authoring.md +8 -8
  8. package/dist/docs/guides/package.md +101 -65
  9. package/dist/docs/guides/parameters.md +32 -32
  10. package/dist/docs/manifest.json +159 -257
  11. package/dist/docs/reference/fonts/FontSelection.md +1 -1
  12. package/dist/docs/reference/fonts/isFontSelection.md +1 -1
  13. package/dist/docs/reference/index/ArrayParameterDefinition.md +1 -1
  14. package/dist/docs/reference/index/BaseParameterDefinition.md +1 -1
  15. package/dist/docs/reference/index/BooleanParameterDefinition.md +1 -1
  16. package/dist/docs/reference/index/ChoiceOption.md +1 -1
  17. package/dist/docs/reference/index/ChoiceParameterDefinition.md +1 -1
  18. package/dist/docs/reference/index/ChoiceSetParameterDefinition.md +1 -1
  19. package/dist/docs/reference/index/ColorParameterDefinition.md +1 -1
  20. package/dist/docs/reference/index/ConditionExpression.md +1 -1
  21. package/dist/docs/reference/index/ContourAnchor.md +1 -1
  22. package/dist/docs/reference/index/ContourParameterDefinition.md +1 -1
  23. package/dist/docs/reference/index/ContourParameterUi.md +1 -1
  24. package/dist/docs/reference/index/ContourPoint.md +1 -1
  25. package/dist/docs/reference/index/ContourSegment.md +1 -1
  26. package/dist/docs/reference/index/ContourValue.md +1 -1
  27. package/dist/docs/reference/index/FontParameterDefinition.md +1 -1
  28. package/dist/docs/reference/index/FontSelection.md +1 -1
  29. package/dist/docs/reference/index/GeneratorDefinition.md +1 -1
  30. package/dist/docs/reference/index/GeneratorIssue.md +1 -1
  31. package/dist/docs/reference/index/GeneratorModule.md +5 -6
  32. package/dist/docs/reference/index/GeneratorModuleOptions.md +2 -2
  33. package/dist/docs/reference/index/GeneratorParamId.md +1 -1
  34. package/dist/docs/reference/index/GeneratorParams.md +1 -1
  35. package/dist/docs/reference/index/GeneratorPreset.md +1 -1
  36. package/dist/docs/reference/index/GeneratorProgram.md +1 -1
  37. package/dist/docs/reference/index/GeneratorServices.md +1 -1
  38. package/dist/docs/reference/index/GeneratorTextArcBaseline.md +1 -1
  39. package/dist/docs/reference/index/GeneratorTextLayout.md +1 -1
  40. package/dist/docs/reference/index/GeneratorTextMetrics.md +1 -1
  41. package/dist/docs/reference/index/GeneratorTextOptions.md +1 -1
  42. package/dist/docs/reference/index/MAX_CONTOUR_SEGMENTS.md +1 -1
  43. package/dist/docs/reference/index/MAX_SIDE_PROFILE_SEGMENTS.md +1 -1
  44. package/dist/docs/reference/index/NumberArrayItemDefinition.md +1 -1
  45. package/dist/docs/reference/index/NumberArrayParameterDefinition.md +1 -1
  46. package/dist/docs/reference/index/NumberParameterDefinition.md +1 -1
  47. package/dist/docs/reference/index/NumberParameterUi.md +1 -1
  48. package/dist/docs/reference/index/ParameterDefinition.md +1 -1
  49. package/dist/docs/reference/index/ParameterDefinitionDocument.md +1 -1
  50. package/dist/docs/reference/index/ParameterGroup.md +1 -1
  51. package/dist/docs/reference/index/ParameterIssue.md +1 -1
  52. package/dist/docs/reference/index/ParameterIssueCode.md +1 -1
  53. package/dist/docs/reference/index/ParameterIssueSeverity.md +1 -1
  54. package/dist/docs/reference/index/ParameterScaleReference.md +1 -1
  55. package/dist/docs/reference/index/ParameterUi.md +1 -1
  56. package/dist/docs/reference/index/ParameterValidationResult.md +1 -1
  57. package/dist/docs/reference/index/ParameterValue.md +1 -1
  58. package/dist/docs/reference/index/ParameterValues.md +1 -1
  59. package/dist/docs/reference/index/RowParameterUi.md +1 -1
  60. package/dist/docs/reference/index/ScalarParameterValue.md +1 -1
  61. package/dist/docs/reference/index/SideProfileAnchor.md +1 -1
  62. package/dist/docs/reference/index/SideProfileParameterDefinition.md +1 -1
  63. package/dist/docs/reference/index/SideProfileParameterUi.md +1 -1
  64. package/dist/docs/reference/index/SideProfilePoint.md +1 -1
  65. package/dist/docs/reference/index/SideProfileSegment.md +1 -1
  66. package/dist/docs/reference/index/SideProfileValue.md +1 -1
  67. package/dist/docs/reference/index/SourceVisibility.md +1 -1
  68. package/dist/docs/reference/index/StringArrayItemDefinition.md +1 -1
  69. package/dist/docs/reference/index/StringArrayParameterDefinition.md +1 -1
  70. package/dist/docs/reference/index/SvgParameterDefinition.md +1 -1
  71. package/dist/docs/reference/index/TextParameterDefinition.md +1 -1
  72. package/dist/docs/reference/index/UNPREPARED_GENERATOR_SERVICES.md +1 -1
  73. package/dist/docs/reference/index/cloneContourValue.md +1 -1
  74. package/dist/docs/reference/index/cloneSideProfileValue.md +1 -1
  75. package/dist/docs/reference/index/contourValuesEqual.md +1 -1
  76. package/dist/docs/reference/index/defineGenerator.md +6 -4
  77. package/dist/docs/reference/index/defineGeneratorModule.md +2 -2
  78. package/dist/docs/reference/index/definePresets.md +4 -4
  79. package/dist/docs/reference/index/evaluateCondition.md +1 -1
  80. package/dist/docs/reference/index/isContourValue.md +1 -1
  81. package/dist/docs/reference/index/isFontSelection.md +1 -1
  82. package/dist/docs/reference/index/isSideProfileValue.md +1 -1
  83. package/dist/docs/reference/index/sideProfileValuesEqual.md +1 -1
  84. package/dist/docs/reference/modeling/GeneratorModel.md +10 -0
  85. package/dist/docs/reference/modeling/ModelDeliveryEncoder.md +22 -0
  86. package/dist/docs/reference/modeling/defineGeneratorModel.md +2 -2
  87. package/dist/docs/reference/modeling/parseGeneratorModel.md +15 -0
  88. package/dist/docs/reference/packages/GENERATOR_PACKAGE_FORMAT_VERSION.md +2 -2
  89. package/dist/docs/reference/packages/GeneratorAccess.md +1 -1
  90. package/dist/docs/reference/packages/GeneratorDefinitionIssue.md +1 -1
  91. package/dist/docs/reference/packages/GeneratorDefinitionParseResult.md +1 -1
  92. package/dist/docs/reference/packages/GeneratorDescriptor.md +1 -1
  93. package/dist/docs/reference/packages/GeneratorPackageManifest.md +1 -1
  94. package/dist/docs/reference/packages/GeneratorPackageSource.md +1 -1
  95. package/dist/docs/reference/packages/GeneratorPackageValidationError.md +1 -1
  96. package/dist/docs/reference/packages/GeneratorPreset.md +1 -1
  97. package/dist/docs/reference/packages/GeneratorRuntimeReference.md +1 -1
  98. package/dist/docs/reference/packages/InstalledGenerator.md +1 -1
  99. package/dist/docs/reference/packages/MAX_ARRAY_ITEMS.md +1 -1
  100. package/dist/docs/reference/packages/MAX_CONDITION_BRANCHES.md +1 -1
  101. package/dist/docs/reference/packages/MAX_CONDITION_DEPTH.md +1 -1
  102. package/dist/docs/reference/packages/MAX_DESCRIPTOR_LIST_ITEMS.md +1 -1
  103. package/dist/docs/reference/packages/MAX_GENERATOR_ID_LENGTH.md +2 -2
  104. package/dist/docs/reference/packages/MAX_GENERATOR_PACKAGE_BYTES.md +1 -1
  105. package/dist/docs/reference/packages/MAX_GENERATOR_PRESETS.md +1 -1
  106. package/dist/docs/reference/packages/MAX_METADATA_TEXT_LENGTH.md +2 -2
  107. package/dist/docs/reference/packages/MAX_PARAMETERS.md +1 -1
  108. package/dist/docs/reference/packages/MAX_PARAMETER_GROUPS.md +1 -1
  109. package/dist/docs/reference/packages/MAX_PARAMETER_OPTIONS.md +1 -1
  110. package/dist/docs/reference/packages/MAX_TEXT_PARAMETER_LENGTH.md +2 -2
  111. package/dist/docs/reference/packages/METAMESH_RUNTIME_VERSION.md +2 -2
  112. package/dist/docs/reference/packages/compareSemanticVersions.md +1 -1
  113. package/dist/docs/reference/packages/isRuntimeCompatible.md +1 -1
  114. package/dist/docs/reference/packages/parseGeneratorDefinition.md +1 -1
  115. package/dist/docs/reference/packages/parseGeneratorDescriptor.md +1 -1
  116. package/dist/docs/reference/packages/parseGeneratorPackageManifest.md +1 -1
  117. package/dist/docs/reference/packages/parseParameterDefinitionDocument.md +1 -1
  118. package/dist/docs/reference/packages/safeParseGeneratorDefinition.md +1 -1
  119. package/dist/docs/reference/packages/safeParseParameterDefinitionDocument.md +1 -1
  120. package/dist/docs/reference/packages/validateGeneratorPresets.md +1 -1
  121. package/dist/docs/reference/parameters/EMPTY_SVG_PARAMETER_DEFAULT.md +1 -1
  122. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUES.md +1 -1
  123. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUE_MESSAGE_LENGTH.md +1 -1
  124. package/dist/docs/reference/parameters/MAX_PROJECT_SVG_PARAMETER_BYTES.md +1 -1
  125. package/dist/docs/reference/parameters/MAX_SVG_PARAMETER_BYTES.md +1 -1
  126. package/dist/docs/reference/parameters/ParamCodec.md +1 -1
  127. package/dist/docs/reference/parameters/ParamDecodeCode.md +1 -1
  128. package/dist/docs/reference/parameters/ParamDecodeError.md +1 -1
  129. package/dist/docs/reference/parameters/ParamDecodeIssue.md +3 -3
  130. package/dist/docs/reference/parameters/ParamParseResult.md +1 -1
  131. package/dist/docs/reference/parameters/aggregateParameterIssues.md +1 -1
  132. package/dist/docs/reference/parameters/createParamCodec.md +1 -1
  133. package/dist/docs/reference/parameters/getDefaultParameters.md +1 -1
  134. package/dist/docs/reference/parameters/normalizeParameters.md +1 -1
  135. package/dist/docs/reference/parameters/parameterValueEquals.md +1 -1
  136. package/dist/docs/reference/parameters/parseParameterIssues.md +1 -1
  137. package/dist/docs/reference/parameters/svgParameterBytes.md +1 -1
  138. package/dist/docs/reference/runtime/ExecuteGeneratorOptions.md +2 -4
  139. package/dist/docs/reference/runtime/GenerateRequest.md +1 -1
  140. package/dist/docs/reference/runtime/GenerationError.md +1 -1
  141. package/dist/docs/reference/runtime/GenerationInvalid.md +1 -1
  142. package/dist/docs/reference/runtime/GenerationSuccess.md +2 -2
  143. package/dist/docs/reference/runtime/GeneratorExecutionGenerated.md +1 -1
  144. package/dist/docs/reference/runtime/GeneratorExecutionInvalid.md +2 -3
  145. package/dist/docs/reference/runtime/GeneratorExecutionResult.md +2 -2
  146. package/dist/docs/reference/runtime/MeshResourceData.md +19 -0
  147. package/dist/docs/reference/runtime/MeshTopologyMode.md +1 -1
  148. package/dist/docs/reference/runtime/ModelBounds.md +1 -1
  149. package/dist/docs/reference/runtime/ModelData.md +17 -0
  150. package/dist/docs/reference/runtime/ModelDelivery.md +12 -0
  151. package/dist/docs/reference/runtime/ModelPartData.md +35 -0
  152. package/dist/docs/reference/runtime/ModelStats.md +6 -4
  153. package/dist/docs/reference/runtime/ModelTimings.md +10 -9
  154. package/dist/docs/reference/runtime/ParsedGeneratorModule.md +1 -1
  155. package/dist/docs/reference/runtime/PartDelivery.md +15 -0
  156. package/dist/docs/reference/runtime/{GeneratedPartsDecoder.md → PartDeliveryDecoder.md} +5 -5
  157. package/dist/docs/reference/runtime/{GeneratedPartsLimits.md → PartDeliveryLimits.md} +3 -3
  158. package/dist/docs/reference/runtime/RuntimeError.md +1 -1
  159. package/dist/docs/reference/runtime/ValidateRequest.md +1 -1
  160. package/dist/docs/reference/runtime/ValidationError.md +1 -1
  161. package/dist/docs/reference/runtime/ValidationSuccess.md +1 -1
  162. package/dist/docs/reference/runtime/WorkerRequest.md +2 -2
  163. package/dist/docs/reference/runtime/WorkerResponse.md +2 -2
  164. package/dist/docs/reference/runtime/canonicalizeParameters.md +10 -0
  165. package/dist/docs/reference/runtime/executeGenerator.md +3 -3
  166. package/dist/docs/reference/runtime/generationIssues.md +1 -1
  167. package/dist/docs/reference/runtime/parseGenerationSentAt.md +1 -1
  168. package/dist/docs/reference/runtime/parseGeneratorModule.md +3 -3
  169. package/dist/docs/reference/runtime/{parseGeneratedParts.md → parseModelParts.md} +3 -3
  170. package/dist/generator-module.d.ts +11 -8
  171. package/dist/generator-module.d.ts.map +1 -1
  172. package/dist/generator-module.js +3 -2
  173. package/dist/generator-module.js.map +1 -1
  174. package/dist/generator-package/constants.d.ts +3 -11
  175. package/dist/generator-package/constants.d.ts.map +1 -1
  176. package/dist/generator-package/constants.js +4 -12
  177. package/dist/generator-package/constants.js.map +1 -1
  178. package/dist/generator-package/contracts.d.ts +15 -0
  179. package/dist/generator-package/contracts.d.ts.map +1 -0
  180. package/dist/generator-package/contracts.js.map +1 -0
  181. package/dist/generator-package/index.d.ts +10 -30
  182. package/dist/generator-package/index.d.ts.map +1 -1
  183. package/dist/generator-package/index.js +7 -85
  184. package/dist/generator-package/index.js.map +1 -1
  185. package/dist/generator-package/parse-package.d.ts +5 -0
  186. package/dist/generator-package/parse-package.d.ts.map +1 -0
  187. package/dist/generator-package/parse-package.js +38 -0
  188. package/dist/generator-package/parse-package.js.map +1 -0
  189. package/dist/generator-package/schemas/descriptor.schema.d.ts +2 -2
  190. package/dist/generator-package/schemas/descriptor.schema.d.ts.map +1 -1
  191. package/dist/generator-package/schemas/descriptor.schema.js +2 -2
  192. package/dist/generator-package/schemas/descriptor.schema.js.map +1 -1
  193. package/dist/generator-package/schemas/manifest.schema.d.ts +16 -16
  194. package/dist/generator-package/schemas/manifest.schema.d.ts.map +1 -1
  195. package/dist/generator-package/schemas/manifest.schema.js +4 -4
  196. package/dist/generator-package/schemas/manifest.schema.js.map +1 -1
  197. package/dist/generator-package/validate-manifest.d.ts +2 -2
  198. package/dist/generator-package/validate-manifest.d.ts.map +1 -1
  199. package/dist/generator-package/validate-manifest.js +15 -20
  200. package/dist/generator-package/validate-manifest.js.map +1 -1
  201. package/dist/generator-package/versions.js +2 -2
  202. package/dist/generator-package/versions.js.map +1 -1
  203. package/dist/generator-package/versions.spec.js +6 -5
  204. package/dist/generator-package/versions.spec.js.map +1 -1
  205. package/dist/index.d.ts +8 -7
  206. package/dist/index.d.ts.map +1 -1
  207. package/dist/index.js +3 -3
  208. package/dist/index.js.map +1 -1
  209. package/dist/metadata-limits.d.ts +5 -0
  210. package/dist/metadata-limits.d.ts.map +1 -0
  211. package/dist/metadata-limits.js +5 -0
  212. package/dist/metadata-limits.js.map +1 -0
  213. package/dist/modeling-delivery.d.ts +17 -0
  214. package/dist/modeling-delivery.d.ts.map +1 -0
  215. package/dist/modeling-delivery.js +44 -0
  216. package/dist/modeling-delivery.js.map +1 -0
  217. package/dist/modeling.d.ts +13 -2
  218. package/dist/modeling.d.ts.map +1 -1
  219. package/dist/modeling.js +12 -1
  220. package/dist/modeling.js.map +1 -1
  221. package/dist/parameters/conditions.d.ts.map +1 -0
  222. package/dist/parameters/conditions.js.map +1 -0
  223. package/dist/parameters/contours.d.ts.map +1 -0
  224. package/dist/parameters/contours.js.map +1 -0
  225. package/dist/parameters/contracts.d.ts +69 -0
  226. package/dist/parameters/contracts.d.ts.map +1 -0
  227. package/dist/parameters/contracts.js +2 -0
  228. package/dist/{contracts.js.map → parameters/contracts.js.map} +1 -1
  229. package/dist/parameters/curve-data.d.ts.map +1 -0
  230. package/dist/parameters/curve-data.js.map +1 -0
  231. package/dist/{parameter-contracts.d.ts → parameters/definitions.d.ts} +2 -2
  232. package/dist/parameters/definitions.d.ts.map +1 -0
  233. package/dist/parameters/definitions.js +2 -0
  234. package/dist/parameters/definitions.js.map +1 -0
  235. package/dist/parameters/issues.d.ts +2 -1
  236. package/dist/parameters/issues.d.ts.map +1 -1
  237. package/dist/parameters/issues.js +4 -3
  238. package/dist/parameters/issues.js.map +1 -1
  239. package/dist/parameters/limits.d.ts +9 -0
  240. package/dist/parameters/limits.d.ts.map +1 -0
  241. package/dist/parameters/limits.js +9 -0
  242. package/dist/parameters/limits.js.map +1 -0
  243. package/dist/parameters/recovery.d.ts +2 -1
  244. package/dist/parameters/recovery.d.ts.map +1 -1
  245. package/dist/parameters/recovery.js +4 -3
  246. package/dist/parameters/recovery.js.map +1 -1
  247. package/dist/parameters/side-profiles.d.ts.map +1 -0
  248. package/dist/parameters/side-profiles.js.map +1 -0
  249. package/dist/parameters/strict.d.ts +4 -3
  250. package/dist/parameters/strict.d.ts.map +1 -1
  251. package/dist/parameters/strict.js +11 -7
  252. package/dist/parameters/strict.js.map +1 -1
  253. package/dist/parameters/values.d.ts +1 -1
  254. package/dist/parameters/values.d.ts.map +1 -1
  255. package/dist/parameters/values.js +2 -2
  256. package/dist/parameters/values.js.map +1 -1
  257. package/dist/parameters.d.ts +0 -2
  258. package/dist/parameters.d.ts.map +1 -1
  259. package/dist/parameters.js +0 -1
  260. package/dist/parameters.js.map +1 -1
  261. package/dist/runtime/execute-generator.d.ts +6 -9
  262. package/dist/runtime/execute-generator.d.ts.map +1 -1
  263. package/dist/runtime/execute-generator.js +11 -11
  264. package/dist/runtime/execute-generator.js.map +1 -1
  265. package/dist/runtime/model-contracts.d.ts +103 -0
  266. package/dist/runtime/model-contracts.d.ts.map +1 -0
  267. package/dist/runtime/model-contracts.js +2 -0
  268. package/dist/runtime/model-contracts.js.map +1 -0
  269. package/dist/runtime/parameter-identities.d.ts +4 -0
  270. package/dist/runtime/parameter-identities.d.ts.map +1 -0
  271. package/dist/runtime/parameter-identities.js +11 -0
  272. package/dist/runtime/parameter-identities.js.map +1 -0
  273. package/dist/runtime/parse-generator-module.d.ts +2 -3
  274. package/dist/runtime/parse-generator-module.d.ts.map +1 -1
  275. package/dist/runtime/parse-generator-module.js +7 -19
  276. package/dist/runtime/parse-generator-module.js.map +1 -1
  277. package/dist/runtime/{generated-parts.d.ts → part-delivery.d.ts} +11 -7
  278. package/dist/runtime/part-delivery.d.ts.map +1 -0
  279. package/dist/runtime/{generated-parts.js → part-delivery.js} +69 -44
  280. package/dist/runtime/part-delivery.js.map +1 -0
  281. package/dist/runtime/worker-contracts.d.ts +5 -29
  282. package/dist/runtime/worker-contracts.d.ts.map +1 -1
  283. package/dist/runtime/worker-contracts.js.map +1 -1
  284. package/dist/runtime.d.ts +6 -4
  285. package/dist/runtime.d.ts.map +1 -1
  286. package/dist/runtime.js +3 -2
  287. package/dist/runtime.js.map +1 -1
  288. package/dist/{generator-package → validation}/errors.d.ts +1 -1
  289. package/dist/validation/errors.d.ts.map +1 -0
  290. package/dist/validation/errors.js.map +1 -0
  291. package/dist/validation/parse-definition.d.ts +9 -0
  292. package/dist/validation/parse-definition.d.ts.map +1 -0
  293. package/dist/validation/parse-definition.js +49 -0
  294. package/dist/validation/parse-definition.js.map +1 -0
  295. package/dist/validation/portable-data.d.ts.map +1 -0
  296. package/dist/validation/portable-data.js.map +1 -0
  297. package/dist/{generator-package → validation}/schemas/common.schema.d.ts +1 -1
  298. package/dist/validation/schemas/common.schema.d.ts.map +1 -0
  299. package/dist/{generator-package → validation}/schemas/common.schema.js +3 -2
  300. package/dist/validation/schemas/common.schema.js.map +1 -0
  301. package/dist/{generator-package → validation}/schemas/condition.schema.d.ts +2 -2
  302. package/dist/validation/schemas/condition.schema.d.ts.map +1 -0
  303. package/dist/{generator-package → validation}/schemas/condition.schema.js +2 -2
  304. package/dist/validation/schemas/condition.schema.js.map +1 -0
  305. package/dist/{generator-package → validation}/schemas/definition.schema.d.ts +23 -23
  306. package/dist/validation/schemas/definition.schema.d.ts.map +1 -0
  307. package/dist/{generator-package → validation}/schemas/definition.schema.js +2 -2
  308. package/dist/validation/schemas/definition.schema.js.map +1 -0
  309. package/dist/{generator-package → validation}/schemas/parameter-document-json-schema.d.ts +1 -1
  310. package/dist/validation/schemas/parameter-document-json-schema.d.ts.map +1 -0
  311. package/dist/{generator-package → validation}/schemas/parameter-document-json-schema.js +1 -1
  312. package/dist/validation/schemas/parameter-document-json-schema.js.map +1 -0
  313. package/dist/{generator-package → validation}/schemas/parameter.schema.d.ts +12 -12
  314. package/dist/validation/schemas/parameter.schema.d.ts.map +1 -0
  315. package/dist/{generator-package → validation}/schemas/parameter.schema.js +4 -4
  316. package/dist/validation/schemas/parameter.schema.js.map +1 -0
  317. package/dist/validation/schemas/preset.schema.d.ts +5 -0
  318. package/dist/validation/schemas/preset.schema.d.ts.map +1 -0
  319. package/dist/{generator-package → validation}/schemas/preset.schema.js +4 -4
  320. package/dist/validation/schemas/preset.schema.js.map +1 -0
  321. package/dist/{generator-package → validation}/validate-definition.d.ts +1 -1
  322. package/dist/validation/validate-definition.d.ts.map +1 -0
  323. package/dist/{generator-package → validation}/validate-definition.js +2 -2
  324. package/dist/validation/validate-definition.js.map +1 -0
  325. package/dist/validation/version-format.d.ts.map +1 -0
  326. package/dist/validation/version-format.js.map +1 -0
  327. package/package.json +6 -3
  328. package/dist/conditions.d.ts.map +0 -1
  329. package/dist/conditions.js.map +0 -1
  330. package/dist/contours.d.ts.map +0 -1
  331. package/dist/contours.js.map +0 -1
  332. package/dist/contracts.d.ts +0 -139
  333. package/dist/contracts.d.ts.map +0 -1
  334. package/dist/curve-data.d.ts.map +0 -1
  335. package/dist/curve-data.js.map +0 -1
  336. package/dist/docs/reference/packages/definitionIssuesFromZod.md +0 -10
  337. package/dist/docs/reference/packages/validationErrorFromIssues.md +0 -9
  338. package/dist/docs/reference/packages/validationErrorFromZod.md +0 -9
  339. package/dist/docs/reference/parameters/PreparedParameters.md +0 -12
  340. package/dist/docs/reference/parameters/canonicalizeParameters.md +0 -10
  341. package/dist/docs/reference/parameters/prepareParameters.md +0 -13
  342. package/dist/docs/reference/parameters/validateParameters.md +0 -10
  343. package/dist/docs/reference/runtime/Export3mfRequest.md +0 -18
  344. package/dist/docs/reference/runtime/ExportError.md +0 -13
  345. package/dist/docs/reference/runtime/ExportSuccess.md +0 -13
  346. package/dist/docs/reference/runtime/ExportedFile.md +0 -13
  347. package/dist/docs/reference/runtime/GeneratedModel.md +0 -17
  348. package/dist/docs/reference/runtime/GeneratedModelDelivery.md +0 -12
  349. package/dist/docs/reference/runtime/GeneratedPart.md +0 -20
  350. package/dist/docs/reference/runtime/GeneratedPartDelivery.md +0 -13
  351. package/dist/docs/reference/runtime/isGeneratorModule.md +0 -9
  352. package/dist/generator-package/errors.d.ts.map +0 -1
  353. package/dist/generator-package/errors.js.map +0 -1
  354. package/dist/generator-package/portable-data.d.ts.map +0 -1
  355. package/dist/generator-package/portable-data.js.map +0 -1
  356. package/dist/generator-package/schemas/common.schema.d.ts.map +0 -1
  357. package/dist/generator-package/schemas/common.schema.js.map +0 -1
  358. package/dist/generator-package/schemas/condition.schema.d.ts.map +0 -1
  359. package/dist/generator-package/schemas/condition.schema.js.map +0 -1
  360. package/dist/generator-package/schemas/definition.schema.d.ts.map +0 -1
  361. package/dist/generator-package/schemas/definition.schema.js.map +0 -1
  362. package/dist/generator-package/schemas/parameter-document-json-schema.d.ts.map +0 -1
  363. package/dist/generator-package/schemas/parameter-document-json-schema.js.map +0 -1
  364. package/dist/generator-package/schemas/parameter.schema.d.ts.map +0 -1
  365. package/dist/generator-package/schemas/parameter.schema.js.map +0 -1
  366. package/dist/generator-package/schemas/preset.schema.d.ts +0 -5
  367. package/dist/generator-package/schemas/preset.schema.d.ts.map +0 -1
  368. package/dist/generator-package/schemas/preset.schema.js.map +0 -1
  369. package/dist/generator-package/validate-definition.d.ts.map +0 -1
  370. package/dist/generator-package/validate-definition.js.map +0 -1
  371. package/dist/generator-package/version-format.d.ts.map +0 -1
  372. package/dist/generator-package/version-format.js.map +0 -1
  373. package/dist/parameter-contracts.d.ts.map +0 -1
  374. package/dist/parameter-contracts.js +0 -2
  375. package/dist/parameter-contracts.js.map +0 -1
  376. package/dist/parameters/preparation.d.ts +0 -15
  377. package/dist/parameters/preparation.d.ts.map +0 -1
  378. package/dist/parameters/preparation.js +0 -47
  379. package/dist/parameters/preparation.js.map +0 -1
  380. package/dist/runtime/generated-parts.d.ts.map +0 -1
  381. package/dist/runtime/generated-parts.js.map +0 -1
  382. package/dist/side-profiles.d.ts.map +0 -1
  383. package/dist/side-profiles.js.map +0 -1
  384. /package/dist/{contracts.js → generator-package/contracts.js} +0 -0
  385. /package/dist/{conditions.d.ts → parameters/conditions.d.ts} +0 -0
  386. /package/dist/{conditions.js → parameters/conditions.js} +0 -0
  387. /package/dist/{contours.d.ts → parameters/contours.d.ts} +0 -0
  388. /package/dist/{contours.js → parameters/contours.js} +0 -0
  389. /package/dist/{curve-data.d.ts → parameters/curve-data.d.ts} +0 -0
  390. /package/dist/{curve-data.js → parameters/curve-data.js} +0 -0
  391. /package/dist/{side-profiles.d.ts → parameters/side-profiles.d.ts} +0 -0
  392. /package/dist/{side-profiles.js → parameters/side-profiles.js} +0 -0
  393. /package/dist/{generator-package → validation}/errors.js +0 -0
  394. /package/dist/{generator-package → validation}/portable-data.d.ts +0 -0
  395. /package/dist/{generator-package → validation}/portable-data.js +0 -0
  396. /package/dist/{generator-package → validation}/version-format.d.ts +0 -0
  397. /package/dist/{generator-package → validation}/version-format.js +0 -0
@@ -1,28 +1,38 @@
1
1
  # `@metamesh/generator-sdk`
2
2
 
3
- Turn a parametric model into a MetaMesh Generator. Define controls once, infer their TypeScript
4
- types, and use the same parameter contract for forms, saved values, and execution.
3
+ Turn a parametric model into a reusable MetaMesh Generator. Define its controls and presets once,
4
+ then use that definition to infer parameter types, validate saved values, and connect the model
5
+ to an editing interface.
5
6
 
6
7
  > **Preview:** `0.x` minor releases may break compatibility. Patches remain compatible within the
7
8
  > same minor line.
8
9
 
9
10
  ## Installation
10
11
 
12
+ Install matching SDK and Modeling releases to build the Generator below:
13
+
11
14
  ```bash
12
- pnpm add @metamesh/generator-sdk
15
+ pnpm add @metamesh/generator-sdk @metamesh/modeling
13
16
  ```
14
17
 
15
- The SDK is renderer-neutral. To build geometry in the example below, also install
16
- [`@metamesh/modeling`](https://github.com/JasonKoolman/metamesh/blob/main/packages/modeling/README.md).
17
- Keep installed MetaMesh packages on the same exact release.
18
+ The package publishes ES modules only. Use Node.js 24 or newer. TypeScript consumers need
19
+ TypeScript 6.0 or newer, `strict` checking, and `NodeNext` or `Bundler` module resolution.
20
+ Browser hosts need an ES2023-compatible runtime; the SDK's data contracts require no WebAssembly.
21
+
22
+ You can also use the SDK on its own for definitions, parameter handling, and package validation.
23
+ The optional `/modeling` adapter connects it to Modeling; your application supplies the interface
24
+ and execution host.
18
25
 
19
26
  ## Define controls
20
27
 
21
- A definition describes the Generator and its editable parameters. Literal IDs and options give
22
- you exact parameter types:
28
+ A Generator combines a definition with a synchronous model program. This example makes a sleeve
29
+ with two diameter controls. Parameter types come from the definition, and an assertion checks
30
+ that the bore fits inside the outer wall:
23
31
 
24
32
  ```ts
25
33
  import { defineGenerator } from "@metamesh/generator-sdk";
34
+ import { defineGeneratorModel } from "@metamesh/generator-sdk/modeling";
35
+ import { tube } from "@metamesh/modeling";
26
36
 
27
37
  export const definition = defineGenerator({
28
38
  id: "sleeve",
@@ -34,29 +44,11 @@ export const definition = defineGenerator({
34
44
  { id: "boreDiameter", label: "Bore diameter", type: "number", default: 10, min: 1 },
35
45
  ],
36
46
  });
37
- ```
38
-
39
- Definitions are serializable. Optional `ui` metadata describes grouping, visibility, hints, and
40
- editing increments. Number inputs and sliders share `type: "number"`; sliders add
41
- `ui.control: "slider"`, bounds, and `ui.step`. See the
42
- [parameter guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
43
- for the full set of controls.
44
-
45
- ## Generate a model
46
-
47
- Add a synchronous generation program to the same module. The Modeling adapter infers controls,
48
- prepared services, and diagnostic parameter IDs from the definition:
49
-
50
- ```ts
51
- import { defineGeneratorModel } from "@metamesh/generator-sdk/modeling";
52
- import { tube } from "@metamesh/modeling";
53
47
 
54
48
  export default defineGeneratorModel(definition, ({ params, assert, part }) => {
55
- assert(
56
- params.boreDiameter < params.outerDiameter,
57
- "The bore must be smaller than the outside diameter.",
58
- { parameterId: "boreDiameter" }
59
- );
49
+ assert(params.boreDiameter < params.outerDiameter, "The bore must fit inside the sleeve.", {
50
+ parameterId: "boreDiameter",
51
+ });
60
52
  return part(
61
53
  "body",
62
54
  tube({
@@ -68,55 +60,99 @@ export default defineGeneratorModel(definition, ({ params, assert, part }) => {
68
60
  });
69
61
  ```
70
62
 
71
- Return a single `part(...)` or a readonly array of parts. The host normalizes parameters and prepares
72
- assets before generation. Modeling manages geometry, sessions, and snapshots; the SDK provides
73
- portable definitions, module envelopes, and validated runtime messages. Unsupported package formats
74
- reject before executable bytes are evaluated.
63
+ `defineGeneratorModel` binds the definition to the model and infers its parameters and services.
64
+ If you already have a program, use `defineGeneratorModule({ definition, program })`. The resulting
65
+ runtime is a Modeling program that an engine or model test can execute directly.
66
+ Add named starting configurations with `definePresets(definition, presets)`; each preset supplies
67
+ a complete parameter map.
68
+
69
+ Definitions and presets contain serializable data, without callbacks. Hosts normalize parameters,
70
+ prepare assets, and execute the model. They also own forms, viewing, persistence, and export.
71
+ Generator modules use format 5, which carries the callback and identity in one object;
72
+ nested format-4 runtimes are unsupported.
73
+
74
+ ## Generator capabilities
75
75
 
76
- The optional `/modeling` adapter imports Modeling's program helper; other SDK entry points remain
77
- independent of its runtime. Use `defineGeneratorModule` when binding an existing model program.
76
+ | Area | Capabilities |
77
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------- |
78
+ | Parameter values | Numbers, booleans, choices and choice sets, text, colors, arrays, fonts, SVG, side profiles, and cross-sections. |
79
+ | Editing metadata | Labels, units, groups, descriptions, inline hints, sliders, paired controls, and conditional visibility. |
80
+ | Parameters and presets | Inferred TypeScript types, defaults, recovering normalization, strict codecs, and complete serializable presets. |
81
+ | Host integration | Validated package manifests, module execution, Worker messages, and incremental mesh delivery. |
78
82
 
79
- ## Work with saved values
83
+ Conditional visibility changes which controls appear. Hidden values remain saved and still
84
+ require validation. Put constraints between parameters in the model's assertions.
80
85
 
81
- Use `normalizeParameters` from `/parameters` to recover saved values: it drops unknown keys,
82
- restores missing or invalid values from defaults, and clamps numbers. At a trust boundary, use
83
- `createParamCodec(definition)` to reject incomplete, unknown, invalid, or noncanonical values.
84
- Both return fresh frozen parameter maps.
86
+ ## Validate definitions and values
85
87
 
86
- For definition editors, `/packages` provides `safeParseParameterDefinitionDocument` and structured
87
- issue paths. The included `@metamesh/generator-sdk/parameters.schema.json` supports offline
88
- completion; SDK validation also checks references, defaults, and cross-field rules.
88
+ `defineGenerator` checks the definition as soon as you declare it. `definePresets` checks preset
89
+ metadata and complete canonical values. Invalid declarations throw
90
+ `GeneratorPackageValidationError`. These helpers retain the supplied object or array and its
91
+ inferred literal types; they don't execute geometry or model assertions.
92
+
93
+ Inline parameter, editor, choice, and preset objects receive TypeScript excess-property checks.
94
+ Runtime validation also catches extra fields that structural typing can hide in variables or
95
+ generic factories.
96
+
97
+ Use `normalizeParameters` to recover saved values: it drops unknown keys, restores defaults, and
98
+ clamps numbers. Use `createParamCodec(definition)` when inputs must already be complete and
99
+ canonical; it rejects missing or unknown fields and invalid values. The
100
+ [parameter guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
101
+ covers controls, conditions, and validation.
102
+
103
+ Use the codec's `parse()` to throw on invalid input, or `safeParse()` for a result you can check
104
+ without catching an exception. A failed parse reports issues without substitute parameters. Each `ParameterIssue` names
105
+ a control with `parameterId`; an optional `path` addresses a field within that control's value.
106
+ Hosts can pass these issues directly to `aggregateParameterIssues`.
107
+
108
+ ## Execute and deliver a model
109
+
110
+ `executeGenerator` always validates its single `parameters` map against the current definition.
111
+ Hosts can validate before loading assets, but execution still checks the supplied values.
112
+ Modeling hosts use `parseGeneratorModel(value, definition)` from `/modeling` to validate a loaded
113
+ module and infer its executable `GeneratorModel<typeof definition>` type. Pass the default export
114
+ itself for local entries that also export their definition; packaged namespaces contain only the
115
+ default export. Use `parseGeneratorModule` from `/runtime` when you don't need the Modeling adapter.
116
+ Invalid module envelopes throw `TypeError`; package validation reports MetaMesh issues and errors.
117
+
118
+ For Worker hosts, `/modeling` supplies `ModelDeliveryEncoder`; `/runtime` supplies `PartDeliveryDecoder`.
119
+ Transfers carry local buffers under `geometry`, with placement beside them. Decode resource
120
+ references before application use or export. Receiving hosts own the buffers and keep them immutable
121
+ and attached.
122
+
123
+ Model statistics use `signedVolume` in mm³. `generateMs` measures the engine run;
124
+ `timings.totalMs` covers the host workflow, including stages outside the engine. Hosts report only
125
+ the timing stages they measure, using `paramsMs` for parameter processing and `finalizeMs` for
126
+ finalization. `byteCount` counts finalized world-space position and index buffer bytes, counting
127
+ shared buffers once; it doesn't measure the local buffers transferred by a Worker.
89
128
 
90
129
  ## API entry points
91
130
 
92
- | Import | Use it for |
93
- | ------------------------------------ | ------------------------------------------------ |
94
- | `@metamesh/generator-sdk` | Definitions, presets, and module authoring |
95
- | `@metamesh/generator-sdk/parameters` | Defaults, saved values, and strict codecs |
96
- | `@metamesh/generator-sdk/runtime` | Module execution, mesh data, and Worker messages |
97
- | `@metamesh/generator-sdk/packages` | Package, catalog, and installation parsing |
98
- | `@metamesh/generator-sdk/fonts` | Immutable font selection values |
99
- | `@metamesh/generator-sdk/modeling` | Definition-inferred Modeling programs |
131
+ | Import | Responsibility |
132
+ | ------------------------------------ | ------------------------------------------------------------------- |
133
+ | `@metamesh/generator-sdk` | Definitions, presets, inferred types, and module authoring. |
134
+ | `@metamesh/generator-sdk/modeling` | Definition-inferred Modeling programs. |
135
+ | `@metamesh/generator-sdk/parameters` | Defaults, saved values, normalization, and strict codecs. |
136
+ | `@metamesh/generator-sdk/runtime` | Execution, generated geometry, and Worker protocols. |
137
+ | `@metamesh/generator-sdk/packages` | Package, catalog, installation, and definition-document validation. |
138
+ | `@metamesh/generator-sdk/fonts` | Immutable font selection values. |
100
139
 
101
- Incremental Worker hosts can use `GeneratedPartsDecoder` from `/runtime` to hydrate validated
102
- geometry resources while checking part metadata and aggregate limits on every delivery. Keep
103
- admitted buffers immutable and attached; call `clear()` when replacing the delivery source.
140
+ `@metamesh/generator-sdk/parameters.schema.json` supports offline definition editing. The SDK
141
+ validates references, defaults, and cross-field rules in addition to the structural schema.
104
142
 
105
143
  ## Documentation
106
144
 
107
- Resolve `@metamesh/generator-sdk/docs/manifest.json` from your project for exact-version Markdown
108
- guides and annotated declaration references. Document paths are relative to that manifest.
109
- With [`@metamesh/cli`](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md)
110
- installed, `pnpm exec metamesh docs search "parameters"` searches the local index;
111
- `pnpm exec metamesh docs show sdk/guide/generator-modules` reads this package's authoring guide.
145
+ Resolve `@metamesh/generator-sdk/docs/manifest.json` for exact-version Markdown guides and annotated
146
+ API references. With [CLI](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md) installed:
112
147
 
113
- - [Parameters and validation](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx) — controls, defaults, and diagnostics.
114
- - [Local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx) — the current Generator workflow.
115
- - [API source](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/index.ts) — exports, types, and implementation references.
148
+ ```bash
149
+ pnpm exec metamesh docs search "parameters"
150
+ pnpm exec metamesh docs show sdk/guide/generator-modules
151
+ ```
116
152
 
117
- Until the public documentation site launches, use these repository guides or
118
- [run the docs locally](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/README.md#local-use).
119
- For package development, see [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md).
153
+ See [local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx)
154
+ for the complete workflow and [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md)
155
+ for package development.
120
156
 
121
157
  ## License
122
158
 
@@ -2,16 +2,16 @@
2
2
 
3
3
  Define typed controls, editable profiles, conditional visibility, and validation for an authored Studio Project.
4
4
 
5
- Define controls so readers can adjust a model without editing its source. Studio stores the
6
- definition as JSON-safe Project data, infers `params` through `generate`, and runs cross-field
7
- validation in `model.ts`.
5
+ Give someone a useful set of controls, and they can adjust your model without editing its source.
6
+ Studio saves the definition as JSON-safe Project data and infers the type of `params` through
7
+ `generate`. You check relationships between controls in `model.ts`.
8
8
 
9
9
  The JSON document contains required `groups` and `parameters` arrays. A parameter's `type`,
10
10
  default, units, bounds, and choices describe its value. Its optional `ui` object describes
11
11
  presentation: group, shared row, hint, visibility, editing increment, and physical editor bindings.
12
12
  Number and Slider both use `type: "number"`; a Slider also declares `ui.control: "slider"`.
13
13
  Options use `type: "choice"`, Side profile uses `type: "side-profile"`, and a closed outline uses
14
- `type: "contour"`. Changing a numeric widget does not change its saved value or valid range.
14
+ `type: "contour"`. Switching between Number and Slider doesn't change the saved value or valid range.
15
15
 
16
16
  JSON editing offers field completion, help, and inline validation, including references to declared
17
17
  groups, parameters, and choice values. Fix or discard invalid JSON before applying it or returning
@@ -23,19 +23,19 @@ also checks rules that JSON Schema cannot express.
23
23
  In an authored Project, open the parameter panel's **Parameter actions** menu and choose
24
24
  **Edit controls**. The same action is available in the **MetaMesh menu → Current project** group.
25
25
  The Model controls editor's **Visual** and **JSON** views edit the same draft. Choose
26
- **Apply & return** to commit it and return to the model.
26
+ **Apply & return** to save the definition and return to the model.
27
27
 
28
28
  1. Add a section for one coherent decision, such as **Size** or **Outputs**.
29
29
  2. Add a control, give it a stable ID, a plain-language label, and a useful default.
30
- 3. Add units and field limits where they carry real meaning.
30
+ 3. Add units and limits that reflect what the model supports.
31
31
  4. Try the selected control in its preview, then apply the draft and check the generated
32
32
  `params` completion in `model.ts`.
33
33
 
34
34
  Preview values are temporary; they do not change the default or the Project's current values.
35
35
 
36
36
  Use labels to name the decision and descriptions for more detail. Defaults should produce a useful
37
- model immediately. Use minimum and maximum values for supported field ranges and cross-field
38
- rules for constraints between controls.
37
+ model immediately. Set minimum and maximum values for each field's supported range, then check
38
+ relationships between controls in your source.
39
39
 
40
40
  ## Separate help from essential instructions
41
41
 
@@ -48,7 +48,7 @@ label is enough. Hints are static and appear whenever the control is visible; pu
48
48
  multiple modes in `description`. Errors, warnings, and reasons a control is unavailable stay visible.
49
49
 
50
50
  In **Visual**, edit **Hint (optional)** as ordinary text. **Visual**, **JSON**, and the live preview
51
- use the same string field. Clearing it omits the hint when applying the definition. For example,
51
+ use the same string field. Clear it to remove the hint when you apply the definition. For example,
52
52
  a socket-only Diameter control can include:
53
53
 
54
54
  ```json
@@ -84,10 +84,10 @@ A Slider requires `min`, `max`, and a positive `ui.step`. Multiple choice can li
84
84
  selections. Lists can limit their item count; number-list items can also declare units, limits,
85
85
  and `items.ui.step`.
86
86
 
87
- A Font value is a structured selection, not a family-name string. Pass the whole value in
88
- `services.text.layout(text, { font, fontSize })` inside generation, then pass its layout to
87
+ A Font value contains the selected face and weight. Pass the whole value, rather than a family-name
88
+ string, in `services.text.layout(text, { font, fontSize })` inside generation, then pass its layout to
89
89
  `textSection(layout)`. Studio loads declared fonts before generation. See the
90
- [text recipe](https://metamesh.studio/docs/develop/geometry-recipes#text-from-a-font-parameter) for the setup and offline
90
+ [text recipe](https://metamesh.studio/docs/develop/svg-and-text#text-from-a-font-parameter) for the setup and offline
91
91
  limits.
92
92
 
93
93
  ## Show controls side by side
@@ -138,8 +138,8 @@ Add a **Side profile** control when the model needs an outer silhouette. Its **E
138
138
  opens guided points with automatic smoothing, Bézier handles, straight/curved segments,
139
139
  and numeric editing. Select a segment directly; double-click it to insert a point at that location.
140
140
  Choosing **Curve** reveals handles while retaining the existing shape until a handle moves.
141
- The Model controls editor uses the same editor for the default outline.
142
- **Apply profile** changes only the draft being edited; choose **Apply & return** to commit the
141
+ You'll use the same editor to set the default outline in Model controls.
142
+ **Apply profile** changes only the draft being edited; choose **Apply & return** to save the
143
143
  control definition.
144
144
 
145
145
  The value on `params` is a readonly `SideProfileValue`, with a start anchor and line or cubic
@@ -189,8 +189,8 @@ In **Physical dimensions (optional)**, link the radius and height to existing Nu
189
189
  controls with unit `mm`, a positive default, and a positive minimum. A radius factor of `0.5` uses
190
190
  half a diameter control. The corresponding JSON fields are `ui.radiusScale` and `ui.heightScale`, each
191
191
  with `parameterId` and a positive `factor`. These bindings set editor measurements; your source
192
- still applies the same physical scales when modeling. The envelope describes the available size:
193
- an outline reaching half the radius envelope produces half its diameter. The editor also shows
192
+ still applies the same physical scales when modeling. They describe the available size:
193
+ an outline reaching half the available radius produces half the diameter. The editor also shows
194
194
  the actual maximum diameter.
195
195
 
196
196
  Use [`sampleSideProfile()`](https://metamesh.studio/docs/reference/geometry/sampleSideProfile) to convert
@@ -269,21 +269,21 @@ with a `parameterId` and positive `factor`, such as `{ "parameterId": "width", "
269
269
  Bindings describe the coordinate envelope; they never rescale the saved value. Without them,
270
270
  the editor displays percentages.
271
271
 
272
- Inside generation or a computed value, pass `params.crossSection` to
272
+ Inside generation or a memo helper, pass `params.crossSection` to
273
273
  [`sampleContour()`](https://metamesh.studio/docs/reference/geometry/sampleContour) with physical `widthScale`,
274
274
  `heightScale`, and a millimetre resolution policy. It returns an immutable counterclockwise
275
275
  XY `Contour` without a duplicated seam, rejecting invalid sampled topology and exhausted budgets.
276
276
  Reuse that contour in generation, create a filled Section with
277
277
  [`polygon(contour)`](https://metamesh.studio/docs/reference/model/polygon), and use
278
278
  [`section.extrude()`](https://metamesh.studio/docs/reference/model/Section#extrude) or [`section.sweep()`](https://metamesh.studio/docs/reference/model/Section#sweep) for the solid.
279
- The Generator owns extrusion depth, the sweep path, fit, walls, and manufacturing rules.
280
- Data validation checks the bounded structure and closure; it does not establish those geometric
279
+ Your Generator decides extrusion depth, the sweep path, fit, walls, and manufacturing rules.
280
+ Data validation checks the bounded structure and closure; it doesn't establish those geometric
281
281
  requirements. This control contains one contour without holes or multiple loops.
282
282
 
283
283
  Side-profile and cross-section edits stay local until **Apply**. Workspace editors check the
284
- current draft with Generator declaration and reached assertions before applying it; errors block Apply and warnings
285
- remain visible. Failed checks offer **Retry draft check**. Editing a control default changes its
286
- definition draft, so check the current model after **Apply & return**.
284
+ current draft by running the Generator declaration and any assertions it reaches; errors block Apply
285
+ and warnings remain visible. Failed checks offer **Retry draft check**. Editing a control default
286
+ changes its definition draft, so check the current model after **Apply & return**.
287
287
 
288
288
  <a id="expose-curve-resolution-in-the-viewport"></a>
289
289
 
@@ -352,13 +352,13 @@ reference Font, Side profile, Cross section, Number List, or Text List values.
352
352
  The JSON root accepts only `groups` and `parameters`. Project identity, title, and version are
353
353
  managed separately by Studio.
354
354
 
355
- Visibility is presentation, not data deletion. Source still receives the control's normalized value.
356
- Generation decides whether it matters in the current mode; assertions and geometry follow that choice.
355
+ Hiding a control keeps its saved value, and source still receives the normalized value. Your
356
+ generation code decides whether to use it in the current mode, including in assertions and geometry.
357
357
 
358
358
  ## Add cross-field validation in TypeScript
359
359
 
360
- The generation callback receives normalized readonly parameters. Put a cheap assertion before
361
- geometry when a combination cannot produce a supported model:
360
+ The generation callback receives normalized readonly parameters. If a combination can't produce a
361
+ supported model, put a cheap assertion before geometry to stop the work early:
362
362
 
363
363
 
364
364
 
@@ -382,10 +382,10 @@ than your model's recommended minimum. A zero wall stops generation; a 0.5 mm wa
382
382
  with a warning. Choose that minimum for the model and manufacturing process. A failed edit leaves
383
383
  the last valid preview and its export available. Warnings allow a current model to generate and export.
384
384
 
385
- Checks follow JavaScript order: reading a computed value evaluates it when needed, and observing
385
+ Checks follow JavaScript order: `memo` calls run their helper on a cache miss, and measuring
386
386
  geometry evaluates its input first. Draft validation checks declarations and reached assertions
387
- without finalizing parts; it does not prove full geometric validity. Use optional `computed`
388
- values to reuse expensive layouts or shared calculations across unrelated edits. There is no
387
+ without finalizing parts; it doesn't prove full geometric validity. Use optional `memo`
388
+ calls to reuse expensive layouts or shared calculations across unrelated edits. There is no
389
389
  separate preparation callback.
390
390
 
391
391
  ## Test the definition as a contract
@@ -404,9 +404,9 @@ Before relying on a Project, check:
404
404
  - resetting controls returns to the documented defaults.
405
405
 
406
406
  The Model controls editor checks the definition when you apply it and keeps invalid drafts open
407
- with errors to correct. After **Apply & return**, Studio uses the updated definition for controls,
408
- normalization, persistence, and the typed generation context. It then validates the current values
409
- with `model.ts`; check the workspace for source or cross-field errors before exporting.
407
+ so you can fix the errors. After **Apply & return**, Studio uses the updated definition to build
408
+ controls, normalize and save values, and type the generation context. It then validates the current
409
+ values with `model.ts`; check the workspace for source or cross-field errors before exporting.
410
410
 
411
411
 
412
412