Tim Evans
Tim Evans
Some examples of how this would be used in the wild would be lovely too! Is this the correct invocation for something? ```ts let doc = new Document({ content: 'Hello,...
If you feel comfortable, could you define a general interface for Document and Collection so there's more of a bird's eye view of what would be affected? (This is an...
I've created a [working example of this in the TypeScript Playground](https://www.typescriptlang.org/play/index.html#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-YZTagVO3NUqlGDalrype+OAxCDwqi-OQyh-jAnnF1BCcM38B7WkGU2SM0ZRHoLgGAJQw4NBTzgQsgSwzjB8PqA7HePVtlHLhYsvpKTCoLkeMlMWgr0RCPaXw7YHKSGHi-HwlEhBMDcFYkazlR4eVwFztZWyDt6EErxFmSmGJ0gwCedk6YncwFPCKAwyCb4IKOk4C6N0l5CrtTFm0nByjhlWvHi7CoGqtrsG0XwzN0Le76qloaoSDryz0trPWRsVqaSioxGQIZxcdarMxXAUhMaBKFTDtbM0ba+G0DjD2xRI80GvidGmvZma+Y5tecHHG+bD4HIqNQRR1Ey2ZEUZW+R71FGnJDvWrl6pk6jGPeuHQFBimxAoHAAAZG+kwAt21dzjHur6wEACEOgsgBLos6V0y7HiRLFrms5W6WaFvMRUDCpbtFQkeG8169yL04xLA2uAFYqnNsSng79k7rTqS+t0GdnM+12kHROge06FEAZAncJEJ9wPFx2QElphjYProOWVW5YDtVhGOhqOVwAFXjgLUfFmk9J1eDGnOuA9gq5fUvl4Uu3EK6aZrn0ye09DSfG6Bp2hbcqF6ZoVp2ujdwzKbKsPO1eorXQgs3Zj+imv7Uk8zXDztmH6+fRJO7EA8HQVAAFRxmQGEHIhYnjAGjBIaA6Y5SEJS58GQpUm77CINATkg4h32TNCKrudrjBhGAK62wJXLzOuTcW42MiBqbWfb4dx-7MBeD5nawd3q+a2D5fx2QfNwzCdy2q-Yep-OX0jdApkA8FvdZQZF4wvgjhwEOLEe4cojWDvK4sp4O3fD3HW3AAA9JdlA6BoD3GDHVqEiTJG0FiZIuxrWManv4J8xuPyyU9eeT44w2iRt7LaeGP2ZjjFu2sR9qJ45Xk-dYrhlRaikjeO2eDoJwmwnhxtnbbx5zxUvf+UavEuLZgoiJRk6nGPMAUpKdS-k5SvCVJrDUpnsQT5NL4xDybZMBkfZo2MiZqApmcihaVRFayCworB7s3HLsypC4uQju0NzkcOxcX0p5X2Coo7+6bb502-kxnBZC5aKnZfIs2aikF-aoGU+JVkglUxmV05Je7rOjOWU+5pSsdnTaURQOAJ7jrof9hsspECzR6LQUMC0Ua+cnJHh8wtbiFX5vbUeu21tg20I3PkeY+b4CJolwAj9lHgbFDeP8ukJnp4c2I2LZ-cd8303Sm9kqCOq2CEzQGwYbsXk0O1rCbli551hQ3XjlT90aDSIm9WvDDnyr+f4CF50Ob74vuzTV4YbX3lSuBWzaC-Ntvk6nid6pXgVZeAaD97+ACIfUCR8CHxxEonSI9BT7fDP91efHfR-cJAfAEAAMUg0vHXyP3r1Gybxb2FV4QHmv0lTyAlRbCgFtWn1dUAIXFvR3wfU3CbV3Dz1gJxwFSpTPwM3myoOQK7lQMwN6B7zJ0bBwBtHFClFlG2FXzQKwLRU1FETQSa2MAKygAAFF4J0BRcAlxdJcrdVwVNwwaBbA8pXcoBHMoAoAcAUxnN0xZdLAIBw9XN6CO9oBJCMAZDxlJlpURRgEjorC5DplrcyplC7A1Cvc8hNDtDdDVNZcUp+sCMjspYnhgFHCbCLtO9RlZDJlnDFDXCR1VDPBPCNDKgtCdCVMXMe87dgxAjr1L8UCoixcIiRCB1MBbBOg7EZpptnAKiEJkku9KhUBNNVBeBPgdMFsq4tCa48YxwlCGEujnBL5kokj1CFthgfDMj0wUEe8UonkaBktgARxeigcUpk9+1DtTCQjajKjugdj6i3DFjljlpbCUMIBBB0iuw8ijxgjN4HQnQeMhsKDDEKgAAZFwGAA3LqDrDhQTNrD-HdYwd4ogGAE5UTAScTM2AwV5Z4-ZFXYE0EgePLYSewagbgMIO9L6LwBEvmYzA0KAD4HoO0FvHTahGg+zU2J5JzBEk5YeJ5brbEj44FUHCnVQBgKAczc-VvCjR+dEbraEbrC7CAJoKAMUIw2QUqYAXwdAT449V5H4sqKUmUsE7XSmSEgHEhJUmAWE3rRRYbE-QxSU6U2Ur6CbFXI05UpEp5c3HUbgdAAYGk5bAde0lTLUk5W3eXe3XxO0DkchDsH0uAMUzBYTHExRcMR0rucMC0k0zAKMt0pElPBcJQY02E5vLkuAYDO4PzLk9fa7UYJ4ZQJ4KkWxStPAUZd1B7eAQkStSUOKZQgEe4ccUqAACWQAAHIBAW9K1QNuAFs8zGz1QrJMA2znA4BKxVBTAxzxS-A4BOIwtKyTA7tWjbBqA2z4B0AcBrBZUvZFj2gR0GF+ysB1MuSngGF7hSBKFvVxCtCiSCUKAgzqAZywsSAyBUQrIIB1N5xiohj4AW9zoBBRBqAABaViOgEIEcIs0qFwCcmc5gRhS+GgMcJ4CgYfRrO0YrZwWgVomAbQUYOvB8q5SkQEzUUM00hhCMxZBbaM8bBhaMk5O0dxQkcMP-ELZ4MQiw6Qw4EEv2HvJ3DfKcmgMEnQZMmU1Mq-G-AlESxEymXixlMo-IzvLi6SsBcMKSv2IQzUGPfYV8M83SB8xCDQcgHQKCtoKAWwGQUi2MuACiqWAwN9KlEy6Acy6isMxU402k2GSeAcLbSscU6EPi4wOMPUbrTMfPbih2BbQKqS1MkKrwXywSgeBNGvTQbC54MACc6Q+Kq8AQfSwyjSxNBjAjTC1Ki7LKnLLUr49repOM9ygecEuEdUmorUnU4HfU-nIJFy00hTYxOiq035Pg20l06yj4k5VSoa3qirbIz0rZUHAFWPPC-0+agikMpk1ymyzeGqmU8bNyy0ruPLT1L8PUYU6MB8vY5qg06gXgzAsVEXQ-RgJynvZwUy2wOMaKi6p4EKk7GwM7dAOAAwAABjW2TQeIREDPFKuT+Ixg3Q4Usr+h+LeJGrqtVLEyyg4U6qR3+LEliDRvjK7nqqCSynNjImk1kzCpgAfN1K+jaob1kEsrNPMWGvCr2oKBJokHHAAH0sqt5LjCKyp7qzKLLVqur1qoY7K+bnryrjTtqJrFlh5IE-q8S3gCTZ50KPiKbWrYTBaQTtqVqmbFk9Ankub6gebaL+bzK6bGblLbL31xanLJatrXKZapY5aGL1jWKvqQSHzoQlKHzeTnhObxTcKuahSRSCLJRGyoBKqBAFTw7JEVTMbt4soNSlRzr2q8INaLqZBY68gdaVds6oATkDb+rMCdQGE7SBhHKBaLaRaSI7KHKzb7aYzNqrbN45aFsoAhqC5KQPSNkZr2U5r9hfT6ooAAyCKqViKoE6aqUa72hIqdqYzM586aKCUnbN5F6I76KoF9rjVOQ3q07pA0zySMyNw9QfbxTD7LNcybtqACyiyI659Mop4+BxwFzqzMNaz6ziyB0tS4ANy7ATBw9hzOz0zMMey+ybsByLlhzRzxzJysqZy5y6qFzaAlzuAVy1zf7NzxxIBcJf4aADyIGjyW9TyoFzyoo8LKFrzSAOSqV7zpzYh6sSJiBSByAYB3zPyiBvyAs-zuzpAQKbBcJojILoLcIGG4KW5ELMBkLUKk1Vb4BiqoxcLvUx6oEJ79gp7J7EbIzaKKrj0OQl6wydHaq8b9GN7ErKRGLqQz6aBmL9CvK28A7H9r9zCpDugsrZKoFissqhLv6Uz3rxK+DGjjAzrjGwFNVKZZcAr7UFLAmsrVLcawENLKQtLQd7GEg9LxSDLsBoRK7zaharKZ66A66V6G70bm6PLimsVcms6I7tr86Km0mrsbtvE0AlAF5jzNBVz4AxlyGJzRQTAcBip0TEi8pFtwx6ob0lzpSCGv6oRaAGxDLFzhS0H1MjgaxFsGE3G-L-xbxXrU6aaPrZ1oRvGIs7qsLFGnh0qUGtmaBd9crsB8qdKPwiqUrFHSrwaDGXlMaY6zG8bkaISk6mq-H97qBKbyjNbPmrLhN6m+rKQbTOQy7xqG7q6tH9b3166Jayn56Kn27O6HYZjVkcjqBvT5q-S8hR7wbx6i0CUNGsVCnaA570b17JFl6qmEmpZmW8hN7NRt7Nj0Rjq8hTq96aarqpUnhxU7rnrHqza9ngWDnPrTt7g-q4BAbu6LsJW4WBqEWoEsqVNkX8nwzUXrb7KSnMXdGurV6oYXbu6pre7iWWSNiCNlHxSm9rHLqHGubGDowMCpVTjjArnpC7RdXbaq6DXLbC70WoFqmsXLWSJrX2UjU9RHG6BLmMqbnUULs2TbA2bptojrCJdS6dXxS9WJaUW9bjWMW7aY32XW7YYCWDBDDw83az5qRk22KXHLC825DbCQbGJrKaAEx8bWkyJTJSpXiWV9ANR3ILBrAvIoAnAfIlJH1-giBWIYAgohgZIoRH1uAB2YouBQaAAhQsOrf51yLSEKTyewedhSXyZdzhtdjd6d33ZSfMNB-dnjcyVQqAXd8hIdziNybSK97yRSZSFdx9goZ97dygV0b939wybjA0QjB9o4WDHQMiVDFSMAMAXd0ZS8S7SwOwGkGANSaQAAanA6OAoA4RwnTooAAEZqPi0B4l5KRXiB2nlj20Gnkv28h4Pgbd8TMi5QbhAMBCsz2gkyJ0AFIJ28tn3Z3r2F3QPH0ZSQBuAn2gPoOVIP3QbkBFBpBfB-31RAPL2FOQO73KBVP1PIPNPdJH1ogDP93itmyUoABZV4tD9CdRCgDQbiS7Kzpj4wWj0SBjwLxh7hI1UTu7DQu0PT0gWIYGloYrDTAUuvXTGAfTSzQNeC5hSgArCAMLpzOMO0b1djiybLwRcNLwf6hbIoLwej8Y1nWoWMH1MdrwCgGUmAMAOoa7V4VQvdUwfUEAV9LSnYekuvMrhMCr-YYNOAAAJlq+jQAGZGvGhmvBhR3x3LOFBuuPBrsrJgBaihuRuRFxvKEuPbAuQhgRgGuPcvA5ucwKhHxR5ENkPV3UOBZHQdLp4NkTsIBfBuhivjAngQeNM7RxWRdJuBDgfxU78DB2DA9nhNuw1hgcKAB1ZLaQjrnbnry7A7o7toYb21dgOx+idoX77gf74ZMHykCH2xboCgSb3ccH2HnvBHprzQJ4ZHvEWgDHvbbHrr3H-H8o474n2n5gC4nwuUMtIucnw4P7gHioGn-YOn+JJATD39hMEb6HuAVXoZXobEgd2Xdntbzn7n8NXnzHhnzr3b-bw7kXwn3cHXjgyXnQ6X77uXqRyngHjTJLagboFz9zsWbAzgLxvynQZXvXhnpngQmkRsCgTX5n4HrKzk1AKPigXjn9mgQya0PgBn2Dvj7P6GHgorDjuAAvrP8hSJwq-IzXlHrEIgiv+D+v+AD9bbAduNf+xv9wyvqRooLjUPrbTX3C338VKL6AXP+PxP18IAA)
Ok, so I've worked through this a bit and this requires a lot of moving parts, but there's a few things that we can do in preparation to start this...
Also, here's a list of breaking changes that will likely be occurring in this proposal: - `schema` is an additional property for the constructor to a Document. - `fromRaw` on...
This feature is a bit... all encompassing. It is a major improvement to the core api, but definitely touches a whole load of stuff. To make these changes reasonably reviewable,...
This is an idea I had for this: https://gist.github.com/tim-evans/0893e956afc460cc53b9e0387d3e6ba3 I'm not sure how to extrapolate this code into a renderer, though...
This [post](https://artsy.github.io/blog/2018/11/21/conditional-types-in-typescript/) on the Artsy blog has a solution specifically for this: ```ts constructor( attrs: {} extends Attributes ? { id?: string; start: number; end: number; attributes?: Attributes } :...
nb. I tried doing this and it requires us to use schemas 😠The tldr on this is that TypeScript really doesn't like it when we have different arguments to...
This would be cool to have as an addition. I don't think we have the bandwidth for this, but it'd definitely be something that's inline with what we have here.