@metaobjectsdev/metadata 0.5.0-rc.1

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 (405) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +29 -0
  3. package/dist/attr-class-map.d.ts +26 -0
  4. package/dist/attr-class-map.d.ts.map +1 -0
  5. package/dist/attr-class-map.js +44 -0
  6. package/dist/attr-class-map.js.map +1 -0
  7. package/dist/attr-schema-validate.d.ts +9 -0
  8. package/dist/attr-schema-validate.d.ts.map +1 -0
  9. package/dist/attr-schema-validate.js +100 -0
  10. package/dist/attr-schema-validate.js.map +1 -0
  11. package/dist/constants.d.ts +208 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +419 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/core/attr/attr-constants.d.ts +12 -0
  16. package/dist/core/attr/attr-constants.d.ts.map +1 -0
  17. package/dist/core/attr/attr-constants.js +27 -0
  18. package/dist/core/attr/attr-constants.js.map +1 -0
  19. package/dist/core/attr/meta-attr-filter.d.ts +10 -0
  20. package/dist/core/attr/meta-attr-filter.d.ts.map +1 -0
  21. package/dist/core/attr/meta-attr-filter.js +56 -0
  22. package/dist/core/attr/meta-attr-filter.js.map +1 -0
  23. package/dist/core/attr/meta-attr-properties.d.ts +9 -0
  24. package/dist/core/attr/meta-attr-properties.d.ts.map +1 -0
  25. package/dist/core/attr/meta-attr-properties.js +22 -0
  26. package/dist/core/attr/meta-attr-properties.js.map +1 -0
  27. package/dist/core/attr/meta-attr-stringarray.d.ts +9 -0
  28. package/dist/core/attr/meta-attr-stringarray.d.ts.map +1 -0
  29. package/dist/core/attr/meta-attr-stringarray.js +29 -0
  30. package/dist/core/attr/meta-attr-stringarray.js.map +1 -0
  31. package/dist/core/attr/meta-attr.d.ts +37 -0
  32. package/dist/core/attr/meta-attr.d.ts.map +1 -0
  33. package/dist/core/attr/meta-attr.js +97 -0
  34. package/dist/core/attr/meta-attr.js.map +1 -0
  35. package/dist/core/export-json.d.ts +29 -0
  36. package/dist/core/export-json.d.ts.map +1 -0
  37. package/dist/core/export-json.js +45 -0
  38. package/dist/core/export-json.js.map +1 -0
  39. package/dist/core/field/field-constants.d.ts +40 -0
  40. package/dist/core/field/field-constants.d.ts.map +1 -0
  41. package/dist/core/field/field-constants.js +66 -0
  42. package/dist/core/field/field-constants.js.map +1 -0
  43. package/dist/core/field/field-schema.d.ts +6 -0
  44. package/dist/core/field/field-schema.d.ts.map +1 -0
  45. package/dist/core/field/field-schema.js +92 -0
  46. package/dist/core/field/field-schema.js.map +1 -0
  47. package/dist/core/field/meta-field.d.ts +50 -0
  48. package/dist/core/field/meta-field.d.ts.map +1 -0
  49. package/dist/core/field/meta-field.js +121 -0
  50. package/dist/core/field/meta-field.js.map +1 -0
  51. package/dist/core/file-meta-data-loader.d.ts +18 -0
  52. package/dist/core/file-meta-data-loader.d.ts.map +1 -0
  53. package/dist/core/file-meta-data-loader.js +81 -0
  54. package/dist/core/file-meta-data-loader.js.map +1 -0
  55. package/dist/core/file-source.d.ts +12 -0
  56. package/dist/core/file-source.d.ts.map +1 -0
  57. package/dist/core/file-source.js +46 -0
  58. package/dist/core/file-source.js.map +1 -0
  59. package/dist/core/identity/identity-constants.d.ts +19 -0
  60. package/dist/core/identity/identity-constants.d.ts.map +1 -0
  61. package/dist/core/identity/identity-constants.js +35 -0
  62. package/dist/core/identity/identity-constants.js.map +1 -0
  63. package/dist/core/identity/identity-schema.d.ts +6 -0
  64. package/dist/core/identity/identity-schema.d.ts.map +1 -0
  65. package/dist/core/identity/identity-schema.js +55 -0
  66. package/dist/core/identity/identity-schema.js.map +1 -0
  67. package/dist/core/identity/meta-identity.d.ts +71 -0
  68. package/dist/core/identity/meta-identity.d.ts.map +1 -0
  69. package/dist/core/identity/meta-identity.js +129 -0
  70. package/dist/core/identity/meta-identity.js.map +1 -0
  71. package/dist/core/index.d.ts +6 -0
  72. package/dist/core/index.d.ts.map +1 -0
  73. package/dist/core/index.js +11 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/core/object/meta-object.d.ts +39 -0
  76. package/dist/core/object/meta-object.d.ts.map +1 -0
  77. package/dist/core/object/meta-object.js +80 -0
  78. package/dist/core/object/meta-object.js.map +1 -0
  79. package/dist/core/object/object-constants.d.ts +5 -0
  80. package/dist/core/object/object-constants.d.ts.map +1 -0
  81. package/dist/core/object/object-constants.js +18 -0
  82. package/dist/core/object/object-constants.js.map +1 -0
  83. package/dist/core/object/object-schema.d.ts +4 -0
  84. package/dist/core/object/object-schema.d.ts.map +1 -0
  85. package/dist/core/object/object-schema.js +5 -0
  86. package/dist/core/object/object-schema.js.map +1 -0
  87. package/dist/core/parser-yaml.d.ts +3 -0
  88. package/dist/core/parser-yaml.d.ts.map +1 -0
  89. package/dist/core/parser-yaml.js +39 -0
  90. package/dist/core/parser-yaml.js.map +1 -0
  91. package/dist/core/query/query-constants.d.ts +20 -0
  92. package/dist/core/query/query-constants.d.ts.map +1 -0
  93. package/dist/core/query/query-constants.js +56 -0
  94. package/dist/core/query/query-constants.js.map +1 -0
  95. package/dist/core/relationship/find-reference.d.ts +22 -0
  96. package/dist/core/relationship/find-reference.d.ts.map +1 -0
  97. package/dist/core/relationship/find-reference.js +29 -0
  98. package/dist/core/relationship/find-reference.js.map +1 -0
  99. package/dist/core/relationship/meta-relationship.d.ts +11 -0
  100. package/dist/core/relationship/meta-relationship.d.ts.map +1 -0
  101. package/dist/core/relationship/meta-relationship.js +27 -0
  102. package/dist/core/relationship/meta-relationship.js.map +1 -0
  103. package/dist/core/relationship/relationship-constants.d.ts +14 -0
  104. package/dist/core/relationship/relationship-constants.d.ts.map +1 -0
  105. package/dist/core/relationship/relationship-constants.js +28 -0
  106. package/dist/core/relationship/relationship-constants.js.map +1 -0
  107. package/dist/core/relationship/relationship-schema.d.ts +4 -0
  108. package/dist/core/relationship/relationship-schema.d.ts.map +1 -0
  109. package/dist/core/relationship/relationship-schema.js +37 -0
  110. package/dist/core/relationship/relationship-schema.js.map +1 -0
  111. package/dist/core/validator/meta-validator.d.ts +29 -0
  112. package/dist/core/validator/meta-validator.d.ts.map +1 -0
  113. package/dist/core/validator/meta-validator.js +49 -0
  114. package/dist/core/validator/meta-validator.js.map +1 -0
  115. package/dist/core/validator/validator-constants.d.ts +11 -0
  116. package/dist/core/validator/validator-constants.d.ts.map +1 -0
  117. package/dist/core/validator/validator-constants.js +25 -0
  118. package/dist/core/validator/validator-constants.js.map +1 -0
  119. package/dist/core/validator/validator-schema.d.ts +4 -0
  120. package/dist/core/validator/validator-schema.d.ts.map +1 -0
  121. package/dist/core/validator/validator-schema.js +38 -0
  122. package/dist/core/validator/validator-schema.js.map +1 -0
  123. package/dist/core/yaml-desugar.d.ts +10 -0
  124. package/dist/core/yaml-desugar.d.ts.map +1 -0
  125. package/dist/core/yaml-desugar.js +99 -0
  126. package/dist/core/yaml-desugar.js.map +1 -0
  127. package/dist/core-attr-schemas.d.ts +22 -0
  128. package/dist/core-attr-schemas.d.ts.map +1 -0
  129. package/dist/core-attr-schemas.js +324 -0
  130. package/dist/core-attr-schemas.js.map +1 -0
  131. package/dist/core-types.d.ts +20 -0
  132. package/dist/core-types.d.ts.map +1 -0
  133. package/dist/core-types.js +225 -0
  134. package/dist/core-types.js.map +1 -0
  135. package/dist/data-converter.d.ts +17 -0
  136. package/dist/data-converter.d.ts.map +1 -0
  137. package/dist/data-converter.js +117 -0
  138. package/dist/data-converter.js.map +1 -0
  139. package/dist/data-type.d.ts +15 -0
  140. package/dist/data-type.d.ts.map +1 -0
  141. package/dist/data-type.js +25 -0
  142. package/dist/data-type.js.map +1 -0
  143. package/dist/db/db-attr-schemas.d.ts +8 -0
  144. package/dist/db/db-attr-schemas.d.ts.map +1 -0
  145. package/dist/db/db-attr-schemas.js +26 -0
  146. package/dist/db/db-attr-schemas.js.map +1 -0
  147. package/dist/db/db-provider.d.ts +3 -0
  148. package/dist/db/db-provider.d.ts.map +1 -0
  149. package/dist/db/db-provider.js +28 -0
  150. package/dist/db/db-provider.js.map +1 -0
  151. package/dist/errors.d.ts +26 -0
  152. package/dist/errors.d.ts.map +1 -0
  153. package/dist/errors.js +59 -0
  154. package/dist/errors.js.map +1 -0
  155. package/dist/index.d.ts +70 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +76 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/loader/meta-data-loader.d.ts +87 -0
  160. package/dist/loader/meta-data-loader.d.ts.map +1 -0
  161. package/dist/loader/meta-data-loader.js +232 -0
  162. package/dist/loader/meta-data-loader.js.map +1 -0
  163. package/dist/loader/meta-data-source.d.ts +23 -0
  164. package/dist/loader/meta-data-source.d.ts.map +1 -0
  165. package/dist/loader/meta-data-source.js +20 -0
  166. package/dist/loader/meta-data-source.js.map +1 -0
  167. package/dist/loader/validation-passes.d.ts +7 -0
  168. package/dist/loader/validation-passes.d.ts.map +1 -0
  169. package/dist/loader/validation-passes.js +244 -0
  170. package/dist/loader/validation-passes.js.map +1 -0
  171. package/dist/meta/find-reference.d.ts +22 -0
  172. package/dist/meta/find-reference.d.ts.map +1 -0
  173. package/dist/meta/find-reference.js +29 -0
  174. package/dist/meta/find-reference.js.map +1 -0
  175. package/dist/meta/meta-attr.d.ts +8 -0
  176. package/dist/meta/meta-attr.d.ts.map +1 -0
  177. package/dist/meta/meta-attr.js +17 -0
  178. package/dist/meta/meta-attr.js.map +1 -0
  179. package/dist/meta/meta-data.d.ts +107 -0
  180. package/dist/meta/meta-data.d.ts.map +1 -0
  181. package/dist/meta/meta-data.js +302 -0
  182. package/dist/meta/meta-data.js.map +1 -0
  183. package/dist/meta/meta-field.d.ts +48 -0
  184. package/dist/meta/meta-field.d.ts.map +1 -0
  185. package/dist/meta/meta-field.js +94 -0
  186. package/dist/meta/meta-field.js.map +1 -0
  187. package/dist/meta/meta-identity.d.ts +71 -0
  188. package/dist/meta/meta-identity.d.ts.map +1 -0
  189. package/dist/meta/meta-identity.js +129 -0
  190. package/dist/meta/meta-identity.js.map +1 -0
  191. package/dist/meta/meta-layout.d.ts +23 -0
  192. package/dist/meta/meta-layout.d.ts.map +1 -0
  193. package/dist/meta/meta-layout.js +45 -0
  194. package/dist/meta/meta-layout.js.map +1 -0
  195. package/dist/meta/meta-object.d.ts +40 -0
  196. package/dist/meta/meta-object.d.ts.map +1 -0
  197. package/dist/meta/meta-object.js +81 -0
  198. package/dist/meta/meta-object.js.map +1 -0
  199. package/dist/meta/meta-origin.d.ts +32 -0
  200. package/dist/meta/meta-origin.d.ts.map +1 -0
  201. package/dist/meta/meta-origin.js +55 -0
  202. package/dist/meta/meta-origin.js.map +1 -0
  203. package/dist/meta/meta-relationship.d.ts +11 -0
  204. package/dist/meta/meta-relationship.d.ts.map +1 -0
  205. package/dist/meta/meta-relationship.js +27 -0
  206. package/dist/meta/meta-relationship.js.map +1 -0
  207. package/dist/meta/meta-root.d.ts +12 -0
  208. package/dist/meta/meta-root.d.ts.map +1 -0
  209. package/dist/meta/meta-root.js +24 -0
  210. package/dist/meta/meta-root.js.map +1 -0
  211. package/dist/meta/meta-source.d.ts +18 -0
  212. package/dist/meta/meta-source.d.ts.map +1 -0
  213. package/dist/meta/meta-source.js +31 -0
  214. package/dist/meta/meta-source.js.map +1 -0
  215. package/dist/meta/meta-validator.d.ts +29 -0
  216. package/dist/meta/meta-validator.d.ts.map +1 -0
  217. package/dist/meta/meta-validator.js +49 -0
  218. package/dist/meta/meta-validator.js.map +1 -0
  219. package/dist/meta/meta-view.d.ts +4 -0
  220. package/dist/meta/meta-view.d.ts.map +1 -0
  221. package/dist/meta/meta-view.js +8 -0
  222. package/dist/meta/meta-view.js.map +1 -0
  223. package/dist/naming.d.ts +27 -0
  224. package/dist/naming.d.ts.map +1 -0
  225. package/dist/naming.js +72 -0
  226. package/dist/naming.js.map +1 -0
  227. package/dist/object-serializer.d.ts +10 -0
  228. package/dist/object-serializer.d.ts.map +1 -0
  229. package/dist/object-serializer.js +128 -0
  230. package/dist/object-serializer.js.map +1 -0
  231. package/dist/overlay.d.ts +2 -0
  232. package/dist/overlay.d.ts.map +1 -0
  233. package/dist/overlay.js +6 -0
  234. package/dist/overlay.js.map +1 -0
  235. package/dist/parser-core.d.ts +47 -0
  236. package/dist/parser-core.d.ts.map +1 -0
  237. package/dist/parser-core.js +516 -0
  238. package/dist/parser-core.js.map +1 -0
  239. package/dist/parser-json.d.ts +4 -0
  240. package/dist/parser-json.d.ts.map +1 -0
  241. package/dist/parser-json.js +19 -0
  242. package/dist/parser-json.js.map +1 -0
  243. package/dist/persistence/db/db-attr-schemas.d.ts +8 -0
  244. package/dist/persistence/db/db-attr-schemas.d.ts.map +1 -0
  245. package/dist/persistence/db/db-attr-schemas.js +28 -0
  246. package/dist/persistence/db/db-attr-schemas.js.map +1 -0
  247. package/dist/persistence/db/db-constants.d.ts +5 -0
  248. package/dist/persistence/db/db-constants.d.ts.map +1 -0
  249. package/dist/persistence/db/db-constants.js +6 -0
  250. package/dist/persistence/db/db-constants.js.map +1 -0
  251. package/dist/persistence/db/db-provider.d.ts +3 -0
  252. package/dist/persistence/db/db-provider.d.ts.map +1 -0
  253. package/dist/persistence/db/db-provider.js +29 -0
  254. package/dist/persistence/db/db-provider.js.map +1 -0
  255. package/dist/persistence/db/db-schema.d.ts +8 -0
  256. package/dist/persistence/db/db-schema.d.ts.map +1 -0
  257. package/dist/persistence/db/db-schema.js +27 -0
  258. package/dist/persistence/db/db-schema.js.map +1 -0
  259. package/dist/persistence/origin/meta-origin.d.ts +32 -0
  260. package/dist/persistence/origin/meta-origin.d.ts.map +1 -0
  261. package/dist/persistence/origin/meta-origin.js +55 -0
  262. package/dist/persistence/origin/meta-origin.js.map +1 -0
  263. package/dist/persistence/origin/origin-constants.d.ts +12 -0
  264. package/dist/persistence/origin/origin-constants.d.ts.map +1 -0
  265. package/dist/persistence/origin/origin-constants.js +27 -0
  266. package/dist/persistence/origin/origin-constants.js.map +1 -0
  267. package/dist/persistence/origin/origin-schema.d.ts +4 -0
  268. package/dist/persistence/origin/origin-schema.d.ts.map +1 -0
  269. package/dist/persistence/origin/origin-schema.js +49 -0
  270. package/dist/persistence/origin/origin-schema.js.map +1 -0
  271. package/dist/persistence/source/meta-source.d.ts +18 -0
  272. package/dist/persistence/source/meta-source.d.ts.map +1 -0
  273. package/dist/persistence/source/meta-source.js +31 -0
  274. package/dist/persistence/source/meta-source.js.map +1 -0
  275. package/dist/persistence/source/source-constants.d.ts +16 -0
  276. package/dist/persistence/source/source-constants.d.ts.map +1 -0
  277. package/dist/persistence/source/source-constants.js +28 -0
  278. package/dist/persistence/source/source-constants.js.map +1 -0
  279. package/dist/presentation/layout/layout-constants.d.ts +10 -0
  280. package/dist/presentation/layout/layout-constants.d.ts.map +1 -0
  281. package/dist/presentation/layout/layout-constants.js +21 -0
  282. package/dist/presentation/layout/layout-constants.js.map +1 -0
  283. package/dist/presentation/layout/layout-schema.d.ts +4 -0
  284. package/dist/presentation/layout/layout-schema.d.ts.map +1 -0
  285. package/dist/presentation/layout/layout-schema.js +46 -0
  286. package/dist/presentation/layout/layout-schema.js.map +1 -0
  287. package/dist/presentation/layout/meta-layout.d.ts +23 -0
  288. package/dist/presentation/layout/meta-layout.d.ts.map +1 -0
  289. package/dist/presentation/layout/meta-layout.js +47 -0
  290. package/dist/presentation/layout/meta-layout.js.map +1 -0
  291. package/dist/presentation/view/meta-view.d.ts +4 -0
  292. package/dist/presentation/view/meta-view.d.ts.map +1 -0
  293. package/dist/presentation/view/meta-view.js +8 -0
  294. package/dist/presentation/view/meta-view.js.map +1 -0
  295. package/dist/presentation/view/view-constants.d.ts +20 -0
  296. package/dist/presentation/view/view-constants.d.ts.map +1 -0
  297. package/dist/presentation/view/view-constants.js +47 -0
  298. package/dist/presentation/view/view-constants.js.map +1 -0
  299. package/dist/presentation/view/view-schema.d.ts +4 -0
  300. package/dist/presentation/view/view-schema.d.ts.map +1 -0
  301. package/dist/presentation/view/view-schema.js +15 -0
  302. package/dist/presentation/view/view-schema.js.map +1 -0
  303. package/dist/provider.d.ts +20 -0
  304. package/dist/provider.d.ts.map +1 -0
  305. package/dist/provider.js +58 -0
  306. package/dist/provider.js.map +1 -0
  307. package/dist/registry.d.ts +89 -0
  308. package/dist/registry.d.ts.map +1 -0
  309. package/dist/registry.js +107 -0
  310. package/dist/registry.js.map +1 -0
  311. package/dist/serializer-json.d.ts +16 -0
  312. package/dist/serializer-json.d.ts.map +1 -0
  313. package/dist/serializer-json.js +154 -0
  314. package/dist/serializer-json.js.map +1 -0
  315. package/dist/shared/base-types.d.ts +23 -0
  316. package/dist/shared/base-types.d.ts.map +1 -0
  317. package/dist/shared/base-types.js +43 -0
  318. package/dist/shared/base-types.js.map +1 -0
  319. package/dist/shared/meta-data.d.ts +123 -0
  320. package/dist/shared/meta-data.d.ts.map +1 -0
  321. package/dist/shared/meta-data.js +365 -0
  322. package/dist/shared/meta-data.js.map +1 -0
  323. package/dist/shared/meta-root.d.ts +12 -0
  324. package/dist/shared/meta-root.d.ts.map +1 -0
  325. package/dist/shared/meta-root.js +24 -0
  326. package/dist/shared/meta-root.js.map +1 -0
  327. package/dist/shared/structural.d.ts +20 -0
  328. package/dist/shared/structural.d.ts.map +1 -0
  329. package/dist/shared/structural.js +49 -0
  330. package/dist/shared/structural.js.map +1 -0
  331. package/dist/subtype-rules.d.ts +8 -0
  332. package/dist/subtype-rules.d.ts.map +1 -0
  333. package/dist/subtype-rules.js +34 -0
  334. package/dist/subtype-rules.js.map +1 -0
  335. package/dist/super-resolve.d.ts +34 -0
  336. package/dist/super-resolve.d.ts.map +1 -0
  337. package/dist/super-resolve.js +124 -0
  338. package/dist/super-resolve.js.map +1 -0
  339. package/package.json +50 -0
  340. package/src/attr-class-map.ts +64 -0
  341. package/src/attr-schema-validate.ts +134 -0
  342. package/src/core/attr/attr-constants.ts +31 -0
  343. package/src/core/attr/meta-attr-filter.ts +67 -0
  344. package/src/core/attr/meta-attr-properties.ts +26 -0
  345. package/src/core/attr/meta-attr-stringarray.ts +31 -0
  346. package/src/core/attr/meta-attr.ts +125 -0
  347. package/src/core/export-json.ts +66 -0
  348. package/src/core/field/field-constants.ts +79 -0
  349. package/src/core/field/field-schema.ts +121 -0
  350. package/src/core/field/meta-field.ts +179 -0
  351. package/src/core/file-meta-data-loader.ts +89 -0
  352. package/src/core/file-source.ts +52 -0
  353. package/src/core/identity/identity-constants.ts +44 -0
  354. package/src/core/identity/identity-schema.ts +80 -0
  355. package/src/core/identity/meta-identity.ts +148 -0
  356. package/src/core/index.ts +12 -0
  357. package/src/core/object/meta-object.ts +151 -0
  358. package/src/core/object/object-constants.ts +21 -0
  359. package/src/core/object/object-schema.ts +7 -0
  360. package/src/core/parser-yaml.ts +54 -0
  361. package/src/core/query/query-constants.ts +66 -0
  362. package/src/core/relationship/find-reference.ts +44 -0
  363. package/src/core/relationship/meta-relationship.ts +36 -0
  364. package/src/core/relationship/relationship-constants.ts +38 -0
  365. package/src/core/relationship/relationship-schema.ts +49 -0
  366. package/src/core/validator/meta-validator.ts +62 -0
  367. package/src/core/validator/validator-constants.ts +31 -0
  368. package/src/core/validator/validator-schema.ts +50 -0
  369. package/src/core/yaml-desugar.ts +145 -0
  370. package/src/core-types.ts +329 -0
  371. package/src/data-converter.ts +125 -0
  372. package/src/data-type.ts +33 -0
  373. package/src/errors.ts +68 -0
  374. package/src/index.ts +165 -0
  375. package/src/loader/meta-data-loader.ts +307 -0
  376. package/src/loader/meta-data-source.ts +35 -0
  377. package/src/loader/validation-passes.ts +370 -0
  378. package/src/naming.ts +86 -0
  379. package/src/object-serializer.ts +153 -0
  380. package/src/overlay.ts +5 -0
  381. package/src/parser-core.ts +815 -0
  382. package/src/parser-json.ts +28 -0
  383. package/src/persistence/db/db-constants.ts +6 -0
  384. package/src/persistence/db/db-provider.ts +36 -0
  385. package/src/persistence/db/db-schema.ts +40 -0
  386. package/src/persistence/origin/meta-origin.ts +67 -0
  387. package/src/persistence/origin/origin-constants.ts +35 -0
  388. package/src/persistence/origin/origin-schema.ts +66 -0
  389. package/src/persistence/source/meta-source.ts +38 -0
  390. package/src/persistence/source/source-constants.ts +35 -0
  391. package/src/presentation/layout/layout-constants.ts +27 -0
  392. package/src/presentation/layout/layout-schema.ts +62 -0
  393. package/src/presentation/layout/meta-layout.ts +61 -0
  394. package/src/presentation/view/meta-view.ts +8 -0
  395. package/src/presentation/view/view-constants.ts +53 -0
  396. package/src/presentation/view/view-schema.ts +21 -0
  397. package/src/provider.ts +85 -0
  398. package/src/registry.ts +190 -0
  399. package/src/serializer-json.ts +210 -0
  400. package/src/shared/base-types.ts +52 -0
  401. package/src/shared/meta-data.ts +443 -0
  402. package/src/shared/meta-root.ts +33 -0
  403. package/src/shared/structural.ts +62 -0
  404. package/src/subtype-rules.ts +56 -0
  405. package/src/super-resolve.ts +147 -0
