@metamesh/generator-sdk 0.17.0 → 0.18.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 (398) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/README.md +96 -69
  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 +96 -69
  9. package/dist/docs/guides/parameters.md +29 -29
  10. package/dist/docs/manifest.json +173 -201
  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/modeling/toWorldMeshes.md +10 -0
  89. package/dist/docs/reference/packages/GENERATOR_PACKAGE_FORMAT_VERSION.md +2 -2
  90. package/dist/docs/reference/packages/GeneratorAccess.md +1 -1
  91. package/dist/docs/reference/packages/GeneratorDefinitionIssue.md +1 -1
  92. package/dist/docs/reference/packages/GeneratorDefinitionParseResult.md +1 -1
  93. package/dist/docs/reference/packages/GeneratorDescriptor.md +1 -1
  94. package/dist/docs/reference/packages/GeneratorPackageManifest.md +1 -1
  95. package/dist/docs/reference/packages/GeneratorPackageSource.md +1 -1
  96. package/dist/docs/reference/packages/GeneratorPackageValidationError.md +1 -1
  97. package/dist/docs/reference/packages/GeneratorPreset.md +1 -1
  98. package/dist/docs/reference/packages/GeneratorRuntimeReference.md +1 -1
  99. package/dist/docs/reference/packages/InstalledGenerator.md +1 -1
  100. package/dist/docs/reference/packages/MAX_ARRAY_ITEMS.md +1 -1
  101. package/dist/docs/reference/packages/MAX_CONDITION_BRANCHES.md +1 -1
  102. package/dist/docs/reference/packages/MAX_CONDITION_DEPTH.md +1 -1
  103. package/dist/docs/reference/packages/MAX_DESCRIPTOR_LIST_ITEMS.md +1 -1
  104. package/dist/docs/reference/packages/MAX_GENERATOR_ID_LENGTH.md +2 -2
  105. package/dist/docs/reference/packages/MAX_GENERATOR_PACKAGE_BYTES.md +1 -1
  106. package/dist/docs/reference/packages/MAX_GENERATOR_PRESETS.md +1 -1
  107. package/dist/docs/reference/packages/MAX_METADATA_TEXT_LENGTH.md +2 -2
  108. package/dist/docs/reference/packages/MAX_PARAMETERS.md +1 -1
  109. package/dist/docs/reference/packages/MAX_PARAMETER_GROUPS.md +1 -1
  110. package/dist/docs/reference/packages/MAX_PARAMETER_OPTIONS.md +1 -1
  111. package/dist/docs/reference/packages/MAX_TEXT_PARAMETER_LENGTH.md +2 -2
  112. package/dist/docs/reference/packages/METAMESH_RUNTIME_VERSION.md +2 -2
  113. package/dist/docs/reference/packages/compareSemanticVersions.md +1 -1
  114. package/dist/docs/reference/packages/isRuntimeCompatible.md +1 -1
  115. package/dist/docs/reference/packages/parseGeneratorDefinition.md +1 -1
  116. package/dist/docs/reference/packages/parseGeneratorDescriptor.md +1 -1
  117. package/dist/docs/reference/packages/parseGeneratorPackageManifest.md +1 -1
  118. package/dist/docs/reference/packages/parseParameterDefinitionDocument.md +1 -1
  119. package/dist/docs/reference/packages/safeParseGeneratorDefinition.md +1 -1
  120. package/dist/docs/reference/packages/safeParseParameterDefinitionDocument.md +1 -1
  121. package/dist/docs/reference/packages/validateGeneratorPresets.md +1 -1
  122. package/dist/docs/reference/parameters/EMPTY_SVG_PARAMETER_DEFAULT.md +1 -1
  123. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUES.md +1 -1
  124. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUE_MESSAGE_LENGTH.md +1 -1
  125. package/dist/docs/reference/parameters/MAX_PROJECT_SVG_PARAMETER_BYTES.md +1 -1
  126. package/dist/docs/reference/parameters/MAX_SVG_PARAMETER_BYTES.md +1 -1
  127. package/dist/docs/reference/parameters/ParamCodec.md +1 -1
  128. package/dist/docs/reference/parameters/ParamDecodeCode.md +1 -1
  129. package/dist/docs/reference/parameters/ParamDecodeError.md +1 -1
  130. package/dist/docs/reference/parameters/ParamDecodeIssue.md +3 -3
  131. package/dist/docs/reference/parameters/ParamParseResult.md +1 -1
  132. package/dist/docs/reference/parameters/aggregateParameterIssues.md +1 -1
  133. package/dist/docs/reference/parameters/createParamCodec.md +1 -1
  134. package/dist/docs/reference/parameters/getDefaultParameters.md +1 -1
  135. package/dist/docs/reference/parameters/normalizeParameters.md +1 -1
  136. package/dist/docs/reference/parameters/parameterValueEquals.md +1 -1
  137. package/dist/docs/reference/parameters/parseParameterIssues.md +1 -1
  138. package/dist/docs/reference/parameters/svgParameterBytes.md +1 -1
  139. package/dist/docs/reference/runtime/ExecuteGeneratorOptions.md +2 -4
  140. package/dist/docs/reference/runtime/Export3mfRequest.md +2 -2
  141. package/dist/docs/reference/runtime/ExportError.md +1 -1
  142. package/dist/docs/reference/runtime/ExportSuccess.md +1 -1
  143. package/dist/docs/reference/runtime/ExportedFile.md +1 -1
  144. package/dist/docs/reference/runtime/GenerateRequest.md +1 -1
  145. package/dist/docs/reference/runtime/GenerationError.md +1 -1
  146. package/dist/docs/reference/runtime/GenerationInvalid.md +1 -1
  147. package/dist/docs/reference/runtime/GenerationSuccess.md +2 -2
  148. package/dist/docs/reference/runtime/GeneratorExecutionGenerated.md +1 -1
  149. package/dist/docs/reference/runtime/GeneratorExecutionInvalid.md +2 -3
  150. package/dist/docs/reference/runtime/GeneratorExecutionResult.md +2 -2
  151. package/dist/docs/reference/runtime/MeshResourceData.md +19 -0
  152. package/dist/docs/reference/runtime/MeshTopologyMode.md +1 -1
  153. package/dist/docs/reference/runtime/ModelBounds.md +1 -1
  154. package/dist/docs/reference/runtime/ModelData.md +17 -0
  155. package/dist/docs/reference/runtime/ModelDelivery.md +12 -0
  156. package/dist/docs/reference/runtime/ModelPartData.md +35 -0
  157. package/dist/docs/reference/runtime/ModelStats.md +6 -4
  158. package/dist/docs/reference/runtime/ModelTimings.md +10 -9
  159. package/dist/docs/reference/runtime/ParsedGeneratorModule.md +1 -1
  160. package/dist/docs/reference/runtime/PartDelivery.md +15 -0
  161. package/dist/docs/reference/runtime/{GeneratedPartsDecoder.md → PartDeliveryDecoder.md} +5 -5
  162. package/dist/docs/reference/runtime/{GeneratedPartsLimits.md → PartDeliveryLimits.md} +3 -3
  163. package/dist/docs/reference/runtime/RuntimeError.md +1 -1
  164. package/dist/docs/reference/runtime/ValidateRequest.md +1 -1
  165. package/dist/docs/reference/runtime/ValidationError.md +1 -1
  166. package/dist/docs/reference/runtime/ValidationSuccess.md +1 -1
  167. package/dist/docs/reference/runtime/WorkerRequest.md +1 -1
  168. package/dist/docs/reference/runtime/WorkerResponse.md +1 -1
  169. package/dist/docs/reference/runtime/canonicalizeParameters.md +10 -0
  170. package/dist/docs/reference/runtime/executeGenerator.md +3 -3
  171. package/dist/docs/reference/runtime/generationIssues.md +1 -1
  172. package/dist/docs/reference/runtime/parseGenerationSentAt.md +1 -1
  173. package/dist/docs/reference/runtime/parseGeneratorModule.md +3 -3
  174. package/dist/docs/reference/runtime/{parseGeneratedParts.md → parseModelParts.md} +3 -3
  175. package/dist/generator-module.d.ts +11 -8
  176. package/dist/generator-module.d.ts.map +1 -1
  177. package/dist/generator-module.js +3 -2
  178. package/dist/generator-module.js.map +1 -1
  179. package/dist/generator-package/constants.d.ts +3 -11
  180. package/dist/generator-package/constants.d.ts.map +1 -1
  181. package/dist/generator-package/constants.js +4 -12
  182. package/dist/generator-package/constants.js.map +1 -1
  183. package/dist/generator-package/contracts.d.ts +15 -0
  184. package/dist/generator-package/contracts.d.ts.map +1 -0
  185. package/dist/generator-package/contracts.js.map +1 -0
  186. package/dist/generator-package/index.d.ts +10 -30
  187. package/dist/generator-package/index.d.ts.map +1 -1
  188. package/dist/generator-package/index.js +7 -85
  189. package/dist/generator-package/index.js.map +1 -1
  190. package/dist/generator-package/parse-package.d.ts +5 -0
  191. package/dist/generator-package/parse-package.d.ts.map +1 -0
  192. package/dist/generator-package/parse-package.js +38 -0
  193. package/dist/generator-package/parse-package.js.map +1 -0
  194. package/dist/generator-package/schemas/descriptor.schema.d.ts +2 -2
  195. package/dist/generator-package/schemas/descriptor.schema.d.ts.map +1 -1
  196. package/dist/generator-package/schemas/descriptor.schema.js +2 -2
  197. package/dist/generator-package/schemas/descriptor.schema.js.map +1 -1
  198. package/dist/generator-package/schemas/manifest.schema.d.ts +16 -16
  199. package/dist/generator-package/schemas/manifest.schema.d.ts.map +1 -1
  200. package/dist/generator-package/schemas/manifest.schema.js +4 -4
  201. package/dist/generator-package/schemas/manifest.schema.js.map +1 -1
  202. package/dist/generator-package/validate-manifest.d.ts +2 -2
  203. package/dist/generator-package/validate-manifest.d.ts.map +1 -1
  204. package/dist/generator-package/validate-manifest.js +15 -20
  205. package/dist/generator-package/validate-manifest.js.map +1 -1
  206. package/dist/generator-package/versions.js +2 -2
  207. package/dist/generator-package/versions.js.map +1 -1
  208. package/dist/generator-package/versions.spec.js +5 -5
  209. package/dist/generator-package/versions.spec.js.map +1 -1
  210. package/dist/index.d.ts +8 -7
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +3 -3
  213. package/dist/index.js.map +1 -1
  214. package/dist/metadata-limits.d.ts +5 -0
  215. package/dist/metadata-limits.d.ts.map +1 -0
  216. package/dist/metadata-limits.js +5 -0
  217. package/dist/metadata-limits.js.map +1 -0
  218. package/dist/modeling-delivery.d.ts +20 -0
  219. package/dist/modeling-delivery.d.ts.map +1 -0
  220. package/dist/modeling-delivery.js +54 -0
  221. package/dist/modeling-delivery.js.map +1 -0
  222. package/dist/modeling.d.ts +13 -2
  223. package/dist/modeling.d.ts.map +1 -1
  224. package/dist/modeling.js +12 -1
  225. package/dist/modeling.js.map +1 -1
  226. package/dist/parameters/conditions.d.ts.map +1 -0
  227. package/dist/parameters/conditions.js.map +1 -0
  228. package/dist/parameters/contours.d.ts.map +1 -0
  229. package/dist/parameters/contours.js.map +1 -0
  230. package/dist/parameters/contracts.d.ts +69 -0
  231. package/dist/parameters/contracts.d.ts.map +1 -0
  232. package/dist/parameters/contracts.js +2 -0
  233. package/dist/{contracts.js.map → parameters/contracts.js.map} +1 -1
  234. package/dist/parameters/curve-data.d.ts.map +1 -0
  235. package/dist/parameters/curve-data.js.map +1 -0
  236. package/dist/{parameter-contracts.d.ts → parameters/definitions.d.ts} +2 -2
  237. package/dist/parameters/definitions.d.ts.map +1 -0
  238. package/dist/parameters/definitions.js +2 -0
  239. package/dist/parameters/definitions.js.map +1 -0
  240. package/dist/parameters/issues.d.ts +2 -1
  241. package/dist/parameters/issues.d.ts.map +1 -1
  242. package/dist/parameters/issues.js +4 -3
  243. package/dist/parameters/issues.js.map +1 -1
  244. package/dist/parameters/limits.d.ts +9 -0
  245. package/dist/parameters/limits.d.ts.map +1 -0
  246. package/dist/parameters/limits.js +9 -0
  247. package/dist/parameters/limits.js.map +1 -0
  248. package/dist/parameters/recovery.d.ts +2 -1
  249. package/dist/parameters/recovery.d.ts.map +1 -1
  250. package/dist/parameters/recovery.js +4 -3
  251. package/dist/parameters/recovery.js.map +1 -1
  252. package/dist/parameters/side-profiles.d.ts.map +1 -0
  253. package/dist/parameters/side-profiles.js.map +1 -0
  254. package/dist/parameters/strict.d.ts +4 -3
  255. package/dist/parameters/strict.d.ts.map +1 -1
  256. package/dist/parameters/strict.js +11 -7
  257. package/dist/parameters/strict.js.map +1 -1
  258. package/dist/parameters/values.d.ts +1 -1
  259. package/dist/parameters/values.d.ts.map +1 -1
  260. package/dist/parameters/values.js +2 -2
  261. package/dist/parameters/values.js.map +1 -1
  262. package/dist/parameters.d.ts +0 -2
  263. package/dist/parameters.d.ts.map +1 -1
  264. package/dist/parameters.js +0 -1
  265. package/dist/parameters.js.map +1 -1
  266. package/dist/runtime/execute-generator.d.ts +6 -9
  267. package/dist/runtime/execute-generator.d.ts.map +1 -1
  268. package/dist/runtime/execute-generator.js +11 -11
  269. package/dist/runtime/execute-generator.js.map +1 -1
  270. package/dist/runtime/model-contracts.d.ts +103 -0
  271. package/dist/runtime/model-contracts.d.ts.map +1 -0
  272. package/dist/runtime/model-contracts.js +2 -0
  273. package/dist/runtime/model-contracts.js.map +1 -0
  274. package/dist/runtime/parameter-identities.d.ts +4 -0
  275. package/dist/runtime/parameter-identities.d.ts.map +1 -0
  276. package/dist/runtime/parameter-identities.js +11 -0
  277. package/dist/runtime/parameter-identities.js.map +1 -0
  278. package/dist/runtime/parse-generator-module.d.ts +2 -3
  279. package/dist/runtime/parse-generator-module.d.ts.map +1 -1
  280. package/dist/runtime/parse-generator-module.js +7 -19
  281. package/dist/runtime/parse-generator-module.js.map +1 -1
  282. package/dist/runtime/{generated-parts.d.ts → part-delivery.d.ts} +11 -7
  283. package/dist/runtime/part-delivery.d.ts.map +1 -0
  284. package/dist/runtime/{generated-parts.js → part-delivery.js} +69 -44
  285. package/dist/runtime/part-delivery.js.map +1 -0
  286. package/dist/runtime/worker-contracts.d.ts +4 -3
  287. package/dist/runtime/worker-contracts.d.ts.map +1 -1
  288. package/dist/runtime/worker-contracts.js.map +1 -1
  289. package/dist/runtime.d.ts +6 -4
  290. package/dist/runtime.d.ts.map +1 -1
  291. package/dist/runtime.js +3 -2
  292. package/dist/runtime.js.map +1 -1
  293. package/dist/{generator-package → validation}/errors.d.ts +1 -1
  294. package/dist/validation/errors.d.ts.map +1 -0
  295. package/dist/validation/errors.js.map +1 -0
  296. package/dist/validation/parse-definition.d.ts +9 -0
  297. package/dist/validation/parse-definition.d.ts.map +1 -0
  298. package/dist/validation/parse-definition.js +49 -0
  299. package/dist/validation/parse-definition.js.map +1 -0
  300. package/dist/validation/portable-data.d.ts.map +1 -0
  301. package/dist/validation/portable-data.js.map +1 -0
  302. package/dist/{generator-package → validation}/schemas/common.schema.d.ts +1 -1
  303. package/dist/validation/schemas/common.schema.d.ts.map +1 -0
  304. package/dist/{generator-package → validation}/schemas/common.schema.js +3 -2
  305. package/dist/validation/schemas/common.schema.js.map +1 -0
  306. package/dist/{generator-package → validation}/schemas/condition.schema.d.ts +2 -2
  307. package/dist/validation/schemas/condition.schema.d.ts.map +1 -0
  308. package/dist/{generator-package → validation}/schemas/condition.schema.js +2 -2
  309. package/dist/validation/schemas/condition.schema.js.map +1 -0
  310. package/dist/{generator-package → validation}/schemas/definition.schema.d.ts +23 -23
  311. package/dist/validation/schemas/definition.schema.d.ts.map +1 -0
  312. package/dist/{generator-package → validation}/schemas/definition.schema.js +2 -2
  313. package/dist/validation/schemas/definition.schema.js.map +1 -0
  314. package/dist/{generator-package → validation}/schemas/parameter-document-json-schema.d.ts +1 -1
  315. package/dist/validation/schemas/parameter-document-json-schema.d.ts.map +1 -0
  316. package/dist/{generator-package → validation}/schemas/parameter-document-json-schema.js +1 -1
  317. package/dist/validation/schemas/parameter-document-json-schema.js.map +1 -0
  318. package/dist/{generator-package → validation}/schemas/parameter.schema.d.ts +12 -12
  319. package/dist/validation/schemas/parameter.schema.d.ts.map +1 -0
  320. package/dist/{generator-package → validation}/schemas/parameter.schema.js +4 -4
  321. package/dist/validation/schemas/parameter.schema.js.map +1 -0
  322. package/dist/validation/schemas/preset.schema.d.ts +5 -0
  323. package/dist/validation/schemas/preset.schema.d.ts.map +1 -0
  324. package/dist/{generator-package → validation}/schemas/preset.schema.js +4 -4
  325. package/dist/validation/schemas/preset.schema.js.map +1 -0
  326. package/dist/{generator-package → validation}/validate-definition.d.ts +1 -1
  327. package/dist/validation/validate-definition.d.ts.map +1 -0
  328. package/dist/{generator-package → validation}/validate-definition.js +2 -2
  329. package/dist/validation/validate-definition.js.map +1 -0
  330. package/dist/validation/version-format.d.ts.map +1 -0
  331. package/dist/validation/version-format.js.map +1 -0
  332. package/package.json +6 -3
  333. package/dist/conditions.d.ts.map +0 -1
  334. package/dist/conditions.js.map +0 -1
  335. package/dist/contours.d.ts.map +0 -1
  336. package/dist/contours.js.map +0 -1
  337. package/dist/contracts.d.ts +0 -139
  338. package/dist/contracts.d.ts.map +0 -1
  339. package/dist/curve-data.d.ts.map +0 -1
  340. package/dist/curve-data.js.map +0 -1
  341. package/dist/docs/reference/packages/definitionIssuesFromZod.md +0 -10
  342. package/dist/docs/reference/packages/validationErrorFromIssues.md +0 -9
  343. package/dist/docs/reference/packages/validationErrorFromZod.md +0 -9
  344. package/dist/docs/reference/parameters/PreparedParameters.md +0 -12
  345. package/dist/docs/reference/parameters/canonicalizeParameters.md +0 -10
  346. package/dist/docs/reference/parameters/prepareParameters.md +0 -13
  347. package/dist/docs/reference/parameters/validateParameters.md +0 -10
  348. package/dist/docs/reference/runtime/GeneratedModel.md +0 -17
  349. package/dist/docs/reference/runtime/GeneratedModelDelivery.md +0 -12
  350. package/dist/docs/reference/runtime/GeneratedPart.md +0 -20
  351. package/dist/docs/reference/runtime/GeneratedPartDelivery.md +0 -13
  352. package/dist/docs/reference/runtime/isGeneratorModule.md +0 -9
  353. package/dist/generator-package/errors.d.ts.map +0 -1
  354. package/dist/generator-package/errors.js.map +0 -1
  355. package/dist/generator-package/portable-data.d.ts.map +0 -1
  356. package/dist/generator-package/portable-data.js.map +0 -1
  357. package/dist/generator-package/schemas/common.schema.d.ts.map +0 -1
  358. package/dist/generator-package/schemas/common.schema.js.map +0 -1
  359. package/dist/generator-package/schemas/condition.schema.d.ts.map +0 -1
  360. package/dist/generator-package/schemas/condition.schema.js.map +0 -1
  361. package/dist/generator-package/schemas/definition.schema.d.ts.map +0 -1
  362. package/dist/generator-package/schemas/definition.schema.js.map +0 -1
  363. package/dist/generator-package/schemas/parameter-document-json-schema.d.ts.map +0 -1
  364. package/dist/generator-package/schemas/parameter-document-json-schema.js.map +0 -1
  365. package/dist/generator-package/schemas/parameter.schema.d.ts.map +0 -1
  366. package/dist/generator-package/schemas/parameter.schema.js.map +0 -1
  367. package/dist/generator-package/schemas/preset.schema.d.ts +0 -5
  368. package/dist/generator-package/schemas/preset.schema.d.ts.map +0 -1
  369. package/dist/generator-package/schemas/preset.schema.js.map +0 -1
  370. package/dist/generator-package/validate-definition.d.ts.map +0 -1
  371. package/dist/generator-package/validate-definition.js.map +0 -1
  372. package/dist/generator-package/version-format.d.ts.map +0 -1
  373. package/dist/generator-package/version-format.js.map +0 -1
  374. package/dist/parameter-contracts.d.ts.map +0 -1
  375. package/dist/parameter-contracts.js +0 -2
  376. package/dist/parameter-contracts.js.map +0 -1
  377. package/dist/parameters/preparation.d.ts +0 -15
  378. package/dist/parameters/preparation.d.ts.map +0 -1
  379. package/dist/parameters/preparation.js +0 -47
  380. package/dist/parameters/preparation.js.map +0 -1
  381. package/dist/runtime/generated-parts.d.ts.map +0 -1
  382. package/dist/runtime/generated-parts.js.map +0 -1
  383. package/dist/side-profiles.d.ts.map +0 -1
  384. package/dist/side-profiles.js.map +0 -1
  385. /package/dist/{contracts.js → generator-package/contracts.js} +0 -0
  386. /package/dist/{conditions.d.ts → parameters/conditions.d.ts} +0 -0
  387. /package/dist/{conditions.js → parameters/conditions.js} +0 -0
  388. /package/dist/{contours.d.ts → parameters/contours.d.ts} +0 -0
  389. /package/dist/{contours.js → parameters/contours.js} +0 -0
  390. /package/dist/{curve-data.d.ts → parameters/curve-data.d.ts} +0 -0
  391. /package/dist/{curve-data.js → parameters/curve-data.js} +0 -0
  392. /package/dist/{side-profiles.d.ts → parameters/side-profiles.d.ts} +0 -0
  393. /package/dist/{side-profiles.js → parameters/side-profiles.js} +0 -0
  394. /package/dist/{generator-package → validation}/errors.js +0 -0
  395. /package/dist/{generator-package → validation}/portable-data.d.ts +0 -0
  396. /package/dist/{generator-package → validation}/portable-data.js +0 -0
  397. /package/dist/{generator-package → validation}/version-format.d.ts +0 -0
  398. /package/dist/{generator-package → validation}/version-format.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,163 @@
