@iamjulianacosta/mobx-data 1.1.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/README.md +273 -102
  2. package/dist/{CacheHandler-BTU_rYkv.js → CacheHandler-BhfbVHed.js} +17 -20
  3. package/dist/CacheHandler-BhfbVHed.js.map +1 -0
  4. package/dist/{CacheHandler-CXgY9IJo.cjs → CacheHandler-Q5VXOgh9.cjs} +2 -2
  5. package/dist/CacheHandler-Q5VXOgh9.cjs.map +1 -0
  6. package/dist/EmbeddedRecordsMixin-6mSCXsJ3.js +173 -0
  7. package/dist/EmbeddedRecordsMixin-6mSCXsJ3.js.map +1 -0
  8. package/dist/EmbeddedRecordsMixin-BkF7MdbY.cjs +2 -0
  9. package/dist/EmbeddedRecordsMixin-BkF7MdbY.cjs.map +1 -0
  10. package/dist/{JsonApiSerializer-wndq5a1n.js → JsonApiSerializer-BV61cFAZ.js} +3 -3
  11. package/dist/JsonApiSerializer-BV61cFAZ.js.map +1 -0
  12. package/dist/{JsonApiSerializer-Bc4iQB0d.cjs → JsonApiSerializer-Dt_Y_FIo.cjs} +2 -2
  13. package/dist/JsonApiSerializer-Dt_Y_FIo.cjs.map +1 -0
  14. package/dist/JsonSerializer-BzUCyUSf.cjs +2 -0
  15. package/dist/JsonSerializer-BzUCyUSf.cjs.map +1 -0
  16. package/dist/JsonSerializer-CFqo6GjC.js +98 -0
  17. package/dist/JsonSerializer-CFqo6GjC.js.map +1 -0
  18. package/dist/MdqlMemoryExecutor-BUlsalKm.cjs +2 -0
  19. package/dist/MdqlMemoryExecutor-BUlsalKm.cjs.map +1 -0
  20. package/dist/MdqlMemoryExecutor-BWMP31zG.js +127 -0
  21. package/dist/MdqlMemoryExecutor-BWMP31zG.js.map +1 -0
  22. package/dist/{MemoryAdapter-ni25N4H0.js → MemoryAdapter-BW1HKixm.js} +2 -2
  23. package/dist/{MemoryAdapter-ni25N4H0.js.map → MemoryAdapter-BW1HKixm.js.map} +1 -1
  24. package/dist/{MemoryAdapter-BTK2D64s.cjs → MemoryAdapter-C8iXAa2v.cjs} +2 -2
  25. package/dist/{MemoryAdapter-BTK2D64s.cjs.map → MemoryAdapter-C8iXAa2v.cjs.map} +1 -1
  26. package/dist/{ODataAdapter-DAja_jKM.js → ODataAdapter-CeBJblLQ.js} +25 -22
  27. package/dist/ODataAdapter-CeBJblLQ.js.map +1 -0
  28. package/dist/{ODataAdapter-lMifLyLD.cjs → ODataAdapter-DdE6MWkG.cjs} +2 -2
  29. package/dist/ODataAdapter-DdE6MWkG.cjs.map +1 -0
  30. package/dist/RestAdapter-D7GSrsJo.cjs +2 -0
  31. package/dist/RestAdapter-D7GSrsJo.cjs.map +1 -0
  32. package/dist/{RestAdapter-CGWqOR_G.js → RestAdapter-DYUoyV5h.js} +112 -77
  33. package/dist/RestAdapter-DYUoyV5h.js.map +1 -0
  34. package/dist/SchemaService-C_pkh-vI.js +180 -0
  35. package/dist/SchemaService-C_pkh-vI.js.map +1 -0
  36. package/dist/SchemaService-DbJLoYb9.cjs +2 -0
  37. package/dist/SchemaService-DbJLoYb9.cjs.map +1 -0
  38. package/dist/Serializer-Bap9U-kR.cjs +2 -0
  39. package/dist/Serializer-Bap9U-kR.cjs.map +1 -0
  40. package/dist/{Serializer-FxJbsZ50.js → Serializer-Ca6w_QNQ.js} +63 -49
  41. package/dist/Serializer-Ca6w_QNQ.js.map +1 -0
  42. package/dist/adapter/index.cjs +1 -1
  43. package/dist/adapter/index.js +2 -2
  44. package/dist/cache/cache-utils.d.ts +1 -1
  45. package/dist/cache/cache-utils.d.ts.map +1 -1
  46. package/dist/createStore-7PecKT54.cjs +2 -0
  47. package/dist/createStore-7PecKT54.cjs.map +1 -0
  48. package/dist/createStore-BfmRfZ_2.js +1229 -0
  49. package/dist/createStore-BfmRfZ_2.js.map +1 -0
  50. package/dist/date-Bj4O2W1F.js.map +1 -1
  51. package/dist/date-CRCe-9gf.cjs.map +1 -1
  52. package/dist/decorators-CKneHgoF.js +56 -0
  53. package/dist/decorators-CKneHgoF.js.map +1 -0
  54. package/dist/decorators-DCVYKzrL.cjs +2 -0
  55. package/dist/decorators-DCVYKzrL.cjs.map +1 -0
  56. package/dist/index.cjs +1 -1
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.ts +2 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +100 -90
  61. package/dist/index.js.map +1 -1
  62. package/dist/inspector/ConsoleInspector.d.ts +49 -0
  63. package/dist/inspector/ConsoleInspector.d.ts.map +1 -0
  64. package/dist/inspector/DevToolsBridge.d.ts +21 -0
  65. package/dist/inspector/DevToolsBridge.d.ts.map +1 -0
  66. package/dist/inspector/QueryParser.d.ts +21 -0
  67. package/dist/inspector/QueryParser.d.ts.map +1 -0
  68. package/dist/inspector/StoreInspector.d.ts +31 -0
  69. package/dist/inspector/StoreInspector.d.ts.map +1 -0
  70. package/dist/inspector/index.cjs +17 -0
  71. package/dist/inspector/index.cjs.map +1 -0
  72. package/dist/inspector/index.d.ts +9 -0
  73. package/dist/inspector/index.d.ts.map +1 -0
  74. package/dist/inspector/index.js +896 -0
  75. package/dist/inspector/index.js.map +1 -0
  76. package/dist/inspector/integration.d.ts +15 -0
  77. package/dist/inspector/integration.d.ts.map +1 -0
  78. package/dist/inspector/serialization.d.ts +7 -0
  79. package/dist/inspector/serialization.d.ts.map +1 -0
  80. package/dist/inspector/types.d.ts +139 -0
  81. package/dist/inspector/types.d.ts.map +1 -0
  82. package/dist/json-api/index.cjs +1 -1
  83. package/dist/json-api/index.js +1 -1
  84. package/dist/mdql/MdqlMemoryExecutor.d.ts +17 -0
  85. package/dist/mdql/MdqlMemoryExecutor.d.ts.map +1 -0
  86. package/dist/mdql/MdqlQueryBuilder.d.ts +38 -0
  87. package/dist/mdql/MdqlQueryBuilder.d.ts.map +1 -0
  88. package/dist/mdql/MdqlValidator.d.ts +13 -0
  89. package/dist/mdql/MdqlValidator.d.ts.map +1 -0
  90. package/dist/mdql/index.d.ts +6 -0
  91. package/dist/mdql/index.d.ts.map +1 -0
  92. package/dist/mdql/types.d.ts +48 -0
  93. package/dist/mdql/types.d.ts.map +1 -0
  94. package/dist/model/Model.d.ts +4 -0
  95. package/dist/model/Model.d.ts.map +1 -1
  96. package/dist/model/Snapshot.d.ts +2 -0
  97. package/dist/model/Snapshot.d.ts.map +1 -1
  98. package/dist/model/index.cjs +1 -1
  99. package/dist/model/index.js +1 -1
  100. package/dist/odata/ODataAdapter.d.ts.map +1 -1
  101. package/dist/odata/index.cjs +1 -1
  102. package/dist/odata/index.js +1 -1
  103. package/dist/relationships-BgM0NKdb.cjs +2 -0
  104. package/dist/relationships-BgM0NKdb.cjs.map +1 -0
  105. package/dist/{relationships-BEXANmWg.js → relationships-DvSi8fVN.js} +37 -28
  106. package/dist/relationships-DvSi8fVN.js.map +1 -0
  107. package/dist/request/CacheHandler.d.ts.map +1 -1
  108. package/dist/request/index.cjs +1 -1
  109. package/dist/request/index.js +1 -1
  110. package/dist/schema/SchemaService.d.ts +38 -1
  111. package/dist/schema/SchemaService.d.ts.map +1 -1
  112. package/dist/schema/decorators.d.ts +20 -1
  113. package/dist/schema/decorators.d.ts.map +1 -1
  114. package/dist/schema/index.cjs +1 -1
  115. package/dist/schema/index.d.ts +1 -1
  116. package/dist/schema/index.d.ts.map +1 -1
  117. package/dist/schema/index.js +10 -8
  118. package/dist/schema/types.d.ts +31 -0
  119. package/dist/schema/types.d.ts.map +1 -1
  120. package/dist/serializer/JsonSerializer.d.ts +2 -0
  121. package/dist/serializer/JsonSerializer.d.ts.map +1 -1
  122. package/dist/serializer/Serializer.d.ts +9 -0
  123. package/dist/serializer/Serializer.d.ts.map +1 -1
  124. package/dist/serializer/index.cjs +1 -1
  125. package/dist/serializer/index.js +6 -5
  126. package/dist/serializer/index.js.map +1 -1
  127. package/dist/store/Store.d.ts +3 -0
  128. package/dist/store/Store.d.ts.map +1 -1
  129. package/dist/store/createStore.d.ts +12 -0
  130. package/dist/store/createStore.d.ts.map +1 -0
  131. package/dist/store/index.cjs +1 -1
  132. package/dist/store/index.d.ts +1 -0
  133. package/dist/store/index.d.ts.map +1 -1
  134. package/dist/store/index.js +5 -4
  135. package/dist/types-CC2fG3FP.js +8 -0
  136. package/dist/types-CC2fG3FP.js.map +1 -0
  137. package/dist/types-DCLy5XYj.cjs +2 -0
  138. package/dist/types-DCLy5XYj.cjs.map +1 -0
  139. package/package.json +7 -1
  140. package/src/cache/cache-utils.ts +4 -4
  141. package/src/index.ts +3 -0
  142. package/src/inspector/ConsoleInspector.ts +470 -0
  143. package/src/inspector/DevToolsBridge.ts +214 -0
  144. package/src/inspector/QueryParser.ts +343 -0
  145. package/src/inspector/StoreInspector.ts +162 -0
  146. package/src/inspector/index.ts +20 -0
  147. package/src/inspector/integration.ts +56 -0
  148. package/src/inspector/serialization.ts +100 -0
  149. package/src/inspector/types.ts +161 -0
  150. package/src/mdql/MdqlMemoryExecutor.ts +229 -0
  151. package/src/mdql/MdqlQueryBuilder.ts +170 -0
  152. package/src/mdql/MdqlValidator.ts +193 -0
  153. package/src/mdql/index.ts +21 -0
  154. package/src/mdql/types.ts +107 -0
  155. package/src/model/Model.ts +15 -0
  156. package/src/model/Snapshot.ts +3 -0
  157. package/src/odata/ODataAdapter.ts +4 -1
  158. package/src/request/CacheHandler.ts +2 -6
  159. package/src/schema/SchemaService.ts +123 -1
  160. package/src/schema/decorators.ts +29 -0
  161. package/src/schema/index.ts +1 -1
  162. package/src/schema/types.ts +34 -0
  163. package/src/serializer/JsonSerializer.ts +14 -2
  164. package/src/serializer/Serializer.ts +24 -1
  165. package/src/store/Store.ts +61 -18
  166. package/src/store/createStore.ts +39 -0
  167. package/src/store/index.ts +1 -0
  168. package/dist/CacheHandler-BTU_rYkv.js.map +0 -1
  169. package/dist/CacheHandler-CXgY9IJo.cjs.map +0 -1
  170. package/dist/EmbeddedRecordsMixin-CBvqNdgC.cjs +0 -2
  171. package/dist/EmbeddedRecordsMixin-CBvqNdgC.cjs.map +0 -1
  172. package/dist/EmbeddedRecordsMixin-VoHluHCT.js +0 -261
  173. package/dist/EmbeddedRecordsMixin-VoHluHCT.js.map +0 -1
  174. package/dist/JsonApiSerializer-Bc4iQB0d.cjs.map +0 -1
  175. package/dist/JsonApiSerializer-wndq5a1n.js.map +0 -1
  176. package/dist/ODataAdapter-DAja_jKM.js.map +0 -1
  177. package/dist/ODataAdapter-lMifLyLD.cjs.map +0 -1
  178. package/dist/RestAdapter-1V94stW-.cjs +0 -2
  179. package/dist/RestAdapter-1V94stW-.cjs.map +0 -1
  180. package/dist/RestAdapter-CGWqOR_G.js.map +0 -1
  181. package/dist/SchemaService-DZwkFgZu.js +0 -102
  182. package/dist/SchemaService-DZwkFgZu.js.map +0 -1
  183. package/dist/SchemaService-Di_yjVzU.cjs +0 -2
  184. package/dist/SchemaService-Di_yjVzU.cjs.map +0 -1
  185. package/dist/Serializer-95gi5edy.cjs +0 -2
  186. package/dist/Serializer-95gi5edy.cjs.map +0 -1
  187. package/dist/Serializer-FxJbsZ50.js.map +0 -1
  188. package/dist/Store-KvjmBTQ9.cjs +0 -2
  189. package/dist/Store-KvjmBTQ9.cjs.map +0 -1
  190. package/dist/Store-mvrDLQEZ.js +0 -957
  191. package/dist/Store-mvrDLQEZ.js.map +0 -1
  192. package/dist/cache-utils-2lswvJ87.cjs +0 -2
  193. package/dist/cache-utils-2lswvJ87.cjs.map +0 -1
  194. package/dist/cache-utils-38Dqu4Qf.js +0 -39
  195. package/dist/cache-utils-38Dqu4Qf.js.map +0 -1
  196. package/dist/decorators-HQ1KnRdh.cjs +0 -2
  197. package/dist/decorators-HQ1KnRdh.cjs.map +0 -1
  198. package/dist/decorators-Zr35qr6A.js +0 -50
  199. package/dist/decorators-Zr35qr6A.js.map +0 -1
  200. package/dist/relationships-B55LBaCW.cjs +0 -2
  201. package/dist/relationships-B55LBaCW.cjs.map +0 -1
  202. package/dist/relationships-BEXANmWg.js.map +0 -1
  203. package/dist/types-C9NB2gRj.js +0 -7
  204. package/dist/types-C9NB2gRj.js.map +0 -1
  205. package/dist/types-uWOXMPWW.cjs +0 -2
  206. package/dist/types-uWOXMPWW.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/inspector/QueryParser.ts","../../src/inspector/serialization.ts","../../src/inspector/StoreInspector.ts","../../src/inspector/ConsoleInspector.ts","../../src/inspector/DevToolsBridge.ts","../../src/inspector/integration.ts"],"sourcesContent":["import type {\r\n MdqlQueryObject,\r\n MdqlFilterNode,\r\n MdqlCondition,\r\n MdqlLogicalGroup,\r\n MdqlOperator,\r\n MdqlOrderByClause,\r\n MdqlSortDirection,\r\n} from '@mobx-data/mdql';\r\n\r\ninterface Token {\r\n type: 'keyword' | 'operator' | 'string' | 'number' | 'identifier' | 'null' | 'bracket';\r\n value: string;\r\n raw: unknown;\r\n}\r\n\r\nconst KEYWORD_SET = new Set([\r\n 'where', 'and', 'or', 'not', 'order', 'by', 'sort',\r\n 'limit', 'offset', 'is', 'null', 'in', 'between',\r\n 'asc', 'desc', 'contains', 'startswith', 'endswith',\r\n]);\r\n\r\nconst OPERATOR_MAP: Record<string, MdqlOperator> = {\r\n '=': 'equals',\r\n '==': 'equals',\r\n '!=': 'notEquals',\r\n '<>': 'notEquals',\r\n '>': 'greaterThan',\r\n '>=': 'greaterThanOrEquals',\r\n '<': 'lessThan',\r\n '<=': 'lessThanOrEquals',\r\n '~': 'contains',\r\n '^=': 'startsWith',\r\n '$=': 'endsWith',\r\n 'contains': 'contains',\r\n 'startswith': 'startsWith',\r\n 'endswith': 'endsWith',\r\n};\r\n\r\nconst OPERATOR_CHARS = new Set(['=', '!', '<', '>', '~', '^', '$']);\r\n\r\nexport class QueryParser {\r\n static parse(input: string): MdqlQueryObject {\r\n const parser = new QueryParser(input);\r\n return parser.parseQuery();\r\n }\r\n\r\n private tokens: Token[];\r\n private position: number;\r\n\r\n private constructor(input: string) {\r\n this.tokens = QueryParser.tokenize(input);\r\n this.position = 0;\r\n }\r\n\r\n private static tokenize(input: string): Token[] {\r\n const tokens: Token[] = [];\r\n let index = 0;\r\n\r\n while (index < input.length) {\r\n if (input[index] === ' ' || input[index] === '\\t') {\r\n index++;\r\n continue;\r\n }\r\n\r\n if (input[index] === '[' || input[index] === ']' || input[index] === ',') {\r\n tokens.push({ type: 'bracket', value: input[index]!, raw: input[index] });\r\n index++;\r\n continue;\r\n }\r\n\r\n if (input[index] === '\"' || input[index] === \"'\") {\r\n const quote = input[index]!;\r\n let value = '';\r\n index++;\r\n while (index < input.length && input[index] !== quote) {\r\n if (input[index] === '\\\\' && index + 1 < input.length) {\r\n index++;\r\n }\r\n value += input[index];\r\n index++;\r\n }\r\n index++;\r\n tokens.push({ type: 'string', value, raw: value });\r\n continue;\r\n }\r\n\r\n if (OPERATOR_CHARS.has(input[index]!)) {\r\n let operator = '';\r\n while (index < input.length && OPERATOR_CHARS.has(input[index]!)) {\r\n operator += input[index];\r\n index++;\r\n }\r\n tokens.push({ type: 'operator', value: operator, raw: operator });\r\n continue;\r\n }\r\n\r\n let word = '';\r\n while (index < input.length && input[index] !== ' ' && input[index] !== '\\t'\r\n && !OPERATOR_CHARS.has(input[index]!) && input[index] !== '[' && input[index] !== ']' && input[index] !== ',') {\r\n word += input[index];\r\n index++;\r\n }\r\n\r\n if (word === '') {\r\n index++;\r\n continue;\r\n }\r\n\r\n const lower = word.toLowerCase();\r\n\r\n if (lower === 'null') {\r\n tokens.push({ type: 'null', value: 'null', raw: null });\r\n } else if (KEYWORD_SET.has(lower)) {\r\n tokens.push({ type: 'keyword', value: lower, raw: word });\r\n } else {\r\n const numberValue = Number(word);\r\n if (!Number.isNaN(numberValue) && word !== '') {\r\n tokens.push({ type: 'number', value: word, raw: numberValue });\r\n } else {\r\n tokens.push({ type: 'identifier', value: word, raw: word });\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n }\r\n\r\n private peek(): Token | null {\r\n return this.tokens[this.position] ?? null;\r\n }\r\n\r\n private advance(): Token | null {\r\n const token = this.tokens[this.position] ?? null;\r\n this.position++;\r\n return token;\r\n }\r\n\r\n private expect(type: string, value?: string): Token {\r\n const token = this.advance();\r\n if (!token || token.type !== type || (value !== undefined && token.value !== value)) {\r\n const got = token ? `${token.type}:${token.value}` : 'end of input';\r\n throw new Error(`Expected ${type}${value ? `:${value}` : ''}, got ${got}`);\r\n }\r\n return token;\r\n }\r\n\r\n private expectNullToken(): void {\r\n const token = this.advance();\r\n if (!token || (token.type !== 'null' && token.value !== 'null')) {\r\n const got = token ? `${token.type}:${token.value}` : 'end of input';\r\n throw new Error(`Expected null, got ${got}`);\r\n }\r\n }\r\n\r\n private matchKeyword(keyword: string): boolean {\r\n const token = this.peek();\r\n if (token?.type === 'keyword' && token.value === keyword) {\r\n this.advance();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private parseQuery(): MdqlQueryObject {\r\n const modelToken = this.advance();\r\n if (!modelToken) throw new Error('Expected model name');\r\n const modelName = modelToken.value;\r\n\r\n let filters: MdqlLogicalGroup = { kind: 'and', children: [] };\r\n const orderBy: MdqlOrderByClause[] = [];\r\n let limit: number | null = null;\r\n let offset: number | null = null;\r\n\r\n if (this.matchKeyword('where')) {\r\n filters = this.parseFilterExpression();\r\n }\r\n\r\n if (this.matchKeyword('order')) {\r\n this.expect('keyword', 'by');\r\n this.parseOrderBy(orderBy);\r\n } else if (this.matchKeyword('sort')) {\r\n this.parseOrderBy(orderBy);\r\n }\r\n\r\n if (this.matchKeyword('limit')) {\r\n const token = this.expect('number');\r\n limit = token.raw as number;\r\n }\r\n\r\n if (this.matchKeyword('offset')) {\r\n const token = this.expect('number');\r\n offset = token.raw as number;\r\n }\r\n\r\n return { modelName, filters, orderBy, limit, offset, includes: [] };\r\n }\r\n\r\n private parseFilterExpression(): MdqlLogicalGroup {\r\n const first = this.parseCondition();\r\n const children: MdqlFilterNode[] = [first];\r\n let groupKind: 'and' | 'or' = 'and';\r\n\r\n while (this.peek()) {\r\n const token = this.peek()!;\r\n if (token.type === 'keyword' && token.value === 'and') {\r\n this.advance();\r\n groupKind = 'and';\r\n children.push(this.parseCondition());\r\n } else if (token.type === 'keyword' && token.value === 'or') {\r\n this.advance();\r\n groupKind = 'or';\r\n children.push(this.parseCondition());\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (children.length === 1 && first.kind !== 'condition') {\r\n return first as MdqlLogicalGroup;\r\n }\r\n\r\n return { kind: groupKind, children };\r\n }\r\n\r\n private parseCondition(): MdqlFilterNode {\r\n if (this.matchKeyword('not')) {\r\n const child = this.parseCondition();\r\n return { kind: 'not', children: [child] };\r\n }\r\n\r\n const fieldToken = this.advance();\r\n if (!fieldToken) throw new Error('Expected field name');\r\n const field = fieldToken.value;\r\n\r\n if (this.peek()?.type === 'keyword' && this.peek()?.value === 'is') {\r\n this.advance();\r\n if (this.matchKeyword('not')) {\r\n this.expectNullToken();\r\n return { kind: 'condition', field, operator: 'isNotNull', value: undefined };\r\n }\r\n this.expectNullToken();\r\n return { kind: 'condition', field, operator: 'isNull', value: undefined };\r\n }\r\n\r\n if (this.peek()?.type === 'keyword' && this.peek()?.value === 'in') {\r\n this.advance();\r\n const values = this.parseArray();\r\n return { kind: 'condition', field, operator: 'in', value: values };\r\n }\r\n\r\n if (this.peek()?.type === 'keyword' && this.peek()?.value === 'between') {\r\n this.advance();\r\n const low = this.parseValue();\r\n const high = this.parseValue();\r\n return { kind: 'condition', field, operator: 'between', value: [low, high] };\r\n }\r\n\r\n const operatorToken = this.advance();\r\n if (!operatorToken) throw new Error(`Expected operator after field \"${field}\"`);\r\n\r\n let operator: MdqlOperator;\r\n if (operatorToken.type === 'operator') {\r\n operator = OPERATOR_MAP[operatorToken.value] as MdqlOperator;\r\n if (!operator) throw new Error(`Unknown operator: ${operatorToken.value}`);\r\n } else if (operatorToken.type === 'keyword' && OPERATOR_MAP[operatorToken.value]) {\r\n operator = OPERATOR_MAP[operatorToken.value] as MdqlOperator;\r\n } else {\r\n throw new Error(`Expected operator, got ${operatorToken.type}:${operatorToken.value}`);\r\n }\r\n\r\n const value = this.parseValue();\r\n\r\n return { kind: 'condition', field, operator, value } as MdqlCondition;\r\n }\r\n\r\n private parseOrderBy(orderBy: MdqlOrderByClause[]): void {\r\n const fieldToken = this.advance();\r\n if (!fieldToken) throw new Error('Expected field name after order by / sort');\r\n orderBy.push({\r\n field: fieldToken.value,\r\n direction: this.parseDirection(),\r\n });\r\n\r\n while (this.peek()?.type === 'bracket' && this.peek()?.value === ',') {\r\n this.advance();\r\n const nextField = this.advance();\r\n if (!nextField) break;\r\n orderBy.push({\r\n field: nextField.value,\r\n direction: this.parseDirection(),\r\n });\r\n }\r\n }\r\n\r\n private parseDirection(): MdqlSortDirection {\r\n const token = this.peek();\r\n if (token?.type === 'keyword' && (token.value === 'asc' || token.value === 'desc')) {\r\n this.advance();\r\n return token.value as MdqlSortDirection;\r\n }\r\n return 'asc';\r\n }\r\n\r\n private parseValue(): unknown {\r\n const token = this.advance();\r\n if (!token) throw new Error('Expected value');\r\n\r\n if (token.type === 'string') return token.raw;\r\n if (token.type === 'number') return token.raw;\r\n if (token.type === 'null') return null;\r\n if (token.type === 'keyword' && token.value === 'null') return null;\r\n if (token.type === 'identifier') return token.value;\r\n\r\n throw new Error(`Unexpected value token: ${token.type}:${token.value}`);\r\n }\r\n\r\n private parseArray(): unknown[] {\r\n const values: unknown[] = [];\r\n if (this.peek()?.type === 'bracket' && this.peek()?.value === '[') {\r\n this.advance();\r\n while (this.peek() && !(this.peek()?.type === 'bracket' && this.peek()?.value === ']')) {\r\n if (this.peek()?.type === 'bracket' && this.peek()?.value === ',') {\r\n this.advance();\r\n continue;\r\n }\r\n values.push(this.parseValue());\r\n }\r\n if (this.peek()?.type === 'bracket' && this.peek()?.value === ']') {\r\n this.advance();\r\n }\r\n } else {\r\n while (this.peek() && this.peek()?.type !== 'keyword') {\r\n if (this.peek()?.type === 'bracket' && this.peek()?.value === ',') {\r\n this.advance();\r\n continue;\r\n }\r\n values.push(this.parseValue());\r\n }\r\n }\r\n return values;\r\n }\r\n}\r\n","import type { Model, RelationshipRef } from '@mobx-data/model';\r\nimport type { Store } from '@mobx-data/store';\r\nimport type { RecordSummary, RecordDetail, SchemaInfo } from './types.js';\r\n\r\ninterface ModelInternals {\r\n _data: Record<string, unknown>;\r\n _originalData: Record<string, unknown>;\r\n _relationships: Map<string, RelationshipRef>;\r\n _clientId: string;\r\n}\r\n\r\nfunction internals(record: Model): ModelInternals {\r\n return record as unknown as ModelInternals;\r\n}\r\n\r\nexport function summarizeRecord(record: Model): RecordSummary {\r\n return {\r\n modelName: record.modelName,\r\n id: record.id,\r\n clientId: internals(record)._clientId,\r\n currentState: record.currentState,\r\n isNew: record.isNew,\r\n isDirty: record.isDirty,\r\n isDeleted: record.isDeleted,\r\n isError: record.isError,\r\n isLoading: record.isLoading,\r\n isSaving: record.isSaving,\r\n hasDirtyAttributes: record.hasDirtyAttributes,\r\n hasErrors: !record.isValid,\r\n };\r\n}\r\n\r\nexport function detailRecord(record: Model): RecordDetail {\r\n const internal = internals(record);\r\n const relationships: Record<string, unknown> = {};\r\n if (internal._relationships) {\r\n for (const [name, reference] of internal._relationships) {\r\n relationships[name] = reference;\r\n }\r\n }\r\n\r\n const errors: Array<{ attribute: string; messages: string[] }> = [];\r\n for (const [attribute, errorMessages] of record.errors) {\r\n errors.push({\r\n attribute,\r\n messages: errorMessages.map((e) => e.message),\r\n });\r\n }\r\n\r\n const attributes = Object.create(null) as Record<string, unknown>;\r\n for (const key of Object.keys(internal._data)) {\r\n if (key === '__proto__' || key === 'constructor') continue;\r\n attributes[key] = internal._data[key];\r\n }\r\n const originalAttributes = Object.create(null) as Record<string, unknown>;\r\n for (const key of Object.keys(internal._originalData)) {\r\n if (key === '__proto__' || key === 'constructor') continue;\r\n originalAttributes[key] = internal._originalData[key];\r\n }\r\n\r\n return {\r\n ...summarizeRecord(record),\r\n attributes,\r\n originalAttributes,\r\n changedAttributes: record.changedAttributes(),\r\n relationships,\r\n errors,\r\n };\r\n}\r\n\r\nexport function extractSchemaInfo(store: Store, modelName: string): SchemaInfo {\r\n const attributeDefinitions = store.schema.attributesDefinitionFor(modelName);\r\n const relationshipDefinitions = store.schema.relationshipsDefinitionFor(modelName);\r\n const discriminator = store.schema.discriminatorFor(modelName);\r\n\r\n const attributes: SchemaInfo['attributes'] = [];\r\n for (const [name, definition] of attributeDefinitions) {\r\n attributes.push({ name, type: definition.type });\r\n }\r\n\r\n const relationships: SchemaInfo['relationships'] = [];\r\n for (const [name, definition] of relationshipDefinitions) {\r\n relationships.push({\r\n name,\r\n kind: definition.kind,\r\n type: definition.type,\r\n async: definition.options.async ?? false,\r\n inverse: definition.options.inverse ?? null,\r\n polymorphic: definition.options.polymorphic ?? false,\r\n });\r\n }\r\n\r\n return {\r\n modelName,\r\n isAbstract: store.schema.isAbstract(modelName),\r\n discriminator: discriminator ? { key: discriminator.key } : null,\r\n attributes,\r\n relationships,\r\n };\r\n}\r\n","import { reaction } from 'mobx';\r\nimport type { Model } from '@mobx-data/model';\r\nimport type { Store } from '@mobx-data/store';\r\nimport type { MdqlQueryObject } from '@mobx-data/mdql';\r\nimport { MdqlMemoryExecutor } from '../mdql/MdqlMemoryExecutor.js';\r\nimport { QueryParser } from './QueryParser.js';\r\nimport type {\r\n StoreSummary,\r\n RecordSummary,\r\n RecordDetail,\r\n SchemaInfo,\r\n InspectorChangeEvent,\r\n} from './types.js';\r\nimport { summarizeRecord, detailRecord, extractSchemaInfo } from './serialization.js';\r\n\r\nexport class StoreInspector {\r\n private readonly store: Store;\r\n\r\n constructor(store: Store) {\r\n this.store = store;\r\n }\r\n\r\n summary(): StoreSummary {\r\n const types: StoreSummary['types'] = [];\r\n let totalRecords = 0;\r\n for (const modelName of this.store.schema.registeredNames()) {\r\n const count = this.store.peekAll(modelName).length;\r\n if (count > 0) {\r\n types.push({ modelName, count });\r\n }\r\n totalRecords += count;\r\n }\r\n types.sort((a, b) => a.modelName.localeCompare(b.modelName));\r\n return { types, totalRecords };\r\n }\r\n\r\n records(modelName: string): RecordSummary[] {\r\n return this.store.peekAll(modelName).toArray().map(summarizeRecord);\r\n }\r\n\r\n record(modelName: string, id: string): RecordDetail | null {\r\n const found = this.store.identityMap.get(modelName, id);\r\n if (!found) {\r\n return null;\r\n }\r\n return detailRecord(found);\r\n }\r\n\r\n dirty(): RecordSummary[] {\r\n return this.allRecordsWhere((r) => r.isDirty);\r\n }\r\n\r\n newRecords(): RecordSummary[] {\r\n return this.allRecordsWhere((r) => r.isNew);\r\n }\r\n\r\n errored(): RecordSummary[] {\r\n return this.allRecordsWhere((r) => r.isError || !r.isValid);\r\n }\r\n\r\n saving(): RecordSummary[] {\r\n return this.allRecordsWhere((r) => r.isSaving);\r\n }\r\n\r\n schema(modelName: string): SchemaInfo {\r\n return extractSchemaInfo(this.store, modelName);\r\n }\r\n\r\n types(): string[] {\r\n return this.store.schema.registeredNames().sort();\r\n }\r\n\r\n query(text: string): Model[] {\r\n const queryObject = QueryParser.parse(text);\r\n const items = this.store.peekAll(queryObject.modelName).toArray();\r\n return MdqlMemoryExecutor.executeMany(items, queryObject);\r\n }\r\n\r\n queryWithMeta(text: string): { modelName: string; results: Model[] } {\r\n const queryObject = QueryParser.parse(text);\r\n const items = this.store.peekAll(queryObject.modelName).toArray();\r\n return {\r\n modelName: queryObject.modelName,\r\n results: MdqlMemoryExecutor.executeMany(items, queryObject),\r\n };\r\n }\r\n\r\n liveModels(modelName: string): Model[] {\r\n return this.store.peekAll(modelName).toArray();\r\n }\r\n\r\n liveModel(modelName: string, id: string): Model | null {\r\n return this.store.peekRecord(modelName, id);\r\n }\r\n\r\n snapshot(): { records: Record<string, unknown[]> } {\r\n return this.store.serialize();\r\n }\r\n\r\n observe(callback: (event: InspectorChangeEvent) => void): () => void {\r\n let previousState = this.captureState();\r\n\r\n return reaction(\r\n () => this.captureState(),\r\n (currentState) => {\r\n this.diffAndEmit(previousState, currentState, callback);\r\n previousState = currentState;\r\n },\r\n { delay: 100 },\r\n );\r\n }\r\n\r\n private allRecordsWhere(predicate: (record: Model) => boolean): RecordSummary[] {\r\n const results: RecordSummary[] = [];\r\n for (const modelName of this.store.schema.registeredNames()) {\r\n for (const record of this.store.peekAll(modelName).toArray()) {\r\n if (predicate(record)) {\r\n results.push(summarizeRecord(record));\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n\r\n private captureState(): Map<string, Map<string, string>> {\r\n const state = new Map<string, Map<string, string>>();\r\n for (const [modelName, bucket] of this.store.identityMap._buckets) {\r\n const records = new Map<string, string>();\r\n for (const [id, record] of bucket) {\r\n records.set(id, record.currentState);\r\n }\r\n state.set(modelName, records);\r\n }\r\n return state;\r\n }\r\n\r\n private diffAndEmit(\r\n previous: Map<string, Map<string, string>>,\r\n current: Map<string, Map<string, string>>,\r\n callback: (event: InspectorChangeEvent) => void,\r\n ): void {\r\n for (const [modelName, currentBucket] of current) {\r\n const previousBucket = previous.get(modelName);\r\n for (const [id, currentStateValue] of currentBucket) {\r\n if (!previousBucket?.has(id)) {\r\n callback({ type: 'added', modelName, id });\r\n } else if (previousBucket.get(id) !== currentStateValue) {\r\n callback({ type: 'updated', modelName, id });\r\n }\r\n }\r\n }\r\n\r\n for (const [modelName, previousBucket] of previous) {\r\n const currentBucket = current.get(modelName);\r\n for (const [id] of previousBucket) {\r\n if (!currentBucket?.has(id)) {\r\n callback({ type: 'removed', modelName, id });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import type { Model } from '@mobx-data/model';\r\nimport type { Store } from '@mobx-data/store';\r\nimport { StoreInspector } from './StoreInspector.js';\r\nimport { summarizeRecord, detailRecord } from './serialization.js';\r\nimport type { RecordSummary, RecordDetail, StoreSummary, SchemaInfo } from './types.js';\r\n\r\nconst STYLE_HEADER = 'color: #2196f3; font-weight: bold';\r\nconst STYLE_DIRTY = 'color: #ff9800; font-weight: bold';\r\nconst STYLE_ERROR = 'color: #f44336; font-weight: bold';\r\nconst STYLE_SAVED = 'color: #4caf50';\r\nconst STYLE_RESET = 'color: inherit';\r\n\r\nfunction stateLabel(record: RecordSummary): string {\r\n if (record.isError) return 'ERROR';\r\n if (record.isSaving) return 'SAVING';\r\n if (record.isNew) return 'NEW';\r\n if (record.isDirty) return 'DIRTY';\r\n if (record.isDeleted) return 'DELETED';\r\n if (record.isLoading) return 'LOADING';\r\n return 'SAVED';\r\n}\r\n\r\nfunction stateStyle(record: RecordSummary): string {\r\n if (record.isError || record.hasErrors) return STYLE_ERROR;\r\n if (record.isDirty || record.isNew) return STYLE_DIRTY;\r\n return STYLE_SAVED;\r\n}\r\n\r\nexport type RecordResult = Model & {\r\n show(): void;\r\n toJSON(): Record<string, unknown>;\r\n inspect(): RecordDetail;\r\n summary(): RecordSummary;\r\n};\r\n\r\nconst INSPECTOR_METHODS = new Set(['show', 'toJSON', 'inspect', 'summary']);\r\n\r\nfunction createRecordResult(\r\n model: Model,\r\n renderDetail: (model: Model) => void,\r\n): RecordResult {\r\n const extensions: Record<string, unknown> = {\r\n show() { renderDetail(model); },\r\n toJSON() {\r\n const detail = detailRecord(model);\r\n return { ...detail.attributes, id: detail.id, _state: detail.currentState };\r\n },\r\n inspect() { return detailRecord(model); },\r\n summary() { return summarizeRecord(model); },\r\n };\r\n\r\n return new Proxy(model, {\r\n get(target, property) {\r\n if (typeof property === 'string' && INSPECTOR_METHODS.has(property)) {\r\n return extensions[property];\r\n }\r\n return Reflect.get(target, property);\r\n },\r\n has(target, property) {\r\n if (typeof property === 'string' && INSPECTOR_METHODS.has(property)) return true;\r\n return Reflect.has(target, property);\r\n },\r\n }) as RecordResult;\r\n}\r\n\r\nexport type ResultSet = RecordResult[] & {\r\n show(): void;\r\n toJSON(): Array<Record<string, unknown>>;\r\n};\r\n\r\ninterface Showable {\r\n show(): void;\r\n}\r\n\r\nexport class ConsoleInspector {\r\n private readonly inspector: StoreInspector;\r\n private readonly storeName: string;\r\n\r\n constructor(store: Store, name: string = 'default') {\r\n this.inspector = new StoreInspector(store);\r\n this.storeName = name;\r\n }\r\n\r\n summary(): StoreSummary & Showable {\r\n const data = this.inspector.summary();\r\n const self = this;\r\n return Object.assign(data, {\r\n show() {\r\n self.renderSummary(data);\r\n },\r\n });\r\n }\r\n\r\n records(modelName: string): ResultSet {\r\n const models = this.inspector.liveModels(modelName);\r\n return this.createResultSet(models, () => this.renderRecords(modelName, this.inspector.records(modelName)));\r\n }\r\n\r\n record(modelName: string, id: string): RecordResult | null {\r\n const model = this.inspector.liveModel(modelName, id);\r\n if (!model) return null;\r\n return this.wrapModel(model);\r\n }\r\n\r\n query(text: string): ResultSet {\r\n const { modelName, results } = this.inspector.queryWithMeta(text);\r\n return this.createResultSet(results, () => {\r\n const allRecords = this.inspector.records(modelName);\r\n const recordIndex = new Map(allRecords.map((s) => [s.id, s]));\r\n const summaries = results\r\n .map((r) => recordIndex.get((r as unknown as { id: string }).id))\r\n .filter(Boolean) as RecordSummary[];\r\n this.renderRecords(`${modelName} (query)`, summaries.length > 0 ? summaries : allRecords);\r\n });\r\n }\r\n\r\n dirty(): ResultSet {\r\n const models = this.collectModels((model) => model.isDirty);\r\n return this.createResultSet(models, () => this.renderFilteredRecords('Dirty records', models.map(summarizeRecord)));\r\n }\r\n\r\n newRecords(): ResultSet {\r\n const models = this.collectModels((model) => model.isNew);\r\n return this.createResultSet(models, () => this.renderFilteredRecords('New records', models.map(summarizeRecord)));\r\n }\r\n\r\n saving(): ResultSet {\r\n const models = this.collectModels((model) => model.isSaving);\r\n return this.createResultSet(models, () => this.renderFilteredRecords('Saving records', models.map(summarizeRecord)));\r\n }\r\n\r\n errored(): ResultSet {\r\n const models = this.collectModels((model) => model.isError || !model.isValid);\r\n return this.createResultSet(models, () => this.renderFilteredRecords('Errored records', models.map(summarizeRecord)));\r\n }\r\n\r\n private collectModels(predicate: (model: Model) => boolean): Model[] {\r\n const models: Model[] = [];\r\n for (const name of this.inspector.types()) {\r\n for (const model of this.inspector.liveModels(name)) {\r\n if (predicate(model)) {\r\n models.push(model);\r\n }\r\n }\r\n }\r\n return models;\r\n }\r\n\r\n schema(modelName: string): SchemaInfo & Showable {\r\n const data = this.inspector.schema(modelName);\r\n const self = this;\r\n return Object.assign(data, {\r\n show() {\r\n self.renderSchema(modelName, data);\r\n },\r\n });\r\n }\r\n\r\n types(): string[] & Showable {\r\n const names = this.inspector.types();\r\n const self = this;\r\n const result = [...names] as string[] & Showable;\r\n result.show = () => {\r\n const summaryData = self.inspector.summary();\r\n const countMap = new Map(summaryData.types.map((t) => [t.modelName, t.count]));\r\n console.log(`%c[mobx-data] Registered types (${names.length})`, STYLE_HEADER);\r\n for (const name of names) {\r\n console.log(` ${name} (${countMap.get(name) ?? 0})`);\r\n }\r\n };\r\n return result;\r\n }\r\n\r\n snapshot(): unknown {\r\n return this.inspector.snapshot();\r\n }\r\n\r\n observe(): () => void {\r\n console.log('%c[mobx-data] Live observation started. Call the returned function to stop.', STYLE_HEADER);\r\n return this.inspector.observe((event) => {\r\n const style = event.type === 'removed' ? STYLE_ERROR\r\n : event.type === 'added' ? STYLE_SAVED\r\n : STYLE_DIRTY;\r\n const label = event.type.toUpperCase();\r\n const identifier = event.id ?? '(new)';\r\n const stateInfo = event.record ? ` [${stateLabel(event.record)}]` : '';\r\n console.log(`%c[mobx-data] %c${label}%c ${event.modelName}:${identifier}${stateInfo}`, STYLE_HEADER, style, STYLE_RESET);\r\n });\r\n }\r\n\r\n raw(): StoreInspector {\r\n return this.inspector;\r\n }\r\n\r\n command(input: string): unknown {\r\n const trimmed = input.trim();\r\n\r\n if (this.isQueryCommand(trimmed)) {\r\n const result = this.query(trimmed);\r\n result.show();\r\n return result;\r\n }\r\n\r\n const parts = trimmed.split(/\\s+/);\r\n const cmd = parts[0]?.toLowerCase() ?? '';\r\n const argument1 = parts[1];\r\n\r\n switch (cmd) {\r\n case 'help': case 'h': case '?':\r\n this.help();\r\n return undefined;\r\n case 'summary': case 's': {\r\n const result = this.summary();\r\n result.show();\r\n return result;\r\n }\r\n case 'types': case 't': {\r\n const result = this.types();\r\n result.show();\r\n return result;\r\n }\r\n case 'dirty': case 'd': {\r\n const result = this.dirty();\r\n result.show();\r\n return result;\r\n }\r\n case 'saving': {\r\n const result = this.saving();\r\n result.show();\r\n return result;\r\n }\r\n case 'errored': case 'errors': case 'e': {\r\n const result = this.errored();\r\n result.show();\r\n return result;\r\n }\r\n case 'schema':\r\n if (argument1) {\r\n const result = this.schema(argument1);\r\n result.show();\r\n return result;\r\n }\r\n console.log('%c[mobx-data] Usage: schema <type>', STYLE_ERROR);\r\n return undefined;\r\n case 'snap': case 'snapshot':\r\n return this.snapshot();\r\n case 'watch': case 'observe':\r\n return this.observe();\r\n default:\r\n return this.resolveModelCommand(cmd, argument1);\r\n }\r\n }\r\n\r\n help(): void {\r\n console.log(`%c[mobx-data] CLI commands:`, STYLE_HEADER);\r\n console.log(`\r\n %c$m('help')%c Show this help\r\n %c$m('summary')%c Overview of all types and counts\r\n %c$m('types')%c List registered model names\r\n %c$m('user')%c All records (returns live refs)\r\n %c$m('user 1')%c Single record (live ref)\r\n %c$m('user where age > 25')%c Query with filters\r\n %c$m('user where name ~ \"Al\"')%c Contains search\r\n %c$m('post where title ~ h sort title')%c Query + sort\r\n %c$m('dirty')%c All dirty records\r\n %c$m('saving')%c All records being saved\r\n %c$m('errored')%c All records with errors\r\n %c$m('schema user')%c Attribute/relationship metadata\r\n %c$m('snapshot')%c Full store snapshot\r\n %c$m('watch')%c Live change logging (returns stop fn)\r\n`,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n STYLE_DIRTY, STYLE_RESET,\r\n );\r\n console.log('%c Operators: = != > >= < <= ~ (contains) ^= (startsWith) $= (endsWith) in between is null', STYLE_SAVED);\r\n console.log('%c All methods return live objects. Use .show() to render, [0] for refs.', STYLE_SAVED);\r\n console.log('%c Shortcuts: s=summary, t=types, d=dirty, e=errored, h=help', STYLE_SAVED);\r\n }\r\n\r\n private isQueryCommand(input: string): boolean {\r\n const lower = input.toLowerCase();\r\n return lower.includes(' where ')\r\n || lower.includes(' sort ')\r\n || / order by /i.test(lower)\r\n || / limit /i.test(lower)\r\n || / offset /i.test(lower);\r\n }\r\n\r\n private resolveModelCommand(cmd: string, argument1?: string): unknown {\r\n const registeredTypes = this.inspector.types();\r\n const resolvedType = registeredTypes.includes(cmd) ? cmd\r\n : registeredTypes.includes(`${cmd}s`) ? `${cmd}s`\r\n : null;\r\n\r\n if (resolvedType) {\r\n if (argument1) {\r\n const result = this.record(resolvedType, argument1);\r\n if (result) {\r\n result.show();\r\n } else {\r\n console.log(`%c[mobx-data] ${resolvedType}:${argument1} not found`, STYLE_ERROR);\r\n }\r\n return result;\r\n }\r\n const result = this.records(resolvedType);\r\n result.show();\r\n return result;\r\n }\r\n\r\n if (cmd === '') {\r\n const result = this.summary();\r\n result.show();\r\n return result;\r\n }\r\n\r\n console.log(`%c[mobx-data] Unknown command: \"${cmd}\". Try $m('help')`, STYLE_ERROR);\r\n return undefined;\r\n }\r\n\r\n private wrapModel(model: Model): RecordResult {\r\n return createRecordResult(model, (m) => {\r\n const detail = detailRecord(m);\r\n this.renderRecordDetail(detail.modelName, detail.id ?? detail.clientId, detail);\r\n });\r\n }\r\n\r\n private createResultSet(models: Model[], showFunction: () => void): ResultSet {\r\n const wrapped = models.map((m) => this.wrapModel(m));\r\n const result = wrapped as ResultSet;\r\n result.show = showFunction;\r\n result.toJSON = () => wrapped.map((r) => r.toJSON());\r\n return result;\r\n }\r\n\r\n private renderSummary(data: StoreSummary): void {\r\n console.log(`%c[mobx-data] Store \"${this.storeName}\" — ${data.totalRecords} records`, STYLE_HEADER);\r\n if (data.types.length === 0) {\r\n console.log(' (empty)');\r\n return;\r\n }\r\n console.table(\r\n data.types.reduce<Record<string, { count: number }>>((accumulator, entry) => {\r\n accumulator[entry.modelName] = { count: entry.count };\r\n return accumulator;\r\n }, {}),\r\n );\r\n }\r\n\r\n private renderRecords(label: string, data: RecordSummary[]): void {\r\n console.log(`%c[mobx-data] ${label} — ${data.length} records`, STYLE_HEADER);\r\n if (data.length === 0) {\r\n console.log(' (none)');\r\n return;\r\n }\r\n console.table(\r\n data.map((record) => ({\r\n id: record.id ?? record.clientId,\r\n state: stateLabel(record),\r\n isDirty: record.isDirty,\r\n isNew: record.isNew,\r\n isSaving: record.isSaving,\r\n hasErrors: record.hasErrors,\r\n })),\r\n );\r\n }\r\n\r\n private renderRecordDetail(modelName: string, id: string, data: RecordDetail): void {\r\n const label = stateLabel(data);\r\n const style = stateStyle(data);\r\n console.groupCollapsed(`%c[mobx-data] %c${modelName}:${id}%c — %c${label}%c (${data.currentState})`, STYLE_HEADER, STYLE_RESET, STYLE_RESET, style, STYLE_RESET);\r\n\r\n console.groupCollapsed('Attributes');\r\n const changedKeys = new Set(Object.keys(data.changedAttributes));\r\n const attributeTable: Record<string, { current: unknown; original: unknown; changed: string }> = {};\r\n for (const [key, value] of Object.entries(data.attributes)) {\r\n attributeTable[key] = {\r\n current: value,\r\n original: data.originalAttributes[key],\r\n changed: changedKeys.has(key) ? 'YES' : '',\r\n };\r\n }\r\n console.table(attributeTable);\r\n console.groupEnd();\r\n\r\n if (Object.keys(data.relationships).length > 0) {\r\n console.groupCollapsed('Relationships');\r\n for (const [name, reference] of Object.entries(data.relationships)) {\r\n const referenceData = (reference as { data?: unknown })?.data;\r\n if (Array.isArray(referenceData)) {\r\n const ids = referenceData.map((r: { type: string; id: string }) => `${r.type}:${r.id}`);\r\n console.log(` ${name} → [${ids.join(', ')}]`);\r\n } else if (referenceData && typeof referenceData === 'object') {\r\n const typed = referenceData as { type: string; id: string };\r\n console.log(` ${name} → ${typed.type}:${typed.id}`);\r\n } else {\r\n console.log(` ${name} → null`);\r\n }\r\n }\r\n console.groupEnd();\r\n }\r\n\r\n if (data.errors.length > 0) {\r\n console.groupCollapsed(`%cErrors (${data.errors.length})`, STYLE_ERROR);\r\n for (const entry of data.errors) {\r\n console.log(` ${entry.attribute}: ${entry.messages.join(', ')}`);\r\n }\r\n console.groupEnd();\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n\r\n private renderSchema(modelName: string, data: SchemaInfo): void {\r\n console.log(`%c[mobx-data] Schema: ${modelName}${data.isAbstract ? ' (abstract)' : ''}`, STYLE_HEADER);\r\n\r\n if (data.discriminator) {\r\n console.log(` Discriminator key: ${data.discriminator.key}`);\r\n }\r\n\r\n if (data.attributes.length > 0) {\r\n console.log('%cAttributes:', STYLE_HEADER);\r\n console.table(\r\n data.attributes.map((a) => ({ name: a.name, type: a.type ?? '(untyped)' })),\r\n );\r\n }\r\n\r\n if (data.relationships.length > 0) {\r\n console.log('%cRelationships:', STYLE_HEADER);\r\n console.table(\r\n data.relationships.map((r) => ({\r\n name: r.name,\r\n kind: r.kind,\r\n type: r.type,\r\n async: r.async,\r\n inverse: r.inverse ?? '(none)',\r\n })),\r\n );\r\n }\r\n }\r\n\r\n private renderFilteredRecords(label: string, data: RecordSummary[]): void {\r\n console.log(`%c[mobx-data] ${label} — ${data.length} total`, STYLE_HEADER);\r\n if (data.length === 0) {\r\n console.log(' (none)');\r\n return;\r\n }\r\n console.table(\r\n data.map((record) => ({\r\n type: record.modelName,\r\n id: record.id ?? record.clientId,\r\n state: stateLabel(record),\r\n isDirty: record.isDirty,\r\n isNew: record.isNew,\r\n hasErrors: record.hasErrors,\r\n })),\r\n );\r\n }\r\n}\r\n","import type { Store } from '@mobx-data/store';\r\nimport { StoreInspector } from './StoreInspector.js';\r\nimport type { DevToolsMessage, DevToolsPayload } from './types.js';\r\n\r\nexport interface DevToolsHook {\r\n stores: Map<string, StoreInspector>;\r\n version: string;\r\n registerStore(storeId: string, store: Store): void;\r\n unregisterStore(storeId: string): void;\r\n}\r\n\r\nconst HOOK_KEY = '__MOBX_DATA_DEVTOOLS_HOOK__';\r\nconst SOURCE = 'mobx-data-devtools' as const;\r\nconst VERSION = '1.4.0';\r\n\r\nfunction getGlobal(): Record<string, unknown> {\r\n if (typeof globalThis !== 'undefined') return globalThis as unknown as Record<string, unknown>;\r\n if (typeof window !== 'undefined') return window as unknown as Record<string, unknown>;\r\n return {};\r\n}\r\n\r\nfunction getEventTarget(): {\r\n addEventListener?(type: string, handler: (event: unknown) => void): void;\r\n removeEventListener?(type: string, handler: (event: unknown) => void): void;\r\n postMessage?(data: unknown, origin?: string): void;\r\n} | null {\r\n const global = getGlobal();\r\n if (typeof global.addEventListener === 'function') return global as unknown as typeof window;\r\n return null;\r\n}\r\n\r\nexport class DevToolsBridge {\r\n private readonly stores = new Map<string, StoreInspector>();\r\n private readonly disposers = new Map<string, () => void>();\r\n private messageHandler: ((event: unknown) => void) | null = null;\r\n\r\n install(): void {\r\n const global = getGlobal();\r\n\r\n const hook: DevToolsHook = {\r\n stores: this.stores,\r\n version: VERSION,\r\n registerStore: (storeId, store) => this.registerStore(storeId, store),\r\n unregisterStore: (storeId) => this.unregisterStore(storeId),\r\n };\r\n\r\n Object.defineProperty(global, HOOK_KEY, {\r\n value: hook,\r\n writable: true,\r\n enumerable: false,\r\n configurable: true,\r\n });\r\n\r\n const eventTarget = getEventTarget();\r\n if (eventTarget?.addEventListener) {\r\n this.messageHandler = (event: unknown) => {\r\n const messageEvent = event as MessageEvent;\r\n if (messageEvent.origin && typeof location !== 'undefined' && messageEvent.origin !== location.origin) return;\r\n if (messageEvent.data?.source !== SOURCE || messageEvent.data?.direction !== 'panel-to-page') return;\r\n if (!this.isValidPayload(messageEvent.data?.payload)) return;\r\n this.handleMessage(messageEvent as MessageEvent<DevToolsMessage>);\r\n };\r\n eventTarget.addEventListener('message', this.messageHandler);\r\n }\r\n }\r\n\r\n registerStore(storeId: string, store: Store): void {\r\n const inspector = new StoreInspector(store);\r\n this.stores.set(storeId, inspector);\r\n\r\n const disposer = inspector.observe((event) => {\r\n this.sendToPanel({\r\n type: 'changeEvent',\r\n storeId,\r\n event,\r\n });\r\n });\r\n this.disposers.set(storeId, disposer);\r\n\r\n this.sendToPanel({\r\n type: 'init',\r\n storeId,\r\n storeCount: this.stores.size,\r\n version: VERSION,\r\n });\r\n }\r\n\r\n unregisterStore(storeId: string): void {\r\n const disposer = this.disposers.get(storeId);\r\n if (disposer) {\r\n disposer();\r\n this.disposers.delete(storeId);\r\n }\r\n this.stores.delete(storeId);\r\n }\r\n\r\n destroy(): void {\r\n for (const disposer of this.disposers.values()) {\r\n disposer();\r\n }\r\n this.disposers.clear();\r\n this.stores.clear();\r\n\r\n const eventTarget = getEventTarget();\r\n if (eventTarget?.removeEventListener && this.messageHandler) {\r\n eventTarget.removeEventListener('message', this.messageHandler);\r\n this.messageHandler = null;\r\n }\r\n\r\n const global = getGlobal();\r\n delete global[HOOK_KEY];\r\n }\r\n\r\n private handleMessage(event: MessageEvent<DevToolsMessage>): void {\r\n const { payload } = event.data;\r\n const storeId = 'storeId' in payload ? payload.storeId : undefined;\r\n const inspector = storeId ? this.stores.get(storeId) : undefined;\r\n\r\n switch (payload.type) {\r\n case 'requestSummary': {\r\n if (!inspector) return;\r\n this.sendToPanel({ type: 'summary', storeId: storeId!, data: inspector.summary() });\r\n break;\r\n }\r\n case 'requestRecords': {\r\n if (!inspector || !('modelName' in payload)) return;\r\n this.sendToPanel({\r\n type: 'records',\r\n storeId: storeId!,\r\n modelName: payload.modelName,\r\n data: inspector.records(payload.modelName),\r\n });\r\n break;\r\n }\r\n case 'requestRecordDetail': {\r\n if (!inspector || !('modelName' in payload) || !('id' in payload)) return;\r\n const detail = inspector.record(payload.modelName, payload.id);\r\n if (!detail) return;\r\n this.sendToPanel({\r\n type: 'recordDetail',\r\n storeId: storeId!,\r\n modelName: payload.modelName,\r\n id: payload.id,\r\n data: detail,\r\n });\r\n break;\r\n }\r\n case 'requestSchema': {\r\n if (!inspector || !('modelName' in payload)) return;\r\n this.sendToPanel({\r\n type: 'schema',\r\n storeId: storeId!,\r\n modelName: payload.modelName,\r\n data: inspector.schema(payload.modelName),\r\n });\r\n break;\r\n }\r\n case 'requestSnapshot': {\r\n if (!inspector) return;\r\n this.sendToPanel({ type: 'snapshot', storeId: storeId!, data: inspector.snapshot() });\r\n break;\r\n }\r\n case 'requestQuery': {\r\n if (!inspector || !('queryText' in payload)) return;\r\n const queryText = (payload as { queryText: string }).queryText;\r\n try {\r\n const { modelName, results } = inspector.queryWithMeta(queryText);\r\n const allRecords = inspector.records(modelName);\r\n const recordIndex = new Map(allRecords.map((s) => [s.id, s]));\r\n const summaries = results\r\n .map((record) => recordIndex.get((record as unknown as { id: string }).id))\r\n .filter(Boolean) as import('./types.js').RecordSummary[];\r\n this.sendToPanel({\r\n type: 'queryResult',\r\n storeId: storeId!,\r\n queryText,\r\n data: summaries,\r\n error: null,\r\n });\r\n } catch (error) {\r\n this.sendToPanel({\r\n type: 'queryResult',\r\n storeId: storeId!,\r\n queryText,\r\n data: [],\r\n error: error instanceof Error ? error.message : String(error),\r\n });\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private isValidPayload(payload: unknown): boolean {\r\n if (!payload || typeof payload !== 'object') return false;\r\n const typed = payload as Record<string, unknown>;\r\n const validTypes = ['requestSummary', 'requestRecords', 'requestRecordDetail', 'requestSchema', 'requestSnapshot', 'requestQuery'];\r\n return typeof typed.type === 'string' && validTypes.includes(typed.type) && typeof typed.storeId === 'string';\r\n }\r\n\r\n private sendToPanel(payload: DevToolsPayload): void {\r\n const eventTarget = getEventTarget();\r\n if (!eventTarget?.postMessage) return;\r\n const message: DevToolsMessage = {\r\n source: SOURCE,\r\n direction: 'page-to-panel',\r\n payload,\r\n };\r\n const origin = typeof location !== 'undefined' ? location.origin : '*';\r\n eventTarget.postMessage(message, origin);\r\n }\r\n}\r\n","import type { Store } from '@mobx-data/store';\r\nimport { ConsoleInspector } from './ConsoleInspector.js';\r\nimport { DevToolsBridge } from './DevToolsBridge.js';\r\n\r\nlet bridge: DevToolsBridge | null = null;\r\nlet storeCounter = 0;\r\n\r\ndeclare global {\r\n interface Window {\r\n $mobxData?: ConsoleInspector;\r\n $m?: (input: string) => unknown;\r\n }\r\n}\r\n\r\nexport function enableConsoleInspector(\r\n store: Store,\r\n name: string = 'default',\r\n): ConsoleInspector {\r\n const inspector = new ConsoleInspector(store, name);\r\n if (typeof window !== 'undefined') {\r\n window.$mobxData = inspector;\r\n window.$m = (input: string) => inspector.command(input);\r\n }\r\n return inspector;\r\n}\r\n\r\nexport function enableDevTools(\r\n store: Store,\r\n storeId?: string,\r\n): () => void {\r\n if (typeof window === 'undefined') {\r\n return () => {};\r\n }\r\n\r\n if (!bridge) {\r\n bridge = new DevToolsBridge();\r\n bridge.install();\r\n }\r\n\r\n storeCounter += 1;\r\n const resolvedId = storeId ?? `store-${storeCounter}`;\r\n bridge.registerStore(resolvedId, store);\r\n\r\n return () => {\r\n bridge?.unregisterStore(resolvedId);\r\n };\r\n}\r\n\r\nexport function enableInspector(\r\n store: Store,\r\n name: string = 'default',\r\n): { consoleInspector: ConsoleInspector; cleanup: () => void } {\r\n const consoleInspector = enableConsoleInspector(store, name);\r\n const cleanup = enableDevTools(store, name);\r\n return { consoleInspector, cleanup };\r\n}\r\n"],"names":["KEYWORD_SET","OPERATOR_MAP","OPERATOR_CHARS","QueryParser","input","tokens","index","quote","value","operator","word","lower","numberValue","token","type","got","keyword","modelToken","modelName","filters","orderBy","limit","offset","first","children","groupKind","fieldToken","field","_a","_b","_c","_d","values","_e","_f","low","high","operatorToken","nextField","_g","_h","_i","_j","_k","summarizeRecord","record","detailRecord","internal","relationships","name","reference","errors","attribute","errorMessages","e","attributes","key","originalAttributes","extractSchemaInfo","store","attributeDefinitions","relationshipDefinitions","discriminator","definition","StoreInspector","types","totalRecords","count","a","b","id","found","r","text","queryObject","items","MdqlMemoryExecutor","callback","previousState","reaction","currentState","predicate","results","state","bucket","records","previous","current","currentBucket","previousBucket","currentStateValue","STYLE_HEADER","STYLE_DIRTY","STYLE_ERROR","STYLE_SAVED","STYLE_RESET","stateLabel","stateStyle","INSPECTOR_METHODS","createRecordResult","model","renderDetail","extensions","detail","target","property","ConsoleInspector","data","self","models","allRecords","recordIndex","s","summaries","names","result","summaryData","countMap","t","event","style","label","identifier","stateInfo","trimmed","parts","cmd","argument1","registeredTypes","resolvedType","m","showFunction","wrapped","accumulator","entry","changedKeys","attributeTable","referenceData","ids","typed","HOOK_KEY","SOURCE","VERSION","getGlobal","getEventTarget","global","DevToolsBridge","hook","storeId","eventTarget","messageEvent","inspector","disposer","payload","queryText","error","validTypes","message","origin","bridge","storeCounter","enableConsoleInspector","enableDevTools","resolvedId","enableInspector","consoleInspector","cleanup"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Store } from '@mobx-data/store';
2
+ import { ConsoleInspector } from './ConsoleInspector.js';
3
+ declare global {
4
+ interface Window {
5
+ $mobxData?: ConsoleInspector;
6
+ $m?: (input: string) => unknown;
7
+ }
8
+ }
9
+ export declare function enableConsoleInspector(store: Store, name?: string): ConsoleInspector;
10
+ export declare function enableDevTools(store: Store, storeId?: string): () => void;
11
+ export declare function enableInspector(store: Store, name?: string): {
12
+ consoleInspector: ConsoleInspector;
13
+ cleanup: () => void;
14
+ };
15
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../src/inspector/integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAMzD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE,gBAAgB,CAAC;QAC7B,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;KACjC;CACF;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAkB,GACvB,gBAAgB,CAOlB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,IAAI,CAiBZ;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAkB,GACvB;IAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAI7D"}
@@ -0,0 +1,7 @@
1
+ import type { Model } from '@mobx-data/model';
2
+ import type { Store } from '@mobx-data/store';
3
+ import type { RecordSummary, RecordDetail, SchemaInfo } from './types.js';
4
+ export declare function summarizeRecord(record: Model): RecordSummary;
5
+ export declare function detailRecord(record: Model): RecordDetail;
6
+ export declare function extractSchemaInfo(store: Store, modelName: string): SchemaInfo;
7
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/inspector/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa1E,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,aAAa,CAe5D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,CAoCxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CA6B7E"}
@@ -0,0 +1,139 @@
1
+ export interface StoreSummary {
2
+ types: Array<{
3
+ modelName: string;
4
+ count: number;
5
+ }>;
6
+ totalRecords: number;
7
+ }
8
+ export interface RecordSummary {
9
+ modelName: string;
10
+ id: string | null;
11
+ clientId: string;
12
+ currentState: string;
13
+ isNew: boolean;
14
+ isDirty: boolean;
15
+ isDeleted: boolean;
16
+ isError: boolean;
17
+ isLoading: boolean;
18
+ isSaving: boolean;
19
+ hasDirtyAttributes: boolean;
20
+ hasErrors: boolean;
21
+ }
22
+ export interface RecordDetail extends RecordSummary {
23
+ attributes: Record<string, unknown>;
24
+ originalAttributes: Record<string, unknown>;
25
+ changedAttributes: Record<string, [unknown, unknown]>;
26
+ relationships: Record<string, unknown>;
27
+ errors: Array<{
28
+ attribute: string;
29
+ messages: string[];
30
+ }>;
31
+ }
32
+ export interface SchemaInfo {
33
+ modelName: string;
34
+ isAbstract: boolean;
35
+ discriminator: {
36
+ key: string;
37
+ } | null;
38
+ attributes: Array<{
39
+ name: string;
40
+ type: string | null;
41
+ }>;
42
+ relationships: Array<{
43
+ name: string;
44
+ kind: 'belongsTo' | 'hasMany';
45
+ type: string;
46
+ async: boolean;
47
+ inverse: string | null;
48
+ polymorphic: boolean;
49
+ }>;
50
+ }
51
+ export interface InspectorChangeEvent {
52
+ type: 'added' | 'removed' | 'updated';
53
+ modelName: string;
54
+ id: string | null;
55
+ record?: RecordSummary;
56
+ }
57
+ export interface DevToolsMessage {
58
+ source: 'mobx-data-devtools';
59
+ direction: 'page-to-panel' | 'panel-to-page';
60
+ payload: DevToolsPayload;
61
+ }
62
+ export type DevToolsPayload = DevToolsInitPayload | DevToolsSummaryPayload | DevToolsRecordsPayload | DevToolsRecordDetailPayload | DevToolsSchemaPayload | DevToolsSnapshotPayload | DevToolsChangeEventPayload | DevToolsQueryResultPayload | DevToolsRequestSummaryPayload | DevToolsRequestRecordsPayload | DevToolsRequestRecordDetailPayload | DevToolsRequestSchemaPayload | DevToolsRequestSnapshotPayload | DevToolsRequestQueryPayload;
63
+ export interface DevToolsInitPayload {
64
+ type: 'init';
65
+ storeId: string;
66
+ storeCount: number;
67
+ version: string;
68
+ }
69
+ export interface DevToolsSummaryPayload {
70
+ type: 'summary';
71
+ storeId: string;
72
+ data: StoreSummary;
73
+ }
74
+ export interface DevToolsRecordsPayload {
75
+ type: 'records';
76
+ storeId: string;
77
+ modelName: string;
78
+ data: RecordSummary[];
79
+ }
80
+ export interface DevToolsRecordDetailPayload {
81
+ type: 'recordDetail';
82
+ storeId: string;
83
+ modelName: string;
84
+ id: string;
85
+ data: RecordDetail;
86
+ }
87
+ export interface DevToolsSchemaPayload {
88
+ type: 'schema';
89
+ storeId: string;
90
+ modelName: string;
91
+ data: SchemaInfo;
92
+ }
93
+ export interface DevToolsSnapshotPayload {
94
+ type: 'snapshot';
95
+ storeId: string;
96
+ data: unknown;
97
+ }
98
+ export interface DevToolsChangeEventPayload {
99
+ type: 'changeEvent';
100
+ storeId: string;
101
+ event: InspectorChangeEvent;
102
+ }
103
+ export interface DevToolsRequestSummaryPayload {
104
+ type: 'requestSummary';
105
+ storeId: string;
106
+ }
107
+ export interface DevToolsRequestRecordsPayload {
108
+ type: 'requestRecords';
109
+ storeId: string;
110
+ modelName: string;
111
+ }
112
+ export interface DevToolsRequestRecordDetailPayload {
113
+ type: 'requestRecordDetail';
114
+ storeId: string;
115
+ modelName: string;
116
+ id: string;
117
+ }
118
+ export interface DevToolsRequestSchemaPayload {
119
+ type: 'requestSchema';
120
+ storeId: string;
121
+ modelName: string;
122
+ }
123
+ export interface DevToolsRequestSnapshotPayload {
124
+ type: 'requestSnapshot';
125
+ storeId: string;
126
+ }
127
+ export interface DevToolsRequestQueryPayload {
128
+ type: 'requestQuery';
129
+ storeId: string;
130
+ queryText: string;
131
+ }
132
+ export interface DevToolsQueryResultPayload {
133
+ type: 'queryResult';
134
+ storeId: string;
135
+ queryText: string;
136
+ data: RecordSummary[];
137
+ error: string | null;
138
+ }
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/inspector/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../JsonApiSerializer-Bc4iQB0d.cjs");Object.defineProperty(exports,"JsonApiAdapter",{enumerable:!0,get:()=>e.JsonApiAdapter});Object.defineProperty(exports,"JsonApiSerializer",{enumerable:!0,get:()=>e.JsonApiSerializer});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../JsonApiSerializer-Dt_Y_FIo.cjs");Object.defineProperty(exports,"JsonApiAdapter",{enumerable:!0,get:()=>e.JsonApiAdapter});Object.defineProperty(exports,"JsonApiSerializer",{enumerable:!0,get:()=>e.JsonApiSerializer});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- import { J as e, a as i } from "../JsonApiSerializer-wndq5a1n.js";
1
+ import { J as e, a as i } from "../JsonApiSerializer-BV61cFAZ.js";
2
2
  export {
3
3
  e as JsonApiAdapter,
4
4
  i as JsonApiSerializer
@@ -0,0 +1,17 @@
1
+ import type { Model } from '@mobx-data/model';
2
+ import type { MdqlQueryObject } from './types.js';
3
+ export declare class MdqlMemoryExecutor {
4
+ static executeMany<T extends Model = Model>(items: T[], query: MdqlQueryObject): T[];
5
+ static executeOne<T extends Model = Model>(items: T[], query: MdqlQueryObject): T | null;
6
+ static count<T extends Model = Model>(items: T[], query: MdqlQueryObject): number;
7
+ static exists<T extends Model = Model>(items: T[], query: MdqlQueryObject): boolean;
8
+ static compilePredicate<T extends Model = Model>(query: MdqlQueryObject): (record: T) => boolean;
9
+ private static matchesNode;
10
+ private static resolveFieldValues;
11
+ private static resolveFieldValue;
12
+ private static evaluateCondition;
13
+ private static evaluateSingleCondition;
14
+ private static compareValues;
15
+ private static sortRecords;
16
+ }
17
+ //# sourceMappingURL=MdqlMemoryExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdqlMemoryExecutor.d.ts","sourceRoot":"","sources":["../../src/mdql/MdqlMemoryExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACxC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,eAAe,GACrB,CAAC,EAAE;IAkBN,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACvC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,eAAe,GACrB,CAAC,GAAG,IAAI;IAKX,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAClC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,eAAe,GACrB,MAAM;IAUT,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACnC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,eAAe,GACrB,OAAO;IAMV,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAC7C,KAAK,EAAE,eAAe,GACrB,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO;IAIzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAuB1B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqBjC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAWhC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA2DtC,OAAO,CAAC,MAAM,CAAC,aAAa;IAmB5B,OAAO,CAAC,MAAM,CAAC,WAAW;CAwB3B"}
@@ -0,0 +1,38 @@
1
+ import type { Model } from '@mobx-data/model';
2
+ import type { Store } from '@mobx-data/store';
3
+ import type { RecordArray } from '../store/RecordArray.js';
4
+ import type { MdqlOperator, MdqlOperatorFor, MdqlValueFor, MdqlQueryObject, MdqlSortDirection, ModelFields } from './types.js';
5
+ type Fields<T extends Model> = ModelFields<T>;
6
+ type FieldKey<T extends Model> = Extract<keyof Fields<T>, string>;
7
+ export declare class MdqlQueryBuilder<T extends Model = Model> {
8
+ private readonly store;
9
+ private readonly queryModelName;
10
+ private readonly rootGroup;
11
+ private readonly orderByClauses;
12
+ private limitValue;
13
+ private offsetValue;
14
+ private readonly includesList;
15
+ constructor(store: Store, modelName: string);
16
+ where<TKey extends FieldKey<T>, TOp extends MdqlOperatorFor<Fields<T>[TKey]>>(field: TKey, operator: TOp, value?: MdqlValueFor<Fields<T>[TKey], TOp>): this;
17
+ where(field: string, operator: MdqlOperator, value?: unknown): this;
18
+ whereEquals<TKey extends FieldKey<T>>(field: TKey, value: Fields<T>[TKey]): this;
19
+ whereEquals(field: string, value: unknown): this;
20
+ whereContains<TKey extends FieldKey<T>>(field: TKey, value: string): this;
21
+ whereContains(field: string, value: string): this;
22
+ and(callback: (builder: MdqlQueryBuilder<T>) => void): this;
23
+ or(callback: (builder: MdqlQueryBuilder<T>) => void): this;
24
+ not(callback: (builder: MdqlQueryBuilder<T>) => void): this;
25
+ orderBy(field: FieldKey<T>, direction?: MdqlSortDirection): this;
26
+ orderBy(field: string, direction?: MdqlSortDirection): this;
27
+ limit(value: number): this;
28
+ offset(value: number): this;
29
+ include(relation: string): this;
30
+ toQueryObject(): MdqlQueryObject;
31
+ toArray(): Promise<T[]>;
32
+ first(): Promise<T | null>;
33
+ count(): Promise<number>;
34
+ exists(): Promise<boolean>;
35
+ toLiveArray(): RecordArray<T>;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=MdqlQueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdqlQueryBuilder.d.ts","sourceRoot":"","sources":["../../src/mdql/MdqlQueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SchemaService } from '@mobx-data/schema';
2
+ import { type MdqlQueryObject, type MdqlValidationError } from './types.js';
3
+ export declare class MdqlValidationException extends Error {
4
+ readonly errors: MdqlValidationError[];
5
+ constructor(errors: MdqlValidationError[]);
6
+ }
7
+ export declare class MdqlValidator {
8
+ static validate(query: MdqlQueryObject, schema: SchemaService): void;
9
+ static validateQuiet(query: MdqlQueryObject, schema: SchemaService): MdqlValidationError[];
10
+ private static resolveFieldAttribute;
11
+ private static validateFilterNode;
12
+ }
13
+ //# sourceMappingURL=MdqlValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdqlValidator.d.ts","sourceRoot":"","sources":["../../src/mdql/MdqlValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAgB,MAAM,EAAE,mBAAmB,EAAE,CAAC;gBAElC,MAAM,EAAE,mBAAmB,EAAE;CAM1C;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAOpE,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,aAAa,GACpB,mBAAmB,EAAE;IAsExB,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA6BpC,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA8DlC"}
@@ -0,0 +1,6 @@
1
+ export { MdqlQueryBuilder } from './MdqlQueryBuilder.js';
2
+ export { MdqlValidator, MdqlValidationException } from './MdqlValidator.js';
3
+ export { MdqlMemoryExecutor } from './MdqlMemoryExecutor.js';
4
+ export type { MdqlQueryObject, MdqlFilterNode, MdqlCondition, MdqlLogicalGroup, MdqlOperator, MdqlUnaryOperator, MdqlSortDirection, MdqlOrderByClause, MdqlValidationError, ModelFields, MdqlOperatorFor, MdqlValueFor, MdqlStringOperator, MdqlNumberOperator, MdqlBooleanOperator, } from './types.js';
5
+ export { ALL_OPERATORS, OPERATORS_FOR_TYPE } from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mdql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,48 @@
1
+ export type MdqlOperator = 'equals' | 'notEquals' | 'in' | 'notIn' | 'isNull' | 'isNotNull' | 'contains' | 'startsWith' | 'endsWith' | 'greaterThan' | 'greaterThanOrEquals' | 'lessThan' | 'lessThanOrEquals' | 'between';
2
+ export type MdqlUnaryOperator = 'isNull' | 'isNotNull';
3
+ export type MdqlSortDirection = 'asc' | 'desc';
4
+ export interface MdqlCondition {
5
+ kind: 'condition';
6
+ field: string;
7
+ operator: MdqlOperator;
8
+ value: unknown;
9
+ }
10
+ export interface MdqlLogicalGroup {
11
+ kind: 'and' | 'or' | 'not';
12
+ children: MdqlFilterNode[];
13
+ }
14
+ export type MdqlFilterNode = MdqlCondition | MdqlLogicalGroup;
15
+ export interface MdqlOrderByClause {
16
+ field: string;
17
+ direction: MdqlSortDirection;
18
+ }
19
+ export interface MdqlQueryObject {
20
+ modelName: string;
21
+ filters: MdqlLogicalGroup;
22
+ orderBy: MdqlOrderByClause[];
23
+ limit: number | null;
24
+ offset: number | null;
25
+ includes: string[];
26
+ }
27
+ export interface MdqlValidationError {
28
+ path: string;
29
+ message: string;
30
+ }
31
+ export declare const OPERATORS_FOR_TYPE: Record<string, ReadonlySet<MdqlOperator>>;
32
+ export declare const ALL_OPERATORS: ReadonlySet<MdqlOperator>;
33
+ import type { Model } from '@mobx-data/model';
34
+ export type ModelFields<T extends Model> = Omit<T, keyof Model>;
35
+ export type MdqlStringOperator = 'equals' | 'notEquals' | 'in' | 'notIn' | 'isNull' | 'isNotNull' | 'contains' | 'startsWith' | 'endsWith';
36
+ export type MdqlNumberOperator = 'equals' | 'notEquals' | 'in' | 'notIn' | 'isNull' | 'isNotNull' | 'greaterThan' | 'greaterThanOrEquals' | 'lessThan' | 'lessThanOrEquals' | 'between';
37
+ export type MdqlBooleanOperator = 'equals' | 'notEquals' | 'isNull' | 'isNotNull';
38
+ export type MdqlOperatorFor<T> = [
39
+ T
40
+ ] extends [string] ? MdqlStringOperator : [
41
+ T
42
+ ] extends [number] ? MdqlNumberOperator : [
43
+ T
44
+ ] extends [boolean] ? MdqlBooleanOperator : [
45
+ T
46
+ ] extends [Date] ? MdqlNumberOperator : MdqlOperator;
47
+ export type MdqlValueFor<TField, TOp extends MdqlOperator> = TOp extends 'isNull' | 'isNotNull' ? undefined : TOp extends 'in' | 'notIn' ? TField[] : TOp extends 'between' ? [TField, TField] : TField;
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mdql/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,IAAI,GACJ,OAAO,GACP,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,UAAU,GACV,aAAa,GACb,qBAAqB,GACrB,UAAU,GACV,kBAAkB,GAClB,SAAS,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAeD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,CAKxE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,YAAY,CAIlD,CAAC;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAChE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3C,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAChE,aAAa,GAAG,qBAAqB,GAAG,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAExF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAElF,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B;IAAC,CAAC;CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,kBAAkB,GACzC;IAAC,CAAC;CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,kBAAkB,GACzC;IAAC,CAAC;CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,mBAAmB,GAC3C;IAAC,CAAC;CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,kBAAkB,GACvC,YAAY,CAAC;AAEf,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,GAAG,SAAS,YAAY,IACvD,GAAG,SAAS,QAAQ,GAAG,WAAW,GAAG,SAAS,GAC9C,GAAG,SAAS,IAAI,GAAG,OAAO,GAAG,MAAM,EAAE,GACrC,GAAG,SAAS,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAAC"}
@@ -101,6 +101,8 @@ export declare abstract class Model {
101
101
  protected _relationships: Map<string, RelationshipRef>;
102
102
  /** Server-assigned id, or `null` for new records. */
103
103
  protected _id: string | null;
104
+ /** Client-generated identifier for new records that don't yet have a server id. */
105
+ readonly _clientId: string;
104
106
  /** Internal lifecycle state machine. */
105
107
  protected _stateMachine: StateMachine;
106
108
  /** Observable validation error collection. */
@@ -111,6 +113,8 @@ export declare abstract class Model {
111
113
  /** Server-assigned id, or `null` for new records. */
112
114
  get id(): string | null;
113
115
  set id(v: string | null);
116
+ /** Returns a stable identifier: the server-assigned `id` if available, otherwise the client-generated `_clientId`. */
117
+ get uniqueId(): string;
114
118
  /** Returns the static `modelName` from the concrete subclass constructor. */
115
119
  get modelName(): string;
116
120
  /** Current state-machine state string. */
@@ -1 +1 @@
1
- {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/model/Model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/model/Model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASzC;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EACF;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAC5B,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,GACnC,IAAI,CAAC;CACR;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3E,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IACzE,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,iBAAiB,CAAC,CAChB,MAAM,EAAE,KAAK,EACb,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,eAAe,GACnB,IAAI,CAAC;IACR,mBAAmB,CAAC,CAClB,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;IACX,oBAAoB,CAAC,CACnB,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,OAAO,GACb,IAAI,CAAC;CACT;AAED,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,mEAAmE;IACnE,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AA0FD,8BAAsB,KAAK;IACzB,8EAA8E;IAC9E,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,KAAK,EAChC,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,WAAW,GAChB,YAAY,CAAC,CAAC,CAAC;IAalB,iFAAiF;IACjF,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC9C,+FAA+F;IAC/F,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACtD,8DAA8D;IAC9D,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IACnE,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,mFAAmF;IACnF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAsB;IAChD,wCAAwC;IACxC,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IAEtC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAgB;IACvC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,cAAc,CAAC;gBAEX,OAAO,GAAE,uBAA4B;IA8DjD,qDAAqD;IACrD,IAAI,EAAE,IAAI,MAAM,GAAG,IAAI,CAEtB;IAED,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAItB;IAED,sHAAsH;IACtH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,6EAA6E;IAC7E,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,0CAA0C;IAC1C,IAAI,YAAY,IAAI,WAAW,CAE9B;IAED,yEAAyE;IACzE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,0EAA0E;IAC1E,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,4DAA4D;IAC5D,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,2EAA2E;IAC3E,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,iFAAiF;IACjF,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,2DAA2D;IAC3D,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,uEAAuE;IACvE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,mEAAmE;IACnE,IAAI,kBAAkB,IAAI,OAAO,CAchC;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAQrB;IAED,4EAA4E;IAC5E,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAgBvD;;;;OAIG;IACH,kBAAkB,IAAI,IAAI;IAiB1B;;;;;OAKG;IACG,IAAI,CACR,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;IAyChB;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAQpB;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAcpC,8EAA8E;IAC9E,YAAY,IAAI,IAAI;IAMpB,+DAA+D;IAC/D,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC;IAIhC,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1E,kEAAkE;IAClE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAMjC,yDAAyD;IACzD,OAAO,IAAI,IAAI;IACf,2DAA2D;IAC3D,SAAS,IAAI,IAAI;IACjB,+DAA+D;IAC/D,SAAS,IAAI,IAAI;IACjB,qDAAqD;IACrD,SAAS,IAAI,IAAI;IACjB,0DAA0D;IAC1D,QAAQ,IAAI,IAAI;IAChB,2DAA2D;IAC3D,OAAO,IAAI,IAAI;IACf,mEAAmE;IACnE,aAAa,IAAI,IAAI;IACrB,6DAA6D;IAC7D,WAAW,IAAI,IAAI;IAInB,6CAA6C;IAC7C,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAQ1D;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;IASpC,wFAAwF;IACxF,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI7C,8CAA8C;IAC9C,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI/C,gFAAgF;IAChF,SAAS,CAAC,gBAAgB,CACxB,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC9C,IAAI;IAkCP,gFAAgF;IAChF,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAInE,0EAA0E;IAC1E,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI;IAIvE;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,GACpB,OAAO;IAOV,sFAAsF;IACtF,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,OAAO,GACb,IAAI;CAKR"}
@@ -30,6 +30,8 @@ export interface HasManyReference {
30
30
  export declare class Snapshot<T extends Model = Model> {
31
31
  /** Server-assigned id at snapshot time, or `null` for new records. */
32
32
  readonly id: string | null;
33
+ /** Client-generated identifier, always present. */
34
+ readonly clientId: string;
33
35
  /** `modelName` of the snapshotted record. */
34
36
  readonly modelName: string;
35
37
  /** Reference to the live record (read-only from adapter/serializer code). */
@@ -1 +1 @@
1
- {"version":3,"file":"Snapshot.d.ts","sourceRoot":"","sources":["../../src/model/Snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD,qBAAa,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4B;IAClE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA+B;gBAE5D,MAAM,EAAE,CAAC;IAmBrB,4DAA4D;IAC5D,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAIrC;;;;;OAKG;IACH,SAAS,CACP,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,GACxB,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAYrC;;;;OAIG;IACH,OAAO,CACL,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,GACzB,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAIvD,6EAA6E;IAC7E,aAAa,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAMxE,gFAAgF;IAChF,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;CAK/E"}
1
+ {"version":3,"file":"Snapshot.d.ts","sourceRoot":"","sources":["../../src/model/Snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD,qBAAa,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4B;IAClE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA+B;gBAE5D,MAAM,EAAE,CAAC;IAoBrB,4DAA4D;IAC5D,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAIrC;;;;;OAKG;IACH,SAAS,CACP,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,GACxB,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAYrC;;;;OAIG;IACH,OAAO,CACL,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,GACzB,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAIvD,6EAA6E;IAC7E,aAAa,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAMxE,gFAAgF;IAChF,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;CAK/E"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../relationships-B55LBaCW.cjs");exports.AsyncBelongsTo=e.AsyncBelongsTo;exports.AsyncHasMany=e.AsyncHasMany;Object.defineProperty(exports,"Errors",{enumerable:!0,get:()=>e.Errors});exports.ManyArray=e.ManyArray;exports.Model=e.Model;exports.Snapshot=e.Snapshot;exports.StateMachine=e.StateMachine;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../relationships-BgM0NKdb.cjs");exports.AsyncBelongsTo=e.AsyncBelongsTo;exports.AsyncHasMany=e.AsyncHasMany;Object.defineProperty(exports,"Errors",{enumerable:!0,get:()=>e.Errors});exports.ManyArray=e.ManyArray;exports.Model=e.Model;exports.Snapshot=e.Snapshot;exports.StateMachine=e.StateMachine;
2
2
  //# sourceMappingURL=index.cjs.map