@@ -0,0 +1,20 @@
1
+ export declare const RESERVED_KEY_NAME = "name";
2
+ export declare const RESERVED_KEY_PACKAGE = "package";
3
+ export declare const RESERVED_KEY_EXTENDS = "extends";
4
+ export declare const RESERVED_KEY_ABSTRACT = "abstract";
5
+ export declare const RESERVED_KEY_OVERLAY = "overlay";
6
+ export declare const RESERVED_KEY_IS_ARRAY = "isArray";
7
+ export declare const RESERVED_KEY_CHILDREN = "children";
8
+ /** attr-child-node body key carrying the typed value. */
9
+ export declare const RESERVED_KEY_VALUE = "value";
10
+ export declare const RESERVED_KEYS: Set<string>;
11
+ export declare const JSON_KEY_SCHEMA = "$schema";
12
+ export declare const ATTR_PREFIX = "@";
13
+ /** Separator fusing type and subType in a node's wrapper key (`object.entity`). */
14
+ export declare const TYPE_SUBTYPE_SEPARATOR = ".";
15
+ /** Separator between package segments and between package and name. */
16
+ export declare const PACKAGE_SEPARATOR = "::";
17
+ /** Relative-reference "go up one level" marker. */
18
+ export declare const PACKAGE_PARENT = "..";
19
+ export declare const CHILD_RULE_WILDCARD = "*";
20
+ //# sourceMappingURL=structural.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
@@ -0,0 +1,49 @@
1
+ // Structural vocabulary — reserved body keys, JSON special keys, separators, wildcards, package paths.
2
+ // ---------------------------------------------------------------------------
3
+ // Reserved structural body keys (redesigned format — NOT @-prefixed, NOT attrs)
4
+ //
5
+ // Every node body is a map whose only permitted non-@ keys are these. The
6
+ // canonical body-key order is: name, package, extends, abstract, overlay,
7
+ // isArray, @-attrs (alphabetical), children.
8
+ // ---------------------------------------------------------------------------
9
+ export const RESERVED_KEY_NAME = "name";
10
+ export const RESERVED_KEY_PACKAGE = "package";
11
+ export const RESERVED_KEY_EXTENDS = "extends"; // the supertype reference
12
+ export const RESERVED_KEY_ABSTRACT = "abstract"; // true → the node is abstract
13
+ export const RESERVED_KEY_OVERLAY = "overlay"; // true → re-opens an existing same-named node
14
+ export const RESERVED_KEY_IS_ARRAY = "isArray"; // true → the node is an array
15
+ export const RESERVED_KEY_CHILDREN = "children";
16
+ /** attr-child-node body key carrying the typed value. */
17
+ export const RESERVED_KEY_VALUE = "value";
18
+ export const RESERVED_KEYS = new Set([
19
+ RESERVED_KEY_NAME,
20
+ RESERVED_KEY_PACKAGE,
21
+ RESERVED_KEY_EXTENDS,
22
+ RESERVED_KEY_ABSTRACT,
23
+ RESERVED_KEY_OVERLAY,
24
+ RESERVED_KEY_IS_ARRAY,
25
+ RESERVED_KEY_CHILDREN,
26
+ RESERVED_KEY_VALUE,
27
+ ]);
28
+ // ---------------------------------------------------------------------------
29
+ // JSON document special keys (top-level, ignored during wrapper-key detection)
30
+ // ---------------------------------------------------------------------------
31
+ export const JSON_KEY_SCHEMA = "$schema";
32
+ // ---------------------------------------------------------------------------
33
+ // Inline attribute prefix + fused type.subType key separator
34
+ // ---------------------------------------------------------------------------
35
+ export const ATTR_PREFIX = "@";
36
+ /** Separator fusing type and subType in a node's wrapper key (`object.entity`). */
37
+ export const TYPE_SUBTYPE_SEPARATOR = ".";
38
+ // ---------------------------------------------------------------------------
39
+ // Package path conventions
40
+ // ---------------------------------------------------------------------------
41
+ /** Separator between package segments and between package and name. */
42
+ export const PACKAGE_SEPARATOR = "::";
43
+ /** Relative-reference "go up one level" marker. */
44
+ export const PACKAGE_PARENT = "..";
45
+ // ---------------------------------------------------------------------------
46
+ // Wildcard for child-rule matching
47
+ // ---------------------------------------------------------------------------
48
+ export const CHILD_RULE_WILDCARD = "*";
49
+ //# sourceMappingURL=structural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,0BAA0B;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,8BAA8B;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,8CAA8C;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAE,8BAA8B;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MetaData } from "./shared/meta-data.js";
2
+ import { ParseError } from "./errors.js";
3
+ export interface SubtypeRuleResult {
4
+ errors: ParseError[];
5
+ warnings: string[];
6
+ }
7
+ export declare function validateSubtypeRules(root: MetaData): SubtypeRuleResult;
8
+ //# sourceMappingURL=subtype-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtype-rules.d.ts","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAKtE"}
@@ -0,0 +1,34 @@
1
+ // Cross-language subtype rules for object subtypes.
2
+ //
3
+ // - value objects MUST NOT have a primary identity (error)
4
+ // - entity objects SHOULD have a primary identity, unless @isAbstract (warning)
5
+ // - base objects have no rule (template, may or may not have identity)
6
+ import { ParseError } from "./errors.js";
7
+ import { TYPE_OBJECT, TYPE_IDENTITY } from "./shared/base-types.js";
8
+ import { IDENTITY_SUBTYPE_PRIMARY } from "./core/identity/identity-constants.js";
9
+ import { OBJECT_SUBTYPE_ENTITY, OBJECT_SUBTYPE_VALUE, } from "./core/object/object-constants.js";
10
+ export function validateSubtypeRules(root) {
11
+ const errors = [];
12
+ const warnings = [];
13
+ walk(root, errors, warnings);
14
+ return { errors, warnings };
15
+ }
16
+ function walk(model, errors, warnings) {
17
+ if (model.type === TYPE_OBJECT) {
18
+ const hasPrimary = model.children().some((c) => c.type === TYPE_IDENTITY && c.subType === IDENTITY_SUBTYPE_PRIMARY);
19
+ if (model.subType === OBJECT_SUBTYPE_VALUE && hasPrimary) {
20
+ errors.push(new ParseError(`value object '${model.fqn()}' must not have a primary identity ` +
21
+ `(use subType: "entity" for records with identity)`, { code: "ERR_SUBTYPE_RULE_VIOLATION" }));
22
+ }
23
+ else if (model.subType === OBJECT_SUBTYPE_ENTITY &&
24
+ !hasPrimary &&
25
+ !model.isAbstract) {
26
+ warnings.push(`entity object '${model.fqn()}' has no primary identity ` +
27
+ `(add an identity child or mark @isAbstract: true)`);
28
+ }
29
+ }
30
+ for (const child of model.ownChildren()) {
31
+ walk(child, errors, warnings);
32
+ }
33
+ }
34
+ //# sourceMappingURL=subtype-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtype-rules.js","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6DAA6D;AAC7D,kFAAkF;AAClF,yEAAyE;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAO3C,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,KAAe,EAAE,MAAoB,EAAE,QAAkB;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK,wBAAwB,CAC1E,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,IAAI,UAAU,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CACT,IAAI,UAAU,CACZ,iBAAiB,KAAK,CAAC,GAAG,EAAE,qCAAqC;gBAC/D,mDAAmD,EACrD,EAAE,IAAI,EAAE,4BAA4B,EAAE,CACvC,CACF,CAAC;QACJ,CAAC;aAAM,IACL,KAAK,CAAC,OAAO,KAAK,qBAAqB;YACvC,CAAC,UAAU;YACX,CAAC,KAAK,CAAC,UAAU,EACjB,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,kBAAkB,KAAK,CAAC,GAAG,EAAE,4BAA4B;gBACvD,mDAAmD,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { MetaData } from "./shared/meta-data.js";
2
+ /**
3
+ * Resolve a single super reference string against a tree.
4
+ *
5
+ * Called by the parser IMMEDIATELY when a node with a `super` key is created,
6
+ * against the loader's accumulating root (intoRoot). Java semantics: if the
7
+ * ref cannot be resolved, the parser throws ParseError.
8
+ *
9
+ * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id")
10
+ * @param contextPackage - The package of the model whose super is being resolved
11
+ * @param root - The root MetaData of the accumulating tree to search within
12
+ * @returns The resolved MetaData, or undefined if the reference cannot be resolved
13
+ */
14
+ export declare function resolveSuperRef(ref: string, contextPackage: string, root: MetaData): MetaData | undefined;
15
+ export interface DeferredSuperFailure {
16
+ /** FQN of the node whose super ref could not be resolved. */
17
+ nodeFqn: string;
18
+ /** The raw super ref string that didn't resolve. */
19
+ ref: string;
20
+ }
21
+ /**
22
+ * Walk the tree and resolve every node's superRef against the full root.
23
+ * Used by Loader.loadJsonStrings as a second pass after all input files
24
+ * have been parsed with deferSuperResolution: true. Unresolved refs are
25
+ * collected and returned — caller decides whether to throw or warn.
26
+ *
27
+ * Tracks an inherited context package while walking so children whose own
28
+ * `package` is unset (e.g., fields inside an object) still resolve against
29
+ * the parent's package — matching the parser's eager-resolution semantics.
30
+ *
31
+ * Idempotent: nodes that already have superResolved set are skipped.
32
+ */
33
+ export declare function resolveDeferredSupers(root: MetaData): DeferredSuperFailure[];
34
+ //# sourceMappingURL=super-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-resolve.d.ts","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAwBtD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,QAAQ,GACb,QAAQ,GAAG,SAAS,CAsCtB;AAMD,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB,EAAE,CAkB5E"}
@@ -0,0 +1,124 @@
1
+ // super reference resolution — package navigation helpers
2
+ //
3
+ // Reference syntax (Java metaobjects-core conventions):
4
+ // Bare name "Fruit" → resolve in contextPackage, then root fallback
5
+ // Absolute "::fishstore::Fish" → strip leading ::, walk from root
6
+ // Relative parent "..::common::id" → up one package level, then resolve "common::id"
7
+ // Multi-level "..::..::shared::User" → up two levels, then resolve "shared::User"
8
+ // Same-package "common::id" → try contextPackage prepend first, then root-rooted
9
+ //
10
+ // Super resolution is now IMMEDIATE during parse (Java behavior).
11
+ // This module provides only the lookup helper; the parser calls it inline.
12
+ // The old resolveSupers() multi-pass walker has been deleted.
13
+ import { PACKAGE_SEPARATOR, PACKAGE_PARENT } from "./shared/structural.js";
14
+ // ---------------------------------------------------------------------------
15
+ // Tree search helper
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * Recursively searches the tree for a node whose fqn() matches.
19
+ * Returns the first match, or undefined.
20
+ */
21
+ function findInTree(root, fqn) {
22
+ if (root.fqn() === fqn)
23
+ return root;
24
+ for (const child of root.ownChildren()) {
25
+ const found = findInTree(child, fqn);
26
+ if (found !== undefined)
27
+ return found;
28
+ }
29
+ return undefined;
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Reference parsing & resolution
33
+ // ---------------------------------------------------------------------------
34
+ /**
35
+ * Resolve a single super reference string against a tree.
36
+ *
37
+ * Called by the parser IMMEDIATELY when a node with a `super` key is created,
38
+ * against the loader's accumulating root (intoRoot). Java semantics: if the
39
+ * ref cannot be resolved, the parser throws ParseError.
40
+ *
41
+ * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id")
42
+ * @param contextPackage - The package of the model whose super is being resolved
43
+ * @param root - The root MetaData of the accumulating tree to search within
44
+ * @returns The resolved MetaData, or undefined if the reference cannot be resolved
45
+ */
46
+ export function resolveSuperRef(ref, contextPackage, root) {
47
+ // -------------------------------------------------------------------------
48
+ // 1. Absolute reference: leading "::"
49
+ // -------------------------------------------------------------------------
50
+ if (ref.startsWith(PACKAGE_SEPARATOR)) {
51
+ const absolutePath = ref.slice(PACKAGE_SEPARATOR.length);
52
+ return findInTree(root, absolutePath);
53
+ }
54
+ // -------------------------------------------------------------------------
55
+ // 2. Relative reference: one or more leading "..::"
56
+ // -------------------------------------------------------------------------
57
+ if (ref.startsWith(PACKAGE_PARENT + PACKAGE_SEPARATOR)) {
58
+ const parts = ref.split(PACKAGE_SEPARATOR);
59
+ let levels = 0;
60
+ while (levels < parts.length && parts[levels] === PACKAGE_PARENT) {
61
+ levels++;
62
+ }
63
+ const pkgParts = contextPackage !== "" ? contextPackage.split(PACKAGE_SEPARATOR) : [];
64
+ const remainder = parts.slice(levels);
65
+ if (pkgParts.length < levels || remainder.length === 0) {
66
+ return undefined;
67
+ }
68
+ const allParts = [...pkgParts.slice(0, pkgParts.length - levels), ...remainder];
69
+ return findInTree(root, allParts.join(PACKAGE_SEPARATOR));
70
+ }
71
+ // -------------------------------------------------------------------------
72
+ // 3. Bare name OR same-package shorthand (contains "::" but no leading
73
+ // "::" or "..::"): try contextPackage prepend first, then root-rooted.
74
+ // -------------------------------------------------------------------------
75
+ if (contextPackage !== "") {
76
+ const found = findInTree(root, `${contextPackage}${PACKAGE_SEPARATOR}${ref}`);
77
+ if (found !== undefined)
78
+ return found;
79
+ }
80
+ return findInTree(root, ref);
81
+ }
82
+ /**
83
+ * Walk the tree and resolve every node's superRef against the full root.
84
+ * Used by Loader.loadJsonStrings as a second pass after all input files
85
+ * have been parsed with deferSuperResolution: true. Unresolved refs are
86
+ * collected and returned — caller decides whether to throw or warn.
87
+ *
88
+ * Tracks an inherited context package while walking so children whose own
89
+ * `package` is unset (e.g., fields inside an object) still resolve against
90
+ * the parent's package — matching the parser's eager-resolution semantics.
91
+ *
92
+ * Idempotent: nodes that already have superResolved set are skipped.
93
+ */
94
+ export function resolveDeferredSupers(root) {
95
+ const failures = [];
96
+ walk(root, "", (node, ctxPkg) => {
97
+ if (node.superRef === undefined)
98
+ return;
99
+ if (node.superResolved !== undefined)
100
+ return;
101
+ const effectivePkg = node.package ?? ctxPkg;
102
+ const target = resolveSuperRef(node.superRef, effectivePkg, root);
103
+ if (target !== undefined) {
104
+ try {
105
+ node.setSuperResolved(target);
106
+ }
107
+ catch {
108
+ // Frozen — ignore; the loader should resolve before freeze.
109
+ }
110
+ }
111
+ else {
112
+ failures.push({ nodeFqn: node.fqn(), ref: node.superRef });
113
+ }
114
+ });
115
+ return failures;
116
+ }
117
+ function walk(node, ctxPkg, visit) {
118
+ visit(node, ctxPkg);
119
+ const nextCtx = node.package ?? ctxPkg;
120
+ for (const child of node.ownChildren()) {
121
+ walk(child, nextCtx, visit);
122
+ }
123
+ }
124
+ //# sourceMappingURL=super-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-resolve.js","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@metaobjectsdev/metadata",
3
+ "version": "0.5.0-rc.1",
4
+ "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "bun": "./src/index.ts",
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./core": {
15
+ "bun": "./src/core/index.ts",
16
+ "types": "./dist/core/index.d.ts",
17
+ "default": "./dist/core/index.js"
18
+ }
19
+ },
20
+ "files": ["dist", "src", "README.md", "LICENSE"],
21
+ "scripts": {
22
+ "build": "tsc -p .",
23
+ "typecheck": "tsc -p tsconfig.typecheck.json",
24
+ "conformance:mutation": "stryker run"
25
+ },
26
+ "license": "Apache-2.0",
27
+ "author": "Doug Mealing <doug@dougmealing.com>",
28
+ "homepage": "https://metaobjects.dev",
29
+ "bugs": {
30
+ "url": "https://github.com/metaobjectsdev/metaobjects/issues"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/metaobjectsdev/metaobjects.git",
35
+ "directory": "server/typescript/packages/metadata"
36
+ },
37
+ "keywords": ["metaobjects", "metadata", "schema", "loader", "typescript"],
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "yaml": "^2.9.0"
43
+ },
44
+ "devDependencies": {
45
+ "@metaobjectsdev/conformance": "0.1.0",
46
+ "@stryker-mutator/core": "^9.6.1",
47
+ "bun-types": "latest",
48
+ "typescript": "^5.6.0"
49
+ }
50
+ }
@@ -0,0 +1,64 @@
1
+ // attr-class-map — dependency-free registry mapping each attr subtype to its
2
+ // concrete MetaAttr (sub)class.
3
+ //
4
+ // Why a registry (and not a static Map literal of class references): MetaData
5
+ // (the base of every node, including MetaAttr) must resolve an attr subclass in
6
+ // setAttr. If MetaData imported a module that imported the MetaAttr subclasses,
7
+ // that closes a module-eval cycle (meta-data → <map> → meta-attr → meta-data)
8
+ // and the `class MetaAttr extends MetaData` clause runs before MetaData is
9
+ // initialized (TDZ). To break it, this module imports NOTHING from the meta
10
+ // tree: each subclass registers ITSELF here (one self-registration line per
11
+ // subclass — the Open-Closed seam), and meta-data.ts reads back through this
12
+ // dependency-free leaf.
13
+
14
+ import type { TypeId } from "./registry.js";
15
+ import type { MetaData } from "./shared/meta-data.js";
16
+ import type { MetaAttr } from "./core/attr/meta-attr.js";
17
+
18
+ /** A general node constructor — kept assignable from AttrConstructor. */
19
+ export type NodeConstructor = new (typeId: TypeId, name: string) => MetaData;
20
+
21
+ /** A MetaAttr (sub)class constructor — narrower than NodeConstructor so callers
22
+ * can read `.dataType` off a probe instance and store the result in a
23
+ * Map<string, MetaAttr>. Assignable to NodeConstructor since MetaAttr extends
24
+ * MetaData. MetaAttr is imported type-only here so this module stays free of
25
+ * any meta-tree value import (type imports are erased — no eval cycle). */
26
+ export type AttrConstructor = new (typeId: TypeId, name: string) => MetaAttr;
27
+
28
+ /** Subtype → concrete attr subclass. Populated by each subclass at module load
29
+ * via registerAttrClass. The base MetaAttr is the fallback for unmapped
30
+ * (scalar/string) subtypes — see attrClassFor. */
31
+ export const ATTR_CLASS_MAP = new Map<string, AttrConstructor>();
32
+
33
+ /** Fallback constructor for unmapped subtypes (the base MetaAttr). Registered
34
+ * by meta-attr.ts at load so attrClassFor never returns undefined. */
35
+ let fallbackAttrClass: AttrConstructor | undefined;
36
+
37
+ /** Register a subtype → subclass mapping. Called by each attr subclass module
38
+ * at load time (`registerAttrClass(ATTR_SUBTYPE_X, XAttr)`). */
39
+ export function registerAttrClass(subType: string, ctor: AttrConstructor): void {
40
+ ATTR_CLASS_MAP.set(subType, ctor);
41
+ }
42
+
43
+ /** Register the base MetaAttr as the fallback for unmapped subtypes. Called once
44
+ * by meta-attr.ts at load. */
45
+ export function registerFallbackAttrClass(ctor: AttrConstructor): void {
46
+ fallbackAttrClass = ctor;
47
+ }
48
+
49
+ /** The concrete MetaAttr subclass for an attr subtype (default base MetaAttr).
50
+ * Used by MetaData.setAttr to materialize an undeclared attr as the right
51
+ * class, and by core-types to register the subtype's TypeDefinition. */
52
+ export function attrClassFor(subType: string): AttrConstructor {
53
+ const ctor = ATTR_CLASS_MAP.get(subType) ?? fallbackAttrClass;
54
+ if (ctor === undefined) {
55
+ throw new Error(
56
+ `Attr classes are not registered (no fallback set, and no class for subType '${subType}'). ` +
57
+ `The MetaAttr subclasses self-register as a module side-effect; a deep direct import that ` +
58
+ `bypasses the package entry can run MetaData.setAttr before they load. ` +
59
+ `Import the package entry ("@metaobjectsdev/metadata") or register the core types ` +
60
+ `(registerCoreTypes) before constructing/loading metadata.`,
61
+ );
62
+ }
63
+ return ctor;
64
+ }
@@ -0,0 +1,134 @@
1
+ // Phase A3 — attribute-schema validation pass.
2
+ //
3
+ // Consumes the per-(type, subType) attribute schema populated in core-types.ts
4
+ // (Phase A2). For each node in the loaded typed tree, looks up
5
+ // registry.attrsOf(node.type, node.subType) and checks the node's OWN
6
+ // @-attributes against that schema:
7
+ //
8
+ // 1. Required attrs present — every AttrSchema with required:true must
9
+ // have a matching attr on the node.
10
+ // 2. Declared attrs well-typed — for each @-attr ON the node that IS in the
11
+ // schema, its value must satisfy the
12
+ // MetaAttr instance's own validateValue.
13
+ // 3. allowedValues honored — declared attrs with a non-empty
14
+ // allowedValues set must hold a member value.
15
+ // 4. Undeclared attrs — NOT an error, NOT a warning (open policy).
16
+ //
17
+ // `default` values are NOT auto-applied — A3 is pure validation, not mutation.
18
+ //
19
+ // Checks 2+3 dispatch to the materialized MetaAttr instance: each attr is a
20
+ // MetaAttr that owns validateValue(value): ValueError[] (resolved by its
21
+ // subType, which the parser chose from the declared valueType). The central
22
+ // value-shape helper + the per-shape subtype sets are gone — value-shape
23
+ // knowledge now lives on the instance. The pass maps each ValueError to a
24
+ // ParseError with the unchanged ERR_BAD_ATTR_VALUE code, so conformance
25
+ // fixtures stay green.
26
+ //
27
+ // Modeled on src/subtype-rules.ts: a recursive walk producing an
28
+ // { errors, warnings } result. All A3 findings are ERRORS; warnings stays [].
29
+
30
+ import type { MetaData } from "./shared/meta-data.js";
31
+ import { ParseError } from "./errors.js";
32
+ import type { AttrSchema, TypeRegistry } from "./registry.js";
33
+
34
+ export interface AttrSchemaValidationResult {
35
+ errors: ParseError[];
36
+ warnings: string[];
37
+ }
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // Public entry point
41
+ // ---------------------------------------------------------------------------
42
+
43
+ export function validateAttrSchema(
44
+ root: MetaData,
45
+ registry: TypeRegistry,
46
+ ): AttrSchemaValidationResult {
47
+ const errors: ParseError[] = [];
48
+ walk(root, registry, errors);
49
+ return { errors, warnings: [] };
50
+ }
51
+
52
+ function walk(
53
+ node: MetaData,
54
+ registry: TypeRegistry,
55
+ errors: ParseError[],
56
+ ): void {
57
+ validateNode(node, registry, errors);
58
+ for (const child of node.ownChildren()) {
59
+ walk(child, registry, errors);
60
+ }
61
+ }
62
+
63
+ /** A node label for error messages, e.g. `origin.aggregate 'weekCount'`. */
64
+ function nodeLabel(node: MetaData): string {
65
+ const head = `${node.type}.${node.subType}`;
66
+ return node.name !== "" ? `${head} '${node.name}'` : head;
67
+ }
68
+
69
+ function validateNode(
70
+ node: MetaData,
71
+ registry: TypeRegistry,
72
+ errors: ParseError[],
73
+ ): void {
74
+ const schema = registry.attrsOf(node.type, node.subType);
75
+ if (schema.length === 0) return;
76
+
77
+ // Index the schema by attr name for the declared-attr checks below.
78
+ const byName = new Map<string, AttrSchema>();
79
+ for (const spec of schema) byName.set(spec.name, spec);
80
+
81
+ // --- Check 1: required attrs present ---
82
+ //
83
+ // Use attrs() (own + inherited via extends:) to determine presence.
84
+ // A node that legitimately inherits a required attr from its super must NOT be
85
+ // flagged as missing it — inherited attrs count as satisfying the requirement.
86
+ // Contrast with Checks 2+3 below, which iterate own attrs only: inherited attrs
87
+ // were already validated on the node that declared them, so re-checking would
88
+ // double-report. This mirrors the effective-vs-own split in subtype-rules.ts.
89
+ const effective = node.attrs();
90
+ for (const spec of schema) {
91
+ if (spec.required && !effective.has(spec.name)) {
92
+ errors.push(
93
+ new ParseError(
94
+ `${nodeLabel(node)} is missing required attribute '@${spec.name}'`,
95
+ { code: "ERR_MISSING_REQUIRED_ATTR" },
96
+ ),
97
+ );
98
+ }
99
+ }
100
+
101
+ // --- Checks 2 + 3: declared attrs on the node are well-typed + in range ---
102
+ for (const inst of node.ownMetaAttrs()) {
103
+ const spec = byName.get(inst.name);
104
+ if (spec === undefined) continue; // undeclared attr → open policy: ignore.
105
+ const value = inst.value;
106
+ if (value === undefined) continue;
107
+
108
+ // Check 2: the instance validates its own value shape. When the declared
109
+ // valueType is absent (e.g. @default), skip — any AttrValue is valid.
110
+ if (spec.valueType !== undefined) {
111
+ const valueErrors = inst.validateValue(value);
112
+ if (valueErrors.length > 0) {
113
+ for (const ve of valueErrors) {
114
+ errors.push(new ParseError(`${nodeLabel(node)} ${ve.message}`, { code: "ERR_BAD_ATTR_VALUE" }));
115
+ }
116
+ continue; // type wrong → skip allowedValues
117
+ }
118
+ }
119
+
120
+ // Check 3: allowedValues membership (unchanged).
121
+ if (spec.allowedValues !== undefined && spec.allowedValues.length > 0) {
122
+ if (!spec.allowedValues.includes(value)) {
123
+ errors.push(
124
+ new ParseError(
125
+ `${nodeLabel(node)} attribute '@${inst.name}' has value ` +
126
+ `'${String(value)}' which is not one of the allowed values: ` +
127
+ `${spec.allowedValues.map((v) => String(v)).join(", ")}`,
128
+ { code: "ERR_BAD_ATTR_VALUE" },
129
+ ),
130
+ );
131
+ }
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,31 @@
1
+ // Attr concern constants — subtypes for the attr.* type family.
2
+
3
+ import { SUBTYPE_BASE } from "../../shared/base-types.js";
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // Attr subtypes (10)
7
+ // ---------------------------------------------------------------------------
8
+
9
+ export const ATTR_SUBTYPE_STRING = "string";
10
+ export const ATTR_SUBTYPE_INT = "int";
11
+ export const ATTR_SUBTYPE_LONG = "long";
12
+ export const ATTR_SUBTYPE_DOUBLE = "double";
13
+ export const ATTR_SUBTYPE_BOOLEAN = "boolean";
14
+ export const ATTR_SUBTYPE_CLASS = "class";
15
+ export const ATTR_SUBTYPE_PROPERTIES = "properties";
16
+ export const ATTR_SUBTYPE_STRINGARRAY = "stringarray";
17
+ export const ATTR_SUBTYPE_FILTER = "filter";
18
+
19
+ export const ATTR_SUBTYPES = [
20
+ SUBTYPE_BASE,
21
+ ATTR_SUBTYPE_STRING,
22
+ ATTR_SUBTYPE_INT,
23
+ ATTR_SUBTYPE_LONG,
24
+ ATTR_SUBTYPE_DOUBLE,
25
+ ATTR_SUBTYPE_BOOLEAN,
26
+ ATTR_SUBTYPE_CLASS,
27
+ ATTR_SUBTYPE_PROPERTIES,
28
+ ATTR_SUBTYPE_STRINGARRAY,
29
+ ATTR_SUBTYPE_FILTER,
30
+ ] as const;
31
+ export type AttrSubType = (typeof ATTR_SUBTYPES)[number];
@@ -0,0 +1,67 @@
1
+ // FilterAttr — attr subtype `filter`. Object-shaped value; desugars a preset
2
+ // filter to canonical `{ field: { op: value } }` form (scalar→eq, array→in,
3
+ // null→isNull; or/and recurse). Moved here from parser-core.ts
4
+ // `normalizeFilterAttr` / `desugarFilterObject` / `desugarClause`.
5
+
6
+ import { MetaAttr, type ValueError, runtimeTypeName } from "./meta-attr.js";
7
+ import { type AttrValue, type AttrObject, type AttrJson } from "../../shared/meta-data.js";
8
+ import { DATA_TYPE_OBJECT, type DataType } from "../../data-type.js";
9
+ import { ATTR_SUBTYPE_FILTER } from "./attr-constants.js";
10
+ import {
11
+ FILTER_OP_EQ,
12
+ FILTER_OP_IN,
13
+ FILTER_OP_IS_NULL,
14
+ FILTER_COMPOSE_OR,
15
+ FILTER_COMPOSE_AND,
16
+ } from "../query/query-constants.js";
17
+ import { registerAttrClass } from "../../attr-class-map.js";
18
+
19
+ export class FilterAttr extends MetaAttr {
20
+ override get dataType(): DataType {
21
+ return DATA_TYPE_OBJECT;
22
+ }
23
+
24
+ override coerce(raw: unknown): AttrValue {
25
+ // Stored verbatim: an object is the canonical shape; a non-object (e.g. a
26
+ // legacy JSON string) is passed through unchanged so validateValue rejects it.
27
+ return raw as AttrValue;
28
+ }
29
+
30
+ override desugar(value: AttrValue): AttrValue {
31
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return value;
32
+ return desugarFilterObject(value as AttrObject);
33
+ }
34
+
35
+ override validateValue(value: AttrValue): ValueError[] {
36
+ return typeof value === "object" && value !== null && !Array.isArray(value)
37
+ ? []
38
+ : [{ message: `attribute '@${this.name}' must be of type 'filter' but got ${runtimeTypeName(value)}` }];
39
+ }
40
+ }
41
+
42
+ function desugarFilterObject(filter: AttrObject): AttrObject {
43
+ const out: Record<string, AttrJson> = {};
44
+ for (const [key, raw] of Object.entries(filter)) {
45
+ if (key === FILTER_COMPOSE_OR || key === FILTER_COMPOSE_AND) {
46
+ out[key] = Array.isArray(raw)
47
+ ? raw.map((sub: AttrJson) =>
48
+ typeof sub === "object" && sub !== null && !Array.isArray(sub)
49
+ ? desugarFilterObject(sub as AttrObject)
50
+ : sub,
51
+ )
52
+ : (raw as AttrJson);
53
+ continue;
54
+ }
55
+ out[key] = desugarClause(raw);
56
+ }
57
+ return out;
58
+ }
59
+
60
+ function desugarClause(raw: AttrJson): AttrObject {
61
+ if (raw === null) return { [FILTER_OP_IS_NULL]: true };
62
+ if (Array.isArray(raw)) return { [FILTER_OP_IN]: raw };
63
+ if (typeof raw === "object") return raw as AttrObject;
64
+ return { [FILTER_OP_EQ]: raw };
65
+ }
66
+
67
+ registerAttrClass(ATTR_SUBTYPE_FILTER, FilterAttr);