@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
package/src/index.ts ADDED
@@ -0,0 +1,165 @@
1
+ // Public API surface for @metaobjectsdev/metadata v0.2.0
2
+ //
3
+ // Architecture: one typed tree of concrete node classes organized under
4
+ // src/{core,persistence,presentation}/<concern>/, plus open type registry
5
+ // + JSON parser/serializer + Loader orchestration. Java-pattern aligned.
6
+ //
7
+ // See docs/strategy/2026-05-09-northstar-v4.md and
8
+ // docs/specs/2026-05-09-v0.2-ts-pillar.md for context.
9
+
10
+ // AnyMeta imports — kept here (not in src/shared/ or concern folders) to avoid circular imports.
11
+ // See the AnyMeta comment below for full explanation.
12
+ import type { MetaRoot } from "./shared/meta-root.js";
13
+ import type { MetaObject } from "./core/object/meta-object.js";
14
+ import type { MetaField } from "./core/field/meta-field.js";
15
+ import type { MetaIdentity } from "./core/identity/meta-identity.js";
16
+ import type { MetaRelationship } from "./core/relationship/meta-relationship.js";
17
+ import type { MetaValidator } from "./core/validator/meta-validator.js";
18
+ import type { MetaView } from "./presentation/view/meta-view.js";
19
+ import type { MetaAttr } from "./core/attr/meta-attr.js";
20
+ import type { MetaLayout } from "./presentation/layout/meta-layout.js";
21
+ import type { MetaSource } from "./persistence/source/meta-source.js";
22
+ import type { MetaOrigin } from "./persistence/origin/meta-origin.js";
23
+
24
+ // Constants — type names, subtype names, reserved keys, separators
25
+ export * from "./shared/base-types.js";
26
+ export * from "./shared/structural.js";
27
+ export * from "./core/object/object-constants.js";
28
+ export * from "./core/field/field-constants.js";
29
+ export * from "./core/attr/attr-constants.js";
30
+ export * from "./core/validator/validator-constants.js";
31
+ export * from "./core/identity/identity-constants.js";
32
+ export * from "./core/relationship/relationship-constants.js";
33
+ export * from "./core/query/query-constants.js";
34
+ export * from "./persistence/source/source-constants.js";
35
+ export * from "./persistence/origin/origin-constants.js";
36
+ export * from "./persistence/db/db-constants.js";
37
+ export * from "./presentation/view/view-constants.js";
38
+ export * from "./presentation/layout/layout-constants.js";
39
+
40
+ // MetaData node base — abstract class; also exports AttrValue
41
+ export { MetaData } from "./shared/meta-data.js";
42
+ export type { AttrValue } from "./shared/meta-data.js";
43
+
44
+ // Shared node classes
45
+ export { MetaRoot } from "./shared/meta-root.js";
46
+
47
+ // Core node classes
48
+ export { MetaObject } from "./core/object/meta-object.js";
49
+ export { MetaField } from "./core/field/meta-field.js";
50
+ export { MetaAttr } from "./core/attr/meta-attr.js";
51
+ // Identity: base + subtype-specific
52
+ export {
53
+ MetaIdentity,
54
+ MetaPrimaryIdentity,
55
+ MetaSecondaryIdentity,
56
+ MetaReferenceIdentity,
57
+ } from "./core/identity/meta-identity.js";
58
+ export type { IdentityGeneration } from "./core/identity/meta-identity.js";
59
+ // Relationship
60
+ export { MetaRelationship } from "./core/relationship/meta-relationship.js";
61
+ // Cross-entity reference lookup
62
+ export { findReferenceBetween } from "./core/relationship/find-reference.js";
63
+ export type { ReferenceLookup } from "./core/relationship/find-reference.js";
64
+ // Validator: base + subtype-specific
65
+ export {
66
+ MetaValidator,
67
+ MetaRequiredValidator,
68
+ MetaLengthValidator,
69
+ MetaRegexValidator,
70
+ MetaNumericValidator,
71
+ MetaArrayValidator,
72
+ } from "./core/validator/meta-validator.js";
73
+
74
+ // Persistence node classes
75
+ export { MetaSource } from "./persistence/source/meta-source.js";
76
+ // Origin: base + subtype-specific
77
+ export {
78
+ MetaOrigin,
79
+ MetaPassthroughOrigin,
80
+ MetaAggregateOrigin,
81
+ } from "./persistence/origin/meta-origin.js";
82
+
83
+ // Presentation node classes
84
+ export { MetaView } from "./presentation/view/meta-view.js";
85
+ export { MetaLayout } from "./presentation/layout/meta-layout.js";
86
+
87
+ // AnyMeta — union of all concrete node types.
88
+ // Defined here (not in a shared concern folder) to avoid a circular import:
89
+ // each concrete class file imports MetaData from meta-data.ts; a shared
90
+ // any-meta.ts would need to import all of them, and they'd need to import it
91
+ // — creating a cycle. index.ts is the natural resolution point: it already
92
+ // re-exports every class.
93
+ export type AnyMeta =
94
+ | MetaRoot
95
+ | MetaObject
96
+ | MetaField
97
+ | MetaIdentity
98
+ | MetaRelationship
99
+ | MetaValidator
100
+ | MetaView
101
+ | MetaAttr
102
+ | MetaLayout
103
+ | MetaSource
104
+ | MetaOrigin;
105
+
106
+ // Registry
107
+ export { TypeId, TypeRegistry, childRuleMatches } from "./registry.js";
108
+ export type { AttrSchema, ChildRule, TypeDefinition } from "./registry.js";
109
+ export { registerCoreTypes, coreTypesProvider, coreProviders } from "./core-types.js";
110
+ export { dbProvider } from "./persistence/db/db-provider.js";
111
+
112
+ // Type provider model
113
+ export { composeRegistry } from "./provider.js";
114
+ export type { MetaDataTypeProvider } from "./provider.js";
115
+
116
+ // DataType classification
117
+ export {
118
+ DATA_TYPES,
119
+ DATA_TYPE_BOOLEAN, DATA_TYPE_INT, DATA_TYPE_LONG, DATA_TYPE_DOUBLE,
120
+ DATA_TYPE_STRING, DATA_TYPE_DATE, DATA_TYPE_OBJECT,
121
+ } from "./data-type.js";
122
+ export type { DataType, DataTypeAware } from "./data-type.js";
123
+
124
+ // Metadata-driven object serializer
125
+ export { objectToJson, jsonToObject } from "./object-serializer.js";
126
+ export type { ObjectSerializeOptions } from "./object-serializer.js";
127
+
128
+ // Data converter — convert a value to a known DataType (no inference)
129
+ export { convertToDataType, toAttrValue } from "./data-converter.js";
130
+
131
+ // Parser — shared core builder + per-format front-ends
132
+ export { buildTree } from "./parser-core.js";
133
+ export type { ParseOptions, ParseResult } from "./parser-core.js";
134
+ export { parseJson } from "./parser-json.js";
135
+
136
+ // Serializer
137
+ export { serializeJson, canonicalSerialize, inferAttrSubType } from "./serializer-json.js";
138
+ export type { SerializeOptions } from "./serializer-json.js";
139
+
140
+ // Super resolution helper (most resolution moved into parser; this is the lookup utility)
141
+ export { resolveSuperRef } from "./super-resolve.js";
142
+
143
+ // Loader hierarchy
144
+ export { MetaDataLoader } from "./loader/meta-data-loader.js";
145
+ export type { LoadOptions, LoadResult, LoadingState } from "./loader/meta-data-loader.js";
146
+ export { InMemorySource } from "./loader/meta-data-source.js";
147
+ export type { MetaDataSource, MetaDataFormat } from "./loader/meta-data-source.js";
148
+
149
+ // Errors
150
+ export { ParseError, MetaModelError, ERROR_CODES } from "./errors.js";
151
+ export type { ErrorCode } from "./errors.js";
152
+
153
+ // Attribute-schema validation pass (Phase A3)
154
+ export { validateAttrSchema } from "./attr-schema-validate.js";
155
+ export type { AttrSchemaValidationResult } from "./attr-schema-validate.js";
156
+
157
+ // Naming — hoisted from runtime-ts in v0.2.3 so multiple consumers (runtime-ts, migrate-ts, codegen-ts)
158
+ // share identical name resolution. See spec §4.1.
159
+ export {
160
+ toSnakeCase, pluralize,
161
+ resolveTableName, resolveColumnName, resolveTableSchema,
162
+ buildNameMap,
163
+ stripPackage,
164
+ } from "./naming.js";
165
+ export type { EntityNameMap } from "./naming.js";
@@ -0,0 +1,307 @@
1
+ // MetaDataLoader — loader with full load pipeline.
2
+ //
3
+ // Owns the load pipeline contract, lifecycle state, and accessor members.
4
+ // The load() method sequences MetaDataSource reads into one accumulating tree,
5
+ // using the parser's `intoRoot` param for merge-during-parse.
6
+ //
7
+ // Java MetaDataLoader lifecycle phases: UNINITIALIZED → LOADING → LOADED → ERROR.
8
+ // Reads call _checkStateForRead() to enforce "loaded before read."
9
+
10
+ import type { MetaData } from "../shared/meta-data.js";
11
+ import { MetaRoot } from "../shared/meta-root.js";
12
+ import { TypeId, TypeRegistry } from "../registry.js";
13
+ import { coreProviders } from "../core-types.js";
14
+ import { composeRegistry } from "../provider.js";
15
+ import { TYPE_METADATA, SUBTYPE_ROOT } from "../shared/base-types.js";
16
+ import { ParseError } from "../errors.js";
17
+ import { parseJson } from "../parser-json.js";
18
+ import { validateDataGridSortFields, validateFilterableHasIndex, validateOriginPaths, validateDataGridFilterValues } from "./validation-passes.js";
19
+ import { resolveDeferredSupers } from "../super-resolve.js";
20
+ import { validateSubtypeRules } from "../subtype-rules.js";
21
+ import { validateAttrSchema } from "../attr-schema-validate.js";
22
+ import type { MetaDataSource } from "./meta-data-source.js";
23
+ import type { ParseOptions, ParseResult } from "../parser-core.js";
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // Public API types
27
+ // ---------------------------------------------------------------------------
28
+
29
+ /** Loader lifecycle state. Mirrors Java's MetaDataLoader phase enum. */
30
+ export type LoadingState = "uninitialized" | "loading" | "loaded" | "error";
31
+
32
+ export interface LoadOptions {
33
+ /** TypeRegistry to use; defaults to a fresh registry pre-populated via composeRegistry(coreProviders). */
34
+ registry?: TypeRegistry;
35
+ /** Freeze the loaded tree after parsing. Default true. */
36
+ freeze?: boolean;
37
+ /** Strict parsing mode — passed through to parser. Default false. */
38
+ strict?: boolean;
39
+ }
40
+
41
+ export interface LoadResult {
42
+ root: MetaRoot;
43
+ warnings: string[];
44
+ errors: Error[];
45
+ }
46
+
47
+ // ---------------------------------------------------------------------------
48
+ // Synthetic empty root (used when all sources fail to parse)
49
+ // ---------------------------------------------------------------------------
50
+
51
+ function makeSyntheticRoot(): MetaRoot {
52
+ return new MetaRoot(new TypeId(TYPE_METADATA, SUBTYPE_ROOT), "");
53
+ }
54
+
55
+ // ---------------------------------------------------------------------------
56
+ // MetaDataLoader class
57
+ // ---------------------------------------------------------------------------
58
+
59
+ export class MetaDataLoader {
60
+ private readonly _registry: TypeRegistry;
61
+ private readonly _freeze: boolean;
62
+ private readonly _strict: boolean;
63
+
64
+ private _state: LoadingState = "uninitialized";
65
+ private _root: MetaRoot | undefined;
66
+
67
+ constructor(opts?: LoadOptions) {
68
+ this._registry = opts?.registry ?? MetaDataLoader._defaultRegistry();
69
+ this._freeze = opts?.freeze !== false; // default true
70
+ this._strict = opts?.strict === true; // default false
71
+ }
72
+
73
+ private static _defaultRegistry(): TypeRegistry {
74
+ return composeRegistry(coreProviders);
75
+ }
76
+
77
+ // ---------------------------------------------------------------------------
78
+ // Lifecycle
79
+ // ---------------------------------------------------------------------------
80
+
81
+ /** Current loading state. */
82
+ get state(): LoadingState {
83
+ return this._state;
84
+ }
85
+
86
+ /**
87
+ * The TypeRegistry this MetaDataLoader uses to look up type definitions.
88
+ * Either the one passed in via constructor, or the default registry
89
+ * pre-populated with core types via composeRegistry(coreProviders).
90
+ *
91
+ * Exposed for downstream consumers (codegen, runtime libraries) that
92
+ * need to introspect registered types.
93
+ */
94
+ get registry(): TypeRegistry {
95
+ return this._registry;
96
+ }
97
+
98
+ /**
99
+ * Returns the loaded root MetaRoot.
100
+ * Accessible once load() has completed, in either "loaded" or "error" state.
101
+ * Throws only before or during loading (state "uninitialized" or "loading").
102
+ */
103
+ get root(): MetaRoot {
104
+ this._checkStateForRead();
105
+ return this._root!;
106
+ }
107
+
108
+ /**
109
+ * Guards read accessors — throws only when loading has not yet completed
110
+ * (state "uninitialized" or "loading"). Both "loaded" and "error" states
111
+ * are valid for reads: load() always sets _root before returning.
112
+ */
113
+ private _checkStateForRead(): void {
114
+ if (this._state === "uninitialized" || this._state === "loading") {
115
+ throw new Error(
116
+ `MetaDataLoader.root accessed before loading has completed (state: "${this._state}"). ` +
117
+ `Call load() first.`,
118
+ );
119
+ }
120
+ }
121
+
122
+ // ---------------------------------------------------------------------------
123
+ // Convenience accessors (mirror Java's MetaDataLoader getChildOfType etc.)
124
+ // ---------------------------------------------------------------------------
125
+
126
+ /**
127
+ * Returns the first child of the root with the given name, or undefined.
128
+ * Throws if not yet loaded.
129
+ */
130
+ findByName(name: string): MetaData | undefined {
131
+ this._checkStateForRead();
132
+ return this._root!.ownChildByName(name);
133
+ }
134
+
135
+ /**
136
+ * Returns the first child of the root with the given (type, name), or undefined.
137
+ * Throws if not yet loaded.
138
+ */
139
+ findByTypeAndName(type: string, name: string): MetaData | undefined {
140
+ this._checkStateForRead();
141
+ return this._root!.ownChildByTypeAndName(type, name);
142
+ }
143
+
144
+ /**
145
+ * Returns all direct children of the root with the given type.
146
+ * Throws if not yet loaded.
147
+ */
148
+ childrenOfType(type: string): MetaData[] {
149
+ this._checkStateForRead();
150
+ return this._root!.ownChildrenOfType(type);
151
+ }
152
+
153
+ // ---------------------------------------------------------------------------
154
+ // parseSource — overridable format dispatch seam
155
+ // ---------------------------------------------------------------------------
156
+
157
+ /**
158
+ * Parse one source's raw content into a ParseResult. The base loader handles
159
+ * JSON only; a non-JSON format throws. Subclasses override this seam to add
160
+ * formats — e.g. FileMetaDataLoader (in @metaobjectsdev/metadata/core) adds YAML.
161
+ * This keeps the browser-safe base loader free of the YAML parser.
162
+ */
163
+ protected parseSource(
164
+ content: string,
165
+ source: MetaDataSource,
166
+ parseOpts: ParseOptions,
167
+ ): ParseResult {
168
+ if (source.format === "json") {
169
+ return parseJson(content, parseOpts);
170
+ }
171
+ throw new Error(
172
+ `MetaDataLoader parses JSON only; format "${source.format}" for source ` +
173
+ `"${source.id}" requires FileMetaDataLoader (from @metaobjectsdev/metadata/core)`,
174
+ );
175
+ }
176
+
177
+ // ---------------------------------------------------------------------------
178
+ // load — async pipeline over MetaDataSource[]
179
+ // ---------------------------------------------------------------------------
180
+
181
+ /**
182
+ * Load metadata from one or more MetaDataSource instances. Sources are read
183
+ * in order; each source's content is parsed and merged into the accumulating
184
+ * root using the parser's `intoRoot` mechanism.
185
+ *
186
+ * Source read failures are collected in errors[] — no throw. If all sources
187
+ * fail (read or parse), a synthetic empty root is returned.
188
+ *
189
+ * This is a one-shot pipeline — calling load() again on the same loader
190
+ * after it has completed (state "loaded" or "error") throws.
191
+ */
192
+ async load(sources: MetaDataSource[]): Promise<LoadResult> {
193
+ // Disallow re-use after a completed load (matches Java MetaDataLoader's
194
+ // INITIALIZED-once contract). Loader is a one-shot pipeline.
195
+ if (this._state === "loaded" || this._state === "error") {
196
+ throw new Error(
197
+ "MetaDataLoader cannot be reused after load completes. Construct a new MetaDataLoader for additional loads.",
198
+ );
199
+ }
200
+
201
+ this._state = "loading";
202
+ const warnings: string[] = [];
203
+ const errors: Error[] = [];
204
+
205
+ let root: MetaRoot | undefined;
206
+
207
+ // Parse all sources with super resolution DEFERRED so cross-file super
208
+ // refs work — one source may declare a super target that's defined in a
209
+ // source parsed later. A second pass (resolveDeferredSupers) resolves
210
+ // everything against the fully-merged root.
211
+ for (const source of sources) {
212
+ let content: string;
213
+ try {
214
+ content = await source.read();
215
+ } catch (err) {
216
+ errors.push(
217
+ err instanceof Error
218
+ ? err
219
+ : new Error(`Failed to read source "${source.id}": ${String(err)}`),
220
+ );
221
+ continue;
222
+ }
223
+
224
+ // Build parser options, honoring exactOptionalPropertyTypes — only include
225
+ // sourceName / intoRoot keys when defined.
226
+ const parseOpts: Parameters<typeof parseJson>[1] = {
227
+ registry: this._registry,
228
+ strict: this._strict,
229
+ deferSuperResolution: true,
230
+ sourceName: source.id,
231
+ };
232
+ if (root !== undefined) parseOpts.intoRoot = root;
233
+
234
+ try {
235
+ const parseResult = this.parseSource(content, source, parseOpts);
236
+ warnings.push(...parseResult.warnings);
237
+ errors.push(...parseResult.errors);
238
+ root = parseResult.root;
239
+ } catch (err) {
240
+ errors.push(
241
+ err instanceof Error
242
+ ? err
243
+ : new Error(`Parse error in "${source.id}": ${String(err)}`),
244
+ );
245
+ }
246
+ }
247
+
248
+ // Second pass: resolve every deferred super ref against the full tree.
249
+ // Unresolved refs are always errors (matches the original eager-throw
250
+ // behavior — broken metadata is broken regardless of strict mode).
251
+ if (root !== undefined) {
252
+ const failures = resolveDeferredSupers(root);
253
+ for (const failure of failures) {
254
+ errors.push(
255
+ new ParseError(
256
+ `the SuperClass '${failure.ref}' does not exist (referenced by ${failure.nodeFqn})`,
257
+ { code: "ERR_UNRESOLVED_SUPER" },
258
+ ),
259
+ );
260
+ }
261
+
262
+ // Third pass: subtype rule validation (entity should have primary identity,
263
+ // value must not have one).
264
+ const ruleResult = validateSubtypeRules(root);
265
+ errors.push(...ruleResult.errors);
266
+ warnings.push(...ruleResult.warnings);
267
+
268
+ // Fourth pass: data-grid @defaultSortField cross-reference validation.
269
+ errors.push(...validateDataGridSortFields(root));
270
+
271
+ // Fifth pass: @filterable without index drift warning.
272
+ warnings.push(...validateFilterableHasIndex(root));
273
+
274
+ // Sixth pass: origin path validation — validates passthrough.@from,
275
+ // aggregate.@of, and .@via relationship chains.
276
+ errors.push(...validateOriginPaths(root));
277
+
278
+ // Seventh pass: @filter value validation — fields filterable + ops allowed per subtype.
279
+ errors.push(...validateDataGridFilterValues(root));
280
+
281
+ // Eighth pass: attribute-schema validation (Phase A3) — checks each
282
+ // node's @-attributes against its (type, subType) AttrSchema: required
283
+ // attrs present, declared attrs well-typed, allowedValues honored.
284
+ const attrSchemaResult = validateAttrSchema(root, this._registry);
285
+ errors.push(...attrSchemaResult.errors);
286
+ warnings.push(...attrSchemaResult.warnings);
287
+ }
288
+
289
+ // If nothing parsed successfully, synthesize an empty root so callers
290
+ // always get a valid MetaData. The state captures whether errors occurred.
291
+ if (root === undefined) {
292
+ root = makeSyntheticRoot();
293
+ this._state = errors.length > 0 ? "error" : "loaded";
294
+ } else {
295
+ this._state = "loaded";
296
+ }
297
+
298
+ // Freeze applies to BOTH paths — synthetic-root callers shouldn't get a
299
+ // mutable model just because their inputs failed.
300
+ if (this._freeze) {
301
+ root.freeze();
302
+ }
303
+
304
+ this._root = root;
305
+ return { root, warnings, errors };
306
+ }
307
+ }
@@ -0,0 +1,35 @@
1
+ // MetaDataSource — the raw-document unit consumed by the loader pipeline.
2
+ //
3
+ // A loader (FileMetaDataLoader, later UrlMetaDataLoader) discovers/acquires
4
+ // sources; the MetaDataLoader pipeline calls read() on each. read() is async
5
+ // so file/URL sources can do I/O; InMemorySource resolves immediately.
6
+
7
+ /** Format of a source's content. Selects the parser. */
8
+ export type MetaDataFormat = "json" | "yaml";
9
+
10
+ /** One unit of raw metadata input. */
11
+ export interface MetaDataSource {
12
+ /** Human-readable identifier — used in parse-error messages (e.g. a filename). */
13
+ readonly id: string;
14
+ /** Content format hint — selects the parser. */
15
+ readonly format: MetaDataFormat;
16
+ /** Resolve the raw content. May perform I/O. */
17
+ read(): Promise<string>;
18
+ }
19
+
20
+ /** A metadata source backed by an in-memory string. */
21
+ export class InMemorySource implements MetaDataSource {
22
+ readonly id: string;
23
+ readonly format: MetaDataFormat;
24
+ private readonly _content: string;
25
+
26
+ constructor(content: string, opts?: { id?: string; format?: MetaDataFormat }) {
27
+ this._content = content;
28
+ this.id = opts?.id ?? "<in-memory>";
29
+ this.format = opts?.format ?? "json";
30
+ }
31
+
32
+ read(): Promise<string> {
33
+ return Promise.resolve(this._content);
34
+ }
35
+ }