1
1
  # @metamesh/generator-sdk
2
2
 
3
+ ## 0.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2eea694: Consolidate model authoring, execution, and testing around fluent shapes and durable immutable
8
+ results. Upgrade all four packages together; these Preview API changes have no compatibility
9
+ aliases. Rebuild compiled Generators for module format 5 and Modeling runtime major 11. Older
10
+ module formats and incompatible runtime versions are rejected before execution.
11
+
12
+ ### Modeling imports and operations
13
+
14
+ | Previous API | 0.18 API |
15
+ | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
16
+ | `body.subtract([cutter])` for a single operand | `body.subtract(cutter)`; fluent `union`, `intersect`, and `subtract` accept one shape or a readonly array |
17
+ | `compose(shapes)` | `union(shapes)` |
18
+ | Free shape inspection, emptiness, component, and anchor queries | `shape.inspect()`, `shape.isEmpty()`, `shape.components()`, and `shape.anchor(name)` |
19
+ | Free Solid distance/segment queries and splitting functions | `solid.distance(other)`, `solid.castSegment(...)`, `solid.split(cutter)`, and `solid.splitByPlane(plane)` |
20
+ | `solid.toTriangleMesh()` | `solid.toMesh()` |
21
+ | Named `mesh` import from `/geometry`, or standalone triangle-mesh functions | `import * as mesh from "@metamesh/modeling/geometry/mesh"` |
22
+ | Standalone `immutableMesh(...)` | `mesh.immutable(...)` |
23
+ | `helicalThreadRidgeMesh`, `helicalThreadSolidMesh`, and `preflightHelicalThreadSolidMesh` | `mesh.threadRidge`, `mesh.threadSolid`, and `mesh.preflightThreadSolid` |
24
+ | `HelicalThreadRidgeMeshOptions`, `HelicalThreadSolidMeshOptions`, and `HelicalThreadSolidMeshPreflight` | `ThreadRidgeOptions`, `ThreadSolidOptions`, and `ThreadSolidPreflight`, exported from the mesh module |
25
+ | Mesh `connectedComponentCount` | `shellCount`; native inspection `componentCount` still counts material components |
26
+ | Inspection extrema on the inspection result | Immutable `inspection.bounds.min` and `inspection.bounds.max` |
27
+ | `starContour(outerRadius, points, innerRadius, limits)` | `starContour({ outerRadius, innerRadius, points, limits })` |
28
+
29
+ Free `union(shapes)` and `intersect(shapes)` remain for collections of peers and reject empty
30
+ collections. Fluent Boolean methods with an empty array return the receiver.
31
+
32
+ Use `section.extrude(options)` in fluent modeling, `extrude(profile, options)` for generic
33
+ `Section | CorrespondingProfile` inputs, and `mesh.extrude(contour, options)` for pure triangle
34
+ buffers. The same fluent/generic distinction applies to revolution and sweeping. Pure extrusion
35
+ uses `ExtrudeMeshOptions` and rejects `ends`; use Section extrusion for native end treatments.
36
+ Construction, transforms, and splitting remain deferred recipes; observations and `toMesh()`
37
+ require active model execution.
38
+
39
+ Point-loop and arbitrary Section lofts default to direct correspondence when the method is
40
+ omitted; known primitive landmarks remain preserved. Dimension inputs accept fluent vectors.
41
+ Tube sizing accepts complete inner/outer radius or diameter pairs. Both star factories require
42
+ an explicit inner radius and support degree rotation; use `innerRadius: outerRadius / 2` to retain
43
+ the contour helper's former default.
44
+
45
+ Rod and internal-cutter `bevelBottom`, `bevelTop`, and `bevelSize` become `bevel`. The shared
46
+ `Bevel` contract accepts a nonnegative size, `"auto"`, or a readonly `[bottom, top]` pair; zero
47
+ disables an end and omission preserves factory defaults. Complete-thread mesh builders use the
48
+ same contract, with thread termination under `ends`. Nuts replace bevel selection, `chamferSize`,
49
+ and `flushBuildPlateBottom` with independent `innerBevel` and `outerBevel`. For a flat outside
50
+ bottom that retains its inner opening bevel, use `outerBevel: [0, "auto"]`. Nut preflight exposes
51
+ resolved inner/outer pairs and checks face walls pairwise; each end's reservation and automatic
52
+ sizing are resolved independently, including internal-cutter axial extension.
53
+
54
+ Primitive contours and their points are immutable and can be explicit `computed` dependencies.
55
+ Copy the outer array and any points before editing. Geometry errors are available from the
56
+ Modeling root; operation option/result types are exported beside their owning operations.
57
+ Topology analysis with `includeTopology: true`, finalized parts, and local geometry resources
58
+ include required `shellCount` and `edgeCount`. Bounds construction options describe inputs only;
59
+ existing fluent bounds remain accepted.
60
+
61
+ ### Part placement and result ownership
62
+
63
+ Replace `part(id, { geometry, position, rotation })` with
64
+ `part(id, { geometry, transform })`. The optional transform accepts a fluent `transform3()` value,
65
+ a row-major 16-number matrix, or a computed reader; omission means identity. Pattern and
66
+ attachment matrices pass directly to `part()`. Only rigid placement is supported: scale, shear,
67
+ reflection, perspective, and non-finite values are rejected. Geometry-only and geometry-or-options
68
+ union inputs remain accepted without casts.
69
+
70
+ Use `PartDeclaration` for authored parts. Replace `ModelSnapshot` / `FinalizedModel` with
71
+ `ModelResult`, and `SnapshotPart` / `FinalizedPart` with `ModelPart`. `engine.run()`, `session.run()`,
72
+ and Testkit's `runModel()` return durable immutable results. Dispose sessions and runners to release their
73
+ caches; completed results remain valid and need no disposal. `model.part(id)` returns a required
74
+ semantic part or throws with available IDs; `model.parts` preserves output order.
75
+
76
+ Finalized buffers expose stable, iterable `ImmutableBuffer` values. Use `.copy()` for mutable
77
+ storage. A `ModelPart`'s top-level positions and indices are already in world space; apply its
78
+ immutable `transform` only to the reusable local buffers under `geometry`. Worker deliveries also
79
+ nest local resources under `geometry`. Host integrations use `ModelDeliveryEncoder`,
80
+ `PartDeliveryDecoder`, and `toWorldMeshes` for owned transfer and manufacturing output.
81
+ Replace `engine.export3mf(...)` with standalone `export3mf(parts, options)` from `/engine`, which
82
+ accepts completed meshes with explicit resource limits, independently of engine initialization.
83
+
84
+ Statistics rename `volumeMm3` → `signedVolume`, `finalizationMs` → `finalizeMs`, and
85
+ `generationMs` → `generateMs`; `buildMs` measures declarations.
86
+ `ModelResult.stats.byteCount` means bytes occupied by finalized world-space position and index buffers,
87
+ counting shared buffers once. Worker statistics preserve engine `generateMs`; host elapsed time
88
+ is `timings.totalMs`, with `paramsMs` for parameter work. Other host timing stages are optional:
89
+ an omitted stage is unmeasured.
90
+
91
+ Model parameter roots must be object maps. Captured parameters and computed results expose
92
+ deeply readonly `ImmutableValue<T>` views; supported mutable caller input is still accepted and
93
+ recaptured on every revision, including mutable children inside frozen objects. Deeply immutable
94
+ data retains identity reuse. Assertions and warnings accept bounded immutable nested `path`
95
+ metadata. Replace `validateModel` with `checkModel` and session/runner `.validate()` with `.check()`.
96
+ These check declarations and reached assertions without finalizing geometry; unexpected execution
97
+ failures still throw.
98
+
99
+ ### Generator SDK and Testkit
100
+
101
+ | Previous API | 0.18 API |
102
+ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
103
+ | Nested compiled Generator module | Flat format-5 model program; bind an existing program with `defineGeneratorModule({ definition, program })` |
104
+ | `isGeneratorModule(value)` | `parseGeneratorModule(value, definition)` |
105
+ | `executeGenerator({ ..., parsedParameters })` | `executeGenerator({ ..., parameters })`; current-definition validation always runs |
106
+ | Callback-scoped `withModel`, `ModelTestOptions`, or `runner.withModel` | `await runModel(programOrCallback, ...)` for one-off results; explicit sessions or Generator runners for repeated edits |
107
+ | Generator test `runner.execute(...)` | `runner.run(...)`, returning `GeneratorTestResult` |
108
+ | `expectSerializableDefinition` | `assertValidDefinition` |
109
+ | `expectValidDefaults`, `expectValidPresets`, and `expectValidParts` | `assertValidDefaults`, `assertValidPresets`, and `assertValidParts` |
110
+ | `expectMeshMeasurements` | `assertMeshMeasurements` |
111
+ | `canonicalizeParameters(definition, parameters)` from `/parameters` | `canonicalizeParameters(parameters)` from `/runtime` |
112
+ | `GeneratedPartsDecoder`, `parseGeneratedParts`, and `GeneratedPartsLimits` | `PartDeliveryDecoder`, `parseModelParts`, and `PartDeliveryLimits` |
113
+ | `GeneratedPart` and `GeneratedModel` | `ModelPartData` and `ModelData` |
114
+ | `GeneratedPartDelivery` and `GeneratedModelDelivery` | `PartDelivery` and `ModelDelivery` |
115
+
116
+ Testkit `runModel` accepts existing `ModelProgram` values and synchronous inline callbacks;
117
+ typed callbacks use `runModel<Parameters, Services>`. Its definition-bound Generator overload
118
+ validates inputs and prepares services. The SDK Modeling adapter adds definition-inferred
119
+ `GeneratorModel` and `parseGeneratorModel`. Ordinary model tests preserve definition-inferred
120
+ input types. Reusable Generator runners accept physical generation policy plus `cache` and
121
+ `verifyCache` for edit sequences; dispose the runner after use.
122
+
123
+ Generator execution and ordinary tests strictly require complete canonical parameter maps.
124
+ Use the parameter codec for strict input and `normalizeParameters` for forgiving recovery;
125
+ replace `prepareParameters`, `validateParameters`, and `PreparedParameters` with
126
+ `createParamCodec(definition).parse(...)` or `.safeParse(...)`. Schema adapters remain private.
127
+ Codec failures provide structured issues without a substitute parameter map. For deliberate
128
+ malformed-input assertion probes, replace `runner.validate(parameters, { normalize: false })`
129
+ with `runner.check(parameters, { validateInput: false })`.
130
+ Defaults are selected only by omission or `undefined` where supported; a `null` parameter map is
131
+ rejected. Parameterless model calls can omit the empty map. Definition and preset helpers catch
132
+ nested key typos and validate immediately while retaining literal inference.
133
+
134
+ `assertValidParts` checks the supplied world-space buffers, closed topology, and exact agreement
135
+ with local geometry under `transform`; it no longer hides corrupted output by reconstructing it.
136
+ Always await `assertValidParts(parts, engine)` (or omit the engine): failures reject, and supplying
137
+ an engine changes resource reuse only.
138
+ `assertValidDefinition` also checks the canonical JSON round trip. New `assertEqualBuffer` and
139
+ `assertEqualMesh` compare exact ordered contents without copying; equivalent shapes with different
140
+ triangulations can differ. `ContentMismatchError` identifies the first differing element or
141
+ length, while malformed input and reader failures retain their errors. Optional `contentMatchers`
142
+ support `expect.extend`, including negation, without a test-framework dependency.
143
+
144
+ ### CLI and package requirements
145
+
146
+ Rename the type-only CLI command `metamesh check` to `metamesh typecheck`; no alias is retained.
147
+ Node authoring APIs and Modeling/Testkit declaration-check methods retain their names. Generator
148
+ runs use `overrides` / `--overrides`, merged with defaults before strict parsing; standalone models
149
+ use `params` / `--params`. Supplying the other entry kind's input option is rejected.
150
+
151
+ Captured runs use format 2 with transform-only placement. The bundled capture renderer resolves
152
+ from the installed CLI package so published installations can render captures.
153
+ Public packages require Node.js 24 or newer, ESM imports, and TypeScript 6.0 or newer with strict
154
+ checking for TypeScript consumers.
155
+
156
+ ### Patch Changes
157
+
158
+ - Updated dependencies [2eea694]
159
+ - @metamesh/modeling@0.18.0
160
+
3
161
  ## 0.17.0
