diff --git a/.github/workflows/cloud-deploy-preview.yml b/.github/workflows/cloud-deploy-preview.yml index 22f68c1a4f..a24f9f00d5 100644 --- a/.github/workflows/cloud-deploy-preview.yml +++ b/.github/workflows/cloud-deploy-preview.yml @@ -3,20 +3,19 @@ name: "[Cloud] Preview Deploy" on: - pull_request: - branches: - - "main" - - "next" - -env: - DOTNET_VERSION: "7.0.x" # set this to the dotnet version to use + workflow_call: + inputs: + baseRef: + required: true + type: string + description: "The base branch to deploy to" defaults: run: working-directory: ./cloud/infrastructure jobs: - build-and-deploy: + build-and-preview: runs-on: ubuntu-latest steps: - name: "Checkout GitHub Action" @@ -31,10 +30,10 @@ jobs: npx mutex wait signalcocloudpreview popd - - name: ✨ Setup DotNet ${{ env.DOTNET_VERSION }} Environment + - name: ✨ Setup DotNet uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + dotnet-version: "7.0.x" - name: ✨ Setup pnpm uses: pnpm/action-setup@v2.4.0 @@ -54,16 +53,21 @@ jobs: - name: 🔎 Determine stack shell: bash run: | - [[ $(echo ${BASE_BRANCH#refs/heads/}) = "main" ]] && echo "##[set-output name=branch;]production" || echo "##[set-output name=branch;]$(echo ${BASE_BRANCH#refs/heads/})" + if [[ $(echo ${BASE_BRANCH#refs/heads/}) = "main" ]] + then + echo "stack=production" >> $GITHUB_OUTPUT + else + echo "stack=${BASE_BRANCH#refs/heads/}" >> $GITHUB_OUTPUT + fi id: extract_branch env: - BASE_BRANCH: ${{ github.base_ref }} + BASE_BRANCH: ${{ inputs.baseRef }} - name: ⚡ Preview Deploy Infrastructure uses: pulumi/actions@v4 with: command: preview - stack-name: signalco/cloud-primary/${{ steps.extract_branch.outputs.branch }} + stack-name: signalco/cloud-primary/${{ steps.extract_branch.outputs.stack }} work-dir: ./cloud/infrastructure comment-on-pr: true env: diff --git a/.github/workflows/companions-maui-build-android.yml b/.github/workflows/companions-maui-build-android.yml index 477f6dc579..86860fad36 100644 --- a/.github/workflows/companions-maui-build-android.yml +++ b/.github/workflows/companions-maui-build-android.yml @@ -43,7 +43,7 @@ jobs: # Delete output directory rm -r "artifacts" - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "artifact-${{ matrix.configuration }}" path: "companion-maui-android-${{ matrix.configuration }}.zip" diff --git a/.github/workflows/global-codeql_analysis.yml b/.github/workflows/global-codeql_analysis.yml index 96e13af3c5..b1729107fe 100644 --- a/.github/workflows/global-codeql_analysis.yml +++ b/.github/workflows/global-codeql_analysis.yml @@ -23,10 +23,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/global-smart-pr.yml b/.github/workflows/global-smart-pr.yml index cc8ce4d233..b24ef1e9a9 100644 --- a/.github/workflows/global-smart-pr.yml +++ b/.github/workflows/global-smart-pr.yml @@ -7,6 +7,7 @@ on: types: [opened, synchronize, reopened] jobs: + # Mark PR as auto-mergeable if it's opened by known user enable_auto_merge_for_known_users: name: "[Global] Enable auto-merge for known users" runs-on: ubuntu-latest @@ -20,4 +21,15 @@ jobs: gh pr comment ${{ github.event.pull_request.number }} --body "🪄 Auto-merge enabled for known user." env: GITHUB_TOKEN: ${{ secrets.AT_GH_CD_REPO_PAT }} + # Retarget to next branch if PR is opened against main (and head is not next) + retarget-feature-prs: + if: github.event_name == 'pull_request' && github.event.action == 'opened' && github.base_ref == 'main' && github.head_ref != 'next' + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎 + uses: actions/checkout@v4 + - name: Change PR target + run: gh pr edit ${{ github.event.number }} --base next + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/global-sync-next-branch.yml b/.github/workflows/global-sync-next-branch.yml index 40f66e0e07..af0da86708 100644 --- a/.github/workflows/global-sync-next-branch.yml +++ b/.github/workflows/global-sync-next-branch.yml @@ -13,7 +13,8 @@ on: concurrency: merge_main jobs: - merge-branch: + # When a PR is merged into main, attempt to merge main into next + sync-next-branch: runs-on: ubuntu-latest steps: - name: Checkout 🛎 @@ -30,4 +31,5 @@ jobs: if: steps.cpr.outputs.pr_created == 'true' run: gh pr merge --merge --auto "${{ steps.cpr.outputs.pr_number }}" env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.github/workflows/nextjs_bundle_analysis_reusable.yml b/.github/workflows/nextjs_bundle_analysis_reusable.yml index 30cf5767f0..48317cfefc 100644 --- a/.github/workflows/nextjs_bundle_analysis_reusable.yml +++ b/.github/workflows/nextjs_bundle_analysis_reusable.yml @@ -1,6 +1,6 @@ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json -name: 'NextJS Bundle Analysis' +name: '[Web] CI - Next.js' on: workflow_call: @@ -17,64 +17,106 @@ on: required: true type: string description: 'Path to the package or application to analzye' + vercelProjectId: + required: true + type: string + description: 'Vercel Project ID' env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: signalco TURBO_REMOTE_ONLY: true - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: ${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }} - CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} - DOPROCESS_DATABASE_HOST: ${{ secrets.DOPROCESS_DATABASE_HOST }} - DOPROCESS_DATABASE_USERNAME: ${{ secrets.DOPROCESS_DATABASE_USERNAME }} - DOPROCESS_DATABASE_PASSWORD: ${{ secrets.DOPROCESS_DATABASE_PASSWORD }} - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + VERCEL_PROJECT_ID: ${{ inputs.vercelProjectId }} + VERCEL_ORG_ID: team_Ade0MlfC3211ml3wYJZ4c9hn defaults: run: working-directory: ./web jobs: - analysis: - name: "[${{ inputs.name }}] Next.js Bundle Analysis" + ci: timeout-minutes: 5 runs-on: ubuntu-latest concurrency: - group: ${{ github.workflow }}-${{ github.ref || github.run_id }}-${{ inputs.name }} - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.ref || github.run_id }}-${{ inputs.name }} + cancel-in-progress: true steps: - uses: actions/checkout@v4 with: fetch-depth: 2 - - name: Setup pnpm + + - name: ✨ Setup pnpm uses: pnpm/action-setup@v2.4.0 with: version: 'latest' - - uses: actions/setup-node@v4 + + - name: ✨ Setup Node.js + uses: actions/setup-node@v4 with: node-version: "20.x" cache: "pnpm" - cache-dependency-path: ./web - - name: Install dependencies + cache-dependency-path: ./web/pnpm-lock.yaml + + - name: 📦️ Install dependencies run: pnpm install --frozen-lockfile --filter ${{ inputs.name }}... --filter . - - name: Build app + - name: 🔎 Lint app + if: success() && github.event_name == 'pull_request' + run: pnpm lint --filter=${{ inputs.name }} + + - name: ✨ Setup Vercel CLI + run: pnpm install --global vercel@latest + + - name: ⚙️ Pull Vercel Environment Information + run: vercel env pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} + working-directory: ${{ inputs.path }}/ + + - name: ⚒️ Build app run: pnpm build --filter=${{ inputs.name }} + + - name: 📦️ Install playwright browsers + if: success() && github.event_name == 'pull_request' + run: | + pnpm install --global playwright + pnpm playwright install --with-deps + + - name: ⚒️ Test app + if: success() && github.event_name == 'pull_request' + run: pnpm test --filter=${{ inputs.name }} + + ## TODO: Enable when stories-check is ready + # - name: Run stories-check + # run: pnpm stories-check + # id: runStoriesCheck + # continue-on-error: true + # working-directory: web/apps/web/ + # - name: Commit changes + # id: ccc + # if: steps.runStoriesCheck.outcome == 'failure' + # uses: EndBug/add-and-commit@v9 + # with: + # add: ".stories-approved" + # message: "[skip ci] [stories-check] Automated stories changes" + # new_branch: ${{ github.head_ref }} + # default_author: github_actions + # env: + # GITHUB_TOKEN: ${{ secrets.AT_GH_CD_REPO_PAT }} # Here's the first place where next-bundle-analysis' own script is used # This step pulls the raw bundle stats for the current bundle - - name: Analyze bundle + - name: 🔎 Analyze bundle run: npx -yes -p github:hashicorp/nextjs-bundle-analysis report working-directory: ${{ inputs.path }}/ - - - name: Upload bundle + + - name: 🔼 Upload bundle uses: actions/upload-artifact@v3 with: name: bundle path: ${{ inputs.path }}/.next/analyze/__bundle_analysis.json - - name: Download base branch bundle stats - uses: dawidd6/action-download-artifact@v2 - if: success() && github.event.number + - name: 🔽 Download base branch bundle stats + uses: dawidd6/action-download-artifact@v3 + if: success() && github.event_name == 'pull_request' with: workflow: ${{ inputs.workflowName }} branch: ${{ github.event.pull_request.base.ref }} @@ -93,42 +135,25 @@ jobs: # # Either of these arguments can be changed or removed by editing the `nextBundleAnalysis` # entry in your package.json file. - - name: Compare with base branch bundle - if: success() && github.event.number + - name: 🔎 Compare with base branch bundle + if: success() && github.event_name == 'pull_request' run: ls -laR .next/analyze/base && npx -yes -p github:hashicorp/nextjs-bundle-analysis compare working-directory: ${{ inputs.path }}/ - - name: Get comment body + - name: 💬 Get comment body id: get-comment-body - if: success() && github.event.number + if: success() && github.event_name == 'pull_request' uses: actions/github-script@v7 with: result-encoding: string script: | const fs = require('fs') - const comment = fs.readFileSync('${{ inputs.path }}/.next/analyze/__bundle_analysis_comment.txt', 'utf8') + "" + const comment = fs.readFileSync('${{ inputs.path }}/.next/analyze/__bundle_analysis_comment.txt', 'utf8') core.setOutput('body', comment) - - name: Find Comment - uses: peter-evans/find-comment@v2 - if: success() && github.event.number - id: fc - with: - issue-number: ${{ github.event.number }} - body-includes: '' - - - name: Create Comment - uses: peter-evans/create-or-update-comment@v3.1.0 - if: success() && github.event.number && steps.fc.outputs.comment-id == 0 - with: - issue-number: ${{ github.event.number }} - body: ${{ steps.get-comment-body.outputs.body }} - - - name: Update Comment - uses: peter-evans/create-or-update-comment@v3.1.0 - if: success() && github.event.number && steps.fc.outputs.comment-id != 0 + - name: 💬 Comment + uses: marocchino/sticky-pull-request-comment@v2 + if: success() && steps.get-comment-body.outputs.body != '' with: - issue-number: ${{ github.event.number }} - body: ${{ steps.get-comment-body.outputs.body }} - comment-id: ${{ steps.fc.outputs.comment-id }} - edit-mode: replace + header: next-touched-pages-${{ inputs.name }} + message: ${{ steps.get-comment-body.outputs.body }} diff --git a/.github/workflows/web-nextjs_bundle_analysis.yml b/.github/workflows/web-nextjs_bundle_analysis.yml index b2d9970622..af01b4ffbb 100644 --- a/.github/workflows/web-nextjs_bundle_analysis.yml +++ b/.github/workflows/web-nextjs_bundle_analysis.yml @@ -1,72 +1,92 @@ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json -name: '[Web] Next.js Bundle Analysis' +name: '[Web] CI' on: pull_request: paths: - 'web/**' + - 'cloud/**' + - '.github/workflows/web-nextjs_bundle_analysis.yml' + - '.github/workflows/nextjs_bundle_analysis_reusable.yml' + - '.github/workflows/cloud-deploy-preview.yml' push: branches: - main - next paths: - 'web/**' + - 'cloud/**' - '.github/workflows/web-nextjs_bundle_analysis.yml' - '.github/workflows/nextjs_bundle_analysis_reusable.yml' + - '.github/workflows/cloud-deploy-preview.yml' workflow_dispatch: jobs: + cloud_preview: + name: "Cloud (preview)" + uses: ./.github/workflows/cloud-deploy-preview.yml + if: success() && github.event_name == 'pull_request' + with: + baseRef: ${{ github.base_ref }} + secrets: inherit + analyze_blog: - name: "[Blog] Next.js Bundle Analysis" + name: "Blog" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'blog' path: 'web/apps/blog' + vercelProjectId: 'prj_VT7qOjkcEvkAsZH7MtSxWcVDWVpr' secrets: inherit analyze_app: - name: "[App] Next.js Bundle Analysis" + name: "App" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'app' path: 'web/apps/app' + vercelProjectId: 'prj_q8N5ElZfzvq4BjEMBIsyEfqe4jsI' secrets: inherit analyze_brandgrab: - name: "[BrandGrab] Next.js Bundle Analysis" + name: "BrandGrab" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'brandgrab' path: 'web/apps/brandgrab' + vercelProjectId: 'prj_QHQO9V4WwYqlcpXNufZ4SU3Ryftx' secrets: inherit analyze_web: - name: "[Web] Next.js Bundle Analysis" + name: "Web" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'web' path: 'web/apps/web' + vercelProjectId: 'prj_PYE8WwpynTfjD6rVMiCp7sZoCPYw' secrets: inherit analyze_slco: - name: "[slco] Next.js Bundle Analysis" + name: "slco" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'slco' path: 'web/apps/slco' + vercelProjectId: 'prj_GNETZANB7evyT5coH7gptur1G1sN' secrets: inherit analyze_doprocess: - name: "[doprocess] Next.js Bundle Analysis" + name: "doprocess" uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' name: 'doprocess' path: 'web/apps/doprocess' + vercelProjectId: 'prj_UoJ8CHr3RAlOya6A9fpJ4oKzQhCJ' secrets: inherit \ No newline at end of file diff --git a/.github/workflows/web-stories-check.yml b/.github/workflows/web-stories-check.yml deleted file mode 100644 index e2c847b89a..0000000000 --- a/.github/workflows/web-stories-check.yml +++ /dev/null @@ -1,48 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: "[Web] stories-check" -on: - pull_request: - branches: [next, main] - paths: - - 'web/**' - -defaults: - run: - working-directory: ./web - -jobs: - check: - name: Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - name: Setup pnpm - uses: pnpm/action-setup@v2.4.0 - with: - version: 'latest' - - uses: actions/setup-node@v4 - with: - node-version: "20.x" - cache: "pnpm" - cache-dependency-path: ./web - - name: Install dependencies - run: pnpm install --frozen-lockfile --filter=web... --filter=. - - name: Run stories-check - run: pnpm stories-check - id: runStoriesCheck - continue-on-error: true - working-directory: web/apps/web/ - - name: Commit changes - id: ccc - if: steps.runStoriesCheck.outcome == 'failure' - uses: EndBug/add-and-commit@v9 - with: - add: ".stories-approved" - message: "[skip ci] [stories-check] Automated stories changes" - new_branch: ${{ github.head_ref }} - default_author: github_actions - env: - GITHUB_TOKEN: ${{ secrets.AT_GH_CD_REPO_PAT }} diff --git a/.github/workflows/web-test.yml b/.github/workflows/web-test.yml deleted file mode 100644 index 8eedac759f..0000000000 --- a/.github/workflows/web-test.yml +++ /dev/null @@ -1,50 +0,0 @@ -# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json - -name: "[Web] Run Tests" -on: - pull_request: - paths: - - "web/**" - - ".github/workflows/web-test.yml" - -defaults: - run: - working-directory: ./web - -jobs: - test: - name: "[Global] Run Tests" - timeout-minutes: 20 - runs-on: ubuntu-latest - concurrency: - group: ${{ github.workflow }}-${{ github.ref || github.run_id }} - cancel-in-progress: true - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: signalco - TURBO_REMOTE_ONLY: true - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: ${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }} - CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} - DOPROCESS_DATABASE_HOST: ${{ secrets.DOPROCESS_DATABASE_HOST }} - DOPROCESS_DATABASE_USERNAME: ${{ secrets.DOPROCESS_DATABASE_USERNAME }} - DOPROCESS_DATABASE_PASSWORD: ${{ secrets.DOPROCESS_DATABASE_PASSWORD }} - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - container: - image: mcr.microsoft.com/playwright:v1.40.1-focal - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - name: Setup pnpm - uses: pnpm/action-setup@v2.4.0 - with: - version: 'latest' - - uses: actions/setup-node@v4 - with: - node-version: "20.x" - cache: "pnpm" - cache-dependency-path: ./web - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Run tests - run: pnpm test diff --git a/.gitignore b/.gitignore index 46760dece3..2aba5be5d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Created by https://www.toptal.com/developers/gitignore/api/node,turbo,macos,windows,visualstudiocode # Edit at https://www.toptal.com/developers/gitignore?templates=node,turbo,macos,windows,visualstudiocode +config/*.local + ### macOS ### # General .DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dab1cb4005..9941d5c74e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,3 +13,7 @@ _NOTE: In-app contact form is still in development. Use GitHub issues for action You can contribute and help us localize the app. We are investigating how to simplify localization, but for now you can contribute by creating a Pull-Request with changes. App localizations are located in `locales` directory of this repository. You can review existing localizations or create a new one by copying one of existing localizations and populate it with data. + +## Development + +See out [Development](/DEVELOPMENT.md) guides for more info. diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 1b9c708554..755530f91d 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,89 +1,29 @@ # Development -[![Maintainability](https://api.codeclimate.com/v1/badges/8f6479343e1e51f2a2d1/maintainability)](https://codeclimate.com/github/signalco-io/signalco/maintainability) -[![CodeFactor](https://www.codefactor.io/repository/github/signalco-io/signalco/badge)](https://www.codefactor.io/repository/github/signalco-io/signalco) +See [Development](/web/DEVELOPMENT.md) for web development. +_Note: Other development guides are coming soon_ -## Table of contents +## Conventions -- [Getting Started](#getting-started) -- [Configure env variables](#configure-env-variables) -- [Deploy](#deploy) - - [Links](#links) -- [More info](#more-info) - - [Next.js](#nextjs) +### Changelog and commits -## Getting Started +- We are using [Conventional Changelog with Angular conventions](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular) +- Commits from core contributors and forks should be done against `next` branch -### Local development +## GitHub actions -Requirements: - -- [pnpm](https://pnpm.io/installation) - -Enable corepack: +You can use [`act`](https://github.com/nektos/act) to develop actions locally. ```bash -corepack enable +act -l ``` -Run the development server: +Example running `workflow_dispatch` event on `analyze_app` job: ```bash -pnpm install -pnpm dev +act workflow_dispatch -j analyze_app -s GITHUB_TOKEN="$(gh auth token)" --secret-file ./config/gh-secrets.local ``` -Apps: - -- Web on [http://localhost:3000](http://localhost:3000) -- App on [http://localhost:3001](http://localhost:3001) -- UI Docs on [http://localhost:6006](http://localhost:6006) - -## Configure env variables - -`.env.local` example: - -```raw -NEXT_PUBLIC_HCAPTCHA_SITE_KEY=435dd50a-4830-483a-862c-d6faa6dacea7 -NEXT_PUBLIC_APP_ENV=development -NEXT_PUBLIC_MAPBOX_TOKEN=pk.eyJ1IjoiYWxla3NhbmRhcnRvcGxlbGNvIiwiYSI6ImNsMXpiYzhwejBrNHczaW10cGpwdn.lgCHgLs6qBDqbpA-1g -``` - -| Variable | Development | Production | -|----------|-------------|------------| -| `NEXT_PUBLIC_HCAPTCHA_SITE_KEY` | Optional | Required | -| `NEXT_PUBLIC_APP_ENV` | Optional | Required `production` | -| `NEXT_PUBLIC_MAPBOX_TOKEN` | Optional | Required `production` | - -## Deploy - -Apps from this repository are deployed on Vercel. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. - -### Links - -Staging (branch `next`): - -- [signalco.dev](https://www.signalco.dev) -- [app.signalco.dev](https://app.signalco.dev) -- [ui.signalco.dev](https://ui.signalco.dev) - -Production (branch `main`): - -- [signalco.io](https://www.signalco.io) -- [app.signalco.io](https://app.signalco.io) -- [ui.signalco.io](https://ui.signalco.io) - -## More info - -### Next.js - -This project is using Next.js. - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +Notes: -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! +- GitHub secrets can be places in `/config/gh-actions-secrets.local` diff --git a/cloud/infrastructure/package.json b/cloud/infrastructure/package.json index c1c37fe69e..6975b0d228 100644 --- a/cloud/infrastructure/package.json +++ b/cloud/infrastructure/package.json @@ -9,24 +9,24 @@ }, "devDependencies": { "@types/node": "20.10.4", - "@typescript-eslint/eslint-plugin": "6.13.2", - "@typescript-eslint/parser": "6.13.2", - "eslint": "8.55.0", + "@typescript-eslint/eslint-plugin": "6.14.0", + "@typescript-eslint/parser": "6.14.0", + "eslint": "8.56.0", "eslint-config-standard": "17.1.0", - "eslint-plugin-import": "2.29.0", - "eslint-plugin-n": "16.3.1", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-n": "16.4.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "typescript": "5.3.3" }, "dependencies": { "@checkly/pulumi": "1.1.4", - "@pulumi/aws": "6.13.2", - "@pulumi/azure-native": "2.21.2", + "@pulumi/aws": "6.14.0", + "@pulumi/azure-native": "2.22.0", "@pulumi/cloudflare": "5.16.0", "@pulumi/command": "0.9.2", "@pulumi/docker": "4.5.0", - "@pulumi/pulumi": "3.96.2", + "@pulumi/pulumi": "3.97.0", "@pulumiverse/vercel": "1.0.1" } } diff --git a/cloud/infrastructure/pnpm-lock.yaml b/cloud/infrastructure/pnpm-lock.yaml index db9db96152..b407561410 100644 --- a/cloud/infrastructure/pnpm-lock.yaml +++ b/cloud/infrastructure/pnpm-lock.yaml @@ -9,11 +9,11 @@ dependencies: specifier: 1.1.4 version: 1.1.4 '@pulumi/aws': - specifier: 6.13.2 - version: 6.13.2 + specifier: 6.14.0 + version: 6.14.0 '@pulumi/azure-native': - specifier: 2.21.2 - version: 2.21.2 + specifier: 2.22.0 + version: 2.22.0 '@pulumi/cloudflare': specifier: 5.16.0 version: 5.16.0 @@ -24,8 +24,8 @@ dependencies: specifier: 4.5.0 version: 4.5.0 '@pulumi/pulumi': - specifier: 3.96.2 - version: 3.96.2 + specifier: 3.97.0 + version: 3.97.0 '@pulumiverse/vercel': specifier: 1.0.1 version: 1.0.1 @@ -35,29 +35,29 @@ devDependencies: specifier: 20.10.4 version: 20.10.4 '@typescript-eslint/eslint-plugin': - specifier: 6.13.2 - version: 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + specifier: 6.14.0 + version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.13.2 - version: 6.13.2(eslint@8.55.0)(typescript@5.3.3) + specifier: 6.14.0 + version: 6.14.0(eslint@8.56.0)(typescript@5.3.3) eslint: - specifier: 8.55.0 - version: 8.55.0 + specifier: 8.56.0 + version: 8.56.0 eslint-config-standard: specifier: 17.1.0 - version: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) eslint-plugin-import: - specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) eslint-plugin-n: - specifier: 16.3.1 - version: 16.3.1(eslint@8.55.0) + specifier: 16.4.0 + version: 16.4.0(eslint@8.56.0) eslint-plugin-node: specifier: 11.1.0 - version: 11.1.0(eslint@8.55.0) + version: 11.1.0(eslint@8.56.0) eslint-plugin-promise: specifier: 6.1.1 - version: 6.1.1(eslint@8.55.0) + version: 6.1.1(eslint@8.56.0) typescript: specifier: 5.3.3 version: 5.3.3 @@ -73,18 +73,18 @@ packages: resolution: {integrity: sha512-YPNYtwEnKu23VDHNFu91xd/Ueu5zYONHcYwKDA5qTvtgZZ1nzrvPJgrO15KF0fLRVlGo7yckirDS26GpvBTe6w==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 transitivePeerDependencies: - supports-color dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -110,8 +110,8 @@ packages: - supports-color dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -365,10 +365,10 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@pulumi/aws@6.13.2: - resolution: {integrity: sha512-NO5+nTQTJKeSeqZdZsc8h/ObhnAypjvDcVFatdtoMuE/mpv3Lb/8q81dXAlTU16Eo5jU8aBrGN7yZ9X6ehf8UQ==} + /@pulumi/aws@6.14.0: + resolution: {integrity: sha512-dOTdUkRdV0IU7HCHpMDRMF2co4d4iBWeGmuxq/mLYt0PdVMsUsVsMJ87xAIP2S3g0kTVLNOzL1l8EP24OS1vlg==} dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -377,10 +377,10 @@ packages: - supports-color dev: false - /@pulumi/azure-native@2.21.2: - resolution: {integrity: sha512-gYSQrIbGUbOcFItxT2ZpzKQPHBVf90ISppkRfvK+2c3lEJk5OW+4MS/2IAwRrKtVS1GnDtwte7jlhYtOL0GuCA==} + /@pulumi/azure-native@2.22.0: + resolution: {integrity: sha512-HutD/G2iCOh/CfYlVf1KTDLi9wn8ilwAzpdwYsndpkWRVihooK20ZxcjUOr/8VOC3wZvo56OCNsE+YCrb8oqJQ==} dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 transitivePeerDependencies: - supports-color dev: false @@ -388,7 +388,7 @@ packages: /@pulumi/cloudflare@5.16.0: resolution: {integrity: sha512-7FjJIpsGz9lv+o+nNnbV8UOUXAF248LHCILmExxIfVTblwbp0Mb8Ri68rLOK9qpVPOIwkj2QBorLiZ6Y4anHSg==} dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 transitivePeerDependencies: - supports-color dev: false @@ -397,7 +397,7 @@ packages: resolution: {integrity: sha512-9RaGDiy8jFCiaarj4EOrMW/fVCM/AgBigzwM6CKzlR49x8UFiRDmKrXfEVHb8r2P9IpC4IaAZf5VbNNAHwN/rA==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 transitivePeerDependencies: - supports-color dev: false @@ -405,14 +405,14 @@ packages: /@pulumi/docker@4.5.0: resolution: {integrity: sha512-DOiczZK1cF4NGlEWzacPLjGcoPKXHXISoqq4KqCO97YW28rZSu6LOdveQ8tLaUHGeyWQ+CS3PT45caSxHAbzbw==} dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 semver: 5.7.2 transitivePeerDependencies: - supports-color dev: false - /@pulumi/pulumi@3.96.2: - resolution: {integrity: sha512-zYKCArkjF8YbdrJd4Ka6uCiHq+m3uDp2whA0jIQs/SgTT6m37z1v9sM7sOsdw8qK9N9hayqbLsrtqGdTYP65eg==} + /@pulumi/pulumi@3.97.0: + resolution: {integrity: sha512-yPtC/RUHHV8FgcRmq/l05ZyVwcIjLIA+7F+sCceKSNga0NOno6D/VD3PRU/TkApTseKRce4NQgdshXDumh+mdA==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: '@grpc/grpc-js': 1.9.6 @@ -452,7 +452,7 @@ packages: /@pulumiverse/vercel@1.0.1: resolution: {integrity: sha512-AOiOe2pzZOQVv9Z+C/iWmZeKpeZb+0qmqcfRBnYiU4DiVr9VhqE9ToJVPq7ElyxgYSoETA+4qfd1Kj01zxhd5A==} dependencies: - '@pulumi/pulumi': 3.96.2 + '@pulumi/pulumi': 3.97.0 transitivePeerDependencies: - supports-color dev: false @@ -478,8 +478,8 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -490,13 +490,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 @@ -507,8 +507,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -517,27 +517,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.13.2: - resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -546,23 +546,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.13.2: - resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): - resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -570,8 +570,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -582,30 +582,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.13.2: - resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 dev: true @@ -666,10 +666,10 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -682,18 +682,18 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 es-shim-unscopables: 1.0.0 @@ -703,7 +703,7 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 es-shim-unscopables: 1.0.0 @@ -781,13 +781,6 @@ packages: semver: 7.5.4 dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - dev: true - /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -1000,7 +993,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0): + /eslint-compat-utils@0.1.2(eslint@8.56.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1009,10 +1011,10 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.55.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) - eslint-plugin-n: 16.3.1(eslint@8.55.0) - eslint-plugin-promise: 6.1.1(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0) + eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -1025,7 +1027,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1046,38 +1048,39 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.55.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.1.0(eslint@8.55.0): - resolution: {integrity: sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==} + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.6.2 - eslint: 8.55.0 + eslint: 8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-es@3.0.1(eslint@8.55.0): + /eslint-plugin-es@3.0.1(eslint@8.56.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1086,16 +1089,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.55.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1104,23 +1107,23 @@ packages: object.groupby: 1.0.1 object.values: 1.1.7 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-n@16.3.1(eslint@8.55.0): - resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} + /eslint-plugin-n@16.4.0(eslint@8.56.0): + resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) builtins: 5.0.1 - eslint: 8.55.0 - eslint-plugin-es-x: 7.1.0(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.0 ignore: 5.2.4 is-builtin-module: 3.2.1 @@ -1130,14 +1133,14 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-node@11.1.0(eslint@8.55.0): + /eslint-plugin-node@11.1.0(eslint@8.56.0): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.55.0 - eslint-plugin-es: 3.0.1(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-es: 3.0.1(eslint@8.56.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 @@ -1145,13 +1148,13 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.55.0): + /eslint-plugin-promise@6.1.1(eslint@8.56.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true /eslint-scope@7.2.2: @@ -1179,15 +1182,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.6.2 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -1379,15 +1382,6 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: false - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - dependencies: - function-bind: 1.1.2 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - dev: true - /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: @@ -1885,7 +1879,7 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 dev: true @@ -1904,17 +1898,17 @@ packages: /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: true /object.values@1.1.7: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.0 es-abstract: 1.22.3 dev: true @@ -2371,8 +2365,8 @@ packages: yn: 2.0.0 dev: false - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 diff --git a/cloud/infrastructure/src/Checkly/apiStatusCheck.ts b/cloud/infrastructure/src/Checkly/apiStatusCheck.ts index c408474ab3..158cae87d7 100644 --- a/cloud/infrastructure/src/Checkly/apiStatusCheck.ts +++ b/cloud/infrastructure/src/Checkly/apiStatusCheck.ts @@ -3,18 +3,18 @@ import { Check } from '@checkly/pulumi'; export type CheckFrequency = 15 | 30 | 60 | 120 | 180 | 360 | 720 | 1440; -export default function apiStatusCheck (prefix: string, name: string, domain: Input, frequency: CheckFrequency, route?: string) { +export default function apiStatusCheck(prefix: string, name: string, domain: Input, frequency: CheckFrequency, route?: string) { const stack = getStack(); new Check(`apicheck-${prefix}`, { - name: `${name} (${stack})`, + name: `${name}`, activated: true, frequency, type: 'API', locations: ['eu-west-1'], - tags: [stack === 'production' ? 'public' : 'dev'], + tags: [stack === 'production' ? 'prod' : 'next'], request: { method: 'GET', - url: interpolate`https://${domain}${route ?? '/api/status'}`, + url: interpolate`https://${domain}${(route ?? '/api/status')}`, }, }); } diff --git a/cloud/infrastructure/src/config.ts b/cloud/infrastructure/src/config.ts index 0f257dcc80..ec7e760b03 100644 --- a/cloud/infrastructure/src/config.ts +++ b/cloud/infrastructure/src/config.ts @@ -1,5 +1,6 @@ import { CheckFrequency } from './Checkly/apiStatusCheck'; +// Monitoring intervals export const ConfChannelApiCheckInterval: CheckFrequency = 120; export const ConfCloudApiCheckInterval: CheckFrequency = 60; export const ConfInternalApiCheckInterval: CheckFrequency = 180; diff --git a/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj b/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj index 17f3080406..41e03a9d2a 100644 --- a/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj +++ b/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj @@ -8,7 +8,7 @@ - + diff --git a/config/gh-secrets.local.example b/config/gh-secrets.local.example new file mode 100644 index 0000000000..ad59002d96 --- /dev/null +++ b/config/gh-secrets.local.example @@ -0,0 +1 @@ +VERCEL_TOKEN=TOKEN \ No newline at end of file diff --git a/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj b/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj index 2c6f70ae11..c5f3c7edde 100644 --- a/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj +++ b/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj @@ -7,7 +7,7 @@ - + diff --git a/web/DEVELOPMENT.md b/web/DEVELOPMENT.md new file mode 100644 index 0000000000..83c02e7992 --- /dev/null +++ b/web/DEVELOPMENT.md @@ -0,0 +1,93 @@ +# Development + +[![Maintainability](https://api.codeclimate.com/v1/badges/8f6479343e1e51f2a2d1/maintainability)](https://codeclimate.com/github/signalco-io/signalco/maintainability) +[![CodeFactor](https://www.codefactor.io/repository/github/signalco-io/signalco/badge)](https://www.codefactor.io/repository/github/signalco-io/signalco) + +## Table of contents + +- [Getting Started](#getting-started) +- [Configure env variables](#configure-env-variables) +- [Deploy](#deploy) + - [Links](#links) +- [More info](#more-info) + - [Next.js](#nextjs) + +## Getting Started + +### Local development + +Requirements: + +- [pnpm](https://pnpm.io/installation) + +Enable corepack: + +```bash +corepack enable +``` + +Run the development server: + +```bash +pnpm install +pnpm dev +``` + +Apps: + +- Web on [http://localhost:3000](http://localhost:3000) +- App on [http://localhost:3001](http://localhost:3001) +- UI Docs on [http://localhost:6006](http://localhost:6006) + +#### Turbo in local development + +Remote caching is enabled but `TURBO_REMOTE_CACHE_SIGNATURE_KEY` environemnt variable needs to be set. Contact any contributor to get access to signature key to enable remote caching for your development environment. + +## Configure env variables + +`.env.local` example: + +```raw +NEXT_PUBLIC_HCAPTCHA_SITE_KEY=435dd50a-4830-483a-862c-d6faa6dacea7 +NEXT_PUBLIC_APP_ENV=development +NEXT_PUBLIC_MAPBOX_TOKEN=pk.eyJ1IjoiYWxla3NhbmRhcnRvcGxlbGNvIiwiYSI6ImNsMXpiYzhwejBrNHczaW10cGpwdn.lgCHgLs6qBDqbpA-1g +``` + +| Variable | Development | Production | +|----------|-------------|------------| +| `NEXT_PUBLIC_HCAPTCHA_SITE_KEY` | Optional | Required | +| `NEXT_PUBLIC_APP_ENV` | Optional | Required `production` | +| `NEXT_PUBLIC_MAPBOX_TOKEN` | Optional | Required `production` | + +## Deploy + +Apps from this repository are deployed on Vercel. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. + +### Links + +Staging (branch `next`): + +- [signalco.dev](https://www.signalco.dev) +- [app.signalco.dev](https://app.signalco.dev) +- [ui.signalco.dev](https://ui.signalco.dev) + +Production (branch `main`): + +- [signalco.io](https://www.signalco.io) +- [app.signalco.io](https://app.signalco.io) +- [ui.signalco.io](https://ui.signalco.io) + +## More info + +### Next.js + +This project is using Next.js. + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! diff --git a/web/apps/app/app/global.css b/web/apps/app/app/global.css index 3bbba127d2..5b9a4850cb 100644 --- a/web/apps/app/app/global.css +++ b/web/apps/app/app/global.css @@ -1,39 +1,5 @@ @import '@signalco/ui/index.css'; -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: local(''), - url('/assets/fonts/MaterialIcons-Regular.woff2') format('woff2'), - url('/assets/fonts/MaterialIcons-Regular.woff') format('woff'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} - :root { --graph-stroke: #999; } diff --git a/web/apps/app/components/indicators/BatteryIndicator.tsx b/web/apps/app/components/indicators/BatteryIndicator.tsx index 907ad5a290..e7376a1c28 100644 --- a/web/apps/app/components/indicators/BatteryIndicator.tsx +++ b/web/apps/app/components/indicators/BatteryIndicator.tsx @@ -10,23 +10,23 @@ type BatteryIndicatorProps = { export default function BatteryIndicator({ level, size, minLevel = 'full' }: BatteryIndicatorProps) { let show = true; - let Icon = BatteryEmpty; + let BatteryIconVariant = BatteryEmpty; let color = 'red'; if (level && level < 15 && level > 0) { - Icon = BatteryLow; + BatteryIconVariant = BatteryLow; } else if (level && level < 30) { - Icon = BatteryLow; + BatteryIconVariant = BatteryLow; color = 'yellow' show = minLevel === 'low' || minLevel === 'medium' || minLevel === 'full'; } else if (level && level < 80) { - Icon = BatteryMedium; + BatteryIconVariant = BatteryMedium; color = 'green' show = minLevel === 'medium' || minLevel === 'full'; } else if (level && level > 80) { - Icon = BatteryFull; + BatteryIconVariant = BatteryFull; color = 'green' show = minLevel === 'full'; } @@ -37,7 +37,7 @@ export default function BatteryIndicator({ level, size, minLevel = 'full' }: Bat return ( - setSelectedType(v)} items={entityTypes.map(t => { - const Icon = EntityIconByType(parseInt(t.value)); + const EntityIcon = EntityIconByType(parseInt(t.value)); return ({ - value: t.value, label: t.label, icon: typeof Icon === 'function' ? : Icon + value: t.value, label: t.label, icon: typeof EntityIcon === 'function' ? : EntityIcon }); })} /> ); diff --git a/web/apps/app/components/navigation/MobileMenu.tsx b/web/apps/app/components/navigation/MobileMenu.tsx index d599c70b2b..2d4b042033 100644 --- a/web/apps/app/components/navigation/MobileMenu.tsx +++ b/web/apps/app/components/navigation/MobileMenu.tsx @@ -19,7 +19,7 @@ export function MobileMenu({ open, items, active, onClose }: { open: boolean; it )}> {items.map((ni, index) => { - const Icon = ni.icon; + const ItemIcon = ni.icon; return ( @@ -30,7 +30,7 @@ export function MobileMenu({ open, items, active, onClose }: { open: boolean; it variant={ni === active ? 'soft' : 'plain'} size="lg" onClick={onClose} - startDecorator={()}> + startDecorator={()}> {ni.label} diff --git a/web/apps/app/components/navigation/PageTitle.tsx b/web/apps/app/components/navigation/PageTitle.tsx index 2ea9541ac7..1a43f8fa92 100644 --- a/web/apps/app/components/navigation/PageTitle.tsx +++ b/web/apps/app/components/navigation/PageTitle.tsx @@ -1,6 +1,6 @@ 'use client'; -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; import { usePathname } from 'next/navigation'; import { Typography } from '@signalco/ui-primitives/Typography'; import { Row } from '@signalco/ui-primitives/Row'; @@ -38,17 +38,17 @@ export function PageTitle({ fullPage = false }: { fullPage?: boolean }) { ); } - const Icon = activeNavItem?.icon; + const NavItemIcon = activeNavItem?.icon; return ( - {Icon && ( + {NavItemIcon && ( fullPage ? ( - + ) : ( - + ) )} {activeNavItem?.label} diff --git a/web/apps/app/components/widgets/parts/WidgetAirConditioning.tsx b/web/apps/app/components/widgets/parts/WidgetAirConditioning.tsx index 5e8808519e..2fe06677e9 100644 --- a/web/apps/app/components/widgets/parts/WidgetAirConditioning.tsx +++ b/web/apps/app/components/widgets/parts/WidgetAirConditioning.tsx @@ -4,6 +4,7 @@ import { Stack } from '@signalco/ui-primitives/Stack'; import { Row } from '@signalco/ui-primitives/Row'; import { cx } from '@signalco/ui-primitives/cx'; import { Button } from '@signalco/ui-primitives/Button'; +import { Droplets, Flame, Snowflake } from '@signalco/ui-icons'; import { usePromise } from '@enterwell/react-hooks'; import { WidgetSharedProps } from '../Widget'; import Graph from '../../graphs/Graph'; @@ -90,7 +91,7 @@ function WidgetAirConditioning(props: WidgetSharedProps) { marginTop: rows > 2 ? (rows < 4 ? 0 : 4 * 8) : 8, flexDirection: rows < 4 ? 'column' : 'row', position: rows < 4 ? 'absolute' : 'unset', - right: rows < 4 ? 12 : undefined, + right: rows < 4 ? 0 : undefined, top: rows < 4 ? 0 : undefined }} alignItems="stretch"> @@ -99,15 +100,15 @@ function WidgetAirConditioning(props: WidgetSharedProps) { small={rows < 4} isActive={false} label={`${humidityWhole}%`} - icon="water_drop" + icon={} href={`${KnownPages.Entities}/${humidityContact?.entityId}`} activeBackgroundColor={'#445D79'} /> )} {config?.targetCooling && - + } activeBackgroundColor="#445D79" href={`${KnownPages.Entities}/${coolingDevice?.id}`} /> } {config?.targetHeating && - + } activeBackgroundColor="#A14D4D" href={`${KnownPages.Entities}/${heatingDevice?.id}`} /> } )} diff --git a/web/apps/app/components/widgets/parts/WidgetButton.tsx b/web/apps/app/components/widgets/parts/WidgetButton.tsx index 6f41d9fdb6..31c554db21 100644 --- a/web/apps/app/components/widgets/parts/WidgetButton.tsx +++ b/web/apps/app/components/widgets/parts/WidgetButton.tsx @@ -1,8 +1,6 @@ import { Typography } from '@signalco/ui-primitives/Typography'; -import { Row } from '@signalco/ui-primitives/Row'; -import { Icon } from '@signalco/ui-primitives/Icon'; import { Button } from '@signalco/ui-primitives/Button'; -import { Avatar } from '@signalco/ui-primitives/Avatar'; +import * as LucideIcons from '@signalco/ui-icons'; import { WidgetSharedProps } from '../Widget'; import { DefaultRows, DefaultTargetWithValueMultiple, DefaultColumns } from '../../../src/widgets/WidgetConfigurationOptions'; import IWidgetConfigurationOption from '../../../src/widgets/IWidgetConfigurationOption'; @@ -15,7 +13,6 @@ type ConfigProps = { icon: string | undefined; label: string | undefined; target: IContact[]; - polygonApiKey: string; rows: number; columns: number; } @@ -49,14 +46,12 @@ export default function WidgetButton(props: WidgetSharedProps) { // Configure widget useWidgetOptions(stateOptions, props); + const LucideIcon = Object.entries(LucideIcons).find(([key]) => key.toLowerCase() === icon.toLowerCase())?.[1]; + return ( - ); } diff --git a/web/apps/app/components/widgets/parts/WidgetIndicator.tsx b/web/apps/app/components/widgets/parts/WidgetIndicator.tsx index beb930ed5e..b399fa7555 100644 --- a/web/apps/app/components/widgets/parts/WidgetIndicator.tsx +++ b/web/apps/app/components/widgets/parts/WidgetIndicator.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useRouter } from 'next/navigation'; import Image from 'next/image'; import { Stack } from '@signalco/ui-primitives/Stack'; diff --git a/web/apps/app/components/widgets/parts/piece/SmallIndicator.tsx b/web/apps/app/components/widgets/parts/piece/SmallIndicator.tsx index bab19a11cc..8d78b88a77 100644 --- a/web/apps/app/components/widgets/parts/piece/SmallIndicator.tsx +++ b/web/apps/app/components/widgets/parts/piece/SmallIndicator.tsx @@ -1,10 +1,10 @@ -import { Icon } from '@signalco/ui-primitives/Icon'; +import { ReactNode } from 'react'; import { cx } from '@signalco/ui-primitives/cx'; import { Button } from '@signalco/ui-primitives/Button'; export interface SmallIndicatorProps { isActive: boolean; - icon: string; + icon: ReactNode; label: string; activeBackgroundColor: string; href: string; @@ -20,16 +20,16 @@ export function SmallIndicator({ fullWidth href={href} startDecorator={( - {icon} + !small && 'text-2xl' + )}>{icon} )} className={cx( - // 'rounded-md', + 'px-2', !small && 'min-w-[52px] min-h-[82px]', - small && 'min-w-[24px] min-h-[30px]' + small && 'min-w-[24px] min-h-[30px]', + !isActive && 'text-foreground/50' )} style={{ backgroundColor: isActive ? activeBackgroundColor : undefined, diff --git a/web/apps/app/package.json b/web/apps/app/package.json index e89ee50b30..baf4464195 100644 --- a/web/apps/app/package.json +++ b/web/apps/app/package.json @@ -15,11 +15,12 @@ "postinstall": "node ./tools/post-install.mjs", "postbuild": "next-sitemap --config next-sitemap.config.js", "start": "next start -p 3001", - "lint": "next lint --fix" + "test": "echo \"Info: no test specified\"", + "lint": "next lint" }, "dependencies": { - "@auth0/auth0-react": "2.2.3", - "@auth0/auth0-spa-js": "2.1.2", + "@auth0/auth0-react": "2.2.4", + "@auth0/auth0-spa-js": "2.1.3", "@date-io/date-fns": "2.17.0", "@dnd-kit/core": "6.1.0", "@dnd-kit/modifiers": "7.0.0", @@ -27,7 +28,7 @@ "@dnd-kit/utilities": "3.2.2", "@enterwell/react-form-builder": "0.3.2", "@enterwell/react-form-validation": "1.3.0", - "@enterwell/react-hooks": "0.4.0", + "@enterwell/react-hooks": "0.4.1", "@hcaptcha/react-hcaptcha": "1.9.2", "@microsoft/signalr": "8.0.0", "@monaco-editor/react": "4.6.0", @@ -40,12 +41,12 @@ "@signalco/ui-primitives": "workspace:*", "@signalco/ui-notifications": "workspace:*", "@signalco/ui-icons": "workspace:*", - "@tanstack/query-sync-storage-persister": "5.13.4", - "@tanstack/react-query": "5.13.4", - "@tanstack/react-query-devtools": "5.13.4", - "@tanstack/react-query-persist-client": "5.13.4", + "@tanstack/query-sync-storage-persister": "5.14.0", + "@tanstack/react-query": "5.14.0", + "@tanstack/react-query-devtools": "5.14.0", + "@tanstack/react-query-persist-client": "5.14.0", "@vercel/analytics": "1.1.1", - "@vvo/tzdb": "6.118.0", + "@vvo/tzdb": "6.120.0", "autoprefixer": "10.4.16", "classix": "2.1.35", "cobe": "0.6.3", @@ -82,15 +83,15 @@ "@types/d3": "7.4.3", "@types/next-pwa": "5.6.9", "@types/node": "20.10.4", - "@types/react": "18.2.43", - "@types/react-dom": "18.2.17", + "@types/react": "18.2.45", + "@types/react-dom": "18.2.18", "@types/react-grid-layout": "1.3.5", - "@types/recharts": "1.8.28", + "@types/recharts": "1.8.29", "@types/suncalc": "1.9.2", "@types/uuid": "9.0.7", "colorette": "2.0.20", "cross-env": "7.0.3", - "eslint": "8.55.0", + "eslint": "8.56.0", "fs-extra": "11.2.0", "next-sitemap": "4.2.3", "openapi-types": "12.1.3", @@ -105,6 +106,7 @@ "budget": 358400, "budgetPercentIncreaseRed": 10, "minimumChangeThreshold": 10, - "showDetails": true + "showDetails": true, + "skipCommentIfEmpty": true } } diff --git a/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff b/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff deleted file mode 100644 index 74b49ed202..0000000000 Binary files a/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff and /dev/null differ diff --git a/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff2 b/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff2 deleted file mode 100644 index b37e75bf4d..0000000000 Binary files a/web/apps/app/public/assets/fonts/MaterialIcons-Regular.woff2 and /dev/null differ diff --git a/web/apps/blog/app/global.css b/web/apps/blog/app/global.css index 619dc6faab..3fb2bb7d8f 100644 --- a/web/apps/blog/app/global.css +++ b/web/apps/blog/app/global.css @@ -1,41 +1,6 @@ @import '@signalco/ui/index.css'; -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: local(''), - url('/assets/fonts/MaterialIcons-Regular.woff2') format('woff2'), - url('/assets/fonts/MaterialIcons-Regular.woff') format('woff'); -} - html, body, #__next { height: 100%; width: 100%; } - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} - diff --git a/web/apps/blog/package.json b/web/apps/blog/package.json index 0e6f473c16..87a7dcbe13 100644 --- a/web/apps/blog/package.json +++ b/web/apps/blog/package.json @@ -14,7 +14,7 @@ "build:analyze": "cross-env ANALYZE=true pnpm build", "postbuild": "next-sitemap --config next-sitemap.config.js", "start": "next start -p 3002", - "lint": "next lint --fix", + "lint": "next lint", "test": "playwright test" }, "dependencies": { @@ -47,7 +47,7 @@ }, "devDependencies": { "@axe-core/playwright": "4.8.2", - "@babel/core": "7.23.5", + "@babel/core": "7.23.6", "@next/bundle-analyzer": "14.0.4", "@playwright/test": "1.40.1", "@signalco/eslint-config-signalco": "workspace:*", @@ -57,11 +57,11 @@ "@types/fs-extra": "11.0.4", "@types/klaw": "3.0.6", "@types/node": "20.10.4", - "@types/react": "18.2.43", - "@types/react-dom": "18.2.17", + "@types/react": "18.2.45", + "@types/react-dom": "18.2.18", "colorette": "2.0.20", "cross-env": "7.0.3", - "eslint": "8.55.0", + "eslint": "8.56.0", "next-sitemap": "4.2.3", "postcss": "8.4.32", "rimraf": "5.0.5", @@ -72,6 +72,7 @@ "budget": 358400, "budgetPercentIncreaseRed": 10, "minimumChangeThreshold": 10, - "showDetails": true + "showDetails": true, + "skipCommentIfEmpty": true } } diff --git a/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff b/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff deleted file mode 100644 index 74b49ed202..0000000000 Binary files a/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff and /dev/null differ diff --git a/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff2 b/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff2 deleted file mode 100644 index b37e75bf4d..0000000000 Binary files a/web/apps/blog/public/assets/fonts/MaterialIcons-Regular.woff2 and /dev/null differ diff --git a/web/apps/brandgrab/app/global.css b/web/apps/brandgrab/app/global.css index dc369d9e3f..60c738eda3 100644 --- a/web/apps/brandgrab/app/global.css +++ b/web/apps/brandgrab/app/global.css @@ -1,40 +1,6 @@ @import "@signalco/ui/index.css"; -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: local(''), - url('/assets/fonts/MaterialIcons-Regular.woff2') format('woff2'), - url('/assets/fonts/MaterialIcons-Regular.woff') format('woff'); -} - html, body, #__next { height: 100%; width: 100%; } - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} diff --git a/web/apps/brandgrab/package.json b/web/apps/brandgrab/package.json index 92cce7a881..5e3d97cc2e 100644 --- a/web/apps/brandgrab/package.json +++ b/web/apps/brandgrab/package.json @@ -14,11 +14,11 @@ "build:analyze": "cross-env ANALYZE=true pnpm build", "postbuild": "next-sitemap --config next-sitemap.config.js", "start": "next start -p 4001", - "lint": "next lint --fix", + "lint": "next lint", "test": "playwright test" }, "dependencies": { - "@enterwell/react-hooks": "0.4.0", + "@enterwell/react-hooks": "0.4.1", "@next/env": "14.0.4", "@signalco/data": "workspace:*", "@signalco/hooks": "workspace:*", @@ -37,18 +37,18 @@ }, "devDependencies": { "@axe-core/playwright": "4.8.2", - "@babel/core": "7.23.5", + "@babel/core": "7.23.6", "@next/bundle-analyzer": "14.0.4", "@playwright/test": "1.40.1", "@signalco/eslint-config-signalco": "workspace:*", "@signalco/tsconfig": "workspace:*", "@types/color": "3.0.6", "@types/node": "20.10.4", - "@types/react": "18.2.43", - "@types/react-dom": "18.2.17", + "@types/react": "18.2.45", + "@types/react-dom": "18.2.18", "@types/sharp": "0.31.1", "cross-env": "7.0.3", - "eslint": "8.55.0", + "eslint": "8.56.0", "next-sitemap": "4.2.3", "postcss": "8.4.32", "rimraf": "5.0.5", @@ -59,6 +59,7 @@ "budget": 358400, "budgetPercentIncreaseRed": 10, "minimumChangeThreshold": 10, - "showDetails": true + "showDetails": true, + "skipCommentIfEmpty": true } } diff --git a/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff b/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff deleted file mode 100644 index 74b49ed202..0000000000 Binary files a/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff and /dev/null differ diff --git a/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff2 b/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff2 deleted file mode 100644 index b37e75bf4d..0000000000 Binary files a/web/apps/brandgrab/public/assets/fonts/MaterialIcons-Regular.woff2 and /dev/null differ diff --git a/web/apps/development/.gitignore b/web/apps/development/.gitignore deleted file mode 100644 index a547bf36d8..0000000000 --- a/web/apps/development/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/web/apps/development/index.html b/web/apps/development/index.html deleted file mode 100644 index 646ecb8166..0000000000 --- a/web/apps/development/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Signalco Development Dashboard - - -
- - - diff --git a/web/apps/development/package.json b/web/apps/development/package.json index 261f8c08c3..15d82c0f3b 100644 --- a/web/apps/development/package.json +++ b/web/apps/development/package.json @@ -17,10 +17,10 @@ "tailwindcss-animate": "1.0.7" }, "devDependencies": { - "@types/react": "18.2.43", - "@types/react-dom": "18.2.17", + "@types/react": "18.2.45", + "@types/react-dom": "18.2.18", "@vitejs/plugin-react-swc": "3.5.0", "typescript": "5.3.3", - "vite": "5.0.7" + "vite": "5.0.10" } } \ No newline at end of file diff --git a/web/apps/development/src/App.css b/web/apps/development/src/App.css deleted file mode 100644 index f975311b32..0000000000 --- a/web/apps/development/src/App.css +++ /dev/null @@ -1,40 +0,0 @@ -#root { - display: flex; - flex-direction: column; - height: 100%; -} - -header h1 { - font-size: 1.5em; - font-weight: 400; - margin: 0; - padding: 0.3em; -} - -main { - padding: 2em; -} - -.launcher-card > a { - border-radius: 1em; - border: 1px solid #222222; - padding: 1em; - display: flex; - flex-direction: column; - gap: 0.5em; - align-items: center; -} - -.launcher-card > a:hover { - background-color: #0a0a0a; - border-color: #333333; -} - -.launcher-card > a > .info { - display: flex; - flex-direction: column; -} - -.launcher-card > a > .info > small { - opacity: .6; -} diff --git a/web/apps/development/src/App.tsx b/web/apps/development/src/App.tsx deleted file mode 100644 index 6c7d4d5f09..0000000000 --- a/web/apps/development/src/App.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import './App.css' -import { AppItemSection } from './AppItemSection'; -import { AppItemType } from './AppItemType'; -import { Stack } from '@signalco/ui-primitives/Stack'; - -const tools: AppItemType[] = [ - { label: 'UI Docs', href: 'http://localhost:6007' }, -]; - -const apps: AppItemType[] = [ - { label: 'Web', href: 'http://localhost:3000' }, - { label: 'App', href: 'http://localhost:3001' }, - { label: 'Blog', href: 'http://localhost:3002' }, -]; - -const uSaas: AppItemType[] = [ - { label: 'slco.io', href: 'http://localhost:4002' }, - { label: 'BrandGrab.io', href: 'http://localhost:4001' }, - { label: 'DoProcess.app', href: 'http://localhost:4003' }, -]; - -function App() { - const sections = [ - { items: tools, title: 'Tools' }, - { items: apps, title: 'Apps' }, - { items: uSaas, title: 'uSaas' }, - ]; - - return ( - <> -
-

