Merge pull request #5 from ion-design/codex/open-source-readiness

[codex] Prepare repo for open source
This commit is contained in:
Samraaj Bath
2026-06-29 16:22:59 -07:00
committed by GitHub
28 changed files with 1461 additions and 574 deletions
+18
View File
@@ -0,0 +1,18 @@
* text=auto eol=lf
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.webp binary
*.webm binary
*.mp4 binary
*.pdf binary
*.zip binary
*.tgz binary
*.gz binary
*.woff binary
*.woff2 binary
*.ttf binary
*.otf binary
+2
View File
@@ -0,0 +1,2 @@
# Default maintainer review for repository-wide changes.
* @Samraaj
+4
View File
@@ -25,3 +25,7 @@ labels: bug
**Logs / artifacts**
<!-- Relevant output, the validation report, or a run dir. For a "perfect score",
check it isn't a blocked/degenerate capture (capture.pollution / capture.blocked). -->
**Responsible disclosure**
<!-- Do not include secrets, cookies, private URLs, proprietary captures, or security
vulnerabilities here. Report vulnerabilities privately via SECURITY.md. -->
+3
View File
@@ -3,3 +3,6 @@ contact_links:
- name: Security vulnerability
url: https://github.com/ion-design/ditto.site/security/advisories/new
about: Please report security issues privately — do not open a public issue.
- name: Support policy
url: https://github.com/ion-design/ditto.site/blob/main/SUPPORT.md
about: Read what information to include and what support expectations apply.
@@ -17,3 +17,7 @@ labels: enhancement
**Scope notes**
<!-- Does this touch the deterministic compiler (clone fidelity/gates) or only the
service layer? Anything that affects clone output should stay deterministic. -->
**Responsible-use impact**
<!-- Note any safeguards needed for public clone endpoints, third-party captures,
brand/trademark confusion, or abuse prevention. -->
+7
View File
@@ -10,8 +10,15 @@
- [ ] `npm run typecheck` passes
- [ ] `npm test` passes
- [ ] `npm audit --omit=dev --audit-level=moderate` passes, or residuals are explained
- [ ] Added/updated tests for the change
## Open-source readiness
- [ ] Documentation updated where behavior, setup, deployment, or support expectations changed
- [ ] No secrets, private URLs, proprietary captures, or generated artifacts were committed
- [ ] Change follows the responsible-use policy
## Compiler determinism
- [ ] No change to the compiler's deterministic clone semantics, **or** the change
+4
View File
@@ -5,9 +5,13 @@ on:
branches: ["**"]
pull_request:
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 45
services:
postgres:
image: postgres:16
+13
View File
@@ -6,6 +6,19 @@ so minor/patch semantics are not yet guaranteed.
## [Unreleased]
### Added — Open-source readiness
- Added support, release, responsible-use, CODEOWNERS, and gitattributes files.
- Made workspace package metadata explicit for license and repository scanners.
- Tightened contributor and PR checklists around runtime audit, documentation,
responsible use, and committed artifacts.
### Changed — Generated app dependency templates
- Updated generated Next apps to the current Next 15 line with React 19.
- Updated generated Vite apps to Vite 6.4 with React 19, keeping the generated
app Node floor compatible with the repo's `>=20` engine policy.
### Added — Service layer (REST + MCP API)
A hosted service around the deterministic compiler, as an npm-workspaces monorepo
+6 -1
View File
@@ -7,7 +7,7 @@ fixtures double as the regression suite.
## Setup
```bash
npm install # installs all workspaces
npm ci # installs the locked workspace graph
npx playwright install chromium # for capture / browser-gated tests
```
@@ -31,9 +31,13 @@ npx playwright install chromium # for capture / browser-gated tests
service is a wrapper; clone output must stay byte-deterministic (rubric Gate 6).
Golden-file tests rely on this.
- Every change should keep `npm run typecheck` and `npm test` green.
- Keep runtime dependencies clean with `npm audit --omit=dev --audit-level=moderate`.
- Database schema changes: edit `packages/db/src/schema.ts`, then
`npm run db:generate` to produce a migration, and commit it.
- Keep new code in the style of the surrounding code (naming, comments, idiom).
- Follow [docs/RESPONSIBLE_USE.md](docs/RESPONSIBLE_USE.md). Changes that make
phishing, impersonation, access-control bypass, or unbounded third-party
capture easier are not acceptable.
## Database migrations
@@ -52,6 +56,7 @@ npm run db:migrate # applies to $DATABASE_URL
include benchmark results (`npm run bench`).
By participating you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md).
Support expectations are documented in [SUPPORT.md](SUPPORT.md).
## Reporting bugs & security issues
+16 -2
View File
@@ -60,7 +60,7 @@ recipes still need a stable target.
## Quickstart
```bash
npm install
npm ci
npx playwright install chromium
# Single-page clone, Tailwind output by default.
@@ -92,6 +92,10 @@ npm run validate-site -- runs/site-example.com/<timestamp> --validate-concurrenc
The root scripts forward into the `compiler` workspace. Running the same commands
from `compiler/` also works.
The repository is MIT-licensed open source. The npm workspaces are intentionally
marked `private` for now because the source package boundaries are available for
contributors, but the packages are not yet prepared for public npm publishing.
Multi-page generation defaults to the fast no-validation path. For production
delivery, keep first response and QA as separate phases: run single-page first,
expand to multi-page with default CLI behavior or service `verify:false`, then
@@ -318,6 +322,15 @@ entrance animations remain outside the deterministic contract unless a safe,
observable recipe exists. Unsupported motion is frozen rather than shipped as a
broken imitation.
## Responsible Use
Use ditto.site only where you have the right to inspect, copy, transform, and
operate on the target content. Do not use it for phishing, impersonation,
credential capture, bypassing access controls, or high-volume third-party
capture without permission.
See [docs/RESPONSIBLE_USE.md](docs/RESPONSIBLE_USE.md) for the project policy.
## Contributing
Use `npm run typecheck` and `npm test` before opening a PR. Browser tests require
@@ -326,7 +339,8 @@ stack. Changes that alter compiler output should include focused fixture or
benchmark evidence.
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). For questions and support expectations,
see [SUPPORT.md](SUPPORT.md).
## License
+16 -4
View File
@@ -33,7 +33,19 @@ See [`docs/DEPLOY.md`](docs/DEPLOY.md) and [`docs/SERVICE.md`](docs/SERVICE.md).
## Dependency advisories
Dependencies are monitored by [Dependabot](.github/dependabot.yml). One known item:
the compiler's build harness and the **generated** app pin `next@14.2.21`, which has
a published advisory. Bumping it should be paired with a benchmark re-run (it affects
`next build` and the emitted `package.json`), so it's tracked rather than auto-applied.
Dependencies are monitored by [Dependabot](.github/dependabot.yml). Use
`npm audit --omit=dev --audit-level=moderate` for runtime dependency checks.
Known residual items:
- A full `npm audit` reports a moderate `esbuild` advisory through
`drizzle-kit -> @esbuild-kit/esm-loader -> @esbuild-kit/core-utils`. This is a
development-only migration generator path. The audit-suggested downgrade to
`drizzle-kit@0.18.1` breaks the current `drizzle-kit generate` workflow, so do
not run `npm audit fix --force` blindly.
- Generated Next.js apps use the current Next 15 line instead of the older 14.x
template. npm may still report a moderate PostCSS advisory inherited through
Next until the upstream package carries a patched PostCSS version.
Generated apps are static exports by default. Review and update their
`package.json` before operating them as long-lived public services.
+36
View File
@@ -0,0 +1,36 @@
# Support
ditto.site is an open-source project maintained on a best-effort basis.
## Questions
Use GitHub issues for concrete questions that are tied to this repository:
- setup problems that reproduce from a clean checkout,
- CLI, REST, MCP, or worker behavior,
- compiler output that looks wrong for a public, reproducible URL,
- documentation gaps that block a contributor.
Before opening an issue, search existing issues and include the command, URL,
options, Node version, operating system, and any run artifact or validation
report that helps reproduce the problem.
## Bugs And Feature Requests
Use the GitHub issue templates:
- Bug reports: [new bug report](https://github.com/ion-design/ditto.site/issues/new?template=bug_report.md)
- Feature requests: [new feature request](https://github.com/ion-design/ditto.site/issues/new?template=feature_request.md)
If a report involves a specific site, include only public URLs and scrub any
private credentials, cookies, internal hostnames, or proprietary content.
## Security
Do not open public issues for vulnerabilities. Follow [SECURITY.md](SECURITY.md)
and report privately through GitHub security advisories or email.
## Maintainer Expectations
There is no guaranteed response time or support SLA. Clear reproduction steps,
small examples, and focused pull requests are the fastest path to resolution.
+927 -282
View File
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -6,18 +6,18 @@
"build": "next build"
},
"dependencies": {
"next": "14.2.21",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.5.19",
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.3.4",
"@vitejs/plugin-react": "^4.7.0",
"@tailwindcss/postcss": "^4.3.1",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5",
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"tailwindcss": "^4.3.1",
"typescript": "5.7.3",
"vite": "^5.4.11"
"vite": "^6.4.3"
}
}
+5 -5
View File
@@ -4,14 +4,14 @@
"private": true,
"scripts": { "build": "next build" },
"dependencies": {
"next": "14.2.21",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.5.19",
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"typescript": "5.7.3",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5"
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3"
}
}
+12
View File
@@ -2,6 +2,18 @@
"name": "clone-static",
"version": "0.1.0",
"private": true,
"description": "Deterministic website compiler CLI and library for ditto.site.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "compiler"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"bin": {
"clone-static": "./src/cli.ts"
+22 -22
View File
@@ -2528,15 +2528,15 @@ export const PACKAGE_JSON = `{
"start": "next start"
},
"dependencies": {
"next": "14.2.21",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.5.19",
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"typescript": "5.7.3",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5"
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3"
}
}
`;
@@ -2552,15 +2552,15 @@ export const PACKAGE_JSON_TW = `{
"start": "next start"
},
"dependencies": {
"next": "14.2.21",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.5.19",
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"typescript": "5.7.3",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5",
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"tailwindcss": "^4",
"@tailwindcss/postcss": "^4"
}
@@ -2578,16 +2578,16 @@ export const PACKAGE_JSON_VITE = `{
"start": "vite preview"
},
"dependencies": {
"react": "18.3.1",
"react-dom": "18.3.1"
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.3.4",
"vite": "^5.4.11",
"@vitejs/plugin-react": "^4.7.0",
"vite": "^6.4.3",
"typescript": "5.7.3",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5"
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3"
}
}
`;
@@ -2603,16 +2603,16 @@ export const PACKAGE_JSON_VITE_TW = `{
"start": "vite preview"
},
"dependencies": {
"react": "18.3.1",
"react-dom": "18.3.1"
"react": "19.2.7",
"react-dom": "19.2.7"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.3.4",
"vite": "^5.4.11",
"@vitejs/plugin-react": "^4.7.0",
"vite": "^6.4.3",
"typescript": "5.7.3",
"@types/node": "22.10.5",
"@types/react": "18.3.18",
"@types/react-dom": "18.3.5",
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"tailwindcss": "^4",
"@tailwindcss/postcss": "^4"
}
+30
View File
@@ -0,0 +1,30 @@
# Releasing
ditto.site is pre-1.0. The repository is MIT-licensed, but the npm workspaces are
marked `private` until the package boundaries and distribution story are ready
for public npm publishing.
## Release Checklist
1. Start from a clean `main` checkout.
2. Run `npm ci` and `npx playwright install chromium`.
3. Run `npm run typecheck` and `npm test`.
4. Run `npm audit --omit=dev --audit-level=moderate` for runtime dependencies.
5. For compiler-output changes, run focused fixtures or benchmarks and record
the result in the pull request.
6. Update [CHANGELOG.md](../CHANGELOG.md), moving relevant entries out of
`Unreleased`.
7. Update package versions if a source release is being tagged.
8. Create an annotated Git tag and GitHub release.
## Versioning
Until `1.0.0`, minor and patch versions may include breaking changes. Document
user-facing breakage in the changelog and prefer migration notes when the change
affects generated output, API shape, database schema, or deployment settings.
## Publishing
Do not remove `private: true` from workspaces as part of a routine source
release. Publishing to npm needs a separate review of package names, build
artifacts, export maps, provenance, and long-term API compatibility.
+46
View File
@@ -0,0 +1,46 @@
# Responsible Use
ditto.site compiles observed public web pages into self-contained application
code. That capability is useful for migration, testing, research, preservation,
accessibility review, and design-system analysis, but it can also be misused.
Use this project only where you have the right to inspect, copy, transform, and
operate on the target content.
## Acceptable Use
- Clone sites you own, maintain, or have permission to analyze.
- Use public examples for research, benchmarking, compatibility tests, or bug
reports when the output is not represented as the original publisher's
official site.
- Respect robots, rate limits, terms of service, trademarks, and copyright.
- Keep generated output clearly separated from the original brand or publisher
unless you are authorized to represent them.
- Remove private data, credentials, customer information, and internal URLs from
captures, artifacts, logs, and issues before sharing them.
## Prohibited Use
- Do not use ditto.site for phishing, impersonation, credential capture, fraud,
malware delivery, or brand confusion.
- Do not bypass authentication, paywalls, access controls, bot protections, or
technical restrictions.
- Do not clone private, confidential, or personal data without authorization.
- Do not run high-volume capture jobs against third-party sites without
permission.
- Do not use generated output to infringe copyrights, trademarks, or licenses.
## Public Service Deployments
A hosted clone endpoint is a fetch-any-URL system. Keep the protections described
in [SECURITY.md](../SECURITY.md) enabled:
- SSRF protection stays on in production.
- API keys and rate limits are configured.
- Worker concurrency is sized so capture jobs do not overload targets or your
own infrastructure.
- Artifacts have an expiration, access policy, or deletion path appropriate for
the data they may contain.
Maintainers may close issues, remove examples, or decline changes that would
make misuse materially easier.
+198 -244
View File
@@ -24,6 +24,7 @@
"compiler": {
"name": "clone-static",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"pixelmatch": "5.3.0",
"playwright": "1.56.1",
@@ -1447,13 +1448,6 @@
}
}
},
"node_modules/@petamoriken/float16": {
"version": "3.9.3",
"resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.9.3.tgz",
"integrity": "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==",
"dev": true,
"license": "MIT"
},
"node_modules/@smithy/core": {
"version": "3.26.0",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.26.0.tgz",
@@ -1885,26 +1879,25 @@
}
},
"node_modules/drizzle-kit": {
"version": "0.30.6",
"resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.30.6.tgz",
"integrity": "sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==",
"version": "0.31.10",
"resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz",
"integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@drizzle-team/brocli": "^0.10.2",
"@esbuild-kit/esm-loader": "^2.5.5",
"esbuild": "^0.19.7",
"esbuild-register": "^3.5.0",
"gel": "^2.0.0"
"esbuild": "^0.25.4",
"tsx": "^4.21.0"
},
"bin": {
"drizzle-kit": "bin.cjs"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
"integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
"cpu": [
"ppc64"
],
@@ -1915,13 +1908,13 @@
"aix"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/android-arm": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
"integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
"integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
"cpu": [
"arm"
],
@@ -1932,13 +1925,13 @@
"android"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
"integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
"integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
"cpu": [
"arm64"
],
@@ -1949,13 +1942,13 @@
"android"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/android-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
"integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
"integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
"cpu": [
"x64"
],
@@ -1966,13 +1959,13 @@
"android"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
"integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
"integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
"cpu": [
"arm64"
],
@@ -1983,13 +1976,13 @@
"darwin"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
"integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
"integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
"cpu": [
"x64"
],
@@ -2000,13 +1993,13 @@
"darwin"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
"integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
"integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
"cpu": [
"arm64"
],
@@ -2017,13 +2010,13 @@
"freebsd"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
"integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
"integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
"cpu": [
"x64"
],
@@ -2034,13 +2027,13 @@
"freebsd"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
"integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
"integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
"cpu": [
"arm"
],
@@ -2051,13 +2044,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
"integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
"integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
"cpu": [
"arm64"
],
@@ -2068,13 +2061,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
"integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
"integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
"cpu": [
"ia32"
],
@@ -2085,13 +2078,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
"integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
"integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
"cpu": [
"loong64"
],
@@ -2102,13 +2095,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
"integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
"integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
"cpu": [
"mips64el"
],
@@ -2119,13 +2112,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
"integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
"integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
"cpu": [
"ppc64"
],
@@ -2136,13 +2129,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
"integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
"integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
"cpu": [
"riscv64"
],
@@ -2153,13 +2146,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
"integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
"integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
"cpu": [
"s390x"
],
@@ -2170,13 +2163,13 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
"integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
"cpu": [
"x64"
],
@@ -2187,13 +2180,30 @@
"linux"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/netbsd-arm64": {
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
"integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
"integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
"integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
"cpu": [
"x64"
],
@@ -2204,13 +2214,30 @@
"netbsd"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/openbsd-arm64": {
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
"integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
"integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
"integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
"cpu": [
"x64"
],
@@ -2221,13 +2248,30 @@
"openbsd"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/openharmony-arm64": {
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
"integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"engines": {
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
"integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
"integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
"cpu": [
"x64"
],
@@ -2238,13 +2282,13 @@
"sunos"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
"integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
"integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
"cpu": [
"arm64"
],
@@ -2255,13 +2299,13 @@
"win32"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
"integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
"integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
"cpu": [
"ia32"
],
@@ -2272,13 +2316,13 @@
"win32"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
"integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
"integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
"cpu": [
"x64"
],
@@ -2289,13 +2333,13 @@
"win32"
],
"engines": {
"node": ">=12"
"node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/esbuild": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
"integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2303,38 +2347,41 @@
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
"node": ">=18"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.19.12",
"@esbuild/android-arm": "0.19.12",
"@esbuild/android-arm64": "0.19.12",
"@esbuild/android-x64": "0.19.12",
"@esbuild/darwin-arm64": "0.19.12",
"@esbuild/darwin-x64": "0.19.12",
"@esbuild/freebsd-arm64": "0.19.12",
"@esbuild/freebsd-x64": "0.19.12",
"@esbuild/linux-arm": "0.19.12",
"@esbuild/linux-arm64": "0.19.12",
"@esbuild/linux-ia32": "0.19.12",
"@esbuild/linux-loong64": "0.19.12",
"@esbuild/linux-mips64el": "0.19.12",
"@esbuild/linux-ppc64": "0.19.12",
"@esbuild/linux-riscv64": "0.19.12",
"@esbuild/linux-s390x": "0.19.12",
"@esbuild/linux-x64": "0.19.12",
"@esbuild/netbsd-x64": "0.19.12",
"@esbuild/openbsd-x64": "0.19.12",
"@esbuild/sunos-x64": "0.19.12",
"@esbuild/win32-arm64": "0.19.12",
"@esbuild/win32-ia32": "0.19.12",
"@esbuild/win32-x64": "0.19.12"
"@esbuild/aix-ppc64": "0.25.12",
"@esbuild/android-arm": "0.25.12",
"@esbuild/android-arm64": "0.25.12",
"@esbuild/android-x64": "0.25.12",
"@esbuild/darwin-arm64": "0.25.12",
"@esbuild/darwin-x64": "0.25.12",
"@esbuild/freebsd-arm64": "0.25.12",
"@esbuild/freebsd-x64": "0.25.12",
"@esbuild/linux-arm": "0.25.12",
"@esbuild/linux-arm64": "0.25.12",
"@esbuild/linux-ia32": "0.25.12",
"@esbuild/linux-loong64": "0.25.12",
"@esbuild/linux-mips64el": "0.25.12",
"@esbuild/linux-ppc64": "0.25.12",
"@esbuild/linux-riscv64": "0.25.12",
"@esbuild/linux-s390x": "0.25.12",
"@esbuild/linux-x64": "0.25.12",
"@esbuild/netbsd-arm64": "0.25.12",
"@esbuild/netbsd-x64": "0.25.12",
"@esbuild/openbsd-arm64": "0.25.12",
"@esbuild/openbsd-x64": "0.25.12",
"@esbuild/openharmony-arm64": "0.25.12",
"@esbuild/sunos-x64": "0.25.12",
"@esbuild/win32-arm64": "0.25.12",
"@esbuild/win32-ia32": "0.25.12",
"@esbuild/win32-x64": "0.25.12"
}
},
"node_modules/drizzle-orm": {
"version": "0.38.4",
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.38.4.tgz",
"integrity": "sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==",
"version": "0.45.2",
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz",
"integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==",
"license": "Apache-2.0",
"peerDependencies": {
"@aws-sdk/client-rds-data": ">=3",
@@ -2345,24 +2392,24 @@
"@neondatabase/serverless": ">=0.10.0",
"@op-engineering/op-sqlite": ">=2",
"@opentelemetry/api": "^1.4.1",
"@planetscale/database": ">=1",
"@planetscale/database": ">=1.13",
"@prisma/client": "*",
"@tidbcloud/serverless": "*",
"@types/better-sqlite3": "*",
"@types/pg": "*",
"@types/react": ">=18",
"@types/sql.js": "*",
"@upstash/redis": ">=1.34.7",
"@vercel/postgres": ">=0.8.0",
"@xata.io/client": "*",
"better-sqlite3": ">=7",
"bun-types": "*",
"expo-sqlite": ">=14.0.0",
"gel": ">=2",
"knex": "*",
"kysely": "*",
"mysql2": ">=2",
"pg": ">=8",
"postgres": ">=3",
"react": ">=18",
"sql.js": ">=1",
"sqlite3": ">=5"
},
@@ -2406,10 +2453,10 @@
"@types/pg": {
"optional": true
},
"@types/react": {
"@types/sql.js": {
"optional": true
},
"@types/sql.js": {
"@upstash/redis": {
"optional": true
},
"@vercel/postgres": {
@@ -2427,6 +2474,9 @@
"expo-sqlite": {
"optional": true
},
"gel": {
"optional": true
},
"knex": {
"optional": true
},
@@ -2445,9 +2495,6 @@
"prisma": {
"optional": true
},
"react": {
"optional": true
},
"sql.js": {
"optional": true
},
@@ -2485,19 +2532,6 @@
"node": ">= 0.8"
}
},
"node_modules/env-paths": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
"integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@@ -2570,19 +2604,6 @@
"@esbuild/win32-x64": "0.28.1"
}
},
"node_modules/esbuild-register": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz",
"integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
"peerDependencies": {
"esbuild": ">=0.12 <1"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -2765,27 +2786,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gel": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/gel/-/gel-2.2.0.tgz",
"integrity": "sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@petamoriken/float16": "^3.8.7",
"debug": "^4.3.4",
"env-paths": "^3.0.0",
"semver": "^7.6.2",
"shell-quote": "^1.8.1",
"which": "^4.0.0"
},
"bin": {
"gel": "dist/cli.mjs"
},
"engines": {
"node": ">= 18.0.0"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -2947,16 +2947,6 @@
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
"node_modules/isexe": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
"integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=18"
}
},
"node_modules/jose": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz",
@@ -3445,19 +3435,6 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
"node_modules/semver": {
"version": "7.8.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/send": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
@@ -3545,19 +3522,6 @@
"node": ">=8"
}
},
"node_modules/shell-quote": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz",
"integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
@@ -3785,22 +3749,6 @@
"node": ">= 0.8"
}
},
"node_modules/which": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
"integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^3.1.1"
},
"bin": {
"node-which": "bin/which.js"
},
"engines": {
"node": "^16.13.0 || >=18.0.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -3837,6 +3785,7 @@
"packages/api": {
"name": "@cloner/api",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"@cloner/core": "*",
"@cloner/db": "*",
@@ -3856,6 +3805,7 @@
"packages/core": {
"name": "@cloner/core",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"clone-static": "*"
},
@@ -3869,8 +3819,9 @@
"packages/db": {
"name": "@cloner/db",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"drizzle-orm": "^0.38.3",
"drizzle-orm": "^0.45.2",
"pg": "^8.13.1",
"pg-boss": "^10.1.5"
},
@@ -3878,7 +3829,7 @@
"@cloner/test-utils": "*",
"@types/node": "22.10.5",
"@types/pg": "^8.11.10",
"drizzle-kit": "^0.30.1",
"drizzle-kit": "^0.31.10",
"tsx": "4.22.4",
"typescript": "5.7.3"
}
@@ -3886,6 +3837,7 @@
"packages/storage": {
"name": "@cloner/storage",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"@aws-sdk/client-s3": "^3.726.0",
"@aws-sdk/s3-request-presigner": "^3.726.0",
@@ -3900,6 +3852,7 @@
"packages/test-utils": {
"name": "@cloner/test-utils",
"version": "0.1.0",
"license": "MIT",
"devDependencies": {
"@types/node": "22.10.5",
"tsx": "4.22.4",
@@ -3909,6 +3862,7 @@
"packages/worker": {
"name": "@cloner/worker",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"@cloner/core": "*",
"@cloner/db": "*",
+1
View File
@@ -25,6 +25,7 @@
"drizzle"
],
"type": "module",
"packageManager": "npm@10.9.2",
"workspaces": [
"compiler",
"packages/*"
+12
View File
@@ -2,6 +2,18 @@
"name": "@cloner/api",
"version": "0.1.0",
"private": true,
"description": "Hono REST and MCP API for ditto.site clone jobs.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/api"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"
+12
View File
@@ -2,6 +2,18 @@
"name": "@cloner/core",
"version": "0.1.0",
"private": true,
"description": "Core compiler adapter and file-map helpers for the ditto.site service.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/core"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"
+16 -4
View File
@@ -2,6 +2,18 @@
"name": "@cloner/db",
"version": "0.1.0",
"private": true,
"description": "Drizzle schema, migrations, repository, and queue integration for ditto.site.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/db"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"
@@ -13,16 +25,16 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"drizzle-orm": "^0.38.3",
"drizzle-orm": "^0.45.2",
"pg": "^8.13.1",
"pg-boss": "^10.1.5"
},
"devDependencies": {
"@cloner/test-utils": "*",
"@types/node": "22.10.5",
"@types/pg": "^8.11.10",
"drizzle-kit": "^0.30.1",
"drizzle-kit": "^0.31.10",
"tsx": "4.22.4",
"typescript": "5.7.3",
"@types/node": "22.10.5"
"typescript": "5.7.3"
}
}
+12
View File
@@ -2,6 +2,18 @@
"name": "@cloner/storage",
"version": "0.1.0",
"private": true,
"description": "Local and S3-compatible artifact storage for ditto.site clone results.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/storage"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"
+12
View File
@@ -2,6 +2,18 @@
"name": "@cloner/test-utils",
"version": "0.1.0",
"private": true,
"description": "Shared fixture server and integration-test helpers for ditto.site workspaces.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/test-utils"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"
+8 -3
View File
@@ -78,9 +78,14 @@ export function serveDir(rootDir: string): Promise<{ url: string; close: () => P
/** Whether a Playwright Chromium browser appears installed (browser tests skip if not). */
export function hasChromium(): boolean {
try {
const base = process.env.PLAYWRIGHT_BROWSERS_PATH || join(homedir(), ".cache", "ms-playwright");
if (!existsSync(base)) return false;
return readdirSync(base).some((d) => d.startsWith("chromium"));
const bases = process.env.PLAYWRIGHT_BROWSERS_PATH
? [process.env.PLAYWRIGHT_BROWSERS_PATH]
: [
join(homedir(), ".cache", "ms-playwright"),
join(homedir(), "Library", "Caches", "ms-playwright"),
...(process.env.LOCALAPPDATA ? [join(process.env.LOCALAPPDATA, "ms-playwright")] : []),
];
return bases.some((base) => existsSync(base) && readdirSync(base).some((d) => d.startsWith("chromium")));
} catch {
return false;
}
+12
View File
@@ -2,6 +2,18 @@
"name": "@cloner/worker",
"version": "0.1.0",
"private": true,
"description": "Queue worker for ditto.site clone generation, storage, and optional verification.",
"license": "MIT",
"author": "ion-design",
"repository": {
"type": "git",
"url": "https://github.com/ion-design/ditto.site.git",
"directory": "packages/worker"
},
"bugs": {
"url": "https://github.com/ion-design/ditto.site/issues"
},
"homepage": "https://github.com/ion-design/ditto.site#readme",
"type": "module",
"exports": {
".": "./src/index.ts"