4
162
 
5
163
  ### Minor Changes
package/README.md CHANGED
@@ -1,28 +1,35 @@
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
+ Define typed controls, presets, and portable contracts for MetaMesh Generators. Use one definition
4
+ for the editing interface, saved parameter values, and model execution.
5
5
 
6
6
  > **Preview:** `0.x` minor releases may break compatibility. Patches remain compatible within the
7
7
  > same minor line.
8
8
 
9
9
  ## Installation
10
10
 
11
+ For the modeling example below, install matching SDK and Modeling releases:
12
+
11
13
  ```bash
12
- pnpm add @metamesh/generator-sdk
14
+ pnpm add @metamesh/generator-sdk @metamesh/modeling
13
15
  ```
14
16
 
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.
17
+ The package publishes ES modules only. Use Node.js 24 or newer. TypeScript consumers need
18
+ TypeScript 6.0 or newer, `strict` checking, and `NodeNext` or `Bundler` module resolution.
19
+ Browser hosts need an ES2023-compatible runtime; the SDK's data contracts require no WebAssembly.
20
+
21
+ The SDK can also be used alone for definitions, parameter handling, and package validation.
22
+ Only its optional `/modeling` adapter imports the Modeling runtime.
18
23
 
19
24
  ## Define controls
20
25
 
