@palantir/pack.state.core 0.1.0-beta.2 → 0.1.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 (33) hide show
  1. package/.turbo/turbo-lint.log +2 -2
  2. package/.turbo/turbo-transpileBrowser.log +1 -1
  3. package/.turbo/turbo-transpileCjs.log +1 -1
  4. package/.turbo/turbo-transpileEsm.log +1 -1
  5. package/.turbo/turbo-transpileTypes.log +1 -1
  6. package/.turbo/turbo-typecheck.log +1 -1
  7. package/CHANGELOG.md +22 -0
  8. package/build/browser/index.js +48 -0
  9. package/build/browser/index.js.map +1 -1
  10. package/build/cjs/index.cjs +48 -0
  11. package/build/cjs/index.cjs.map +1 -1
  12. package/build/cjs/index.d.cts +13 -1
  13. package/build/esm/index.js +48 -0
  14. package/build/esm/index.js.map +1 -1
  15. package/build/types/__tests__/Transaction.test.d.ts +1 -0
  16. package/build/types/__tests__/Transaction.test.d.ts.map +1 -0
  17. package/build/types/__tests__/testUtils.d.ts.map +1 -1
  18. package/build/types/service/BaseYjsDocumentService.d.ts +5 -1
  19. package/build/types/service/BaseYjsDocumentService.d.ts.map +1 -1
  20. package/build/types/service/InMemoryDocumentService.d.ts.map +1 -1
  21. package/build/types/types/DocumentRefImpl.d.ts.map +1 -1
  22. package/build/types/types/DocumentService.d.ts +5 -1
  23. package/build/types/types/DocumentService.d.ts.map +1 -1
  24. package/build/types/types/StateModule.d.ts +9 -1
  25. package/build/types/types/StateModule.d.ts.map +1 -1
  26. package/package.json +6 -6
  27. package/src/__tests__/Transaction.test.ts +321 -0
  28. package/src/__tests__/testUtils.ts +1 -2
  29. package/src/service/BaseYjsDocumentService.ts +33 -0
  30. package/src/service/InMemoryDocumentService.ts +28 -1
  31. package/src/types/DocumentRefImpl.ts +38 -0
  32. package/src/types/DocumentService.ts +27 -0
  33. package/src/types/StateModule.ts +58 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/DocumentServiceModule.ts","../../src/types/StateModule.ts","../../src/types/DocumentRefImpl.ts","../../src/types/DocumentService.ts","../../src/types/RecordCollectionRefImpl.ts","../../src/types/RecordRefImpl.ts","../../src/service/YjsSchemaMapper.ts","../../src/service/BaseYjsDocumentService.ts","../../src/service/InMemoryDocumentService.ts"],"names":["getMetadata","Y2"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DOCUMENT_SERVICE_MODULE_KEY = {\n key: Symbol(\"DocumentService\"),\n initModule: initDocumentService\n};\nexport function getDocumentService(app) {\n return app.getModule(DOCUMENT_SERVICE_MODULE_KEY);\n}\nexport function createDocumentServiceConfig(init, config) {\n return [DOCUMENT_SERVICE_MODULE_KEY, {\n ...config,\n init\n }];\n}\nfunction initDocumentService(app, config) {\n if (config == null) {\n throw new Error(\"DocumentServiceConfig is required to initialize DocumentService\");\n }\n return config.init(app, config);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assertIsAppInternal } from \"@palantir/pack.core\";\nimport { DOCUMENT_SERVICE_MODULE_KEY } from \"../DocumentServiceModule.js\";\n// Ensure state module is accessible on PackApp instances.\nexport const STATE_MODULE_ACCESSOR = \"state\";\nexport const STATE_MODULE_KEY = {\n appMemberName: STATE_MODULE_ACCESSOR,\n key: Symbol.for(\"pack.state\"),\n initModule: app => {\n const documentService = app.getModule(DOCUMENT_SERVICE_MODULE_KEY);\n return new StateModuleImpl(documentService);\n }\n};\nexport class StateModuleImpl {\n constructor(documentService) {\n this.documentService = documentService;\n }\n createDocRef(id, schema) {\n return this.documentService.createDocRef(id, schema);\n }\n createRecordRef(docRef, id, model) {\n return this.documentService.getCreateRecordRef(docRef, id, model);\n }\n async createDocument(metadata, schema) {\n return this.documentService.createDocument(metadata, schema);\n }\n async getDocumentSnapshot(docRef) {\n return this.documentService.getDocumentSnapshot(docRef);\n }\n onMetadataChange(docRef, cb) {\n return this.documentService.onMetadataChange(docRef, cb);\n }\n onStateChange(docRef, cb) {\n return this.documentService.onStateChange(docRef, cb);\n }\n async getRecordSnapshot(recordRef) {\n return this.documentService.getRecordSnapshot(recordRef);\n }\n async setRecord(recordRef, state) {\n return this.documentService.setRecord(recordRef, state);\n }\n async updateRecord(recordRef, partialState) {\n return this.documentService.updateRecord(recordRef, partialState);\n }\n\n // Collection methods\n getCreateRecordCollectionRef(docRef, model) {\n return this.documentService.getCreateRecordCollectionRef(docRef, model);\n }\n\n // FIXME: confusing vs createRecordRef\n getRecord(collection, id) {\n return this.documentService.getRecord(collection, id);\n }\n hasRecord(collection, id) {\n return this.documentService.hasRecord(collection, id);\n }\n async setCollectionRecord(collection, id, state) {\n return this.documentService.setCollectionRecord(collection, id, state);\n }\n getCollectionSize(collection) {\n return this.documentService.getCollectionSize(collection);\n }\n getCollectionRecords(collection) {\n return this.documentService.getCollectionRecords(collection);\n }\n onRecordChanged(record, callback) {\n return this.documentService.onRecordChanged(record, callback);\n }\n onRecordDeleted(record, callback) {\n return this.documentService.onRecordDeleted(record, callback);\n }\n onCollectionItemsAdded(collection, callback) {\n return this.documentService.onCollectionItemsAdded(collection, callback);\n }\n onCollectionItemsChanged(collection, callback) {\n return this.documentService.onCollectionItemsChanged(collection, callback);\n }\n onCollectionItemsDeleted(collection, callback) {\n return this.documentService.onCollectionItemsDeleted(collection, callback);\n }\n\n // Status methods implementation\n getDocumentStatus(docRef) {\n return this.documentService.getDocumentStatus(docRef);\n }\n onStatusChange(docRef, callback) {\n return this.documentService.onStatusChange(docRef, callback);\n }\n async waitForMetadataLoad(docRef) {\n return this.documentService.waitForMetadataLoad(docRef);\n }\n async waitForDataLoad(docRef) {\n return this.documentService.waitForDataLoad(docRef);\n }\n async deleteRecord(record) {\n return this.documentService.deleteRecord(record);\n }\n}\nexport function getStateModule(app) {\n assertIsAppInternal(app);\n return app.getModule(STATE_MODULE_KEY);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DocumentRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { getStateModule } from \"./StateModule.js\";\nconst INVALID_DOC_REF_ID = \"INVALID_DOC_REF\";\nconst INVALID_DOC_REF = Object.freeze({\n id: INVALID_DOC_REF_ID,\n schema: {},\n [DocumentRefBrand]: DocumentRefBrand,\n getDocSnapshot: () => Promise.reject(new Error(\"Invalid document reference\")),\n getRecords: () => {\n throw new Error(\"Invalid document reference\");\n },\n onMetadataChange: () => () => {},\n onStateChange: () => () => {}\n});\nexport const createDocRef = (app, id, schema) => {\n return new DocumentRefImpl(app, id, schema);\n};\nexport function invalidDocRef() {\n return INVALID_DOC_REF;\n}\nexport function isValidDocRef(docRef) {\n return docRef.id !== INVALID_DOC_REF_ID && docRef.id !== \"\";\n}\nclass DocumentRefImpl {\n id;\n schema;\n #stateModule;\n constructor(app, id, schema) {\n this.#stateModule = getStateModule(app);\n this.id = id;\n this.schema = schema;\n }\n async getDocSnapshot() {\n return this.#stateModule.getDocumentSnapshot(this);\n }\n getRecords(model) {\n return this.#stateModule.getCreateRecordCollectionRef(this, model);\n }\n onMetadataChange(cb) {\n return this.#stateModule.onMetadataChange(this, cb);\n }\n onStateChange(callback) {\n return this.#stateModule.onStateChange(this, callback);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DocumentLoadStatus = {\n UNLOADED: \"unloaded\",\n // Not yet loaded\n LOADING: \"loading\",\n // Initial load in progress\n LOADED: \"loaded\",\n // Successfully loaded\n ERROR: \"error\" // Load failed\n};\nexport const DocumentLiveStatus = {\n DISCONNECTED: \"disconnected\",\n // Not syncing\n CONNECTING: \"connecting\",\n // Establishing connection\n CONNECTED: \"connected\",\n // Live syncing active\n ERROR: \"error\" // Connection error\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RecordCollectionRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { invalidDocRef } from \"./DocumentRefImpl.js\";\nconst INVALID_RECORD_COLLECTION_REF = Object.freeze({\n docRef: invalidDocRef(),\n model: {},\n [RecordCollectionRefBrand]: RecordCollectionRefBrand,\n get: () => undefined,\n has: () => false,\n set: () => Promise.reject(new Error(\"Invalid record collection reference\")),\n delete: () => Promise.reject(new Error(\"Invalid record collection reference\")),\n size: 0,\n [Symbol.iterator]: () => ({\n next: () => ({\n done: true,\n value: undefined\n })\n }),\n onItemsAdded: () => () => {},\n onItemsChanged: () => () => {},\n onItemsDeleted: () => () => {}\n});\nexport const createRecordCollectionRef = (documentService, docRef, model) => {\n return new RecordCollectionRefImpl(documentService, docRef, model);\n};\nexport function invalidRecordCollectionRef() {\n return INVALID_RECORD_COLLECTION_REF;\n}\nexport function isValidRecordCollectionRef(collectionRef) {\n return collectionRef !== INVALID_RECORD_COLLECTION_REF;\n}\nclass RecordCollectionRefImpl {\n docRef;\n model;\n #documentService;\n constructor(documentService, docRef, model) {\n this.docRef = docRef;\n this.model = model;\n this.#documentService = documentService;\n }\n get(id) {\n return this.#documentService.getRecord(this, id);\n }\n has(id) {\n return this.#documentService.hasRecord(this, id);\n }\n async set(id, state) {\n return this.#documentService.setCollectionRecord(this, id, state);\n }\n delete(id) {\n const recordRefInstance = this.#documentService.getRecord(this, id);\n if (recordRefInstance) {\n return this.#documentService.deleteRecord(recordRefInstance);\n }\n return Promise.reject(new Error(`Unknown record`));\n }\n get size() {\n return this.#documentService.getCollectionSize(this);\n }\n [Symbol.iterator]() {\n return this.#documentService.getCollectionRecords(this)[Symbol.iterator]();\n }\n onItemsAdded = callback => {\n return this.#documentService.onCollectionItemsAdded(this, callback);\n };\n onItemsChanged = callback => {\n return this.#documentService.onCollectionItemsChanged(this, callback);\n };\n onItemsDeleted = callback => {\n return this.#documentService.onCollectionItemsDeleted(this, callback);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RecordRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { invalidDocRef } from \"./DocumentRefImpl.js\";\nconst INVALID_RECORD_ID = \"INVALID_RECORD_REF\";\nconst INVALID_RECORD_REF = Object.freeze({\n docRef: invalidDocRef(),\n id: INVALID_RECORD_ID,\n model: {},\n [RecordRefBrand]: RecordRefBrand,\n getSnapshot: () => Promise.reject(new Error(\"Invalid record reference\")),\n set: () => Promise.reject(new Error(\"Invalid record reference\")),\n onChange: () => () => {},\n onDeleted: () => () => {}\n});\nexport const createRecordRef = (documentService, docRef, id, model) => {\n return new RecordRefImpl(documentService, docRef, id, model);\n};\nexport function invalidRecordRef() {\n return INVALID_RECORD_REF;\n}\nexport function isValidRecordRef(recordRef) {\n return recordRef.id !== INVALID_RECORD_ID;\n}\nclass RecordRefImpl {\n docRef;\n id;\n model;\n #documentService;\n constructor(documentService, docRef, id, model) {\n this.#documentService = documentService;\n this.docRef = docRef;\n this.id = id;\n this.model = model;\n }\n async getSnapshot() {\n return this.#documentService.getRecordSnapshot(this);\n }\n onChange(callback) {\n return this.#documentService.onRecordChanged(this, callback);\n }\n onDeleted(callback) {\n return this.#documentService.onRecordDeleted(this, callback);\n }\n delete() {\n return this.#documentService.deleteRecord(this);\n }\n set(record) {\n return this.#documentService.setRecord(this, record);\n }\n update(partialRecord) {\n return this.#documentService.updateRecord(this, partialRecord);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport * as Y from \"yjs\";\nexport function initializeDocumentStructure(yDoc, schema) {\n // Initialize storage for each model type using storageName directly on the root Y.Doc\n Object.values(schema).forEach(modelEntry => {\n yDoc.getMap(getMetadata(modelEntry).name);\n });\n}\nexport function getRecordsMap(yDoc, storageName) {\n return yDoc.getMap(storageName);\n}\nexport function getRecordData(yDoc, storageName, recordId) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n return recordsCollection.get(recordId);\n}\nexport function setRecord(yDoc, storageName, recordId, state) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n const currentRecord = recordsCollection.get(recordId);\n const wasExisting = currentRecord != null;\n\n // Use transaction for atomic update\n yDoc.transact(() => {\n if (currentRecord != null) {\n // Clear existing record completely\n currentRecord.clear();\n populateYMapFromState(currentRecord, state);\n } else {\n // Create new record\n const newRecord = new Y.Map();\n populateYMapFromState(newRecord, state);\n recordsCollection.set(recordId, newRecord);\n }\n });\n return wasExisting;\n}\nexport function getRecordSnapshot(yDoc, storageName, recordId) {\n const data = getRecordData(yDoc, storageName, recordId);\n if (!data) {\n return undefined;\n }\n return yMapToState(data);\n}\nexport function updateRecord(yDoc, storageName, recordId, partialState) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n const currentRecord = recordsCollection.get(recordId);\n if (currentRecord == null) {\n return false; // Record doesn't exist, cannot update\n }\n\n // Use transaction for atomic partial update\n yDoc.transact(() => {\n updateYMapFromPartialState(currentRecord, partialState);\n });\n return true;\n}\nexport function getAllRecordIds(yDoc, storageName) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n return Array.from(recordsCollection.keys()).map(key => key);\n}\nfunction populateYMapFromState(yMap, state) {\n if (state != null && typeof state === \"object\") {\n Object.entries(state).forEach(([key, value]) => {\n if (value === undefined) return;\n if (Array.isArray(value)) {\n const yArray = new Y.Array();\n value.forEach(item => {\n yArray.push([item]);\n });\n yMap.set(key, yArray);\n } else if (typeof value === \"object\" && value != null) {\n const nestedMap = new Y.Map();\n populateYMapFromState(nestedMap, value);\n yMap.set(key, nestedMap);\n } else {\n yMap.set(key, value);\n }\n });\n }\n}\nfunction updateYMapFromPartialState(yMap, partialState) {\n if (typeof partialState === \"object\") {\n Object.entries(partialState).forEach(([key, value]) => {\n if (value === undefined) {\n // Remove the field if undefined is explicitly provided\n yMap.delete(key);\n return;\n }\n if (Array.isArray(value)) {\n const yArray = new Y.Array();\n value.forEach(item => {\n yArray.push([item]);\n });\n yMap.set(key, yArray);\n } else if (typeof value === \"object\" && value != null) {\n // For nested objects, we need to handle partial updates\n const existingValue = yMap.get(key);\n if (existingValue instanceof Y.Map) {\n // Recursively update nested Y.Map\n updateYMapFromPartialState(existingValue, value);\n } else {\n // Replace with new nested map if existing value is not a Y.Map\n const nestedMap = new Y.Map();\n populateYMapFromState(nestedMap, value);\n yMap.set(key, nestedMap);\n }\n } else {\n yMap.set(key, value);\n }\n });\n }\n}\nfunction yMapToState(yMap) {\n const state = {};\n yMap.forEach((value, key) => {\n if (value instanceof Y.Array) {\n state[key] = value.toArray();\n } else if (value instanceof Y.Map) {\n state[key] = yMapToState(value);\n } else {\n state[key] = value;\n }\n });\n return state;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-console */\n\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { isDeepEqual } from \"remeda\";\nimport invariant from \"tiny-invariant\";\nimport * as Y from \"yjs\";\nimport { createDocRef } from \"../types/DocumentRefImpl.js\";\nimport { DocumentLiveStatus, DocumentLoadStatus } from \"../types/DocumentService.js\";\nimport { createRecordCollectionRef } from \"../types/RecordCollectionRefImpl.js\";\nimport { createRecordRef } from \"../types/RecordRefImpl.js\";\nimport * as YjsSchemaMapper from \"./YjsSchemaMapper.js\";\n/**\n * Base class for document services that use Y.js for local state management.\n * Provides common Y.js operations for both in-memory and backend services.\n *\n * // TODO: Move this to an internal package\n */\nexport class BaseYjsDocumentService {\n documents = new Map();\n constructor(app, logger) {\n this.app = app;\n this.logger = logger;\n }\n createDocRef = (id, schema) => {\n // Create a (likely) temporary doc ref - the internal doc will be created if it is unknown\n // If it is known, we will return the stable ref from getCreateInternalDoc\n const temporaryRef = createDocRef(this.app, id, schema);\n const {\n internalDocRef\n } = this.getCreateInternalDoc(temporaryRef);\n return internalDocRef;\n };\n getCreateRecordCollectionRef = (docRef, model) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n const modelName = getMetadata(model).name;\n const existingRef = internalDoc.collectionRefs.get(modelName)?.deref();\n if (existingRef != null) {\n return existingRef;\n }\n const newRef = createRecordCollectionRef(this, docRef, model);\n internalDoc.collectionRefs.set(modelName, new WeakRef(newRef));\n return newRef;\n };\n getCreateRecordRef = (docRef, id, model) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n const modelName = getMetadata(model).name;\n let modelMap = internalDoc.recordRefs.get(modelName);\n if (!modelMap) {\n modelMap = new Map();\n internalDoc.recordRefs.set(modelName, modelMap);\n }\n const existingRef = modelMap.get(id)?.deref();\n if (existingRef != null) {\n return existingRef;\n }\n const newRef = createRecordRef(this, docRef, id, model);\n modelMap.set(id, new WeakRef(newRef));\n return newRef;\n };\n\n /**\n * Called when the first metadata subscription is opened for a document.\n * Implementation must:\n * - Set status to LOADING immediately\n * - Load/validate metadata asynchronously\n * - Set status to LOADED or ERROR when complete\n * - Handle all errors internally (never throw/reject)\n */\n\n /**\n * Called when the first data subscription is opened for a document.\n * Implementation must:\n * - Set status to LOADING immediately\n * - Set up data synchronization asynchronously\n * - Set status to LOADED or ERROR when ready\n * - Handle all errors internally (never throw/reject)\n */\n\n /**\n * Called when the last metadata subscription is closed for a document.\n * Implementation should clean up any resources related to metadata loading.\n */\n\n /**\n * Called when the last data subscription is closed for a document.\n * Implementation should clean up any resources related to data synchronization.\n */\n\n createBaseInternalDoc = (ref, metadata, yDoc) => {\n const schema = ref.schema;\n return {\n ref: new WeakRef(ref),\n metadata,\n schema,\n metadataStatus: {\n load: metadata ? DocumentLoadStatus.LOADED : DocumentLoadStatus.UNLOADED,\n live: DocumentLiveStatus.DISCONNECTED\n },\n dataStatus: {\n load: DocumentLoadStatus.UNLOADED,\n live: DocumentLiveStatus.DISCONNECTED\n },\n metadataError: undefined,\n dataError: undefined,\n statusSubscribers: new Set(),\n hasMetadataSubscriptions: false,\n hasDataSubscriptions: false,\n collectionRefs: new Map(),\n recordRefs: new Map(),\n collectionSubscriptions: new Map(),\n docStateSubscribers: new Set(),\n metadataSubscribers: new Set(),\n recordSubscriptions: new Map(),\n yDoc: yDoc || this.initializeYDoc(schema),\n yDocUpdateHandler: undefined,\n yjsCollectionHandlers: new Map()\n };\n };\n hasSubscriptions(internalDoc) {\n if (internalDoc.metadataSubscribers.size > 0 || internalDoc.docStateSubscribers.size > 0) {\n return true;\n }\n for (const subs of internalDoc.recordSubscriptions.values()) {\n if (!subs.changed?.size || !subs.deleted?.size) {\n return true;\n }\n }\n return false;\n }\n\n // Status helper methods\n notifyStatusSubscribers(internalDoc, docRef) {\n const status = {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n for (const callback of internalDoc.statusSubscribers) {\n callback(docRef, status);\n }\n }\n updateMetadataStatus(internalDoc, docRef, update) {\n if (update.load != null || update.live != null) {\n internalDoc.metadataStatus = {\n load: update.load ?? internalDoc.metadataStatus.load,\n live: update.live ?? internalDoc.metadataStatus.live\n };\n }\n if (update.error != null) {\n internalDoc.metadataError = update.error;\n } else if (update.load === DocumentLoadStatus.LOADED) {\n // Clear error on successful load\n internalDoc.metadataError = undefined;\n }\n this.notifyStatusSubscribers(internalDoc, docRef);\n }\n updateDataStatus(internalDoc, docRef, update) {\n if (update.load != null || update.live != null) {\n internalDoc.dataStatus = {\n load: update.load ?? internalDoc.dataStatus.load,\n live: update.live ?? internalDoc.dataStatus.live\n };\n }\n if (update.error != null) {\n internalDoc.dataError = update.error;\n } else if (update.load === DocumentLoadStatus.LOADED) {\n // Clear error on successful load\n internalDoc.dataError = undefined;\n }\n this.notifyStatusSubscribers(internalDoc, docRef);\n }\n\n /**\n * Hook method called after a record is set. Subclasses can override to handle\n * backend synchronization, logging, or other side effects.\n */\n\n /**\n * Initialize a Y.Doc with the given schema\n */\n initializeYDoc(schema) {\n const yDoc = new Y.Doc();\n YjsSchemaMapper.initializeDocumentStructure(yDoc, schema);\n return yDoc;\n }\n\n /**\n * Get existing internal doc or create one with placeholder metadata for lazy initialization\n */\n getCreateInternalDoc(ref, metadata, initialYDoc) {\n const {\n id,\n schema\n } = ref;\n const existingDoc = this.documents.get(id);\n if (existingDoc != null) {\n // Use reference equality first (fast path), then deep equality for hot reload compatibility\n !(existingDoc.schema === schema || isDeepEqual(existingDoc.schema, schema)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Schema mismatch for existing document\") : invariant(false) : void 0;\n\n // The caller has a strong ref - in most cases this will be the same instance as we already\n // have stored in the ref field. If it is not, we want to return a stable ref so users can\n // easily depend on reference equality.\n\n // It's possible the previous weak ref was collected as all references were dropped. If so,\n // we can update the weak ref.\n const existingRef = existingDoc.ref.deref();\n if (existingRef == null) {\n existingDoc.ref = new WeakRef(ref);\n }\n return {\n internalDocRef: existingRef ?? ref,\n internalDoc: existingDoc,\n wasExisting: true\n };\n }\n const internalDoc = this.createInternalDoc(ref, metadata, initialYDoc);\n this.documents.set(id, internalDoc);\n return {\n internalDocRef: ref,\n internalDoc,\n wasExisting: false\n };\n }\n getDocumentSnapshot = docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n\n // For now, return the Y.Doc as the state\n // Later this can be enhanced to serialize Y.Doc content or return specific data\n return Promise.resolve(internalDoc.yDoc);\n };\n getRecordSnapshot = recordRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(recordRef.docRef);\n const snapshot = this.getRecordSnapshotInternal(internalDoc, recordRef);\n\n // This is a promise interface for async loading for external API implementations to trigger a load first\n // For this base implementation, we always return from the local Y.Doc\n\n if (snapshot == null) {\n // TODO: well known error types\n return Promise.reject(new Error(`Record not found: ${recordRef.id}`));\n }\n return Promise.resolve(snapshot);\n };\n getRecordSnapshotInternal(internalDoc, recordRef) {\n return YjsSchemaMapper.getRecordSnapshot(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id);\n }\n setRecord = (recordRef, state) => {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot set record as document not found: ${recordRef.docRef.id}`) : invariant(false) : void 0;\n\n // TODO: you cannot resurrect tomb stoned records I think, so need to check for that before notify\n // TODO: perhaps we just call this via onRecordSet instead?\n\n YjsSchemaMapper.setRecord(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id, state);\n\n // Call hook method for subclass-specific handling\n this.onRecordSet?.(recordRef, state);\n return Promise.resolve();\n };\n updateRecord = (recordRef, partialState) => {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update record as document not found: ${recordRef.docRef.id}`) : invariant(false) : void 0;\n const wasUpdated = YjsSchemaMapper.updateRecord(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id, partialState);\n if (!wasUpdated) {\n return Promise.reject(new Error(`Record not found for update: ${recordRef.id}`));\n }\n\n // Call hook method for subclass-specific handling\n this.onRecordSet?.(recordRef, partialState);\n return Promise.resolve();\n };\n onMetadataChange(docRef, callback) {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(docRef);\n const isFirstSubscription = !internalDoc.hasMetadataSubscriptions;\n internalDoc.metadataSubscribers.add(callback);\n internalDoc.hasMetadataSubscriptions = true;\n\n // Trigger remote load if this is the first subscription and not yet loaded\n if (isFirstSubscription && internalDoc.metadataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onMetadataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Immediately call back with current metadata if available\n if (internalDoc.metadata != null) {\n callback(docRef, internalDoc.metadata);\n }\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (currentDoc) {\n currentDoc.metadataSubscribers.delete(callback);\n\n // Check if this was the last metadata subscription\n if (currentDoc.metadataSubscribers.size === 0) {\n currentDoc.hasMetadataSubscriptions = false;\n this.onMetadataSubscriptionClosed(currentDoc, internalDocRef);\n }\n }\n };\n }\n onStateChange = (docRef, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const isFirstStateSubscription = internalDoc.docStateSubscribers.size === 0;\n internalDoc.docStateSubscribers.add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Set up Y.Doc listener if this is the first state subscription\n if (isFirstStateSubscription && !internalDoc.yDocUpdateHandler) {\n const updateHandler = () => {\n this.notifyStateSubscribers(internalDoc, docRef);\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.yDocUpdateHandler = updateHandler;\n }\n\n // Call callback immediately with current state\n callback(internalDocRef);\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (!currentDoc) return;\n currentDoc.docStateSubscribers.delete(callback);\n\n // Clean up Y.Doc listener if no more state subscriptions\n if (currentDoc.docStateSubscribers.size === 0 && currentDoc.yDocUpdateHandler) {\n currentDoc.yDoc.off(\"update\", currentDoc.yDocUpdateHandler);\n currentDoc.yDocUpdateHandler = undefined;\n }\n\n // Check if this removes all data subscriptions (state + record + collection)\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n getDocumentRef(docId) {\n const internalDoc = this.documents.get(docId);\n if (!internalDoc) return null;\n return createDocRef(this.app, docId, internalDoc.schema);\n }\n notifyMetadataSubscribers(internalDoc, docRef, metadata) {\n for (const callback of internalDoc.metadataSubscribers) {\n callback(docRef, metadata);\n }\n }\n notifyStateSubscribers(internalDoc, docRef) {\n for (const callback of internalDoc.docStateSubscribers) {\n callback(docRef);\n }\n }\n updateMetadata(docId, metadata) {\n const internalDoc = this.documents.get(docId);\n if (internalDoc) {\n internalDoc.metadata = metadata;\n const docRef = this.getDocumentRef(docId);\n if (docRef) {\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n }\n }\n }\n notifyCollectionSubscribers(internalDoc, collection, recordId, changeType) {\n const storageName = getMetadata(collection.model).name;\n const subs = internalDoc.collectionSubscriptions.get(storageName);\n if (!subs) {\n return;\n }\n const subscribers = subs[changeType];\n if (subscribers == null || subscribers.size === 0) {\n return;\n }\n const recordRefInstance = this.getCreateRecordRef(collection.docRef, recordId, collection.model);\n const records = [recordRefInstance];\n for (const callback of subscribers) {\n callback(records);\n }\n }\n notifyRecordSubscribers(recordRef, changeType) {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Document not found for record notifications\") : invariant(false) : void 0;\n const recordSubs = internalDoc.recordSubscriptions.get(recordRef.id);\n if (recordSubs == null) {\n return;\n }\n\n // Verify model consistency\n !(getMetadata(recordSubs.ref.model).name === getMetadata(recordRef.model).name) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Model mismatch when notifying record subscribers for ${recordRef.id}: expected ${getMetadata(recordSubs.ref.model).name}, got ${getMetadata(recordRef.model).name}`) : invariant(false) : void 0;\n switch (changeType) {\n case \"changed\":\n {\n const snapshot = this.getRecordSnapshotInternal(internalDoc, recordRef);\n for (const callback of recordSubs.changed ?? []) {\n try {\n callback(snapshot, recordRef);\n } catch (e) {\n console.error(\"Record onChanged callback threw unhandled error\", e, {\n model: getMetadata(recordRef.model).name,\n id: recordRef.id\n });\n }\n }\n break;\n }\n case \"deleted\":\n {\n for (const callback of recordSubs.deleted ?? []) {\n try {\n callback(recordRef);\n } catch (e) {\n console.error(\"Record onDeleted callback threw unhandled error\", e, {\n model: getMetadata(recordRef.model).name,\n id: recordRef.id\n });\n }\n }\n break;\n }\n }\n }\n\n // Collection methods implementation\n getRecord = (collection, id) => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return undefined;\n const storageName = getMetadata(collection.model).name;\n const recordExists = YjsSchemaMapper.getRecordData(internalDoc.yDoc, storageName, id);\n return recordExists ? this.getCreateRecordRef(collection.docRef, id, collection.model) : undefined;\n };\n hasRecord = (collection, id) => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return false;\n const storageName = getMetadata(collection.model).name;\n return YjsSchemaMapper.getRecordData(internalDoc.yDoc, storageName, id) != null;\n };\n setCollectionRecord = (collection, id, state) => {\n // Create a RecordRef and delegate to existing setRecord method\n const recordRefInstance = this.getCreateRecordRef(collection.docRef, id, collection.model);\n return this.setRecord(recordRefInstance, state);\n };\n deleteRecord = record => {\n const internalDoc = this.documents.get(record.docRef.id);\n if (!internalDoc) {\n // Document doesn't exist, record doesn't exist - this is a no-op\n return Promise.resolve();\n }\n const storageName = getMetadata(record.model).name;\n const recordsCollection = YjsSchemaMapper.getRecordsMap(internalDoc.yDoc, storageName);\n const existed = recordsCollection.has(record.id);\n if (existed) {\n recordsCollection.delete(record.id);\n }\n return Promise.resolve();\n };\n getCollectionSize = collection => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return 0;\n const storageName = getMetadata(collection.model).name;\n return YjsSchemaMapper.getAllRecordIds(internalDoc.yDoc, storageName).length;\n };\n getCollectionRecords = collection => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return [];\n const storageName = getMetadata(collection.model).name;\n const recordIds = YjsSchemaMapper.getAllRecordIds(internalDoc.yDoc, storageName);\n return recordIds.map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n };\n onCollectionItemsAdded = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"added\", callback);\n };\n onCollectionItemsChanged = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"changed\", callback);\n };\n onCollectionItemsDeleted = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"deleted\", callback);\n };\n\n // TODO: clearer naming of subscription vs handlers etc.\n onRecordChanged = (record, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(record.docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const storageName = getMetadata(record.model).name;\n const collectionRef = this.getCreateRecordCollectionRef(record.docRef, record.model);\n const needsCollectionListener = !internalDoc.yjsCollectionHandlers.has(storageName);\n const recordSubs = this.getCreateRecordSubscriptions(internalDoc, record);\n (recordSubs.changed ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n // Call lifecycle method without awaiting\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n if (needsCollectionListener) {\n this.getCreateCollectionSubscriptions(internalDoc, collectionRef);\n this.setupCollectionListener(internalDoc, collectionRef);\n }\n const snapshot = this.getRecordSnapshotInternal(internalDoc, record);\n if (snapshot != null) {\n callback(snapshot, record);\n }\n return () => {\n recordSubs.changed?.delete(callback);\n const currentDoc = this.documents.get(record.docRef.id);\n if (!currentDoc) return;\n if (isRecordSubscriptionsEmpty(recordSubs)) {\n currentDoc.recordSubscriptions.delete(record.id);\n }\n this.cleanupCollectionListenerIfUnused(currentDoc, record.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n onRecordDeleted = (record, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(record.docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const storageName = getMetadata(record.model).name;\n const collectionRef = this.getCreateRecordCollectionRef(record.docRef, record.model);\n const needsCollectionListener = !internalDoc.yjsCollectionHandlers.has(storageName);\n const recordSubs = this.getCreateRecordSubscriptions(internalDoc, record);\n (recordSubs.deleted ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n if (needsCollectionListener) {\n this.getCreateCollectionSubscriptions(internalDoc, collectionRef);\n this.setupCollectionListener(internalDoc, collectionRef);\n }\n return () => {\n recordSubs.deleted?.delete(callback);\n const currentDoc = this.documents.get(record.docRef.id);\n if (!currentDoc) return;\n if (isRecordSubscriptionsEmpty(recordSubs)) {\n currentDoc.recordSubscriptions.delete(record.id);\n }\n this.cleanupCollectionListenerIfUnused(currentDoc, record.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n getCreateCollectionSubscriptions(internalDoc, collection) {\n const storageName = getMetadata(collection.model).name;\n const docCollectionSubs = internalDoc.collectionSubscriptions.get(storageName) ?? internalDoc.collectionSubscriptions.set(storageName, {}).get(storageName);\n\n // Generic cast to specific types\n return docCollectionSubs;\n }\n getCreateRecordSubscriptions(internalDoc, record) {\n let recordSubs = internalDoc.recordSubscriptions.get(record.id);\n if (!recordSubs) {\n // Create new subscription entry with the record ref\n recordSubs = {\n ref: record\n };\n internalDoc.recordSubscriptions.set(record.id, recordSubs);\n } else {\n // Verify model consistency - records with same ID should have same model\n if (getMetadata(recordSubs.ref.model).name !== getMetadata(record.model).name) {\n throw new Error(`Model mismatch for record ${record.id}: expected ${getMetadata(recordSubs.ref.model).name}, got ${getMetadata(record.model).name}`);\n }\n }\n return recordSubs;\n }\n subscribeToCollectionChanges(internalDoc, internalDocRef, collection, changeType, callback) {\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const modelSubscriptions = this.getCreateCollectionSubscriptions(internalDoc, collection);\n const wasEmpty = isCollectionSubscriptionsEmpty(modelSubscriptions);\n (modelSubscriptions[changeType] ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n // Call lifecycle method without awaiting\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Set up Y.Map listener if this is the first subscription for this collection\n if (wasEmpty) {\n this.setupCollectionListener(internalDoc, collection);\n }\n return () => {\n modelSubscriptions[changeType]?.delete(callback);\n const currentDoc = this.documents.get(collection.docRef.id);\n if (!currentDoc) return;\n const storageName = getMetadata(collection.model).name;\n this.cleanupCollectionListenerIfUnused(currentDoc, collection.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n }\n setupCollectionListener(internalDoc, collection) {\n const docId = collection.docRef.id;\n const storageName = getMetadata(collection.model).name;\n const yCollection = internalDoc.yDoc.getMap(storageName);\n this.logger.debug(\"Setting up collection listener\", {\n docId,\n storageName,\n existingKeys: Array.from(yCollection.keys()),\n allDocMaps: Array.from(internalDoc.yDoc.share.keys())\n });\n\n // TODO: tidy this up\n const eventHandler = events => {\n this.logger.debug(\"Y.Map observeDeep fired\", {\n docId,\n storageName,\n eventCount: events.length\n });\n const currentDoc = this.documents.get(docId);\n if (!currentDoc) return;\n const subs = currentDoc.collectionSubscriptions.get(storageName);\n if (!subs) return;\n const addedKeys = new Set();\n const changedKeys = new Set();\n const deletedKeys = new Set();\n for (const event of events) {\n // Shallow change, ie the collection itself was modified\n if (event.target === yCollection) {\n // Collection-level change (add/remove/replace keys in collection)\n for (const [key, change] of event.changes.keys) {\n switch (change.action) {\n case \"add\":\n addedKeys.add(key);\n break;\n case \"update\":\n // this is a replacement within the map\n changedKeys.add(key);\n break;\n case \"delete\":\n deletedKeys.add(key);\n break;\n }\n }\n } else {\n // Nested change (property change within a record)\n // path[0] is the record ID since path is relative to currentTarget (yCollection)\n const recordId = event.path[0];\n if (recordId != null) {\n changedKeys.add(recordId);\n }\n }\n }\n\n // Notify subscribers\n if (addedKeys.size > 0) {\n const addedRecords = Array.from(addedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.added != null) {\n for (const callback of subs.added) {\n callback(addedRecords);\n }\n }\n for (const record of addedRecords) {\n this.notifyRecordSubscribers(record, \"changed\");\n }\n }\n if (changedKeys.size > 0) {\n const changedRecords = Array.from(changedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.changed != null) {\n for (const callback of subs.changed) {\n callback(changedRecords);\n }\n }\n for (const record of changedRecords) {\n this.notifyRecordSubscribers(record, \"changed\");\n }\n }\n if (deletedKeys.size > 0) {\n const deletedRecords = Array.from(deletedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.deleted?.size) {\n for (const callback of subs.deleted) {\n callback(deletedRecords);\n }\n }\n for (const record of deletedRecords) {\n this.notifyRecordSubscribers(record, \"deleted\");\n }\n }\n };\n yCollection.observeDeep(eventHandler);\n\n // Store the handler for cleanup\n internalDoc.yjsCollectionHandlers.set(storageName, () => {\n yCollection.unobserveDeep(eventHandler);\n });\n }\n cleanupCollectionListener(docId, storageName) {\n const internalDoc = this.documents.get(docId);\n if (internalDoc == null) {\n return;\n }\n const cleanup = internalDoc.yjsCollectionHandlers.get(storageName);\n if (cleanup != null) {\n cleanup();\n internalDoc.yjsCollectionHandlers.delete(storageName);\n }\n }\n cleanupCollectionListenerIfUnused(internalDoc, docId, storageName) {\n const collectionSubs = internalDoc.collectionSubscriptions.get(storageName);\n const hasCollectionSubs = collectionSubs != null && (collectionSubs.added?.size || collectionSubs.changed?.size || collectionSubs.deleted?.size);\n const hasRecordSubs = Array.from(internalDoc.recordSubscriptions.values()).some(recordSubs => getMetadata(recordSubs.ref.model).name === storageName && !isRecordSubscriptionsEmpty(recordSubs));\n if (!hasCollectionSubs && !hasRecordSubs) {\n this.cleanupCollectionListener(docId, storageName);\n if (collectionSubs != null) {\n internalDoc.collectionSubscriptions.delete(storageName);\n }\n }\n }\n\n // DocumentService status methods implementation\n getDocumentStatus = docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n return {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n };\n onStatusChange = (docRef, callback) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n internalDoc.statusSubscribers.add(callback);\n\n // Call callback immediately with current status\n const status = {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n callback(docRef, status);\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (currentDoc) {\n currentDoc.statusSubscribers.delete(callback);\n }\n };\n };\n waitForMetadataLoad = async docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (internalDoc.metadataStatus.load === DocumentLoadStatus.LOADED) {\n return Promise.resolve();\n }\n if (internalDoc.metadataStatus.load === DocumentLoadStatus.ERROR) {\n return Promise.reject(new Error(\"Metadata load error\", {\n cause: internalDoc.metadataError\n }));\n }\n\n // Wait for status to change to LOADED or ERROR\n return new Promise((resolve, reject) => {\n const unsubscribe = this.onStatusChange(docRef, (_, status) => {\n if (status.metadata.load === DocumentLoadStatus.LOADED) {\n unsubscribe();\n resolve();\n } else if (status.metadata.load === DocumentLoadStatus.ERROR) {\n unsubscribe();\n reject(new Error(\"Metadata load error\", {\n cause: status.metadataError\n }));\n }\n });\n });\n };\n waitForDataLoad = async docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (internalDoc.dataStatus.load === DocumentLoadStatus.LOADED) {\n return Promise.resolve();\n }\n if (internalDoc.dataStatus.load === DocumentLoadStatus.ERROR) {\n return Promise.reject(new Error(\"Data load error\", {\n cause: internalDoc.dataError\n }));\n }\n\n // Wait for status to change to LOADED or ERROR\n return new Promise((resolve, reject) => {\n const unsubscribe = this.onStatusChange(docRef, (_, status) => {\n if (status.data.load === DocumentLoadStatus.LOADED) {\n unsubscribe();\n resolve();\n } else if (status.data.load === DocumentLoadStatus.ERROR) {\n unsubscribe();\n reject(new Error(\"Data load error\", {\n cause: status.dataError\n }));\n }\n });\n });\n };\n\n // FIXME: don't expose in production builds\n /**\n * @internal\n */\n getYDocForTesting(docId) {\n const internalDoc = this.documents.get(docId);\n return internalDoc ? internalDoc.yDoc : null;\n }\n}\nfunction isCollectionSubscriptionsEmpty(subs) {\n return !subs.added?.size && !subs.changed?.size && !subs.deleted?.size;\n}\nfunction isRecordSubscriptionsEmpty(subs) {\n return !subs.changed?.size && !subs.deleted?.size;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { generateId } from \"@palantir/pack.core\";\nimport { createDocumentServiceConfig } from \"../DocumentServiceModule.js\";\nimport { createDocRef } from \"../types/DocumentRefImpl.js\";\nimport { DocumentLoadStatus } from \"../types/DocumentService.js\";\nimport { BaseYjsDocumentService } from \"./BaseYjsDocumentService.js\";\nexport function createInMemoryDocumentServiceConfig({\n autoCreateDocuments = true\n} = {}) {\n const config = {\n autoCreateDocuments\n };\n return createDocumentServiceConfig(internalCreateInMemoryDocumentService, config);\n}\nexport function internalCreateInMemoryDocumentService(app, options) {\n return new InMemoryDocumentService(app, options);\n}\nclass InMemoryDocumentService extends BaseYjsDocumentService {\n constructor(app, config) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"InMemoryDocumentService\"\n }));\n this.config = config;\n }\n createInternalDoc(ref, metadata, yDoc) {\n return this.createBaseInternalDoc(ref, metadata, yDoc);\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = (metadata, schema) => {\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return Promise.resolve(docRef);\n };\n\n // Lifecycle method implementations\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n if (this.config.autoCreateDocuments === false && internalDoc.metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found and autoCreateDocuments is disabled\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n if (this.config.autoCreateDocuments === false && internalDoc.metadata == null) {\n this.updateDataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found and autoCreateDocuments is disabled\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {\n // No cleanup needed for in-memory service\n }\n onDataSubscriptionClosed(_internalDoc, _docRef) {\n // No cleanup needed for in-memory service\n }\n}\nfunction generateDocumentId() {\n return generateId();\n}"]}
