From 836e1b6c8e2b25fbcc7efe7978e503db2a9bfbc5 Mon Sep 17 00:00:00 2001 From: joostdecock Date: Sat, 26 Apr 2025 15:29:25 +0200 Subject: [PATCH] [studio] fix: Various studio fixes --- package-lock.json | 880 ++++++++------------ package.json | 2 +- packages/studio/template/src/pages/index.js | 2 +- plugins/plugin-theme/about.json | 4 +- plugins/plugin-theme/package.json | 2 +- scripts/add-software.mjs | 142 +--- scripts/fs.mjs | 23 +- scripts/reconfigure.mjs | 5 +- sites/studio/add.mdx | 11 +- sites/studio/package.json | 23 +- 10 files changed, 450 insertions(+), 644 deletions(-) diff --git a/package-lock.json b/package-lock.json index b097ceece3c..673adb21f7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@babel/preset-react": "^7.22.15", "c8": "^10.1.2", "eslint-config-next": "^14.0.1", - "glob": "^10.3.10", + "glob": "^11.0.1", "rehype-format": "^5.0.0", "rehype-stringify": "^10.0.1", "tlds": "^1.255.0" @@ -27357,10 +27357,6 @@ "resolved": "designs/umbra", "link": true }, - "node_modules/@freesewing/undefined": { - "resolved": "plugins/plugin-theme", - "link": true - }, "node_modules/@freesewing/utils": { "resolved": "packages/utils", "link": true @@ -29207,6 +29203,59 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", @@ -29276,6 +29325,59 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/package-json/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -34809,6 +34911,43 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/cacache/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -34816,6 +34955,22 @@ "dev": true, "license": "ISC" }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -42436,21 +42591,24 @@ "license": "ISC" }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -42473,16 +42631,41 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -45140,18 +45323,18 @@ } }, "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jake": { @@ -51303,6 +51486,27 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -51313,6 +51517,38 @@ "node": ">=16" } }, + "node_modules/node-gyp/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-gyp/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -57796,6 +58032,59 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rtlcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", @@ -60068,6 +60357,41 @@ "node": ">=18" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/test-exclude/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -63864,29 +64188,6 @@ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, - "packages/studio/node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/studio/node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -63899,21 +64200,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/studio/node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/studio/node_modules/log-symbols": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", @@ -63942,30 +64228,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/studio/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "packages/studio/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/studio/node_modules/onetime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", @@ -64004,22 +64266,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/studio/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/studio/node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -68782,10 +69028,9 @@ } }, "plugins/plugin-theme": { - "name": "@freesewing/undefined", + "name": "@freesewing/plugin-theme", "version": "4.0.0", "license": "MIT", - "peer": true, "devDependencies": { "chai": "5.1.1", "mocha": "10.4.0" @@ -70526,98 +70771,24 @@ "node": ">=20.0" } }, - "sites/org/node_modules/glob": { - "version": "11.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/org/node_modules/jackspeak": { - "version": "4.0.2", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/org/node_modules/lru-cache": { - "version": "11.0.2", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "sites/org/node_modules/minimatch": { - "version": "10.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/org/node_modules/path-scurry": { - "version": "2.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "sites/studio": { "version": "0.0.0", "dependencies": { "@docusaurus/core": "^3.7.0", "@docusaurus/faster": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", - "@freesewing/collection": "latest", - "@freesewing/config": "latest", - "@freesewing/core": "latest", - "@freesewing/i18n": "latest", - "@freesewing/plugin-i18n": "latest", - "@freesewing/plugin-theme": "latest", - "@freesewing/plugin-timing": "latest", - "@freesewing/react": "latest", - "@freesewing/snapseries": "latest", - "@freesewing/utils": "latest", + "@freesewing/collection": "file:../../packages/collection", + "@freesewing/config": "file:../../packages/config", + "@freesewing/core": "file:../../packages/core", + "@freesewing/i18n": "file:../../packages/i18n", + "@freesewing/plugin-i18n": "file:../../plugins/plugin-i18n", + "@freesewing/plugin-theme": "file:../../plugins/plugin-theme", + "@freesewing/plugin-timing": "file:../../plugins/plugin-timing", + "@freesewing/react": "file:../../packages/react", + "@freesewing/snapseries": "file:../../packages/snapseries", + "@freesewing/utils": "file:../../packages/utils", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", - "lodash": "^4.17.21", "postcss": "^8.4.47", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", @@ -70632,7 +70803,7 @@ "@tailwindcss/postcss": "^4.1.3", "autoprefixer": "^10.4.20", "daisyui": "^5.0.19", - "glob": "^11.0.0", + "glob": "^11.0.1", "gray-matter": "^4.0.3", "postcss": "^8.4.47", "tailwindcss": "^4.1.3", @@ -70641,343 +70812,6 @@ "engines": { "node": ">=20.0" } - }, - "sites/studio/node_modules/@freesewing/collection": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/collection/-/collection-4.0.0.tgz", - "integrity": "sha512-ozBv1MdcZ3VyJiBxsevK/dIOHTa+Di7m2qfvYPdCa1Io+zMT6RfCdS46gYOp79M9Hf1lLEsKaXV6IPa5P6eCIQ==", - "license": "MIT", - "dependencies": { - "@freesewing/aaron": "4.0.0", - "@freesewing/albert": "4.0.0", - "@freesewing/bee": "4.0.0", - "@freesewing/bella": "4.0.0", - "@freesewing/benjamin": "4.0.0", - "@freesewing/bent": "4.0.0", - "@freesewing/bibi": "4.0.0", - "@freesewing/bob": "4.0.0", - "@freesewing/bonny": "4.0.0", - "@freesewing/breanna": "4.0.0", - "@freesewing/brian": "4.0.0", - "@freesewing/bruce": "4.0.0", - "@freesewing/carlita": "4.0.0", - "@freesewing/carlton": "4.0.0", - "@freesewing/cathrin": "4.0.0", - "@freesewing/charlie": "4.0.0", - "@freesewing/core": "4.0.0", - "@freesewing/core-plugins": "4.0.0", - "@freesewing/cornelius": "4.0.0", - "@freesewing/diana": "4.0.0", - "@freesewing/florence": "4.0.0", - "@freesewing/florent": "4.0.0", - "@freesewing/gozer": "4.0.0", - "@freesewing/hi": "4.0.0", - "@freesewing/holmes": "4.0.0", - "@freesewing/hortensia": "4.0.0", - "@freesewing/huey": "4.0.0", - "@freesewing/hugo": "4.0.0", - "@freesewing/jaeger": "4.0.0", - "@freesewing/jane": "4.0.0", - "@freesewing/lily": "4.0.0", - "@freesewing/lucy": "4.0.0", - "@freesewing/lumina": "4.0.0", - "@freesewing/lumira": "4.0.0", - "@freesewing/lunetius": "4.0.0", - "@freesewing/noble": "4.0.0", - "@freesewing/octoplushy": "4.0.0", - "@freesewing/onyx": "4.0.0", - "@freesewing/opal": "4.0.0", - "@freesewing/otis": "4.0.0", - "@freesewing/paco": "4.0.0", - "@freesewing/penelope": "4.0.0", - "@freesewing/plugin-bust": "4.0.0", - "@freesewing/plugin-flip": "4.0.0", - "@freesewing/sandy": "4.0.0", - "@freesewing/shelly": "4.0.0", - "@freesewing/shin": "4.0.0", - "@freesewing/simon": "4.0.0", - "@freesewing/simone": "4.0.0", - "@freesewing/skully": "4.0.0", - "@freesewing/snapseries": "4.0.0", - "@freesewing/sven": "4.0.0", - "@freesewing/tamiko": "4.0.0", - "@freesewing/teagan": "4.0.0", - "@freesewing/tiberius": "4.0.0", - "@freesewing/titan": "4.0.0", - "@freesewing/trayvon": "4.0.0", - "@freesewing/tristan": "4.0.0", - "@freesewing/uma": "4.0.0", - "@freesewing/umbra": "4.0.0", - "@freesewing/wahid": "4.0.0", - "@freesewing/walburga": "4.0.0", - "@freesewing/waralee": "4.0.0", - "@freesewing/yuri": "4.0.0" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/@freesewing/config": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/config/-/config-4.0.0.tgz", - "integrity": "sha512-VNGs+22BsNyY4grbbca2ml/prMweqNmmO2SO8uwY+8GLPnvVs+0pRgSEciWkGmTTprWsFtLHIz8jCf2u+spZ7g==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/@freesewing/core": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/core/-/core-4.0.0.tgz", - "integrity": "sha512-o1CTkyND0ytU7wj9h29G/AuG9pkxZlQ+7hbZx51u9l1UA0Qbvfm627+VEMThdDQalrNam4WN+9mW6OdTZyXr8Q==", - "license": "MIT", - "dependencies": { - "@freesewing/core-plugins": "4.0.0", - "bezier-js": "6.1.4", - "hooks": "0.3.2", - "lodash.clonedeep": "^4.5.0", - "lodash.get": "4.4.2", - "lodash.set": "4.3.2", - "lodash.unset": "4.5.2" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/@freesewing/i18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/i18n/-/i18n-4.0.0.tgz", - "integrity": "sha512-jd0LLuSiiGfM5P1EQKW/5tS/nFMpAbXgg22OP9lYTDiHNdPdZ3QFoDGGb1p8dnbI3RBJfkn+ciLTt7R45YOPBg==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/@freesewing/plugin-i18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/plugin-i18n/-/plugin-i18n-4.0.0.tgz", - "integrity": "sha512-v4DoroyWpkoJNCccQ2saepphySKv91On31eWCW9aj8E3Ps8smcwUd+4kOz+MXZkUpPXOOD7oFhdYhrT4hlGcFg==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - }, - "peerDependencies": { - "@freesewing/core": "4.0.0" - } - }, - "sites/studio/node_modules/@freesewing/plugin-theme": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/plugin-theme/-/plugin-theme-4.0.0.tgz", - "integrity": "sha512-USB0sKJphpoicXvFDb/I5K5m8KSSOb8l0wZGbb+KnKkj9zrUSEyJB4EHtGgv1fstelNyjfA8naq0Nq5qgHPJFA==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - }, - "peerDependencies": { - "@freesewing/core": "4.0.0" - } - }, - "sites/studio/node_modules/@freesewing/plugin-timing": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/plugin-timing/-/plugin-timing-4.0.0.tgz", - "integrity": "sha512-m4n3Ley+aoScI8vW1uVW/YBjeTZmWCyuixhFC88LU2TjUH/Lm11P6gCTWdbE9IBpA2Zkn65arpRLZrI08GQlnw==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - }, - "peerDependencies": { - "@freesewing/core": "4.0.0" - } - }, - "sites/studio/node_modules/@freesewing/react": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/react/-/react-4.0.0.tgz", - "integrity": "sha512-h53FTzj11T9JewkcLm+4B+lN85JqdFMv3HEvbe7l2+C17KYSFQEky9P8Xv613Gq/WzNjzfpOWbr7YIrGdSExSA==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-yaml": "^6.1.2", - "@uiw/react-codemirror": "^4.23.8", - "d3-drag": "3.0.0", - "d3-selection": "3.0.0", - "diff": "^7.0.0", - "echarts": "^5.6.0", - "echarts-for-react": "^3.0.2", - "file-saver": "^2.0.5", - "highlight.js": "^11.11.1", - "html-react-parser": "^5.2.2", - "jotai": "^2.12.1", - "jotai-location": "^0.5.5", - "luxon": "^3.5.0", - "mustache": "^4.2.0", - "pdfkit": "^0.16.0", - "react-diff-viewer-continued": "^4.0.5", - "react-dropzone": "^14.3.5", - "react-zoom-pan-pinch": "^3.7.0", - "svg-to-pdfkit": "^0.1.8", - "use-local-storage-state": "^19.5.0", - "web-worker": "^1.5.0", - "yaml": "^2.7.0" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - }, - "peerDependencies": { - "react": "^19.0.0" - } - }, - "sites/studio/node_modules/@freesewing/snapseries": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/snapseries/-/snapseries-4.0.0.tgz", - "integrity": "sha512-Fqh+Mz22xccDZGqQMpYBgKHnARSe/T1s4JCXUhKPvk0fgMg+5jNFfFUj+qTo9gaJ6qDFZYv1Wts/Smqr5nYIpQ==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/@freesewing/utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@freesewing/utils/-/utils-4.0.0.tgz", - "integrity": "sha512-CUqdmCWWoMj/UkONtKAq3rtFbWt8jFZS/DhqjmryJ1m8I4UjPpzXNEekr9gSiiP2RV/AbRHMAFS4sFBPmxia0w==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "tlds": "^1.255.0" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "individual", - "url": "https://freesewing.org/patrons/join" - } - }, - "sites/studio/node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "sites/studio/node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/studio/node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/studio/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "sites/studio/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "sites/studio/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } } } } diff --git a/package.json b/package.json index af27581b767..beace7969ce 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "@babel/preset-react": "^7.22.15", "c8": "^10.1.2", "eslint-config-next": "^14.0.1", - "glob": "^10.3.10", + "glob": "^11.0.1", "rehype-format": "^5.0.0", "rehype-stringify": "^10.0.1", "tlds": "^1.255.0" diff --git a/packages/studio/template/src/pages/index.js b/packages/studio/template/src/pages/index.js index 115b9cf3416..4dca13b9da2 100644 --- a/packages/studio/template/src/pages/index.js +++ b/packages/studio/template/src/pages/index.js @@ -36,7 +36,7 @@ export default function Home() { -
+
} diff --git a/plugins/plugin-theme/about.json b/plugins/plugin-theme/about.json index 62ca6f50b65..44a573ca13d 100644 --- a/plugins/plugin-theme/about.json +++ b/plugins/plugin-theme/about.json @@ -1,4 +1,4 @@ { - "version": "4.0.0", - "name": "plugin-theme" + "id": "plugin-theme", + "version": "4.0.0" } \ No newline at end of file diff --git a/plugins/plugin-theme/package.json b/plugins/plugin-theme/package.json index 7d5769a8f81..00020c26593 100644 --- a/plugins/plugin-theme/package.json +++ b/plugins/plugin-theme/package.json @@ -1,5 +1,5 @@ { - "name": "@freesewing/undefined", + "name": "@freesewing/plugin-theme", "version": "4.0.0", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", diff --git a/scripts/add-software.mjs b/scripts/add-software.mjs index 6c14e98559b..039e8c90b4f 100644 --- a/scripts/add-software.mjs +++ b/scripts/add-software.mjs @@ -1,12 +1,22 @@ -import fs from 'fs' -import path from 'path' +import { + fs, + cp, + path, + globDir, + copyFolderRecursively, + rm, + root, + templateOut, + writeJsonFile, +} from './fs.mjs' import prompts from 'prompts' import chalk from 'chalk' import { banner } from './banner.mjs' -import mustache from 'mustache' import { execSync } from 'child_process' import languages from '../config/languages.json' assert { type: 'json' } import { getDesigns, getPlugins } from './software.mjs' +import conf from '../lerna.json' assert { type: 'json' } +const { version } = conf const designs = await getDesigns() const plugins = await getPlugins() @@ -19,7 +29,6 @@ export const getInput = async () => { let template = false let name = false let finalName = false - const cwd = process.cwd() // while we're not finalized on a name while (finalName === false) { @@ -58,7 +67,7 @@ export const getInput = async () => { ).name // check whether a folder with that name already exists - const dest = path.join(cwd, type + 's', type === 'plugin' ? `plugin-${name}` : name) + const dest = path.join(root, type + 's', type === 'plugin' ? `plugin-${name}` : name) try { const dir = await opendir(dest) dir.close() @@ -115,8 +124,9 @@ async function addDesign({ name, template }) { console.log(valid) process.exit() } - createDesign(name, template) + await createDesign(name, template) execSync('npm run reconfigure') + execSync('npm install') console.log(` 👉 We've created your design skeleton at ${chalk.green('designs/' + name)} @@ -179,58 +189,39 @@ function validatePluginName(name) { else return ' 🙈 Please use only [a-z], no spaces, no capitals, no nothing 🤷' } -function createDesign(name) { - const template = ['config', 'templates', 'design'] - const design = ['designs', name] - const description = 'A FreeSewing pattern that needs a description' - const capitalized_name = name.charAt(0).toUpperCase() + name.slice(1) +async function createDesign(name, template) { + const src = ['packages', 'studio', 'template', 'designs', `.${template}`] + const target = ['designs', name] + const Name = name.charAt(0).toUpperCase() + name.slice(1) - // Add to designs config file - designs[name] = { - code: 'Coder name', - description: description, - design: 'Designer name', - difficulty: 1, - lab: true, - org: true, - tags: ['tagname'], - techniques: ['techname'], + // Copy template folder + await copyFolderRecursively(src, target) + + // Template various mustache files + const files = (await globDir(target, '**/*.mustache')) + .map((file) => file.split(`designs${path.sep}${name}${path.sep}`).pop().split(path.sep)) + .map((found) => ({ + from: [...target, ...found], + to: [...target, ...found.slice(0, -1), found.slice(-1).pop().split('.mustache')[0]], + })) + for (const file of files) { + await templateOut(file.from, file.to, { name, Name }) + await rm(file.from) } - //write(['config', 'software', 'designs.json'], JSON.stringify(orderDesigns(designs), null, 2)) - // Create folders - mkdir([...design, 'src']) - mkdir([...design, 'i18n']) - mkdir([...design, 'tests']) - - // Create package.json - templateOut([...template, 'package.json.mustache'], [...design, 'package.json'], { - name, - description, + // Create about.json + await writeJsonFile([...target, 'about.json'], { + id: name, + code: 'Your name here', + design: 'Your name here', + description: 'A FreeSewing pattern that needs a description', + name: `${Name} Something`, + difficulty: 2, + tags: [], + techniques: [], + version, + pkg: `@freesewing/${name}`, }) - - // Create src/index.mjs - templateOut([...template, 'src', 'index.mjs.mustache'], [...design, 'src', 'index.mjs'], { - capitalized_name, - }) - - // Copy i18n/index.mjs - cp([...template, 'i18n', 'index.mjs'], [...design, 'i18n', 'index.mjs']) - - // Create i18n translation files - for (const language of languages) - templateOut([...template, 'i18n', 'en.json'], [...design, 'i18n', `${language}.json`], { - title: capitalized_name, - description, - }) - - // Create tests file - cp([...template, 'tests', 'shared.test.mjs'], [...design, 'tests', 'shared.test.mjs']) - - // Copy source - for (const file of ['box.mjs']) { - cp([...template, 'src', file], [...design, 'src', file]) - } } function createPlugin(name) { @@ -260,49 +251,6 @@ function createPlugin(name) { }) } -function templateOut(from, to, data) { - try { - fs.writeFileSync( - path.join(process.cwd(), ...to), - mustache.render(fs.readFileSync(path.join(process.cwd(), ...from), 'utf-8'), data) - ) - } catch (err) { - console.log(err) - } - - return true -} - -function write(to, data) { - try { - fs.writeFileSync(path.join(process.cwd(), ...to), data) - } catch (err) { - console.log(err) - } - - return true -} - -function mkdir(dir) { - try { - fs.mkdirSync(path.join(process.cwd(), ...dir), { recursive: true }) - } catch (err) { - console.log(err) - } - - return true -} - -function cp(from, to) { - try { - fs.copyFileSync(path.join(process.cwd(), ...from), path.join(process.cwd(), ...to)) - } catch (err) { - console.log(err) - } - - return true -} - function orderDesigns(designs) { // Ensure designs are listed alphabetically const newDesigns = {} diff --git a/scripts/fs.mjs b/scripts/fs.mjs index 4e3a1f7a7c3..7f3530f4212 100644 --- a/scripts/fs.mjs +++ b/scripts/fs.mjs @@ -4,11 +4,12 @@ import fs from 'fs' import path from 'path' import { glob } from 'glob' +import mustache from 'mustache' /** * Re-export these */ -export { fs, path, glob } +export { fs, path, glob, mustache } /** * The monorepo root folder @@ -154,6 +155,26 @@ export async function readJsonFile( return content } +/** + * Templates out a file with mustache + * + * @param {array} from - The source template file + * @param {array} to - The destination file + * @param {object] data - Substitutions for the template + */ +export async function templateOut(from, to, data) { + if (!Array.isArray(from)) from = [from] + if (!Array.isArray(to)) to = [to] + try { + const src = await readFile(from) + await writeFile(to, mustache.render(src, data)) + } catch (err) { + console.log(err) + } + + return true +} + /** * Writes a file to disk * diff --git a/scripts/reconfigure.mjs b/scripts/reconfigure.mjs index e026a6f06d3..d756c3315cc 100644 --- a/scripts/reconfigure.mjs +++ b/scripts/reconfigure.mjs @@ -1,5 +1,3 @@ -//import path from 'path' -//import fs from 'fs' import { fs, cp, @@ -12,7 +10,6 @@ import { readJsonFile, writeJsonFile, } from './fs.mjs' -//import { glob } from 'glob' import yaml from 'js-yaml' import chalk from 'chalk' import mustache from 'mustache' @@ -192,6 +189,8 @@ await writeFile( }) ) +// Step 7: Remove sites/studio/node_modules + // All done log.write(chalk.green(' All done\n')) process.exit() diff --git a/sites/studio/add.mdx b/sites/studio/add.mdx index 9eea8223f4a..25d08a9b003 100644 --- a/sites/studio/add.mdx +++ b/sites/studio/add.mdx @@ -6,8 +6,13 @@ To add a new design to the FreeSewing monorepo, run the following command in the root folder of the monorepo: ``` -npm run add design +npm run add ``` -It will prompt you for your design name, and as whether you want to create a -design from scratch, or start from a block. +**TL;DR: Just follow the prompts** + +This command will prompt you for a choice between adding a new plugin or a new design. +Choose **Add a new FreeSewing Design**. + +Next, it will ask you for a design name, and whether you +want to create a design from scratch, or start from a block. diff --git a/sites/studio/package.json b/sites/studio/package.json index 2f870a9a5ed..246950b5a89 100644 --- a/sites/studio/package.json +++ b/sites/studio/package.json @@ -19,18 +19,17 @@ "@docusaurus/faster": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", "@mdx-js/react": "^3.0.0", - "@freesewing/collection": "latest", - "@freesewing/config": "latest", - "@freesewing/core": "latest", - "@freesewing/i18n": "latest", - "@freesewing/react": "latest", - "@freesewing/snapseries": "latest", - "@freesewing/utils": "latest", - "@freesewing/plugin-i18n": "latest", - "@freesewing/plugin-theme": "latest", - "@freesewing/plugin-timing": "latest", + "@freesewing/collection": "file:../../packages/collection", + "@freesewing/config": "file:../../packages/config", + "@freesewing/core": "file:../../packages/core", + "@freesewing/i18n": "file:../../packages/i18n", + "@freesewing/react": "file:../../packages/react", + "@freesewing/snapseries": "file:../../packages/snapseries", + "@freesewing/utils": "file:../../packages/utils", + "@freesewing/plugin-i18n": "file:../../plugins/plugin-i18n", + "@freesewing/plugin-theme": "file:../../plugins/plugin-theme", + "@freesewing/plugin-timing": "file:../../plugins/plugin-timing", "clsx": "^2.0.0", - "lodash": "^4.17.21", "postcss": "^8.4.47", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", @@ -45,7 +44,7 @@ "@tailwindcss/postcss": "^4.1.3", "autoprefixer": "^10.4.20", "daisyui": "^5.0.19", - "glob": "^11.0.0", + "glob": "^11.0.1", "gray-matter": "^4.0.3", "postcss": "^8.4.47", "tailwindcss": "^4.1.3",