21
- A definition describes the Generator and its editable parameters. Literal IDs and options give
22
- you exact parameter types:
26
+ A Generator combines serializable metadata with a synchronous model program. This module defines
27
+ a sleeve, infers its parameter types, and checks the relationship between its diameters:
23
28
 
24
29
  ```ts
25
30
  import { defineGenerator } from "@metamesh/generator-sdk";
31
+ import { defineGeneratorModel } from "@metamesh/generator-sdk/modeling";
32
+ import { tube } from "@metamesh/modeling";
26
33
 
27
34
  export const definition = defineGenerator({
28
35
  id: "sleeve",
@@ -34,29 +41,11 @@ export const definition = defineGenerator({
34
41
  { id: "boreDiameter", label: "Bore diameter", type: "number", default: 10, min: 1 },
35
42
  ],
36
43
  });
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
44
 
54
45
  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
- );
46
+ assert(params.boreDiameter < params.outerDiameter, "The bore must fit inside the sleeve.", {
47
+ parameterId: "boreDiameter",
48
+ });
60
49
  return part(
61
50
  "body",
62
51
  tube({
@@ -68,55 +57,93 @@ export default defineGeneratorModel(definition, ({ params, assert, part }) => {
68
57
  });
69
58
  ```
70
59
 
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.
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.
78
-
79
- ## Work with saved values
80
-
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.
85
-
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.
60
+ The adapter binds the definition to the model and produces a Generator module. Use
61
+ `defineGeneratorModule({ definition, program })` to bind an existing program. A Generator runtime
62
+ is itself a Modeling program: engines and direct model tests execute `runtime`.
63
+ Format 5 carries the callback and identity in one object; nested
64
+ format-4 runtimes are unsupported. Hosts normalize parameters, prepare assets,
65
+ and execute the model; they own the forms, viewing, persistence, and export.
66
+ Add named, complete starting values with `definePresets(definition, presets)`.
67
+
68
+ `defineGenerator` validates structural and semantic metadata immediately; `definePresets` validates
69
+ preset metadata and complete canonical parameter values. Invalid input throws
70
+ `GeneratorPackageValidationError` at declaration. Both helpers retain the supplied object or array
71
+ and its inferred literal types. Inline parameter, editor, choice, and preset objects receive
72
+ TypeScript excess-property checks. Structural typing can hide extra fields in variables or generic
73
+ factories; runtime validation checks those fields too. These helpers validate metadata and values,
74
+ not model geometry or cross-parameter assertions.
75
+
76
+ ## Generator capabilities
77
+
78
+ | Area | Capabilities |
79
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------- |
80
+ | Parameter values | Numbers, booleans, choices and choice sets, text, colors, arrays, fonts, SVG, side profiles, and cross-sections. |
81
+ | Editing metadata | Labels, units, groups, descriptions, inline hints, sliders, paired controls, and conditional visibility. |
82
+ | Parameters and presets | Inferred TypeScript types, defaults, recovering normalization, strict codecs, and complete serializable presets. |
83
+ | Host integration | Validated package manifests, module execution, Worker messages, and incremental mesh delivery. |
84
+
85
+ Definitions and presets contain data, not callbacks. Conditional visibility changes the editing
86
+ interface; hidden values remain saved and still require validation. Cross-parameter constraints
87
+ belong in the model's assertions.
88
+
89
+ Use `normalizeParameters` to recover saved values: it drops unknown keys, restores defaults, and
90
+ clamps numbers. At strict boundaries, `createParamCodec(definition)` rejects incomplete, unknown, invalid, or
91
+ noncanonical values. The [parameter guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
92
+ covers controls, conditions, and validation.
93
+
94
+ Use the codec's `parse()` to throw on invalid input, or `safeParse()` for a discriminated result.
95
+ Failure produces issues without substitute parameters. Codec issues use the shared `ParameterIssue`
96
+ shape: `parameterId` names the control, and an optional `path` is relative to that control's value.
97
+ Hosts can pass the issues directly to `aggregateParameterIssues`.
98
+
99
+ `executeGenerator` always validates its single `parameters` map against the current definition.
100
+ Hosts may validate before loading assets, but execution does not accept a prior parse result as a
101
+ validation bypass. Modeling hosts use `parseGeneratorModel(value, definition)` from `/modeling`
102
+ to validate an unknown module and infer its executable `GeneratorModel<typeof definition>` type.
103
+ Pass the default export itself for local entries that also export their definition; packaged
104
+ namespaces contain only the default export. The runtime-neutral `parseGeneratorModule` remains
105
+ available from `/runtime`. Invalid envelopes throw `TypeError`. Package validation exposes MetaMesh
106
+ issues and errors, keeping its schema-library adapters private.
107
+
108
+ Worker model statistics use `signedVolume` in mm³. `generateMs` measures the engine run;
109
+ `timings.totalMs` measures the host workflow and includes stages outside the engine.
110
+ `byteCount` counts finalized world-space position and index buffer bytes, counting shared buffers
111
+ once; it does not measure the local buffers transferred by a Worker.
112
+ Timing stages are optional; hosts report the phases they actually measure. The parameter-processing
113
+ stage is `paramsMs` and finalization is `finalizeMs`.
114
+
115
+ For Worker hosts, `/modeling` supplies `ModelDeliveryEncoder` and `toWorldMeshes`; `/runtime`
116
+ supplies `PartDeliveryDecoder`. Transfers carry local buffers under `geometry`, with placement
117
+ beside them. Decode resource references before application use and convert to world meshes before
118
+ export. Receiving hosts own the buffers and keep them immutable and attached.
89
119
 
90
120
  ## API entry points
91
121
 
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 |
122
+ | Import | Responsibility |
123
+ | ------------------------------------ | ------------------------------------------------------------------- |
124
+ | `@metamesh/generator-sdk` | Definitions, presets, inferred types, and module authoring. |
125
+ | `@metamesh/generator-sdk/modeling` | Definition-inferred Modeling programs. |
126
+ | `@metamesh/generator-sdk/parameters` | Defaults, saved values, normalization, and strict codecs. |
127
+ | `@metamesh/generator-sdk/runtime` | Execution, generated geometry, and Worker protocols. |
128
+ | `@metamesh/generator-sdk/packages` | Package, catalog, installation, and definition-document validation. |
129
+ | `@metamesh/generator-sdk/fonts` | Immutable font selection values. |
100
130
 
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.
131
+ `@metamesh/generator-sdk/parameters.schema.json` supports offline definition editing. The SDK
132
+ validates references, defaults, and cross-field rules in addition to the structural schema.
104
133
 
105
134
  ## Documentation
106
135
 
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.
136
+ Resolve `@metamesh/generator-sdk/docs/manifest.json` for exact-version Markdown guides and annotated
137
+ API references. With [CLI](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md) installed:
112
138
 
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.
139
+ ```bash
140
+ pnpm exec metamesh docs search "parameters"
141
+ pnpm exec metamesh docs show sdk/guide/generator-modules
142
+ ```
116
143
 
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).
144
+ See [local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx)
145
+ for the complete workflow and [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md)
146
+ for package development.
120
147
 