Developer Home

-
-
- - {sections.map(section => )} - -
- - ) -} - -export default App diff --git a/web/apps/development/src/AppItem.tsx b/web/apps/development/src/AppItem.tsx deleted file mode 100644 index 2b1113b935..0000000000 --- a/web/apps/development/src/AppItem.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useState } from "react"; -import { AppItemType } from "./AppItemType"; - -export function AppItem({ label, href }: AppItemType) { - const [isLoaded, setIsLoaded] = useState(false); - - return ( -
  • - -
    ...
    - setIsLoaded(true)} /> -
    - {label} - {href} -
    -
    -
  • - ); -} diff --git a/web/apps/development/src/AppItemSection.tsx b/web/apps/development/src/AppItemSection.tsx deleted file mode 100644 index 7f98ce71f6..0000000000 --- a/web/apps/development/src/AppItemSection.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { AppItem } from './AppItem'; -import { AppItemType } from './AppItemType'; -import { Row } from '@signalco/ui-primitives/Row'; -import { Typography } from '@signalco/ui-primitives/Typography'; - -export function AppItemSection({ items, title }: { items: AppItemType[]; title: string; }) { - return ( - - - {title} - - - {items.map(app => )} - - - ); -} diff --git a/web/apps/development/src/AppItemType.tsx b/web/apps/development/src/AppItemType.tsx deleted file mode 100644 index 0ba55ff1a8..0000000000 --- a/web/apps/development/src/AppItemType.tsx +++ /dev/null @@ -1,5 +0,0 @@ - -export type AppItemType = { - label: string; - href: string; -}; diff --git a/web/apps/development/src/index.css b/web/apps/development/src/index.css deleted file mode 100644 index 4f9f8df026..0000000000 --- a/web/apps/development/src/index.css +++ /dev/null @@ -1,61 +0,0 @@ -@import '@signalco/ui/index.css'; - -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color-scheme: light dark; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: white; - text-decoration: inherit; -} -a:hover { - color: #aaa; -} - -li { - list-style-type: none; -} - -body { - margin: 0; - min-width: 320px; - min-height: 100vh; - background-color: #000 !important; - color: rgba(255, 255, 255, 0.87); -} - -h1 { - font-size: 2.6em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} diff --git a/web/apps/development/src/main.tsx b/web/apps/development/src/main.tsx deleted file mode 100644 index 791f139e24..0000000000 --- a/web/apps/development/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' - -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - , -) diff --git a/web/apps/development/src/vite-env.d.ts b/web/apps/development/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a0..0000000000 --- a/web/apps/development/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/web/apps/development/tsconfig.json b/web/apps/development/tsconfig.json deleted file mode 100644 index 3d0a51a86e..0000000000 --- a/web/apps/development/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/web/apps/development/tsconfig.node.json b/web/apps/development/tsconfig.node.json deleted file mode 100644 index 9d31e2aed9..0000000000 --- a/web/apps/development/tsconfig.node.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/web/apps/development/vite.config.ts b/web/apps/development/vite.config.ts deleted file mode 100644 index 861b04b356..0000000000 --- a/web/apps/development/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], -}) diff --git a/web/apps/doprocess/app/layout.tsx b/web/apps/doprocess/app/layout.tsx index feef8df55c..ffdec84153 100644 --- a/web/apps/doprocess/app/layout.tsx +++ b/web/apps/doprocess/app/layout.tsx @@ -1,3 +1,4 @@ +import Script from 'next/script'; import { Inter } from 'next/font/google'; import { Metadata, Viewport } from 'next'; import './global.css'; @@ -20,6 +21,7 @@ export default function RootLayout({ children, }: { {children} +