diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c84846ad24..ccec7bc1d9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,12 +1,21 @@ ---- version: 2 updates: - - package-ecosystem: 'github-actions' - directory: '/' + - package-ecosystem: github-actions + directory: / schedule: - # Check for updates to GitHub Actions every week - interval: 'weekly' + interval: weekly - package-ecosystem: npm - directory: '/' + directory: / schedule: - interval: 'weekly' + interval: weekly + groups: + minor-and-patch: + patterns: + - '*' + update-types: + - 'minor' + - 'patch' + - package-ecosystem: docker + directory: / + schedule: + interval: daily diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index 6ae1b665fa..a9b56fc7ec 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -1,4 +1,4 @@ -name: Enable Auto-Merge For metacpan-automation +name: Enable Auto-Merge For bots on: pull_request_target: types: [opened] diff --git a/.github/workflows/build-container.yml b/.github/workflows/build-container.yml index 6255a0b249..a84d33c6d5 100644 --- a/.github/workflows/build-container.yml +++ b/.github/workflows/build-container.yml @@ -23,52 +23,26 @@ jobs: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.APP_PRIVATE_KEY }} owner: metacpan - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USER }} - password: ${{ secrets.DOCKER_HUB_TOKEN }} - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: token: ${{ steps.app-token.outputs.token }} - - name: Build test image - id: docker-build-test - uses: docker/build-push-action@v6 - with: - target: test - push: false - load: true - - name: Run Perl tests - run: docker run -i ${{ steps.docker-build-test.outputs.imageid }} - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ github.repository }} - flavor: | - latest=false - tags: | - type=sha,format=long,priority=2000,enable={{is_default_branch}} - type=ref,event=branch - type=ref,event=pr - type=raw,value=latest,enable={{is_default_branch}} - env: - DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index - - name: Build and push - uses: docker/build-push-action@v6 + - name: Docker build test + run: docker build . --target test --tag test + - name: Docker test + run: docker run test + - uses: metacpan/metacpan-actions/docker-build-push@master + id: build-push with: - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - annotations: ${{ steps.meta.outputs.annotations }} + docker_hub_username: ${{ secrets.DOCKER_HUB_USER }} + docker_hub_password: ${{ secrets.DOCKER_HUB_TOKEN }} + ghcr_username: ${{ github.repository_owner }} + ghcr_password: ${{ secrets.GITHUB_TOKEN }} - name: Update deployed image - if: ${{ contains( fromJSON(steps.meta.outputs.json).tags, format('{0}:latest', github.repository)) }} - uses: benc-uk/workflow-dispatch@v1 + if: ${{ fromJSON(steps.build-push.outputs.tag-fq).latest }} + uses: metacpan/metacpan-actions/update-deployed-tag@master with: - repo: metacpan/metacpan-k8s - ref: main - workflow: set-image.yml token: ${{ steps.app-token.outputs.token }} - inputs: '{ "app": "web", "environment": "prod", "base-tag": "${{ github.repository }}:latest", "tag": "${{ fromJSON(steps.meta.outputs.json).tags[0] }}" }' + app: web + environment: prod + base-tag: ${{ fromJSON(steps.build-push.outputs.tag-fq).latest }} + tag: ${{ fromJSON(steps.build-push.outputs.tag-fq).sha }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1fb3e7a93c..81e743f281 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. @@ -23,7 +23,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4 # Override language selection by uncommenting this and choosing your languages # with: # languages: go, javascript, csharp, python, cpp, java @@ -31,7 +31,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v3 + uses: github/codeql-action/autobuild@v4 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -45,4 +45,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b03b00e198..85c60b89ec 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-24.04 name: Code Formatting steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Fetch base ref @@ -40,6 +40,7 @@ jobs: run: ./bin/install-precious /usr/local/bin env: GITHUB_TOKEN: ${{ github.token }} + - run: perltidy --version - name: Select files id: select-files run: | @@ -67,7 +68,7 @@ jobs: runs-on: ubuntu-24.04 name: playwright test steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Build test image id: docker-build-test uses: docker/build-push-action@v6 @@ -77,9 +78,9 @@ jobs: load: true - name: Run Perl tests run: > - docker run -d -i -p 8000:80 + docker run -d -i -p 5001:8000 ${{ steps.docker-build-test.outputs.imageid }} - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: node-version: 22 - name: Install Playwright Browsers @@ -108,8 +109,8 @@ jobs: matrix.resolver == 'snapshot' && github.event.pull_request.user.login != 'dependabot[bot]' run: echo "enabled=1" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v6 with: node-version: '22' - run: npm install diff --git a/.github/workflows/update-snapshot.yml b/.github/workflows/update-snapshot.yml index 43ec271540..22571c0e72 100644 --- a/.github/workflows/update-snapshot.yml +++ b/.github/workflows/update-snapshot.yml @@ -7,74 +7,28 @@ jobs: update-dep: runs-on: 'ubuntu-24.04' steps: + - name: libcmark-dev + run: sudo apt-get install -y -f --no-install-recommends libcmark-dev - name: Generate Auth Token uses: actions/create-github-app-token@v2 id: app-token with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.APP_PRIVATE_KEY }} - - id: git-user - name: Set up git user - uses: haarg/setup-git-user@v1 + - uses: haarg/setup-git-user@v1 with: app: ${{ steps.app-token.outputs.app-slug }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: token: ${{ steps.app-token.outputs.token }} - - name: Set up installation local::lib - run: | - mkdir -p $RUNNER_TEMP/perl5/bin - mkdir -p $RUNNER_TEMP/perl5/lib/perl5 - echo "$RUNNER_TEMP/perl5/bin" >> "$GITHUB_PATH" - echo "PERL5LIB=$RUNNER_TEMP/perl5/lib/perl5" >> "$GITHUB_ENV" - - name: Get cpm - run: | - curl -sL -o $RUNNER_TEMP/perl5/bin/cpm https://raw.githubusercontent.com/skaji/cpm/main/cpm - chmod +x $RUNNER_TEMP/perl5/bin/cpm - - name: libcmark-dev - run: sudo apt-get install -y -f --no-install-recommends libcmark-dev - - name: Install cpanm, Carton, and Carton::Snapshot - run: > - cpm install - App::cpanminus - Carton - Carton::Snapshot - --without-test - --show-build-log-on-failure - --local-lib-contained=$RUNNER_TEMP/perl5 - - name: Install forced deps - run: > - cpanm - --cpanfile cpanfile.forced - --showdeps --installdeps - -L local - -q - . - | cpm install - --without-test - --resolver metacpan - --show-build-log-on-failure - --local-lib-contained=local - --reinstall - - - - name: Install deps - run: > - cpm install - --cpanfile cpanfile - --resolver metacpan - --show-build-log-on-failure - --local-lib-contained=local - --with-develop - - name: Maybe update cpanfile.snapshot - run: carton + - uses: metacpan/metacpan-actions/update-snapshot@master - name: Create Pull Request uses: peter-evans/create-pull-request@v7 with: token: ${{ steps.app-token.outputs.token }} commit-message: Update cpanfile.snapshot title: Update cpanfile.snapshot - author: ${{ steps.git-user.outputs.user-full }} - committer: ${{ steps.git-user.outputs.user-full }} + sign-commits: true body: | [GitHub Action Run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) branch: update-cpanfile-snapshot diff --git a/Dockerfile b/Dockerfile index de1ab83000..8bed63ef13 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,12 @@ +ARG SLIM_BUILD +ARG MAYBE_BASE_BUILD=${SLIM_BUILD:+server-base-slim} +ARG BASE_BUILD=${MAYBE_BASE_BUILD:-server-base} + ################### Asset Builder -FROM node:22 AS build-assets -SHELL [ "/bin/bash", "-euo", "pipefail", "-c" ] +FROM node:25-alpine AS build-assets ENV NO_UPDATE_NOTIFIER=1 +SHELL [ "/bin/sh", "-euo", "pipefail", "-c" ] WORKDIR /build/ @@ -24,9 +28,12 @@ EOT HEALTHCHECK CMD [ "test", "-e", "root/assets/assets.json" ] -################### Web Server -# hadolint ignore=DL3007 -FROM metacpan/metacpan-base:latest AS server +################### Web Server Base +FROM metacpan/metacpan-base:main-20250531-090128 AS server-base +FROM metacpan/metacpan-base:main-20250531-090129-slim AS server-base-slim + +################### CPAN Prereqs +FROM server-base AS build-cpan-prereqs SHELL [ "/bin/bash", "-euo", "pipefail", "-c" ] RUN \ @@ -46,32 +53,54 @@ RUN \ cpm install --show-build-log-on-failure --resolver=snapshot EOT -ENV PERL5LIB="/app/local/lib/perl5" -ENV PATH="/app/local/bin:${PATH}" +################### Web Server +# false positive +# hadolint ignore=DL3006 +FROM ${BASE_BUILD} AS server +SHELL [ "/bin/bash", "-euo", "pipefail", "-c" ] + +RUN \ + --mount=type=cache,target=/var/cache/apt,sharing=private \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=private \ +<= 0.30.2)' +EOT + +WORKDIR /app/ COPY *.md app.psgi log4perl* metacpan_web.* metacpan_web_local.* ./ COPY bin bin COPY lib lib COPY root root + COPY --from=build-assets /build/root/assets root/assets +COPY --from=build-cpan-prereqs /app/local local + +ENV PERL5LIB="/app/local/lib/perl5" +ENV PATH="/app/local/bin:${PATH}" +ENV METACPAN_WEB_HOME=/app CMD [ \ "/uwsgi.sh", \ - "--http-socket", ":80" \ + "--http-socket", ":8000" \ ] -EXPOSE 80 +EXPOSE 8000 -HEALTHCHECK --start-period=3s CMD [ "curl", "--fail", "http://localhost/healthcheck" ] +HEALTHCHECK --start-period=3s CMD [ "curl", "--fail", "http://localhost:8000/healthcheck" ] ################### Development Server FROM server AS develop +SHELL [ "/bin/bash", "-euo", "pipefail", "-c" ] -ENV COLUMNS="${COLUMNS:-120}" +ENV COLUMNS=120 ENV PLACK_ENV=development USER root +COPY cpanfile cpanfile.snapshot ./ + RUN \ --mount=type=cache,target=/root/.perl-cpm \ <= 21.6.1)' - npm install -g npm@^10.4.0 + apt-get satisfy -y -f --no-install-recommends 'nodejs (>= 24.1.0)' + npm install -g npm@^11.4.1 EOT COPY package.json package-lock.json ./ diff --git a/News.md b/News.md deleted file mode 100644 index d57e32854a..0000000000 --- a/News.md +++ /dev/null @@ -1,179 +0,0 @@ -## Title: Source code permalinks are here - -Date: 2020-03-29T00:00:00 - -Versioned permalinks from source code pages are -[now available](https://twitter.com/metacpan/status/1244677954275336200) - -## Title: Rendering .md files - -Date: 2019-10-18T01:54:00 - -We're now rendering .md files as HTML instead of as raw code. - -## Title: The traffic is coming - -Date: 2018-12-02T19:30:00 - -As -[announced](https://log.perl.org/2018/05/goodbye-search-dot-cpan-dot-org.html) -in the Perl NOC, search.cpan.org is going to redirect all traffic to MetaCPAN -from 25th of June 2018. We are doing lots of work to prepare for this trebling -of traffic. - -## Title: MetaHack 2 - -Date: 2017-11-02T19:30:00 - -http://www.olafalders.com/2017/10/12/announcing-metahack-v2/ - -https://metacpan.org/about/meta_hack - -http://blogs.perl.org/users/leo_lapworth/2017/11/metahack-2.html - -## Title: SSL improvements - -Date: 2014-12-02T19:30:00 - -Our servers have had their SSL configuration upgraded, so we now get an A rating -on -[SSL Labs](https://www.ssllabs.com/ssltest/analyze.html?d=fastapi.metacpan.org). - -[Fastly](https://www.fastly.com) who serve all our content other than the -[api](https://fastapi.metacpan.org/) already had tight configs... and now so do -we. I'd like to thank then for providing both examples, support and an IRC -channel where Donald Stufft from the Python infrastructure team was able to help -out. - -All our configs and systems are in our -[github repos](https://github.com/metacpan/) so feel free to review / improve or -'borrow' configs from. - -## Title: Liquid Web is Sponsoring MetaCPAN - -Date: 2014-11-08T03:00:00 - -We're immensely pleased to announce that -[Liquid Web Inc.](https://www.liquidweb.com/) is our newest hosting sponsor. -This sponsorship entails 3 powerful machines which are provided and co-located -by Liquid Web Inc. Having access to this hardware will allow us greater -redundancy in addition to giving us powerful machines to use as a staging area -when developing new MetaCPAN features. This is a huge development for us and -we'd like to thank Liquid Web Inc. for this very kind donation. More details to -come! - -## Title: Server move - phase 2 - -Date: 2014-10-21T19:00:00 - -We have moved all sites over to [Fastly](https://www.fastly.com) (where -possible) and they are backed up by the new -[Bytemark](https://www.bytemark.co.uk/) servers. - -We have further plans... but this will do for now, many thanks to our sponsors -for making this possible. - -[network-infrastructure](https://github.com/metacpan/network-infrastructure) and -[metacpan-puppet](https://github.com/metacpan/metacpan-puppet) have all our -configs if you want to see details of anything. - -## Title: Server move - phase 1 - -Date: 2014-09-19T19:00:00 - -We are moving servers, [Bytemark](https://www.bytemark.co.uk/) have asked for -the old one back... and given us 2 new ones in replacement! - -We are moving as much as possible to [Fastly](https://www.fastly.com) CDN which -makes switching origins very easy, and instant. - -So far we have moved... - -- http(s)://cpan.metacpan.org/ -- http://explorer.metacpan.org/ -- http://search.mcpan.org/ -- http://mcpan.org/ - -We will be documenting this a bit more under -[Network Infrastructure](https://github.com/metacpan/network-infrastructure) but -that's a work in progress. - -## Title: Let's move to Bootstrap 3 - -Date: 2014-08-06T08:55:22 - -MetaCPAN has moved to Bootstrap 3 as well as introducing cool icons from -[Font Awesome](http://fortawesome.github.io/Font-Awesome/). Let's make MetaCPAN -be more colorful! - -## Title: Link to Task::Kensho is now available on home page and no result page - -Date: 2014-06-14T23:25:11 - -If you’re absolute newbies who're not even sure what to search, it will be good -idea to take a look at [Task::Kensho!](https://metacpan.org/pod/Task::Kensho) We -provide a link to the module in both Home page and No result page with the idea -to help CPAN beginners to get started. - -## Title: Faster with Fastly - -Date: 2014-06-14T18:44:15 - -You may have noticed an increase in speed for https://metacpan.org/ since the -22nd of May, this is because the site is now served through -[Fastly](https://www.fastly.com/). Fastly are providing this service free of -charge. We are not fully utilising is yet (we don't let Fastly cache much), but -it makes all sorts of things easier for us and we will be able to do even more -for you with it in the future. - -## Title: Suggestion on incorrect number of colons - -Date: 2014-06-09T08:15:00 - -Perl module name should contain only 2 colons, some common mistakes are we -underuse or overuse it. Now, suggestion on no result page available when search -with missing colon such as -[Test:More](https://metacpan.org/search?q=Test%3AMore) or too much colons like -[DBIx:::Class::::ResultSet](https://metacpan.org/search?q=DBIx%3A%3A%3AClass%3A%3A%3A%3AResultSet). - -## Title: Table sorting is now persistent - -Date: 2014-05-19T10:50:12 - -When you change the sorting of a table it will be saved in your browser's -localStorage so that the next time you view that particular table it will -remember your last preference. This is saved on a per table basis (for example, -author releases, author favorites, and reverse dependency releases). No need to -set it every time when accessing that page in the same browser. - -## Title: Details of (++)plussers displayed - -Date: 2014-05-12T18:40:17 - -To get a better insight of which Pause users have ++ed a particular -distribution, a list of their gravatar images is displayed. Also, the count of -non-Pause plussers makes it easier to know how many users have liked the module. - -Hence, it gives us a perception of the people who recommend the module. - -## Title: Dependency Graphs are Here - -Date: 2014-05-13T20:50:10 - -Jeffrey Thalhammer took the time this week to contribute dependency graphs to -MetaCPAN. The graphs are hosted by [Stratopan](https://stratopan.com) and they -can be found on module and release pages under the "Reverse Dependencies" link. - -Thanks very much to [THALJEF](https://metacpan.org/author/THALJEF) for -implementing this new feature. - -## Title: News feed of MetaCPAN created - -Date: 2014-04-15T21:10:10 - -In this news feed you can follow the development of the MetaCPAN site. There is -also an [Atom feed](/feed/news). - -If you are interested in how the news feed itself was implemented, check out the -article -[Adding a News Feed to MetaCPAN](https://perlmaven.com/adding-news-feed-to-metacpan) diff --git a/README.md b/README.md index cf0277bfc0..195902ee95 100644 --- a/README.md +++ b/README.md @@ -102,11 +102,11 @@ with `precious path/to/file` The back end defaults to `api.metacpan.org/v1`. Running a local API server is optional and not required to hack on the front end. The address to the API being -used can be changed in the `metacpan_web.conf` file. Ideally you would create a -new file called `metacpan_web_local.conf` that contains +used can be changed in the `metacpan_web.yaml` file. Ideally you would create a +new file called `metacpan_web_local.yaml` that contains ```bash -api http://127.0.0.1:5000 +api: http://127.0.0.1:5000 ``` which will be loaded on top of the existing config file. diff --git a/app.psgi b/app.psgi index 8e0090534d..09bc85d844 100644 --- a/app.psgi +++ b/app.psgi @@ -106,6 +106,9 @@ builder { $env->{REMOTE_ADDR}, $env->{REQUEST_URI}, time, $$, rand, ) ); $env->{'MetaCPAN::Web.request_id'} = $request_id; + # Capture X-Trace-ID, set by Fastly, to pass to API backend + $env->{'MetaCPAN::Web.x_trace_id'} = $env->{HTTP_X_TRACE_ID}; + my $mdc = Log::Log4perl::MDC->get_context; %$mdc = ( request_id => $request_id, diff --git a/cpanfile b/cpanfile index 715d7fc79c..569589ce28 100644 --- a/cpanfile +++ b/cpanfile @@ -40,7 +40,7 @@ requires 'Locale::Country','3.62'; requires 'Log::Dispatch'; requires 'Log::Log4perl::Catalyst'; requires 'Log::Log4perl::Layout::JSON'; -requires 'MetaCPAN::Role', '0.06'; +requires 'MetaCPAN::Role', '1.00'; requires 'Module::Build::Tiny', '0.037'; requires 'Module::Runtime'; requires 'Moo', '2.000002'; @@ -92,6 +92,6 @@ on test => sub { on develop => sub { requires 'App::perlimports'; requires 'Perl::Critic', '1.136'; - requires 'Perl::Tidy' => '20240511'; + requires 'Perl::Tidy' => '20250311'; requires 'Test::Vars'; }; diff --git a/cpanfile.forced b/cpanfile.forced index 684401b259..ac399609bb 100644 --- a/cpanfile.forced +++ b/cpanfile.forced @@ -6,6 +6,7 @@ # would be satisfied by core. requires 'CPAN::Meta', '2.141520'; requires 'Devel::PPPort', '3.62'; # for older perls +requires 'ExtUtils::MakeMaker', '7.76'; requires 'HTTP::Lite', '2.44'; # Unpredictably depended on by XML::TreePP, which is a dep of XML::FeedPP requires 'HTTP::Tiny', '0.076'; # for older perls requires 'Pod::Parser', '1.63'; # for newer perls diff --git a/cpanfile.snapshot b/cpanfile.snapshot index 2462ac3f98..1abb3ce7ea 100644 --- a/cpanfile.snapshot +++ b/cpanfile.snapshot @@ -142,18 +142,18 @@ DISTRIBUTIONS POSIX::strftime::Compiler 0.30 Time::Local 0 perl 5.008001 - App-perlimports-0.000057 - pathname: O/OA/OALDERS/App-perlimports-0.000057.tar.gz - provides: - App::perlimports 0.000057 - App::perlimports::Annotations 0.000057 - App::perlimports::CLI 0.000057 - App::perlimports::Config 0.000057 - App::perlimports::Document 0.000057 - App::perlimports::ExportInspector 0.000057 - App::perlimports::Include 0.000057 - App::perlimports::Role::Logger 0.000057 - App::perlimports::Sandbox 0.000057 + App-perlimports-0.000058 + pathname: O/OA/OALDERS/App-perlimports-0.000058.tar.gz + provides: + App::perlimports 0.000058 + App::perlimports::Annotations 0.000058 + App::perlimports::CLI 0.000058 + App::perlimports::Config 0.000058 + App::perlimports::Document 0.000058 + App::perlimports::ExportInspector 0.000058 + App::perlimports::Include 0.000058 + App::perlimports::Role::Logger 0.000058 + App::perlimports::Sandbox 0.000058 requirements: Capture::Tiny 0 Class::Inspector 1.36 @@ -212,20 +212,20 @@ DISTRIBUTIONS perl 5.006001 strict 0 warnings 0 - B-Keywords-1.27 - pathname: R/RU/RURBAN/B-Keywords-1.27.tar.gz + B-Keywords-1.29 + pathname: R/RU/RURBAN/B-Keywords-1.29.tar.gz provides: - B::Keywords 1.27 + B::Keywords 1.29 requirements: B 0 ExtUtils::MakeMaker 0 - CGI-Simple-1.281 - pathname: M/MA/MANWAR/CGI-Simple-1.281.tar.gz + CGI-Simple-1.282 + pathname: M/MA/MANWAR/CGI-Simple-1.282.tar.gz provides: - CGI::Simple 1.281 - CGI::Simple::Cookie 1.281 - CGI::Simple::Standard 1.281 - CGI::Simple::Util 1.281 + CGI::Simple 1.282 + CGI::Simple::Cookie 1.282 + CGI::Simple::Standard 1.282 + CGI::Simple::Util 1.282 requirements: ExtUtils::MakeMaker 0 CGI-Struct-1.21 @@ -657,6 +657,17 @@ DISTRIBUTIONS Clone 0.47 requirements: ExtUtils::MakeMaker 0 + Clone-PP-1.08 + pathname: N/NE/NEILB/Clone-PP-1.08.tar.gz + provides: + Clone::PP 1.08 + requirements: + Exporter 0 + ExtUtils::MakeMaker 0 + perl 5.006 + strict 0 + vars 0 + warnings 0 CommonMark-0.310100 pathname: N/NW/NWELLNHOF/CommonMark-0.310100.tar.gz provides: @@ -724,10 +735,10 @@ DISTRIBUTIONS Module::Build::Tiny 0.035 URI::Escape 0 perl 5.008001 - Cpanel-JSON-XS-4.39 - pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.39.tar.gz + Cpanel-JSON-XS-4.40 + pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.40.tar.gz provides: - Cpanel::JSON::XS 4.39 + Cpanel::JSON::XS 4.40 Cpanel::JSON::XS::Type undef requirements: Carp 0 @@ -751,10 +762,10 @@ DISTRIBUTIONS File::Spec 0 Symbol 0 perl 5.008001 - Crypt-OpenSSL-RSA-0.35 - pathname: T/TO/TODDR/Crypt-OpenSSL-RSA-0.35.tar.gz + Crypt-OpenSSL-RSA-0.37 + pathname: T/TO/TODDR/Crypt-OpenSSL-RSA-0.37.tar.gz provides: - Crypt::OpenSSL::RSA 0.35 + Crypt::OpenSSL::RSA 0.37 requirements: Crypt::OpenSSL::Random 0 ExtUtils::MakeMaker 0 @@ -767,6 +778,17 @@ DISTRIBUTIONS requirements: Crypt::OpenSSL::Guess 0.11 ExtUtils::MakeMaker 0 + Crypt-SysRandom-0.007 + pathname: L/LE/LEONT/Crypt-SysRandom-0.007.tar.gz + provides: + Crypt::SysRandom 0.007 + requirements: + Carp 0 + Exporter 0 + ExtUtils::MakeMaker 0 + perl 5.006 + strict 0 + warnings 0 Data-Dump-1.25 pathname: G/GA/GARU/Data-Dump-1.25.tar.gz provides: @@ -1375,10 +1397,10 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 File::Temp 0 perl 5.006001 - Devel-OverloadInfo-0.007 - pathname: I/IL/ILMARI/Devel-OverloadInfo-0.007.tar.gz + Devel-OverloadInfo-0.008 + pathname: I/IL/ILMARI/Devel-OverloadInfo-0.008.tar.gz provides: - Devel::OverloadInfo 0.007 + Devel::OverloadInfo 0.008 requirements: B 0 Exporter 5.57 @@ -1517,10 +1539,10 @@ DISTRIBUTIONS Text::ParseWords 3.24 strict 0 warnings 0 - ExtUtils-InstallPaths-0.014 - pathname: L/LE/LEONT/ExtUtils-InstallPaths-0.014.tar.gz + ExtUtils-InstallPaths-0.015 + pathname: L/LE/LEONT/ExtUtils-InstallPaths-0.015.tar.gz provides: - ExtUtils::InstallPaths 0.014 + ExtUtils::InstallPaths 0.015 requirements: Carp 0 ExtUtils::Config 0.009 @@ -1529,6 +1551,52 @@ DISTRIBUTIONS perl 5.008 strict 0 warnings 0 + ExtUtils-MakeMaker-7.76 + pathname: B/BI/BINGOS/ExtUtils-MakeMaker-7.76.tar.gz + provides: + ExtUtils::Command 7.76 + ExtUtils::Command::MM 7.76 + ExtUtils::Liblist 7.76 + ExtUtils::Liblist::Kid 7.76 + ExtUtils::MM 7.76 + ExtUtils::MM_AIX 7.76 + ExtUtils::MM_Any 7.76 + ExtUtils::MM_BeOS 7.76 + ExtUtils::MM_Cygwin 7.76 + ExtUtils::MM_DOS 7.76 + ExtUtils::MM_Darwin 7.76 + ExtUtils::MM_MacOS 7.76 + ExtUtils::MM_NW5 7.76 + ExtUtils::MM_OS2 7.76 + ExtUtils::MM_OS390 7.76 + ExtUtils::MM_QNX 7.76 + ExtUtils::MM_UWIN 7.76 + ExtUtils::MM_Unix 7.76 + ExtUtils::MM_VMS 7.76 + ExtUtils::MM_VOS 7.76 + ExtUtils::MM_Win32 7.76 + ExtUtils::MM_Win95 7.76 + ExtUtils::MY 7.76 + ExtUtils::MakeMaker 7.76 + ExtUtils::MakeMaker::Config 7.76 + ExtUtils::MakeMaker::Locale 7.76 + ExtUtils::MakeMaker::_version 7.76 + ExtUtils::MakeMaker::charstar 7.76 + ExtUtils::MakeMaker::version 7.76 + ExtUtils::MakeMaker::version::regex 7.76 + ExtUtils::MakeMaker::version::vpp 7.76 + ExtUtils::Mkbootstrap 7.76 + ExtUtils::Mksymlists 7.76 + ExtUtils::testlib 7.76 + MM 7.76 + MY 7.76 + requirements: + Data::Dumper 0 + Encode 0 + File::Basename 0 + File::Spec 0.8 + Pod::Man 0 + perl 5.006 FFI-CheckLib-0.31 pathname: P/PL/PLICEASE/FFI-CheckLib-0.31.tar.gz provides: @@ -1617,16 +1685,16 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 perl 5.008001 - Future-0.51 - pathname: P/PE/PEVANS/Future-0.51.tar.gz + Future-0.52 + pathname: P/PE/PEVANS/Future-0.52.tar.gz provides: - Future 0.51 - Future::Exception 0.51 - Future::Mutex 0.51 - Future::PP 0.51 - Future::Utils 0.51 - Test::Future 0.51 - Test::Future::Deferred 0.51 + Future 0.52 + Future::Exception 0.52 + Future::Mutex 0.52 + Future::PP 0.52 + Future::Utils 0.52 + Test::Future 0.52 + Test::Future::Deferred 0.52 requirements: Carp 1.25 List::Util 1.29 @@ -1830,19 +1898,19 @@ DISTRIBUTIONS perl 5.005 strict 0 warnings 0 - HTTP-Message-7.00 - pathname: O/OA/OALDERS/HTTP-Message-7.00.tar.gz - provides: - HTTP::Config 7.00 - HTTP::Headers 7.00 - HTTP::Headers::Auth 7.00 - HTTP::Headers::ETag 7.00 - HTTP::Headers::Util 7.00 - HTTP::Message 7.00 - HTTP::Request 7.00 - HTTP::Request::Common 7.00 - HTTP::Response 7.00 - HTTP::Status 7.00 + HTTP-Message-7.01 + pathname: O/OA/OALDERS/HTTP-Message-7.01.tar.gz + provides: + HTTP::Config 7.01 + HTTP::Headers 7.01 + HTTP::Headers::Auth 7.01 + HTTP::Headers::ETag 7.01 + HTTP::Headers::Util 7.01 + HTTP::Message 7.01 + HTTP::Request 7.01 + HTTP::Request::Common 7.01 + HTTP::Response 7.01 + HTTP::Status 7.01 requirements: Carp 0 Clone 0.46 @@ -1996,18 +2064,18 @@ DISTRIBUTIONS Exporter 5.57 ExtUtils::MakeMaker 0 perl 5.008 - IO-Socket-SSL-2.089 - pathname: S/SU/SULLR/IO-Socket-SSL-2.089.tar.gz + IO-Socket-SSL-2.095 + pathname: S/SU/SULLR/IO-Socket-SSL-2.095.tar.gz provides: - IO::Socket::SSL 2.089 + IO::Socket::SSL 2.095 IO::Socket::SSL::Intercept 2.056 - IO::Socket::SSL::OCSP_Cache 2.089 - IO::Socket::SSL::OCSP_Resolver 2.089 + IO::Socket::SSL::OCSP_Cache 2.095 + IO::Socket::SSL::OCSP_Resolver 2.095 IO::Socket::SSL::PublicSuffix undef - IO::Socket::SSL::SSL_Context 2.089 - IO::Socket::SSL::SSL_HANDLE 2.089 - IO::Socket::SSL::Session_Cache 2.089 - IO::Socket::SSL::Trace 2.089 + IO::Socket::SSL::SSL_Context 2.095 + IO::Socket::SSL::SSL_HANDLE 2.095 + IO::Socket::SSL::Session_Cache 2.095 + IO::Socket::SSL::Trace 2.095 IO::Socket::SSL::Utils 2.015 requirements: ExtUtils::MakeMaker 0 @@ -2024,10 +2092,10 @@ DISTRIBUTIONS JSON::PP 2.27300 Scalar::Util 0 perl 5.006 - JSON-XS-4.03 - pathname: M/ML/MLEHMANN/JSON-XS-4.03.tar.gz + JSON-XS-4.04 + pathname: M/ML/MLEHMANN/JSON-XS-4.04.tar.gz provides: - JSON::XS 4.03 + JSON::XS 4.04 requirements: Canary::Stability 0 ExtUtils::MakeMaker 6.52 @@ -2092,36 +2160,36 @@ DISTRIBUTIONS XSLoader 0 strict 0 warnings 0 - Locale-Codes-3.82 - pathname: S/SB/SBECK/Locale-Codes-3.82.tar.gz - provides: - Locale::Codes 3.82 - Locale::Codes::Constants 3.82 - Locale::Codes::Country 3.82 - Locale::Codes::Country_Codes 3.82 - Locale::Codes::Country_Retired 3.82 - Locale::Codes::Currency 3.82 - Locale::Codes::Currency_Codes 3.82 - Locale::Codes::Currency_Retired 3.82 - Locale::Codes::LangExt 3.82 - Locale::Codes::LangExt_Codes 3.82 - Locale::Codes::LangExt_Retired 3.82 - Locale::Codes::LangFam 3.82 - Locale::Codes::LangFam_Codes 3.82 - Locale::Codes::LangFam_Retired 3.82 - Locale::Codes::LangVar 3.82 - Locale::Codes::LangVar_Codes 3.82 - Locale::Codes::LangVar_Retired 3.82 - Locale::Codes::Language 3.82 - Locale::Codes::Language_Codes 3.82 - Locale::Codes::Language_Retired 3.82 - Locale::Codes::Script 3.82 - Locale::Codes::Script_Codes 3.82 - Locale::Codes::Script_Retired 3.82 - Locale::Country 3.82 - Locale::Currency 3.82 - Locale::Language 3.82 - Locale::Script 3.82 + Locale-Codes-3.85 + pathname: S/SB/SBECK/Locale-Codes-3.85.tar.gz + provides: + Locale::Codes 3.85 + Locale::Codes::Constants 3.85 + Locale::Codes::Country 3.85 + Locale::Codes::Country_Codes 3.85 + Locale::Codes::Country_Retired 3.85 + Locale::Codes::Currency 3.85 + Locale::Codes::Currency_Codes 3.85 + Locale::Codes::Currency_Retired 3.85 + Locale::Codes::LangExt 3.85 + Locale::Codes::LangExt_Codes 3.85 + Locale::Codes::LangExt_Retired 3.85 + Locale::Codes::LangFam 3.85 + Locale::Codes::LangFam_Codes 3.85 + Locale::Codes::LangFam_Retired 3.85 + Locale::Codes::LangVar 3.85 + Locale::Codes::LangVar_Codes 3.85 + Locale::Codes::LangVar_Retired 3.85 + Locale::Codes::Language 3.85 + Locale::Codes::Language_Codes 3.85 + Locale::Codes::Language_Retired 3.85 + Locale::Codes::Script 3.85 + Locale::Codes::Script_Codes 3.85 + Locale::Codes::Script_Retired 3.85 + Locale::Country 3.85 + Locale::Currency 3.85 + Locale::Language 3.85 + Locale::Script 3.85 requirements: Carp 0 ExtUtils::MakeMaker 6.30 @@ -2178,7 +2246,6 @@ DISTRIBUTIONS Log-Log4perl-1.57 pathname: E/ET/ETJ/Log-Log4perl-1.57.tar.gz provides: - L4pResurrectable 0.01 Log::Log4perl 1.57 Log::Log4perl::Appender undef Log::Log4perl::Appender::Buffer 1.53 @@ -2261,12 +2328,12 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 perl 5.008001 utf8 0 - MIME-Types-2.28 - pathname: M/MA/MARKOV/MIME-Types-2.28.tar.gz + MIME-Types-2.29 + pathname: M/MA/MARKOV/MIME-Types-2.29.tar.gz provides: - MIME::Type 2.28 - MIME::Types 2.28 - MojoX::MIME::Types 2.28 + MIME::Type 2.29 + MIME::Types 2.29 + MojoX::MIME::Types 2.29 requirements: ExtUtils::MakeMaker 0 File::Basename 0 @@ -2280,18 +2347,18 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 perl 5.006 - MetaCPAN-Role-0.06 - pathname: L/LL/LLAP/MetaCPAN-Role-0.06.tar.gz + MetaCPAN-Role-1.00 + pathname: L/LL/LLAP/MetaCPAN-Role-1.00.tar.gz provides: - MetaCPAN::Role 0.06 - MetaCPAN::Role::Fastly 0.06 - MetaCPAN::Role::Fastly::Catalyst 0.06 + MetaCPAN::Role 1.00 + MetaCPAN::Role::Fastly 1.00 + MetaCPAN::Role::Fastly::Catalyst 1.00 requirements: Carp 0 - CatalystX::Fastly::Role::Response 0.04 + CatalystX::Fastly::Role::Response 0.07 ExtUtils::MakeMaker 0 Moose::Role 0 - MooseX::Fastly::Role 0.01 + MooseX::Fastly::Role 0.04 Net::Fastly 1.05 Metrics-Any-0.10 pathname: P/PE/PEVANS/Metrics-Any-0.10.tar.gz @@ -2516,446 +2583,446 @@ DISTRIBUTIONS Moo 2.004000 Moo::Role 0 perl 5.008 - Moose-2.2207 - pathname: E/ET/ETHER/Moose-2.2207.tar.gz - provides: - Class::MOP 2.2207 - Class::MOP::Attribute 2.2207 - Class::MOP::Class 2.2207 - Class::MOP::Class::Immutable::Trait 2.2207 - Class::MOP::Deprecated 2.2207 - Class::MOP::Instance 2.2207 - Class::MOP::Method 2.2207 - Class::MOP::Method::Accessor 2.2207 - Class::MOP::Method::Constructor 2.2207 - Class::MOP::Method::Generated 2.2207 - Class::MOP::Method::Inlined 2.2207 - Class::MOP::Method::Meta 2.2207 - Class::MOP::Method::Wrapped 2.2207 - Class::MOP::MiniTrait 2.2207 - Class::MOP::Mixin 2.2207 - Class::MOP::Mixin::AttributeCore 2.2207 - Class::MOP::Mixin::HasAttributes 2.2207 - Class::MOP::Mixin::HasMethods 2.2207 - Class::MOP::Mixin::HasOverloads 2.2207 - Class::MOP::Module 2.2207 - Class::MOP::Object 2.2207 - Class::MOP::Overload 2.2207 - Class::MOP::Package 2.2207 - Moose 2.2207 - Moose::Cookbook 2.2207 - Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing 2.2207 - Moose::Cookbook::Basics::BinaryTree_AttributeFeatures 2.2207 - Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild 2.2207 - Moose::Cookbook::Basics::Company_Subtypes 2.2207 - Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent 2.2207 - Moose::Cookbook::Basics::Document_AugmentAndInner 2.2207 - Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion 2.2207 - Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion 2.2207 - Moose::Cookbook::Basics::Immutable 2.2207 - Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD 2.2207 - Moose::Cookbook::Basics::Point_AttributesAndSubclassing 2.2207 - Moose::Cookbook::Extending::Debugging_BaseClassRole 2.2207 - Moose::Cookbook::Extending::ExtensionOverview 2.2207 - Moose::Cookbook::Extending::Mooseish_MooseSugar 2.2207 - Moose::Cookbook::Legacy::Debugging_BaseClassReplacement 2.2207 - Moose::Cookbook::Legacy::Labeled_AttributeMetaclass 2.2207 - Moose::Cookbook::Legacy::Table_ClassMetaclass 2.2207 - Moose::Cookbook::Meta::GlobRef_InstanceMetaclass 2.2207 - Moose::Cookbook::Meta::Labeled_AttributeTrait 2.2207 - Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass 2.2207 - Moose::Cookbook::Meta::Table_MetaclassTrait 2.2207 - Moose::Cookbook::Meta::WhyMeta 2.2207 - Moose::Cookbook::Roles::ApplicationToInstance 2.2207 - Moose::Cookbook::Roles::Comparable_CodeReuse 2.2207 - Moose::Cookbook::Roles::Restartable_AdvancedComposition 2.2207 - Moose::Cookbook::Snack::Keywords 2.2207 - Moose::Cookbook::Snack::Types 2.2207 - Moose::Cookbook::Style 2.2207 - Moose::Deprecated 2.2207 - Moose::Exception 2.2207 - Moose::Exception::AccessorMustReadWrite 2.2207 - Moose::Exception::AddParameterizableTypeTakesParameterizableType 2.2207 - Moose::Exception::AddRoleTakesAMooseMetaRoleInstance 2.2207 - Moose::Exception::AddRoleToARoleTakesAMooseMetaRole 2.2207 - Moose::Exception::ApplyTakesABlessedInstance 2.2207 - Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass 2.2207 - Moose::Exception::AttributeConflictInRoles 2.2207 - Moose::Exception::AttributeConflictInSummation 2.2207 - Moose::Exception::AttributeExtensionIsNotSupportedInRoles 2.2207 - Moose::Exception::AttributeIsRequired 2.2207 - Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass 2.2207 - Moose::Exception::AttributeNamesDoNotMatch 2.2207 - Moose::Exception::AttributeValueIsNotAnObject 2.2207 - Moose::Exception::AttributeValueIsNotDefined 2.2207 - Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef 2.2207 - Moose::Exception::BadOptionFormat 2.2207 - Moose::Exception::BothBuilderAndDefaultAreNotAllowed 2.2207 - Moose::Exception::BuilderDoesNotExist 2.2207 - Moose::Exception::BuilderMethodNotSupportedForAttribute 2.2207 - Moose::Exception::BuilderMethodNotSupportedForInlineAttribute 2.2207 - Moose::Exception::BuilderMustBeAMethodName 2.2207 - Moose::Exception::CallingMethodOnAnImmutableInstance 2.2207 - Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance 2.2207 - Moose::Exception::CanExtendOnlyClasses 2.2207 - Moose::Exception::CanOnlyConsumeRole 2.2207 - Moose::Exception::CanOnlyWrapBlessedCode 2.2207 - Moose::Exception::CanReblessOnlyIntoASubclass 2.2207 - Moose::Exception::CanReblessOnlyIntoASuperclass 2.2207 - Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion 2.2207 - Moose::Exception::CannotAddAsAnAttributeToARole 2.2207 - Moose::Exception::CannotApplyBaseClassRolesToRole 2.2207 - Moose::Exception::CannotAssignValueToReadOnlyAccessor 2.2207 - Moose::Exception::CannotAugmentIfLocalMethodPresent 2.2207 - Moose::Exception::CannotAugmentNoSuperMethod 2.2207 - Moose::Exception::CannotAutoDerefWithoutIsa 2.2207 - Moose::Exception::CannotAutoDereferenceTypeConstraint 2.2207 - Moose::Exception::CannotCalculateNativeType 2.2207 - Moose::Exception::CannotCallAnAbstractBaseMethod 2.2207 - Moose::Exception::CannotCallAnAbstractMethod 2.2207 - Moose::Exception::CannotCoerceAWeakRef 2.2207 - Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion 2.2207 - Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter 2.2207 - Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent 2.2207 - Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass 2.2207 - Moose::Exception::CannotDelegateLocalMethodIsPresent 2.2207 - Moose::Exception::CannotDelegateWithoutIsa 2.2207 - Moose::Exception::CannotFindDelegateMetaclass 2.2207 - Moose::Exception::CannotFindType 2.2207 - Moose::Exception::CannotFindTypeGivenToMatchOnType 2.2207 - Moose::Exception::CannotFixMetaclassCompatibility 2.2207 - Moose::Exception::CannotGenerateInlineConstraint 2.2207 - Moose::Exception::CannotInitializeMooseMetaRoleComposite 2.2207 - Moose::Exception::CannotInlineTypeConstraintCheck 2.2207 - Moose::Exception::CannotLocatePackageInINC 2.2207 - Moose::Exception::CannotMakeMetaclassCompatible 2.2207 - Moose::Exception::CannotOverrideALocalMethod 2.2207 - Moose::Exception::CannotOverrideBodyOfMetaMethods 2.2207 - Moose::Exception::CannotOverrideLocalMethodIsPresent 2.2207 - Moose::Exception::CannotOverrideNoSuperMethod 2.2207 - Moose::Exception::CannotRegisterUnnamedTypeConstraint 2.2207 - Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously 2.2207 - Moose::Exception::CircularReferenceInAlso 2.2207 - Moose::Exception::ClassDoesNotHaveInitMeta 2.2207 - Moose::Exception::ClassDoesTheExcludedRole 2.2207 - Moose::Exception::ClassNamesDoNotMatch 2.2207 - Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass 2.2207 - Moose::Exception::CodeBlockMustBeACodeRef 2.2207 - Moose::Exception::CoercingWithoutCoercions 2.2207 - Moose::Exception::CoercionAlreadyExists 2.2207 - Moose::Exception::CoercionNeedsTypeConstraint 2.2207 - Moose::Exception::ConflictDetectedInCheckRoleExclusions 2.2207 - Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass 2.2207 - Moose::Exception::ConstructClassInstanceTakesPackageName 2.2207 - Moose::Exception::CouldNotCreateMethod 2.2207 - Moose::Exception::CouldNotCreateWriter 2.2207 - Moose::Exception::CouldNotEvalConstructor 2.2207 - Moose::Exception::CouldNotEvalDestructor 2.2207 - Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom 2.2207 - Moose::Exception::CouldNotGenerateInlineAttributeMethod 2.2207 - Moose::Exception::CouldNotLocateTypeConstraintForUnion 2.2207 - Moose::Exception::CouldNotParseType 2.2207 - Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes 2.2207 - Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses 2.2207 - Moose::Exception::CreateMOPClassTakesHashRefOfMethods 2.2207 - Moose::Exception::CreateTakesArrayRefOfRoles 2.2207 - Moose::Exception::CreateTakesHashRefOfAttributes 2.2207 - Moose::Exception::CreateTakesHashRefOfMethods 2.2207 - Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef 2.2207 - Moose::Exception::DelegationToAClassWhichIsNotLoaded 2.2207 - Moose::Exception::DelegationToARoleWhichIsNotLoaded 2.2207 - Moose::Exception::DelegationToATypeWhichIsNotAClass 2.2207 - Moose::Exception::DoesRequiresRoleName 2.2207 - Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs 2.2207 - Moose::Exception::EnumValuesMustBeString 2.2207 - Moose::Exception::ExtendsMissingArgs 2.2207 - Moose::Exception::HandlesMustBeAHashRef 2.2207 - Moose::Exception::IllegalInheritedOptions 2.2207 - Moose::Exception::IllegalMethodTypeToAddMethodModifier 2.2207 - Moose::Exception::IncompatibleMetaclassOfSuperclass 2.2207 - Moose::Exception::InitMetaRequiresClass 2.2207 - Moose::Exception::InitializeTakesUnBlessedPackageName 2.2207 - Moose::Exception::InstanceBlessedIntoWrongClass 2.2207 - Moose::Exception::InstanceMustBeABlessedReference 2.2207 - Moose::Exception::InvalidArgPassedToMooseUtilMetaRole 2.2207 - Moose::Exception::InvalidArgumentToMethod 2.2207 - Moose::Exception::InvalidArgumentsToTraitAliases 2.2207 - Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint 2.2207 - Moose::Exception::InvalidHandleValue 2.2207 - Moose::Exception::InvalidHasProvidedInARole 2.2207 - Moose::Exception::InvalidNameForType 2.2207 - Moose::Exception::InvalidOverloadOperator 2.2207 - Moose::Exception::InvalidRoleApplication 2.2207 - Moose::Exception::InvalidTypeConstraint 2.2207 - Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint 2.2207 - Moose::Exception::InvalidValueForIs 2.2207 - Moose::Exception::IsaDoesNotDoTheRole 2.2207 - Moose::Exception::IsaLacksDoesMethod 2.2207 - Moose::Exception::LazyAttributeNeedsADefault 2.2207 - Moose::Exception::Legacy 2.2207 - Moose::Exception::MOPAttributeNewNeedsAttributeName 2.2207 - Moose::Exception::MatchActionMustBeACodeRef 2.2207 - Moose::Exception::MessageParameterMustBeCodeRef 2.2207 - Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass 2.2207 - Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass 2.2207 - Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass 2.2207 - Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass 2.2207 - Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole 2.2207 - Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass 2.2207 - Moose::Exception::MetaclassNotLoaded 2.2207 - Moose::Exception::MetaclassTypeIncompatible 2.2207 - Moose::Exception::MethodExpectedAMetaclassObject 2.2207 - Moose::Exception::MethodExpectsFewerArgs 2.2207 - Moose::Exception::MethodExpectsMoreArgs 2.2207 - Moose::Exception::MethodModifierNeedsMethodName 2.2207 - Moose::Exception::MethodNameConflictInRoles 2.2207 - Moose::Exception::MethodNameNotFoundInInheritanceHierarchy 2.2207 - Moose::Exception::MethodNameNotGiven 2.2207 - Moose::Exception::MustDefineAMethodName 2.2207 - Moose::Exception::MustDefineAnAttributeName 2.2207 - Moose::Exception::MustDefineAnOverloadOperator 2.2207 - Moose::Exception::MustHaveAtLeastOneValueToEnumerate 2.2207 - Moose::Exception::MustPassAHashOfOptions 2.2207 - Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass 2.2207 - Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance 2.2207 - Moose::Exception::MustPassEvenNumberOfArguments 2.2207 - Moose::Exception::MustPassEvenNumberOfAttributeOptions 2.2207 - Moose::Exception::MustProvideANameForTheAttribute 2.2207 - Moose::Exception::MustSpecifyAtleastOneMethod 2.2207 - Moose::Exception::MustSpecifyAtleastOneRole 2.2207 - Moose::Exception::MustSpecifyAtleastOneRoleToApplicant 2.2207 - Moose::Exception::MustSupplyAClassMOPAttributeInstance 2.2207 - Moose::Exception::MustSupplyADelegateToMethod 2.2207 - Moose::Exception::MustSupplyAMetaclass 2.2207 - Moose::Exception::MustSupplyAMooseMetaAttributeInstance 2.2207 - Moose::Exception::MustSupplyAnAccessorTypeToConstructWith 2.2207 - Moose::Exception::MustSupplyAnAttributeToConstructWith 2.2207 - Moose::Exception::MustSupplyArrayRefAsCurriedArguments 2.2207 - Moose::Exception::MustSupplyPackageNameAndName 2.2207 - Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion 2.2207 - Moose::Exception::NeitherAttributeNorAttributeNameIsGiven 2.2207 - Moose::Exception::NeitherClassNorClassNameIsGiven 2.2207 - Moose::Exception::NeitherRoleNorRoleNameIsGiven 2.2207 - Moose::Exception::NeitherTypeNorTypeNameIsGiven 2.2207 - Moose::Exception::NoAttributeFoundInSuperClass 2.2207 - Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass 2.2207 - Moose::Exception::NoCasesMatched 2.2207 - Moose::Exception::NoConstraintCheckForTypeConstraint 2.2207 - Moose::Exception::NoDestructorClassSpecified 2.2207 - Moose::Exception::NoImmutableTraitSpecifiedForClass 2.2207 - Moose::Exception::NoParentGivenToSubtype 2.2207 - Moose::Exception::OnlyInstancesCanBeCloned 2.2207 - Moose::Exception::OperatorIsRequired 2.2207 - Moose::Exception::OverloadConflictInSummation 2.2207 - Moose::Exception::OverloadRequiresAMetaClass 2.2207 - Moose::Exception::OverloadRequiresAMetaMethod 2.2207 - Moose::Exception::OverloadRequiresAMetaOverload 2.2207 - Moose::Exception::OverloadRequiresAMethodNameOrCoderef 2.2207 - Moose::Exception::OverloadRequiresAnOperator 2.2207 - Moose::Exception::OverloadRequiresNamesForCoderef 2.2207 - Moose::Exception::OverrideConflictInComposition 2.2207 - Moose::Exception::OverrideConflictInSummation 2.2207 - Moose::Exception::PackageDoesNotUseMooseExporter 2.2207 - Moose::Exception::PackageNameAndNameParamsNotGivenToWrap 2.2207 - Moose::Exception::PackagesAndModulesAreNotCachable 2.2207 - Moose::Exception::ParameterIsNotSubtypeOfParent 2.2207 - Moose::Exception::ReferencesAreNotAllowedAsDefault 2.2207 - Moose::Exception::RequiredAttributeLacksInitialization 2.2207 - Moose::Exception::RequiredAttributeNeedsADefault 2.2207 - Moose::Exception::RequiredMethodsImportedByClass 2.2207 - Moose::Exception::RequiredMethodsNotImplementedByClass 2.2207 - Moose::Exception::Role::Attribute 2.2207 - Moose::Exception::Role::AttributeName 2.2207 - Moose::Exception::Role::Class 2.2207 - Moose::Exception::Role::EitherAttributeOrAttributeName 2.2207 - Moose::Exception::Role::Instance 2.2207 - Moose::Exception::Role::InstanceClass 2.2207 - Moose::Exception::Role::InvalidAttributeOptions 2.2207 - Moose::Exception::Role::Method 2.2207 - Moose::Exception::Role::ParamsHash 2.2207 - Moose::Exception::Role::Role 2.2207 - Moose::Exception::Role::RoleForCreate 2.2207 - Moose::Exception::Role::RoleForCreateMOPClass 2.2207 - Moose::Exception::Role::TypeConstraint 2.2207 - Moose::Exception::RoleDoesTheExcludedRole 2.2207 - Moose::Exception::RoleExclusionConflict 2.2207 - Moose::Exception::RoleNameRequired 2.2207 - Moose::Exception::RoleNameRequiredForMooseMetaRole 2.2207 - Moose::Exception::RolesDoNotSupportAugment 2.2207 - Moose::Exception::RolesDoNotSupportExtends 2.2207 - Moose::Exception::RolesDoNotSupportInner 2.2207 - Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers 2.2207 - Moose::Exception::RolesInCreateTakesAnArrayRef 2.2207 - Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole 2.2207 - Moose::Exception::SingleParamsToNewMustBeHashRef 2.2207 - Moose::Exception::TriggerMustBeACodeRef 2.2207 - Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType 2.2207 - Moose::Exception::TypeConstraintIsAlreadyCreated 2.2207 - Moose::Exception::TypeParameterMustBeMooseMetaType 2.2207 - Moose::Exception::UnableToCanonicalizeHandles 2.2207 - Moose::Exception::UnableToCanonicalizeNonRolePackage 2.2207 - Moose::Exception::UnableToRecognizeDelegateMetaclass 2.2207 - Moose::Exception::UndefinedHashKeysPassedToMethod 2.2207 - Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs 2.2207 - Moose::Exception::UnionTakesAtleastTwoTypeNames 2.2207 - Moose::Exception::ValidationFailedForInlineTypeConstraint 2.2207 - Moose::Exception::ValidationFailedForTypeConstraint 2.2207 - Moose::Exception::WrapTakesACodeRefToBless 2.2207 - Moose::Exception::WrongTypeConstraintGiven 2.2207 - Moose::Exporter 2.2207 - Moose::Intro 2.2207 - Moose::Manual 2.2207 - Moose::Manual::Attributes 2.2207 - Moose::Manual::BestPractices 2.2207 - Moose::Manual::Classes 2.2207 - Moose::Manual::Concepts 2.2207 - Moose::Manual::Construction 2.2207 - Moose::Manual::Contributing 2.2207 - Moose::Manual::Delegation 2.2207 - Moose::Manual::Delta 2.2207 - Moose::Manual::Exceptions 2.2207 - Moose::Manual::Exceptions::Manifest 2.2207 - Moose::Manual::FAQ 2.2207 - Moose::Manual::MOP 2.2207 - Moose::Manual::MethodModifiers 2.2207 - Moose::Manual::MooseX 2.2207 - Moose::Manual::Resources 2.2207 - Moose::Manual::Roles 2.2207 - Moose::Manual::Support 2.2207 - Moose::Manual::Types 2.2207 - Moose::Manual::Unsweetened 2.2207 - Moose::Meta::Attribute 2.2207 - Moose::Meta::Attribute::Native 2.2207 - Moose::Meta::Attribute::Native::Trait 2.2207 - Moose::Meta::Attribute::Native::Trait::Array 2.2207 - Moose::Meta::Attribute::Native::Trait::Bool 2.2207 - Moose::Meta::Attribute::Native::Trait::Code 2.2207 - Moose::Meta::Attribute::Native::Trait::Counter 2.2207 - Moose::Meta::Attribute::Native::Trait::Hash 2.2207 - Moose::Meta::Attribute::Native::Trait::Number 2.2207 - Moose::Meta::Attribute::Native::Trait::String 2.2207 - Moose::Meta::Class 2.2207 - Moose::Meta::Class::Immutable::Trait 2.2207 - Moose::Meta::Instance 2.2207 - Moose::Meta::Method 2.2207 - Moose::Meta::Method::Accessor 2.2207 - Moose::Meta::Method::Accessor::Native 2.2207 - Moose::Meta::Method::Accessor::Native::Array 2.2207 - Moose::Meta::Method::Accessor::Native::Array::Writer 2.2207 - Moose::Meta::Method::Accessor::Native::Array::accessor 2.2207 - Moose::Meta::Method::Accessor::Native::Array::clear 2.2207 - Moose::Meta::Method::Accessor::Native::Array::count 2.2207 - Moose::Meta::Method::Accessor::Native::Array::delete 2.2207 - Moose::Meta::Method::Accessor::Native::Array::elements 2.2207 - Moose::Meta::Method::Accessor::Native::Array::first 2.2207 - Moose::Meta::Method::Accessor::Native::Array::first_index 2.2207 - Moose::Meta::Method::Accessor::Native::Array::get 2.2207 - Moose::Meta::Method::Accessor::Native::Array::grep 2.2207 - Moose::Meta::Method::Accessor::Native::Array::insert 2.2207 - Moose::Meta::Method::Accessor::Native::Array::is_empty 2.2207 - Moose::Meta::Method::Accessor::Native::Array::join 2.2207 - Moose::Meta::Method::Accessor::Native::Array::map 2.2207 - Moose::Meta::Method::Accessor::Native::Array::natatime 2.2207 - Moose::Meta::Method::Accessor::Native::Array::pop 2.2207 - Moose::Meta::Method::Accessor::Native::Array::push 2.2207 - Moose::Meta::Method::Accessor::Native::Array::reduce 2.2207 - Moose::Meta::Method::Accessor::Native::Array::set 2.2207 - Moose::Meta::Method::Accessor::Native::Array::shallow_clone 2.2207 - Moose::Meta::Method::Accessor::Native::Array::shift 2.2207 - Moose::Meta::Method::Accessor::Native::Array::shuffle 2.2207 - Moose::Meta::Method::Accessor::Native::Array::sort 2.2207 - Moose::Meta::Method::Accessor::Native::Array::sort_in_place 2.2207 - Moose::Meta::Method::Accessor::Native::Array::splice 2.2207 - Moose::Meta::Method::Accessor::Native::Array::uniq 2.2207 - Moose::Meta::Method::Accessor::Native::Array::unshift 2.2207 - Moose::Meta::Method::Accessor::Native::Bool::not 2.2207 - Moose::Meta::Method::Accessor::Native::Bool::set 2.2207 - Moose::Meta::Method::Accessor::Native::Bool::toggle 2.2207 - Moose::Meta::Method::Accessor::Native::Bool::unset 2.2207 - Moose::Meta::Method::Accessor::Native::Code::execute 2.2207 - Moose::Meta::Method::Accessor::Native::Code::execute_method 2.2207 - Moose::Meta::Method::Accessor::Native::Collection 2.2207 - Moose::Meta::Method::Accessor::Native::Counter::Writer 2.2207 - Moose::Meta::Method::Accessor::Native::Counter::dec 2.2207 - Moose::Meta::Method::Accessor::Native::Counter::inc 2.2207 - Moose::Meta::Method::Accessor::Native::Counter::reset 2.2207 - Moose::Meta::Method::Accessor::Native::Counter::set 2.2207 - Moose::Meta::Method::Accessor::Native::Hash 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::Writer 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::accessor 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::clear 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::count 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::defined 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::delete 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::elements 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::exists 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::get 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::is_empty 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::keys 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::kv 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::set 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::shallow_clone 2.2207 - Moose::Meta::Method::Accessor::Native::Hash::values 2.2207 - Moose::Meta::Method::Accessor::Native::Number::abs 2.2207 - Moose::Meta::Method::Accessor::Native::Number::add 2.2207 - Moose::Meta::Method::Accessor::Native::Number::div 2.2207 - Moose::Meta::Method::Accessor::Native::Number::mod 2.2207 - Moose::Meta::Method::Accessor::Native::Number::mul 2.2207 - Moose::Meta::Method::Accessor::Native::Number::set 2.2207 - Moose::Meta::Method::Accessor::Native::Number::sub 2.2207 - Moose::Meta::Method::Accessor::Native::Reader 2.2207 - Moose::Meta::Method::Accessor::Native::String::append 2.2207 - Moose::Meta::Method::Accessor::Native::String::chomp 2.2207 - Moose::Meta::Method::Accessor::Native::String::chop 2.2207 - Moose::Meta::Method::Accessor::Native::String::clear 2.2207 - Moose::Meta::Method::Accessor::Native::String::inc 2.2207 - Moose::Meta::Method::Accessor::Native::String::length 2.2207 - Moose::Meta::Method::Accessor::Native::String::match 2.2207 - Moose::Meta::Method::Accessor::Native::String::prepend 2.2207 - Moose::Meta::Method::Accessor::Native::String::replace 2.2207 - Moose::Meta::Method::Accessor::Native::String::substr 2.2207 - Moose::Meta::Method::Accessor::Native::Writer 2.2207 - Moose::Meta::Method::Augmented 2.2207 - Moose::Meta::Method::Constructor 2.2207 - Moose::Meta::Method::Delegation 2.2207 - Moose::Meta::Method::Destructor 2.2207 - Moose::Meta::Method::Meta 2.2207 - Moose::Meta::Method::Overridden 2.2207 - Moose::Meta::Mixin::AttributeCore 2.2207 - Moose::Meta::Object::Trait 2.2207 - Moose::Meta::Role 2.2207 - Moose::Meta::Role::Application 2.2207 - Moose::Meta::Role::Application::RoleSummation 2.2207 - Moose::Meta::Role::Application::ToClass 2.2207 - Moose::Meta::Role::Application::ToInstance 2.2207 - Moose::Meta::Role::Application::ToRole 2.2207 - Moose::Meta::Role::Attribute 2.2207 - Moose::Meta::Role::Composite 2.2207 - Moose::Meta::Role::Method 2.2207 - Moose::Meta::Role::Method::Conflicting 2.2207 - Moose::Meta::Role::Method::Required 2.2207 - Moose::Meta::TypeCoercion 2.2207 - Moose::Meta::TypeCoercion::Union 2.2207 - Moose::Meta::TypeConstraint 2.2207 - Moose::Meta::TypeConstraint::Class 2.2207 - Moose::Meta::TypeConstraint::DuckType 2.2207 - Moose::Meta::TypeConstraint::Enum 2.2207 - Moose::Meta::TypeConstraint::Parameterizable 2.2207 - Moose::Meta::TypeConstraint::Parameterized 2.2207 - Moose::Meta::TypeConstraint::Registry 2.2207 - Moose::Meta::TypeConstraint::Role 2.2207 - Moose::Meta::TypeConstraint::Union 2.2207 - Moose::Object 2.2207 - Moose::Role 2.2207 - Moose::Spec::Role 2.2207 - Moose::Unsweetened 2.2207 - Moose::Util 2.2207 - Moose::Util::MetaRole 2.2207 - Moose::Util::TypeConstraints 2.2207 - Moose::Util::TypeConstraints::Builtins 2.2207 - Test::Moose 2.2207 - metaclass 2.2207 - oose 2.2207 + Moose-2.4000 + pathname: E/ET/ETHER/Moose-2.4000.tar.gz + provides: + Class::MOP 2.4000 + Class::MOP::Attribute 2.4000 + Class::MOP::Class 2.4000 + Class::MOP::Class::Immutable::Trait 2.4000 + Class::MOP::Deprecated 2.4000 + Class::MOP::Instance 2.4000 + Class::MOP::Method 2.4000 + Class::MOP::Method::Accessor 2.4000 + Class::MOP::Method::Constructor 2.4000 + Class::MOP::Method::Generated 2.4000 + Class::MOP::Method::Inlined 2.4000 + Class::MOP::Method::Meta 2.4000 + Class::MOP::Method::Wrapped 2.4000 + Class::MOP::MiniTrait 2.4000 + Class::MOP::Mixin 2.4000 + Class::MOP::Mixin::AttributeCore 2.4000 + Class::MOP::Mixin::HasAttributes 2.4000 + Class::MOP::Mixin::HasMethods 2.4000 + Class::MOP::Mixin::HasOverloads 2.4000 + Class::MOP::Module 2.4000 + Class::MOP::Object 2.4000 + Class::MOP::Overload 2.4000 + Class::MOP::Package 2.4000 + Moose 2.4000 + Moose::Cookbook 2.4000 + Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing 2.4000 + Moose::Cookbook::Basics::BinaryTree_AttributeFeatures 2.4000 + Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild 2.4000 + Moose::Cookbook::Basics::Company_Subtypes 2.4000 + Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent 2.4000 + Moose::Cookbook::Basics::Document_AugmentAndInner 2.4000 + Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion 2.4000 + Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion 2.4000 + Moose::Cookbook::Basics::Immutable 2.4000 + Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD 2.4000 + Moose::Cookbook::Basics::Point_AttributesAndSubclassing 2.4000 + Moose::Cookbook::Extending::Debugging_BaseClassRole 2.4000 + Moose::Cookbook::Extending::ExtensionOverview 2.4000 + Moose::Cookbook::Extending::Mooseish_MooseSugar 2.4000 + Moose::Cookbook::Legacy::Debugging_BaseClassReplacement 2.4000 + Moose::Cookbook::Legacy::Labeled_AttributeMetaclass 2.4000 + Moose::Cookbook::Legacy::Table_ClassMetaclass 2.4000 + Moose::Cookbook::Meta::GlobRef_InstanceMetaclass 2.4000 + Moose::Cookbook::Meta::Labeled_AttributeTrait 2.4000 + Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass 2.4000 + Moose::Cookbook::Meta::Table_MetaclassTrait 2.4000 + Moose::Cookbook::Meta::WhyMeta 2.4000 + Moose::Cookbook::Roles::ApplicationToInstance 2.4000 + Moose::Cookbook::Roles::Comparable_CodeReuse 2.4000 + Moose::Cookbook::Roles::Restartable_AdvancedComposition 2.4000 + Moose::Cookbook::Snack::Keywords 2.4000 + Moose::Cookbook::Snack::Types 2.4000 + Moose::Cookbook::Style 2.4000 + Moose::Deprecated 2.4000 + Moose::Exception 2.4000 + Moose::Exception::AccessorMustReadWrite 2.4000 + Moose::Exception::AddParameterizableTypeTakesParameterizableType 2.4000 + Moose::Exception::AddRoleTakesAMooseMetaRoleInstance 2.4000 + Moose::Exception::AddRoleToARoleTakesAMooseMetaRole 2.4000 + Moose::Exception::ApplyTakesABlessedInstance 2.4000 + Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass 2.4000 + Moose::Exception::AttributeConflictInRoles 2.4000 + Moose::Exception::AttributeConflictInSummation 2.4000 + Moose::Exception::AttributeExtensionIsNotSupportedInRoles 2.4000 + Moose::Exception::AttributeIsRequired 2.4000 + Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass 2.4000 + Moose::Exception::AttributeNamesDoNotMatch 2.4000 + Moose::Exception::AttributeValueIsNotAnObject 2.4000 + Moose::Exception::AttributeValueIsNotDefined 2.4000 + Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef 2.4000 + Moose::Exception::BadOptionFormat 2.4000 + Moose::Exception::BothBuilderAndDefaultAreNotAllowed 2.4000 + Moose::Exception::BuilderDoesNotExist 2.4000 + Moose::Exception::BuilderMethodNotSupportedForAttribute 2.4000 + Moose::Exception::BuilderMethodNotSupportedForInlineAttribute 2.4000 + Moose::Exception::BuilderMustBeAMethodName 2.4000 + Moose::Exception::CallingMethodOnAnImmutableInstance 2.4000 + Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance 2.4000 + Moose::Exception::CanExtendOnlyClasses 2.4000 + Moose::Exception::CanOnlyConsumeRole 2.4000 + Moose::Exception::CanOnlyWrapBlessedCode 2.4000 + Moose::Exception::CanReblessOnlyIntoASubclass 2.4000 + Moose::Exception::CanReblessOnlyIntoASuperclass 2.4000 + Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion 2.4000 + Moose::Exception::CannotAddAsAnAttributeToARole 2.4000 + Moose::Exception::CannotApplyBaseClassRolesToRole 2.4000 + Moose::Exception::CannotAssignValueToReadOnlyAccessor 2.4000 + Moose::Exception::CannotAugmentIfLocalMethodPresent 2.4000 + Moose::Exception::CannotAugmentNoSuperMethod 2.4000 + Moose::Exception::CannotAutoDerefWithoutIsa 2.4000 + Moose::Exception::CannotAutoDereferenceTypeConstraint 2.4000 + Moose::Exception::CannotCalculateNativeType 2.4000 + Moose::Exception::CannotCallAnAbstractBaseMethod 2.4000 + Moose::Exception::CannotCallAnAbstractMethod 2.4000 + Moose::Exception::CannotCoerceAWeakRef 2.4000 + Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion 2.4000 + Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter 2.4000 + Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent 2.4000 + Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass 2.4000 + Moose::Exception::CannotDelegateLocalMethodIsPresent 2.4000 + Moose::Exception::CannotDelegateWithoutIsa 2.4000 + Moose::Exception::CannotFindDelegateMetaclass 2.4000 + Moose::Exception::CannotFindType 2.4000 + Moose::Exception::CannotFindTypeGivenToMatchOnType 2.4000 + Moose::Exception::CannotFixMetaclassCompatibility 2.4000 + Moose::Exception::CannotGenerateInlineConstraint 2.4000 + Moose::Exception::CannotInitializeMooseMetaRoleComposite 2.4000 + Moose::Exception::CannotInlineTypeConstraintCheck 2.4000 + Moose::Exception::CannotLocatePackageInINC 2.4000 + Moose::Exception::CannotMakeMetaclassCompatible 2.4000 + Moose::Exception::CannotOverrideALocalMethod 2.4000 + Moose::Exception::CannotOverrideBodyOfMetaMethods 2.4000 + Moose::Exception::CannotOverrideLocalMethodIsPresent 2.4000 + Moose::Exception::CannotOverrideNoSuperMethod 2.4000 + Moose::Exception::CannotRegisterUnnamedTypeConstraint 2.4000 + Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously 2.4000 + Moose::Exception::CircularReferenceInAlso 2.4000 + Moose::Exception::ClassDoesNotHaveInitMeta 2.4000 + Moose::Exception::ClassDoesTheExcludedRole 2.4000 + Moose::Exception::ClassNamesDoNotMatch 2.4000 + Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass 2.4000 + Moose::Exception::CodeBlockMustBeACodeRef 2.4000 + Moose::Exception::CoercingWithoutCoercions 2.4000 + Moose::Exception::CoercionAlreadyExists 2.4000 + Moose::Exception::CoercionNeedsTypeConstraint 2.4000 + Moose::Exception::ConflictDetectedInCheckRoleExclusions 2.4000 + Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass 2.4000 + Moose::Exception::ConstructClassInstanceTakesPackageName 2.4000 + Moose::Exception::CouldNotCreateMethod 2.4000 + Moose::Exception::CouldNotCreateWriter 2.4000 + Moose::Exception::CouldNotEvalConstructor 2.4000 + Moose::Exception::CouldNotEvalDestructor 2.4000 + Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom 2.4000 + Moose::Exception::CouldNotGenerateInlineAttributeMethod 2.4000 + Moose::Exception::CouldNotLocateTypeConstraintForUnion 2.4000 + Moose::Exception::CouldNotParseType 2.4000 + Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes 2.4000 + Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses 2.4000 + Moose::Exception::CreateMOPClassTakesHashRefOfMethods 2.4000 + Moose::Exception::CreateTakesArrayRefOfRoles 2.4000 + Moose::Exception::CreateTakesHashRefOfAttributes 2.4000 + Moose::Exception::CreateTakesHashRefOfMethods 2.4000 + Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef 2.4000 + Moose::Exception::DelegationToAClassWhichIsNotLoaded 2.4000 + Moose::Exception::DelegationToARoleWhichIsNotLoaded 2.4000 + Moose::Exception::DelegationToATypeWhichIsNotAClass 2.4000 + Moose::Exception::DoesRequiresRoleName 2.4000 + Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs 2.4000 + Moose::Exception::EnumValuesMustBeString 2.4000 + Moose::Exception::ExtendsMissingArgs 2.4000 + Moose::Exception::HandlesMustBeAHashRef 2.4000 + Moose::Exception::IllegalInheritedOptions 2.4000 + Moose::Exception::IllegalMethodTypeToAddMethodModifier 2.4000 + Moose::Exception::IncompatibleMetaclassOfSuperclass 2.4000 + Moose::Exception::InitMetaRequiresClass 2.4000 + Moose::Exception::InitializeTakesUnBlessedPackageName 2.4000 + Moose::Exception::InstanceBlessedIntoWrongClass 2.4000 + Moose::Exception::InstanceMustBeABlessedReference 2.4000 + Moose::Exception::InvalidArgPassedToMooseUtilMetaRole 2.4000 + Moose::Exception::InvalidArgumentToMethod 2.4000 + Moose::Exception::InvalidArgumentsToTraitAliases 2.4000 + Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint 2.4000 + Moose::Exception::InvalidHandleValue 2.4000 + Moose::Exception::InvalidHasProvidedInARole 2.4000 + Moose::Exception::InvalidNameForType 2.4000 + Moose::Exception::InvalidOverloadOperator 2.4000 + Moose::Exception::InvalidRoleApplication 2.4000 + Moose::Exception::InvalidTypeConstraint 2.4000 + Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint 2.4000 + Moose::Exception::InvalidValueForIs 2.4000 + Moose::Exception::IsaDoesNotDoTheRole 2.4000 + Moose::Exception::IsaLacksDoesMethod 2.4000 + Moose::Exception::LazyAttributeNeedsADefault 2.4000 + Moose::Exception::Legacy 2.4000 + Moose::Exception::MOPAttributeNewNeedsAttributeName 2.4000 + Moose::Exception::MatchActionMustBeACodeRef 2.4000 + Moose::Exception::MessageParameterMustBeCodeRef 2.4000 + Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass 2.4000 + Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass 2.4000 + Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass 2.4000 + Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass 2.4000 + Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole 2.4000 + Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass 2.4000 + Moose::Exception::MetaclassNotLoaded 2.4000 + Moose::Exception::MetaclassTypeIncompatible 2.4000 + Moose::Exception::MethodExpectedAMetaclassObject 2.4000 + Moose::Exception::MethodExpectsFewerArgs 2.4000 + Moose::Exception::MethodExpectsMoreArgs 2.4000 + Moose::Exception::MethodModifierNeedsMethodName 2.4000 + Moose::Exception::MethodNameConflictInRoles 2.4000 + Moose::Exception::MethodNameNotFoundInInheritanceHierarchy 2.4000 + Moose::Exception::MethodNameNotGiven 2.4000 + Moose::Exception::MustDefineAMethodName 2.4000 + Moose::Exception::MustDefineAnAttributeName 2.4000 + Moose::Exception::MustDefineAnOverloadOperator 2.4000 + Moose::Exception::MustHaveAtLeastOneValueToEnumerate 2.4000 + Moose::Exception::MustPassAHashOfOptions 2.4000 + Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass 2.4000 + Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance 2.4000 + Moose::Exception::MustPassEvenNumberOfArguments 2.4000 + Moose::Exception::MustPassEvenNumberOfAttributeOptions 2.4000 + Moose::Exception::MustProvideANameForTheAttribute 2.4000 + Moose::Exception::MustSpecifyAtleastOneMethod 2.4000 + Moose::Exception::MustSpecifyAtleastOneRole 2.4000 + Moose::Exception::MustSpecifyAtleastOneRoleToApplicant 2.4000 + Moose::Exception::MustSupplyAClassMOPAttributeInstance 2.4000 + Moose::Exception::MustSupplyADelegateToMethod 2.4000 + Moose::Exception::MustSupplyAMetaclass 2.4000 + Moose::Exception::MustSupplyAMooseMetaAttributeInstance 2.4000 + Moose::Exception::MustSupplyAnAccessorTypeToConstructWith 2.4000 + Moose::Exception::MustSupplyAnAttributeToConstructWith 2.4000 + Moose::Exception::MustSupplyArrayRefAsCurriedArguments 2.4000 + Moose::Exception::MustSupplyPackageNameAndName 2.4000 + Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion 2.4000 + Moose::Exception::NeitherAttributeNorAttributeNameIsGiven 2.4000 + Moose::Exception::NeitherClassNorClassNameIsGiven 2.4000 + Moose::Exception::NeitherRoleNorRoleNameIsGiven 2.4000 + Moose::Exception::NeitherTypeNorTypeNameIsGiven 2.4000 + Moose::Exception::NoAttributeFoundInSuperClass 2.4000 + Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass 2.4000 + Moose::Exception::NoCasesMatched 2.4000 + Moose::Exception::NoConstraintCheckForTypeConstraint 2.4000 + Moose::Exception::NoDestructorClassSpecified 2.4000 + Moose::Exception::NoImmutableTraitSpecifiedForClass 2.4000 + Moose::Exception::NoParentGivenToSubtype 2.4000 + Moose::Exception::OnlyInstancesCanBeCloned 2.4000 + Moose::Exception::OperatorIsRequired 2.4000 + Moose::Exception::OverloadConflictInSummation 2.4000 + Moose::Exception::OverloadRequiresAMetaClass 2.4000 + Moose::Exception::OverloadRequiresAMetaMethod 2.4000 + Moose::Exception::OverloadRequiresAMetaOverload 2.4000 + Moose::Exception::OverloadRequiresAMethodNameOrCoderef 2.4000 + Moose::Exception::OverloadRequiresAnOperator 2.4000 + Moose::Exception::OverloadRequiresNamesForCoderef 2.4000 + Moose::Exception::OverrideConflictInComposition 2.4000 + Moose::Exception::OverrideConflictInSummation 2.4000 + Moose::Exception::PackageDoesNotUseMooseExporter 2.4000 + Moose::Exception::PackageNameAndNameParamsNotGivenToWrap 2.4000 + Moose::Exception::PackagesAndModulesAreNotCachable 2.4000 + Moose::Exception::ParameterIsNotSubtypeOfParent 2.4000 + Moose::Exception::ReferencesAreNotAllowedAsDefault 2.4000 + Moose::Exception::RequiredAttributeLacksInitialization 2.4000 + Moose::Exception::RequiredAttributeNeedsADefault 2.4000 + Moose::Exception::RequiredMethodsImportedByClass 2.4000 + Moose::Exception::RequiredMethodsNotImplementedByClass 2.4000 + Moose::Exception::Role::Attribute 2.4000 + Moose::Exception::Role::AttributeName 2.4000 + Moose::Exception::Role::Class 2.4000 + Moose::Exception::Role::EitherAttributeOrAttributeName 2.4000 + Moose::Exception::Role::Instance 2.4000 + Moose::Exception::Role::InstanceClass 2.4000 + Moose::Exception::Role::InvalidAttributeOptions 2.4000 + Moose::Exception::Role::Method 2.4000 + Moose::Exception::Role::ParamsHash 2.4000 + Moose::Exception::Role::Role 2.4000 + Moose::Exception::Role::RoleForCreate 2.4000 + Moose::Exception::Role::RoleForCreateMOPClass 2.4000 + Moose::Exception::Role::TypeConstraint 2.4000 + Moose::Exception::RoleDoesTheExcludedRole 2.4000 + Moose::Exception::RoleExclusionConflict 2.4000 + Moose::Exception::RoleNameRequired 2.4000 + Moose::Exception::RoleNameRequiredForMooseMetaRole 2.4000 + Moose::Exception::RolesDoNotSupportAugment 2.4000 + Moose::Exception::RolesDoNotSupportExtends 2.4000 + Moose::Exception::RolesDoNotSupportInner 2.4000 + Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers 2.4000 + Moose::Exception::RolesInCreateTakesAnArrayRef 2.4000 + Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole 2.4000 + Moose::Exception::SingleParamsToNewMustBeHashRef 2.4000 + Moose::Exception::TriggerMustBeACodeRef 2.4000 + Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType 2.4000 + Moose::Exception::TypeConstraintIsAlreadyCreated 2.4000 + Moose::Exception::TypeParameterMustBeMooseMetaType 2.4000 + Moose::Exception::UnableToCanonicalizeHandles 2.4000 + Moose::Exception::UnableToCanonicalizeNonRolePackage 2.4000 + Moose::Exception::UnableToRecognizeDelegateMetaclass 2.4000 + Moose::Exception::UndefinedHashKeysPassedToMethod 2.4000 + Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs 2.4000 + Moose::Exception::UnionTakesAtleastTwoTypeNames 2.4000 + Moose::Exception::ValidationFailedForInlineTypeConstraint 2.4000 + Moose::Exception::ValidationFailedForTypeConstraint 2.4000 + Moose::Exception::WrapTakesACodeRefToBless 2.4000 + Moose::Exception::WrongTypeConstraintGiven 2.4000 + Moose::Exporter 2.4000 + Moose::Intro 2.4000 + Moose::Manual 2.4000 + Moose::Manual::Attributes 2.4000 + Moose::Manual::BestPractices 2.4000 + Moose::Manual::Classes 2.4000 + Moose::Manual::Concepts 2.4000 + Moose::Manual::Construction 2.4000 + Moose::Manual::Contributing 2.4000 + Moose::Manual::Delegation 2.4000 + Moose::Manual::Delta 2.4000 + Moose::Manual::Exceptions 2.4000 + Moose::Manual::Exceptions::Manifest 2.4000 + Moose::Manual::FAQ 2.4000 + Moose::Manual::MOP 2.4000 + Moose::Manual::MethodModifiers 2.4000 + Moose::Manual::MooseX 2.4000 + Moose::Manual::Resources 2.4000 + Moose::Manual::Roles 2.4000 + Moose::Manual::Support 2.4000 + Moose::Manual::Types 2.4000 + Moose::Manual::Unsweetened 2.4000 + Moose::Meta::Attribute 2.4000 + Moose::Meta::Attribute::Native 2.4000 + Moose::Meta::Attribute::Native::Trait 2.4000 + Moose::Meta::Attribute::Native::Trait::Array 2.4000 + Moose::Meta::Attribute::Native::Trait::Bool 2.4000 + Moose::Meta::Attribute::Native::Trait::Code 2.4000 + Moose::Meta::Attribute::Native::Trait::Counter 2.4000 + Moose::Meta::Attribute::Native::Trait::Hash 2.4000 + Moose::Meta::Attribute::Native::Trait::Number 2.4000 + Moose::Meta::Attribute::Native::Trait::String 2.4000 + Moose::Meta::Class 2.4000 + Moose::Meta::Class::Immutable::Trait 2.4000 + Moose::Meta::Instance 2.4000 + Moose::Meta::Method 2.4000 + Moose::Meta::Method::Accessor 2.4000 + Moose::Meta::Method::Accessor::Native 2.4000 + Moose::Meta::Method::Accessor::Native::Array 2.4000 + Moose::Meta::Method::Accessor::Native::Array::Writer 2.4000 + Moose::Meta::Method::Accessor::Native::Array::accessor 2.4000 + Moose::Meta::Method::Accessor::Native::Array::clear 2.4000 + Moose::Meta::Method::Accessor::Native::Array::count 2.4000 + Moose::Meta::Method::Accessor::Native::Array::delete 2.4000 + Moose::Meta::Method::Accessor::Native::Array::elements 2.4000 + Moose::Meta::Method::Accessor::Native::Array::first 2.4000 + Moose::Meta::Method::Accessor::Native::Array::first_index 2.4000 + Moose::Meta::Method::Accessor::Native::Array::get 2.4000 + Moose::Meta::Method::Accessor::Native::Array::grep 2.4000 + Moose::Meta::Method::Accessor::Native::Array::insert 2.4000 + Moose::Meta::Method::Accessor::Native::Array::is_empty 2.4000 + Moose::Meta::Method::Accessor::Native::Array::join 2.4000 + Moose::Meta::Method::Accessor::Native::Array::map 2.4000 + Moose::Meta::Method::Accessor::Native::Array::natatime 2.4000 + Moose::Meta::Method::Accessor::Native::Array::pop 2.4000 + Moose::Meta::Method::Accessor::Native::Array::push 2.4000 + Moose::Meta::Method::Accessor::Native::Array::reduce 2.4000 + Moose::Meta::Method::Accessor::Native::Array::set 2.4000 + Moose::Meta::Method::Accessor::Native::Array::shallow_clone 2.4000 + Moose::Meta::Method::Accessor::Native::Array::shift 2.4000 + Moose::Meta::Method::Accessor::Native::Array::shuffle 2.4000 + Moose::Meta::Method::Accessor::Native::Array::sort 2.4000 + Moose::Meta::Method::Accessor::Native::Array::sort_in_place 2.4000 + Moose::Meta::Method::Accessor::Native::Array::splice 2.4000 + Moose::Meta::Method::Accessor::Native::Array::uniq 2.4000 + Moose::Meta::Method::Accessor::Native::Array::unshift 2.4000 + Moose::Meta::Method::Accessor::Native::Bool::not 2.4000 + Moose::Meta::Method::Accessor::Native::Bool::set 2.4000 + Moose::Meta::Method::Accessor::Native::Bool::toggle 2.4000 + Moose::Meta::Method::Accessor::Native::Bool::unset 2.4000 + Moose::Meta::Method::Accessor::Native::Code::execute 2.4000 + Moose::Meta::Method::Accessor::Native::Code::execute_method 2.4000 + Moose::Meta::Method::Accessor::Native::Collection 2.4000 + Moose::Meta::Method::Accessor::Native::Counter::Writer 2.4000 + Moose::Meta::Method::Accessor::Native::Counter::dec 2.4000 + Moose::Meta::Method::Accessor::Native::Counter::inc 2.4000 + Moose::Meta::Method::Accessor::Native::Counter::reset 2.4000 + Moose::Meta::Method::Accessor::Native::Counter::set 2.4000 + Moose::Meta::Method::Accessor::Native::Hash 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::Writer 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::accessor 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::clear 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::count 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::defined 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::delete 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::elements 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::exists 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::get 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::is_empty 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::keys 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::kv 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::set 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::shallow_clone 2.4000 + Moose::Meta::Method::Accessor::Native::Hash::values 2.4000 + Moose::Meta::Method::Accessor::Native::Number::abs 2.4000 + Moose::Meta::Method::Accessor::Native::Number::add 2.4000 + Moose::Meta::Method::Accessor::Native::Number::div 2.4000 + Moose::Meta::Method::Accessor::Native::Number::mod 2.4000 + Moose::Meta::Method::Accessor::Native::Number::mul 2.4000 + Moose::Meta::Method::Accessor::Native::Number::set 2.4000 + Moose::Meta::Method::Accessor::Native::Number::sub 2.4000 + Moose::Meta::Method::Accessor::Native::Reader 2.4000 + Moose::Meta::Method::Accessor::Native::String::append 2.4000 + Moose::Meta::Method::Accessor::Native::String::chomp 2.4000 + Moose::Meta::Method::Accessor::Native::String::chop 2.4000 + Moose::Meta::Method::Accessor::Native::String::clear 2.4000 + Moose::Meta::Method::Accessor::Native::String::inc 2.4000 + Moose::Meta::Method::Accessor::Native::String::length 2.4000 + Moose::Meta::Method::Accessor::Native::String::match 2.4000 + Moose::Meta::Method::Accessor::Native::String::prepend 2.4000 + Moose::Meta::Method::Accessor::Native::String::replace 2.4000 + Moose::Meta::Method::Accessor::Native::String::substr 2.4000 + Moose::Meta::Method::Accessor::Native::Writer 2.4000 + Moose::Meta::Method::Augmented 2.4000 + Moose::Meta::Method::Constructor 2.4000 + Moose::Meta::Method::Delegation 2.4000 + Moose::Meta::Method::Destructor 2.4000 + Moose::Meta::Method::Meta 2.4000 + Moose::Meta::Method::Overridden 2.4000 + Moose::Meta::Mixin::AttributeCore 2.4000 + Moose::Meta::Object::Trait 2.4000 + Moose::Meta::Role 2.4000 + Moose::Meta::Role::Application 2.4000 + Moose::Meta::Role::Application::RoleSummation 2.4000 + Moose::Meta::Role::Application::ToClass 2.4000 + Moose::Meta::Role::Application::ToInstance 2.4000 + Moose::Meta::Role::Application::ToRole 2.4000 + Moose::Meta::Role::Attribute 2.4000 + Moose::Meta::Role::Composite 2.4000 + Moose::Meta::Role::Method 2.4000 + Moose::Meta::Role::Method::Conflicting 2.4000 + Moose::Meta::Role::Method::Required 2.4000 + Moose::Meta::TypeCoercion 2.4000 + Moose::Meta::TypeCoercion::Union 2.4000 + Moose::Meta::TypeConstraint 2.4000 + Moose::Meta::TypeConstraint::Class 2.4000 + Moose::Meta::TypeConstraint::DuckType 2.4000 + Moose::Meta::TypeConstraint::Enum 2.4000 + Moose::Meta::TypeConstraint::Parameterizable 2.4000 + Moose::Meta::TypeConstraint::Parameterized 2.4000 + Moose::Meta::TypeConstraint::Registry 2.4000 + Moose::Meta::TypeConstraint::Role 2.4000 + Moose::Meta::TypeConstraint::Union 2.4000 + Moose::Object 2.4000 + Moose::Role 2.4000 + Moose::Spec::Role 2.4000 + Moose::Unsweetened 2.4000 + Moose::Util 2.4000 + Moose::Util::MetaRole 2.4000 + Moose::Util::TypeConstraints 2.4000 + Moose::Util::TypeConstraints::Builtins 2.4000 + Test::Moose 2.4000 + metaclass 2.4000 + oose 2.4000 requirements: Carp 1.22 Class::Load 0.09 @@ -3083,10 +3150,10 @@ DISTRIBUTIONS perl 5.008001 strict 0 warnings 0 - Mouse-v2.5.11 - pathname: S/SK/SKAJI/Mouse-v2.5.11.tar.gz + Mouse-v2.6.0 + pathname: S/SY/SYOHEX/Mouse-v2.6.0.tar.gz provides: - Mouse v2.5.11 + Mouse v2.6.0 Mouse::Exporter undef Mouse::Meta::Attribute undef Mouse::Meta::Class undef @@ -3104,10 +3171,11 @@ DISTRIBUTIONS Mouse::Meta::TypeConstraint undef Mouse::Object undef Mouse::PurePerl undef - Mouse::Role v2.5.11 - Mouse::Spec v2.5.11 + Mouse::Role v2.6.0 + Mouse::Spec v2.6.0 + Mouse::Tiny v2.5.12 Mouse::TypeRegistry undef - Mouse::Util v2.5.11 + Mouse::Util v2.6.0 Mouse::Util::MetaRole undef Mouse::Util::TypeConstraints undef Squirrel undef @@ -3120,7 +3188,7 @@ DISTRIBUTIONS Module::Build::XSUtil 0.19 Scalar::Util 1.14 XSLoader 0.02 - perl 5.008005 + perl 5.010001 Net-Async-HTTP-0.50 pathname: P/PE/PEVANS/Net-Async-HTTP-0.50.tar.gz provides: @@ -3183,13 +3251,13 @@ DISTRIBUTIONS URI 0 URI::Escape 0 YAML 0 - Net-HTTP-6.23 - pathname: O/OA/OALDERS/Net-HTTP-6.23.tar.gz + Net-HTTP-6.24 + pathname: O/OA/OALDERS/Net-HTTP-6.24.tar.gz provides: - Net::HTTP 6.23 - Net::HTTP::Methods 6.23 - Net::HTTP::NB 6.23 - Net::HTTPS 6.23 + Net::HTTP 6.24 + Net::HTTP::Methods 6.24 + Net::HTTP::NB 6.24 + Net::HTTPS 6.24 requirements: Carp 0 Compress::Raw::Zlib 0 @@ -3240,101 +3308,101 @@ DISTRIBUTIONS POSIX 0 Time::Local 0 perl 5.008001 - PPI-1.283 - pathname: M/MI/MITHALDU/PPI-1.283.tar.gz - provides: - PPI 1.283 - PPI::Cache 1.283 - PPI::Document 1.283 - PPI::Document::File 1.283 - PPI::Document::Fragment 1.283 - PPI::Document::Normalized 1.283 - PPI::Dumper 1.283 - PPI::Element 1.283 - PPI::Exception 1.283 - PPI::Exception::ParserRejection 1.283 - PPI::Find 1.283 - PPI::Lexer 1.283 - PPI::Node 1.283 - PPI::Normal 1.283 - PPI::Normal::Standard 1.283 - PPI::Singletons 1.283 - PPI::Statement 1.283 - PPI::Statement::Break 1.283 - PPI::Statement::Compound 1.283 - PPI::Statement::Data 1.283 - PPI::Statement::End 1.283 - PPI::Statement::Expression 1.283 - PPI::Statement::Given 1.283 - PPI::Statement::Include 1.283 - PPI::Statement::Include::Perl6 1.283 - PPI::Statement::Null 1.283 - PPI::Statement::Package 1.283 - PPI::Statement::Scheduled 1.283 - PPI::Statement::Sub 1.283 - PPI::Statement::Unknown 1.283 - PPI::Statement::UnmatchedBrace 1.283 - PPI::Statement::Variable 1.283 - PPI::Statement::When 1.283 - PPI::Structure 1.283 - PPI::Structure::Block 1.283 - PPI::Structure::Condition 1.283 - PPI::Structure::Constructor 1.283 - PPI::Structure::For 1.283 - PPI::Structure::Given 1.283 - PPI::Structure::List 1.283 - PPI::Structure::Signature 1.283 - PPI::Structure::Subscript 1.283 - PPI::Structure::Unknown 1.283 - PPI::Structure::When 1.283 - PPI::Token 1.283 - PPI::Token::ArrayIndex 1.283 - PPI::Token::Attribute 1.283 - PPI::Token::BOM 1.283 - PPI::Token::Cast 1.283 - PPI::Token::Comment 1.283 - PPI::Token::DashedWord 1.283 - PPI::Token::Data 1.283 - PPI::Token::End 1.283 - PPI::Token::HereDoc 1.283 - PPI::Token::Label 1.283 - PPI::Token::Magic 1.283 - PPI::Token::Number 1.283 - PPI::Token::Number::Binary 1.283 - PPI::Token::Number::Exp 1.283 - PPI::Token::Number::Float 1.283 - PPI::Token::Number::Hex 1.283 - PPI::Token::Number::Octal 1.283 - PPI::Token::Number::Version 1.283 - PPI::Token::Operator 1.283 - PPI::Token::Pod 1.283 - PPI::Token::Prototype 1.283 - PPI::Token::Quote 1.283 - PPI::Token::Quote::Double 1.283 - PPI::Token::Quote::Interpolate 1.283 - PPI::Token::Quote::Literal 1.283 - PPI::Token::Quote::Single 1.283 - PPI::Token::QuoteLike 1.283 - PPI::Token::QuoteLike::Backtick 1.283 - PPI::Token::QuoteLike::Command 1.283 - PPI::Token::QuoteLike::Readline 1.283 - PPI::Token::QuoteLike::Regexp 1.283 - PPI::Token::QuoteLike::Words 1.283 - PPI::Token::Regexp 1.283 - PPI::Token::Regexp::Match 1.283 - PPI::Token::Regexp::Substitute 1.283 - PPI::Token::Regexp::Transliterate 1.283 - PPI::Token::Separator 1.283 - PPI::Token::Structure 1.283 - PPI::Token::Symbol 1.283 - PPI::Token::Unknown 1.283 - PPI::Token::Whitespace 1.283 - PPI::Token::Word 1.283 - PPI::Tokenizer 1.283 - PPI::Transform 1.283 - PPI::Transform::UpdateCopyright 1.283 - PPI::Util 1.283 - PPI::XSAccessor 1.283 + PPI-1.284 + pathname: O/OA/OALDERS/PPI-1.284.tar.gz + provides: + PPI 1.284 + PPI::Cache 1.284 + PPI::Document 1.284 + PPI::Document::File 1.284 + PPI::Document::Fragment 1.284 + PPI::Document::Normalized 1.284 + PPI::Dumper 1.284 + PPI::Element 1.284 + PPI::Exception 1.284 + PPI::Exception::ParserRejection 1.284 + PPI::Find 1.284 + PPI::Lexer 1.284 + PPI::Node 1.284 + PPI::Normal 1.284 + PPI::Normal::Standard 1.284 + PPI::Singletons 1.284 + PPI::Statement 1.284 + PPI::Statement::Break 1.284 + PPI::Statement::Compound 1.284 + PPI::Statement::Data 1.284 + PPI::Statement::End 1.284 + PPI::Statement::Expression 1.284 + PPI::Statement::Given 1.284 + PPI::Statement::Include 1.284 + PPI::Statement::Include::Perl6 1.284 + PPI::Statement::Null 1.284 + PPI::Statement::Package 1.284 + PPI::Statement::Scheduled 1.284 + PPI::Statement::Sub 1.284 + PPI::Statement::Unknown 1.284 + PPI::Statement::UnmatchedBrace 1.284 + PPI::Statement::Variable 1.284 + PPI::Statement::When 1.284 + PPI::Structure 1.284 + PPI::Structure::Block 1.284 + PPI::Structure::Condition 1.284 + PPI::Structure::Constructor 1.284 + PPI::Structure::For 1.284 + PPI::Structure::Given 1.284 + PPI::Structure::List 1.284 + PPI::Structure::Signature 1.284 + PPI::Structure::Subscript 1.284 + PPI::Structure::Unknown 1.284 + PPI::Structure::When 1.284 + PPI::Token 1.284 + PPI::Token::ArrayIndex 1.284 + PPI::Token::Attribute 1.284 + PPI::Token::BOM 1.284 + PPI::Token::Cast 1.284 + PPI::Token::Comment 1.284 + PPI::Token::DashedWord 1.284 + PPI::Token::Data 1.284 + PPI::Token::End 1.284 + PPI::Token::HereDoc 1.284 + PPI::Token::Label 1.284 + PPI::Token::Magic 1.284 + PPI::Token::Number 1.284 + PPI::Token::Number::Binary 1.284 + PPI::Token::Number::Exp 1.284 + PPI::Token::Number::Float 1.284 + PPI::Token::Number::Hex 1.284 + PPI::Token::Number::Octal 1.284 + PPI::Token::Number::Version 1.284 + PPI::Token::Operator 1.284 + PPI::Token::Pod 1.284 + PPI::Token::Prototype 1.284 + PPI::Token::Quote 1.284 + PPI::Token::Quote::Double 1.284 + PPI::Token::Quote::Interpolate 1.284 + PPI::Token::Quote::Literal 1.284 + PPI::Token::Quote::Single 1.284 + PPI::Token::QuoteLike 1.284 + PPI::Token::QuoteLike::Backtick 1.284 + PPI::Token::QuoteLike::Command 1.284 + PPI::Token::QuoteLike::Readline 1.284 + PPI::Token::QuoteLike::Regexp 1.284 + PPI::Token::QuoteLike::Words 1.284 + PPI::Token::Regexp 1.284 + PPI::Token::Regexp::Match 1.284 + PPI::Token::Regexp::Substitute 1.284 + PPI::Token::Regexp::Transliterate 1.284 + PPI::Token::Separator 1.284 + PPI::Token::Structure 1.284 + PPI::Token::Symbol 1.284 + PPI::Token::Unknown 1.284 + PPI::Token::Whitespace 1.284 + PPI::Token::Word 1.284 + PPI::Tokenizer 1.284 + PPI::Transform 1.284 + PPI::Transform::UpdateCopyright 1.284 + PPI::Util 1.284 + PPI::XSAccessor 1.284 requirements: Carp 0 Clone 0.30 @@ -3389,75 +3457,75 @@ DISTRIBUTIONS re 0 strict 0 warnings 0 - PPIx-Regexp-0.088 - pathname: W/WY/WYANT/PPIx-Regexp-0.088.tar.gz + PPIx-Regexp-0.091 + pathname: W/WY/WYANT/PPIx-Regexp-0.091.tar.gz provides: - PPIx::Regexp 0.088 + PPIx::Regexp 0.091 PPIx::Regexp::Constant 0.085_04 - PPIx::Regexp::Constant::Inf 0.088 - PPIx::Regexp::Dumper 0.088 - PPIx::Regexp::Element 0.088 - PPIx::Regexp::Lexer 0.088 - PPIx::Regexp::Node 0.088 - PPIx::Regexp::Node::Range 0.088 - PPIx::Regexp::Node::Unknown 0.088 - PPIx::Regexp::Structure 0.088 - PPIx::Regexp::Structure::Assertion 0.088 - PPIx::Regexp::Structure::Atomic_Script_Run 0.088 - PPIx::Regexp::Structure::BranchReset 0.088 - PPIx::Regexp::Structure::Capture 0.088 - PPIx::Regexp::Structure::CharClass 0.088 - PPIx::Regexp::Structure::Code 0.088 - PPIx::Regexp::Structure::Main 0.088 - PPIx::Regexp::Structure::Modifier 0.088 - PPIx::Regexp::Structure::NamedCapture 0.088 - PPIx::Regexp::Structure::Quantifier 0.088 - PPIx::Regexp::Structure::RegexSet 0.088 - PPIx::Regexp::Structure::Regexp 0.088 - PPIx::Regexp::Structure::Replacement 0.088 - PPIx::Regexp::Structure::Script_Run 0.088 - PPIx::Regexp::Structure::Subexpression 0.088 - PPIx::Regexp::Structure::Switch 0.088 - PPIx::Regexp::Structure::Unknown 0.088 - PPIx::Regexp::Support 0.088 - PPIx::Regexp::Token 0.088 - PPIx::Regexp::Token::Assertion 0.088 - PPIx::Regexp::Token::Backreference 0.088 - PPIx::Regexp::Token::Backtrack 0.088 - PPIx::Regexp::Token::CharClass 0.088 - PPIx::Regexp::Token::CharClass::POSIX 0.088 - PPIx::Regexp::Token::CharClass::POSIX::Unknown 0.088 - PPIx::Regexp::Token::CharClass::Simple 0.088 - PPIx::Regexp::Token::Code 0.088 - PPIx::Regexp::Token::Comment 0.088 - PPIx::Regexp::Token::Condition 0.088 - PPIx::Regexp::Token::Control 0.088 - PPIx::Regexp::Token::Delimiter 0.088 - PPIx::Regexp::Token::Greediness 0.088 - PPIx::Regexp::Token::GroupType 0.088 - PPIx::Regexp::Token::GroupType::Assertion 0.088 - PPIx::Regexp::Token::GroupType::Atomic_Script_Run 0.088 - PPIx::Regexp::Token::GroupType::BranchReset 0.088 - PPIx::Regexp::Token::GroupType::Code 0.088 - PPIx::Regexp::Token::GroupType::Modifier 0.088 - PPIx::Regexp::Token::GroupType::NamedCapture 0.088 - PPIx::Regexp::Token::GroupType::Script_Run 0.088 - PPIx::Regexp::Token::GroupType::Subexpression 0.088 - PPIx::Regexp::Token::GroupType::Switch 0.088 - PPIx::Regexp::Token::Interpolation 0.088 - PPIx::Regexp::Token::Literal 0.088 - PPIx::Regexp::Token::Modifier 0.088 - PPIx::Regexp::Token::NoOp 0.088 - PPIx::Regexp::Token::Operator 0.088 - PPIx::Regexp::Token::Quantifier 0.088 - PPIx::Regexp::Token::Recursion 0.088 - PPIx::Regexp::Token::Reference 0.088 - PPIx::Regexp::Token::Structure 0.088 - PPIx::Regexp::Token::Unknown 0.088 - PPIx::Regexp::Token::Unmatched 0.088 - PPIx::Regexp::Token::Whitespace 0.088 - PPIx::Regexp::Tokenizer 0.088 - PPIx::Regexp::Util 0.088 + PPIx::Regexp::Constant::Inf 0.091 + PPIx::Regexp::Dumper 0.091 + PPIx::Regexp::Element 0.091 + PPIx::Regexp::Lexer 0.091 + PPIx::Regexp::Node 0.091 + PPIx::Regexp::Node::Range 0.091 + PPIx::Regexp::Node::Unknown 0.091 + PPIx::Regexp::Structure 0.091 + PPIx::Regexp::Structure::Assertion 0.091 + PPIx::Regexp::Structure::Atomic_Script_Run 0.091 + PPIx::Regexp::Structure::BranchReset 0.091 + PPIx::Regexp::Structure::Capture 0.091 + PPIx::Regexp::Structure::CharClass 0.091 + PPIx::Regexp::Structure::Code 0.091 + PPIx::Regexp::Structure::Main 0.091 + PPIx::Regexp::Structure::Modifier 0.091 + PPIx::Regexp::Structure::NamedCapture 0.091 + PPIx::Regexp::Structure::Quantifier 0.091 + PPIx::Regexp::Structure::RegexSet 0.091 + PPIx::Regexp::Structure::Regexp 0.091 + PPIx::Regexp::Structure::Replacement 0.091 + PPIx::Regexp::Structure::Script_Run 0.091 + PPIx::Regexp::Structure::Subexpression 0.091 + PPIx::Regexp::Structure::Switch 0.091 + PPIx::Regexp::Structure::Unknown 0.091 + PPIx::Regexp::Support 0.091 + PPIx::Regexp::Token 0.091 + PPIx::Regexp::Token::Assertion 0.091 + PPIx::Regexp::Token::Backreference 0.091 + PPIx::Regexp::Token::Backtrack 0.091 + PPIx::Regexp::Token::CharClass 0.091 + PPIx::Regexp::Token::CharClass::POSIX 0.091 + PPIx::Regexp::Token::CharClass::POSIX::Unknown 0.091 + PPIx::Regexp::Token::CharClass::Simple 0.091 + PPIx::Regexp::Token::Code 0.091 + PPIx::Regexp::Token::Comment 0.091 + PPIx::Regexp::Token::Condition 0.091 + PPIx::Regexp::Token::Control 0.091 + PPIx::Regexp::Token::Delimiter 0.091 + PPIx::Regexp::Token::Greediness 0.091 + PPIx::Regexp::Token::GroupType 0.091 + PPIx::Regexp::Token::GroupType::Assertion 0.091 + PPIx::Regexp::Token::GroupType::Atomic_Script_Run 0.091 + PPIx::Regexp::Token::GroupType::BranchReset 0.091 + PPIx::Regexp::Token::GroupType::Code 0.091 + PPIx::Regexp::Token::GroupType::Modifier 0.091 + PPIx::Regexp::Token::GroupType::NamedCapture 0.091 + PPIx::Regexp::Token::GroupType::Script_Run 0.091 + PPIx::Regexp::Token::GroupType::Subexpression 0.091 + PPIx::Regexp::Token::GroupType::Switch 0.091 + PPIx::Regexp::Token::Interpolation 0.091 + PPIx::Regexp::Token::Literal 0.091 + PPIx::Regexp::Token::Modifier 0.091 + PPIx::Regexp::Token::NoOp 0.091 + PPIx::Regexp::Token::Operator 0.091 + PPIx::Regexp::Token::Quantifier 0.091 + PPIx::Regexp::Token::Recursion 0.091 + PPIx::Regexp::Token::Reference 0.091 + PPIx::Regexp::Token::Structure 0.091 + PPIx::Regexp::Token::Unknown 0.091 + PPIx::Regexp::Token::Unmatched 0.091 + PPIx::Regexp::Token::Whitespace 0.091 + PPIx::Regexp::Tokenizer 0.091 + PPIx::Regexp::Util 0.091 requirements: Carp 0 Encode 0 @@ -3632,11 +3700,11 @@ DISTRIBUTIONS strict 0 warnings 0 warnings::register 0 - Path-Tiny-0.148 - pathname: D/DA/DAGOLDEN/Path-Tiny-0.148.tar.gz + Path-Tiny-0.150 + pathname: D/DA/DAGOLDEN/Path-Tiny-0.150.tar.gz provides: - Path::Tiny 0.148 - Path::Tiny::Error 0.148 + Path::Tiny 0.150 + Path::Tiny::Error 0.150 requirements: Carp 0 Cwd 0 @@ -3905,26 +3973,26 @@ DISTRIBUTIONS strict 0 version 0.77 warnings 0 - Perl-Tidy-20250311 - pathname: S/SH/SHANCOCK/Perl-Tidy-20250311.tar.gz - provides: - Perl::Tidy 20250311 - Perl::Tidy::Debugger 20250311 - Perl::Tidy::Diagnostics 20250311 - Perl::Tidy::FileWriter 20250311 - Perl::Tidy::Formatter 20250311 - Perl::Tidy::HtmlWriter 20250311 - Perl::Tidy::IOScalar 20250311 - Perl::Tidy::IOScalarArray 20250311 - Perl::Tidy::IndentationItem 20250311 - Perl::Tidy::Logger 20250311 - Perl::Tidy::Tokenizer 20250311 - Perl::Tidy::VerticalAligner 20250311 - Perl::Tidy::VerticalAligner::Alignment 20250311 - Perl::Tidy::VerticalAligner::Line 20250311 + Perl-Tidy-20250912 + pathname: S/SH/SHANCOCK/Perl-Tidy-20250912.tar.gz + provides: + Perl::Tidy 20250912 + Perl::Tidy::Debugger 20250912 + Perl::Tidy::Diagnostics 20250912 + Perl::Tidy::FileWriter 20250912 + Perl::Tidy::Formatter 20250912 + Perl::Tidy::HtmlWriter 20250912 + Perl::Tidy::IOScalar 20250912 + Perl::Tidy::IOScalarArray 20250912 + Perl::Tidy::IndentationItem 20250912 + Perl::Tidy::Logger 20250912 + Perl::Tidy::Tokenizer 20250912 + Perl::Tidy::VerticalAligner 20250912 + Perl::Tidy::VerticalAligner::Alignment 20250912 + Perl::Tidy::VerticalAligner::Line 20250912 requirements: ExtUtils::MakeMaker 0 - perl 5.008 + perl 5.008001 PerlIO-utf8_strict-0.010 pathname: L/LE/LEONT/PerlIO-utf8_strict-0.010.tar.gz provides: @@ -4083,24 +4151,24 @@ DISTRIBUTIONS Test::More 0 parent 0 perl 5.008001 - Plack-Middleware-Session-0.34 - pathname: M/MI/MIYAGAWA/Plack-Middleware-Session-0.34.tar.gz + Plack-Middleware-Session-0.36 + pathname: M/MI/MIYAGAWA/Plack-Middleware-Session-0.36.tar.gz provides: - Plack::Middleware::Session 0.34 + Plack::Middleware::Session 0.36 Plack::Middleware::Session::Cookie undef - Plack::Session 0.34 - Plack::Session::Cleanup 0.34 - Plack::Session::State 0.34 - Plack::Session::State::Cookie 0.34 - Plack::Session::Store 0.34 - Plack::Session::Store::Cache 0.34 - Plack::Session::Store::DBI 0.34 - Plack::Session::Store::File 0.34 - Plack::Session::Store::Null 0.34 + Plack::Session 0.36 + Plack::Session::Cleanup 0.36 + Plack::Session::State 0.36 + Plack::Session::State::Cookie 0.36 + Plack::Session::Store 0.36 + Plack::Session::Store::Cache 0.36 + Plack::Session::Store::DBI 0.36 + Plack::Session::Store::File 0.36 + Plack::Session::Store::Null 0.36 requirements: Cookie::Baker 0.12 + Crypt::SysRandom 0 Digest::HMAC_SHA1 1.03 - Digest::SHA 0 Module::Build::Tiny 0.034 Plack 0.9910 Plack-Test-ExternalServer-0.02 @@ -4272,53 +4340,56 @@ DISTRIBUTIONS Test::Warn 0 XSLoader 0 perl 5.008 - Specio-0.50 - pathname: D/DR/DROLSKY/Specio-0.50.tar.gz - provides: - Specio 0.50 - Specio::Coercion 0.50 - Specio::Constraint::AnyCan 0.50 - Specio::Constraint::AnyDoes 0.50 - Specio::Constraint::AnyIsa 0.50 - Specio::Constraint::Enum 0.50 - Specio::Constraint::Intersection 0.50 - Specio::Constraint::ObjectCan 0.50 - Specio::Constraint::ObjectDoes 0.50 - Specio::Constraint::ObjectIsa 0.50 - Specio::Constraint::Parameterizable 0.50 - Specio::Constraint::Parameterized 0.50 - Specio::Constraint::Role::CanType 0.50 - Specio::Constraint::Role::DoesType 0.50 - Specio::Constraint::Role::Interface 0.50 - Specio::Constraint::Role::IsaType 0.50 - Specio::Constraint::Simple 0.50 - Specio::Constraint::Structurable 0.50 - Specio::Constraint::Structured 0.50 - Specio::Constraint::Union 0.50 - Specio::Declare 0.50 - Specio::DeclaredAt 0.50 - Specio::Exception 0.50 - Specio::Exporter 0.50 - Specio::Helpers 0.50 - Specio::Library::Builtins 0.50 - Specio::Library::Numeric 0.50 - Specio::Library::Perl 0.50 - Specio::Library::String 0.50 - Specio::Library::Structured 0.50 - Specio::Library::Structured::Dict 0.50 - Specio::Library::Structured::Map 0.50 - Specio::Library::Structured::Tuple 0.50 - Specio::OO 0.50 - Specio::PartialDump 0.50 - Specio::Registry 0.50 - Specio::Role::Inlinable 0.50 - Specio::Subs 0.50 - Specio::TypeChecks 0.50 - Test::Specio 0.50 + Specio-0.53 + pathname: D/DR/DROLSKY/Specio-0.53.tar.gz + provides: + Specio 0.53 + Specio::Coercion 0.53 + Specio::Constraint::AnyCan 0.53 + Specio::Constraint::AnyDoes 0.53 + Specio::Constraint::AnyIsa 0.53 + Specio::Constraint::Enum 0.53 + Specio::Constraint::Intersection 0.53 + Specio::Constraint::ObjectCan 0.53 + Specio::Constraint::ObjectDoes 0.53 + Specio::Constraint::ObjectIsa 0.53 + Specio::Constraint::Parameterizable 0.53 + Specio::Constraint::Parameterized 0.53 + Specio::Constraint::Role::CanType 0.53 + Specio::Constraint::Role::DoesType 0.53 + Specio::Constraint::Role::Interface 0.53 + Specio::Constraint::Role::IsaType 0.53 + Specio::Constraint::Simple 0.53 + Specio::Constraint::Structurable 0.53 + Specio::Constraint::Structured 0.53 + Specio::Constraint::Union 0.53 + Specio::Declare 0.53 + Specio::DeclaredAt 0.53 + Specio::Exception 0.53 + Specio::Exporter 0.53 + Specio::Helpers 0.53 + Specio::Library::Builtins 0.53 + Specio::Library::Numeric 0.53 + Specio::Library::Perl 0.53 + Specio::Library::String 0.53 + Specio::Library::Structured 0.53 + Specio::Library::Structured::Dict 0.53 + Specio::Library::Structured::Map 0.53 + Specio::Library::Structured::Tuple 0.53 + Specio::OO 0.53 + Specio::PP 0.53 + Specio::PartialDump 0.53 + Specio::Registry 0.53 + Specio::Role::Inlinable 0.53 + Specio::Subs 0.53 + Specio::TypeChecks 0.53 + Specio::XS 0.53 + Test::Specio 0.53 requirements: B 0 Carp 0 Clone 0 + Clone::PP 0 Devel::StackTrace 0 Eval::Closure 0 Exporter 0 @@ -4326,6 +4397,7 @@ DISTRIBUTIONS IO::File 0 List::Util 1.33 MRO::Compat 0 + Module::Implementation 0 Module::Runtime 0 Role::Tiny 1.003003 Role::Tiny::With 0 @@ -4370,12 +4442,13 @@ DISTRIBUTIONS perl 5.012 strict 0 warnings 0 - Struct-Dumb-0.14 - pathname: P/PE/PEVANS/Struct-Dumb-0.14.tar.gz + Struct-Dumb-0.16 + pathname: P/PE/PEVANS/Struct-Dumb-0.16.tar.gz provides: - Struct::Dumb 0.14 + Struct::Dumb 0.16 requirements: Module::Build 0.4004 + perl 5.014 Sub-Exporter-0.991 pathname: R/RJ/RJBS/Sub-Exporter-0.991.tar.gz provides: @@ -4396,38 +4469,38 @@ DISTRIBUTIONS Sub::Exporter::Progressive 0.001013 requirements: ExtUtils::MakeMaker 0 - Sub-HandlesVia-0.050002 - pathname: T/TO/TOBYINK/Sub-HandlesVia-0.050002.tar.gz - provides: - Sub::HandlesVia 0.050002 - Sub::HandlesVia::CodeGenerator 0.050002 - Sub::HandlesVia::Declare 0.050002 - Sub::HandlesVia::Handler 0.050002 - Sub::HandlesVia::Handler::CodeRef 0.050002 - Sub::HandlesVia::Handler::Traditional 0.050002 - Sub::HandlesVia::HandlerLibrary 0.050002 - Sub::HandlesVia::HandlerLibrary::Array 0.050002 - Sub::HandlesVia::HandlerLibrary::Blessed 0.050002 - Sub::HandlesVia::HandlerLibrary::Bool 0.050002 - Sub::HandlesVia::HandlerLibrary::Code 0.050002 - Sub::HandlesVia::HandlerLibrary::Counter 0.050002 - Sub::HandlesVia::HandlerLibrary::Enum 0.050002 - Sub::HandlesVia::HandlerLibrary::Hash 0.050002 - Sub::HandlesVia::HandlerLibrary::Number 0.050002 - Sub::HandlesVia::HandlerLibrary::Scalar 0.050002 - Sub::HandlesVia::HandlerLibrary::String 0.050002 + Sub-HandlesVia-0.050007 + pathname: T/TO/TOBYINK/Sub-HandlesVia-0.050007.tar.gz + provides: + Sub::HandlesVia 0.050007 + Sub::HandlesVia::CodeGenerator 0.050007 + Sub::HandlesVia::Declare 0.050007 + Sub::HandlesVia::Handler 0.050007 + Sub::HandlesVia::Handler::CodeRef 0.050007 + Sub::HandlesVia::Handler::Traditional 0.050007 + Sub::HandlesVia::HandlerLibrary 0.050007 + Sub::HandlesVia::HandlerLibrary::Array 0.050007 + Sub::HandlesVia::HandlerLibrary::Blessed 0.050007 + Sub::HandlesVia::HandlerLibrary::Bool 0.050007 + Sub::HandlesVia::HandlerLibrary::Code 0.050007 + Sub::HandlesVia::HandlerLibrary::Counter 0.050007 + Sub::HandlesVia::HandlerLibrary::Enum 0.050007 + Sub::HandlesVia::HandlerLibrary::Hash 0.050007 + Sub::HandlesVia::HandlerLibrary::Number 0.050007 + Sub::HandlesVia::HandlerLibrary::Scalar 0.050007 + Sub::HandlesVia::HandlerLibrary::String 0.050007 Sub::HandlesVia::Mite undef - Sub::HandlesVia::Toolkit 0.050002 - Sub::HandlesVia::Toolkit::Mite 0.050002 - Sub::HandlesVia::Toolkit::Moo 0.050002 - Sub::HandlesVia::Toolkit::Moose 0.050002 - Sub::HandlesVia::Toolkit::Moose::PackageTrait 0.050002 - Sub::HandlesVia::Toolkit::Moose::RoleTrait 0.050002 - Sub::HandlesVia::Toolkit::Mouse 0.050002 - Sub::HandlesVia::Toolkit::Mouse::PackageTrait 0.050002 - Sub::HandlesVia::Toolkit::Mouse::RoleTrait 0.050002 - Sub::HandlesVia::Toolkit::ObjectPad 0.050002 - Sub::HandlesVia::Toolkit::Plain 0.050002 + Sub::HandlesVia::Toolkit 0.050007 + Sub::HandlesVia::Toolkit::Mite 0.050007 + Sub::HandlesVia::Toolkit::Moo 0.050007 + Sub::HandlesVia::Toolkit::Moose 0.050007 + Sub::HandlesVia::Toolkit::Moose::PackageTrait 0.050007 + Sub::HandlesVia::Toolkit::Moose::RoleTrait 0.050007 + Sub::HandlesVia::Toolkit::Mouse 0.050007 + Sub::HandlesVia::Toolkit::Mouse::PackageTrait 0.050007 + Sub::HandlesVia::Toolkit::Mouse::RoleTrait 0.050007 + Sub::HandlesVia::Toolkit::ObjectPad 0.050007 + Sub::HandlesVia::Toolkit::Plain 0.050007 requirements: Class::Method::Modifiers 0 Exporter::Shiny 0 @@ -4449,11 +4522,11 @@ DISTRIBUTIONS perl 5.008000 strict 0 warnings 0 - Sub-Quote-2.006008 - pathname: H/HA/HAARG/Sub-Quote-2.006008.tar.gz + Sub-Quote-2.006009 + pathname: H/HA/HAARG/Sub-Quote-2.006009.tar.gz provides: - Sub::Defer 2.006008 - Sub::Quote 2.006008 + Sub::Defer 2.006009 + Sub::Quote 2.006009 requirements: ExtUtils::MakeMaker 0 Scalar::Util 0 @@ -4583,27 +4656,27 @@ DISTRIBUTIONS Test::Builder 0 Test::More 0.96 perl 5.012 - Test-Differences-0.71 - pathname: D/DC/DCANTRELL/Test-Differences-0.71.tar.gz + Test-Differences-0.72 + pathname: D/DC/DCANTRELL/Test-Differences-0.72.tar.gz provides: - Test::Differences 0.71 + Test::Differences 0.72 requirements: Capture::Tiny 0.24 Data::Dumper 2.126 ExtUtils::MakeMaker 0 Test::More 0.88 Text::Diff 1.43 - Test-Fatal-0.017 - pathname: R/RJ/RJBS/Test-Fatal-0.017.tar.gz + Test-Fatal-0.018 + pathname: R/RJ/RJBS/Test-Fatal-0.018.tar.gz provides: - Test::Fatal 0.017 + Test::Fatal 0.018 requirements: Carp 0 Exporter 5.57 ExtUtils::MakeMaker 6.78 Test::Builder 0 Try::Tiny 0.07 - strict 0 + perl 5.012 warnings 0 Test-LongString-0.17 pathname: R/RG/RGARCIA/Test-LongString-0.17.tar.gz @@ -4888,60 +4961,60 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Type-Tiny-2.008002 - pathname: T/TO/TOBYINK/Type-Tiny-2.008002.tar.gz - provides: - Devel::TypeTiny::Perl58Compat 2.008002 - Error::TypeTiny 2.008002 - Error::TypeTiny::Assertion 2.008002 - Error::TypeTiny::Compilation 2.008002 - Error::TypeTiny::WrongNumberOfParameters 2.008002 - Eval::TypeTiny 2.008002 - Eval::TypeTiny::CodeAccumulator 2.008002 - Reply::Plugin::TypeTiny 2.008002 - Test::TypeTiny 2.008002 - Type::Coercion 2.008002 - Type::Coercion::FromMoose 2.008002 - Type::Coercion::Union 2.008002 - Type::Library 2.008002 - Type::Params 2.008002 - Type::Params::Alternatives 2.008002 - Type::Params::Parameter 2.008002 - Type::Params::Signature 2.008002 - Type::Parser 2.008002 - Type::Parser::AstBuilder 2.008002 - Type::Parser::Token 2.008002 - Type::Parser::TokenStream 2.008002 - Type::Registry 2.008002 - Type::Tie 2.008002 - Type::Tie::ARRAY 2.008002 - Type::Tie::BASE 2.008002 - Type::Tie::HASH 2.008002 - Type::Tie::SCALAR 2.008002 - Type::Tiny 2.008002 - Type::Tiny::Bitfield 2.008002 - Type::Tiny::Class 2.008002 - Type::Tiny::ConstrainedObject 2.008002 - Type::Tiny::Duck 2.008002 - Type::Tiny::Enum 2.008002 - Type::Tiny::Intersection 2.008002 - Type::Tiny::Role 2.008002 - Type::Tiny::Union 2.008002 - Type::Utils 2.008002 - Types::Common 2.008002 - Types::Common::Numeric 2.008002 - Types::Common::String 2.008002 - Types::Standard 2.008002 - Types::Standard::ArrayRef 2.008002 - Types::Standard::CycleTuple 2.008002 - Types::Standard::Dict 2.008002 - Types::Standard::HashRef 2.008002 - Types::Standard::Map 2.008002 - Types::Standard::ScalarRef 2.008002 - Types::Standard::StrMatch 2.008002 - Types::Standard::Tied 2.008002 - Types::Standard::Tuple 2.008002 - Types::TypeTiny 2.008002 + Type-Tiny-2.008004 + pathname: T/TO/TOBYINK/Type-Tiny-2.008004.tar.gz + provides: + Devel::TypeTiny::Perl58Compat 2.008004 + Error::TypeTiny 2.008004 + Error::TypeTiny::Assertion 2.008004 + Error::TypeTiny::Compilation 2.008004 + Error::TypeTiny::WrongNumberOfParameters 2.008004 + Eval::TypeTiny 2.008004 + Eval::TypeTiny::CodeAccumulator 2.008004 + Reply::Plugin::TypeTiny 2.008004 + Test::TypeTiny 2.008004 + Type::Coercion 2.008004 + Type::Coercion::FromMoose 2.008004 + Type::Coercion::Union 2.008004 + Type::Library 2.008004 + Type::Params 2.008004 + Type::Params::Alternatives 2.008004 + Type::Params::Parameter 2.008004 + Type::Params::Signature 2.008004 + Type::Parser 2.008004 + Type::Parser::AstBuilder 2.008004 + Type::Parser::Token 2.008004 + Type::Parser::TokenStream 2.008004 + Type::Registry 2.008004 + Type::Tie 2.008004 + Type::Tie::ARRAY 2.008004 + Type::Tie::BASE 2.008004 + Type::Tie::HASH 2.008004 + Type::Tie::SCALAR 2.008004 + Type::Tiny 2.008004 + Type::Tiny::Bitfield 2.008004 + Type::Tiny::Class 2.008004 + Type::Tiny::ConstrainedObject 2.008004 + Type::Tiny::Duck 2.008004 + Type::Tiny::Enum 2.008004 + Type::Tiny::Intersection 2.008004 + Type::Tiny::Role 2.008004 + Type::Tiny::Union 2.008004 + Type::Utils 2.008004 + Types::Common 2.008004 + Types::Common::Numeric 2.008004 + Types::Common::String 2.008004 + Types::Standard 2.008004 + Types::Standard::ArrayRef 2.008004 + Types::Standard::CycleTuple 2.008004 + Types::Standard::Dict 2.008004 + Types::Standard::HashRef 2.008004 + Types::Standard::Map 2.008004 + Types::Standard::ScalarRef 2.008004 + Types::Standard::StrMatch 2.008004 + Types::Standard::Tied 2.008004 + Types::Standard::Tuple 2.008004 + Types::TypeTiny 2.008004 requirements: Exporter::Tiny 1.006000 ExtUtils::MakeMaker 6.17 @@ -5017,63 +5090,66 @@ DISTRIBUTIONS Type::Tiny 1.000000 UUID::Tiny 1.02 perl 5.008 - URI-5.32 - pathname: O/OA/OALDERS/URI-5.32.tar.gz - provides: - URI 5.32 - URI::Escape 5.32 - URI::Heuristic 5.32 - URI::IRI 5.32 - URI::QueryParam 5.32 - URI::Split 5.32 - URI::URL 5.32 - URI::WithBase 5.32 - URI::data 5.32 - URI::file 5.32 - URI::file::Base 5.32 - URI::file::FAT 5.32 - URI::file::Mac 5.32 - URI::file::OS2 5.32 - URI::file::QNX 5.32 - URI::file::Unix 5.32 - URI::file::Win32 5.32 - URI::ftp 5.32 - URI::ftpes 5.32 - URI::ftps 5.32 - URI::geo 5.32 - URI::gopher 5.32 - URI::http 5.32 - URI::https 5.32 - URI::icap 5.32 - URI::icaps 5.32 - URI::irc 5.32 - URI::ircs 5.32 - URI::ldap 5.32 - URI::ldapi 5.32 - URI::ldaps 5.32 - URI::mailto 5.32 - URI::mms 5.32 - URI::news 5.32 - URI::nntp 5.32 - URI::nntps 5.32 - URI::otpauth 5.32 - URI::pop 5.32 - URI::rlogin 5.32 - URI::rsync 5.32 - URI::rtsp 5.32 - URI::rtspu 5.32 - URI::scp 5.32 - URI::sftp 5.32 - URI::sip 5.32 - URI::sips 5.32 - URI::smb 5.32 - URI::snews 5.32 - URI::ssh 5.32 - URI::telnet 5.32 - URI::tn3270 5.32 - URI::urn 5.32 - URI::urn::isbn 5.32 - URI::urn::oid 5.32 + URI-5.34 + pathname: O/OA/OALDERS/URI-5.34.tar.gz + provides: + URI 5.34 + URI::Escape 5.34 + URI::Heuristic 5.34 + URI::IRI 5.34 + URI::QueryParam 5.34 + URI::Split 5.34 + URI::URL 5.34 + URI::WithBase 5.34 + URI::data 5.34 + URI::file 5.34 + URI::file::Base 5.34 + URI::file::FAT 5.34 + URI::file::Mac 5.34 + URI::file::OS2 5.34 + URI::file::QNX 5.34 + URI::file::Unix 5.34 + URI::file::Win32 5.34 + URI::ftp 5.34 + URI::ftpes 5.34 + URI::ftps 5.34 + URI::geo 5.34 + URI::gopher 5.34 + URI::http 5.34 + URI::https 5.34 + URI::icap 5.34 + URI::icaps 5.34 + URI::irc 5.34 + URI::ircs 5.34 + URI::ldap 5.34 + URI::ldapi 5.34 + URI::ldaps 5.34 + URI::mailto 5.34 + URI::mms 5.34 + URI::news 5.34 + URI::nntp 5.34 + URI::nntps 5.34 + URI::otpauth 5.34 + URI::pop 5.34 + URI::rlogin 5.34 + URI::rsync 5.34 + URI::rtsp 5.34 + URI::rtspu 5.34 + URI::scp 5.34 + URI::sftp 5.34 + URI::sip 5.34 + URI::sips 5.34 + URI::smb 5.34 + URI::smtp 5.34 + URI::snews 5.34 + URI::ssh 5.34 + URI::telnet 5.34 + URI::tn3270 5.34 + URI::urn 5.34 + URI::urn::isbn 5.34 + URI::urn::oid 5.34 + URI::ws 5.34 + URI::wss 5.34 requirements: Carp 0 Cwd 0 @@ -5115,14 +5191,6 @@ DISTRIBUTIONS URI 1.68 strict 0 warnings 0 - URI-ws-0.03 - pathname: P/PL/PLICEASE/URI-ws-0.03.tar.gz - provides: - URI::ws 0.03 - URI::wss 0.03 - requirements: - ExtUtils::MakeMaker 6.30 - URI 0 UUID-Tiny-1.04 pathname: C/CA/CAUGUSTIN/UUID-Tiny-1.04.tar.gz provides: @@ -5453,32 +5521,33 @@ DISTRIBUTIONS common::sense 3.75 requirements: ExtUtils::MakeMaker 0 - libwww-perl-6.78 - pathname: O/OA/OALDERS/libwww-perl-6.78.tar.gz - provides: - LWP 6.78 - LWP::Authen::Basic 6.78 - LWP::Authen::Digest 6.78 - LWP::Authen::Ntlm 6.78 - LWP::ConnCache 6.78 - LWP::Debug 6.78 - LWP::Debug::TraceHTTP 6.78 - LWP::DebugFile 6.78 - LWP::MemberMixin 6.78 - LWP::Protocol 6.78 - LWP::Protocol::cpan 6.78 - LWP::Protocol::data 6.78 - LWP::Protocol::file 6.78 - LWP::Protocol::ftp 6.78 - LWP::Protocol::gopher 6.78 - LWP::Protocol::http 6.78 - LWP::Protocol::loopback 6.78 - LWP::Protocol::mailto 6.78 - LWP::Protocol::nntp 6.78 - LWP::Protocol::nogo 6.78 - LWP::RobotUA 6.78 - LWP::Simple 6.78 - LWP::UserAgent 6.78 + libwww-perl-6.81 + pathname: O/OA/OALDERS/libwww-perl-6.81.tar.gz + provides: + LWP 6.81 + LWP::Authen::Basic 6.81 + LWP::Authen::Digest 6.81 + LWP::Authen::Ntlm 6.81 + LWP::ConnCache 6.81 + LWP::Debug 6.81 + LWP::Debug::TraceHTTP 6.81 + LWP::DebugFile 6.81 + LWP::MemberMixin 6.81 + LWP::Protocol 6.81 + LWP::Protocol::cpan 6.81 + LWP::Protocol::data 6.81 + LWP::Protocol::file 6.81 + LWP::Protocol::ftp 6.81 + LWP::Protocol::gopher 6.81 + LWP::Protocol::http 6.81 + LWP::Protocol::loopback 6.81 + LWP::Protocol::mailto 6.81 + LWP::Protocol::nntp 6.81 + LWP::Protocol::nogo 6.81 + LWP::RobotUA 6.81 + LWP::Simple 6.81 + LWP::UserAgent 6.81 + libwww::perl undef requirements: Digest::MD5 0 Encode 2.12 @@ -5492,10 +5561,11 @@ DISTRIBUTIONS HTML::HeadParser 3.71 HTTP::Cookies 6 HTTP::Date 6 + HTTP::Message 7.01 HTTP::Negotiate 6 - HTTP::Request 6.18 + HTTP::Request 7.01 HTTP::Request::Common 6.18 - HTTP::Response 6.18 + HTTP::Response 7.01 HTTP::Status 6.18 IO::Select 0 IO::Socket 0 diff --git a/docker-compose.yml b/docker-compose.yml index f9ecc1a63c..07b1cffea8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,12 @@ services: - './root/static/:/build/root/static/' - 'web-assets:/build/root/assets/' command: ['./build-assets.mjs', '--watch'] + develop: + watch: + - path: ./build-assets.mjs + action: rebuild + - path: ./package.json + action: rebuild web-server: build: context: . @@ -16,7 +22,7 @@ services: - 'web-assets:/app/root/assets/' - '/app/local' ports: - - '8000:80' + - '5001:8000' environment: # default is 120, shorten to work with compose label COLUMNS: 96 diff --git a/lib/MetaCPAN/Middleware/OldUrls.pm b/lib/MetaCPAN/Middleware/OldUrls.pm index e3420a2f4c..d98e824be0 100644 --- a/lib/MetaCPAN/Middleware/OldUrls.pm +++ b/lib/MetaCPAN/Middleware/OldUrls.pm @@ -70,7 +70,6 @@ sub _routes { ( [ '/permission/module/:module', '/module/:module/permissions' ], [ '/feed/recent', '/recent.:type', $feed_type ], - [ '/feed/news', '/news.:type', $feed_type ], [ '/feed/author/:author', '/author/:author/activity.:type', $feed_type ], [ '/feed/distribution/:dist', '/dist/:dist/releases.:type', $feed_type ], diff --git a/lib/MetaCPAN/Web.pm b/lib/MetaCPAN/Web.pm index 1e58e93ae7..c5d76aa7d6 100644 --- a/lib/MetaCPAN/Web.pm +++ b/lib/MetaCPAN/Web.pm @@ -43,14 +43,7 @@ __PACKAGE__->config( __PACKAGE__->log( Log::Log4perl::Catalyst->new( undef, autoflush => 1 ) ); -# Squash warnings when not in a terminal (like when running under Docker) -# Catalyst throws warnings if it can't detect the size, even if $ENV{COLUMNS} -# exists. Just lie to it to shut it up. -use Term::Size::Perl (); -if ( !Term::Size::Perl::chars() ) { - no warnings 'once', 'redefine'; - *Term::Size::Perl::chars = sub { $ENV{COLUMNS} || 80 }; -} +$ENV{COLUMNS} ||= 80; after prepare_action => sub { my ($self) = @_; diff --git a/lib/MetaCPAN/Web/API/RequestInfo/Orchestrator.pm b/lib/MetaCPAN/Web/API/ReleaseInfo/Orchestrator.pm similarity index 98% rename from lib/MetaCPAN/Web/API/RequestInfo/Orchestrator.pm rename to lib/MetaCPAN/Web/API/ReleaseInfo/Orchestrator.pm index d04625083f..71ecd05c15 100644 --- a/lib/MetaCPAN/Web/API/RequestInfo/Orchestrator.pm +++ b/lib/MetaCPAN/Web/API/ReleaseInfo/Orchestrator.pm @@ -1,4 +1,4 @@ -package MetaCPAN::Web::API::RequestInfo::Orchestrator; +package MetaCPAN::Web::API::ReleaseInfo::Orchestrator; use Moo; use List::Util qw( max ); use namespace::clean; diff --git a/lib/MetaCPAN/Web/Controller/About.pm b/lib/MetaCPAN/Web/Controller/About.pm index d33d6c739a..37817d2d80 100644 --- a/lib/MetaCPAN/Web/Controller/About.pm +++ b/lib/MetaCPAN/Web/Controller/About.pm @@ -38,11 +38,7 @@ sub meta_hack : Local : Args(0) { my ( $self, $c ) = @_; } -sub resources : Local : Args(0) { - my ( $self, $c ) = @_; - $c->res->redirect( '/about/contact', 301 ); - $c->detach; -} +sub mirror : Local : Args(0) { } sub sponsors : Local : Args(0) { my ( $self, $c ) = @_; diff --git a/lib/MetaCPAN/Web/Controller/Feed.pm b/lib/MetaCPAN/Web/Controller/Feed.pm index cb3abd22b9..33d3ed50a6 100644 --- a/lib/MetaCPAN/Web/Controller/Feed.pm +++ b/lib/MetaCPAN/Web/Controller/Feed.pm @@ -10,7 +10,6 @@ use HTML::Escape qw( escape_html ); use MetaCPAN::Web::RenderUtil qw( render_markdown ); use MetaCPAN::Web::Types qw( ArrayRef DateTime Enum HashRef Str Undef Uri ); use Params::ValidationCompiler qw( validation_for ); -use Path::Tiny qw( path ); use XML::FeedPP (); ## no perlimports use URI (); @@ -59,61 +58,6 @@ sub recent : Private { ); } -sub news_rss : Path('/news.rss') Args(0) { - my ( $self, $c ) = @_; - $c->detach( 'news', ['rss'] ); -} - -sub news_atom : Path('/news.atom') Args(0) { - my ( $self, $c ) = @_; - $c->detach( 'news', ['atom'] ); -} - -sub news : Private { - my ( $self, $c, $type ) = @_; - - $c->add_surrogate_key('NEWS'); - $c->browser_max_age('1h'); - $c->cdn_max_age('1h'); - - my $file = $c->config->{home} . '/News.md'; - my $news = path($file)->slurp_utf8; - $news =~ s/^\s+|\s+$//g; - my @entries; - foreach my $str ( split /^Title:\s*/m, $news ) { - next if $str =~ /^\s*$/; - - my %e; - $e{name} = $str =~ s/\A(.+)$//m ? $1 : 'No title'; - - # Use the same processing as _Header2Label in - # Text::MultiMarkdown - my $a_name = lc $e{name}; - $a_name =~ s/[^A-Za-z0-9:_.-]//g; - $a_name =~ s/^[^a-z]+//gi; - - $str =~ s/\A\s*-+//g; - $e{date} = $str =~ s/^Date:\s*(.*)$//m ? $1 : '2014-01-01T00:00:00'; - $e{link} = '/news'; - $e{fragment} = $a_name; - $e{author} = 'METACPAN'; - $str =~ s/^\s*|\s*$//g; - - #$str =~ s{\[([^]]+)\]\(([^)]+)\)}{$1}g; - $e{abstract} = $str; - $e{abstract} = render_markdown($str); - - push @entries, \%e; - } - - $c->stash->{feed} = $self->build_feed( - format => $type, - entries => \@entries, - host => $c->config->{web_host}, - title => 'Recent MetaCPAN News', - ); -} - sub author_rss : Chained('/author/root') PathPart('activity.rss') Args(0) { $_[1]->detach( 'author', ['rss'] ); } @@ -304,6 +248,15 @@ sub end : Private { my $feed = $c->stash->{feed}; $c->detach('/end') if !$feed; + +# This will only affect if `cdn_max_age` has been set. +# https://www.fastly.com/documentation/guides/concepts/edge-state/cache/stale/ +# If it has then do revalidation in the background + $c->cdn_stale_while_revalidate('1d'); + + # And if there is still an error serve from cache + $c->cdn_stale_if_error('1y'); + $c->res->content_type( $feed->isa('XML::FeedPP::Atom') ? 'application/atom+xml; charset=UTF-8' diff --git a/lib/MetaCPAN/Web/Controller/News.pm b/lib/MetaCPAN/Web/Controller/News.pm deleted file mode 100644 index 266c690ca8..0000000000 --- a/lib/MetaCPAN/Web/Controller/News.pm +++ /dev/null @@ -1,24 +0,0 @@ -package MetaCPAN::Web::Controller::News; - -use Moose; - -BEGIN { extends 'MetaCPAN::Web::Controller' } - -use Path::Tiny qw( path ); - -sub news : Path : Args(0) { - my ( $self, $c ) = @_; - - my $file = $c->config->{home} . '/News.md'; - my $news = path($file)->slurp_utf8; - $news =~ s/^Title:\s*//gm; - - $c->stash( { - news => $news, - template => 'news.tx', - } ); -} - -__PACKAGE__->meta->make_immutable; - -1; diff --git a/lib/MetaCPAN/Web/Controller/Pod.pm b/lib/MetaCPAN/Web/Controller/Pod.pm index bb683bfd1a..6d606b8f6b 100644 --- a/lib/MetaCPAN/Web/Controller/Pod.pm +++ b/lib/MetaCPAN/Web/Controller/Pod.pm @@ -40,6 +40,10 @@ sub view : Private { my $release = $c->stash->{release}; if ( $data->{directory} ) { + +# This can end up being a redirect from a non-versioned path to a versioned path +# and it doesn't have any surrogate keys so it won't get purged. + $c->cdn_max_age('1d'); $c->res->redirect( $c->uri_for( '/source', @path ), 301 ); $c->detach; } diff --git a/lib/MetaCPAN/Web/Controller/Release.pm b/lib/MetaCPAN/Web/Controller/Release.pm index 56c62a4314..8c662ac1a5 100644 --- a/lib/MetaCPAN/Web/Controller/Release.pm +++ b/lib/MetaCPAN/Web/Controller/Release.pm @@ -65,7 +65,7 @@ sub view : Private { my $release = $data->{release}; - $c->browser_max_age('1h'); + $c->browser_max_age('1d'); $c->res->last_modified( $release->{date} ); $c->cdn_max_age('1y'); $c->add_dist_key( $release->{distribution} ); diff --git a/lib/MetaCPAN/Web/Controller/Root.pm b/lib/MetaCPAN/Web/Controller/Root.pm index cb4c1f2653..2ddf52c0b6 100644 --- a/lib/MetaCPAN/Web/Controller/Root.pm +++ b/lib/MetaCPAN/Web/Controller/Root.pm @@ -113,6 +113,14 @@ Attempt to render a view, if needed. sub end : ActionClass('RenderView') { my ( $self, $c ) = @_; +# This will only affect if `cdn_max_age` has been set. +# https://www.fastly.com/documentation/guides/concepts/edge-state/cache/stale/ +# If it has then do revalidation in the background + $c->cdn_stale_while_revalidate('1d'); + + # And if there is still an error serve from cache + $c->cdn_stale_if_error('1y'); + # for normal errors, try to render the internal_error page rather my @error = @{ $c->error }; if ( @error && !$c->debug ) { diff --git a/lib/MetaCPAN/Web/Controller/Search.pm b/lib/MetaCPAN/Web/Controller/Search.pm index 9754e43066..0f9f36d5ed 100644 --- a/lib/MetaCPAN/Web/Controller/Search.pm +++ b/lib/MetaCPAN/Web/Controller/Search.pm @@ -16,9 +16,13 @@ sub index : Path : Args(0) { my $page = $req->page; my $page_size = $req->get_page_size(20); + # Cache searches as this is where most traffic hits + $c->cdn_max_age('1d'); + # Redirect back to main page if search query is empty irrespective of # whether we're feeling lucky or not. unless ( $req->param('q') ) { + $c->browser_max_age('7d'); $c->res->redirect('/'); $c->detach; } diff --git a/lib/MetaCPAN/Web/Model/API.pm b/lib/MetaCPAN/Web/Model/API.pm index a44cf8c128..24fc67197d 100644 --- a/lib/MetaCPAN/Web/Model/API.pm +++ b/lib/MetaCPAN/Web/Model/API.pm @@ -52,6 +52,7 @@ has log => ( is => 'ro' ); has debug => ( is => 'ro' ); has request_uri => ( is => 'ro' ); has request_id => ( is => 'ro' ); +has x_trace_id => ( is => 'ro' ); sub COMPONENT { my ( $class, $app, $args ) = @_; @@ -77,7 +78,10 @@ sub ACCEPT_CONTEXT { request_url => $r->uri, ( $r->env - ? ( request_id => $r->env->{'MetaCPAN::Web.request_id'}, ) + ? ( + request_id => $r->env->{'MetaCPAN::Web.request_id'}, + x_trace_id => $r->env->{'MetaCPAN::Web.x_trace_id'}, + ) : () ), ); @@ -102,6 +106,8 @@ sub request { my $current_url = $self->request_uri; my $request_id = $self->request_id; + my $x_trace_id = $self->x_trace_id || 'No-Trace-ID-to-MC'; + if ( $method =~ /^(GET|DELETE)$/ || $search ) { for my $param ( keys %{ $params || {} } ) { $url->query_param( $param => $params->{$param} ); @@ -124,15 +130,20 @@ sub request { ), ( $current_url ? ( 'Referer' => $current_url->as_string ) : () ), ( $request_id ? ( 'X-MetaCPAN-Request-ID' => $request_id ) : () ), + + # Comes from the UUID fastly sets + ( $x_trace_id ? ( 'X-Trace-ID' => $x_trace_id ) : () ), 'Accept' => 'application/json, */*', ); my $req_p = $self->client->do_request( request => $request ); - $req_p = $req_p->catch( sub { - # retry once - $self->client->do_request( request => $request ); - } ); + # Do not retry - if the API is loaded/slow then this just makes it worse. + # $req_p = $req_p->catch( sub { + + # # retry once + # $self->client->do_request( request => $request ); + # } ); $req_p->transform( done => sub { my $response = shift; diff --git a/lib/MetaCPAN/Web/Model/API/Author.pm b/lib/MetaCPAN/Web/Model/API/Author.pm index 97c7775a96..7e594b45a6 100644 --- a/lib/MetaCPAN/Web/Model/API/Author.pm +++ b/lib/MetaCPAN/Web/Model/API/Author.pm @@ -113,6 +113,10 @@ my $profile_data = { name => 'Bitbucket', url_format => 'https://bitbucket.org/%s', }, + codeberg => { + name => 'Codeberg', + url_format => 'https://codeberg.org/%s', + }, coderwall => { name => 'Coderwall', url_format => 'https://coderwall.com/%s', diff --git a/lib/MetaCPAN/Web/Model/API/Changes.pm b/lib/MetaCPAN/Web/Model/API/Changes.pm index 3893a91f88..809d2b58bf 100644 --- a/lib/MetaCPAN/Web/Model/API/Changes.pm +++ b/lib/MetaCPAN/Web/Model/API/Changes.pm @@ -13,6 +13,49 @@ sub get { $self->request( '/changes/' . join( '/', @path ) ); } +sub _relevant_changes { + my ( $self, $content, $opts ) = @_; + + my $version = _parse_version( $opts->{version} ); + + my @releases = _releases($content); + + my @changelogs; + + if ( _versions_cmp( $releases[-1]->{version_parsed}, $version ) == 0 ) { + @releases = reverse @releases; + } + elsif ( _versions_cmp( $releases[0]->{version_parsed}, $version ) == 0 ) { + + # noop + } + else { + @releases = sort { + _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) + } @releases; + if ( _versions_cmp( $releases[0]->{version_parsed}, $version ) != 0 ) + { + @releases = (); + } + } + + if (@releases) { + my $current = shift @releases; + $current->{current} = 1; + push @changelogs, $current; + + if ( $opts->{include_dev} ) { + for my $dev_r (@releases) { + last + if !$dev_r->{dev}; + push @changelogs, $dev_r; + } + } + } + + return \@changelogs; +} + sub release_changes { my ( $self, $path, %opts ) = @_; $path = join '/', @$path @@ -23,27 +66,11 @@ sub release_changes { my $content = $file->{content} or return Future->done( { code => 404 } ); - my $version - = _parse_version( $opts{version} || $file->{version} ); - - my @releases = _releases($content); - - my @changelogs; - while ( my $r = shift @releases ) { - if ( _versions_cmp( $r->{version_parsed}, $version ) == 0 ) { - $r->{current} = 1; - push @changelogs, $r; - if ( $opts{include_dev} ) { - for my $dev_r (@releases) { - last - if !$dev_r->{dev}; - push @changelogs, $dev_r; - } - } - } - } + $opts{version} ||= $file->{version}; + + my $changes = $self->_relevant_changes( $content, \%opts ); return Future->done( { - changes => \@changelogs, + changes => $changes, } ); } ); } @@ -104,9 +131,8 @@ sub _releases { my $changelog = MetaCPAN::Web::Model::API::Changes::Parser->parse($content); - my @releases - = sort { _versions_cmp( $b->{version_parsed}, $a->{version_parsed} ) } - map { + my @releases = map { + ; my $v = _parse_version( $_->{version} ); my $trial = $_->{version} =~ /-TRIAL$/ || $_->{note} && $_->{note} =~ /\bTRIAL\b/; @@ -117,7 +143,7 @@ sub _releases { trial => $trial, dev => $dev, }; - } @{ $changelog->{releases} || [] }; + } @{ $changelog->{releases} || [] }; return @releases; } diff --git a/lib/MetaCPAN/Web/Model/ReleaseInfo.pm b/lib/MetaCPAN/Web/Model/ReleaseInfo.pm index e75866a9f7..637250941c 100644 --- a/lib/MetaCPAN/Web/Model/ReleaseInfo.pm +++ b/lib/MetaCPAN/Web/Model/ReleaseInfo.pm @@ -8,7 +8,7 @@ extends 'Catalyst::Model'; use Future (); use List::Util qw( all ); -use MetaCPAN::Web::API::RequestInfo::Orchestrator (); +use MetaCPAN::Web::API::ReleaseInfo::Orchestrator (); use Ref::Util qw( is_hashref ); use URI (); use URI::Escape qw( uri_escape uri_unescape ); @@ -37,7 +37,7 @@ sub ACCEPT_CONTEXT { sub via_dist { my ( $self, $dist ) = @_; $self->_fetch( - MetaCPAN::Web::API::RequestInfo::Orchestrator->new( + MetaCPAN::Web::API::ReleaseInfo::Orchestrator->new( model => $self->_release, dist => $dist, ), @@ -47,7 +47,7 @@ sub via_dist { sub via_release { my ( $self, $author, $release_name ) = @_; $self->_fetch( - MetaCPAN::Web::API::RequestInfo::Orchestrator->new( + MetaCPAN::Web::API::ReleaseInfo::Orchestrator->new( model => $self->_release, author => $author, release => $release_name, diff --git a/lib/MetaCPAN/Web/Role/Request.pm b/lib/MetaCPAN/Web/Role/Request.pm index ce431efc90..8612da6827 100644 --- a/lib/MetaCPAN/Web/Role/Request.pm +++ b/lib/MetaCPAN/Web/Role/Request.pm @@ -26,7 +26,9 @@ sub get_page_size { my $default_page_size = shift; my $page_size = $req->param('size'); - unless ( is_PositiveInt($page_size) && $page_size <= 500 ) { + + # We no longer support more than 100 results per page + unless ( is_PositiveInt($page_size) && $page_size <= 100 ) { $page_size = $default_page_size; } return $page_size; diff --git a/lib/MetaCPAN/Web/View/Xslate.pm b/lib/MetaCPAN/Web/View/Xslate.pm index 56f0549034..046f8941da 100644 --- a/lib/MetaCPAN/Web/View/Xslate.pm +++ b/lib/MetaCPAN/Web/View/Xslate.pm @@ -1,8 +1,7 @@ package MetaCPAN::Web::View::Xslate; use Moose; extends qw(Catalyst::View::Xslate); -use File::Path (); -use File::Temp (); +use Path::Tiny (); use MetaCPAN::Web::Types qw( AbsPath ); has '+syntax' => ( default => 'Metakolon' ); @@ -13,11 +12,7 @@ has '+cache_dir' => ( isa => AbsPath, coerce => 1, default => sub { - File::Temp::tempdir( - TEMPLATE => 'metacpan-web-templates-XXXXXX', - CLEANUP => 1, - TMPDIR => 1, - ); + Path::Tiny->tempdir( TEMPLATE => 'metacpan-web-templates-XXXXXX' ); }, ); has '+module' => ( @@ -48,16 +43,6 @@ sub COMPONENT { return $class->SUPER::COMPONENT( $app, $args ); } -around preload_templates => sub { - my ( $orig, $self ) = ( shift, shift ); - - if ( my $cache_dir = $self->xslate->{cache_dir} ) { - File::Path::rmtree($cache_dir); - } - - $self->$orig(@_); -}; - has '+expose_methods' => ( default => sub diff --git a/metacpan_web.yaml b/metacpan_web.yaml index 534b1a2716..55250b9ea1 100644 --- a/metacpan_web.yaml +++ b/metacpan_web.yaml @@ -1,5 +1,3 @@ -name: MetaCPAN::Web - api: https://api.metacpan.org/v1 source_host: https://st.aticpan.org web_host: https://metacpan.org diff --git a/package-lock.json b/package-lock.json index 99989ac121..e2342b725a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,11 +15,11 @@ "brush-javascript": "^4.0.0", "brush-plain": "^4.0.1", "brush-yaml": "^4.0.0", - "devbridge-autocomplete": "^1.4.11", - "esbuild": "^0.25.4", - "esbuild-plugin-less": "^1.3.22", + "devbridge-autocomplete": "^1.5.0", + "esbuild": "^0.27.0", + "esbuild-plugin-less": "^1.3.32", "jquery": "^3.7.1", - "less": "^4.3.0", + "less": "^4.4.2", "minimist": "^1.2.8", "mousetrap": "^1.6.5", "qtip2": "^3.0.3", @@ -27,18 +27,18 @@ "tablesorter": "^2.32.0" }, "devDependencies": { - "@eslint/js": "^9.5.0", - "@playwright/test": "^1.52.0", - "eslint": "^9.27.0", - "globals": "^16.1.0", + "@eslint/js": "^9.39.1", + "@playwright/test": "^1.56.1", + "eslint": "^9.39.1", + "globals": "^16.5.0", "js-beautify": "^1.15.4", - "prettier": "3.5.3" + "prettier": "3.6.2" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", + "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", "cpu": [ "ppc64" ], @@ -52,9 +52,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", + "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", "cpu": [ "arm" ], @@ -68,9 +68,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", + "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", "cpu": [ "arm64" ], @@ -84,9 +84,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", + "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", "cpu": [ "x64" ], @@ -100,9 +100,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", + "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", "cpu": [ "arm64" ], @@ -116,9 +116,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", + "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", "cpu": [ "x64" ], @@ -132,9 +132,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", + "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", "cpu": [ "arm64" ], @@ -148,9 +148,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", + "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", "cpu": [ "x64" ], @@ -164,9 +164,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", + "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", "cpu": [ "arm" ], @@ -180,9 +180,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", + "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", "cpu": [ "arm64" ], @@ -196,9 +196,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", + "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", "cpu": [ "ia32" ], @@ -212,9 +212,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", + "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", "cpu": [ "loong64" ], @@ -228,9 +228,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", + "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", "cpu": [ "mips64el" ], @@ -244,9 +244,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", + "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", "cpu": [ "ppc64" ], @@ -260,9 +260,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", + "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", "cpu": [ "riscv64" ], @@ -276,9 +276,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", + "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", "cpu": [ "s390x" ], @@ -292,9 +292,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", + "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", "cpu": [ "x64" ], @@ -308,9 +308,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", + "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", "cpu": [ "arm64" ], @@ -324,9 +324,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", + "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", "cpu": [ "x64" ], @@ -340,9 +340,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", + "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", "cpu": [ "arm64" ], @@ -356,9 +356,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", + "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", "cpu": [ "x64" ], @@ -371,10 +371,26 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", + "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", + "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", "cpu": [ "x64" ], @@ -388,9 +404,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", + "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", "cpu": [ "arm64" ], @@ -404,9 +420,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", + "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", "cpu": [ "ia32" ], @@ -420,9 +436,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", + "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", "cpu": [ "x64" ], @@ -436,16 +452,20 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } @@ -455,6 +475,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -472,13 +493,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -487,19 +508,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", - "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -547,9 +571,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", - "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "engines": { @@ -560,9 +584,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -570,13 +594,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -689,13 +713,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", - "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.52.0" + "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -710,11 +734,6 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, - "node_modules/@types/jquery": { - "version": "2.0.68", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.68.tgz", - "integrity": "sha512-9E8HinL4D/VgWf6tci0/NWlkw8i8e5pL00yVmBpFaVmveSwMq3lEQcrRJVbu62Fprm3nBTHXkqkEByjGoQCpTA==" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -739,9 +758,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -1037,12 +1056,12 @@ "dev": true }, "node_modules/devbridge-autocomplete": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/devbridge-autocomplete/-/devbridge-autocomplete-1.4.11.tgz", - "integrity": "sha512-lRU1y9IKyPm45NKDMcujszJoftw+wqxKbtcNJoMx+LywJQJdDwjg/s4lwLYR4vyQQ6VTcUaIeveLMkZTqorBIA==", - "dependencies": { - "@types/jquery": "^2.0.32", - "jquery": ">=1.7" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/devbridge-autocomplete/-/devbridge-autocomplete-1.5.0.tgz", + "integrity": "sha512-yz6W76PyXS9DtuyYbQtVcpxtkI8pQ02EQwZeNWnqUJXmM5jSmsPFKmpFEBneImcHwYJrMf3+6m86Hj2MRPELGQ==", + "license": "MIT", + "peerDependencies": { + "jquery": ">=1.9" } }, "node_modules/domready": { @@ -1119,9 +1138,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", + "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -1131,44 +1150,45 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" + "@esbuild/aix-ppc64": "0.27.0", + "@esbuild/android-arm": "0.27.0", + "@esbuild/android-arm64": "0.27.0", + "@esbuild/android-x64": "0.27.0", + "@esbuild/darwin-arm64": "0.27.0", + "@esbuild/darwin-x64": "0.27.0", + "@esbuild/freebsd-arm64": "0.27.0", + "@esbuild/freebsd-x64": "0.27.0", + "@esbuild/linux-arm": "0.27.0", + "@esbuild/linux-arm64": "0.27.0", + "@esbuild/linux-ia32": "0.27.0", + "@esbuild/linux-loong64": "0.27.0", + "@esbuild/linux-mips64el": "0.27.0", + "@esbuild/linux-ppc64": "0.27.0", + "@esbuild/linux-riscv64": "0.27.0", + "@esbuild/linux-s390x": "0.27.0", + "@esbuild/linux-x64": "0.27.0", + "@esbuild/netbsd-arm64": "0.27.0", + "@esbuild/netbsd-x64": "0.27.0", + "@esbuild/openbsd-arm64": "0.27.0", + "@esbuild/openbsd-x64": "0.27.0", + "@esbuild/openharmony-arm64": "0.27.0", + "@esbuild/sunos-x64": "0.27.0", + "@esbuild/win32-arm64": "0.27.0", + "@esbuild/win32-ia32": "0.27.0", + "@esbuild/win32-x64": "0.27.0" } }, "node_modules/esbuild-plugin-less": { - "version": "1.3.22", - "resolved": "https://registry.npmjs.org/esbuild-plugin-less/-/esbuild-plugin-less-1.3.22.tgz", - "integrity": "sha512-0FxRAu1o4RnZPM3bN+aQFkNuD53kgXbdrozSZJROIa4kb9QnYmJgaflfPKZyNF0IQkdlsMM54EB2cnuO809d/g==", + "version": "1.3.32", + "resolved": "https://registry.npmjs.org/esbuild-plugin-less/-/esbuild-plugin-less-1.3.32.tgz", + "integrity": "sha512-X83daazmsVAaljlLgSEL5R4mAjNfGiIZQ41U2ciRzlzJKObeWuS+HXLJE0wi+/2gfkt+jmsLOegG8Bqy1E7H5Q==", "license": "WTFPL", "dependencies": { "@types/less": "^3.0.8", - "less": "^4.3.0" + "less": "^4.4.2" }, "peerDependencies": { - "esbuild": ">=0.14.0 <0.25.5" + "esbuild": ">=0.14.0 <=0.27.0" } }, "node_modules/escape-string-regexp": { @@ -1184,33 +1204,32 @@ } }, "node_modules/eslint": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", - "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.14.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.27.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1245,9 +1264,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1262,9 +1281,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1275,15 +1294,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1440,9 +1459,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -1499,9 +1518,9 @@ } }, "node_modules/globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", "engines": { @@ -1695,9 +1714,9 @@ } }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -1736,9 +1755,9 @@ } }, "node_modules/less": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", - "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", + "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", @@ -2049,13 +2068,13 @@ } }, "node_modules/playwright": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", - "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.52.0" + "playwright-core": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -2068,9 +2087,9 @@ } }, "node_modules/playwright-core": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", - "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2090,11 +2109,10 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index d29b70abd3..4962917ad5 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,12 @@ }, "homepage": "https://github.com/metacpan/metacpanweb#readme", "devDependencies": { - "@eslint/js": "^9.5.0", - "@playwright/test": "^1.52.0", - "eslint": "^9.27.0", - "globals": "^16.1.0", + "@eslint/js": "^9.39.1", + "@playwright/test": "^1.56.1", + "eslint": "^9.39.1", + "globals": "^16.5.0", "js-beautify": "^1.15.4", - "prettier": "3.5.3" + "prettier": "3.6.2" }, "dependencies": { "@fortawesome/fontawesome-free": "^6.7.2", @@ -32,11 +32,11 @@ "brush-javascript": "^4.0.0", "brush-plain": "^4.0.1", "brush-yaml": "^4.0.0", - "devbridge-autocomplete": "^1.4.11", - "esbuild": "^0.25.4", - "esbuild-plugin-less": "^1.3.22", + "devbridge-autocomplete": "^1.5.0", + "esbuild": "^0.27.0", + "esbuild-plugin-less": "^1.3.32", "jquery": "^3.7.1", - "less": "^4.3.0", + "less": "^4.4.2", "minimist": "^1.2.8", "mousetrap": "^1.6.5", "qtip2": "^3.0.3", diff --git a/playwright.config.ts b/playwright.config.ts index 9760fdfdca..58e0dcad5a 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -26,7 +26,7 @@ export default defineConfig({ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: "http://127.0.0.1:8000", + baseURL: "http://127.0.0.1:5001", /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: "on-first-retry", diff --git a/precious.toml b/precious.toml index b85bcc3b3d..0bcb5e9d42 100644 --- a/precious.toml +++ b/precious.toml @@ -1,7 +1,8 @@ -excludes = [ - ".build/**", - "blib/**", - "root/assets/**", +exclude = [ + "/.build/**", + "/blib/**", + "/root/assets/**", + "/local/**", ] [commands.perlimports] diff --git a/root/about/development.tx b/root/about/development.tx index ee48de3d35..00e1c4a686 100644 --- a/root/about/development.tx +++ b/root/about/development.tx @@ -8,7 +8,7 @@ Our code base is based on current best practices and modern web technologies. Our stack includes Catalyst, Minion, Plack, Elasticsearch, jQuery, Bootstrap and NGINX. We also use Puppet and Ansible for deployment and Docker for -development VMs. We have integration with Twitter, GitHub, PAUSE, and Google. +development VMs. We have integration with GitHub, PAUSE, and Google. All code is managed on GitHub and we have an active channel (#metacpan) on irc.perl.org. Try the mibbit diff --git a/root/about/faq.tx b/root/about/faq.tx index 9f0a96cd34..e91ac28652 100644 --- a/root/about/faq.tx +++ b/root/about/faq.tx @@ -93,11 +93,12 @@ If you can only connect your account to GitHub _or_ PAUSE (e.g. connecting to one disconnects the other), it is usually because you have (probably accidentally) created two accounts. -To fix this: +To fix this you need to manually merge your identities into a single account: -1. Log in with one of them +1. Log in with your secondary account +(please note that PAUSE cannot be used for logging in) 2. Go to identities and disconnect that account -3. Log in with the other and connect to the first +3. Log in with your primary account and connect the secondary ### Trying to connect PAUSE just gives you JSON and doesn't work? diff --git a/root/about/mirror.tx b/root/about/mirror.tx new file mode 100644 index 0000000000..423515b303 --- /dev/null +++ b/root/about/mirror.tx @@ -0,0 +1,44 @@ +%% cascade base::about::markdown { +%% title => $title || 'Using MetaCPAN as a mirror', +%% } +%% override about -> { +## MetaCPAN Mirror + +MetaCPAN provides an alternate mirror for CPAN, which is also a BackPAN (it +includes deleted releases). It can be used if there are issues with the primary +mirror, or you want to access older deleted releases via the `cpan` client. + +The address for the mirror is https://cpan.metacpan.org/ + +### Configuring the Mirror + +#### `cpanm` + +`cpanm` can use the MetaCPAN mirror using the `-M` option: + + cpanm -M https://cpan.metacpan.org/ Module::To::Install + +When using the MetaCPAN mirror, it may also be useful to use MetaCPAN's index. +This can be done using the `--metacpan` option. + + cpanm -M https://cpan.metacpan.org/ --metacpan Module::To::Install + +These options can be set more permanently using the `PERL_CPANM_OPT` environment variable. + + export PERL_CPANM_OPT='-M https://cpan.metacpan.org/ --metacpan' + cpanm Module::To::Install + +#### `cpan` + +`CPAN.pm` can be configured to use an alternate mirror using the `urllist` +configuration setting. It also must be configured to use the `urllist` option +by disabling the `pushy_https` option. + + cpan + o conf urllist https://cpan.metacpan.org/ + o conf pushy_https 0 + o conf commit + install Module::To::Install + exit + +%% } diff --git a/root/about/sponsors.tx b/root/about/sponsors.tx index 437f6276b7..e848918b8b 100644 --- a/root/about/sponsors.tx +++ b/root/about/sponsors.tx @@ -30,6 +30,26 @@ money...
-%% for ['GitHub', 'PAUSE', 'Twitter', 'Google'] -> $identity { +%% for ['GitHub', 'PAUSE', 'Google'] -> $identity { %% my $connected = !!$user.identity[$identity.lc()]; diff --git a/root/author.tx b/root/author.tx index a15564506d..a5c359265e 100644 --- a/root/author.tx +++ b/root/author.tx @@ -19,6 +19,7 @@
  • %% } + [% $author.country %] flag [% $author.city %][% if $author.city && $author.region { %], [% } %][% $author.region %]
  • %% } diff --git a/root/base.tx b/root/base.tx index e7e430f0dc..a60a66599c 100644 --- a/root/base.tx +++ b/root/base.tx @@ -23,7 +23,7 @@ - + %% block opengraph -> { } @@ -100,7 +100,7 @@
    [% $identity %]