121
148
  ## License
122
149
 
@@ -1,6 +1,13 @@
1
- import type { GeneratorDefinition, GeneratorPreset } from "./contracts.js";
2
- /** Captures literal IDs and options; the host validates serializable metadata. */
3
- export declare function defineGenerator<const D extends GeneratorDefinition>(definition: D): D;
4
- /** Contextually types complete presets from the same definition as the controls. */
5
- export declare function definePresets<const D extends GeneratorDefinition, const Presets extends readonly GeneratorPreset<NoInfer<D>>[]>(_definition: D, presets: Presets): Presets;
1
+ import type { GeneratorPreset } from "./parameters/contracts.js";
2
+ import type { GeneratorDefinition, ParameterDefinition } from "./parameters/definitions.js";
3
+ type DefinitionParameters<P extends readonly ParameterDefinition[]> = readonly ParameterDefinition[] | {
4
+ readonly [Index in keyof P]: ParameterDefinition;
5
+ };
6
+ /** Validates metadata while preserving its identity and literal control types. Invalid definitions throw. */
7
+ export declare function defineGenerator<const D extends GeneratorDefinition>(definition: D & Omit<GeneratorDefinition, "parameters"> & {
8
+ readonly parameters: DefinitionParameters<NoInfer<D["parameters"]>>;
9
+ }): D;
10
+ /** Validates complete, canonical preset values and metadata while preserving the supplied array and literal types. */
11
+ export declare function definePresets<const D extends GeneratorDefinition, const Presets extends readonly GeneratorPreset<NoInfer<D>>[]>(definition: D, presets: Presets & readonly GeneratorPreset<NoInfer<D>>[]): Presets;
12
+ export {};
6
13
  //# sourceMappingURL=authoring.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../src/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE3E,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAErF;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAC3B,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACnC,KAAK,CAAC,OAAO,SAAS,SAAS,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAC5D,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAE3C"}
