diff --git a/gen-typebox.js b/gen-typebox.js index 9d93860..0a2dd35 100644 --- a/gen-typebox.js +++ b/gen-typebox.js @@ -10,7 +10,19 @@ const TO_GEN = ['observation', 'track', 'preset', 'field'] // We extend the schema instead of assigning values to a clone // because JSDoc has no clean way to mark nested trees as mutable +// These are not part of the scheme but are added by the DataType class +// to show who authored a particular change +const authorFields = { + createdBy: { + type: 'string', + }, + updatedBy: { + type: 'string', + }, +} + const observationSchema = extendProperties(originals.observation, { + ...authorFields, attachments: { type: 'array', items: { @@ -28,17 +40,21 @@ const observationSchema = extendProperties(originals.observation, { }) const presetSchema = extendProperties(originals.preset, { + ...authorFields, fieldRefs: addUrlFieldArray(originals.preset.properties.fieldRefs), iconRef: addUrlField(originals.preset.properties.iconRef), }) const trackSchema = extendProperties(originals.track, { + ...authorFields, observationRefs: addUrlFieldArray(originals.track.properties.observationRefs), presetRef: addUrlField(originals.track.properties.presetRef), }) +const fieldSchema = extendProperties(originals.field, authorFields) + const schemas = { - ...originals, + field: fieldSchema, observation: observationSchema, preset: presetSchema, track: trackSchema, diff --git a/package-lock.json b/package-lock.json index 6b9473d..753f618 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,12 @@ "version": "0.2.1", "license": "MIT", "dependencies": { - "@comapeo/core": "^4.1.0", + "@comapeo/core": "^5.1.1", "@fastify/sensible": "^5.6.0", "@fastify/type-provider-typebox": "^4.1.0", "@fastify/websocket": "^10.0.1", "@mapeo/crypto": "^1.0.0-alpha.10", + "@mapeo/default-config": "^6.0.0", "@sinclair/typebox": "^0.33.17", "ajv": "^8.17.1", "env-schema": "^6.0.0", @@ -57,14 +58,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -209,109 +210,14 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", @@ -442,31 +348,34 @@ } }, "node_modules/@comapeo/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-4.1.0.tgz", - "integrity": "sha512-1aqc/pHzI8u1dmYazOMSW+tUkG7vDcHococr+1Ul3rdWpUiZIlmk0kYzdLtl6gc7sWi7CqxloqglrKPIHXKfOg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-5.1.1.tgz", + "integrity": "sha512-3gq+qTdG9iz5nrAcshL+ygXfe0Aa4LMdEJXC2AzjDrqzl0g/S0qmYEGAHsD1pdIIpCBNHD4ENOEOHUFDQTlluA==", "license": "MIT", "dependencies": { "@comapeo/fallback-smp": "^1.0.0", - "@comapeo/schema": "2.0.0", + "@comapeo/schema": "2.2.0", "@digidem/types": "^2.3.0", "@fastify/error": "^3.4.1", "@fastify/type-provider-typebox": "^4.1.0", "@hyperswarm/secret-stream": "^6.6.3", "@mapeo/crypto": "1.0.0-alpha.10", - "@mapeo/sqlite-indexer": "1.0.0-alpha.9", + "@mapeo/sqlite-indexer": "^1.0.2", "@sinclair/typebox": "^0.33.17", "@sindresorhus/merge-streams": "^4.0.0", "b4a": "^1.6.3", "bcp-47": "^2.1.0", - "better-sqlite3": "^8.7.0", + "bcp-47-normalize": "^2.3.0", + "better-sqlite3": "^11.10.0", "big-sparse-array": "^1.0.3", "bogon": "^1.1.0", + "comapeocat": "^1.0.0", "compact-encoding": "^2.12.0", "corestore": "6.8.4", "debug": "^4.3.4", "dot-prop": "^9.0.0", - "drizzle-orm": "^0.30.8", + "dot-prop-extra": "^10.2.0", + "drizzle-orm": "^1.0.0-beta.1-ac4ce44", "ensure-error": "^4.0.0", "fastify": "^4.0.0", "fastify-plugin": "^4.5.1", @@ -474,6 +383,7 @@ "hypercore": "10.19.0", "hypercore-crypto": "3.4.2", "hyperdrive": "11.5.3", + "iso-3166": "^4.3.0", "json-stable-stringify": "^1.1.1", "magic-bytes.js": "^1.10.0", "map-obj": "^5.0.2", @@ -481,6 +391,7 @@ "multi-core-indexer": "^1.0.0", "p-defer": "^4.0.0", "p-event": "^6.0.1", + "p-queue": "^8.1.1", "p-timeout": "^6.1.2", "protobufjs": "^7.2.3", "protomux": "^3.4.1", @@ -494,6 +405,7 @@ "throttle-debounce": "^5.0.0", "tiny-typed-emitter": "^2.1.0", "type-fest": "^4.30.0", + "un-m49": "^2.2.0", "undici": "^6.13.0", "unix-path-resolve": "^1.0.2", "varint": "^6.0.0", @@ -567,9 +479,9 @@ } }, "node_modules/@comapeo/schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/schema/-/schema-2.0.0.tgz", - "integrity": "sha512-vAQhZPSd5tMe/F94X6GZC+3Np5psblitjmhdFp5qZm/xYE9anywwcdOIYIGu7A1RdA2KF7qi438g7YRvPcKHGg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@comapeo/schema/-/schema-2.2.0.tgz", + "integrity": "sha512-SbD/Q0BsirAFSj2LETqwgyx/Om62lUVT3R05k9vK5Ld+u+VNn1Xsg2nRblf6Xh9mP1U3rBYJvjjuYQ1lPUYmLA==", "license": "MIT", "dependencies": { "@comapeo/geometry": "^1.1.1", @@ -1530,6 +1442,12 @@ "z32": "^1.0.0" } }, + "node_modules/@mapeo/default-config": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@mapeo/default-config/-/default-config-6.0.0.tgz", + "integrity": "sha512-nAnTbcKQRntsExuQAsAHal+EOd2OkDWrsl0ewcic/yVo+WpJ25ZTryKSPMVyFyHLihElX1cUH2r8C3YkZMoClA==", + "license": "CC-BY-NC-4.0" + }, "node_modules/@mapeo/mock-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@mapeo/mock-data/-/mock-data-5.0.0.tgz", @@ -1550,17 +1468,16 @@ } }, "node_modules/@mapeo/sqlite-indexer": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@mapeo/sqlite-indexer/-/sqlite-indexer-1.0.0-alpha.9.tgz", - "integrity": "sha512-TxuqTVmHjt3FHzQYos9dLakSi0Ibbn8I1frNgUwIo9fMAiuVVrsHIiibULZjnwqMMkkqGmvonVMCKZQOsdu32g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapeo/sqlite-indexer/-/sqlite-indexer-1.0.2.tgz", + "integrity": "sha512-PvQx1SfatNT+PNECtQ3MOOTVVQfZpbFlOT3JOHJDw2I3yQarncFAsYq2d9ahD1RBzTAutiPOTsHHqYW3Y1EdKQ==", "license": "MIT", - "dependencies": { - "@types/better-sqlite3": "^7.6.4", - "better-sqlite3": "^8.4.0" - }, "engines": { "node": ">=18.17.1", "npm": ">=9.6.7" + }, + "peerDependencies": { + "better-sqlite3": "*" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { @@ -2022,15 +1939,6 @@ "@types/node": "*" } }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.13", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", - "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/compress-commons": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@types/compress-commons/-/compress-commons-7.0.1.tgz", @@ -2603,10 +2511,34 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-normalize": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", + "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", + "license": "MIT", + "dependencies": { + "bcp-47": "^2.0.0", + "bcp-47-match": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/better-sqlite3": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", - "integrity": "sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2697,6 +2629,12 @@ "compact-encoding-net": "^1.2.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3030,6 +2968,81 @@ "dev": true, "license": "MIT" }, + "node_modules/comapeocat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/comapeocat/-/comapeocat-1.1.0.tgz", + "integrity": "sha512-PocDRe/HKHlfcvSHpXQnwAG0uHbnCRvuAIvZfsxhYvwxrrnVRY4IOV2LA0+vyVU7wIYLHuQ1YsG4i1cnwd7bZg==", + "license": "MIT", + "dependencies": { + "@commander-js/extra-typings": "^14.0.0", + "archiver": "^7.0.1", + "bcp-47": "^2.1.0", + "bcp-47-normalize": "^2.3.0", + "commander": "^14.0.1", + "dot-prop-extra": "^10.2.0", + "iso-3166": "^4.3.0", + "p-event": "^7.0.0", + "parse-json": "^8.3.0", + "safe-stable-stringify": "^2.5.0", + "svgo": "^4.0.0", + "un-m49": "^2.2.0", + "valibot": "^1.1.0", + "yauzl-promise": "^4.0.0" + }, + "bin": { + "comapeocat": "bin/comapeocat.mjs" + } + }, + "node_modules/comapeocat/node_modules/@commander-js/extra-typings": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-14.0.0.tgz", + "integrity": "sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==", + "license": "MIT", + "peerDependencies": { + "commander": "~14.0.0" + } + }, + "node_modules/comapeocat/node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/comapeocat/node_modules/p-event": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-7.0.0.tgz", + "integrity": "sha512-z4Xv/ieHhi6Dx3A5xbZI8WWTn+eSRo6buGTvA8Yv2iLyX+61SUIMKcBszZRHA6e2Apld6QEDSclAuha2iUntyA==", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.4" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/comapeocat/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", @@ -3275,6 +3288,80 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3493,6 +3580,61 @@ "node": ">=8" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-prop": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", @@ -3508,6 +3650,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dot-prop-extra": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/dot-prop-extra/-/dot-prop-extra-10.2.0.tgz", + "integrity": "sha512-Y28/q87Py9xa4uq0uwMeDd+3oh2TWV2tChN5HjIsCg9hK3YfUEuVLxPOofHdrWA3LpryMTlVLNt/Gt3SyydOCw==", + "license": "MIT", + "dependencies": { + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop-extra/node_modules/type-fest": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.2.0.tgz", + "integrity": "sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -3530,34 +3702,35 @@ } }, "node_modules/drizzle-orm": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.30.10.tgz", - "integrity": "sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==", + "version": "1.0.0-beta.1-fd8bfcc", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-1.0.0-beta.1-fd8bfcc.tgz", + "integrity": "sha512-zTEIb6vktmRIG2PXH7SwCznXxBCulgPSaZiUKI+Uzc7fvWwzZlfZa7BfKRrKiguGlAh87eJpsIR8tX6a8eJt5w==", "license": "Apache-2.0", "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", - "@cloudflare/workers-types": ">=3", - "@electric-sql/pglite": ">=0.1.1", - "@libsql/client": "*", - "@neondatabase/serverless": ">=0.1", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", - "@planetscale/database": ">=1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", - "@types/react": ">=18", "@types/sql.js": "*", + "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", - "better-sqlite3": ">=7", + "better-sqlite3": ">=9.3.0", "bun-types": "*", - "expo-sqlite": ">=13.2.0", - "knex": "*", - "kysely": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", - "react": ">=18", "sql.js": ">=1", "sqlite3": ">=5" }, @@ -3574,6 +3747,9 @@ "@libsql/client": { "optional": true }, + "@libsql/client-wasm": { + "optional": true + }, "@neondatabase/serverless": { "optional": true }, @@ -3586,16 +3762,22 @@ "@planetscale/database": { "optional": true }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, "@types/better-sqlite3": { "optional": true }, "@types/pg": { "optional": true }, - "@types/react": { + "@types/sql.js": { "optional": true }, - "@types/sql.js": { + "@upstash/redis": { "optional": true }, "@vercel/postgres": { @@ -3613,10 +3795,7 @@ "expo-sqlite": { "optional": true }, - "knex": { - "optional": true - }, - "kysely": { + "gel": { "optional": true }, "mysql2": { @@ -3628,7 +3807,7 @@ "postgres": { "optional": true }, - "react": { + "prisma": { "optional": true }, "sql.js": { @@ -3711,6 +3890,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-schema": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/env-schema/-/env-schema-6.0.0.tgz", @@ -4108,7 +4299,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, "license": "MIT" }, "node_modules/events": { @@ -5055,6 +5245,18 @@ "node": ">=0.8.19" } }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -5530,6 +5732,16 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/iso-3166": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/iso-3166/-/iso-3166-4.4.0.tgz", + "integrity": "sha512-I6ylkNQgxVh7cYADMUJpqBUdremGvyGZkDRSk9Cdic/ITBUemsllQnUeRpz7yDKyfgAXI9oPa5A9dia+7IXLqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/iterpal": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/iterpal/-/iterpal-0.4.0.tgz", @@ -5566,7 +5778,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -6274,16 +6485,11 @@ "resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-2.0.1.tgz", "integrity": "sha512-k1vM33y0oGIgip01EqdrWEMZLsYj9fP3jH7PZmeSCsCuubTQGjyrOANGSsqh+JtyqydYfXk9VBUVcyabvNTYXg==" }, - "node_modules/mbtiles-reader/node_modules/better-sqlite3": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", - "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - } + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", @@ -6773,6 +6979,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -7070,6 +7288,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-timeout": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", @@ -7183,10 +7417,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -7888,9 +8121,9 @@ } }, "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "license": "MIT", "engines": { "node": ">=10" @@ -7914,6 +8147,12 @@ "integrity": "sha512-Eqn7N2yV+aKMlUHTRqUwYG1Iv0cJqjlvLKj/GoP5PozJn361QaOYX14+v87r7NqQUZC22noP/LfLrSQiPwAygw==", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" + }, "node_modules/schema2typebox": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/schema2typebox/-/schema2typebox-1.7.8.tgz", @@ -8265,6 +8504,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -8737,6 +8985,52 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tar-fs": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", @@ -8933,9 +9227,9 @@ } }, "node_modules/type-fest": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz", - "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -9038,7 +9332,7 @@ "version": "5.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -9048,6 +9342,16 @@ "node": ">=14.17" } }, + "node_modules/un-m49": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/un-m49/-/un-m49-2.2.0.tgz", + "integrity": "sha512-4Akx3yTLm32m/JqAMQOvOSkaF8IA26c+baVBDKMQZlI1fOLftD8mdfj107ps5HBtb7K4ltmMsoQMcaz9yRV6zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -9109,6 +9413,20 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/valibot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", + "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", diff --git a/package.json b/package.json index fa1ac15..175ad4d 100644 --- a/package.json +++ b/package.json @@ -64,11 +64,12 @@ "typescript": "^5.6.3" }, "dependencies": { - "@comapeo/core": "^4.1.0", + "@comapeo/core": "^5.1.1", "@fastify/sensible": "^5.6.0", "@fastify/type-provider-typebox": "^4.1.0", "@fastify/websocket": "^10.0.1", "@mapeo/crypto": "^1.0.0-alpha.10", + "@mapeo/default-config": "^6.0.0", "@sinclair/typebox": "^0.33.17", "ajv": "^8.17.1", "env-schema": "^6.0.0", diff --git a/src/datatypes/field.js b/src/datatypes/field.js index ded19c2..14b409f 100644 --- a/src/datatypes/field.js +++ b/src/datatypes/field.js @@ -137,6 +137,8 @@ export const Field = Type.Object( 'Additional context about the field, e.g. hints about how to answer the question.', }), ), + createdBy: Type.Optional(Type.String()), + updatedBy: Type.Optional(Type.String()), }, { $schema: 'http://json-schema.org/draft-07/schema#', diff --git a/src/datatypes/observation.js b/src/datatypes/observation.js index 56c562b..28d37df 100644 --- a/src/datatypes/observation.js +++ b/src/datatypes/observation.js @@ -218,6 +218,8 @@ export const Observation = Type.Object( }, ), ), + createdBy: Type.Optional(Type.String()), + updatedBy: Type.Optional(Type.String()), }, { $schema: 'http://json-schema.org/draft-07/schema#', diff --git a/src/datatypes/preset.js b/src/datatypes/preset.js index ae5e706..6dec1ea 100644 --- a/src/datatypes/preset.js +++ b/src/datatypes/preset.js @@ -157,6 +157,8 @@ export const Preset = Type.Object( pattern: '^#[a-fA-F0-9]{6}$', }), ), + createdBy: Type.Optional(Type.String()), + updatedBy: Type.Optional(Type.String()), }, { $schema: 'http://json-schema.org/draft-07/schema#', diff --git a/src/datatypes/track.js b/src/datatypes/track.js index c848a45..86fd36a 100644 --- a/src/datatypes/track.js +++ b/src/datatypes/track.js @@ -71,7 +71,7 @@ export const Track = Type.Object( }, { description: 'Position details' }, ), - { description: 'Array of positions along the track' }, + { description: 'Array of positions along the track', minItems: 2 }, ), observationRefs: Type.Array( Type.Object({ @@ -130,6 +130,8 @@ export const Track = Type.Object( }, ), ), + createdBy: Type.Optional(Type.String()), + updatedBy: Type.Optional(Type.String()), }, { $schema: 'http://json-schema.org/draft-07/schema#', diff --git a/test/preset-endpoint.js b/test/preset-endpoint.js index 7d3124b..19740a7 100644 --- a/test/preset-endpoint.js +++ b/test/preset-endpoint.js @@ -86,8 +86,10 @@ test('fetch presetRef in observation', async (t) => { const presets = await generatePreset(project) + // Get a preset for the observation without any fields in it const observationPreset = presets.filter( - ({ geometry }) => geometry.length === 1 && geometry[0] === 'point', + ({ geometry, fieldRefs }) => + !fieldRefs?.length && geometry.length === 1 && geometry[0] === 'point', )[0] assert(observationPreset) @@ -163,8 +165,10 @@ test('fetch presetRef in track', async (t) => { const presets = await generatePreset(project) + // Get a preset for the observation without any fields in it const trackPreset = presets.filter( - ({ geometry }) => geometry.length === 1 && geometry[0] === 'line', + ({ geometry, fieldRefs }) => + !fieldRefs?.length && geometry.length === 1 && geometry[0] === 'line', )[0] assert(trackPreset) @@ -218,7 +222,11 @@ test('fetch presetRef in track', async (t) => { const { forks: _2, iconRef: _3, ...expectedPreset } = trackPreset - assert.deepEqual(fetchedPreset, expectedPreset, 'fetched preset matches') + assert.deepEqual( + fetchedPreset, + cleanUndefinedFields(expectedPreset), + 'fetched preset matches', + ) }) test('returning presets with fetchable fields and icons', async (t) => { @@ -265,7 +273,11 @@ test('returning presets with fetchable fields and icons', async (t) => { assert(found, 'preset got returned') const { fieldRefs, iconRef, ...generalData } = found const { fieldRefs: _, iconRef: _2, forks: _3, ...expectedData } = preset - assert.deepEqual(generalData, expectedData, 'general preset fields match') + assert.deepEqual( + generalData, + cleanUndefinedFields(expectedData), + 'general preset fields match', + ) assert(fieldRefs, 'preset has fieldRefs') if (!fieldRefs.length) continue @@ -298,3 +310,18 @@ test('returning presets with fetchable fields and icons', async (t) => { ) } }) + +/** + * @template {Record} T + * @param {T} value + * @returns {T} + */ +function cleanUndefinedFields(value) { + for (const key of Object.keys(value)) { + // eslint-disable-next-line no-undefined + if (value[key] === undefined) { + delete value[key] + } + } + return value +} diff --git a/test/test-helpers.js b/test/test-helpers.js index 2f69160..c39b2b4 100644 --- a/test/test-helpers.js +++ b/test/test-helpers.js @@ -174,10 +174,8 @@ export function generateAlerts( * @returns {Promise>} */ export async function generatePreset(project) { - await project.importConfig({ - configPath: fileURLToPath( - import.meta.resolve('./fixtures/validConfig.zip'), - ), + await project.$importCategories({ + filePath: fileURLToPath(import.meta.resolve('@mapeo/default-config')), }) const presets = await project.preset.getMany()