1
+ {"version":3,"sources":["../../src/DocumentServiceModule.ts","../../src/types/StateModule.ts","../../src/types/DocumentRefImpl.ts","../../src/types/DocumentService.ts","../../src/types/RecordCollectionRefImpl.ts","../../src/types/RecordRefImpl.ts","../../src/service/YjsSchemaMapper.ts","../../src/service/BaseYjsDocumentService.ts","../../src/service/InMemoryDocumentService.ts"],"names":["getMetadata","Y2"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DOCUMENT_SERVICE_MODULE_KEY = {\n key: Symbol(\"DocumentService\"),\n initModule: initDocumentService\n};\nexport function getDocumentService(app) {\n return app.getModule(DOCUMENT_SERVICE_MODULE_KEY);\n}\nexport function createDocumentServiceConfig(init, config) {\n return [DOCUMENT_SERVICE_MODULE_KEY, {\n ...config,\n init\n }];\n}\nfunction initDocumentService(app, config) {\n if (config == null) {\n throw new Error(\"DocumentServiceConfig is required to initialize DocumentService\");\n }\n return config.init(app, config);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assertIsAppInternal } from \"@palantir/pack.core\";\nimport { DOCUMENT_SERVICE_MODULE_KEY } from \"../DocumentServiceModule.js\";\n// Ensure state module is accessible on PackApp instances.\nexport const STATE_MODULE_ACCESSOR = \"state\";\nexport const STATE_MODULE_KEY = {\n appMemberName: STATE_MODULE_ACCESSOR,\n key: Symbol.for(\"pack.state\"),\n initModule: app => {\n const documentService = app.getModule(DOCUMENT_SERVICE_MODULE_KEY);\n return new StateModuleImpl(documentService);\n }\n};\nexport class StateModuleImpl {\n constructor(documentService) {\n this.documentService = documentService;\n }\n createDocRef(id, schema) {\n return this.documentService.createDocRef(id, schema);\n }\n createRecordRef(docRef, id, model) {\n return this.documentService.getCreateRecordRef(docRef, id, model);\n }\n async createDocument(metadata, schema) {\n return this.documentService.createDocument(metadata, schema);\n }\n async getDocumentSnapshot(docRef) {\n return this.documentService.getDocumentSnapshot(docRef);\n }\n onActivity(docRef, callback) {\n return this.documentService.onActivity(docRef, callback);\n }\n onMetadataChange(docRef, cb) {\n return this.documentService.onMetadataChange(docRef, cb);\n }\n onPresence(docRef, callback, options) {\n return this.documentService.onPresence(docRef, callback, options);\n }\n onStateChange(docRef, cb) {\n return this.documentService.onStateChange(docRef, cb);\n }\n updateCustomPresence(docRef, model, eventData) {\n this.documentService.updateCustomPresence(docRef, model, eventData);\n }\n async getRecordSnapshot(recordRef) {\n return this.documentService.getRecordSnapshot(recordRef);\n }\n async setRecord(recordRef, state) {\n return this.documentService.setRecord(recordRef, state);\n }\n async updateRecord(recordRef, partialState) {\n return this.documentService.updateRecord(recordRef, partialState);\n }\n withTransaction(docRef, fn, description) {\n this.documentService.withTransaction(docRef, fn, description);\n }\n\n // Collection methods\n getCreateRecordCollectionRef(docRef, model) {\n return this.documentService.getCreateRecordCollectionRef(docRef, model);\n }\n\n // FIXME: confusing vs createRecordRef\n getRecord(collection, id) {\n return this.documentService.getRecord(collection, id);\n }\n hasRecord(collection, id) {\n return this.documentService.hasRecord(collection, id);\n }\n async setCollectionRecord(collection, id, state) {\n return this.documentService.setCollectionRecord(collection, id, state);\n }\n getCollectionSize(collection) {\n return this.documentService.getCollectionSize(collection);\n }\n getCollectionRecords(collection) {\n return this.documentService.getCollectionRecords(collection);\n }\n onRecordChanged(record, callback) {\n return this.documentService.onRecordChanged(record, callback);\n }\n onRecordDeleted(record, callback) {\n return this.documentService.onRecordDeleted(record, callback);\n }\n onCollectionItemsAdded(collection, callback) {\n return this.documentService.onCollectionItemsAdded(collection, callback);\n }\n onCollectionItemsChanged(collection, callback) {\n return this.documentService.onCollectionItemsChanged(collection, callback);\n }\n onCollectionItemsDeleted(collection, callback) {\n return this.documentService.onCollectionItemsDeleted(collection, callback);\n }\n\n // Status methods implementation\n getDocumentStatus(docRef) {\n return this.documentService.getDocumentStatus(docRef);\n }\n onStatusChange(docRef, callback) {\n return this.documentService.onStatusChange(docRef, callback);\n }\n async waitForMetadataLoad(docRef) {\n return this.documentService.waitForMetadataLoad(docRef);\n }\n async waitForDataLoad(docRef) {\n return this.documentService.waitForDataLoad(docRef);\n }\n async deleteRecord(record) {\n return this.documentService.deleteRecord(record);\n }\n}\nexport function getStateModule(app) {\n assertIsAppInternal(app);\n return app.getModule(STATE_MODULE_KEY);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DocumentRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { getStateModule } from \"./StateModule.js\";\nconst INVALID_DOC_REF_ID = \"INVALID_DOC_REF\";\nconst INVALID_DOC_REF = Object.freeze({\n id: INVALID_DOC_REF_ID,\n schema: {},\n [DocumentRefBrand]: DocumentRefBrand,\n getDocSnapshot: () => Promise.reject(new Error(\"Invalid document reference\")),\n getRecords: () => {\n throw new Error(\"Invalid document reference\");\n },\n onActivity: () => () => {},\n onMetadataChange: () => () => {},\n onPresence: () => () => {},\n onStateChange: () => () => {},\n updateCustomPresence: () => {},\n withTransaction: () => {\n throw new Error(\"Invalid document reference\");\n }\n});\nexport const createDocRef = (app, id, schema) => {\n return new DocumentRefImpl(app, id, schema);\n};\nexport function invalidDocRef() {\n return INVALID_DOC_REF;\n}\nexport function isValidDocRef(docRef) {\n return docRef.id !== INVALID_DOC_REF_ID && docRef.id !== \"\";\n}\nclass DocumentRefImpl {\n id;\n schema;\n #stateModule;\n constructor(app, id, schema) {\n this.#stateModule = getStateModule(app);\n this.id = id;\n this.schema = schema;\n }\n async getDocSnapshot() {\n return this.#stateModule.getDocumentSnapshot(this);\n }\n getRecords(model) {\n return this.#stateModule.getCreateRecordCollectionRef(this, model);\n }\n onActivity(callback) {\n return this.#stateModule.onActivity(this, callback);\n }\n onMetadataChange(cb) {\n return this.#stateModule.onMetadataChange(this, cb);\n }\n onPresence(callback, options) {\n return this.#stateModule.onPresence(this, callback, options);\n }\n onStateChange(callback) {\n return this.#stateModule.onStateChange(this, callback);\n }\n updateCustomPresence(model, eventData) {\n this.#stateModule.updateCustomPresence(this, model, eventData);\n }\n withTransaction(fn, description) {\n this.#stateModule.withTransaction(this, fn, description);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DocumentLoadStatus = {\n UNLOADED: \"unloaded\",\n // Not yet loaded\n LOADING: \"loading\",\n // Initial load in progress\n LOADED: \"loaded\",\n // Successfully loaded\n ERROR: \"error\" // Load failed\n};\nexport const DocumentLiveStatus = {\n DISCONNECTED: \"disconnected\",\n // Not syncing\n CONNECTING: \"connecting\",\n // Establishing connection\n CONNECTED: \"connected\",\n // Live syncing active\n ERROR: \"error\" // Connection error\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RecordCollectionRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { invalidDocRef } from \"./DocumentRefImpl.js\";\nconst INVALID_RECORD_COLLECTION_REF = Object.freeze({\n docRef: invalidDocRef(),\n model: {},\n [RecordCollectionRefBrand]: RecordCollectionRefBrand,\n get: () => undefined,\n has: () => false,\n set: () => Promise.reject(new Error(\"Invalid record collection reference\")),\n delete: () => Promise.reject(new Error(\"Invalid record collection reference\")),\n size: 0,\n [Symbol.iterator]: () => ({\n next: () => ({\n done: true,\n value: undefined\n })\n }),\n onItemsAdded: () => () => {},\n onItemsChanged: () => () => {},\n onItemsDeleted: () => () => {}\n});\nexport const createRecordCollectionRef = (documentService, docRef, model) => {\n return new RecordCollectionRefImpl(documentService, docRef, model);\n};\nexport function invalidRecordCollectionRef() {\n return INVALID_RECORD_COLLECTION_REF;\n}\nexport function isValidRecordCollectionRef(collectionRef) {\n return collectionRef !== INVALID_RECORD_COLLECTION_REF;\n}\nclass RecordCollectionRefImpl {\n docRef;\n model;\n #documentService;\n constructor(documentService, docRef, model) {\n this.docRef = docRef;\n this.model = model;\n this.#documentService = documentService;\n }\n get(id) {\n return this.#documentService.getRecord(this, id);\n }\n has(id) {\n return this.#documentService.hasRecord(this, id);\n }\n async set(id, state) {\n return this.#documentService.setCollectionRecord(this, id, state);\n }\n delete(id) {\n const recordRefInstance = this.#documentService.getRecord(this, id);\n if (recordRefInstance) {\n return this.#documentService.deleteRecord(recordRefInstance);\n }\n return Promise.reject(new Error(`Unknown record`));\n }\n get size() {\n return this.#documentService.getCollectionSize(this);\n }\n [Symbol.iterator]() {\n return this.#documentService.getCollectionRecords(this)[Symbol.iterator]();\n }\n onItemsAdded = callback => {\n return this.#documentService.onCollectionItemsAdded(this, callback);\n };\n onItemsChanged = callback => {\n return this.#documentService.onCollectionItemsChanged(this, callback);\n };\n onItemsDeleted = callback => {\n return this.#documentService.onCollectionItemsDeleted(this, callback);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RecordRefBrand } from \"@palantir/pack.document-schema.model-types\";\nimport { invalidDocRef } from \"./DocumentRefImpl.js\";\nconst INVALID_RECORD_ID = \"INVALID_RECORD_REF\";\nconst INVALID_RECORD_REF = Object.freeze({\n docRef: invalidDocRef(),\n id: INVALID_RECORD_ID,\n model: {},\n [RecordRefBrand]: RecordRefBrand,\n getSnapshot: () => Promise.reject(new Error(\"Invalid record reference\")),\n set: () => Promise.reject(new Error(\"Invalid record reference\")),\n onChange: () => () => {},\n onDeleted: () => () => {}\n});\nexport const createRecordRef = (documentService, docRef, id, model) => {\n return new RecordRefImpl(documentService, docRef, id, model);\n};\nexport function invalidRecordRef() {\n return INVALID_RECORD_REF;\n}\nexport function isValidRecordRef(recordRef) {\n return recordRef.id !== INVALID_RECORD_ID;\n}\nclass RecordRefImpl {\n docRef;\n id;\n model;\n #documentService;\n constructor(documentService, docRef, id, model) {\n this.#documentService = documentService;\n this.docRef = docRef;\n this.id = id;\n this.model = model;\n }\n async getSnapshot() {\n return this.#documentService.getRecordSnapshot(this);\n }\n onChange(callback) {\n return this.#documentService.onRecordChanged(this, callback);\n }\n onDeleted(callback) {\n return this.#documentService.onRecordDeleted(this, callback);\n }\n delete() {\n return this.#documentService.deleteRecord(this);\n }\n set(record) {\n return this.#documentService.setRecord(this, record);\n }\n update(partialRecord) {\n return this.#documentService.updateRecord(this, partialRecord);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport * as Y from \"yjs\";\nexport function initializeDocumentStructure(yDoc, schema) {\n // Initialize storage for each model type using storageName directly on the root Y.Doc\n Object.values(schema).forEach(modelEntry => {\n yDoc.getMap(getMetadata(modelEntry).name);\n });\n}\nexport function getRecordsMap(yDoc, storageName) {\n return yDoc.getMap(storageName);\n}\nexport function getRecordData(yDoc, storageName, recordId) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n return recordsCollection.get(recordId);\n}\nexport function setRecord(yDoc, storageName, recordId, state) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n const currentRecord = recordsCollection.get(recordId);\n const wasExisting = currentRecord != null;\n\n // Use transaction for atomic update\n yDoc.transact(() => {\n if (currentRecord != null) {\n // Clear existing record completely\n currentRecord.clear();\n populateYMapFromState(currentRecord, state);\n } else {\n // Create new record\n const newRecord = new Y.Map();\n populateYMapFromState(newRecord, state);\n recordsCollection.set(recordId, newRecord);\n }\n });\n return wasExisting;\n}\nexport function getRecordSnapshot(yDoc, storageName, recordId) {\n const data = getRecordData(yDoc, storageName, recordId);\n if (!data) {\n return undefined;\n }\n return yMapToState(data);\n}\nexport function updateRecord(yDoc, storageName, recordId, partialState) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n const currentRecord = recordsCollection.get(recordId);\n if (currentRecord == null) {\n return false; // Record doesn't exist, cannot update\n }\n\n // Use transaction for atomic partial update\n yDoc.transact(() => {\n updateYMapFromPartialState(currentRecord, partialState);\n });\n return true;\n}\nexport function getAllRecordIds(yDoc, storageName) {\n const recordsCollection = getRecordsMap(yDoc, storageName);\n return Array.from(recordsCollection.keys()).map(key => key);\n}\nfunction populateYMapFromState(yMap, state) {\n if (state != null && typeof state === \"object\") {\n Object.entries(state).forEach(([key, value]) => {\n if (value === undefined) return;\n if (Array.isArray(value)) {\n const yArray = new Y.Array();\n value.forEach(item => {\n yArray.push([item]);\n });\n yMap.set(key, yArray);\n } else if (typeof value === \"object\" && value != null) {\n const nestedMap = new Y.Map();\n populateYMapFromState(nestedMap, value);\n yMap.set(key, nestedMap);\n } else {\n yMap.set(key, value);\n }\n });\n }\n}\nfunction updateYMapFromPartialState(yMap, partialState) {\n if (typeof partialState === \"object\") {\n Object.entries(partialState).forEach(([key, value]) => {\n if (value === undefined) {\n // Remove the field if undefined is explicitly provided\n yMap.delete(key);\n return;\n }\n if (Array.isArray(value)) {\n const yArray = new Y.Array();\n value.forEach(item => {\n yArray.push([item]);\n });\n yMap.set(key, yArray);\n } else if (typeof value === \"object\" && value != null) {\n // For nested objects, we need to handle partial updates\n const existingValue = yMap.get(key);\n if (existingValue instanceof Y.Map) {\n // Recursively update nested Y.Map\n updateYMapFromPartialState(existingValue, value);\n } else {\n // Replace with new nested map if existing value is not a Y.Map\n const nestedMap = new Y.Map();\n populateYMapFromState(nestedMap, value);\n yMap.set(key, nestedMap);\n }\n } else {\n yMap.set(key, value);\n }\n });\n }\n}\nfunction yMapToState(yMap) {\n const state = {};\n yMap.forEach((value, key) => {\n if (value instanceof Y.Array) {\n state[key] = value.toArray();\n } else if (value instanceof Y.Map) {\n state[key] = yMapToState(value);\n } else {\n state[key] = value;\n }\n });\n return state;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-console */\n\nimport { getMetadata } from \"@palantir/pack.document-schema.model-types\";\nimport { isDeepEqual } from \"remeda\";\nimport invariant from \"tiny-invariant\";\nimport * as Y from \"yjs\";\nimport { createDocRef } from \"../types/DocumentRefImpl.js\";\nimport { DocumentLiveStatus, DocumentLoadStatus } from \"../types/DocumentService.js\";\nimport { createRecordCollectionRef } from \"../types/RecordCollectionRefImpl.js\";\nimport { createRecordRef } from \"../types/RecordRefImpl.js\";\nimport * as YjsSchemaMapper from \"./YjsSchemaMapper.js\";\n/**\n * Base class for document services that use Y.js for local state management.\n * Provides common Y.js operations for both in-memory and backend services.\n *\n * // TODO: Move this to an internal package\n */\nexport class BaseYjsDocumentService {\n documents = new Map();\n constructor(app, logger) {\n this.app = app;\n this.logger = logger;\n }\n createDocRef = (id, schema) => {\n // Create a (likely) temporary doc ref - the internal doc will be created if it is unknown\n // If it is known, we will return the stable ref from getCreateInternalDoc\n const temporaryRef = createDocRef(this.app, id, schema);\n const {\n internalDocRef\n } = this.getCreateInternalDoc(temporaryRef);\n return internalDocRef;\n };\n getCreateRecordCollectionRef = (docRef, model) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n const modelName = getMetadata(model).name;\n const existingRef = internalDoc.collectionRefs.get(modelName)?.deref();\n if (existingRef != null) {\n return existingRef;\n }\n const newRef = createRecordCollectionRef(this, docRef, model);\n internalDoc.collectionRefs.set(modelName, new WeakRef(newRef));\n return newRef;\n };\n getCreateRecordRef = (docRef, id, model) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n const modelName = getMetadata(model).name;\n let modelMap = internalDoc.recordRefs.get(modelName);\n if (!modelMap) {\n modelMap = new Map();\n internalDoc.recordRefs.set(modelName, modelMap);\n }\n const existingRef = modelMap.get(id)?.deref();\n if (existingRef != null) {\n return existingRef;\n }\n const newRef = createRecordRef(this, docRef, id, model);\n modelMap.set(id, new WeakRef(newRef));\n return newRef;\n };\n\n /**\n * Called when the first metadata subscription is opened for a document.\n * Implementation must:\n * - Set status to LOADING immediately\n * - Load/validate metadata asynchronously\n * - Set status to LOADED or ERROR when complete\n * - Handle all errors internally (never throw/reject)\n */\n\n /**\n * Called when the first data subscription is opened for a document.\n * Implementation must:\n * - Set status to LOADING immediately\n * - Set up data synchronization asynchronously\n * - Set status to LOADED or ERROR when ready\n * - Handle all errors internally (never throw/reject)\n */\n\n /**\n * Called when the last metadata subscription is closed for a document.\n * Implementation should clean up any resources related to metadata loading.\n */\n\n /**\n * Called when the last data subscription is closed for a document.\n * Implementation should clean up any resources related to data synchronization.\n */\n\n createBaseInternalDoc = (ref, metadata, yDoc) => {\n const schema = ref.schema;\n return {\n ref: new WeakRef(ref),\n metadata,\n schema,\n metadataStatus: {\n load: metadata ? DocumentLoadStatus.LOADED : DocumentLoadStatus.UNLOADED,\n live: DocumentLiveStatus.DISCONNECTED\n },\n dataStatus: {\n load: DocumentLoadStatus.UNLOADED,\n live: DocumentLiveStatus.DISCONNECTED\n },\n metadataError: undefined,\n dataError: undefined,\n statusSubscribers: new Set(),\n hasMetadataSubscriptions: false,\n hasDataSubscriptions: false,\n collectionRefs: new Map(),\n recordRefs: new Map(),\n collectionSubscriptions: new Map(),\n docStateSubscribers: new Set(),\n metadataSubscribers: new Set(),\n recordSubscriptions: new Map(),\n yDoc: yDoc || this.initializeYDoc(schema),\n yDocUpdateHandler: undefined,\n yjsCollectionHandlers: new Map()\n };\n };\n hasSubscriptions(internalDoc) {\n if (internalDoc.metadataSubscribers.size > 0 || internalDoc.docStateSubscribers.size > 0) {\n return true;\n }\n for (const subs of internalDoc.recordSubscriptions.values()) {\n if (!subs.changed?.size || !subs.deleted?.size) {\n return true;\n }\n }\n return false;\n }\n\n // Status helper methods\n notifyStatusSubscribers(internalDoc, docRef) {\n const status = {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n for (const callback of internalDoc.statusSubscribers) {\n callback(docRef, status);\n }\n }\n updateMetadataStatus(internalDoc, docRef, update) {\n if (update.load != null || update.live != null) {\n internalDoc.metadataStatus = {\n load: update.load ?? internalDoc.metadataStatus.load,\n live: update.live ?? internalDoc.metadataStatus.live\n };\n }\n if (update.error != null) {\n internalDoc.metadataError = update.error;\n } else if (update.load === DocumentLoadStatus.LOADED) {\n // Clear error on successful load\n internalDoc.metadataError = undefined;\n }\n this.notifyStatusSubscribers(internalDoc, docRef);\n }\n updateDataStatus(internalDoc, docRef, update) {\n if (update.load != null || update.live != null) {\n internalDoc.dataStatus = {\n load: update.load ?? internalDoc.dataStatus.load,\n live: update.live ?? internalDoc.dataStatus.live\n };\n }\n if (update.error != null) {\n internalDoc.dataError = update.error;\n } else if (update.load === DocumentLoadStatus.LOADED) {\n // Clear error on successful load\n internalDoc.dataError = undefined;\n }\n this.notifyStatusSubscribers(internalDoc, docRef);\n }\n\n /**\n * Hook method called after a record is set. Subclasses can override to handle\n * backend synchronization, logging, or other side effects.\n */\n\n /**\n * Initialize a Y.Doc with the given schema\n */\n initializeYDoc(schema) {\n const yDoc = new Y.Doc();\n YjsSchemaMapper.initializeDocumentStructure(yDoc, schema);\n return yDoc;\n }\n\n /**\n * Get existing internal doc or create one with placeholder metadata for lazy initialization\n */\n getCreateInternalDoc(ref, metadata, initialYDoc) {\n const {\n id,\n schema\n } = ref;\n const existingDoc = this.documents.get(id);\n if (existingDoc != null) {\n // Use reference equality first (fast path), then deep equality for hot reload compatibility\n !(existingDoc.schema === schema || isDeepEqual(existingDoc.schema, schema)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Schema mismatch for existing document\") : invariant(false) : void 0;\n\n // The caller has a strong ref - in most cases this will be the same instance as we already\n // have stored in the ref field. If it is not, we want to return a stable ref so users can\n // easily depend on reference equality.\n\n // It's possible the previous weak ref was collected as all references were dropped. If so,\n // we can update the weak ref.\n const existingRef = existingDoc.ref.deref();\n if (existingRef == null) {\n existingDoc.ref = new WeakRef(ref);\n }\n return {\n internalDocRef: existingRef ?? ref,\n internalDoc: existingDoc,\n wasExisting: true\n };\n }\n const internalDoc = this.createInternalDoc(ref, metadata, initialYDoc);\n this.documents.set(id, internalDoc);\n return {\n internalDocRef: ref,\n internalDoc,\n wasExisting: false\n };\n }\n getDocumentSnapshot = docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n\n // For now, return the Y.Doc as the state\n // Later this can be enhanced to serialize Y.Doc content or return specific data\n return Promise.resolve(internalDoc.yDoc);\n };\n getRecordSnapshot = recordRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(recordRef.docRef);\n const snapshot = this.getRecordSnapshotInternal(internalDoc, recordRef);\n\n // This is a promise interface for async loading for external API implementations to trigger a load first\n // For this base implementation, we always return from the local Y.Doc\n\n if (snapshot == null) {\n // TODO: well known error types\n return Promise.reject(new Error(`Record not found: ${recordRef.id}`));\n }\n return Promise.resolve(snapshot);\n };\n getRecordSnapshotInternal(internalDoc, recordRef) {\n return YjsSchemaMapper.getRecordSnapshot(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id);\n }\n setRecord = (recordRef, state) => {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot set record as document not found: ${recordRef.docRef.id}`) : invariant(false) : void 0;\n\n // TODO: you cannot resurrect tomb stoned records I think, so need to check for that before notify\n // TODO: perhaps we just call this via onRecordSet instead?\n\n YjsSchemaMapper.setRecord(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id, state);\n\n // Call hook method for subclass-specific handling\n this.onRecordSet?.(recordRef, state);\n return Promise.resolve();\n };\n updateRecord = (recordRef, partialState) => {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update record as document not found: ${recordRef.docRef.id}`) : invariant(false) : void 0;\n const wasUpdated = YjsSchemaMapper.updateRecord(internalDoc.yDoc, getMetadata(recordRef.model).name, recordRef.id, partialState);\n if (!wasUpdated) {\n return Promise.reject(new Error(`Record not found for update: ${recordRef.id}`));\n }\n\n // Call hook method for subclass-specific handling\n this.onRecordSet?.(recordRef, partialState);\n return Promise.resolve();\n };\n withTransaction = (docRef, fn, description) => {\n const internalDoc = this.documents.get(docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start transaction as document not found: ${docRef.id}`) : invariant(false) : void 0;\n internalDoc.yDoc.transact(fn, description);\n };\n onMetadataChange(docRef, callback) {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(docRef);\n const isFirstSubscription = !internalDoc.hasMetadataSubscriptions;\n internalDoc.metadataSubscribers.add(callback);\n internalDoc.hasMetadataSubscriptions = true;\n\n // Trigger remote load if this is the first subscription and not yet loaded\n if (isFirstSubscription && internalDoc.metadataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onMetadataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Immediately call back with current metadata if available\n if (internalDoc.metadata != null) {\n callback(docRef, internalDoc.metadata);\n }\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (currentDoc) {\n currentDoc.metadataSubscribers.delete(callback);\n\n // Check if this was the last metadata subscription\n if (currentDoc.metadataSubscribers.size === 0) {\n currentDoc.hasMetadataSubscriptions = false;\n this.onMetadataSubscriptionClosed(currentDoc, internalDocRef);\n }\n }\n };\n }\n onStateChange = (docRef, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const isFirstStateSubscription = internalDoc.docStateSubscribers.size === 0;\n internalDoc.docStateSubscribers.add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Set up Y.Doc listener if this is the first state subscription\n if (isFirstStateSubscription && !internalDoc.yDocUpdateHandler) {\n const updateHandler = () => {\n this.notifyStateSubscribers(internalDoc, docRef);\n };\n internalDoc.yDoc.on(\"update\", updateHandler);\n internalDoc.yDocUpdateHandler = updateHandler;\n }\n\n // Call callback immediately with current state\n callback(internalDocRef);\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (!currentDoc) return;\n currentDoc.docStateSubscribers.delete(callback);\n\n // Clean up Y.Doc listener if no more state subscriptions\n if (currentDoc.docStateSubscribers.size === 0 && currentDoc.yDocUpdateHandler) {\n currentDoc.yDoc.off(\"update\", currentDoc.yDocUpdateHandler);\n currentDoc.yDocUpdateHandler = undefined;\n }\n\n // Check if this removes all data subscriptions (state + record + collection)\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n getDocumentRef(docId) {\n const internalDoc = this.documents.get(docId);\n if (!internalDoc) return null;\n return createDocRef(this.app, docId, internalDoc.schema);\n }\n notifyMetadataSubscribers(internalDoc, docRef, metadata) {\n for (const callback of internalDoc.metadataSubscribers) {\n callback(docRef, metadata);\n }\n }\n notifyStateSubscribers(internalDoc, docRef) {\n for (const callback of internalDoc.docStateSubscribers) {\n callback(docRef);\n }\n }\n updateMetadata(docId, metadata) {\n const internalDoc = this.documents.get(docId);\n if (internalDoc) {\n internalDoc.metadata = metadata;\n const docRef = this.getDocumentRef(docId);\n if (docRef) {\n this.notifyMetadataSubscribers(internalDoc, docRef, metadata);\n }\n }\n }\n notifyCollectionSubscribers(internalDoc, collection, recordId, changeType) {\n const storageName = getMetadata(collection.model).name;\n const subs = internalDoc.collectionSubscriptions.get(storageName);\n if (!subs) {\n return;\n }\n const subscribers = subs[changeType];\n if (subscribers == null || subscribers.size === 0) {\n return;\n }\n const recordRefInstance = this.getCreateRecordRef(collection.docRef, recordId, collection.model);\n const records = [recordRefInstance];\n for (const callback of subscribers) {\n callback(records);\n }\n }\n notifyRecordSubscribers(recordRef, changeType) {\n const internalDoc = this.documents.get(recordRef.docRef.id);\n !(internalDoc != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Document not found for record notifications\") : invariant(false) : void 0;\n const recordSubs = internalDoc.recordSubscriptions.get(recordRef.id);\n if (recordSubs == null) {\n return;\n }\n\n // Verify model consistency\n !(getMetadata(recordSubs.ref.model).name === getMetadata(recordRef.model).name) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Model mismatch when notifying record subscribers for ${recordRef.id}: expected ${getMetadata(recordSubs.ref.model).name}, got ${getMetadata(recordRef.model).name}`) : invariant(false) : void 0;\n switch (changeType) {\n case \"changed\":\n {\n const snapshot = this.getRecordSnapshotInternal(internalDoc, recordRef);\n for (const callback of recordSubs.changed ?? []) {\n try {\n callback(snapshot, recordRef);\n } catch (e) {\n console.error(\"Record onChanged callback threw unhandled error\", e, {\n model: getMetadata(recordRef.model).name,\n id: recordRef.id\n });\n }\n }\n break;\n }\n case \"deleted\":\n {\n for (const callback of recordSubs.deleted ?? []) {\n try {\n callback(recordRef);\n } catch (e) {\n console.error(\"Record onDeleted callback threw unhandled error\", e, {\n model: getMetadata(recordRef.model).name,\n id: recordRef.id\n });\n }\n }\n break;\n }\n }\n }\n\n // Collection methods implementation\n getRecord = (collection, id) => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return undefined;\n const storageName = getMetadata(collection.model).name;\n const recordExists = YjsSchemaMapper.getRecordData(internalDoc.yDoc, storageName, id);\n return recordExists ? this.getCreateRecordRef(collection.docRef, id, collection.model) : undefined;\n };\n hasRecord = (collection, id) => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return false;\n const storageName = getMetadata(collection.model).name;\n return YjsSchemaMapper.getRecordData(internalDoc.yDoc, storageName, id) != null;\n };\n setCollectionRecord = (collection, id, state) => {\n // Create a RecordRef and delegate to existing setRecord method\n const recordRefInstance = this.getCreateRecordRef(collection.docRef, id, collection.model);\n return this.setRecord(recordRefInstance, state);\n };\n deleteRecord = record => {\n const internalDoc = this.documents.get(record.docRef.id);\n if (!internalDoc) {\n // Document doesn't exist, record doesn't exist - this is a no-op\n return Promise.resolve();\n }\n const storageName = getMetadata(record.model).name;\n const recordsCollection = YjsSchemaMapper.getRecordsMap(internalDoc.yDoc, storageName);\n const existed = recordsCollection.has(record.id);\n if (existed) {\n recordsCollection.delete(record.id);\n }\n return Promise.resolve();\n };\n getCollectionSize = collection => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return 0;\n const storageName = getMetadata(collection.model).name;\n return YjsSchemaMapper.getAllRecordIds(internalDoc.yDoc, storageName).length;\n };\n getCollectionRecords = collection => {\n const internalDoc = this.documents.get(collection.docRef.id);\n if (!internalDoc) return [];\n const storageName = getMetadata(collection.model).name;\n const recordIds = YjsSchemaMapper.getAllRecordIds(internalDoc.yDoc, storageName);\n return recordIds.map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n };\n onCollectionItemsAdded = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"added\", callback);\n };\n onCollectionItemsChanged = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"changed\", callback);\n };\n onCollectionItemsDeleted = (collection, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(collection.docRef);\n return this.subscribeToCollectionChanges(internalDoc, internalDocRef, collection, \"deleted\", callback);\n };\n\n // TODO: clearer naming of subscription vs handlers etc.\n onRecordChanged = (record, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(record.docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const storageName = getMetadata(record.model).name;\n const collectionRef = this.getCreateRecordCollectionRef(record.docRef, record.model);\n const needsCollectionListener = !internalDoc.yjsCollectionHandlers.has(storageName);\n const recordSubs = this.getCreateRecordSubscriptions(internalDoc, record);\n (recordSubs.changed ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n // Call lifecycle method without awaiting\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n if (needsCollectionListener) {\n this.getCreateCollectionSubscriptions(internalDoc, collectionRef);\n this.setupCollectionListener(internalDoc, collectionRef);\n }\n const snapshot = this.getRecordSnapshotInternal(internalDoc, record);\n if (snapshot != null) {\n callback(snapshot, record);\n }\n return () => {\n recordSubs.changed?.delete(callback);\n const currentDoc = this.documents.get(record.docRef.id);\n if (!currentDoc) return;\n if (isRecordSubscriptionsEmpty(recordSubs)) {\n currentDoc.recordSubscriptions.delete(record.id);\n }\n this.cleanupCollectionListenerIfUnused(currentDoc, record.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n onRecordDeleted = (record, callback) => {\n const {\n internalDoc,\n internalDocRef\n } = this.getCreateInternalDoc(record.docRef);\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const storageName = getMetadata(record.model).name;\n const collectionRef = this.getCreateRecordCollectionRef(record.docRef, record.model);\n const needsCollectionListener = !internalDoc.yjsCollectionHandlers.has(storageName);\n const recordSubs = this.getCreateRecordSubscriptions(internalDoc, record);\n (recordSubs.deleted ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n if (needsCollectionListener) {\n this.getCreateCollectionSubscriptions(internalDoc, collectionRef);\n this.setupCollectionListener(internalDoc, collectionRef);\n }\n return () => {\n recordSubs.deleted?.delete(callback);\n const currentDoc = this.documents.get(record.docRef.id);\n if (!currentDoc) return;\n if (isRecordSubscriptionsEmpty(recordSubs)) {\n currentDoc.recordSubscriptions.delete(record.id);\n }\n this.cleanupCollectionListenerIfUnused(currentDoc, record.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n };\n getCreateCollectionSubscriptions(internalDoc, collection) {\n const storageName = getMetadata(collection.model).name;\n const docCollectionSubs = internalDoc.collectionSubscriptions.get(storageName) ?? internalDoc.collectionSubscriptions.set(storageName, {}).get(storageName);\n\n // Generic cast to specific types\n return docCollectionSubs;\n }\n getCreateRecordSubscriptions(internalDoc, record) {\n let recordSubs = internalDoc.recordSubscriptions.get(record.id);\n if (!recordSubs) {\n // Create new subscription entry with the record ref\n recordSubs = {\n ref: record\n };\n internalDoc.recordSubscriptions.set(record.id, recordSubs);\n } else {\n // Verify model consistency - records with same ID should have same model\n if (getMetadata(recordSubs.ref.model).name !== getMetadata(record.model).name) {\n throw new Error(`Model mismatch for record ${record.id}: expected ${getMetadata(recordSubs.ref.model).name}, got ${getMetadata(record.model).name}`);\n }\n }\n return recordSubs;\n }\n subscribeToCollectionChanges(internalDoc, internalDocRef, collection, changeType, callback) {\n const isFirstDataSubscription = !internalDoc.hasDataSubscriptions;\n const modelSubscriptions = this.getCreateCollectionSubscriptions(internalDoc, collection);\n const wasEmpty = isCollectionSubscriptionsEmpty(modelSubscriptions);\n (modelSubscriptions[changeType] ??= new Set()).add(callback);\n internalDoc.hasDataSubscriptions = true;\n\n // Trigger remote load if this is the first data subscription and not yet loaded\n if (isFirstDataSubscription && internalDoc.dataStatus.load === DocumentLoadStatus.UNLOADED) {\n // Call lifecycle method without awaiting\n this.onDataSubscriptionOpened(internalDoc, internalDocRef);\n }\n\n // Set up Y.Map listener if this is the first subscription for this collection\n if (wasEmpty) {\n this.setupCollectionListener(internalDoc, collection);\n }\n return () => {\n modelSubscriptions[changeType]?.delete(callback);\n const currentDoc = this.documents.get(collection.docRef.id);\n if (!currentDoc) return;\n const storageName = getMetadata(collection.model).name;\n this.cleanupCollectionListenerIfUnused(currentDoc, collection.docRef.id, storageName);\n const hasDataSubs = currentDoc.docStateSubscribers.size > 0 || currentDoc.recordSubscriptions.size > 0 || Array.from(currentDoc.collectionSubscriptions.values()).some(subs => subs.added?.size || subs.changed?.size || subs.deleted?.size);\n if (!hasDataSubs) {\n currentDoc.hasDataSubscriptions = false;\n this.onDataSubscriptionClosed(currentDoc, internalDocRef);\n }\n };\n }\n setupCollectionListener(internalDoc, collection) {\n const docId = collection.docRef.id;\n const storageName = getMetadata(collection.model).name;\n const yCollection = internalDoc.yDoc.getMap(storageName);\n this.logger.debug(\"Setting up collection listener\", {\n docId,\n storageName,\n existingKeys: Array.from(yCollection.keys()),\n allDocMaps: Array.from(internalDoc.yDoc.share.keys())\n });\n\n // TODO: tidy this up\n const eventHandler = events => {\n this.logger.debug(\"Y.Map observeDeep fired\", {\n docId,\n storageName,\n eventCount: events.length\n });\n const currentDoc = this.documents.get(docId);\n if (!currentDoc) return;\n const subs = currentDoc.collectionSubscriptions.get(storageName);\n if (!subs) return;\n const addedKeys = new Set();\n const changedKeys = new Set();\n const deletedKeys = new Set();\n for (const event of events) {\n // Shallow change, ie the collection itself was modified\n if (event.target === yCollection) {\n // Collection-level change (add/remove/replace keys in collection)\n for (const [key, change] of event.changes.keys) {\n switch (change.action) {\n case \"add\":\n addedKeys.add(key);\n break;\n case \"update\":\n // this is a replacement within the map\n changedKeys.add(key);\n break;\n case \"delete\":\n deletedKeys.add(key);\n break;\n }\n }\n } else {\n // Nested change (property change within a record)\n // path[0] is the record ID since path is relative to currentTarget (yCollection)\n const recordId = event.path[0];\n if (recordId != null) {\n changedKeys.add(recordId);\n }\n }\n }\n\n // Notify subscribers\n if (addedKeys.size > 0) {\n const addedRecords = Array.from(addedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.added != null) {\n for (const callback of subs.added) {\n callback(addedRecords);\n }\n }\n for (const record of addedRecords) {\n this.notifyRecordSubscribers(record, \"changed\");\n }\n }\n if (changedKeys.size > 0) {\n const changedRecords = Array.from(changedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.changed != null) {\n for (const callback of subs.changed) {\n callback(changedRecords);\n }\n }\n for (const record of changedRecords) {\n this.notifyRecordSubscribers(record, \"changed\");\n }\n }\n if (deletedKeys.size > 0) {\n const deletedRecords = Array.from(deletedKeys).map(id => this.getCreateRecordRef(collection.docRef, id, collection.model));\n if (subs.deleted?.size) {\n for (const callback of subs.deleted) {\n callback(deletedRecords);\n }\n }\n for (const record of deletedRecords) {\n this.notifyRecordSubscribers(record, \"deleted\");\n }\n }\n };\n yCollection.observeDeep(eventHandler);\n\n // Store the handler for cleanup\n internalDoc.yjsCollectionHandlers.set(storageName, () => {\n yCollection.unobserveDeep(eventHandler);\n });\n }\n cleanupCollectionListener(docId, storageName) {\n const internalDoc = this.documents.get(docId);\n if (internalDoc == null) {\n return;\n }\n const cleanup = internalDoc.yjsCollectionHandlers.get(storageName);\n if (cleanup != null) {\n cleanup();\n internalDoc.yjsCollectionHandlers.delete(storageName);\n }\n }\n cleanupCollectionListenerIfUnused(internalDoc, docId, storageName) {\n const collectionSubs = internalDoc.collectionSubscriptions.get(storageName);\n const hasCollectionSubs = collectionSubs != null && (collectionSubs.added?.size || collectionSubs.changed?.size || collectionSubs.deleted?.size);\n const hasRecordSubs = Array.from(internalDoc.recordSubscriptions.values()).some(recordSubs => getMetadata(recordSubs.ref.model).name === storageName && !isRecordSubscriptionsEmpty(recordSubs));\n if (!hasCollectionSubs && !hasRecordSubs) {\n this.cleanupCollectionListener(docId, storageName);\n if (collectionSubs != null) {\n internalDoc.collectionSubscriptions.delete(storageName);\n }\n }\n }\n\n // DocumentService status methods implementation\n getDocumentStatus = docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n return {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n };\n onStatusChange = (docRef, callback) => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n internalDoc.statusSubscribers.add(callback);\n\n // Call callback immediately with current status\n const status = {\n metadata: internalDoc.metadataStatus,\n data: internalDoc.dataStatus,\n metadataError: internalDoc.metadataError,\n dataError: internalDoc.dataError\n };\n callback(docRef, status);\n return () => {\n const currentDoc = this.documents.get(docRef.id);\n if (currentDoc) {\n currentDoc.statusSubscribers.delete(callback);\n }\n };\n };\n waitForMetadataLoad = async docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (internalDoc.metadataStatus.load === DocumentLoadStatus.LOADED) {\n return Promise.resolve();\n }\n if (internalDoc.metadataStatus.load === DocumentLoadStatus.ERROR) {\n return Promise.reject(new Error(\"Metadata load error\", {\n cause: internalDoc.metadataError\n }));\n }\n\n // Wait for status to change to LOADED or ERROR\n return new Promise((resolve, reject) => {\n const unsubscribe = this.onStatusChange(docRef, (_, status) => {\n if (status.metadata.load === DocumentLoadStatus.LOADED) {\n unsubscribe();\n resolve();\n } else if (status.metadata.load === DocumentLoadStatus.ERROR) {\n unsubscribe();\n reject(new Error(\"Metadata load error\", {\n cause: status.metadataError\n }));\n }\n });\n });\n };\n waitForDataLoad = async docRef => {\n const {\n internalDoc\n } = this.getCreateInternalDoc(docRef);\n if (internalDoc.dataStatus.load === DocumentLoadStatus.LOADED) {\n return Promise.resolve();\n }\n if (internalDoc.dataStatus.load === DocumentLoadStatus.ERROR) {\n return Promise.reject(new Error(\"Data load error\", {\n cause: internalDoc.dataError\n }));\n }\n\n // Wait for status to change to LOADED or ERROR\n return new Promise((resolve, reject) => {\n const unsubscribe = this.onStatusChange(docRef, (_, status) => {\n if (status.data.load === DocumentLoadStatus.LOADED) {\n unsubscribe();\n resolve();\n } else if (status.data.load === DocumentLoadStatus.ERROR) {\n unsubscribe();\n reject(new Error(\"Data load error\", {\n cause: status.dataError\n }));\n }\n });\n });\n };\n\n // FIXME: don't expose in production builds\n /**\n * @internal\n */\n getYDocForTesting(docId) {\n const internalDoc = this.documents.get(docId);\n return internalDoc ? internalDoc.yDoc : null;\n }\n}\nfunction isCollectionSubscriptionsEmpty(subs) {\n return !subs.added?.size && !subs.changed?.size && !subs.deleted?.size;\n}\nfunction isRecordSubscriptionsEmpty(subs) {\n return !subs.changed?.size && !subs.deleted?.size;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { generateId } from \"@palantir/pack.core\";\nimport { createDocumentServiceConfig } from \"../DocumentServiceModule.js\";\nimport { createDocRef } from \"../types/DocumentRefImpl.js\";\nimport { DocumentLoadStatus } from \"../types/DocumentService.js\";\nimport { BaseYjsDocumentService } from \"./BaseYjsDocumentService.js\";\nexport function createInMemoryDocumentServiceConfig({\n autoCreateDocuments = true\n} = {}) {\n const config = {\n autoCreateDocuments\n };\n return createDocumentServiceConfig(internalCreateInMemoryDocumentService, config);\n}\nexport function internalCreateInMemoryDocumentService(app, options) {\n return new InMemoryDocumentService(app, options);\n}\nclass InMemoryDocumentService extends BaseYjsDocumentService {\n constructor(app, config) {\n super(app, app.config.logger.child({}, {\n level: \"debug\",\n msgPrefix: \"InMemoryDocumentService\"\n }));\n this.config = config;\n }\n createInternalDoc(ref, metadata, yDoc) {\n return this.createBaseInternalDoc(ref, metadata, yDoc);\n }\n get hasMetadataSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.metadataSubscribers.size > 0);\n }\n get hasStateSubscriptions() {\n return Array.from(this.documents.values()).some(doc => this.hasSubscriptions(doc) && doc.docStateSubscribers.size > 0);\n }\n createDocument = (metadata, schema) => {\n const id = generateDocumentId();\n const docRef = createDocRef(this.app, id, schema);\n const yDoc = this.initializeYDoc(schema);\n this.getCreateInternalDoc(docRef, metadata, yDoc);\n return Promise.resolve(docRef);\n };\n\n // Lifecycle method implementations\n onMetadataSubscriptionOpened(internalDoc, docRef) {\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n if (this.config.autoCreateDocuments === false && internalDoc.metadata == null) {\n this.updateMetadataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found and autoCreateDocuments is disabled\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n this.updateMetadataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }\n onDataSubscriptionOpened(internalDoc, docRef) {\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADING\n });\n if (this.config.autoCreateDocuments === false && internalDoc.metadata == null) {\n this.updateDataStatus(internalDoc, docRef, {\n error: new Error(\"Document not found and autoCreateDocuments is disabled\"),\n load: DocumentLoadStatus.ERROR\n });\n return;\n }\n this.updateDataStatus(internalDoc, docRef, {\n load: DocumentLoadStatus.LOADED\n });\n }\n onMetadataSubscriptionClosed(_internalDoc, _docRef) {\n // No cleanup needed for in-memory service\n }\n onDataSubscriptionClosed(_internalDoc, _docRef) {\n // No cleanup needed for in-memory service\n }\n onActivity(_docRef, _callback) {\n return () => {};\n }\n onPresence(_docRef, _callback, _options) {\n return () => {};\n }\n updateCustomPresence(_docRef, _model, _eventData) {}\n}\nfunction generateDocumentId() {\n return generateId();\n}"]}
@@ -74,12 +74,21 @@ var StateModuleImpl = class {
74
74
  async getDocumentSnapshot(docRef) {
75
75
  return this.documentService.getDocumentSnapshot(docRef);
76
76
  }
77
+ onActivity(docRef, callback) {
78
+ return this.documentService.onActivity(docRef, callback);
79
+ }
77
80
  onMetadataChange(docRef, cb) {
78
81
  return this.documentService.onMetadataChange(docRef, cb);
79
82
  }
83
+ onPresence(docRef, callback, options) {
84
+ return this.documentService.onPresence(docRef, callback, options);
85
+ }
80
86
  onStateChange(docRef, cb) {
81
87
  return this.documentService.onStateChange(docRef, cb);
82
88
  }
89
+ updateCustomPresence(docRef, model, eventData) {
90
+ this.documentService.updateCustomPresence(docRef, model, eventData);
91
+ }
83
92
  async getRecordSnapshot(recordRef) {
84
93
  return this.documentService.getRecordSnapshot(recordRef);
85
94
  }
@@ -89,6 +98,9 @@ var StateModuleImpl = class {
89
98
  async updateRecord(recordRef, partialState) {
90
99
  return this.documentService.updateRecord(recordRef, partialState);
91
100
  }
101
+ withTransaction(docRef, fn, description) {
102
+ this.documentService.withTransaction(docRef, fn, description);
103
+ }
92
104
  // Collection methods
93
105
  getCreateRecordCollectionRef(docRef, model) {
94
106
  return this.documentService.getCreateRecordCollectionRef(docRef, model);
@@ -156,9 +168,18 @@ var INVALID_DOC_REF = Object.freeze({
156
168
  getRecords: () => {
157
169
  throw new Error("Invalid document reference");
158
170
  },
171
+ onActivity: () => () => {
172
+ },
159
173
  onMetadataChange: () => () => {
160
174
  },
175
+ onPresence: () => () => {
176
+ },
161
177
  onStateChange: () => () => {
178
+ },
179
+ updateCustomPresence: () => {
180
+ },
181
+ withTransaction: () => {
182
+ throw new Error("Invalid document reference");
162
183
  }
163
184
  });
164
185
  var createDocRef = (app, id, schema) => {
@@ -185,12 +206,24 @@ var DocumentRefImpl = class {
185
206
  getRecords(model) {
186
207
  return this.#stateModule.getCreateRecordCollectionRef(this, model);
187
208
  }
209
+ onActivity(callback) {
210
+ return this.#stateModule.onActivity(this, callback);
211
+ }
188
212
  onMetadataChange(cb) {
189
213
  return this.#stateModule.onMetadataChange(this, cb);
190
214
  }
215
+ onPresence(callback, options) {
216
+ return this.#stateModule.onPresence(this, callback, options);
217
+ }
191
218
  onStateChange(callback) {
192
219
  return this.#stateModule.onStateChange(this, callback);
193
220
  }
221
+ updateCustomPresence(model, eventData) {
222
+ this.#stateModule.updateCustomPresence(this, model, eventData);
223
+ }
224
+ withTransaction(fn, description) {
225
+ this.#stateModule.withTransaction(this, fn, description);
226
+ }
194
227
  };
195
228
 
196
229
  // src/types/DocumentService.ts
@@ -677,6 +710,11 @@ var BaseYjsDocumentService = class {
677
710
  this.onRecordSet?.(recordRef, partialState);
678
711
  return Promise.resolve();
679
712
  };
713
+ withTransaction = (docRef, fn, description) => {
714
+ const internalDoc = this.documents.get(docRef.id);
715
+ !(internalDoc != null) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, `Cannot start transaction as document not found: ${docRef.id}`) : invariant__default.default(false) : void 0;
716
+ internalDoc.yDoc.transact(fn, description);
717
+ };
680
718
  onMetadataChange(docRef, callback) {
681
719
  const {
682
720
  internalDoc,
@@ -1272,6 +1310,16 @@ var InMemoryDocumentService = class extends BaseYjsDocumentService {
1272
1310
  }
1273
1311
  onDataSubscriptionClosed(_internalDoc, _docRef) {
1274
1312
  }
1313
+ onActivity(_docRef, _callback) {
1314
+ return () => {
1315
+ };
1316
+ }
1317
+ onPresence(_docRef, _callback, _options) {
1318
+ return () => {
1319
+ };
1320
+ }
1321
+ updateCustomPresence(_docRef, _model, _eventData) {
1322
+ }
1275
1323
  };
1276
1324
  function generateDocumentId() {
1277
1325
  return pack_core.generateId();