1
+ {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../src/authoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAK5F,KAAK,oBAAoB,CAAC,CAAC,SAAS,SAAS,mBAAmB,EAAE,IAChE,SAAS,mBAAmB,EAAE,GAAG;IAAE,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,GAAG,mBAAmB;CAAE,CAAC;AAExF,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACjE,UAAU,EAAE,CAAC,GACX,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,GAAG;IACxC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CACrE,GACF,CAAC,CAGH;AAED,sHAAsH;AACtH,wBAAgB,aAAa,CAC3B,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACnC,KAAK,CAAC,OAAO,SAAS,SAAS,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAC5D,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAGnF"}
package/dist/authoring.js CHANGED
@@ -1,9 +1,13 @@
1
- /** Captures literal IDs and options; the host validates serializable metadata. */
1
+ import { validateGeneratorPresets } from "./generator-package/validate-manifest.js";
2
+ import { parseGeneratorDefinition } from "./validation/parse-definition.js";
3
+ /** Validates metadata while preserving its identity and literal control types. Invalid definitions throw. */
2
4
  export function defineGenerator(definition) {
5
+ parseGeneratorDefinition(definition);
3
6
  return definition;
4
7
  }
5
- /** Contextually types complete presets from the same definition as the controls. */
6
- export function definePresets(_definition, presets) {
8
+ /** Validates complete, canonical preset values and metadata while preserving the supplied array and literal types. */
9
+ export function definePresets(definition, presets) {
10
+ validateGeneratorPresets(definition, presets);
7
11
  return presets;
8
12
  }
9
13
  //# sourceMappingURL=authoring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../src/authoring.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAsC,UAAa;IAChF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAG3B,WAAc,EAAE,OAAgB;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../src/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAGpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAO5E,6GAA6G;AAC7G,MAAM,UAAU,eAAe,CAC7B,UAGG;IAEH,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,aAAa,CAG3B,UAAa,EAAE,OAAyD;IACxE,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -13,7 +13,7 @@ const { width, depth, height, holeDiameter, addHole } = params;
13
13
  if (!addHole) return [part("body", body)];
14
14
  // Two extra millimetres clear the centered body's top and bottom faces.
15
15
  const bore = cylinder({ height: height + 2, diameter: holeDiameter, sizing: "face" });
16
- return [part("body", body.subtract([bore]))];
16
+ return [part("body", body.subtract(bore))];
17
17
  ```
18
18
 
19
19
  A plate is a useful starting example: its controls describe the finished size and an optional hole, while the source handles construction.
@@ -26,8 +26,8 @@ Describe what someone should be able to change: the overall size, a fit, an opti
26
26
  which parts to produce. Expose those decisions as controls. Keep implementation details in the
27
27
  source unless changing them serves a clear purpose.
28
28
 
29
- For a plate with an optional hole, Width and Hole diameter express design decisions. The cylinder's
30
- segment count usually does not need equal prominence.
29
+ For a plate with an optional hole, Width and Hole diameter describe changes someone will want to
30
+ make. The cylinder's segment count usually doesn't need equal prominence.
31
31
 
32
32
  Open **Parameter actions → Edit controls**, or **MetaMesh menu → Current project → Edit controls**.
33
33
  Group related controls into sections, put the most common decisions first, and choose
@@ -88,9 +88,9 @@ For the plate above, test these decisions separately:
88
88
 
89
89
  ## Keep related parts understandable
90
90
 
91
- Use stable, descriptive part IDs for related outputs, such as a lid and container, so readers can
92
- identify them during inspection and export as dimensions change. The [part contract](https://metamesh.studio/docs/develop/code-project-contract#parts-and-placement) describes the
93
- supported output shape.
91
+ Give related outputs stable, descriptive part IDs, such as a lid and container, so someone can
92
+ identify them during inspection and export as dimensions change. The [parts guide](https://metamesh.studio/docs/develop/code-project-contract#parts-and-placement)
93
+ shows how to return them from your code.
94
94
 
95
95
  Inspect each output and check the exported model in its intended downstream tool. A valid solid
96
96
  alone does not establish a suitable fit or printable wall thickness. Follow the
@@ -99,9 +99,9 @@ alone does not establish a suitable fit or printable wall thickness. Follow the
99
99
  ## Use the same design in a local module
100
100
 
101
101
  These control-design principles also apply to a Generator authored in a local TypeScript project.
102
- Use `@metamesh/generator-sdk` for its serializable definition and module envelope, and
102
+ Use `@metamesh/generator-sdk` to define its controls and Generator module, and
103
103
  `@metamesh/modeling` for generation. Studio's virtual `@metamesh/project` import is specific to
104
- Studio and cannot be copied into a local Node module.
104
+ Studio and can't be copied into a local Node module.
105
105
 
106
106
  Follow [local authoring](https://metamesh.studio/docs/develop/agent-authoring#generator-entries) to check and run the
107
107
  module with the CLI, inspect dimensions and named parts, and render the captured result. Add