From 1d84b7891bf2755cfb6d002a2f7add3f9c653f51 Mon Sep 17 00:00:00 2001 From: Christoffer Artmann Date: Wed, 29 Oct 2025 17:07:57 +0100 Subject: [PATCH 1/6] fix: Don't open the init notebook by default. --- package-lock.json | 162 +++++++------------ src/notebooks/deepnote/deepnoteSerializer.ts | 57 +++++-- 2 files changed, 108 insertions(+), 111 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01f09aecf3..852dcc923e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-deepnote", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-deepnote", - "version": "0.1.0", + "version": "0.2.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -222,7 +222,7 @@ "util": "^0.12.4" }, "engines": { - "vscode": "^1.103.0" + "vscode": "^1.95.0" }, "optionalDependencies": { "fsevents": "^2.3.2" @@ -458,7 +458,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", @@ -968,8 +967,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", @@ -1109,16 +1107,14 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -1316,8 +1312,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -2871,7 +2866,6 @@ "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -3032,7 +3026,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -4102,7 +4095,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.9.0", "@typescript-eslint/types": "6.9.0", @@ -4817,7 +4809,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4958,6 +4949,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -5630,7 +5622,6 @@ "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -6038,7 +6029,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -6102,7 +6092,6 @@ "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "devOptional": true, "hasInstallScript": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -6329,7 +6318,6 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, - "peer": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -6381,6 +6369,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6766,6 +6755,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -6774,7 +6764,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "peer": true }, "node_modules/colorette": { "version": "2.0.20", @@ -8273,7 +8264,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.0.tgz", "integrity": "sha512-fwujyMe1gj6rk6dYi9hMZm0c8Mz8NDMVl2LB4iaYh3+LIAThZC8RKFGXWG0IML2OxAit/ZFRgZhMkhQ3d/bobQ==", - "peer": true, "dependencies": { "semver": "^5.3.0" } @@ -8575,7 +8565,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "peer": true, "dependencies": { "iconv-lite": "^0.6.2" } @@ -8880,7 +8869,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8973,6 +8961,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "peer": true, "engines": { "node": ">=0.8.0" } @@ -9067,7 +9056,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -9256,7 +9244,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, - "peer": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -9380,7 +9367,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, - "peer": true, "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -9483,7 +9469,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, - "peer": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -9514,7 +9499,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -11199,6 +11183,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -14207,7 +14192,6 @@ "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -14941,7 +14925,6 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "peer": true, "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -16181,7 +16164,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -16261,7 +16243,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", "dev": true, - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16327,7 +16308,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -16498,7 +16478,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16526,7 +16505,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -18260,6 +18238,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -18670,7 +18649,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -18859,8 +18837,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tslint": { "version": "6.1.3", @@ -18868,6 +18845,7 @@ "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", @@ -18899,6 +18877,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -18908,6 +18887,7 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -18917,6 +18897,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "peer": true, "engines": { "node": ">=0.3.1" } @@ -18928,6 +18909,7 @@ "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18949,6 +18931,7 @@ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -18961,7 +18944,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/tsscmp": { "version": "1.0.6", @@ -18978,6 +18962,7 @@ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, + "peer": true, "dependencies": { "tslib": "^1.8.1" }, @@ -18989,7 +18974,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/tsx": { "version": "4.19.4", @@ -19210,7 +19196,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19448,7 +19433,6 @@ "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "devOptional": true, "hasInstallScript": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -19568,7 +19552,6 @@ "resolved": "https://registry.npmjs.org/vega/-/vega-5.33.0.tgz", "integrity": "sha512-jNAGa7TxLojOpMMMrKMXXBos4K6AaLJbCgGDOw1YEkLRjUkh12pcf65J2lMSdEHjcEK47XXjKiOUVZ8L+MniBA==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-crossfilter": "~4.1.3", "vega-dataflow": "~5.7.7", @@ -19796,7 +19779,6 @@ "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.23.0.tgz", "integrity": "sha512-l4J6+AWE3DIjvovEoHl2LdtCUkfm4zs8Xxx7INwZEAv+XVb6kR6vIN1gt3t2gN2gs/y4DYTs/RPoTeYAuEg6mA==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "json-stringify-pretty-compact": "~4.0.0", "tslib": "~2.8.1", @@ -20455,7 +20437,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "peer": true, "dependencies": { "async-limiter": "~1.0.0" } @@ -20612,7 +20593,6 @@ "version": "13.6.18", "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz", "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==", - "peer": true, "dependencies": { "lib0": "^0.2.86" }, @@ -20856,7 +20836,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, - "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", @@ -21258,8 +21237,7 @@ "version": "4.0.18", "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", - "dev": true, - "peer": true + "dev": true }, "@cspell/dict-dart": { "version": "2.3.1", @@ -21379,15 +21357,13 @@ "version": "4.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", - "dev": true, - "peer": true + "dev": true }, "@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", - "dev": true, - "peer": true + "dev": true }, "@cspell/dict-java": { "version": "5.0.12", @@ -21553,8 +21529,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", - "dev": true, - "peer": true + "dev": true }, "@cspell/dict-vue": { "version": "3.0.5", @@ -22640,7 +22615,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, - "peer": true, "requires": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -22765,8 +22739,7 @@ "@opentelemetry/api": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", - "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", - "peer": true + "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==" }, "@opentelemetry/core": { "version": "1.10.1", @@ -23598,7 +23571,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", "dev": true, - "peer": true, "requires": { "@typescript-eslint/scope-manager": "6.9.0", "@typescript-eslint/types": "6.9.0", @@ -24085,8 +24057,7 @@ "version": "8.9.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "peer": true + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -24187,6 +24158,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -24686,7 +24658,6 @@ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", "dev": true, - "peer": true, "requires": {} }, "bare-fs": { @@ -24995,7 +24966,6 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dev": true, - "peer": true, "requires": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -25035,7 +25005,6 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "devOptional": true, - "peer": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -25182,7 +25151,6 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, - "peer": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -25222,6 +25190,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -25482,6 +25451,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "requires": { "color-name": "1.1.3" } @@ -25490,7 +25460,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "peer": true }, "colorette": { "version": "2.0.20", @@ -26592,7 +26563,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.0.tgz", "integrity": "sha512-fwujyMe1gj6rk6dYi9hMZm0c8Mz8NDMVl2LB4iaYh3+LIAThZC8RKFGXWG0IML2OxAit/ZFRgZhMkhQ3d/bobQ==", - "peer": true, "requires": { "semver": "^5.3.0" } @@ -26850,7 +26820,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "peer": true, "requires": { "iconv-lite": "^0.6.2" } @@ -27100,7 +27069,6 @@ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", "dev": true, - "peer": true, "requires": { "@esbuild/aix-ppc64": "0.25.1", "@esbuild/android-arm": "0.25.1", @@ -27172,7 +27140,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "dev": true, + "peer": true }, "escodegen": { "version": "1.14.3", @@ -27239,7 +27208,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -27478,7 +27446,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, - "peer": true, "requires": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -27573,7 +27540,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, - "peer": true, "requires": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -27639,7 +27605,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, - "peer": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -27692,7 +27657,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, - "peer": true, "requires": {} }, "eslint-visitor-keys": { @@ -28800,7 +28764,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "dev": true, + "peer": true }, "has-property-descriptors": { "version": "1.0.2", @@ -30890,7 +30855,6 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz", "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", "dev": true, - "peer": true, "requires": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -31430,7 +31394,6 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "peer": true, "requires": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -32324,7 +32287,6 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, - "peer": true, "requires": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -32371,8 +32333,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true, - "peer": true + "dev": true }, "prettier-linter-helpers": { "version": "1.0.0", @@ -32417,7 +32378,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "peer": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -32560,7 +32520,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -32581,7 +32540,6 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "peer": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -33464,7 +33422,7 @@ "integrity": "sha512-DF7ePE5bwitJrRdJSNrV+qAnQsfds0GbRA02ywy6TQrQewkm9DSHGDUxJaoJk2WUMlyQ7Odrf2o1PCZM50BcSg==", "requires": { "jquery": ">=1.8.0", - "jquery-ui": "1.13.2" + "jquery-ui": ">=1.8.0" } }, "smol-toml": { @@ -33896,6 +33854,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "requires": { "has-flag": "^3.0.0" } @@ -34220,8 +34179,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "peer": true + "dev": true } } }, @@ -34358,14 +34316,14 @@ "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", @@ -34387,6 +34345,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "peer": true, "requires": { "sprintf-js": "~1.0.2" } @@ -34395,19 +34354,22 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true + "dev": true, + "peer": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "dev": true, + "peer": true }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -34422,6 +34384,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "peer": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -34431,7 +34394,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "peer": true } } }, @@ -34446,6 +34410,7 @@ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, + "peer": true, "requires": { "tslib": "^1.8.1" }, @@ -34454,7 +34419,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "peer": true } } }, @@ -34616,8 +34582,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "peer": true + "dev": true }, "unbox-primitive": { "version": "1.0.2", @@ -34804,7 +34769,6 @@ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "devOptional": true, - "peer": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -34904,7 +34868,6 @@ "version": "5.33.0", "resolved": "https://registry.npmjs.org/vega/-/vega-5.33.0.tgz", "integrity": "sha512-jNAGa7TxLojOpMMMrKMXXBos4K6AaLJbCgGDOw1YEkLRjUkh12pcf65J2lMSdEHjcEK47XXjKiOUVZ8L+MniBA==", - "peer": true, "requires": { "vega-crossfilter": "~4.1.3", "vega-dataflow": "~5.7.7", @@ -35106,7 +35069,6 @@ "version": "5.23.0", "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.23.0.tgz", "integrity": "sha512-l4J6+AWE3DIjvovEoHl2LdtCUkfm4zs8Xxx7INwZEAv+XVb6kR6vIN1gt3t2gN2gs/y4DYTs/RPoTeYAuEg6mA==", - "peer": true, "requires": { "json-stringify-pretty-compact": "~4.0.0", "tslib": "~2.8.1", @@ -35642,7 +35604,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "peer": true, "requires": { "async-limiter": "~1.0.0" } @@ -35748,7 +35709,6 @@ "version": "13.6.18", "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz", "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==", - "peer": true, "requires": { "lib0": "^0.2.86" } diff --git a/src/notebooks/deepnote/deepnoteSerializer.ts b/src/notebooks/deepnote/deepnoteSerializer.ts index 6cdd2209fd..dae22e27f5 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.ts @@ -5,7 +5,7 @@ import { l10n, workspace, type CancellationToken, type NotebookData, type Notebo import { logger } from '../../platform/logging'; import { IDeepnoteNotebookManager } from '../types'; import { DeepnoteDataConverter } from './deepnoteDataConverter'; -import type { DeepnoteProject } from '../../platform/deepnote/deepnoteTypes'; +import type { DeepnoteFile, DeepnoteProject } from '../../platform/deepnote/deepnoteTypes'; export { DeepnoteBlock, DeepnoteNotebook, DeepnoteOutput, DeepnoteFile } from '../../platform/deepnote/deepnoteTypes'; @@ -44,20 +44,24 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { try { const contentString = new TextDecoder('utf-8').decode(content); - const deepnoteProject = yaml.load(contentString) as DeepnoteProject; + const deepnoteFile = yaml.load(contentString) as DeepnoteFile; - if (!deepnoteProject.project?.notebooks) { + if (!deepnoteFile.project?.notebooks) { throw new Error('Invalid Deepnote file: no notebooks found'); } - const projectId = deepnoteProject.project.id; + const projectId = deepnoteFile.project.id; const notebookId = this.findCurrentNotebookId(projectId); logger.debug(`DeepnoteSerializer: Project ID: ${projectId}, Selected notebook ID: ${notebookId}`); + if (deepnoteFile.project.notebooks.length === 0) { + throw new Error('Deepnote project contains no notebooks.'); + } + const selectedNotebook = notebookId - ? deepnoteProject.project.notebooks.find((nb) => nb.id === notebookId) - : deepnoteProject.project.notebooks[0]; + ? deepnoteFile.project.notebooks.find((nb) => nb.id === notebookId) + : this.findDefaultNotebook(deepnoteFile); if (!selectedNotebook) { throw new Error(l10n.t('No notebook selected or found')); @@ -67,17 +71,17 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { logger.debug(`DeepnoteSerializer: Converted ${cells.length} cells from notebook blocks`); - this.notebookManager.storeOriginalProject(deepnoteProject.project.id, deepnoteProject, selectedNotebook.id); + this.notebookManager.storeOriginalProject(deepnoteFile.project.id, deepnoteFile, selectedNotebook.id); logger.debug(`DeepnoteSerializer: Stored project ${projectId} in notebook manager`); return { cells, metadata: { - deepnoteProjectId: deepnoteProject.project.id, - deepnoteProjectName: deepnoteProject.project.name, + deepnoteProjectId: deepnoteFile.project.id, + deepnoteProjectName: deepnoteFile.project.name, deepnoteNotebookId: selectedNotebook.id, deepnoteNotebookName: selectedNotebook.name, - deepnoteVersion: deepnoteProject.version, + deepnoteVersion: deepnoteFile.version, name: selectedNotebook.name, display_name: selectedNotebook.name } @@ -178,4 +182,37 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { return activeNotebook?.metadata?.deepnoteNotebookId; } + + /** + * Finds the default notebook to open when no selection is made. + * @param file + * @returns + */ + private findDefaultNotebook(file: DeepnoteFile) { + const sortedNotebooks = file.project.notebooks.slice().sort((a, b) => { + const nameA = a.name.toLowerCase(); + const nameB = b.name.toLowerCase(); + + // If there's an Init notebook, we don't want to open it by default unless it's the only one. + if (file.project.initNotebookId && a.id === file.project.initNotebookId) { + return 1; + } + + if (file.project.initNotebookId && b.id === file.project.initNotebookId) { + return -1; + } + + if (nameA < nameB) { + return -1; + } + + if (nameA > nameB) { + return 1; + } + + return 0; + }); + + return sortedNotebooks[0] ? sortedNotebooks[0] : file.project.notebooks[0]; + } } From 58dc0bd8b9935e692e90d992ef452e8b33377a6a Mon Sep 17 00:00:00 2001 From: Christoffer Artmann Date: Wed, 29 Oct 2025 17:15:56 +0100 Subject: [PATCH 2/6] Simplify return statement for sorted notebooks --- src/notebooks/deepnote/deepnoteSerializer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/notebooks/deepnote/deepnoteSerializer.ts b/src/notebooks/deepnote/deepnoteSerializer.ts index dae22e27f5..bd925fae40 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.ts @@ -213,6 +213,6 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { return 0; }); - return sortedNotebooks[0] ? sortedNotebooks[0] : file.project.notebooks[0]; + return sortedNotebooks[0]; } } From 8ea0e07d7778603fda18227d442e1d7d99e1f12a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 17:36:55 +0100 Subject: [PATCH 3/6] test: Add tests for default notebook selection logic (#134) * Initial plan * test: Add tests for default notebook selection logic Co-authored-by: Artmann <91954+Artmann@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Artmann <91954+Artmann@users.noreply.github.com> --- .../deepnote/deepnoteSerializer.unit.test.ts | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts index ade9d2280e..5dd03fb4c0 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts @@ -313,4 +313,174 @@ project: assert.instanceOf(testManager, DeepnoteNotebookManager); }); }); + + suite('default notebook selection', () => { + test('should not select Init notebook when other notebooks are available', async () => { + const yamlContent = ` +version: 1.0 +metadata: + createdAt: '2023-01-01T00:00:00Z' + modifiedAt: '2023-01-02T00:00:00Z' +project: + id: 'project-with-init' + name: 'Project with Init' + initNotebookId: 'init-notebook' + notebooks: + - id: 'init-notebook' + name: 'Init' + blocks: + - id: 'block-init' + content: 'print("init")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + - id: 'main-notebook' + name: 'Main' + blocks: + - id: 'block-main' + content: 'print("main")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + settings: {} +`; + + const content = new TextEncoder().encode(yamlContent); + const result = await serializer.deserializeNotebook(content, {} as any); + + // Should select the Main notebook, not the Init notebook + assert.strictEqual(result.metadata?.deepnoteNotebookId, 'main-notebook'); + assert.strictEqual(result.metadata?.deepnoteNotebookName, 'Main'); + }); + + test('should select Init notebook when it is the only notebook', async () => { + const yamlContent = ` +version: 1.0 +metadata: + createdAt: '2023-01-01T00:00:00Z' + modifiedAt: '2023-01-02T00:00:00Z' +project: + id: 'project-only-init' + name: 'Project with only Init' + initNotebookId: 'init-notebook' + notebooks: + - id: 'init-notebook' + name: 'Init' + blocks: + - id: 'block-init' + content: 'print("init")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + settings: {} +`; + + const content = new TextEncoder().encode(yamlContent); + const result = await serializer.deserializeNotebook(content, {} as any); + + // Should select the Init notebook since it's the only one + assert.strictEqual(result.metadata?.deepnoteNotebookId, 'init-notebook'); + assert.strictEqual(result.metadata?.deepnoteNotebookName, 'Init'); + }); + + test('should select alphabetically first notebook when no initNotebookId', async () => { + const yamlContent = ` +version: 1.0 +metadata: + createdAt: '2023-01-01T00:00:00Z' + modifiedAt: '2023-01-02T00:00:00Z' +project: + id: 'project-alphabetical' + name: 'Project Alphabetical' + notebooks: + - id: 'zebra-notebook' + name: 'Zebra Notebook' + blocks: + - id: 'block-z' + content: 'print("zebra")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + - id: 'alpha-notebook' + name: 'Alpha Notebook' + blocks: + - id: 'block-a' + content: 'print("alpha")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + - id: 'bravo-notebook' + name: 'Bravo Notebook' + blocks: + - id: 'block-b' + content: 'print("bravo")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + settings: {} +`; + + const content = new TextEncoder().encode(yamlContent); + const result = await serializer.deserializeNotebook(content, {} as any); + + // Should select the alphabetically first notebook + assert.strictEqual(result.metadata?.deepnoteNotebookId, 'alpha-notebook'); + assert.strictEqual(result.metadata?.deepnoteNotebookName, 'Alpha Notebook'); + }); + + test('should sort Init notebook last when multiple notebooks exist', async () => { + const yamlContent = ` +version: 1.0 +metadata: + createdAt: '2023-01-01T00:00:00Z' + modifiedAt: '2023-01-02T00:00:00Z' +project: + id: 'project-multiple' + name: 'Project with Multiple' + initNotebookId: 'init-notebook' + notebooks: + - id: 'charlie-notebook' + name: 'Charlie' + blocks: + - id: 'block-c' + content: 'print("charlie")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + - id: 'init-notebook' + name: 'Init' + blocks: + - id: 'block-init' + content: 'print("init")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + - id: 'alpha-notebook' + name: 'Alpha' + blocks: + - id: 'block-a' + content: 'print("alpha")' + sortingKey: 'a0' + type: 'code' + executionMode: 'block' + isModule: false + settings: {} +`; + + const content = new TextEncoder().encode(yamlContent); + const result = await serializer.deserializeNotebook(content, {} as any); + + // Should select Alpha, not Init even though "Init" comes before "Alpha" alphabetically when in upper case + assert.strictEqual(result.metadata?.deepnoteNotebookId, 'alpha-notebook'); + assert.strictEqual(result.metadata?.deepnoteNotebookName, 'Alpha'); + }); + }); }); From c911d2761dccc6cd1b29d7e92f97c988f18798d9 Mon Sep 17 00:00:00 2001 From: Christoffer Artmann Date: Wed, 29 Oct 2025 17:39:28 +0100 Subject: [PATCH 4/6] feadback --- src/notebooks/deepnote/deepnoteSerializer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/notebooks/deepnote/deepnoteSerializer.ts b/src/notebooks/deepnote/deepnoteSerializer.ts index bd925fae40..a0e71d5905 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.ts @@ -5,7 +5,7 @@ import { l10n, workspace, type CancellationToken, type NotebookData, type Notebo import { logger } from '../../platform/logging'; import { IDeepnoteNotebookManager } from '../types'; import { DeepnoteDataConverter } from './deepnoteDataConverter'; -import type { DeepnoteFile, DeepnoteProject } from '../../platform/deepnote/deepnoteTypes'; +import type { DeepnoteFile, DeepnoteNotebook } from '../../platform/deepnote/deepnoteTypes'; export { DeepnoteBlock, DeepnoteNotebook, DeepnoteOutput, DeepnoteFile } from '../../platform/deepnote/deepnoteTypes'; @@ -114,7 +114,7 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { throw new Error('Missing Deepnote project ID in notebook metadata'); } - const originalProject = this.notebookManager.getOriginalProject(projectId) as DeepnoteProject | undefined; + const originalProject = this.notebookManager.getOriginalProject(projectId) as DeepnoteFile | undefined; if (!originalProject) { throw new Error('Original Deepnote project not found. Cannot save changes.'); @@ -135,7 +135,7 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { throw new Error(`Notebook with ID ${notebookId} not found in project`); } - const updatedProject = JSON.parse(JSON.stringify(originalProject)) as DeepnoteProject; + const updatedProject = JSON.parse(JSON.stringify(originalProject)) as DeepnoteFile; const updatedBlocks = this.converter.convertCellsToBlocks(data.cells); @@ -188,7 +188,7 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { * @param file * @returns */ - private findDefaultNotebook(file: DeepnoteFile) { + private findDefaultNotebook(file: DeepnoteFile): DeepnoteNotebook | undefined { const sortedNotebooks = file.project.notebooks.slice().sort((a, b) => { const nameA = a.name.toLowerCase(); const nameB = b.name.toLowerCase(); From c873dffbffd39a53e03977d8e5e90e3ca01a202e Mon Sep 17 00:00:00 2001 From: Christoffer Artmann Date: Wed, 29 Oct 2025 18:08:40 +0100 Subject: [PATCH 5/6] pr feedback --- src/notebooks/deepnote/deepnoteSerializer.ts | 31 +- .../deepnote/deepnoteSerializer.unit.test.ts | 330 +++++++++++------- 2 files changed, 208 insertions(+), 153 deletions(-) diff --git a/src/notebooks/deepnote/deepnoteSerializer.ts b/src/notebooks/deepnote/deepnoteSerializer.ts index a0e71d5905..e191fd74bd 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.ts @@ -189,29 +189,18 @@ export class DeepnoteNotebookSerializer implements NotebookSerializer { * @returns */ private findDefaultNotebook(file: DeepnoteFile): DeepnoteNotebook | undefined { - const sortedNotebooks = file.project.notebooks.slice().sort((a, b) => { - const nameA = a.name.toLowerCase(); - const nameB = b.name.toLowerCase(); - - // If there's an Init notebook, we don't want to open it by default unless it's the only one. - if (file.project.initNotebookId && a.id === file.project.initNotebookId) { - return 1; - } - - if (file.project.initNotebookId && b.id === file.project.initNotebookId) { - return -1; - } - - if (nameA < nameB) { - return -1; - } + if (file.project.notebooks.length === 0) { + return undefined; + } - if (nameA > nameB) { - return 1; - } + const sortedNotebooks = file.project.notebooks.slice().sort((a, b) => a.name.localeCompare(b.name)); + const sortedNotebooksWithoutInit = file.project.initNotebookId + ? sortedNotebooks.filter((nb) => nb.id !== file.project.initNotebookId) + : sortedNotebooks; - return 0; - }); + if (sortedNotebooksWithoutInit.length > 0) { + return sortedNotebooksWithoutInit[0]; + } return sortedNotebooks[0]; } diff --git a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts index 5dd03fb4c0..430ae581a6 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts @@ -1,4 +1,5 @@ import { assert } from 'chai'; +import * as yaml from 'js-yaml'; import { DeepnoteNotebookSerializer } from './deepnoteSerializer'; import { DeepnoteNotebookManager } from './deepnoteNotebookManager'; @@ -59,6 +60,14 @@ suite('DeepnoteNotebookSerializer', () => { serializer = new DeepnoteNotebookSerializer(manager); }); + /** + * Helper function to convert a DeepnoteProject object with version to YAML format + */ + function projectToYaml(projectData: { version: string; metadata: any; project: any }): Uint8Array { + const yamlString = yaml.dump(projectData); + return new TextEncoder().encode(yamlString); + } + suite('deserializeNotebook', () => { test('should deserialize valid project with selected notebook', async () => { // Set up the manager to select the first notebook @@ -316,38 +325,51 @@ project: suite('default notebook selection', () => { test('should not select Init notebook when other notebooks are available', async () => { - const yamlContent = ` -version: 1.0 -metadata: - createdAt: '2023-01-01T00:00:00Z' - modifiedAt: '2023-01-02T00:00:00Z' -project: - id: 'project-with-init' - name: 'Project with Init' - initNotebookId: 'init-notebook' - notebooks: - - id: 'init-notebook' - name: 'Init' - blocks: - - id: 'block-init' - content: 'print("init")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - - id: 'main-notebook' - name: 'Main' - blocks: - - id: 'block-main' - content: 'print("main")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - settings: {} -`; + const projectData = { + version: '1.0', + metadata: { + createdAt: '2023-01-01T00:00:00Z', + modifiedAt: '2023-01-02T00:00:00Z' + }, + project: { + id: 'project-with-init', + name: 'Project with Init', + initNotebookId: 'init-notebook', + notebooks: [ + { + id: 'init-notebook', + name: 'Init', + blocks: [ + { + id: 'block-init', + content: 'print("init")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + }, + { + id: 'main-notebook', + name: 'Main', + blocks: [ + { + id: 'block-main', + content: 'print("main")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + } + ], + settings: {} + } + }; - const content = new TextEncoder().encode(yamlContent); + const content = projectToYaml(projectData); const result = await serializer.deserializeNotebook(content, {} as any); // Should select the Main notebook, not the Init notebook @@ -356,29 +378,37 @@ project: }); test('should select Init notebook when it is the only notebook', async () => { - const yamlContent = ` -version: 1.0 -metadata: - createdAt: '2023-01-01T00:00:00Z' - modifiedAt: '2023-01-02T00:00:00Z' -project: - id: 'project-only-init' - name: 'Project with only Init' - initNotebookId: 'init-notebook' - notebooks: - - id: 'init-notebook' - name: 'Init' - blocks: - - id: 'block-init' - content: 'print("init")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - settings: {} -`; + const projectData = { + version: '1.0', + metadata: { + createdAt: '2023-01-01T00:00:00Z', + modifiedAt: '2023-01-02T00:00:00Z' + }, + project: { + id: 'project-only-init', + name: 'Project with only Init', + initNotebookId: 'init-notebook', + notebooks: [ + { + id: 'init-notebook', + name: 'Init', + blocks: [ + { + id: 'block-init', + content: 'print("init")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + } + ], + settings: {} + } + }; - const content = new TextEncoder().encode(yamlContent); + const content = projectToYaml(projectData); const result = await serializer.deserializeNotebook(content, {} as any); // Should select the Init notebook since it's the only one @@ -387,46 +417,64 @@ project: }); test('should select alphabetically first notebook when no initNotebookId', async () => { - const yamlContent = ` -version: 1.0 -metadata: - createdAt: '2023-01-01T00:00:00Z' - modifiedAt: '2023-01-02T00:00:00Z' -project: - id: 'project-alphabetical' - name: 'Project Alphabetical' - notebooks: - - id: 'zebra-notebook' - name: 'Zebra Notebook' - blocks: - - id: 'block-z' - content: 'print("zebra")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - - id: 'alpha-notebook' - name: 'Alpha Notebook' - blocks: - - id: 'block-a' - content: 'print("alpha")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - - id: 'bravo-notebook' - name: 'Bravo Notebook' - blocks: - - id: 'block-b' - content: 'print("bravo")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - settings: {} -`; + const projectData = { + version: '1.0', + metadata: { + createdAt: '2023-01-01T00:00:00Z', + modifiedAt: '2023-01-02T00:00:00Z' + }, + project: { + id: 'project-alphabetical', + name: 'Project Alphabetical', + notebooks: [ + { + id: 'zebra-notebook', + name: 'Zebra Notebook', + blocks: [ + { + id: 'block-z', + content: 'print("zebra")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + }, + { + id: 'alpha-notebook', + name: 'Alpha Notebook', + blocks: [ + { + id: 'block-a', + content: 'print("alpha")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + }, + { + id: 'bravo-notebook', + name: 'Bravo Notebook', + blocks: [ + { + id: 'block-b', + content: 'print("bravo")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + } + ], + settings: {} + } + }; - const content = new TextEncoder().encode(yamlContent); + const content = projectToYaml(projectData); const result = await serializer.deserializeNotebook(content, {} as any); // Should select the alphabetically first notebook @@ -435,47 +483,65 @@ project: }); test('should sort Init notebook last when multiple notebooks exist', async () => { - const yamlContent = ` -version: 1.0 -metadata: - createdAt: '2023-01-01T00:00:00Z' - modifiedAt: '2023-01-02T00:00:00Z' -project: - id: 'project-multiple' - name: 'Project with Multiple' - initNotebookId: 'init-notebook' - notebooks: - - id: 'charlie-notebook' - name: 'Charlie' - blocks: - - id: 'block-c' - content: 'print("charlie")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - - id: 'init-notebook' - name: 'Init' - blocks: - - id: 'block-init' - content: 'print("init")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - - id: 'alpha-notebook' - name: 'Alpha' - blocks: - - id: 'block-a' - content: 'print("alpha")' - sortingKey: 'a0' - type: 'code' - executionMode: 'block' - isModule: false - settings: {} -`; + const projectData = { + version: '1.0', + metadata: { + createdAt: '2023-01-01T00:00:00Z', + modifiedAt: '2023-01-02T00:00:00Z' + }, + project: { + id: 'project-multiple', + name: 'Project with Multiple', + initNotebookId: 'init-notebook', + notebooks: [ + { + id: 'charlie-notebook', + name: 'Charlie', + blocks: [ + { + id: 'block-c', + content: 'print("charlie")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + }, + { + id: 'init-notebook', + name: 'Init', + blocks: [ + { + id: 'block-init', + content: 'print("init")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + }, + { + id: 'alpha-notebook', + name: 'Alpha', + blocks: [ + { + id: 'block-a', + content: 'print("alpha")', + sortingKey: 'a0', + type: 'code' + } + ], + executionMode: 'block', + isModule: false + } + ], + settings: {} + } + }; - const content = new TextEncoder().encode(yamlContent); + const content = projectToYaml(projectData); const result = await serializer.deserializeNotebook(content, {} as any); // Should select Alpha, not Init even though "Init" comes before "Alpha" alphabetically when in upper case From f902b6a8949da692e26acd376d117c333ed38dcf Mon Sep 17 00:00:00 2001 From: Christoffer Artmann Date: Wed, 29 Oct 2025 18:15:00 +0100 Subject: [PATCH 6/6] add types --- .../deepnote/deepnoteSerializer.unit.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts index 430ae581a6..46d05d7e81 100644 --- a/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts +++ b/src/notebooks/deepnote/deepnoteSerializer.unit.test.ts @@ -4,7 +4,7 @@ import * as yaml from 'js-yaml'; import { DeepnoteNotebookSerializer } from './deepnoteSerializer'; import { DeepnoteNotebookManager } from './deepnoteNotebookManager'; import { DeepnoteDataConverter } from './deepnoteDataConverter'; -import type { DeepnoteProject } from '../../platform/deepnote/deepnoteTypes'; +import type { DeepnoteFile, DeepnoteProject } from '../../platform/deepnote/deepnoteTypes'; suite('DeepnoteNotebookSerializer', () => { let serializer: DeepnoteNotebookSerializer; @@ -63,7 +63,7 @@ suite('DeepnoteNotebookSerializer', () => { /** * Helper function to convert a DeepnoteProject object with version to YAML format */ - function projectToYaml(projectData: { version: string; metadata: any; project: any }): Uint8Array { + function projectToYaml(projectData: DeepnoteFile): Uint8Array { const yamlString = yaml.dump(projectData); return new TextEncoder().encode(yamlString); } @@ -325,7 +325,7 @@ project: suite('default notebook selection', () => { test('should not select Init notebook when other notebooks are available', async () => { - const projectData = { + const projectData: DeepnoteFile = { version: '1.0', metadata: { createdAt: '2023-01-01T00:00:00Z', @@ -378,7 +378,7 @@ project: }); test('should select Init notebook when it is the only notebook', async () => { - const projectData = { + const projectData: DeepnoteFile = { version: '1.0', metadata: { createdAt: '2023-01-01T00:00:00Z', @@ -417,7 +417,7 @@ project: }); test('should select alphabetically first notebook when no initNotebookId', async () => { - const projectData = { + const projectData: DeepnoteFile = { version: '1.0', metadata: { createdAt: '2023-01-01T00:00:00Z', @@ -483,7 +483,7 @@ project: }); test('should sort Init notebook last when multiple notebooks exist', async () => { - const projectData = { + const projectData: DeepnoteFile = { version: '1.0', metadata: { createdAt: '2023-01-01T00:00:00Z',