diff --git a/README.md b/README.md index 96a9016..0d41a02 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ archives are vendored under `vendor/zennotes/` with their source identity and checksums (`manifest.json`), and `package-lock.json` pins the complete install. A clean checkout installs them with `npm ci`, without a source clone or sibling repository. The vendored set is the core release -[core-2.70.0-core.hbed9639c9831ecf7](https://github.com/ZenNotes/zennotes/releases/tag/core-2.70.0-core.hbed9639c9831ecf7) -(desktop commit `9e50b245`, clean tree). +[core-2.71.1-core.h77db37926ce01390](https://github.com/ZenNotes/zennotes/releases/tag/core-2.71.1-core.h77db37926ce01390) +(desktop commit `ae288166`, clean tree). `npm run boundaries:check` verifies the pins, installed versions, singleton React/CodeMirror peers, and public export usage. `npm run core:adopt -- ` diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index ff49891..589293a 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -608,12 +608,12 @@ CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_ENTITLEMENTS = ZenWidgets/ZenWidgets.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = ZenWidgets/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes.ZenWidgets; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -737,12 +737,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -759,12 +759,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; @@ -779,12 +779,12 @@ CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -801,12 +801,12 @@ CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_ENTITLEMENTS = ZenWidgets/ZenWidgets.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = ZenWidgets/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes.ZenWidgets; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -839,12 +839,12 @@ CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 42; + CURRENT_PROJECT_VERSION = 43; DEVELOPMENT_TEAM = WYY7PK57DM; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 1.26.0; + MARKETING_VERSION = 1.27.0; PRODUCT_BUNDLE_IDENTIFIER = md.zennotes.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; diff --git a/package-lock.json b/package-lock.json index 36a11d6..e19dbd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,9 +32,9 @@ "@lezer/highlight": "^1.2.5", "@replit/codemirror-vim": "^6.4.0", "@xyflow/react": "^12.12.0", - "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz", - "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz", - "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz", + "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz", + "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz", + "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz", "codemirror": "^6.0.1", "dompurify": "^3.4.16", "function-plot": "^1.25.3", @@ -66,14 +66,14 @@ "@types/node": "^22.20.5", "@types/react": "^18.3.17", "@types/react-dom": "^18.3.5", - "@vitejs/plugin-react": "^6.1.1", + "@vitejs/plugin-react": "^6.1.2", "autoprefixer": "^10.6.0", "esbuild": "^0.28.2", "harper.js": "^2.10.0", - "postcss": "^8.5.28", + "postcss": "^8.5.29", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", - "vite": "^8.3.2" + "vite": "^8.3.4" } }, "node_modules/@alloc/quick-lru": { @@ -716,6 +716,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -732,6 +733,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -748,6 +750,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -764,6 +767,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -780,6 +784,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -796,6 +801,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -812,6 +818,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -828,6 +835,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -844,6 +852,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -860,6 +869,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -876,6 +886,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -892,6 +903,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -908,6 +920,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -924,6 +937,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -940,6 +954,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -956,6 +971,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -972,6 +988,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -988,6 +1005,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1004,6 +1022,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1020,6 +1039,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1036,6 +1056,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1052,6 +1073,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1068,6 +1090,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1084,6 +1107,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1100,6 +1124,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1116,6 +1141,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1780,9 +1806,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.151.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.151.0.tgz", - "integrity": "sha512-J1yXrIlNDZVzE3ada310xeAw7nH8yCAyLPuUIsjKatFPmfn5bS1oW+cM+QsGOtVWd5nhSpbwZWx/rue+r5Z+PA==", + "version": "0.154.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.154.0.tgz", + "integrity": "sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==", "devOptional": true, "license": "MIT", "funding": { @@ -2868,12 +2894,13 @@ "license": "MIT" }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.11.tgz", - "integrity": "sha512-A5kXfGKvKWWZE0TtPrfsvT+q4Y5d1QG8gGUzpYjGydM+fARM9MuX90PrXYXe0XbsDVgyxxNzHo6giCj90bsFNw==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.14.tgz", + "integrity": "sha512-aWR+XKH9+rW7m5fWq/5360J3mHycrx/o6xZM2DQFdJnTMdyP7/WzxPjhtLbVWdKo2y612/4U1bWqb3HQhiF7vg==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2884,12 +2911,13 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.11.tgz", - "integrity": "sha512-z6cTycz+iJ4PVkuL4HHW4DfTfoeU/2nqYYuSOrTmH7yHK5Y0LCOnA03V4ZNxavyVaU1oOqUgIg2klN/s+USGOA==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.14.tgz", + "integrity": "sha512-QiVxHofl6A8lQU7WAtOUY4QMVZXohxwz7WJJoeh8NBEUyKfIkMRKhYyq8az/1RypNiIXzNTtiS6KwHz0erxYRQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2900,12 +2928,13 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.11.tgz", - "integrity": "sha512-jShvqNtP6vDC6/A5JOAzbVV+DkgHqhl/ScVCJEbt+TUY6QYz7YnXcrg3sLtFBniro0f/Ld50ZwCWA6f7KYD1nQ==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.14.tgz", + "integrity": "sha512-lTQOzHuBIooh3jIr5XINQkjPGEuGy+Dsy0meXDr6Sjty0b99kYgGh4uBC/8mJX1T0kC8d6S0aPP1Y+bHkh6aBw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2916,12 +2945,13 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.11.tgz", - "integrity": "sha512-f2i2xiNWq1Z1l2++q2fuhZRdLAT3aqxD6vRNm1RAxpUoBcdqNB3C0s1Bt+K+PbEx2F5F4gQp6hqKkphCY/xF9w==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.14.tgz", + "integrity": "sha512-hyMKEGatjmBYCs/Q4sbIcL/GqpFEqsX3wc+HYVQ/85A4rxc1o7rPm4DUI4GV4k/h0ITddwFSGpqQunI14GXjTA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2932,12 +2962,13 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.11.tgz", - "integrity": "sha512-4Ir5FSOKIAMr4r0kExpt1s3bMgzJU3rA45AYOHtQpls0oNeqcYBKrWMlckrYH4KCfGLfkfn1tN1dmZPMVsdXow==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.14.tgz", + "integrity": "sha512-u371GbXoVXrEgP20PwzoGNOdAOqAMhzo19JzzY+V4YmmnC+DTOoqdbMu+O+54emM59Mik/UdrtWgcuEDKWRPKA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2948,12 +2979,13 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.11.tgz", - "integrity": "sha512-/gnRDM+39BROzAN/k1OZjDPnDMcZxB/0EUxKjONO5yVkNEvlsoMDrxGNKgZi/ttFriS2gwlDNzB65pvNbFOXIQ==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.14.tgz", + "integrity": "sha512-BqwKsdZQf6EqVWr8fv2MrDYzAvOZ7+NYFSJESRGs87fkseEhs0TU9TXgRJTkZoRRkxTizyEg1LKUXfU3/78uqg==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2964,12 +2996,13 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.11.tgz", - "integrity": "sha512-PFaK8HwvAHbaKbBcDNQihjMKYvFnA5hiENx/l5tphTDz1E0WFp32l0A7aq7lyUwGsRw/xSrNIy/gIK4thrSCrw==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.14.tgz", + "integrity": "sha512-SD9kY8M009x/7s57Z1dgUVlP5+uYBgKQK0Tkr1WIWngrtUJmRCW1RJFMY7QDla2khXhmg2i5Io7MUjcmZNZ/KQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2980,12 +3013,13 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.11.tgz", - "integrity": "sha512-AskzJUIKRLPxkruR1wLKewGbOw+EYfU/9lOrBFj4AFrEA8hPpKFnODWNu2WLaNs0QNkEb9QIJufmVZZIL/bJlg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.14.tgz", + "integrity": "sha512-BJ2CL19M6uuWesMgnqJzgxoI+N+eV7b0A9O9vLV42y+gitC41fNa8KElau1tHVzuLWX5GzEuxMPhAO0tQXQMkg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2996,12 +3030,13 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.11.tgz", - "integrity": "sha512-qlUGAheh2yh8afH7QBgx0PrRHN85hKnNd78x8MeMhXivuevgd8vgf6/CstOzmNKY/lLTHvNTrPy98cLnAugzJw==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.14.tgz", + "integrity": "sha512-4+Kl8daPV8NDHaD7mfCcc1pRM+Qg7ab8DyMm5FG5WoZgv4h2i3KFN1CybYBNbQqmuYm7ftJLvmMI1eHYJ22S/Q==", "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3012,12 +3047,13 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.11.tgz", - "integrity": "sha512-secpEad+0vCbSfn8upFySkDskv+bGPk3THSDS9Y89yc4rb4kzqHp8Dmyd9BkQW4SnhNXBZCl/6CrO//hZahNJQ==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.14.tgz", + "integrity": "sha512-V/h8ePq1fKDrmtFMz6xcCN3DKvuvMRrwwD1q0PkBeeo4DpK64biaKvqWGVxqCeYKqeRk7gE7/iKPxLCn08O97A==", "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3028,12 +3064,13 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.11.tgz", - "integrity": "sha512-mOVBT3dPpkWm8XBWPmU4bf+U6dYDLeMo/9ojUmis4N0L5uu10qra5vOyngZ7/PSdoE4G9KvRt4bloRxNjLas7A==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.14.tgz", + "integrity": "sha512-WxalXzgrLVpKC93xfpaJ3gCXUWzeCr+FRCbDVD2mUAy4L6Vo3lNVz0epUEUpxPWJkLNYUwM4OSIikv36OJ9mLg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3044,12 +3081,13 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.11.tgz", - "integrity": "sha512-Is78i9A8Ui4SqcxUwFJ9uMmjDn58IbVTjFWYdQestFEgeuEmHMLGNriXnVJKkwG2YiZjw8cP0zCTyDMdDGtOOg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.14.tgz", + "integrity": "sha512-3G3tnAmTpdk9jO3GQtyHXqeFD2SlecfTws/Y3M2mmj9nMBwwuLT4kur8sZKeu7ENUHSpVO3cIsm5A52LEWWwlg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3060,12 +3098,13 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.11.tgz", - "integrity": "sha512-dUCXneZ87INUMyQ0D+C0HrEBNUPNXHaPmU5GTjyKTJEiussw9Kaj5Ln8UztPe4epV/ffvgNBEadksdYhmW6xJA==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.14.tgz", + "integrity": "sha512-qyr5XiNGxm2ytx17vvtcJ9nXn6v1gENETi503bJx3OGwZ1tSonj7BosxbMa/xeAfSl5iS9X6KjEWYXLu6v1L7Q==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3076,12 +3115,13 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.11.tgz", - "integrity": "sha512-jByxb6qfd+bH1xUd0qnfFnb17i9sWBPY2tOavJ0l3tdr3OTu+Kvtm8cd/JV5nFt657b1VqGltxg9olOEfofXWw==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.14.tgz", + "integrity": "sha512-oA4o5o0S2yB199YyYXDzKUv1Z56Rc+mgOjwm7Z/vJ9Z8igiDPYvoOuDyo6g7AK/ZaF09nPhDKVnGBcYHO11GXA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3092,12 +3132,13 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.11.tgz", - "integrity": "sha512-/PzKqzAJ03i19oy2ItPvyvaVjOjBCNnfaJs8yvUdGBKmiESgnrJSQ2awd81QzFbbnAmu7YO9ZnJrDCb9VSJPRA==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.14.tgz", + "integrity": "sha512-9mE94bf2GZUaR/fUSXCMpBoWkctu421Mi0ORpm4zqfbkjKep7RxzPFa5etcGs5h+2KApoWBOA/hAJa/7saGgEQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3126,6 +3167,12 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@terrastruct/d2": { + "version": "0.1.33", + "resolved": "https://registry.npmjs.org/@terrastruct/d2/-/d2-0.1.33.tgz", + "integrity": "sha512-eK5hyfGIJFolC7sUsiKvWdY9xGFctTe3d+PSijo09IYDso8psztC+A4SammizXtlwYZpnnW0AtDjfBYauceSeA==", + "license": "MPL-2.0" + }, "node_modules/@types/d3": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", @@ -3438,7 +3485,7 @@ "version": "22.20.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.5.tgz", "integrity": "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -3509,9 +3556,9 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.1.tgz", - "integrity": "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", "dev": true, "license": "MIT", "dependencies": { @@ -3523,7 +3570,7 @@ "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", - "oxc-transform-react": "^0.145.0", + "oxc-transform-react": "^0.152.0", "vite": "^8.0.0" }, "peerDependenciesMeta": { @@ -3619,9 +3666,9 @@ } }, "node_modules/@zennotes/app-core": { - "version": "2.70.0-core.hbed9639c9831ecf7", - "resolved": "file:vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz", - "integrity": "sha512-8Hnh0Plk/7UJUZrkYo8YcTs6n70sVdYGB1++7IJ6pg1S/+s5T/0/3cgj7s6TFvZg7mB+52ehRCO1zbpmYAbHzg==", + "version": "2.71.1-core.h77db37926ce01390", + "resolved": "file:vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz", + "integrity": "sha512-W2S8q+nBtoxxVGNm2X+/UA3eji+YU+VB1/8fCQ0Z6BVuY6G9uUaPqkr0qqYvj2hI1RoIhVe/H0ViQJhz823NQw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.18.3", @@ -3649,9 +3696,10 @@ "@myriaddreamin/typst-ts-web-compiler": "^0.7.0", "@myriaddreamin/typst.ts": "^0.7.0", "@replit/codemirror-vim": "^6.3.0", + "@terrastruct/d2": "0.1.33", "@xyflow/react": "^12.11.2", - "@zennotes/bridge-contract": "2.70.0-boundaries.h4bf855e896db3206", - "@zennotes/shared-domain": "2.70.0-boundaries.h4bf855e896db3206", + "@zennotes/bridge-contract": "2.71.1-boundaries.h72cca974932e1356", + "@zennotes/shared-domain": "2.71.1-boundaries.h72cca974932e1356", "dompurify": "^3.3.4", "function-plot": "^1.25.3", "gray-matter": "^4.0.3", @@ -3661,7 +3709,7 @@ "jsxgraph": "^1.12.2", "katex": "^0.16.15", "mdast": "^3.0.0", - "mermaid": "^11.4.1", + "pele": "1.6.0", "prettier": "^3.8.2", "rehype-highlight": "^7.0.1", "rehype-katex": "^7.0.1", @@ -3695,19 +3743,19 @@ } }, "node_modules/@zennotes/bridge-contract": { - "version": "2.70.0-boundaries.h4bf855e896db3206", - "resolved": "file:vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz", - "integrity": "sha512-LpdQeeyRtmRl94GzBtgZ3pzQfE1PNlbnnRfYnGuCAak0MgKqwBHj3zZF5JETJEBKGOSpqcfhJBWPaSceS7W0Yg==", + "version": "2.71.1-boundaries.h72cca974932e1356", + "resolved": "file:vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz", + "integrity": "sha512-oMkkXDcpChKcusWBHl1tt/RUfo/dXfBTNhyhZRy8pqgJorLg9/mI410Xc+7H5Qwo76CiiqY6WA3H9kTV5MdWlw==", "license": "MIT" }, "node_modules/@zennotes/shared-domain": { - "version": "2.70.0-boundaries.h4bf855e896db3206", - "resolved": "file:vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz", - "integrity": "sha512-JVY+qKcbVJOzT7uJYREBYG97htipoDaEygPIztyCCezviwVx5I+nMzLTxf0NRVqOWIh6OZdmDd0SVYWo9c1oKw==", + "version": "2.71.1-boundaries.h72cca974932e1356", + "resolved": "file:vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz", + "integrity": "sha512-9y1b9YX9kv0pSlOcEndb1tQ0/2ydMq+z1octYCctOG5TERCrN85e6WnoR9Sq5XaqNo/YTj3VN9yvBh37bx1KBg==", "license": "MIT", "dependencies": { "@scure/bip39": "2.4.0", - "@zennotes/bridge-contract": "2.70.0-boundaries.h4bf855e896db3206", + "@zennotes/bridge-contract": "2.71.1-boundaries.h72cca974932e1356", "hash-wasm": "4.12.0", "lz-string": "^1.5.0" } @@ -5002,7 +5050,7 @@ "version": "0.28.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", - "devOptional": true, + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -5243,6 +5291,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5845,7 +5894,7 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -6015,6 +6064,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6035,6 +6085,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6055,6 +6106,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6075,6 +6127,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6095,6 +6148,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6115,6 +6169,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6135,6 +6190,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6155,6 +6211,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6175,6 +6232,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6195,6 +6253,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6215,6 +6274,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -7549,6 +7609,15 @@ "node": "20 || >=22" } }, + "node_modules/pele": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pele/-/pele-1.6.0.tgz", + "integrity": "sha512-VfAiVItsOGlGhvnBfphdT28VCG7mXMZxQNOwAGsCtxI2ztbUsT39MraEOYjsapLxVETkdUZscm0DdotYDQMLdw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -7672,9 +7741,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", "devOptional": true, "funding": [ { @@ -7692,9 +7761,9 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.19", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7834,6 +7903,25 @@ "dev": true, "license": "MIT" }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prettier": { "version": "3.9.6", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", @@ -8281,13 +8369,13 @@ "license": "Unlicense" }, "node_modules/rolldown": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.11.tgz", - "integrity": "sha512-qpSwIyz0jHQq5qXBTNxFmE6664rJ7O+4TvPFOiOaBSrz8IOHc1koKKSqTM2H6u1UG1+TveuC6vaDHKXFOvb1Kw==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.14.tgz", + "integrity": "sha512-eTBTTqMR6uHKLgcUqpJP8ntzDI6V4LYA8negAMBEI7gkgVvOdrx6VsvS2Ym+83KhOPdLCHWJu0w7UQFJZhHKNw==", "devOptional": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.151.0", + "@oxc-project/types": "=0.154.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -8297,21 +8385,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.11", - "@rolldown/binding-android-arm64": "1.2.11", - "@rolldown/binding-darwin-arm64": "1.2.11", - "@rolldown/binding-darwin-x64": "1.2.11", - "@rolldown/binding-freebsd-x64": "1.2.11", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.11", - "@rolldown/binding-linux-arm64-gnu": "1.2.11", - "@rolldown/binding-linux-arm64-musl": "1.2.11", - "@rolldown/binding-linux-ppc64-gnu": "1.2.11", - "@rolldown/binding-linux-s390x-gnu": "1.2.11", - "@rolldown/binding-linux-x64-gnu": "1.2.11", - "@rolldown/binding-linux-x64-musl": "1.2.11", - "@rolldown/binding-openharmony-arm64": "1.2.11", - "@rolldown/binding-win32-arm64-msvc": "1.2.11", - "@rolldown/binding-win32-x64-msvc": "1.2.11" + "@rolldown/binding-android-arm-eabi": "1.2.14", + "@rolldown/binding-android-arm64": "1.2.14", + "@rolldown/binding-darwin-arm64": "1.2.14", + "@rolldown/binding-darwin-x64": "1.2.14", + "@rolldown/binding-freebsd-x64": "1.2.14", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.14", + "@rolldown/binding-linux-arm64-gnu": "1.2.14", + "@rolldown/binding-linux-arm64-musl": "1.2.14", + "@rolldown/binding-linux-ppc64-gnu": "1.2.14", + "@rolldown/binding-linux-s390x-gnu": "1.2.14", + "@rolldown/binding-linux-x64-gnu": "1.2.14", + "@rolldown/binding-linux-x64-musl": "1.2.14", + "@rolldown/binding-openharmony-arm64": "1.2.14", + "@rolldown/binding-win32-arm64-msvc": "1.2.14", + "@rolldown/binding-win32-x64-msvc": "1.2.14" } }, "node_modules/roughjs": { @@ -8968,7 +9056,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/unified": { @@ -9252,16 +9340,16 @@ } }, "node_modules/vite": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", - "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz", + "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==", "devOptional": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", - "postcss": "^8.5.28", - "rolldown": "~1.2.11", + "postcss": "^8.5.29", + "rolldown": "~1.2.12", "tinyglobby": "^0.2.17" }, "bin": { diff --git a/package.json b/package.json index 17f2d68..195ad45 100644 --- a/package.json +++ b/package.json @@ -41,9 +41,13 @@ "@codemirror/search": "^6.7.2", "@codemirror/state": "^6.7.6", "@codemirror/view": "^6.43.14", + "@lezer/common": "^1.5.3", "@lezer/highlight": "^1.2.5", "@replit/codemirror-vim": "^6.4.0", "@xyflow/react": "^12.12.0", + "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz", + "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz", + "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz", "codemirror": "^6.0.1", "dompurify": "^3.4.16", "function-plot": "^1.25.3", @@ -68,25 +72,21 @@ "unist-util-visit": "^5.0.0", "vscode-oniguruma": "^2.0.1", "vscode-textmate": "^9.3.2", - "zustand": "^5.0.15", - "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz", - "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz", - "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz", - "@lezer/common": "^1.5.3" + "zustand": "^5.0.15" }, "devDependencies": { "@capacitor/cli": "^7.6.9", "@types/node": "^22.20.5", "@types/react": "^18.3.17", "@types/react-dom": "^18.3.5", - "@vitejs/plugin-react": "^6.1.1", + "@vitejs/plugin-react": "^6.1.2", "autoprefixer": "^10.6.0", + "esbuild": "^0.28.2", "harper.js": "^2.10.0", - "postcss": "^8.5.28", + "postcss": "^8.5.29", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", - "vite": "^8.3.2", - "esbuild": "^0.28.2" + "vite": "^8.3.4" }, "overrides": { "@excalidraw/excalidraw": { diff --git a/src/bridge/demo-tour.test.ts b/src/bridge/demo-tour.test.ts index 48d0406..a76951a 100644 --- a/src/bridge/demo-tour.test.ts +++ b/src/bridge/demo-tour.test.ts @@ -35,12 +35,22 @@ class MemoryFs { const slash = rest.indexOf('/') names.set(slash < 0 ? rest : rest.slice(0, slash), slash < 0 ? 'file' : 'directory') } + // Like Filesystem.readdir, an empty folder is listed too. + for (const key of this.directories) { + if (!key.startsWith(`${path}/`)) continue + const [name] = key.slice(path.length + 1).split('/') + if (name && !names.has(name)) names.set(name, 'directory') + } return [...names].map(([name, type]) => ({ name, type })) } } const currentPaths: string[] = DEMO_TOUR_NOTES.map((note: { path: string }) => note.path) const olderName = (path: string): string => path.replace(/^(inbox\/demo\/\d{2}b?) /, '$1 \u2014 ') +// Only a note named "NN Title" or "NNb Title" can have had the older name; +// one added since, like "05c D2 Diagrams", never did. +const renamedPaths = currentPaths.filter((path) => olderName(path) !== path) +const assetPaths = new Set(DEMO_TOUR_ASSETS.map((asset: { path: string }) => asset.path)) /** The user's own notes beside the tour. Each looks related, and none is the * tour's: a tour title behind a middle dot or an en dash instead of the old @@ -64,15 +74,16 @@ function vaultWith(paths: (path: string) => string) { } const tourNotesOnDisk = (fs: MemoryFs): string[] => - [...fs.files.keys()].filter((key) => key.startsWith('inbox/demo/') && !USER_NOTES.has(key)).sort() + [...fs.files.keys()].filter((key) => key.startsWith('inbox/demo/') && !USER_NOTES.has(key) && !assetPaths.has(key)).sort() function assertUserNotesKept(fs: MemoryFs): void { for (const [path, body] of USER_NOTES) assert.equal(fs.files.get(path), body, `${path} was touched`) } test('the older names are the tour notes behind the old separator', () => { - assert.equal(currentPaths.length, 17) - for (const path of currentPaths) assert.notEqual(olderName(path), path) + assert.equal(currentPaths.length, 22) + assert.ok(renamedPaths.includes('inbox/demo/00 Start Here.md')) + assert.ok(!renamedPaths.includes('inbox/demo/05c D2 Diagrams.md')) }) test('removing the tour deletes the notes it wrote under their older names', async () => { @@ -86,7 +97,7 @@ test('removing the tour deletes the notes it wrote under their older names', asy // The core unlinks every reported path, so the older names must be in it. assert.deepEqual( [...result.notePaths].sort(), - [...currentPaths, ...currentPaths.map(olderName)].sort() + [...currentPaths, ...renamedPaths.map(olderName)].sort() ) }) @@ -110,3 +121,18 @@ test('a tour under the current names is removed as before', async () => { assertUserNotesKept(fs) assert.deepEqual(result.notePaths, currentPaths) }) + +test('removing the tour takes the sample database folder with it', async () => { + // Core 2.71.0 ships a database, which is a folder of its own; the tour + // folder could not go while that folder stayed behind. + const fs = new MemoryFs() + const vault = new MobileVault('Fixture') + Object.assign(vault, { fs, ensureVaultLayout: async () => {} }) + + await vault.generateDemoTour() + assert.ok(fs.directories.has('inbox/demo/Reading List.base')) + await vault.removeDemoTour() + + assert.equal(fs.directories.has('inbox/demo/Reading List.base'), false) + assert.equal(fs.directories.has('inbox/demo'), false) +}) diff --git a/src/bridge/vault-fs.ts b/src/bridge/vault-fs.ts index 74726ac..7b9f551 100644 --- a/src/bridge/vault-fs.ts +++ b/src/bridge/vault-fs.ts @@ -38,7 +38,7 @@ import { bytesToBase64 } from './base64' import { isFormDirName, isDatabaseInternalPath } from '@zennotes/shared-domain/databases' import { emptyExcalidrawDocument } from '@zennotes/shared-domain/excalidraw' import { DEMO_TOUR_ASSETS, DEMO_TOUR_NOTES } from '@zennotes/shared-domain/demo-tour-data' -import { currentDemoTourPath, DEMO_TOUR_DIR } from '@zennotes/shared-domain/demo-tour' +import { currentDemoTourPath, DEMO_TOUR_DIR, demoTourNestedDirs } from '@zennotes/shared-domain/demo-tour' import { WELCOME_NOTE_PATH, WELCOME_NOTE_BODY } from './welcome-note' import { rewriteWikilinksForRename, @@ -1337,6 +1337,12 @@ export class MobileVault { for (const asset of DEMO_TOUR_ASSETS) { await this.fs.deleteFile(asset.path).catch(() => {}) } + // The sample database ships as a folder of its own (`Reading List.base`), + // which has to go before the tour folder can. rmdir is recursive, so only + // an empty one goes: record pages someone made in it stay. + for (const dir of demoTourNestedDirs(DEMO_TOUR_ASSETS.map((asset) => asset.path))) { + if ((await this.fs.readdir(dir)).length === 0) await this.fs.rmdir(dir).catch(() => {}) + } const remaining = await this.fs.readdir('inbox/demo') if (remaining.length === 0) await this.fs.rmdir('inbox/demo').catch(() => {}) emitVaultChange({ kind: 'unlink', path: 'inbox/demo', folder: 'inbox', scope: 'content' }) diff --git a/vendor/zennotes/manifest.json b/vendor/zennotes/manifest.json index e8a7516..7ce7d0d 100644 --- a/vendor/zennotes/manifest.json +++ b/vendor/zennotes/manifest.json @@ -1,12 +1,12 @@ { "name": "@zennotes/app-core", - "version": "2.70.0-core.hbed9639c9831ecf7", - "file": "zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz", - "sha256": "17c0fb58a8ff04864d72114649c4c8be8068900f86970235eec70e037f41fd8f", - "integrity": "sha512-8Hnh0Plk/7UJUZrkYo8YcTs6n70sVdYGB1++7IJ6pg1S/+s5T/0/3cgj7s6TFvZg7mB+52ehRCO1zbpmYAbHzg==", - "sourceCommit": "9e50b2450e3ac3eb38ca1a3465ec76777838fc35", + "version": "2.71.1-core.h77db37926ce01390", + "file": "zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz", + "sha256": "039080f1af8a99f9c21619303ad6ffa77610033b537d2739ce35db0fc81e454b", + "integrity": "sha512-W2S8q+nBtoxxVGNm2X+/UA3eji+YU+VB1/8fCQ0Z6BVuY6G9uUaPqkr0qqYvj2hI1RoIhVe/H0ViQJhz823NQw==", + "sourceCommit": "ae28816697a8bed4c402f95af25aa81216b809b9", "workingTreeDirty": false, - "sourceLockSha256": "5203a28e1f05a38bcfda615a823f82993f2ed66d449335b5da16ce6f441335cb", + "sourceLockSha256": "53a5012f6fff7b02cdef16837664f00824e48db6f49834b2a6cbfaae2807eb48", "toolchain": { "node": "v22.23.3", "typescript": "5.9.3", @@ -15,20 +15,20 @@ "dependencies": [ { "name": "@zennotes/bridge-contract", - "version": "2.70.0-boundaries.h4bf855e896db3206", - "file": "zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz", - "sha256": "8b2d991637806ec4b6fdfd495e3b7ec9f24f90d3650d3627be97063d6a7a577d", - "integrity": "sha512-LpdQeeyRtmRl94GzBtgZ3pzQfE1PNlbnnRfYnGuCAak0MgKqwBHj3zZF5JETJEBKGOSpqcfhJBWPaSceS7W0Yg==", - "sourceCommit": "9e50b2450e3ac3eb38ca1a3465ec76777838fc35", + "version": "2.71.1-boundaries.h72cca974932e1356", + "file": "zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz", + "sha256": "dfaaae6d4999ed826583addb3c6ecc6234433dc12957d438db13e30b6c265afa", + "integrity": "sha512-oMkkXDcpChKcusWBHl1tt/RUfo/dXfBTNhyhZRy8pqgJorLg9/mI410Xc+7H5Qwo76CiiqY6WA3H9kTV5MdWlw==", + "sourceCommit": "ae28816697a8bed4c402f95af25aa81216b809b9", "workingTreeDirty": false }, { "name": "@zennotes/shared-domain", - "version": "2.70.0-boundaries.h4bf855e896db3206", - "file": "zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz", - "sha256": "d9c2da2b7686f718b959690874a72fd5ad30e26c2480874de2d95eb8d1671cd1", - "integrity": "sha512-JVY+qKcbVJOzT7uJYREBYG97htipoDaEygPIztyCCezviwVx5I+nMzLTxf0NRVqOWIh6OZdmDd0SVYWo9c1oKw==", - "sourceCommit": "9e50b2450e3ac3eb38ca1a3465ec76777838fc35", + "version": "2.71.1-boundaries.h72cca974932e1356", + "file": "zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz", + "sha256": "69422b980aace9ad358c0580012970c13f969cc2ca0d73af91e8243e10131f33", + "integrity": "sha512-9y1b9YX9kv0pSlOcEndb1tQ0/2ydMq+z1octYCctOG5TERCrN85e6WnoR9Sq5XaqNo/YTj3VN9yvBh37bx1KBg==", + "sourceCommit": "ae28816697a8bed4c402f95af25aa81216b809b9", "workingTreeDirty": false } ] diff --git a/vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz b/vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz deleted file mode 100644 index 35bfb0e..0000000 Binary files a/vendor/zennotes/zennotes-app-core-2.70.0-core.hbed9639c9831ecf7.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz b/vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz new file mode 100644 index 0000000..e3ae111 Binary files /dev/null and b/vendor/zennotes/zennotes-app-core-2.71.1-core.h77db37926ce01390.tgz differ diff --git a/vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz b/vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz deleted file mode 100644 index f5ef0fb..0000000 Binary files a/vendor/zennotes/zennotes-bridge-contract-2.70.0-boundaries.h4bf855e896db3206.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz b/vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz new file mode 100644 index 0000000..37fd7c3 Binary files /dev/null and b/vendor/zennotes/zennotes-bridge-contract-2.71.1-boundaries.h72cca974932e1356.tgz differ diff --git a/vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz b/vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz deleted file mode 100644 index d1d3519..0000000 Binary files a/vendor/zennotes/zennotes-shared-domain-2.70.0-boundaries.h4bf855e896db3206.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz b/vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz new file mode 100644 index 0000000..42b321a Binary files /dev/null and b/vendor/zennotes/zennotes-shared-domain-2.71.1-boundaries.h72cca974932e1356.tgz differ