diff --git a/.changeset/changelog-github-custom.cjs b/.changeset/changelog-github-custom.cjs new file mode 100644 index 00000000000..c2fbf4eb4d4 --- /dev/null +++ b/.changeset/changelog-github-custom.cjs @@ -0,0 +1,378 @@ +'use strict'; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; +var __generator = + (this && this.__generator) || + function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [], + }, + f, + y, + t, + g; + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.'); + while ((g && ((g = 0), op[0] && (_ = 0)), _)) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y['return'] + : op[0] + ? y['throw'] || ((t = y['return']) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if ( + !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; +var __spreadArray = + (this && this.__spreadArray) || + function (to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; +Object.defineProperty(exports, '__esModule', { value: true }); +// @ts-ignore +var get_github_info_1 = require('@changesets/get-github-info'); +var dotenv_1 = require('dotenv'); +(0, dotenv_1.config)(); +var changelogFunctions = { + getDependencyReleaseLine: function (changesets, dependenciesUpdated, options) { + return __awaiter(void 0, void 0, void 0, function () { + var changesetLink, _a, updatedDepenenciesList; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + if (dependenciesUpdated.length === 0) return [2 /*return*/, '']; + _a = '- Updated dependencies ['.concat; + return [ + 4 /*yield*/, + Promise.all( + changesets.map(function (cs) { + return __awaiter(void 0, void 0, void 0, function () { + var links; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!cs.commit) return [3 /*break*/, 2]; + return [ + 4 /*yield*/, + (0, get_github_info_1.getInfo)({ + repo: options.repo, + commit: cs.commit, + }), + ]; + case 1: + links = _a.sent().links; + return [2 /*return*/, links.commit]; + case 2: + return [2 /*return*/]; + } + }); + }); + }) + ), + ]; + case 1: + changesetLink = _a.apply('- Updated dependencies [', [ + _b + .sent() + .filter(function (_) { + return _; + }) + .join(', '), + ']:', + ]); + updatedDepenenciesList = dependenciesUpdated.map(function (dependency) { + return ' - '.concat(dependency.name, '@').concat(dependency.newVersion); + }); + return [ + 2 /*return*/, + __spreadArray([changesetLink], updatedDepenenciesList, true).join('\n'), + ]; + } + }); + }); + }, + getReleaseLine: function (changeset, type, options) { + return __awaiter(void 0, void 0, void 0, function () { + var prFromSummary, + commitFromSummary, + usersFromSummary, + replacedChangelog, + linkifyIssueHints, + _a, + firstLine, + futureLines, + links, + users, + suffix, + emojiFirstline; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!options || !options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + usersFromSummary = []; + replacedChangelog = changeset.summary + .replace(/^\s*(?:pr|pull|pull\s+request):\s*#?(\d+)/im, function (_, pr) { + var num = Number(pr); + if (!isNaN(num)) prFromSummary = num; + return ''; + }) + .replace(/^\s*commit:\s*([^\s]+)/im, function (_, commit) { + commitFromSummary = commit; + return ''; + }) + .replace(/^\s*(?:author|user):\s*@?([^\s]+)/gim, function (_, user) { + usersFromSummary.push(user); + return ''; + }) + .trim(); + linkifyIssueHints = function (line) { + return line.replace( + /(?<=\( ?(?:fix|fixes|see) )(#\d+)(?= ?\))/g, + function (issueHash) { + return '[' + .concat(issueHash, '](https://github.com/') + .concat(options.repo, '/issues/') + .concat(issueHash.substring(1), ')'); + } + ); + }; + (_a = replacedChangelog.split('\n').map(function (l) { + return linkifyIssueHints(l.trimEnd()); + })), + (firstLine = _a[0]), + (futureLines = _a.slice(1)); + return [ + 4 /*yield*/, + (function () { + return __awaiter(void 0, void 0, void 0, function () { + var links_1, shortCommitId, commitToFetchFrom, links_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(prFromSummary !== undefined)) return [3 /*break*/, 2]; + return [ + 4 /*yield*/, + (0, get_github_info_1.getInfoFromPullRequest)({ + repo: options.repo, + pull: prFromSummary, + }), + ]; + case 1: + links_1 = _a.sent().links; + if (commitFromSummary) { + shortCommitId = commitFromSummary.slice(0, 7); + links_1 = __assign(__assign({}, links_1), { + commit: '[`' + .concat(shortCommitId, '`](https://github.com/') + .concat(options.repo, '/commit/') + .concat(commitFromSummary, ')'), + }); + } + return [2 /*return*/, links_1]; + case 2: + commitToFetchFrom = commitFromSummary || changeset.commit; + if (!commitToFetchFrom) return [3 /*break*/, 4]; + return [ + 4 /*yield*/, + (0, get_github_info_1.getInfo)({ + repo: options.repo, + commit: commitToFetchFrom, + }), + ]; + case 3: + links_2 = _a.sent().links; + return [2 /*return*/, links_2]; + case 4: + return [ + 2 /*return*/, + { + commit: null, + pull: null, + user: null, + }, + ]; + } + }); + }); + })(), + ]; + case 1: + links = _b.sent(); + users = usersFromSummary.length + ? usersFromSummary + .map(function (userFromSummary) { + return '[@' + .concat(userFromSummary, '](https://github.com/') + .concat(userFromSummary, ')'); + }) + .join(', ') + : links.user; + suffix = ''; + if (links.pull || links.commit || users) { + suffix = '(' + .concat(users ? 'by '.concat(users, ' ') : '', 'in ') + .concat(links.pull || links.commit, ')'); + } + emojiFirstline = firstLine + .replace('FEAT:', '✨ ') + .replace('feat:', '✨ ') + .replace('fix:', '🐞🩹') + .replace('FIX:', '🐞🩹') + .replace('DOCS:', '📃') + .replace('docs:', '📃'); + return [ + 2 /*return*/, + '\n\n- ' + .concat(emojiFirstline, ' ') + .concat(suffix, '\n') + .concat( + futureLines + .map(function (l) { + return ' '.concat(l); + }) + .join('\n') + ), + ]; + } + }); + }); + }, +}; +exports.default = changelogFunctions; diff --git a/.changeset/changelog-github-custom.ts b/.changeset/changelog-github-custom.ts new file mode 100644 index 00000000000..d151d212941 --- /dev/null +++ b/.changeset/changelog-github-custom.ts @@ -0,0 +1,130 @@ +import { ChangelogFunctions } from '@changesets/types'; +// @ts-ignore +import { getInfo, getInfoFromPullRequest } from '@changesets/get-github-info'; +import { config } from 'dotenv'; + +config(); + +const changelogFunctions: ChangelogFunctions = { + getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => { + if (!options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + if (dependenciesUpdated.length === 0) return ''; + + const changesetLink = `- Updated dependencies [${( + await Promise.all( + changesets.map(async (cs) => { + if (cs.commit) { + let { links } = await getInfo({ + repo: options.repo, + commit: cs.commit, + }); + return links.commit; + } + }) + ) + ) + .filter((_) => _) + .join(', ')}]:`; + + const updatedDepenenciesList = dependenciesUpdated.map( + (dependency) => ` - ${dependency.name}@${dependency.newVersion}` + ); + + return [changesetLink, ...updatedDepenenciesList].join('\n'); + }, + getReleaseLine: async (changeset, type, options) => { + if (!options || !options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + + let prFromSummary: number | undefined; + let commitFromSummary: string | undefined; + let usersFromSummary: string[] = []; + + const replacedChangelog = changeset.summary + .replace(/^\s*(?:pr|pull|pull\s+request):\s*#?(\d+)/im, (_, pr) => { + let num = Number(pr); + if (!isNaN(num)) prFromSummary = num; + return ''; + }) + .replace(/^\s*commit:\s*([^\s]+)/im, (_, commit) => { + commitFromSummary = commit; + return ''; + }) + .replace(/^\s*(?:author|user):\s*@?([^\s]+)/gim, (_, user) => { + usersFromSummary.push(user); + return ''; + }) + .trim(); + + const linkifyIssueHints = (line: string) => + line.replace(/(?<=\( ?(?:fix|fixes|see) )(#\d+)(?= ?\))/g, (issueHash) => { + return `[${issueHash}](https://github.com/${ + options.repo + }/issues/${issueHash.substring(1)})`; + }); + + const [firstLine, ...futureLines] = replacedChangelog + .split('\n') + .map((l) => linkifyIssueHints(l.trimEnd())); + + const links = await (async () => { + if (prFromSummary !== undefined) { + let { links } = await getInfoFromPullRequest({ + repo: options.repo, + pull: prFromSummary, + }); + if (commitFromSummary) { + const shortCommitId = commitFromSummary.slice(0, 7); + links = { + ...links, + commit: `[\`${shortCommitId}\`](https://github.com/${options.repo}/commit/${commitFromSummary})`, + }; + } + return links; + } + const commitToFetchFrom = commitFromSummary || changeset.commit; + if (commitToFetchFrom) { + let { links } = await getInfo({ + repo: options.repo, + commit: commitToFetchFrom, + }); + return links; + } + return { + commit: null, + pull: null, + user: null, + }; + })(); + + const users = usersFromSummary.length + ? usersFromSummary + .map((userFromSummary) => `[@${userFromSummary}](https://github.com/${userFromSummary})`) + .join(', ') + : links.user; + + let suffix = ''; + if (links.pull || links.commit || users) { + suffix = `(${users ? `by ${users} ` : ''}in ${links.pull || links.commit})`; + } + + const emojiFirstline = firstLine + .replace('FEAT:', '✨ ') + .replace('feat:', '✨ ') + .replace('fix:', '🐞🩹') + .replace('FIX:', '🐞🩹') + .replace('DOCS:', '📃') + .replace('docs:', '📃'); + + return `\n\n- ${emojiFirstline} ${suffix}\n${futureLines.map((l) => ` ${l}`).join('\n')}`; + }, +}; + +export default changelogFunctions; diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000000..fa7def1a078 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.1/schema.json", + "changelog": ["./changelog-github-custom.cjs", { "repo": "QwikDev/qwik" }], + "commit": false, + "fixed": [["@builder.io/qwik", "@builder.io/qwik-city", "eslint-plugin-qwik", "create-qwik"]], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "minor", + "ignore": [ + "qwik-docs", + "@builder.io/qwik-labs", + "insights", + "@builder.io/qwik-react", + "@builder.io/qwik-worker" + ], + "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { + "onlyUpdatePeerDependentsWhenOutOfRange": true + } +} diff --git a/.changeset/wicked-foxes-behave.md b/.changeset/wicked-foxes-behave.md new file mode 100644 index 00000000000..8ba9b3dd87c --- /dev/null +++ b/.changeset/wicked-foxes-behave.md @@ -0,0 +1,5 @@ +--- +'create-qwik': patch +--- + +feat: added `preserveModules` to library starters to improve library bundling / tree-shaking diff --git a/.eslintignore b/.eslintignore index e46b14bd09c..ec0b06b7b51 100644 --- a/.eslintignore +++ b/.eslintignore @@ -18,7 +18,7 @@ scripts/**/* **/server/**/*.js *.tsbuildinfo packages/docs/api/**/* -packages/docs/public/repl/bundled/**/* +packages/docs/public/repl/repl-sw.js* packages/docs/src/routes/examples/apps/**/* packages/docs/src/routes/playground/app/**/* packages/docs/src/routes/tutorial/**/* diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d6f812df9eb..e786ae04e01 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,6 +8,12 @@ README.md @QwikDev/docs-team @QwikDev/qwik-team CONTRIBUTING.md @QwikDev/docs-team @QwikDev/qwik-team CODE_OF_CONDUCT.md @QwikDev/docs-team @QwikDev/qwik-team +# For API changes +api.json @QwikDev/api-guards + +# For releases +CHANGELOG.md @QwikDev/api-guards + # Protect the code owners file .github/CODEOWNERS @mhevery @shairez diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c54524918c6..48c98d64508 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,18 +1,13 @@ -# Overview - # What is it? @@ -20,21 +15,19 @@ _— Build primitives is our mantra_ - [ ] Feature / enhancement - [ ] Bug - [ ] Docs / tests / types / typos +- [ ] Infra # Description -Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. - -# Use cases and why - - - -- 1. One use case -- 2. Another use case + # Checklist: - [ ] My code follows the [developer guidelines of this project](https://github.com/QwikDev/qwik/blob/main/CONTRIBUTING.md) - [ ] I have performed a self-review of my own code -- [ ] I have made corresponding changes to the documentation +- [ ] I have ran `pnpm change` and documented my changes +- [ ] I have made corresponding changes to the Qwik docs - [ ] Added new tests to cover the fix / functionality diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml.disabled similarity index 97% rename from .github/workflows/bench.yml rename to .github/workflows/bench.yml.disabled index f88ccfdc6d8..4794b167920 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml.disabled @@ -1,3 +1,4 @@ +# disabled for now, not working as expected and not checking qwik runtime performance name: Benchmark on: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fd0f15d081..14d2518f6da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,9 +1,12 @@ # Build and test everything # -# First it builds the packages and stores them in artifacts. +# First it builds the packages and stores them in artifacts/cache. # Meanwhile it lints the code. -# Then it runs the unit tests with the artifacts, as well as builds the docs and insights +# Then it runs the unit tests with the artifacts, as well as builds the docs and insights # Once it all works, it does a release +# +# NOTE: only use pnpm run scripts for build commands +# This way we're sure that dev and CI environments are consistent name: Qwik CI @@ -48,18 +51,21 @@ jobs: hash-others: ${{ steps.cache-others.outputs.cache-primary-key }} hash-docs: ${{ steps.cache-docs.outputs.cache-primary-key }} hash-insights: ${{ steps.cache-insights.outputs.cache-primary-key }} + hash-unit: ${{ steps.cache-unit.outputs.cache-primary-key }} + hash-e2e: ${{ steps.cache-e2e.outputs.cache-primary-key }} build-qwik: ${{ steps.cache-qwik.outputs.cache-hit != 'true' }} build-rust: ${{ steps.cache-rust.outputs.cache-hit != 'true' }} build-others: ${{ steps.cache-others.outputs.cache-hit != 'true' }} build-docs: ${{ steps.cache-docs.outputs.cache-hit != 'true' }} - # TEMP v2: disable insights build - # build-insights: ${{ steps.cache-insights.outputs.cache-hit != 'true' }} - build-insights: false + build-insights: ${{ steps.cache-insights.outputs.cache-hit != 'true' }} + build-unit: ${{ steps.cache-unit.outputs.cache-hit != 'true' }} + build-e2e: ${{ steps.cache-e2e.outputs.cache-hit != 'true' }} + disttag: ${{ steps.set_dist_tag.outputs.disttag }} steps: - name: Branch run: echo "${{ github.ref }}" - - name: NPM Dist Tag + - name: NPM Dist Tag from input run: echo "${{ github.event.inputs.disttag }}" - name: Github event run: echo event_name=${{ github.event_name }} @@ -67,21 +73,77 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: 'cache: qwik' + - name: Set Dist Tag + id: set_dist_tag + if: | + github.ref == 'refs/heads/main' && ( + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' + ) + run: | + if [ ${{ github.event_name }} == 'workflow_dispatch' ]; then + disttag="${{ github.event.inputs.disttag }}" + echo "Overriding disttag with input: $disttag" + echo "disttag=${disttag}" >> $GITHUB_OUTPUT + exit 0 + fi + + is_release=false + commit_id=${{ github.sha }} + owner=${{ github.repository_owner }} + repo=${{ github.event.repository.name }} + + removed_files=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/$owner/$repo/commits/$commit_id" | jq -r '.files[] | select(.status == "removed") | .filename') + + echo "Removed files: $removed_files" + + md_file_removed=false + for file in $removed_files; do + if [[ $file == .changeset/*.md ]]; then + md_file_removed=true + break + fi + done + + if [ $md_file_removed = true ]; then + if ! ls .changeset/*.md > /dev/null 2>&1; then + is_release=true + fi + fi + + echo "is_release: $is_release" + + if [ "$is_release" = true ]; then + disttag='latest' + else + disttag="${{github.event.inputs.disttag}}" + fi + + echo "disttag: $disttag" + + echo "disttag=${disttag}" >> $GITHUB_OUTPUT + + - run: jq .scripts package.json > scripts.json + + - name: 'check cache: qwik' id: cache-qwik uses: actions/cache/restore@v4 with: lookup-only: true path: packages/qwik/dist - key: ${{ hashfiles('pnpm-lock.yaml', 'packages/qwik/**/*') }} - - name: 'cache: rust' + # Note that this includes the package.json of qwik + key: ${{ hashfiles('.github/workflows/ci.yml', 'pnpm-lock.yaml', 'scripts.json', 'scripts/**/*', 'packages/qwik/**/*', '!**/*.unit.*', '!**/*.rs') }} + - run: 'echo ${{ steps.cache-qwik.outputs.cache-primary-key }} > qwik-key.txt' + - name: 'check cache: rust' id: cache-rust uses: actions/cache/restore@v4 with: lookup-only: true - path: packages/qwik/dist/bindings - key: ${{ hashfiles('rust-toolchain', '**/Cargo.toml', '**/Cargo.lock', '**/*.rs') }} - - name: 'cache: others' + path: packages/qwik/bindings + key: ${{ hashfiles('Makefile', 'rust-toolchain', '**/Cargo.toml', '**/Cargo.lock', '**/*.rs') }} + - run: 'echo ${{ steps.cache-rust.outputs.cache-primary-key }} > rust-key.txt' + - name: 'check cache: others' id: cache-others uses: actions/cache/restore@v4 with: @@ -91,26 +153,41 @@ jobs: packages/qwik-labs/lib packages/qwik-labs/vite packages/qwik-react/lib - packages/qwik-react/vite packages/eslint-plugin-qwik/dist packages/create-qwik/dist # note that all inputs need to be listed here, including qwik, for correct cache invalidation - key: ${{ hashfiles('pnpm-lock.yaml', 'packages/qwik/**/*', 'rust-toolchain', '**/Cargo.toml', '**/Cargo.lock', '**/*.rs', 'packages/qwik-city/**/*', 'packages/qwik-labs/**/*', 'packages/qwik-react/**/*', 'packages/eslint-plugin-qwik/**/*', 'packages/create-qwik/**/*') }} - - name: 'cache: docs' + key: ${{ hashfiles('qwik-key.txt', 'rust-key.txt', 'packages/qwik-city/**/*', 'packages/qwik-labs/**/*', 'packages/qwik-react/**/*', 'packages/eslint-plugin-qwik/**/*', 'packages/create-qwik/**/*', '!**/*.unit.*') }} + - run: 'echo ${{ steps.cache-others.outputs.cache-primary-key }} > others-key.txt' + - name: 'check cache: docs' id: cache-docs uses: actions/cache/restore@v4 with: lookup-only: true - path: | - packages/docs/dist - packages/docs/server - key: ${{ hashfiles('pnpm-lock.yaml', 'packages/qwik/**/*', 'rust-toolchain', '**/Cargo.toml', '**/Cargo.lock', '**/*.rs', 'packages/qwik-city/**/*', 'packages/qwik-labs/**/*', 'packages/qwik-react/**/*', 'packages/qwik-docs/**/*') }} - - name: 'cache: insights' + path: docs-build-completed.txt + key: ${{ hashfiles('others-key.txt', 'packages/docs/**/*') }} + - name: 'check cache: insights' id: cache-insights uses: actions/cache/restore@v4 with: - path: cache-insights - key: ${{ hashfiles('pnpm-lock.yaml', 'packages/qwik/**/*', 'rust-toolchain', '**/Cargo.toml', '**/Cargo.lock', '**/*.rs', 'packages/qwik-city/**/*', 'packages/qwik-labs/**/*', 'packages/qwik-insights/**/*') }} + lookup-only: true + path: | + packages/insights/dist + packages/insights/.netlify + key: ${{ hashfiles('others-key.txt', 'packages/qwik-insights/**/*') }} + - name: 'check cache: unit tests' + id: cache-unit + uses: actions/cache/restore@v4 + with: + lookup-only: true + path: unit-tests-completed.txt + key: ${{ hashfiles('others-key.txt', 'packages/**/*.unit.*') }} + - name: 'check cache: e2e tests' + id: cache-e2e + uses: actions/cache/restore@v4 + with: + lookup-only: true + path: e2e-tests-completed.txt + key: ${{ hashfiles('others-key.txt', 'starters/**/*') }} ############ BUILD Qwik ############ build-qwik: @@ -122,7 +199,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -134,93 +211,173 @@ jobs: run: | corepack enable # Ensure that the qwik binary gets made - mkdir -p packages/qwik/dist/bindings/ + mkdir -p packages/qwik/bindings/ pnpm install --frozen-lockfile - name: 'build: qwik' - run: pnpm build --qwik --set-dist-tag="${{ github.event.inputs.disttag }}" + run: pnpm build --qwik --set-dist-tag="${{ needs.changes.outputs.disttag }}" - name: Print Qwik Dist Build + continue-on-error: true run: tree packages/qwik/dist/ - - name: Save cache + - name: Save qwik cache uses: actions/cache/save@v4 with: - path: packages/qwik/dist/ key: ${{ needs.changes.outputs.hash-qwik }} + path: packages/qwik/dist - name: Save artifacts uses: actions/upload-artifact@v4 with: - name: dist-qwik-no-optimizer + name: artifact-qwik-no-optimizer path: packages/qwik/dist/ if-no-files-found: error + ############ BUILD PLATFORM BINDINGS ############ + build-bindings: + if: needs.changes.outputs.build-rust == 'true' + strategy: + matrix: + settings: + - host: ubuntu-latest + target: x86_64-unknown-linux-gnu + wasm: true + + # the last x86 macos available as a standard runner + - host: macos-13 + target: x86_64-apple-darwin + + - host: macos-latest + target: aarch64-apple-darwin + + - host: windows-latest + target: x86_64-pc-windows-msvc + + name: Build optimizer ${{ matrix.settings.target }} + runs-on: ${{ matrix.settings.host }} + + needs: changes + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 + + - uses: pnpm/action-setup@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20.x + cache: 'pnpm' + registry-url: https://registry.npmjs.org/ + - run: pnpm install + - if: matrix.settings.wasm + run: pnpm install wasm-pack + + - name: Lint check + if: matrix.settings.wasm + run: pnpm lint.rust + + - name: Unit tests + if: matrix.settings.wasm + run: pnpm test.rust + + - name: Build Platform Binding + run: pnpm build --platform-binding + + - name: Build Wasm Binding + if: matrix.settings.wasm + run: pnpm build --wasm + + - name: Print Packages Dist Build + continue-on-error: true + run: ls -lR packages/qwik/bindings/ + + - name: Upload Platform Binding Artifact + uses: actions/upload-artifact@v4 + with: + name: artifact-bindings-${{ matrix.settings.target }} + path: packages/qwik/bindings/ + if-no-files-found: error + + ############ BUILD PACKAGE ############ combined-qwik: name: Bundle Qwik - if: always() && (needs.build-qwik.result == 'success' || needs.build-qwik.result == 'skipped') && (needs.build-rust.result == 'success' || needs.build-rust.result == 'skipped') && (needs.build-bindings.result == 'success' || needs.build-bindings.result == 'skipped') + if: always() runs-on: ubuntu-latest needs: - build-qwik - - build-rust - build-bindings - changes + steps: + - name: Verify builds + if: | + !( + (needs.build-qwik.result == 'success' || needs.build-qwik.result == 'skipped') && + (needs.build-bindings.result == 'success' || needs.build-bindings.result == 'skipped') + ) + run: exit 1 + - name: Restore artifacts + if: needs.changes.outputs.build-rust == 'true' uses: actions/download-artifact@v4 - name: Restore Qwik from cache - if: needs.changes.outputs.build-qwik != 'true' uses: actions/cache/restore@v4 with: - path: packages/qwik/dist/ + path: packages/qwik/dist key: ${{ needs.changes.outputs.hash-qwik }} - - name: Move Qwik artifact - if: needs.changes.outputs.build-qwik == 'true' - run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik-no-optimizer/* packages/qwik/dist/ - name: Restore Rust from cache if: needs.changes.outputs.build-rust != 'true' uses: actions/cache/restore@v4 with: - path: packages/qwik/dist/bindings + path: packages/qwik/bindings key: ${{ needs.changes.outputs.hash-rust }} - name: Move Rust Artifacts if: needs.changes.outputs.build-rust == 'true' run: | - mkdir -p packages/qwik/dist/bindings - mv dist-bindings-*/* packages/qwik/dist/bindings - - name: Save Rust to cache + mkdir -p packages/qwik/bindings + mv artifact-bindings-*/* packages/qwik/bindings + + - name: Save rust cache if: needs.changes.outputs.build-rust == 'true' uses: actions/cache/save@v4 with: - path: packages/qwik/dist/bindings key: ${{ needs.changes.outputs.hash-rust }} + path: packages/qwik/bindings - name: Upload Qwik artifact uses: actions/upload-artifact@v4 with: - name: dist-qwik - path: packages/qwik/dist/ + name: artifact-qwik + path: | + packages/qwik/bindings + packages/qwik/dist if-no-files-found: error - ############ BUILD PACKAGE ############ - build-package: + build-other-packages: name: Build Other Packages needs: - changes - combined-qwik - if: always() && needs.combined-qwik.result == 'success' + if: always() runs-on: ubuntu-latest steps: + - name: Verify combined-qwik + if: needs.combined-qwik.result != 'success' + run: exit 1 + - name: Checkout if: needs.changes.outputs.build-others == 'true' uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 if: needs.changes.outputs.build-others == 'true' - name: Setup Node if: needs.changes.outputs.build-others == 'true' @@ -233,8 +390,8 @@ jobs: - name: Restore Qwik artifact uses: actions/download-artifact@v4 with: - name: dist-qwik - path: packages/qwik/dist/ + name: artifact-qwik + path: packages/qwik/ - name: Install NPM Dependencies if: needs.changes.outputs.build-others == 'true' @@ -242,7 +399,19 @@ jobs: - name: 'build: qwik-city & others' if: needs.changes.outputs.build-others == 'true' - run: pnpm build --tsc --api --qwikcity --cli --qwiklabs --qwikreact --eslint --set-dist-tag="${{ github.event.inputs.disttag }}" + run: pnpm build --tsc --api --qwikcity --cli --qwiklabs --qwikreact --eslint --set-dist-tag="${{ needs.changes.outputs.disttag }}" + - name: Save others cache + if: needs.changes.outputs.build-others == 'true' + uses: actions/cache/save@v4 + with: + key: ${{ needs.changes.outputs.hash-others }} + path: | + packages/qwik-city/lib + packages/qwik-labs/lib + packages/qwik-labs/vite + packages/qwik-react/lib + packages/eslint-plugin-qwik/dist + packages/create-qwik/dist - name: 'restore: qwik-city & others' if: needs.changes.outputs.build-others != 'true' @@ -253,7 +422,6 @@ jobs: packages/qwik-labs/lib packages/qwik-labs/vite packages/qwik-react/lib - packages/qwik-react/vite packages/eslint-plugin-qwik/dist packages/create-qwik/dist key: ${{ needs.changes.outputs.hash-others }} @@ -264,7 +432,7 @@ jobs: - name: Upload QwikCity Build Artifacts uses: actions/upload-artifact@v4 with: - name: dist-qwikcity + name: artifact-qwikcity path: packages/qwik-city/lib/ if-no-files-found: error @@ -274,7 +442,7 @@ jobs: - name: Upload QwikLabs+React Build Artifacts uses: actions/upload-artifact@v4 with: - name: dist-qwiklabs + name: artifact-qwiklabs path: | packages/qwik-labs/lib/ packages/qwik-labs/vite/ @@ -282,15 +450,14 @@ jobs: if-no-files-found: error - name: Print qwik-react Lib Build - run: tree packages/qwik-react/lib/ packages/qwik-react/vite/ + run: tree packages/qwik-react/lib/ - name: Upload qwik-react Build Artifacts uses: actions/upload-artifact@v4 with: - name: dist-qwikreact + name: artifact-qwikreact path: | packages/qwik-react/lib/ - packages/qwik-react/vite/ packages/qwik-react/package.json if-no-files-found: error @@ -300,7 +467,7 @@ jobs: - name: Upload Create Qwik CLI Build Artifacts uses: actions/upload-artifact@v4 with: - name: dist-create-qwik + name: artifact-create-qwik path: packages/create-qwik/dist/ if-no-files-found: error @@ -310,175 +477,80 @@ jobs: - name: Upload Eslint rules Build Artifacts uses: actions/upload-artifact@v4 with: - name: dist-eslint-plugin-qwik + name: artifact-eslint-plugin-qwik path: packages/eslint-plugin-qwik/dist/ if-no-files-found: error - - name: 'save cache: others' - id: cache-others - if: needs.changes.outputs.build-others == 'true' - uses: actions/cache/save@v4 - with: - key: ${{ needs.changes.outputs.hash-others }} - path: | - packages/qwik-city/lib - packages/qwik-labs/lib - packages/qwik-labs/vite - packages/qwik-react/lib - packages/qwik-react/vite - packages/eslint-plugin-qwik/dist - packages/create-qwik/dist - - ############ BUILD RUST ############ - build-rust: - if: needs.changes.outputs.build-rust == 'true' - name: Build optimizer x86 Linux + wasm - needs: changes - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Rust toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - # additionally install wasm32-unknown-unknown target - target: wasm32-unknown-unknown - - - uses: pnpm/action-setup@v3 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20.x - cache: 'pnpm' - registry-url: https://registry.npmjs.org/ - # This installs everything + the latest wasm-pack binary - - run: pnpm install wasm-pack - - - name: Build x86 Platform Binding - run: pnpm build --platform-binding - - - name: Build wasm Platform Binding - run: pnpm build --wasm - - - name: Print Packages Dist Build - continue-on-error: true - run: ls -lR packages/qwik/dist/bindings/ - - - name: Upload Platform Binding Artifact - uses: actions/upload-artifact@v4 - with: - name: dist-bindings-wasm - path: packages/qwik/dist/bindings/* - if-no-files-found: error - - ############ BUILD PLATFORM BINDINGS ############ - build-bindings: - if: needs.changes.outputs.build-rust == 'true' - strategy: - matrix: - settings: - # the last x86 macos available as a standard runner - - host: macos-13 - target: x86_64-apple-darwin - - - host: macos-latest - target: aarch64-apple-darwin - - - host: windows-latest - target: x86_64-pc-windows-msvc - - name: Build optimizer ${{ matrix.settings.target }} - runs-on: ${{ matrix.settings.host }} - - needs: changes - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Rust toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 - - - uses: pnpm/action-setup@v3 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20.x - cache: 'pnpm' - registry-url: https://registry.npmjs.org/ - - run: pnpm install - - - name: Build Platform Binding - run: pnpm build --platform-binding - - - name: Print Packages Dist Build - continue-on-error: true - run: ls -lR packages/qwik/dist/bindings/ - - - name: Upload Platform Binding Artifact - uses: actions/upload-artifact@v4 - with: - name: dist-bindings-${{ matrix.settings.target }} - path: packages/qwik/dist/bindings/*.node - if-no-files-found: error - ############ BUILD INSIGHTS ############ build-insights: - # it seems that skipped grandparents cause the children to be skipped as well - if: always() && needs.changes.outputs.build-insights == 'true' && needs.build-package.result == 'success' + if: always() && needs.changes.outputs.build-insights == 'true' name: Build Insights needs: - changes - - build-package + - build-other-packages runs-on: ubuntu-latest steps: + - name: Verify build-other-packages + if: needs.build-other-packages.result != 'success' + run: exit 1 + - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20.x - cache: 'pnpm' - registry-url: https://registry.npmjs.org/ - - name: Download Build Artifacts uses: actions/download-artifact@v4 - name: Move Distribution Artifacts run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik/* packages/qwik/dist/ + mv artifact-qwik/* packages/qwik/ mkdir -p packages/qwik-city/lib/ - mv dist-qwikcity/* packages/qwik-city/lib/ + mv artifact-qwikcity/* packages/qwik-city/lib/ mkdir -p packages/create-qwik/dist/ - mv dist-create-qwik/* packages/create-qwik/dist/ + mv artifact-create-qwik/* packages/create-qwik/dist/ mkdir -p packages/eslint-plugin-qwik/dist/ - mv dist-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - mv dist-qwiklabs/lib packages/qwik-labs/lib - mv dist-qwiklabs/vite packages/qwik-labs/vite + mv artifact-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ + mv artifact-qwiklabs/lib packages/qwik-labs/lib + mv artifact-qwiklabs/vite packages/qwik-labs/vite + + - uses: pnpm/action-setup@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20.x + cache: 'pnpm' + registry-url: https://registry.npmjs.org/ - run: corepack pnpm install --frozen-lockfile - name: Build Qwik Insights run: pnpm run build.packages.insights + - name: Save Insights Cache + uses: actions/cache/save@v4 + with: + key: ${{ needs.changes.outputs.hash-insights }} + path: | + packages/insights/dist + packages/insights/.netlify + ############ BUILD DOCS ############ build-docs: - if: always() && needs.changes.outputs.build-docs == 'true' && needs.build-package.result == 'success' + if: always() && needs.changes.outputs.build-docs == 'true' name: Build Docs needs: - changes - - build-package + - build-other-packages runs-on: ubuntu-latest steps: + - name: Verify build-other-packages + if: needs.build-other-packages.result != 'success' + run: exit 1 + - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -491,49 +563,53 @@ jobs: - name: Move Distribution Artifacts run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik/* packages/qwik/dist/ + mv artifact-qwik/* packages/qwik/ mkdir -p packages/qwik-city/lib/ - mv dist-qwikcity/* packages/qwik-city/lib/ + mv artifact-qwikcity/* packages/qwik-city/lib/ mkdir -p packages/create-qwik/dist/ - mv dist-create-qwik/* packages/create-qwik/dist/ + mv artifact-create-qwik/* packages/create-qwik/dist/ mkdir -p packages/eslint-plugin-qwik/dist/ - mv dist-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - mv dist-qwiklabs/lib packages/qwik-labs/lib - mv dist-qwiklabs/vite packages/qwik-labs/vite - mv dist-qwikreact/lib packages/qwik-react/lib - mv dist-qwikreact/vite packages/qwik-react/vite + mv artifact-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ + mv artifact-qwiklabs/lib packages/qwik-labs/lib + mv artifact-qwiklabs/vite packages/qwik-labs/vite + mv artifact-qwikreact/lib packages/qwik-react/lib - run: corepack pnpm install --frozen-lockfile - name: Build Qwik Docs - run: pnpm run build.packages.docs + run: pnpm run build.packages.docs && echo ok > docs-build-completed.txt - - name: Cloudflare Pages Deployment - uses: cloudflare/pages-action@v1 + - name: Save Docs Artifacts + uses: actions/upload-artifact@v4 with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - projectName: 'qwik-docs' - directory: packages/docs/dist - gitHubToken: ${{ secrets.GITHUB_TOKEN }} + name: artifact-docs + path: | + packages/docs/dist + packages/docs/server - ############ RELEASE ############ - release: - name: Release - runs-on: ubuntu-latest + - name: Save Docs Cache + uses: actions/cache/save@v4 + with: + key: ${{ needs.changes.outputs.hash-docs }} + path: docs-build-completed.txt + ############ UNIT TEST ############ + test-unit: + name: Unit Tests + if: always() && needs.changes.outputs.build-unit == 'true' + runs-on: ubuntu-latest needs: - - test-e2e - changes - # TEMP v2: disable release - if: false - #if: always() && (needs.changes.outputs.build-qwik == 'true' || needs.changes.outputs.build-others == 'true' || needs.changes.outputs.build-rust == 'true') && needs.test-e2e.result == 'success' + - build-other-packages steps: + - name: Verify build-other-packages + if: needs.build-other-packages.result != 'success' + run: exit 1 + - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -547,49 +623,34 @@ jobs: - name: Move Distribution Artifacts run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik/* packages/qwik/dist/ + mv artifact-qwik/* packages/qwik/ mkdir -p packages/qwik-city/lib/ - mv dist-qwikcity/* packages/qwik-city/lib/ + mv artifact-qwikcity/* packages/qwik-city/lib/ mkdir -p packages/create-qwik/dist/ - mv dist-create-qwik/* packages/create-qwik/dist/ + mv artifact-create-qwik/* packages/create-qwik/dist/ mkdir -p packages/eslint-plugin-qwik/dist/ - mv dist-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - mv dist-qwiklabs/lib packages/qwik-labs/lib - mv dist-qwiklabs/vite packages/qwik-labs/vite - mv dist-qwikreact/lib packages/qwik-react/lib - mv dist-qwikreact/vite packages/qwik-react/vite + mv artifact-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - run: pnpm install --frozen-lockfile - - name: Commit Build Artifacts - if: github.event_name == 'push' - env: - QWIK_API_TOKEN_GITHUB: ${{ secrets.QWIK_API_TOKEN_GITHUB }} - run: pnpm run qwik-save-artifacts - - - name: Dry-Run Publish - if: github.event_name != 'workflow_dispatch' - run: pnpm build --set-dist-tag="${{ github.event.inputs.disttag }}" --validate --release --dry-run - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Unit Tests + run: pnpm run test.unit && echo ok > unit-tests-completed.txt - - name: Publish - if: github.event_name == 'workflow_dispatch' - run: pnpm build --set-dist-tag="${{ github.event.inputs.disttag }}" --validate --release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Save unit tests cache + uses: actions/cache/save@v4 + with: + key: ${{ needs.changes.outputs.hash-unit }} + path: unit-tests-completed.txt ############ E2E TEST ############ test-e2e: # Sometimes the tests just hang - timeout-minutes: 10 + timeout-minutes: 20 name: E2E Tests - if: always() && (needs.changes.outputs.build-qwik == 'true' || needs.changes.outputs.build-others == 'true' || needs.changes.outputs.build-rust == 'true') && needs.build-package.result == 'success' && needs.test-unit.result == 'success' + if: always() && needs.changes.outputs.build-e2e == 'true' + needs: - - build-package + - build-other-packages - changes - test-unit @@ -598,8 +659,13 @@ jobs: settings: - host: ubuntu-latest browser: chromium + # too slow and flaky. Perhaps better in v2? + # - host: ubuntu-latest + # browser: firefox - host: macos-latest browser: webkit + - host: windows-latest + browser: chromium runs-on: ${{ matrix.settings.host }} @@ -607,7 +673,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -621,14 +687,13 @@ jobs: - name: Move Distribution Artifacts run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik/* packages/qwik/dist/ + mv artifact-qwik/* packages/qwik/ mkdir -p packages/qwik-city/lib/ - mv dist-qwikcity/* packages/qwik-city/lib/ + mv artifact-qwikcity/* packages/qwik-city/lib/ mkdir -p packages/create-qwik/dist/ - mv dist-create-qwik/* packages/create-qwik/dist/ + mv artifact-create-qwik/* packages/create-qwik/dist/ mkdir -p packages/eslint-plugin-qwik/dist/ - mv dist-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ + mv artifact-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - run: pnpm install --frozen-lockfile @@ -636,25 +701,21 @@ jobs: run: npx playwright install ${{ matrix.settings.browser }} --with-deps - name: Playwright E2E Tests - run: pnpm run test.e2e.${{ matrix.settings.browser }} --timeout 60000 --retries 3 --workers 1 + run: pnpm run test.e2e.${{ matrix.settings.browser }} --timeout 60000 --retries 7 --workers 1 - name: Validate Create Qwik Cli + if: matrix.settings.host != 'windows-latest' run: pnpm cli.validate - ############ UNIT TEST ############ - test-unit: - name: Unit Tests - if: always() && (needs.changes.outputs.build-qwik == 'true' || needs.changes.outputs.build-others == 'true' || needs.changes.outputs.build-rust == 'true') && needs.build-package.result == 'success' + ########### LINT PACKAGES ############ + lint-package: + name: Lint Package runs-on: ubuntu-latest - needs: - - changes - - build-package - steps: - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -663,61 +724,63 @@ jobs: registry-url: https://registry.npmjs.org/ - run: corepack enable - - name: Download Build Artifacts - uses: actions/download-artifact@v4 - - - name: Move Distribution Artifacts - run: | - mkdir -p packages/qwik/dist/ - mv dist-qwik/* packages/qwik/dist/ - mkdir -p packages/qwik-city/lib/ - mv dist-qwikcity/* packages/qwik-city/lib/ - mkdir -p packages/create-qwik/dist/ - mv dist-create-qwik/* packages/create-qwik/dist/ - mkdir -p packages/eslint-plugin-qwik/dist/ - mv dist-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ - - run: pnpm install --frozen-lockfile - - name: Unit Tests - run: pnpm run test.unit - - ########### VALIDATE RUST ############ - validate-rust: - if: needs.changes.outputs.build-rust == 'true' - name: Validate Rust - runs-on: ubuntu-latest - - needs: changes - - steps: - - name: Checkout - uses: actions/checkout@v4 + - name: SyncPack Check + if: always() + run: pnpm run lint.syncpack - - name: Install Rust toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Prettier Check + if: always() + run: pnpm run lint.prettier - - name: Format check - run: cargo fmt --check + - name: Build ESLint + if: always() + run: pnpm build --eslint - - name: Build check - run: cargo check --all-features + - name: ESLint Check + if: always() + run: pnpm run lint.eslint - - name: Clippy check - run: cargo clippy --all-features + ############ RELEASE ############ + release: + name: Release + runs-on: ubuntu-latest - - name: Unit tests - run: make test + needs: + - changes + - test-unit + - test-e2e + # test-unit runs when any packages changes, so we have to release + # on main, we always check if we have something to release + # don't run on forks + if: | + always() && + github.repository == 'QwikDev/qwik' && ( + github.ref == 'refs/heads/main' || + needs.test-unit.result == 'success' + ) - ########### LINT PACKAGE ############ - lint-package: - name: Lint Package - runs-on: ubuntu-latest steps: + - name: Verify test-e2e + if: needs.test-e2e.result != 'skipped' + run: | + if [ "${{ needs.test-e2e.result }}" != success ] ; then + exit 1 + else + echo ok > e2e-tests-completed.txt + fi + - name: Save e2e tests cache + if: needs.test-e2e.result != 'skipped' + uses: actions/cache/save@v4 + with: + key: ${{ needs.changes.outputs.hash-e2e }} + path: e2e-tests-completed.txt + - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: @@ -726,31 +789,60 @@ jobs: registry-url: https://registry.npmjs.org/ - run: corepack enable + - name: Download Build Artifacts + uses: actions/download-artifact@v4 + + - name: Move Distribution Artifacts + run: | + mv artifact-qwik/* packages/qwik/ + mkdir -p packages/qwik-city/lib/ + mv artifact-qwikcity/* packages/qwik-city/lib/ + mkdir -p packages/create-qwik/dist/ + mv artifact-create-qwik/* packages/create-qwik/dist/ + mkdir -p packages/eslint-plugin-qwik/dist/ + mv artifact-eslint-plugin-qwik/* packages/eslint-plugin-qwik/dist/ + mv artifact-qwiklabs/lib packages/qwik-labs/lib + mv artifact-qwiklabs/vite packages/qwik-labs/vite + mv artifact-qwikreact/lib packages/qwik-react/lib + rm -rf artifact-* + - run: pnpm install --frozen-lockfile - - name: Prettier Check - if: always() - run: pnpm run lint.prettier + # Do this before other release steps to avoid + # publishing temporary files + - name: Create Release Pull Request or Publish to npm + if: github.ref == 'refs/heads/main' + id: changesets + uses: changesets/action@v1 + with: + publish: pnpm release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: Build ESLint - if: always() - run: pnpm tsm scripts/index.ts --eslint + - name: Commit Build Artifacts + if: github.event_name == 'push' + env: + QWIK_API_TOKEN_GITHUB: ${{ secrets.QWIK_API_TOKEN_GITHUB }} + run: pnpm run qwik-save-artifacts - - name: ESLint Check - if: always() - run: pnpm run lint.eslint + - name: Publish packages for testing + if: github.event_name != 'workflow_dispatch' + run: pnpm release.pkg-pr-new + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ############ TRIGGER QWIKCITY E2E TEST ############ trigger-qwikcity-e2e: name: Trigger Qwik City E2E runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' needs: - changes - release - if: always() && (needs.changes.outputs.build-qwik == 'true' || needs.changes.outputs.build-rust == 'true' || needs.changes.outputs.build-others == 'true') && needs.release.result == 'success' && github.ref_name == 'main' - steps: - name: Repository Dispatch uses: peter-evans/repository-dispatch@v2 @@ -758,3 +850,26 @@ jobs: token: ${{ secrets.QWIK_API_TOKEN_GITHUB }} repository: builderIO/qwik-city-e2e event-type: main-updated + + ############ Everything is fine ############ + requirements-passed: + name: All requirements are met + runs-on: ubuntu-latest + needs: + - test-unit + - test-e2e + - lint-package + - build-docs + - build-insights + if: always() + steps: + - name: check status + if: | + !( + (needs.test-unit.result == 'success' || needs.test-unit.result == 'skipped') && + (needs.test-e2e.result == 'success' || needs.test-e2e.result == 'skipped') && + (needs.lint-package.result == 'success' || needs.lint-package.result == 'skipped') && + (needs.build-docs.result == 'success' || needs.build-docs.result == 'skipped') && + (needs.build-insights.result == 'success' || needs.build-insights.result == 'skipped') + ) + run: exit 1 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index fdd85228aec..00000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,70 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: 'CodeQL' - -on: - push: - branches: [main] - pull_request: - # The branches below must be a subset of the branches above - branches: [main] - schedule: - - cron: '35 23 * * 4' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: ['typescript'] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://git.io/codeql-language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v4.1.1 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 00000000000..9e77e2ff065 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,50 @@ +# a workflow that runs after the "Qwik CI" workflow is successful +# and deploys the documentation to CloudFlare Pages. + +name: Deploy Docs + +on: + workflow_run: + workflows: ['Qwik CI'] + types: + - completed + +permissions: + actions: read + deployments: write + contents: read + pull-requests: write + +jobs: + deploy: + name: Cloudflare Pages Deployment + if: > + github.repository == 'QwikDev/qwik' && + github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download docs artifact + continue-on-error: true + uses: actions/download-artifact@v4 + id: download-artifact + with: + name: artifact-docs + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + # This will download both dist/ and server/ + path: packages/docs + + # not the official version, so be careful when updating + - name: Deploy to Cloudflare Pages + # if the docs didn't build, don't deploy but don't fail the workflow + if: success() + uses: AdrianGonz97/refined-cf-pages-action@11cfce77186cf1bd43f2fe42a84ea1996bcfe3c9 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + projectName: 'qwik-docs' + directory: packages/docs/dist + githubToken: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/labeling-issues.yml b/.github/workflows/labeling-issues.yml index 1a4ceba9641..d347912420d 100644 --- a/.github/workflows/labeling-issues.yml +++ b/.github/workflows/labeling-issues.yml @@ -1,4 +1,4 @@ -name: Labling Issues +name: Labeling Issues on: issues: @@ -10,8 +10,18 @@ jobs: runs-on: ubuntu-latest steps: + - name: ensure STATUS-1 label is present + id: status-1-label-presence + # GH's built-in functions do not allow to search for array values that start with something, so we're using node for this + run: | + echo present=$( + node -e ' + const labels = JSON.parse(`${{ toJSON(github.event.issue.labels.*.name) }}`); + console.log(labels.some(l => l.startsWith("STATUS-1:"))); + ' + ) >> $GITHUB_OUTPUT - name: remove needs triage - if: contains(github.event.issue.labels.*.name, 'STATUS-1') && (contains(github.event.label.name, 'STATUS-2:') || contains(github.event.label.name, 'STATUS-3:')) + if: steps.status-1-label-presence.outputs.present == 'true' && (contains(github.event.label.name, 'STATUS-2:') || contains(github.event.label.name, 'STATUS-3:')) uses: actions-cool/issues-helper@v3 with: actions: 'remove-labels' @@ -28,6 +38,7 @@ jobs: issue-number: ${{ github.event.issue.number }} body: | Hello @${{ github.event.issue.user.login }}. Please provide a [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) using a GitHub repository or [StackBlitz](https://qwik.new). + [Here](https://antfu.me/posts/why-reproductions-are-required#why-reproduction) is why we really need a minimal reproduction. Issues marked with `STATUS-2: needs reproduction` will be automatically closed if they have no activity within 14 days. Thanks 🙏 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index 4d4774cd5c2..00000000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Qwik PR Checks - -on: - pull_request_target: - types: - - opened - - edited - - synchronize - - ready_for_review - -permissions: - pull-requests: read - -jobs: - ############ SEMANTIC PR TITLE VALIDATION ############ - semantic-pr: - name: Validate PR title - runs-on: ubuntu-latest - steps: - - uses: amannn/action-semantic-pull-request@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 8897fc65c04..b9e7fa07098 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ dist-dev external lib tsdoc-metadata.json +packages/qwik/bindings # IDE and local environment .idea @@ -49,3 +50,6 @@ test-results # Local Netlify folder .netlify sandbox + +# We need to ignore this because "changesets" will try to replace it +/CHANGELOG.md \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 9beb553aa09..be712d47808 100644 --- a/.prettierignore +++ b/.prettierignore @@ -24,6 +24,7 @@ build .rollup.cache tsconfig.tsbuildinfo packages/docs/api/**/* +packages/docs/public/repl/repl-sw.js* packages/docs/src/routes/**/*.mdx **/server/**/*.js starters/**/*.js @@ -33,7 +34,6 @@ packages/docs/server packages/docs/src/routes/api packages/docs/**/*.md packages/docs/**/*.mdx -packages/docs/public/repl/bundled packages/insights/drizzle packages/insights/.netlify packages/insights/scripts diff --git a/.vscode/settings.json b/.vscode/settings.json index 8dd92e9e43e..3a20cde19ff 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,5 +11,6 @@ "javascript.preferences.autoImportFileExcludePatterns": ["node:test"], "typescript.preferences.preferTypeOnlyAutoImports": true, "typescript.tsdk": "./node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true + "typescript.enablePromptUseWorkspaceTsdk": true, + "makefile.configureOnOpen": false } diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000000..b71c57be8bd --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelogs Index + +Here is an index file of all the changelogs in this repo: + +| Package | File | +| -------------------- | ----------------------------------------------------- | +| `qwik` | [Changelog](packages/qwik/CHANGELOG.md) | +| `qwik-city` | [Changelog](packages/qwik-city/CHANGELOG.md) | +| `eslint-plugin-qwik` | [Changelog](packages/eslint-plugin-qwik/CHANGELOG.md) | +| `create-qwik` | [Changelog](packages/create-qwik/CHANGELOG.md) | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 018f9d26317..4965f05a6e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -38,7 +38,7 @@ Before submitting a pull request, consider the following guidelines: - In your forked repository, create a new branch: `git checkout -b my-branch main` - Make your changes/fixes. - Run `pnpm fmt` to lint the code. -- Commit your code with a good commit message [using "Commitizen"](#committing-using-commitizen). +- Add a changeset with `pnpm change` if needed ([follow this tutorial](https://go.screenpal.com/watch/cZivIcVPJQV)) - Push your branch to GitHub: `git push origin my-branch` - In GitHub, send a pull request to `QwikDev:main`. @@ -183,7 +183,7 @@ Run without arguments for all supported flags. Notable: - `--build`: Qwik (you'll probably also need `--api`) - `--qwikcity`: Qwik City (you'll probably also need `--api`) - `--qwikreact`: Qwik React -- `--qwiklabs`: Qwik React +- `--qwiklabs`: Qwik Labs - `--eslint`: Eslint plugin ### Full build without Rust @@ -325,15 +325,19 @@ This will show an interactive UI to update all dependencies. Be careful about pe - Review PR in StackBlitz ![image](https://user-images.githubusercontent.com/4918140/195581745-8dfca1f9-2dcd-4f6a-b7aa-705f3627f8fa.png) -### Committing using "Commitizen": +### Adding a changeset: -Instead of using `git commit` please use the following command: +Whenever you make a change that requires documentation or a new release, you should add a changeset. This will help us to keep track of changes and generate meaningful release notes and changelog files. + +You create a new changeset file by running: ```shell -pnpm commit +pnpm change ``` -You'll be asked guiding questions which will eventually create a descriptive commit message and necessary to generate meaningful release notes / CHANGELOG automatically. +For your convenience, we prepared a video tutorial that covers the process of adding a changeset: + +[đŸ“Ŋ TUTORIAL: Adding a changeset](https://go.screenpal.com/watch/cZivIcVPJQV) ### Pre-submit hooks diff --git a/Cargo.lock b/Cargo.lock index d015b42da6d..caf490a384b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,41 +14,48 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ + "cfg-if 1.0.0", "getrandom", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "ast_node" -version = "0.9.3" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f7fd7740c5752c16281a1c1f9442b1e69ba41738acde85dc604aaf3ce41890" +checksum = "f9184f2b369b3e8625712493c89b785881f27eedc6cde480a81883cef78868b2" dependencies = [ - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] @@ -64,27 +71,36 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.21.0" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +dependencies = [ + "simd-abstraction", +] [[package]] name = "better_scoped_tls" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73e8ecdec39e98aa3b19e8cd0b8ed8f77ccb86a6b0b2dc7cd86d105438a2123" +checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de" dependencies = [ "scoped-tls", ] @@ -97,9 +113,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] [[package]] name = "block-buffer" @@ -110,11 +138,26 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] + [[package]] name = "cc" -version = "1.0.79" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cfg-if" @@ -124,14 +167,14 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", "bitflags 1.3.2", "clap_lex", - "indexmap", + "indexmap 1.9.3", "strsim", "termcolor", "textwrap", @@ -148,67 +191,68 @@ dependencies = [ [[package]] name = "console" -version = "0.15.5" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] -name = "cpufeatures" -version = "0.2.6" +name = "console_error_panic_hook" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "libc", + "cfg-if 1.0.0", + "wasm-bindgen", ] [[package]] -name = "crossbeam-channel" -version = "0.5.8" +name = "convert_case" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ - "cfg-if", - "crossbeam-utils", + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -220,14 +264,24 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctor" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +dependencies = [ + "quote", + "syn 2.0.71", +] + [[package]] name = "dashmap" -version = "5.4.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "cfg-if", - "hashbrown", + "cfg-if 1.0.0", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -235,9 +289,19 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "serde", + "uuid", +] [[package]] name = "derivative" @@ -252,9 +316,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -262,9 +326,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -272,6 +336,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -280,25 +350,30 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "from_variant" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d449976075322384507443937df2f1d5577afbf4282f12a5a66ef29fa3e6307" +checksum = "32016f1242eb82af5474752d00fd8ebcd9004bd69b462b1c91de833972d08ed4" dependencies = [ - "pmutil", "proc-macro2", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "generic-array" version = "0.14.7" @@ -311,13 +386,15 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -326,6 +403,16 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -337,18 +424,29 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hstr" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +checksum = "96274be293b8877e61974a607105d09c84caebe9620b47774aa8a6b942042dd4" dependencies = [ - "libc", + "hashbrown 0.14.5", + "new_debug_unreachable", + "once_cell", + "phf", + "rustc-hash", + "triomphe", ] [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -367,131 +465,85 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", ] [[package]] name = "insta" -version = "1.29.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972" +checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" dependencies = [ "console", "lazy_static", "linked-hash-map", "similar", - "yaml-rust", ] [[package]] name = "is-macro" -version = "0.2.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7d079e129b77477a49c5c4f1cfe9ce6c2c909ef52520693e8e811a714c7b20" +checksum = "59a85abdc13717906baccb5a1e435556ce0df215f242892f721dff62bf25288f" dependencies = [ "Inflector", - "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lexical" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" -dependencies = [ - "lexical-core", -] - -[[package]] -name = "lexical-core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "0.8.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" -dependencies = [ - "lexical-parse-integer", - "lexical-util", - "static_assertions", -] +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] -name = "lexical-parse-integer" -version = "0.8.6" +name = "js-sys" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ - "lexical-util", - "static_assertions", + "wasm-bindgen", ] [[package]] -name = "lexical-util" -version = "0.8.5" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" -dependencies = [ - "static_assertions", -] +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "lexical-write-float" -version = "0.8.5" +name = "libc" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" -dependencies = [ - "lexical-util", - "lexical-write-integer", - "static_assertions", -] +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] -name = "lexical-write-integer" +name = "libloading" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ - "lexical-util", - "static_assertions", + "cfg-if 1.0.0", + "windows-targets", ] -[[package]] -name = "libc" -version = "0.2.141" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" - [[package]] name = "libmimalloc-sys" -version = "0.1.32" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a558e3d911bc3c7bfc8c78bc580b404d6e51c1cefbf656e176a94b49b0df40" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" dependencies = [ "cc", "libc", @@ -505,86 +557,112 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", ] +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "memoffset" -version = "0.8.0" +name = "memory_units" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "mimalloc" -version = "0.1.36" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d88dad3f985ec267a3fcb7a1726f5cb1a7e8cad8b646e70a84f967210df23da" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" dependencies = [ "libmimalloc-sys", ] [[package]] name = "napi" -version = "1.8.0" +version = "2.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5586ff59e18f42d41f68139a8ca72ef1dbcc243ec62c5696e6383169a8a05a4" +checksum = "a1bd081bbaef43600fd2c5dd4c525b8ecea7dfdacf40ebc674e87851dce6559e" dependencies = [ + "bitflags 2.6.0", + "ctor", + "napi-derive", "napi-sys", + "once_cell", "serde", "serde_json", - "winapi", ] [[package]] name = "napi-build" -version = "1.2.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b" +checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" [[package]] name = "napi-derive" -version = "1.1.2" +version = "2.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee880798e942fc785e2e234544b9db578019a1d7676f45dad7f38d432ab0fe4" +checksum = "87c3b5d4ab13e20a4bb9d3a1e2f3d4e77eee4a205d0f810abfd226b971dc6ce5" dependencies = [ + "cfg-if 1.0.0", + "convert_case", + "napi-derive-backend", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", +] + +[[package]] +name = "napi-derive-backend" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de436a6ab93265beef838f8333c8345438f059df6081fe0ad0b8648ee0c524" +dependencies = [ + "convert_case", + "once_cell", + "proc-macro2", + "quote", + "regex", + "semver 1.0.23", + "syn 2.0.71", ] [[package]] name = "napi-sys" -version = "1.1.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf20e0081fea04e044aa4adf74cfea8ddc0324eec2894b1c700f4cafc72a56" +checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3" +dependencies = [ + "libloading", +] [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", "serde", @@ -592,82 +670,77 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] -name = "parking_lot" -version = "0.12.1" +name = "outref" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] +checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-targets", ] [[package]] name = "path-absolutize" -version = "3.0.14" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1d4993b16f7325d90c18c3c6a3327db7808752db8d208cea0acee0abd52c52" +checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" dependencies = [ "path-dedot", ] [[package]] name = "path-dedot" -version = "3.0.18" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a81540d94551664b72b72829b12bd167c73c9d25fbac0e04fafa8023f7e4901" +checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" dependencies = [ "once_cell", ] @@ -686,36 +759,35 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.6", ] [[package]] name = "phf" -version = "0.10.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", "phf_shared", - "proc-macro-hack", ] [[package]] name = "phf_generator" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", "rand", @@ -723,85 +795,75 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared", - "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "phf_shared" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] -name = "pmutil" -version = "0.5.3" +name = "proc-macro2" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "unicode-ident", ] [[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" +name = "psm" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] [[package]] -name = "proc-macro2" -version = "1.0.56" +name = "ptr_meta" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" dependencies = [ - "unicode-ident", + "ptr_meta_derive", ] [[package]] -name = "psm" -version = "0.1.21" +name = "ptr_meta_derive" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "cc", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -820,7 +882,7 @@ name = "qwik-core" version = "0.2.0" dependencies = [ "anyhow", - "base64 0.21.0", + "base64 0.22.1", "derivative", "insta", "lazy_static", @@ -837,6 +899,21 @@ dependencies = [ "swc_ecmascript", ] +[[package]] +name = "qwik-wasm" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "getrandom", + "js-sys", + "parking_lot_core", + "qwik-core", + "serde", + "serde-wasm-bindgen", + "wasm-bindgen", + "wee_alloc", +] + [[package]] name = "qwik_napi" version = "0.1.0" @@ -849,23 +926,17 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.5" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "ppv-lite86", "rand_core", ] @@ -874,15 +945,12 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] [[package]] name = "rayon" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -890,30 +958,40 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.7.3" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -922,15 +1000,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "relative-path" -version = "1.8.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "rustc-hash" @@ -944,14 +1022,20 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", ] [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "ryu-js" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5" [[package]] name = "scoped-tls" @@ -961,9 +1045,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" @@ -974,6 +1058,12 @@ dependencies = [ "semver-parser", ] +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "semver-parser" version = "0.7.0" @@ -982,38 +1072,49 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.160" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.71", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "itoa", "ryu", @@ -1021,39 +1122,48 @@ dependencies = [ ] [[package]] -name = "sha-1" -version = "0.10.0" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "cpufeatures", "digest", ] +[[package]] +name = "simd-abstraction" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" +dependencies = [ + "outref", +] + [[package]] name = "similar" -version = "2.2.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" [[package]] name = "simple-error" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8542b68b8800c3cda649d2c72d688b6907b30f1580043135d61669d4aad1c175" +checksum = "7e2accd2c41a0e920d2abd91b2badcfa1da784662f54fbc47e0e3a51f1e2e1cf" [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smartstring" @@ -1068,16 +1178,20 @@ dependencies = [ [[package]] name = "sourcemap" -version = "6.2.3" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed16231c92d0a6f0388f56e0ab2be24ecff1173f8e22f0ea5e074d0525631cb" +checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" dependencies = [ + "base64-simd", + "bitvec", "data-encoding", + "debugid", "if_chain", + "rustc-hash", "rustc_version", "serde", "serde_json", - "unicode-id", + "unicode-id-start", "url", ] @@ -1094,7 +1208,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" dependencies = [ "cc", - "cfg-if", + "cfg-if 1.0.0", "libc", "psm", "winapi", @@ -1106,43 +1220,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", -] - [[package]] name = "string_enum" -version = "0.4.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0090512bdfee4b56d82480d66c0fd8a6f53f0fe0f97e075e949b252acdd482e0" +checksum = "05e383308aebc257e7d7920224fa055c632478d92744eca77f99be8fa1545b90" dependencies = [ - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] @@ -1151,30 +1238,54 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "swc_allocator" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc8bd3075d1c6964010333fae9ddcd91ad422a4f8eb8b3206a9b2b6afb4209e" +dependencies = [ + "bumpalo", + "hashbrown 0.14.5", + "ptr_meta", + "rustc-hash", + "triomphe", +] + [[package]] name = "swc_atoms" -version = "0.5.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "593c2f3e4cea60ddc4179ed731cabebe7eacec209d9e76a3bbcff4b2b020e3f5" +checksum = "bb6567e4e67485b3e7662b486f1565bdae54bd5b9d6b16b2ba1a9babb1e42125" dependencies = [ + "hstr", "once_cell", "rustc-hash", "serde", - "string_cache", - "string_cache_codegen", - "triomphe", ] [[package]] -name = "swc_common" -version = "0.31.4" +name = "swc_cached" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b557014d62318e08070c2a3d5eb0278ff73749dd69db53c39a4de4bcd301d6a" +checksum = "83406221c501860fce9c27444f44125eafe9e598b8b81be7563d7036784cd05c" dependencies = [ "ahash", + "anyhow", + "dashmap", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "swc_common" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df62b0d102ecd81cf9093ef48303289e9a7dae0311f8e64b5345e5fe3e48565" +dependencies = [ "ast_node", "better_scoped_tls", - "cfg-if", + "cfg-if 1.0.0", "either", "from_variant", "new_debug_unreachable", @@ -1184,7 +1295,7 @@ dependencies = [ "serde", "siphasher", "sourcemap", - "string_cache", + "swc_allocator", "swc_atoms", "swc_eq_ignore_macros", "swc_visit", @@ -1195,57 +1306,59 @@ dependencies = [ [[package]] name = "swc_config" -version = "0.1.5" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89c8fc2c12bb1634c7c32fc3c9b6b963ad8f034cc62c4ecddcf215dc4f6f959d" +checksum = "84b67e115ab136fe0eb03558bb0508ca7782eeb446a96d165508c48617e3fd94" dependencies = [ - "indexmap", + "anyhow", + "indexmap 2.2.6", "serde", "serde_json", + "swc_cached", "swc_config_macro", ] [[package]] name = "swc_config_macro" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dadb9998d4f5fc36ef558ed5a092579441579ee8c6fcce84a5228cca9df4004" +checksum = "7c5f56139042c1a95b54f5ca48baa0e0172d369bcc9d3d473dad1de36bae8399" dependencies = [ - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "swc_ecma_ast" -version = "0.103.4" +version = "0.117.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5206233430a6763e2759da76cfc596a64250793f70cd94cace1f82fdcc4d702c" +checksum = "0c6a4bcf9ea2ce03bc5f12e53aa46ef414fa96e60c4d93abee03051f147c8219" dependencies = [ - "bitflags 2.1.0", + "bitflags 2.6.0", "is-macro", "num-bigint", + "phf", "scoped-tls", "string_enum", "swc_atoms", "swc_common", - "unicode-id", + "unicode-id-start", ] [[package]] name = "swc_ecma_codegen" -version = "0.138.9" +version = "0.154.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd67009c5208689787f9fc59265deaeddad68d3e59da909e8db4615bb8c1d4a9" +checksum = "a829b8d03ba1f3fabc8c7403233d33e61733032573319acdccfd44ecfc9e7ad7" dependencies = [ "memchr", "num-bigint", "once_cell", - "rustc-hash", "serde", "sourcemap", + "swc_allocator", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -1255,26 +1368,27 @@ dependencies = [ [[package]] name = "swc_ecma_codegen_macros" -version = "0.7.2" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ee0caee1018808d94ecd09490cb7affd3d504b19aa11c49238f5fc4b54901" +checksum = "090e409af49c8d1a3c13b3aab1ed09dd4eda982207eb3e63c2ad342f072b49c8" dependencies = [ - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "swc_ecma_parser" -version = "0.133.8" +version = "0.148.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5341644ae5e8d143db12c43dcd06d31138c0dbda7db9db31ce751f0a46a58575" +checksum = "a8204235f635274dba4adc30c47ac896fd126ddfc53b27210676722423cbb2e7" dependencies = [ "either", - "lexical", + "new_debug_unreachable", "num-bigint", + "num-traits", + "phf", "serde", "smallvec", "smartstring", @@ -1288,9 +1402,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.217.14" +version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22012722f4fddf1ccc9855c04e1887a11824cecf46c27fff16de56a3daeec3b" +checksum = "bae99435503b117b96ffe1030976270c6ec6bdb6f5c62fcb2ce63674b48b1465" dependencies = [ "swc_atoms", "swc_common", @@ -1305,13 +1419,13 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.126.10" +version = "0.143.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907d73e5a76ddb21f33a3f5907c46c9df968ee52ba0d9f8d6ade43e8f06233a3" +checksum = "c42fbe4136575bd475b08ca15be5262fafbcf85a8a8b34e8364bbf405a7fc7fc" dependencies = [ "better_scoped_tls", - "bitflags 2.1.0", - "indexmap", + "bitflags 2.6.0", + "indexmap 2.2.6", "once_cell", "phf", "rustc-hash", @@ -1328,26 +1442,24 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_macros" -version = "0.5.1" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d5ac69b681fc5438f9abf82b0fda34fe04e119bc75f8213b7e01128c7c9a2" +checksum = "500a1dadad1e0e41e417d633b3d6d5de677c9e0d3159b94ba3348436cdb15aab" dependencies = [ - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "swc_ecma_transforms_optimization" -version = "0.186.14" +version = "0.204.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5fb60aa2e6c5c4f401ace0a8ac9ed21fa130d8f9918e22a9cf87a7c31f456d" +checksum = "3d7f9a903d6774d3f9005775badc25817296791ffed560f1b7e38aab62ca37ff" dependencies = [ - "ahash", "dashmap", - "indexmap", + "indexmap 2.2.6", "once_cell", "petgraph", "rustc-hash", @@ -1366,19 +1478,18 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.172.13" +version = "0.189.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524bf7df90558cc643a3f367c79e9b476b81b92990dc5df3c31febbd7110875a" +checksum = "d411add563dd86d50b3db6e74e38def06587fa2fd370b430f71226688bfa6ded" dependencies = [ - "ahash", - "base64 0.13.1", + "base64 0.21.7", "dashmap", - "indexmap", + "indexmap 2.2.6", "once_cell", - "regex", "serde", - "sha-1", + "sha1", "string_enum", + "swc_allocator", "swc_atoms", "swc_common", "swc_config", @@ -1392,10 +1503,11 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.176.13" +version = "0.194.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b9b4384e78d27819237123b161c439d6fbb75ff55da532e6df809ebc73cf48" +checksum = "93d6987ab1a21e5b4946123d5f79ce824c3522377d4cf01feb3a4c2501d90105" dependencies = [ + "ryu-js", "serde", "swc_atoms", "swc_common", @@ -1408,14 +1520,15 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.116.8" +version = "0.133.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba86ab0cf8c64043dcc8ac5cb4f438f6e3666ddac58587925ddc2af6be2ed5d1" +checksum = "b079450bb200a8fd5127dd061700a403618172901e759eeb6aa427358a415159" dependencies = [ - "indexmap", + "indexmap 2.2.6", "num_cpus", "once_cell", "rustc-hash", + "ryu-js", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -1426,10 +1539,11 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.89.4" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecb23a4a1d77997f54e9b3a4e68d1441e5e8a25ad1a476bbb3b5a620d6562a86" +checksum = "ed8026e4d9abcb75d511bf7623d49e8e135f02f4f9a6bb7c115df8239cfe3d4f" dependencies = [ + "new_debug_unreachable", "num-bigint", "swc_atoms", "swc_common", @@ -1440,9 +1554,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.227.16" +version = "0.248.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4e66757d724625deb2833df5e72434775aab5c622481cbaeef5c8207d97981" +checksum = "4ebf2bae2ef4d717bb87c9e6552b78226c0c37674033102de06afc88c5992a3b" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -1454,23 +1568,22 @@ dependencies = [ [[package]] name = "swc_eq_ignore_macros" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c20468634668c2bbab581947bb8c75c97158d5a6959f4ba33df20983b20b4f6" +checksum = "63db0adcff29d220c3d151c5b25c0eabe7e32dd936212b84cdaa1392e3130497" dependencies = [ - "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "swc_fast_graph" -version = "0.19.4" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992a92e087f7b2dc9aa626a6bee26530abbffba3572adf3894ccb55d2480f596" +checksum = "d78cdaedc56703bb852a84434aae862ead825fbcfb65e83bc53d50b91d6405b5" dependencies = [ - "indexmap", + "indexmap 2.2.6", "petgraph", "rustc-hash", "swc_common", @@ -1478,21 +1591,20 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e582c3e3c2269238524923781df5be49e011dbe29cf7683a2215d600a562ea6" +checksum = "378577b6caa62da3a206e8f91ebba501ed03b3f719c493ccc28fca8b3f1f4b6b" dependencies = [ - "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "swc_visit" -version = "0.5.5" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1d5999f23421c8e21a0f2bc53a0b9e8244f3b421de89471561af2fbe40b9cca" +checksum = "52e2acde04c355dc8ffd62c56f263ba61a94b5c6d21ce2cdeaf857b5d74451a6" dependencies = [ "either", "swc_visit_macros", @@ -1500,16 +1612,15 @@ dependencies = [ [[package]] name = "swc_visit_macros" -version = "0.5.6" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeed7eb0f545f48ad30f5aab314e5208b735bcea1d1464f26e20f06db904989" +checksum = "92807d840959f39c60ce8a774a3f83e8193c658068e6d270dbe0a05e40e90b41" dependencies = [ "Inflector", - "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] @@ -1525,35 +1636,41 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "textwrap" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -1566,11 +1683,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1578,29 +1694,29 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.71", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] [[package]] name = "triomphe" -version = "0.1.8" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ee9bd9239c339d714d657fac840c6d2a4f9c45f4f9ec7b0975113458be78db" +checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" dependencies = [ "serde", "stable_deref_trait", @@ -1614,54 +1730,72 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-id" -version = "0.3.3" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" + +[[package]] +name = "unicode-id-start" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" +checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" + [[package]] name = "version_check" version = "0.9.4" @@ -1674,6 +1808,72 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wee_alloc" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "memory_units", + "winapi", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1692,11 +1892,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys", ] [[package]] @@ -1707,37 +1907,23 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", + "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", @@ -1746,51 +1932,77 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "yaml-rust" -version = "0.4.5" +name = "wyz" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ - "linked-hash-map", + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", ] diff --git a/Cargo.toml b/Cargo.toml index ed0c483996d..f92a0a02909 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ members = [ "packages/qwik/src/napi", + "packages/qwik/src/wasm", "packages/qwik/src/optimizer/cli", "packages/qwik/src/optimizer/core", ] diff --git a/Makefile b/Makefile index ecd034c0035..c559d008b4d 100644 --- a/Makefile +++ b/Makefile @@ -19,18 +19,19 @@ fix: cargo fmt check: - cargo fmt -- --check && cargo check + cargo fmt -- --check && cargo check --all-features lint: - cargo clippy + cargo clippy --all-features && cargo check --all-features && cargo fmt -- --check +# We only test core because there are no other tests and qwik-napi breaks the build test: - cargo test + cargo test --manifest-path packages/qwik/src/optimizer/core/Cargo.toml test-update: - if ! cargo test; then \ + if ! cargo test --manifest-path packages/qwik/src/optimizer/core/Cargo.toml; then \ cd packages/qwik/src/optimizer/core/src/snapshots/ && for i in *.new; do f=$$(basename $$i .new); mv $$i $$f; done; \ - cargo test; \ + cargo test --manifest-path packages/qwik/src/optimizer/core/Cargo.toml; \ fi publish-core: diff --git a/README.md b/README.md index fa6832fc62f..1736c749ca5 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,18 @@ bun create qwik@latest

-

- - - - Made with love by Builder.io - - -

+ + + + + + + +
special sponsor
+ + + + Special sponsor Builder.io + + +
diff --git a/flake.lock b/flake.lock index 45d1750e6f0..a1e73124bbe 100644 --- a/flake.lock +++ b/flake.lock @@ -1,30 +1,12 @@ { "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1714906307, - "narHash": "sha256-UlRZtrCnhPFSJlDQE7M0eyhgvuuHBTe1eJ9N9AQlJQ0=", + "lastModified": 1721138476, + "narHash": "sha256-+W5eZOhhemLQxelojLxETfbFbc19NWawsXBlapYpqIA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "25865a40d14b3f9cf19f19b924e2ab4069b09588", + "rev": "ad0b5eed1b6031efaed382844806550c3dcb4206", "type": "github" }, "original": { @@ -36,11 +18,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1706487304, - "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "lastModified": 1718428119, + "narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5", "type": "github" }, "original": { @@ -58,15 +40,14 @@ }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1714961776, - "narHash": "sha256-LiIxWRKbm1DZ+7l1a6FMmIO8leQx5yrRLIApCMai1DY=", + "lastModified": 1721355572, + "narHash": "sha256-I4TQ2guV9jTmZsXeWt5HMojcaqNZHII4zu0xIKZEovM=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "f3b20ea4131408ea585bddb1f41f91c4de9499cf", + "rev": "d5bc7b1b21cf937fb8ff108ae006f6776bdb163d", "type": "github" }, "original": { @@ -74,21 +55,6 @@ "repo": "rust-overlay", "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/package.json b/package.json index b0af945cbd0..4bc3ebdfdea 100644 --- a/package.json +++ b/package.json @@ -1,33 +1,67 @@ { "name": "qwik-monorepo", - "version": "2.0.0-0", + "version": "0.0.0-read-qwik-package-json", "comments": { "01": "devDependencies includes reference to @builder.io/qwik: workspace: *. This is needed or e2e tests will fail", "02": " It would be nice to be able to remove this dependency and fix the test.", "03": "devDependencies can't include reference to @builder.io/qwik-city or e2e test will fail." }, "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - }, "syncpack": { "versionGroups": [ + { + "label": "Be lenient in vite versions for prod. v4 is broken, v5 is good", + "dependencyTypes": [ + "prod" + ], + "dependencies": [ + "vite" + ], + "pinVersion": "^5" + }, { "label": "use workspace protocol for local packages and allow patch versions (used in e.g. qwik-react)", "dependencies": [ "$LOCAL" ], "dependencyTypes": [ - "!local" + "!local", + "!dev" ], "pinVersion": "workspace:^" }, + { + "label": "dev: use workspace protocol for local packages - split from prod and peer version group", + "dependencies": [ + "$LOCAL" + ], + "dependencyTypes": [ + "dev" + ], + "pinVersion": "workspace:^" + }, + { + "label": "Separate prod deps from dev deps", + "dependencyTypes": [ + "prod", + "peer" + ] + } + ], + "semverGroups": [ { "label": "Playwright should have the same version as in flake.nix", "dependencies": [ "@playwright/test" ], "pinVersion": "1.40.0" + }, + { + "label": "use exact version numbers for devDependencies", + "dependencyTypes": [ + "dev" + ], + "range": "" } ] } @@ -53,76 +87,76 @@ "esbuild-plugin-raw": "^0.1.8" }, "devDependencies": { - "@builder.io/partytown": "^0.10.2", + "@builder.io/partytown": "0.10.2", "@builder.io/qwik": "workspace:^", "@builder.io/qwik-city": "workspace:^", - "@clack/prompts": "^0.7.0", - "@eslint/eslintrc": "^3.0.2", - "@mdx-js/mdx": "^3.0.1", + "@changesets/cli": "2.27.7", + "@changesets/get-github-info": "0.6.0", + "@changesets/types": "6.0.0", + "@clack/prompts": "0.7.0", + "@eslint/eslintrc": "3.1.0", + "@mdx-js/mdx": "3.0.1", "@microsoft/api-documenter": "7.24.2", "@microsoft/api-extractor": "7.43.1", - "@napi-rs/cli": "^2.18.2", - "@napi-rs/triples": "^1.2.0", - "@node-rs/helper": "^1.6.0", + "@napi-rs/cli": "2.18.4", + "@napi-rs/triples": "1.2.0", + "@node-rs/helper": "1.6.0", "@octokit/action": "6.1.0", "@playwright/test": "1.40.0", - "@types/brotli": "^1.3.4", - "@types/bun": "^1.1.3", - "@types/cross-spawn": "^6.0.6", - "@types/eslint": "^8.56.10", - "@types/express": "^4.17.21", - "@types/node": "^20.14.1", - "@types/path-browserify": "^1.0.2", - "@types/prompts": "^2.4.9", - "@types/react": "^18.3.3", - "@types/semver": "^7.5.8", - "@types/which-pm-runs": "^1.0.2", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", - "@typescript-eslint/rule-tester": "^7.8.0", - "@typescript-eslint/utils": "^7.8.0", - "@vitest/ui": "^1.6.0", + "@types/brotli": "1.3.4", + "@types/bun": "1.1.6", + "@types/cross-spawn": "6.0.6", + "@types/eslint": "8.56.10", + "@types/express": "4.17.21", + "@types/node": "20.14.11", + "@types/path-browserify": "1.0.2", + "@types/prompts": "2.4.9", + "@types/react": "18.3.3", + "@types/semver": "7.5.8", + "@types/which-pm-runs": "1.0.2", + "@typescript-eslint/eslint-plugin": "7.16.1", + "@typescript-eslint/parser": "7.16.1", "all-contributors-cli": "6.26.1", "brotli": "1.3.3", - "commitizen": "4.3.0", - "concurrently": "^8.2.2", + "concurrently": "8.2.2", "create-qwik": "workspace:^", "cross-spawn": "7.0.3", - "csstype": "^3.1.3", - "cz-conventional-changelog": "3.3.0", - "esbuild": "^0.20.2", - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1", + "csstype": "3.1.3", + "dotenv": "16.4.5", + "esbuild": "0.20.2", + "eslint": "8.57.0", + "eslint-plugin-import": "2.29.1", "eslint-plugin-no-only-tests": "3.1.0", "eslint-plugin-qwik": "workspace:^", "execa": "8.0.1", "express": "4.19.2", - "install": "^0.13.0", - "monaco-editor": "^0.45.0", + "install": "0.13.0", + "monaco-editor": "0.45.0", "mri": "1.2.0", "path-browserify": "1.0.1", - "prettier": "^3.2.5", - "prettier-plugin-jsdoc": "^1.3.0", - "pretty-quick": "^4.0.0", + "prettier": "3.3.3", + "prettier-plugin-jsdoc": "1.3.0", + "pretty-quick": "4.0.0", "prompts": "2.4.2", - "rollup": "^4.17.2", - "semver": "7.6.0", - "snoop": "^1.0.4", + "rollup": "4.19.0", + "semver": "7.6.3", + "simple-git-hooks": "2.11.1", + "snoop": "1.0.4", "source-map": "0.7.4", - "svgo": "^3.2.0", - "syncpack": "^12.3.1", - "terser": "^5.31.0", - "tsm": "^2.3.0", + "svgo": "3.3.2", + "syncpack": "12.3.3", + "terser": "5.31.3", + "tsm": "2.3.0", "typescript": "5.4.5", - "vfile": "^6.0.1", - "vite": "^5.2.11", - "vite-imagetools": "^6.2.9", - "vite-plugin-dts": "^3.9.0", - "vite-tsconfig-paths": "^4.3.2", - "vitest": "^1.6.0", + "vfile": "6.0.1", + "vite": "5.3.5", + "vite-imagetools": "7.0.4", + "vite-plugin-dts": "3.9.1", + "vite-tsconfig-paths": "4.3.2", + "vitest": "2.0.5", "watchlist": "0.3.1", "which-pm-runs": "1.1.0", - "zod": "^3.23.8" + "zod": "3.22.4" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0", @@ -134,7 +168,7 @@ "pnpm": { "overrides": { "typescript": "5.4.5", - "vfile": "^6.0.1", + "vfile": "6.0.1", "sharp": ">=0.33", "@supabase/realtime-js": "2.8.4" }, @@ -146,6 +180,7 @@ "scripts": { "api.update": "tsm scripts/index.ts --tsc --api --dev", "build": "tsm scripts/index.ts", + "build.changelog-formatter": "tsc .changeset/changelog-github-custom.ts && mv .changeset/changelog-github-custom.js .changeset/changelog-github-custom.cjs", "build.clean": "rm -rf packages/qwik/dist/ && rm -rf packages/qwik-city/lib/ && rm -rf packages/docs/dist/ && rm -rf packages/insights/dist/ && rm -rf packages/qwik-labs/lib/ && rm -rf packages/qwik-labs/vite/", "build.cli": "tsm scripts/index.ts --cli --dev", "build.cli.prod": "tsm scripts/index.ts --cli", @@ -155,7 +190,7 @@ "build.local": "tsm scripts/index.ts --tsc --tsc-docs --build --supabaseauthhelpers --api --eslint --qwikcity --qwikworker --qwiklabs --qwikreact --qwikauth --cli --platform-binding-wasm-copy", "build.only_javascript": "tsm scripts/index.ts --tsc --build --api", "build.packages.docs": "pnpm -C ./packages/docs/ run build", - "build.packages.insights": "tsm ./scripts/patch-workspace-packages.ts && pnpm -C ./packages/insights/ run build", + "build.packages.insights": "pnpm -C ./packages/insights/ run build", "build.platform": "tsm scripts/index.ts --platform-binding", "build.platform.copy": "tsm scripts/index.ts --platform-binding-wasm-copy", "build.qwik-city": "tsm scripts/index.ts --tsc --qwikcity", @@ -163,29 +198,33 @@ "build.vite": "tsm scripts/index.ts --tsc --build --api --qwikcity --eslint --qwiklabs --platform-binding-wasm-copy", "build.wasm": "tsm scripts/index.ts --wasm", "build.watch": "tsm scripts/index.ts --build --qwikcity --watch --dev --platform-binding", + "change": "changeset", "cli": "pnpm build.cli && node packages/create-qwik/dist/create-qwik.cjs && tsm scripts/validate-cli.ts --copy-local-qwik-dist", - "cli.qwik": "pnpm build.cli && node packages/qwik/qwik-cli.cjs", + "cli.qwik": "pnpm build.cli && node packages/qwik/dist/qwik-cli.cjs", "cli.validate": "tsm scripts/validate-cli.ts", - "commit": "git-cz", "deps": "corepack pnpm upgrade -i -r --latest && syncpack fix-mismatches && corepack pnpm dedupe", - "docs.dev": "cd packages/docs && pnpm dev", + "docs.dev": "cd packages/docs && pnpm build.repl-sw && pnpm dev", "docs.preview": "cd packages/docs && pnpm preview", "docs.sync": "tsm scripts/docs_sync/index.ts && pnpm fmt", "eslint.update": "tsm scripts/eslint-docs.ts", "fmt": "pnpm prettier.fix && pnpm syncpack format", "fmt.staged": "pretty-quick --staged", - "link.dist": "cd packages/qwik/dist && pnpm link --global && cd ../../qwik-city/lib && pnpm link --global && cd ../../eslint-plugin-qwik/dist && pnpm link --global && cd ../../qwik-react && pnpm link --global", - "link.dist.npm": "cd packages/qwik/dist && npm link && cd ../../qwik-city/lib && npm link && cd ../../eslint-plugin-qwik/dist && npm link && cd ../../qwik-react && npm link", - "link.dist.yarn": "cd packages/qwik/dist && yarn link && cd ../../qwik-city/lib && yarn link && cd ../../eslint-plugin-qwik/dist && yarn link && cd ../../qwik-react && yarn link", + "link.dist": "cd packages/qwik && pnpm link --global && cd ../../qwik-city && pnpm link --global && cd ../../eslint-plugin-qwik && pnpm link --global && cd ../../qwik-react && pnpm link --global", + "link.dist.npm": "cd packages/qwik && npm link && cd ../../qwik-city && npm link && cd ../../eslint-plugin-qwik && npm link && cd ../../qwik-react && npm link", + "link.dist.yarn": "cd packages/qwik && yarn link && cd ../../qwik-city && yarn link && cd ../../eslint-plugin-qwik && yarn link && cd ../../qwik-react && yarn link", "lint": "pnpm lint.eslint && pnpm lint.prettier && pnpm lint.rust", "lint.eslint": "eslint --cache \"**/*.ts*\"", "lint.fix": "eslint --fix \"**/*.ts*\" && pnpm prettier.fix", "lint.prettier": "prettier --cache --check .", "lint.rust": "make lint", + "lint.syncpack": "syncpack list-mismatches", "preinstall": "npx only-allow pnpm", + "prepare": "simple-git-hooks", "prettier.fix": "prettier --cache --write .", "qwik-save-artifacts": "tsm ./scripts/qwik-save-artifacts.ts", - "release.prepare": "pnpm lint && pnpm test.unit --run && tsm scripts/index.ts --tsc --build --api --eslint --platform-binding --wasm --prepare-release", + "release": "changeset publish", + "release.pkg-pr-new": "pnpm dlx pkg-pr-new@^0.0.9 publish --compact --pnpm ./packages/qwik ./packages/qwik-city ./packages/eslint-plugin-qwik ./packages/create-qwik", + "release.prepare": "pnpm build --prepare-release", "serve": "tsm --inspect --conditions=development starters/dev-server.ts 3300", "serve.debug": "tsm --inspect-brk --conditions=development starters/dev-server.ts 3300", "start": "concurrently \"npm:build.watch\" \"npm:tsc.watch\" -n build,tsc -c green,cyan", @@ -208,5 +247,8 @@ "update.qwik.builds": "tsm scripts/update-qwik-builds.ts packages/docs && tsm scripts/update-qwik-builds.ts packages/insights; pnpm install", "vitest": "vitest" }, + "simple-git-hooks": { + "pre-commit": "pnpm pretty-quick --staged" + }, "type": "module" } diff --git a/packages/create-qwik/.npmignore b/packages/create-qwik/.npmignore new file mode 100644 index 00000000000..85de9cf9334 --- /dev/null +++ b/packages/create-qwik/.npmignore @@ -0,0 +1 @@ +src diff --git a/packages/create-qwik/CHANGELOG.md b/packages/create-qwik/CHANGELOG.md new file mode 100644 index 00000000000..329f7261de2 --- /dev/null +++ b/packages/create-qwik/CHANGELOG.md @@ -0,0 +1,21 @@ +# create-qwik + +## 1.8.0 + +### Patch Changes + +- 🐞🩹 wrong version when creating a library (by [@shairez](https://github.com/shairez) in [#6757](https://github.com/QwikDev/qwik/pull/6757)) + +## 1.7.3 + +### Patch Changes + +- 🐞🩹 get the right version number in starter apps (by [@shairez](https://github.com/shairez) in [#6742](https://github.com/QwikDev/qwik/pull/6742)) + +## 1.7.2 + +### Patch Changes + +- - built files are now under dist/ or lib/. All tools that respect package export maps should just work. (by [@wmertens](https://github.com/wmertens) in [#6715](https://github.com/QwikDev/qwik/pull/6715)) + If you have trouble with Typescript, ensure that you use `moduleResolution: "Bundler"` in your `tsconfig.json`. + - `@builder.io/qwik` no longer depends on `undici` diff --git a/packages/create-qwik/create-qwik.cjs b/packages/create-qwik/create-qwik.cjs index 8f9084e4b3d..28182bf4a1b 100755 --- a/packages/create-qwik/create-qwik.cjs +++ b/packages/create-qwik/create-qwik.cjs @@ -1,3 +1,3 @@ #!/usr/bin/env node -const createQwik = require('./index.cjs'); +const createQwik = require('./dist/index.cjs'); createQwik.runCli(); diff --git a/packages/create-qwik/package.json b/packages/create-qwik/package.json index fdc19eec838..8665dcb1d0f 100644 --- a/packages/create-qwik/package.json +++ b/packages/create-qwik/package.json @@ -6,8 +6,8 @@ "bin": "./create-qwik.cjs", "bugs": "https://github.com/QwikDev/qwik/issues", "devDependencies": { - "@clack/prompts": "^0.7.0", - "@types/yargs": "^17.0.32", + "@clack/prompts": "0.7.0", + "@types/yargs": "17.0.32", "kleur": "4.1.5", "yargs": "17.7.2" }, @@ -19,9 +19,9 @@ }, "engines-annotation": "Mostly required by sharp which needs a Node-API v9 compatible runtime", "files": [ + "README.md", "create-qwik.cjs", - "index.cjs", - "starters/" + "dist" ], "homepage": "https://qwik.dev/", "keywords": [ @@ -32,7 +32,7 @@ "template" ], "license": "MIT", - "main": "./index.cjs", + "main": "./dist/index.cjs", "repository": { "type": "git", "url": "https://github.com/QwikDev/qwik.git", diff --git a/packages/create-qwik/src/helpers/jokes.json b/packages/create-qwik/src/helpers/jokes.json index 08eb71b78b7..c21ee88aa59 100644 --- a/packages/create-qwik/src/helpers/jokes.json +++ b/packages/create-qwik/src/helpers/jokes.json @@ -1,75 +1,11 @@ [ - ["Dad, can you put my shoes on?", "I don't think they'll fit me."], - ["What do ghosts call their true love?", "Their ghoul-friend"], - ["How do the trees get on the internet?", "They log on."], - ["Lady: How do I spread love in this cruel world?", "Random Dude: [...💘]"], - ["How do you find Will Smith in the snow?", " Look for fresh prints."], - ["Why did the mushroom get invited to the party?", "Because he was a fungi."], - ["Why is peter pan always flying?", "Because he neverlands"], - ["How do you know if there’s an elephant under your bed?", "Your head hits the ceiling!"], - ["How do you fix a broken pizza?", "With tomato paste."], - ["Why did the butcher work extra hours at the shop?", "To make ends meat."], - ["What time is it?", "I don't know... it keeps changing."], - ["What did the traffic light say to the car as it passed?", "Don't look I'm changing!"], - ["What do you call someone with no nose?", "Nobody knows."], - ["Why did the worker get fired from the orange juice factory?", "Lack of concentration."], - ["What did the say to the ?", "Nice belt."], - ["What animal is always at a game of cricket?", "A bat."], - ["Why did the tomato blush?", "Because it saw the salad dressing."], - ["What’s E.T. short for?", "He’s only got little legs."], - ["What did the beaver say to the tree?", "It's been nice gnawing you."], - ["What do you call a girl between two posts?", "Annette."], - ["What do you call a boomerang that won't come back?", "A stick."], - ["What do you do on a remote island?", "Try and find the TV island it belongs to."], - ["Why did the barber win the race?", "He took a short cut."], - ["Do you want a brief explanation of what an acorn is?", "In a nutshell, it's an oak tree."], - ["What do you call a belt made out of watches?", "A waist of time."], - ["How many lips does a flower have?", "Tulips"], - ["Did you hear about the guy who invented Lifesavers?", "They say he made a mint."], - ["I Got Hit In the Head By A Soda Can, But It Didn't Hurt That Much...", "It was a soft drink."], - [ - "When a dad drives past a graveyard: Did you know that's a popular cemetery?", - "Yep, people are just dying to get in there" - ], - ["What did the fish say when it hit the wall?", "Dam."], - ["Want to hear a joke about a piece of paper?", "Never mind...it's tearable"], - ["What did the big flower say to the littler flower?", "Hi, bud!"], - ["What's the best thing about elevator jokes?", "They work on so many levels."], - ["Why can't your nose be inches long?", "Because then it'd be a foot!"], - ["Why does Superman get invited to dinners?", "Because he is a Supperhero."], - ["What's red and bad for your teeth?", "A Brick."], - [ - "What's the difference between a guitar and a fish?", - "You can tune a guitar but you can't \"tuna\" fish!" - ], - ["Why did the coffee file a police report?", "It got mugged."], - ["What do you do when you see a space man?", "Park your car, man."], - ["What do you give a sick lemon?", "Lemonaid."], - ["Where do rabbits go after they get married?", "On a bunny-moon."], - ["What creature is smarter than a talking parrot?", "A spelling bee."], - ["How does the moon cut his hair?", "Eclipse it."], - ["What do you get when you cross a chicken with a skunk?", "A fowl smell!"], - ["Why do crabs never give to charity?", "Because they’re shellfish."], - ["did you know the first French fries weren't cooked in France?", "they were cooked in Greece"], - [ - "Did you hear that the police have a warrant out on a midget psychic ripping people off?", - "It reads \"Small medium at large.\"" - ], - ["A termite walks into a bar and says...", "'Where is the bar tended?'"], - [ - "Why do chicken coops only have two doors?", - "Because if they had four, they would be chicken sedans" - ], ["What's the best thing about a Boolean?", "Even if you're wrong, you're only off by a bit."], - [ - "If you put a million monkeys at a million keyboards, one of them will eventually write a Java program", - "the rest of them will write Perl" - ], + ["Why did the developer stay at home?", "Because he couldn't find his keys."], ["How many programmers does it take to change a lightbulb?", "None that's a hardware problem"], ["A user interface is like a joke.", "If you have to explain it then it is not that good."], ["['hip', 'hip']", "(hip hip array)"], - ["A SQL query walks into a bar, walks up to two tables and asks...", "'Can I join you?'"], - ["Which song would an exception sing?", "Can't catch me - Avicii"], + ["A SQL query goes into a bar, walks up to two tables and asks:", "'Can I JOIN you?'"], + ["Why did the developer go to therapy?", "He had too many unresolved issues."], [ "Why do C# and Java developers keep breaking their keyboards?", "Because they use a strongly typed language." @@ -80,90 +16,49 @@ ["To understand what recursion is...", "You must first understand what recursion is"], ["The punchline often arrives before the set-up.", "Do you know the problem with UDP jokes?"], ["Why did the programmer quit his job?", "Because he didn't get arrays."], - ["How do you check if a webpage is HTML?", "Try it out on Internet Explorer"], + ["Why was the computer tired when it got home?", "It had a hard drive."], [ "There are 10 types of people in this world...", "Those who understand binary and those who don't" ], - ["Why do programmers always mix up Halloween and Christmas?", "Because Oct == Dec "], + ["Why do programmers always mix up Halloween and Christmas?", "Because Oct 31 == Dec 25"], ["I was gonna tell you a joke about UDP...", "...but you might not get it."], - ["How do you get a squirrel to like you", " Act like a nut."], - ["Why did the math book look so sad", " Because of all of its problems!"], - ["What's the best way to watch a fly fishing tournament", " Live stream."], - ["Why couldn't the bicycle stand up by itself", " It was two tired."], - ["Why did the scarecrow win an award", " Because he was outstanding in his field."], - ["I ordered a chicken and an egg online. I’ll let you know.", " I’ll let you know"], - ["How do you make a Kleenex dance", " Put a little boogie in it!"], - [ - "I'm reading a book about anti-gravity. It's impossible to put down!", - " It's impossible to put down!" - ], - ["Why can't you hear a psychiatrist using the bathroom", " Because the 'P' is silent."], - ["I like telling Dad jokes. Sometimes he laughs!", " Sometimes he laughs!"], - [ - "I'm so good at sleeping, I can do it with my eyes closed!", - " I can do it with my eyes closed!" - ], - ["How do you make a tissue dance", " You put a little boogie in it."], - ["What do you call cheese that isn't yours", " Nacho cheese."], - ["What kind of shoes do ninjas wear", " Sneakers!"], - ["What do you call a fake noodle", " An impasta."], - ["I made a pencil with two erasers. It was pointless.", " It was pointless"], - ["I've got a great joke about construction, but I'm still working on it.", ""], - ["Did I tell you the time I fell in love during a backflip", " I was heels over head!"], - ["What’s an astronaut’s favorite part of a computer", " The space bar."], - ["What time did the man go to the dentist", " Tooth hurt-y."], - [ - "It's inappropriate to make a 'dad joke' if you're not a dad. It's a faux pa.", - " It's a faux pa" - ], - ["What did the fish say when he hit the wall", " Dam."], - ["I don't trust stairs. They're always up to something.", " They're always up to something"], - ["What do you call someone with no body and no nose", " Nobody knows."], - ["Did you hear the rumor about butter", " Well, I'm not going to spread it!"], - ["I used to hate facial hair...but then it grew on me.", null], - ["What's brown and sticky", " A stick."], - ["Can February March", " No, but April May!"], - ["Don't trust atoms. They make up everything!", " They make up everything!"], - ["Why don't eggs tell jokes", " They'd crack each other up."], - ["Did you hear about the circus fire", " It was in tents."], - ["How do lawyers say goodbye", " We'll be suing ya!"], - ["When does a joke become a dad joke", " When it becomes apparent."], - ["Wanna hear a joke about paper", " Never mind—it's tearable."], - ["What did the coffee report to the police", " A mugging."], - ["Dad, can you put my shoes on", "No, I don't think they'll fit me."], - ["How many tickles does it take to make an octopus laugh", " Ten tickles."], - ["Dad, did you get a haircut", "No, I got them all cut!"], - [ - "My wife is really mad at the fact that I have no sense of direction.", - " So I packed up my stuff and right!" - ], - ["Why do bees have sticky hair", " Because they use a honeycomb."], - ["Which state has the most streets", " Rhode Island."], - ["I'm on a seafood diet. I see food and I eat it.", " I see food and I eat it"], - ["Did you hear about the guy who invented the knock-knock joke", " He won the 'no-bell' prize."], - ["How does a penguin build its house", " Igloos it together."], - ["What do you call an elephant that doesn't matter", " An irrelephant."], - ["I wouldn't buy anything with velcro. It's a total rip-off.", " It's a total rip-off"], - ["Dad, can you put the cat out", "I didn't know it was on fire."], - ["What concert costs just 45 cents", " 50 Cent featuring Nickelback!"], - ["Why are elevator jokes so classic and good", " They work on many levels."], - ["Is this pool safe for diving", " It deep ends."], - ["Knock knock. \n Who's there? \n Cows go. \n Cows go who?", "No, cows go moo."], - [ - "Knock knock. \n Who's there? \n Little old lady. \n Little old lady who?", - "I didn't know you could yodel!" - ], - [ - "Knock knock. \n Who's there? \n A broken pencil. \n A broken pencil who?", - "Never mind. It's pointless." - ], - [ - "Knock knock. \n Who's there? \n Opportunity.", - "That is impossible. Opportunity doesn’t come knocking twice!" - ], - ["Knock knock. \n Who's there? \n Hatch. \n Hatch who?", "Bless you!"], - ["Man said: I changed my Mind, Machine replied: I changed my CPU"], - ["Man said: I dreamed of God, Machine replied: I dreamed of Rust"], - ["Person: give me just a second, Programmer: give me just a 100 milliseconds"] + ["Normal People: give me just a second", "Developers: give me 100 milliseconds!"], + ["Why do programmers prefer dark mode?", "Because light attracts bugs."], + ["Why don't programmers like nature?", "It has too many bugs."], + ["Why was the computer freezing?", "It left its Windows open!"], + ["What did the Java code say to the C code?", "You've got no class."], + ["Why do programmers prefer the outdoors?", "Because it's free of bugs."], + ["Why do programmers love movies?", "Because they can 'script' the ending."], + ["why do desert animals hate Qwik?", "Because there's no hydration...."], + ["What can you do if you cannot push your git changes?", "Use the --force, Luke"], + ["How did the developer announce he's getting married?", "'She returned true!'"], + ["How many Prolog programmers does it take to change a lightbulb?", "Yes."], + ["Why did the developer ground their kid?", "They weren't telling the truthy"], + ["!false", "It's funny 'cause it's true."], + ["Where did the parallel function wash its hands?", "Async"], + ["How do functions break up?", "They stop calling each other"], + ["Why did the functions stop calling each other?", "Because they had constant arguments."], + ["What's the second movie about a database engineer called?", "The SQL."], + ["What did the computer do at lunchtime?", "NoSQL."], + ["Why doesn't Hollywood make more Big Data movies?", "Had a byte!"], + ["What does a baby computer call his father?", "Data!"], + ["I never tell the same joke twice", "I have a DRY sense of humor."], + ["How do programming pirates pass method parameters?", "ARRRRRGS."], + ["Why don't bachelors like Git?", "Because they are afraid to commit."], + ["Why do astronauts use Linux?", "They can't open Windows in space!"], + ["How do front end devs like their brownies?", "GUI"], + ["What do hackers do on a boat?", "Phishing."], + ["Why couldn't the HTML list be trusted?", "There were LI's everywhere"], + ["To the person who invented zero:", "Thank's for nothing!"], + ["What do you call a bee that lives in America?", "A USB"], + ["want about to a race conditions hear joke?", ""], + ["What is a Package Managers favorite holiday?", "Dependency Day"], + ["Where do we get all of these dad jokes from?", "A dad-a-base!"], + ["What advice do you give to a JS developer who has never played baseball?", "Try catch."], + ["We don't have any DNS jokes, know why?", "Because it may take 24 hours to get them"], + ["Why do Front-End Developers eat lunch alone?", "Because they don't know how to join tables."], + ["How do you help JS errors?", "You `console` them!"], + ["When do front end developers go out to eat?", "On their lunch
."], + ["What do you call optimistic front-end developers?", "Stack half-full developers."] ] diff --git a/packages/create-qwik/src/run-create-interactive-cli.ts b/packages/create-qwik/src/run-create-interactive-cli.ts index d467a97afef..788bf5228be 100644 --- a/packages/create-qwik/src/run-create-interactive-cli.ts +++ b/packages/create-qwik/src/run-create-interactive-cli.ts @@ -43,7 +43,10 @@ export async function runCreateInteractiveCli(): Promise { throw new Error('Base app not found'); } - const starterApps = templateManager.templates.filter((a) => a.id !== baseApp.id); + // sorted alphabetically + const starterApps = templateManager.templates + .filter((a) => a.id !== baseApp.id) + .sort((a, b) => a.name.localeCompare(b.name)); const outDir: string = resolveRelativeDir(projectNameAnswer.trim()); baseApp.target = outDir; diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore index 9d3903b727d..2f759a2e1db 100644 --- a/packages/docs/.gitignore +++ b/packages/docs/.gitignore @@ -3,10 +3,9 @@ build dist server functions/**/*.js - -# Bundled files for REPL -# Managed by check-qwik-build.ts -public/repl/bundled +# This is used in dev mode because service +# workers don't support imports +public/repl/repl-sw.js* !src/routes/api/qwik/server/ diff --git a/packages/docs/check-qwik-build.ts b/packages/docs/check-qwik-build.ts index ebcecad8981..d00fd1967be 100644 --- a/packages/docs/check-qwik-build.ts +++ b/packages/docs/check-qwik-build.ts @@ -1,4 +1,5 @@ // verify that ../qwik/dist/core.d.ts exists or run `pnpm run build.core` in the root directory +// Also make sure that the repl-sw.js file is present, for dev mode // we need it for development and for the REPL import fs from 'fs'; import path from 'path'; @@ -22,11 +23,11 @@ if (!fs.existsSync(path.join(qwikPkgDir, 'core.d.ts'))) { } } -if (!fs.existsSync(path.join(__dirname, 'dist', 'repl', '~repl-server-host.js'))) { +if (!fs.existsSync(path.join(__dirname, 'public', 'repl', 'repl-sw.js'))) { console.warn( - `\n\n=== Running 'pnpm run build.client' to generate missing REPL service worker dist/repl/~repl-server-host.js ===\n` + `\n\n=== Running 'pnpm run build.repl-sw' to generate missing REPL service worker public/repl/repl-sw.js ===\n` ); - const out = spawnSync('pnpm', ['run', 'build.client'], { + const out = spawnSync('pnpm', ['run', 'build.repl-sw'], { stdio: 'inherit', }); if (out.status !== 0) { diff --git a/packages/docs/global.d.ts b/packages/docs/global.d.ts new file mode 100644 index 00000000000..ffeb16c9915 --- /dev/null +++ b/packages/docs/global.d.ts @@ -0,0 +1,5 @@ +// handled by raw-source plugin in vite.repl-apps.ts +declare module '*?raw-source' { + const url: string; + export default url; +} diff --git a/packages/docs/package.json b/packages/docs/package.json index fd750c2e5a2..6925eb24b85 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -7,46 +7,55 @@ "devDependencies": { "@algolia/autocomplete-core": "1.7.4", "@algolia/client-search": "4.14.3", - "@builder.io/partytown": "^0.10.2", + "@builder.io/partytown": "0.10.2", "@builder.io/qwik": "workspace:^", "@builder.io/qwik-city": "workspace:^", "@builder.io/qwik-labs": "workspace:^", "@builder.io/qwik-react": "workspace:^", - "@docsearch/css": "^3.5.2", - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", - "@mui/material": "^5.15.14", - "@mui/system": "^5.15.14", - "@mui/x-data-grid": "^6.19.6", - "@supabase/supabase-js": "^2.39.8", - "@types/prismjs": "^1.26.3", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", + "@builder.io/sdk-qwik": "0.14.31", + "@docsearch/css": "3.6.1", + "@emotion/react": "11.13.0", + "@emotion/styled": "11.13.0", + "@modular-forms/qwik": "0.23.1", + "@mui/material": "5.16.4", + "@mui/system": "5.16.4", + "@mui/x-data-grid": "6.20.4", + "@qwik-ui/headless": "0.5.0", + "@supabase/supabase-js": "2.44.4", + "@types/leaflet": "1.9.12", + "@types/prismjs": "1.26.4", + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "@unpic/core": "0.0.42", + "@unpic/qwik": "0.0.38", "algoliasearch": "4.16.0", - "autoprefixer": "^10.4.19", - "fflate": "^0.8.2", + "autoprefixer": "10.4.19", + "fflate": "0.8.2", "gray-matter": "4.0.3", - "openai": "^3.3.0", - "postcss": "^8.4.37", - "prettier": "^3.2.5", + "leaflet": "1.9.4", + "magic-string": "0.30.11", + "openai": "3.3.0", + "postcss": "8.4.39", + "prettier": "3.3.3", "prism-themes": "1.9.0", "prismjs": "1.29.0", - "puppeteer": "^22.6.0", + "puppeteer": "22.13.1", "qwik-image": "0.0.14-alpha", "react": "18.3.1", "react-dom": "18.3.1", - "rehype-pretty-code": "^0.11.0", - "shiki": "^0.14.7", - "shikiji": "^0.7.0 || ^0.8.0 || ^0.9.0", - "snarkdown": "^2.0.0", - "tailwindcss": "^3.4.3", - "terser": "^5.31.0", - "tsm": "^2.3.0", + "rehype-pretty-code": "0.11.0", + "shiki": "0.14.7", + "shikiji": "0.9.19", + "snarkdown": "2.0.0", + "tailwindcss": "3.4.6", + "terser": "5.31.3", + "tsm": "2.3.0", "typescript": "5.4.5", - "valibot": "^0.29.0", - "vite": "^5.2.11", - "vite-plugin-inspect": "^0.8.4", - "wrangler": "^3.53.1" + "undici": "*", + "valibot": "0.33.3", + "vite": "5.3.5", + "vite-plugin-inspect": "0.8.5", + "wrangler": "3.65.1" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0", @@ -60,8 +69,9 @@ "scripts": { "build": "qwik build", "build.client": "vite build", - "build.preview": "vite build --ssr src/entry.preview.tsx", - "build.server": "vite build -c adapters/cloudflare-pages/vite.config.mts", + "build.preview": "NODE_OPTIONS=--max-old-space-size=8192 vite build --ssr src/entry.preview.tsx", + "build.repl-sw": "vite --config vite.config-repl-sw.mts build", + "build.server": "NODE_OPTIONS=--max-old-space-size=8192 vite build -c adapters/cloudflare-pages/vite.config.mts", "build.showcase": "pnpm node scripts/showcase.js", "codesandbox.sync": "tsm codesandbox.sync.ts", "contributors": "tsm contributors.ts", diff --git a/packages/docs/public/ecosystem/aws.svg b/packages/docs/public/ecosystem/aws.svg index 80192a12d8c..ba5e401f536 100644 --- a/packages/docs/public/ecosystem/aws.svg +++ b/packages/docs/public/ecosystem/aws.svg @@ -3,7 +3,7 @@ diff --git a/packages/docs/public/showcases/qit_tools_.webp b/packages/docs/public/showcases/qit_tools_.webp new file mode 100644 index 00000000000..66762ff1584 Binary files /dev/null and b/packages/docs/public/showcases/qit_tools_.webp differ diff --git a/packages/docs/public/showcases/sakenowa_com.webp b/packages/docs/public/showcases/sakenowa_com.webp new file mode 100644 index 00000000000..1ee2eaacdcd Binary files /dev/null and b/packages/docs/public/showcases/sakenowa_com.webp differ diff --git a/packages/docs/public/showcases/www_placementpreparation_io_.webp b/packages/docs/public/showcases/www_placementpreparation_io_.webp new file mode 100644 index 00000000000..9d8b5d74efd Binary files /dev/null and b/packages/docs/public/showcases/www_placementpreparation_io_.webp differ diff --git a/packages/docs/scripts/pages.json b/packages/docs/scripts/pages.json index 4d173a951d7..c3d08f502d7 100644 --- a/packages/docs/scripts/pages.json +++ b/packages/docs/scripts/pages.json @@ -195,5 +195,13 @@ { "href": "https://qit.tools/", "tags": "online,tools,converters" + }, + { + "href": "https://www.placementpreparation.io/", + "tags": "aptitude,learning,platform" + }, + { + "href": "https://sakenowa.com", + "tags": "sns,app" } ] diff --git a/packages/docs/src/components/docsearch/doc-search.tsx b/packages/docs/src/components/docsearch/doc-search.tsx index 81a83a0f894..4a809788590 100644 --- a/packages/docs/src/components/docsearch/doc-search.tsx +++ b/packages/docs/src/components/docsearch/doc-search.tsx @@ -7,6 +7,8 @@ import { createContextId, useContextProvider, type Signal, + $, + sync$, } from '@builder.io/qwik'; import type { DocSearchHit, InternalDocSearchHit } from './types'; import { type ButtonTranslations, DocSearchButton } from './doc-search-button'; @@ -75,39 +77,44 @@ export const DocSearch = component$((props: DocSearchProps) => { return (
{ - function open() { - // We check that no other DocSearch modal is showing before opening - // another one. - if (!document.body.classList.contains('DocSearch--active')) { - state.isOpen = true; + window:onKeyDown$={[ + sync$((event: KeyboardEvent) => { + if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); } - } - if ( - (event.key === 'Escape' && state.isOpen) || - // The `Cmd+K` shortcut both opens and closes the modal. - (event.key === 'k' && (event.metaKey || event.ctrlKey)) || - // The `/` shortcut opens but doesn't close the modal because it's - // a character. - (!isEditingContent(event) && event.key === '/' && !state.isOpen) - ) { - // FIXME: not able to prevent - // event.preventDefault(); - - if (state.isOpen) { - state.isOpen = false; - } else if (!document.body.classList.contains('DocSearch--active')) { - open(); + }), + $((event) => { + function open() { + // We check that no other DocSearch modal is showing before opening + // another one. + if (!document.body.classList.contains('DocSearch--active')) { + state.isOpen = true; + } + } + if ( + (event.key === 'Escape' && state.isOpen) || + // The `Cmd+K` shortcut both opens and closes the modal. + (event.key === 'k' && (event.metaKey || event.ctrlKey)) || + // The `/` shortcut opens but doesn't close the modal because it's + // a character. + (!isEditingContent(event) && event.key === '/' && !state.isOpen) + ) { + event.preventDefault(); + if (state.isOpen) { + state.isOpen = false; + } else if (!document.body.classList.contains('DocSearch--active')) { + open(); + } } - } - if (searchButtonRef && searchButtonRef.value === document.activeElement) { - if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) { - state.isOpen = true; - state.initialQuery = event.key; + if (searchButtonRef && searchButtonRef.value === document.activeElement) { + if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) { + state.isOpen = true; + state.initialQuery = event.key; + } } - } - }} + }), + ]} > { @@ -49,7 +50,9 @@ export const Result = component$( .filter(Boolean) .join(' ')} > - +
{/* @ts-ignore */} @@ -98,7 +101,7 @@ export const Result = component$( )}
-
+ ); } diff --git a/packages/docs/src/components/on-this-page/on-this-page.tsx b/packages/docs/src/components/on-this-page/on-this-page.tsx index 11bba4db89c..58971bb81ce 100644 --- a/packages/docs/src/components/on-this-page/on-this-page.tsx +++ b/packages/docs/src/components/on-this-page/on-this-page.tsx @@ -1,5 +1,5 @@ import { useContent, useLocation } from '@builder.io/qwik-city'; -import { component$, useContext, useStyles$ } from '@builder.io/qwik'; +import { component$, useContext, $, useStyles$, useOnDocument, useSignal } from '@builder.io/qwik'; import { ChatIcon } from '../svgs/chat-icon'; import { GithubLogo } from '../svgs/github-logo'; import { TwitterLogo } from '../svgs/twitter-logo'; @@ -124,6 +124,45 @@ export const OnThisPage = component$(() => { }, ]; + const useActiveItem = (itemIds: string[]) => { + const activeId = useSignal(null); + useOnDocument( + 'scroll', + $(() => { + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + activeId.value = entry.target.id; + } + }); + }, + { rootMargin: '0% 0% -80% 0%' } + ); + + itemIds.forEach((id) => { + const element = document.getElementById(id); + if (element) { + observer.observe(element); + } + }); + + return () => { + itemIds.forEach((id) => { + const element = document.getElementById(id); + if (element) { + observer.unobserve(element); + } + }); + }; + }) + ); + + return activeId; + }; + + const activeId = useActiveItem(contentHeadings.map((h) => h.id)); + return (
diff --git a/packages/docs/src/repl/repl-options.tsx b/packages/docs/src/repl/repl-options.tsx index 22f38d49063..5e952bee7fb 100644 --- a/packages/docs/src/repl/repl-options.tsx +++ b/packages/docs/src/repl/repl-options.tsx @@ -70,7 +70,8 @@ const StoreOption = (props: StoreOptionProps) => { export const BUILD_MODE_OPTIONS = ['development', 'production']; -export const ENTRY_STRATEGY_OPTIONS = ['component', 'hook', 'single', 'smart', 'inline', 'hoist']; +// We don't support `inline` and `hoist` for client bundles +export const ENTRY_STRATEGY_OPTIONS = ['component', 'segment', 'single', 'smart']; interface StoreOptionProps { label: string; diff --git a/packages/docs/src/repl/repl-output-modules.tsx b/packages/docs/src/repl/repl-output-modules.tsx index 1dd190a2f68..7c1468358fc 100644 --- a/packages/docs/src/repl/repl-output-modules.tsx +++ b/packages/docs/src/repl/repl-output-modules.tsx @@ -1,14 +1,12 @@ -import { $, useStore, component$ } from '@builder.io/qwik'; +import { $, component$, useSignal } from '@builder.io/qwik'; import { CodeBlock } from '../components/code-block/code-block'; -import type { PathInView, ReplModuleOutput } from './types'; -const FILE_MODULE_DIV_ID = 'file-modules-client-buisness'; +import type { ReplModuleOutput } from './types'; +const FILE_MODULE_DIV_ID = 'file-modules-client-modules'; export const ReplOutputModules = component$(({ outputs, headerText }: ReplOutputModulesProps) => { - const store = useStore({ - selectedPath: outputs.length ? outputs[0].path : '', - }); + const selectedPath = useSignal(outputs.length ? outputs[0].path : ''); const pathInView$ = $((path: string) => { - store.selectedPath = path; + selectedPath.value = path; }); return ( ))}
{outputs.map((o, i) => ( -
+
{o.path} {o.size ? ({o.size}) : null} diff --git a/packages/docs/src/repl/repl-output-symbols.tsx b/packages/docs/src/repl/repl-output-symbols.tsx index af141accd29..0457c21a2a7 100644 --- a/packages/docs/src/repl/repl-output-symbols.tsx +++ b/packages/docs/src/repl/repl-output-symbols.tsx @@ -1,15 +1,12 @@ import type { TransformModule } from '@builder.io/qwik/optimizer'; import { CodeBlock } from '../components/code-block/code-block'; -import { $, useStore, component$ } from '@builder.io/qwik'; -import type { PathInView } from './types'; +import { $, component$, useSignal } from '@builder.io/qwik'; const FILE_MODULE_DIV_ID = 'file-modules-symbol'; export const ReplOutputSymbols = component$(({ outputs }: ReplOutputSymbolsProps) => { - const store = useStore({ - selectedPath: outputs.length ? outputs[0].path : '', - }); + const selectedPath = useSignal(outputs.length ? outputs[0].path : ''); const pathInView$ = $((path: string) => { - store.selectedPath = path; + selectedPath.value = path; }); return ( @@ -22,47 +19,28 @@ export const ReplOutputSymbols = component$(({ outputs }: ReplOutputSymbolsProps { - const fileItem = document.querySelector(`[data-file-item="${i}"]`); + const fileItem = document.querySelector(`[data-symbol-item="${i}"]`); if (fileItem) { - store.selectedPath = o.path; - fileItem.scrollIntoView(); + selectedPath.value = o.path; + fileItem.scrollIntoView({ behavior: 'smooth' }); } }} - class={{ - 'in-view': store.selectedPath && store.selectedPath === o.path, - '!hidden': true, - 'md:!block': true, - }} + class={{ 'in-view': selectedPath.value === o.path }} preventdefault:click > - {o.hook?.canonicalFilename} + {o.segment?.canonicalFilename} -
-
-
- {o.hook?.canonicalFilename} -
-
- -
-
-
))}
-