зеркало из https://github.com/mozilla/bedrock.git
Add glean.js analytics to home page (#11402)
This commit is contained in:
Родитель
518e0d7a0e
Коммит
b3b8a2bdc5
|
@ -25,7 +25,7 @@ jobs:
|
|||
|
||||
test_js:
|
||||
docker:
|
||||
- image: "circleci/node:16-browsers"
|
||||
- image: "circleci/python:3.9-node-browsers"
|
||||
auth:
|
||||
username: $DOCKERHUB_USERNAME
|
||||
password: $DOCKERHUB_PASSWORD
|
||||
|
|
|
@ -57,3 +57,4 @@ static_final
|
|||
static
|
||||
assets
|
||||
npm-debug.log
|
||||
media/js/libs/glean
|
||||
|
|
52
Dockerfile
52
Dockerfile
|
@ -1,25 +1,3 @@
|
|||
########
|
||||
# assets builder and dev server
|
||||
#
|
||||
FROM node:16-slim AS assets
|
||||
|
||||
ENV PATH=/app/node_modules/.bin:$PATH
|
||||
WORKDIR /app
|
||||
|
||||
# copy dependency definitions
|
||||
COPY package.json package-lock.json ./
|
||||
|
||||
# install dependencies
|
||||
RUN npm ci
|
||||
|
||||
# copy supporting files and media
|
||||
COPY .eslintrc.js .eslintignore .stylelintrc .prettierrc.json .prettierignore webpack.config.js webpack.static.config.js ./
|
||||
COPY ./media ./media
|
||||
COPY ./tests/unit ./tests/unit
|
||||
|
||||
RUN npm run build
|
||||
|
||||
|
||||
########
|
||||
# Python dependencies builder
|
||||
#
|
||||
|
@ -41,6 +19,36 @@ COPY requirements/prod.txt ./requirements/
|
|||
RUN pip install --require-hashes --no-cache-dir -r requirements/prod.txt
|
||||
|
||||
|
||||
########
|
||||
# assets builder and dev server
|
||||
#
|
||||
FROM node:16-slim AS assets
|
||||
|
||||
ENV PATH=/app/node_modules/.bin:$PATH
|
||||
WORKDIR /app
|
||||
|
||||
# copy dependency definitions
|
||||
COPY package.json package-lock.json ./
|
||||
|
||||
# install dependencies
|
||||
RUN npm ci
|
||||
|
||||
# copy supporting files and media
|
||||
COPY .eslintrc.js .eslintignore .stylelintrc .prettierrc.json .prettierignore webpack.config.js webpack.static.config.js ./
|
||||
COPY ./media ./media
|
||||
COPY ./tests/unit ./tests/unit
|
||||
COPY ./glean ./glean
|
||||
|
||||
# Required for required glean_parser dependencies
|
||||
COPY docker/bin/apt-install /usr/local/bin/
|
||||
RUN apt-install python3 python3-venv
|
||||
RUN python3 -m venv /.venv
|
||||
COPY --from=python-builder /venv /.venv
|
||||
ENV PATH="/.venv/bin:$PATH"
|
||||
|
||||
RUN npm run build
|
||||
|
||||
|
||||
########
|
||||
# django app container
|
||||
#
|
||||
|
|
2
Makefile
2
Makefile
|
@ -144,7 +144,7 @@ test_infra/fixtures/tls.json:
|
|||
build-ci: .docker-build-pull
|
||||
${DC_CI} build --pull release
|
||||
# tag intermediate images using cache
|
||||
${DC_CI} build app assets builder app-base
|
||||
${DC_CI} build app builder assets app-base
|
||||
touch .docker-build-ci
|
||||
|
||||
test-ci: .docker-build-ci
|
||||
|
|
|
@ -143,6 +143,8 @@
|
|||
{% endblock %}
|
||||
|
||||
<!--[if !IE]><!-->
|
||||
{% block glean %}{% endblock %}
|
||||
|
||||
{% block js %}{% endblock %}
|
||||
|
||||
{% if self.structured_data()|trim|length %}
|
||||
|
|
|
@ -33,3 +33,9 @@
|
|||
{% block structured_data %}
|
||||
{% include 'includes/structured-data/organizations/mozilla-corporation-organisation.json' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block glean %}
|
||||
{% if switch('glean-analytics') %}
|
||||
{{ js_bundle('glean') }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -159,4 +159,109 @@ click with the following structure:
|
|||
| Event Action: {{data-cta-type}} click
|
||||
| Event Label: {{data-cta-name}}
|
||||
|
||||
Glean
|
||||
-----
|
||||
|
||||
Currently in an evaluation phase, bedrock is now capable of running a parallel
|
||||
first-party analytics implementation alongside :abbr:`GTM (Google Tag Manager)`,
|
||||
using Mozilla's own `Glean`_ telemetry :abbr:`SDK (Software Development Kit)`.
|
||||
See the `Glean Book`_ for more developer reference documentation.
|
||||
|
||||
Glean is currently behind a feature switch called ``SWITCH_GLEAN_ANALYTICS``.
|
||||
When the switch is enabled pages will load the Glean JavaScript bundle,
|
||||
which will do things like register page views and capture link clicks. Our
|
||||
implementation leverages the same HTML data attributes that we use for
|
||||
:abbr:`GTM (Google Tag Manager)` when tracking link clicks, so any attributes
|
||||
you add for :abbr:`GTM (Google Tag Manager)` should also be captured by Glean
|
||||
automatically.
|
||||
|
||||
Debugging Pings
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
For all non-production environments, bedrock will automatically set a debug
|
||||
view tag for all pings. This means that when running on localhost, on a demo,
|
||||
or on a staging environment, ping data will not be sent to the production data
|
||||
pipeline. Instead, it will be sent to the `Glean debug dashboard`_ which can
|
||||
be used to test that pings are working correctly. All bedrock debug pings will
|
||||
register in the debug dashboard with the tag name ``moz-bedrock``.
|
||||
|
||||
Logging Pings in the Console
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When running bedrock locally, you can also set the following environment variable
|
||||
in your ``.env``` file to automatically log pings in the browser's web console.
|
||||
This can be especially useful when making updates to analytics code.
|
||||
|
||||
.. code-block::
|
||||
|
||||
GLEAN_LOG_PINGS=True
|
||||
|
||||
Defining Metrics and Pings
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All of the data we send to the Glean pipeline is defined in
|
||||
:abbr:`YAML (Yet Another Markup Language)` schema files in the ``./glean/``
|
||||
project root directory. The ``metrics.yaml`` file defines all the different
|
||||
metrics types we record, and the ``pings.yaml`` file defines the name of each
|
||||
ping event we use to send collections of individual metrics. These are all
|
||||
automatically documented in ``./glean/docs/``.
|
||||
|
||||
.. Note::
|
||||
|
||||
Before running any Glean commands locally, always make sure you have first
|
||||
activated your virtual environment by running ``pyenv activate bedrock``.
|
||||
|
||||
When bedrock starts, we automatically run ``npm run glean`` which parses these
|
||||
schema files and then generates some JavaScript library code in
|
||||
``./media/js/libs/glean/``. This library code is not committed to the repository
|
||||
on purpose, in order to avoid people altering it and becoming out of sync with
|
||||
the schema. This library code is then imported into our Glean analytics code in
|
||||
``./media/js/glean/``, which is where we initiate page views and capture click
|
||||
events.
|
||||
|
||||
Running ``npm run glean`` can also be performed independently of starting bedrock.
|
||||
It will also do things such as lint schema files and automatically generate the
|
||||
schema docs.
|
||||
|
||||
.. Important::
|
||||
|
||||
All metrics and pings we record using Glean must first undergo a `data review`_
|
||||
before being made active in production. Therefore anytime we make new additions
|
||||
to these files, those changes should also undergo review.
|
||||
|
||||
Using Glean pings in individual page bundles
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All of our analytics code for Glean lives in a single bundle in the base template,
|
||||
which is intended to be shared across all web pages. There may be times where we
|
||||
want to send a ping from some JavaScript that exists only in a certain page
|
||||
specific bundle however. For instances like this, there is a global ``pageEventPing``
|
||||
helper available, which you can call from inside any custom event handler you write.
|
||||
|
||||
For user initiated events, such as clicks:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
if (typeof window.Mozilla.Glean !== 'undefined') {
|
||||
window.Mozilla.Glean.pageEventPing({
|
||||
label: 'Newsletters: mozilla-and-you',
|
||||
type: 'Newsletter Signup Success'
|
||||
});
|
||||
}
|
||||
|
||||
For non-interaction events that are not user initiated:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
if (typeof window.Mozilla.Glean !== 'undefined') {
|
||||
window.Mozilla.Glean.pageEventPing({
|
||||
label: 'Auto Play',
|
||||
type: 'Video'
|
||||
nonInteraction: true
|
||||
});
|
||||
}
|
||||
|
||||
.. _Glean: https://docs.telemetry.mozilla.org/concepts/glean/glean.html
|
||||
.. _Glean Book: https://mozilla.github.io/glean/book/index.html
|
||||
.. _Glean debug dashboard: https://debug-ping-preview.firebaseapp.com/
|
||||
.. _data revreview: https://wiki.mozilla.org/Data_Collection
|
||||
|
|
|
@ -23,29 +23,34 @@ Installation
|
|||
------------
|
||||
|
||||
First follow the :ref:`installation instructions for bedrock<install>`, which
|
||||
will install the specific versions of Jasmine/Karma which are needed to run the
|
||||
unit tests, and guide you through installing pip and setting up a virtual
|
||||
environment for the functional tests. The additional requirements can then be
|
||||
installed by using the following commands:
|
||||
will install the dependencies required to run the various front-end test suites.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ source venv/bin/activate
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ pip install -r requirements/dev.txt
|
||||
|
||||
Running Jasmine tests using Karma
|
||||
---------------------------------
|
||||
|
||||
To perform a single run of the Jasmine test suite using Firefox, type the
|
||||
following command:
|
||||
To perform a single run of the Jasmine test suite using Firefox and Chrome,
|
||||
first make sure you have both browsers installed locally, and then activate
|
||||
your bedrock virtual env.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ pyenv activate bedrock
|
||||
|
||||
You can then run the tests with the following command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ npm run test
|
||||
|
||||
This will run all our front-end linters and formatting checks before running
|
||||
the Jasmine test suite. If you only want to run the tests themselves, you can
|
||||
run:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ npm run karma
|
||||
|
||||
See the `Jasmine`_ documentation for tips on how to write JS behavioral or unit
|
||||
tests. We also use `Sinon`_ for creating test spies, stubs and mocks.
|
||||
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
<!-- AUTOGENERATED BY glean_parser. DO NOT EDIT. -->
|
||||
|
||||
# Metrics
|
||||
|
||||
This document enumerates the metrics collected by this project using the [Glean SDK](https://mozilla.github.io/glean/book/index.html).
|
||||
This project may depend on other projects which also collect metrics.
|
||||
This means you might have to go searching through the dependency tree to get a full picture of everything collected by this project.
|
||||
|
||||
# Pings
|
||||
|
||||
- [interaction](#interaction)
|
||||
- [non-interaction](#non-interaction)
|
||||
- [page-view](#page-view)
|
||||
|
||||
## interaction
|
||||
|
||||
A ping which is sent when a page element is
|
||||
interacted with.
|
||||
|
||||
|
||||
This ping includes the [client id](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section).
|
||||
|
||||
**Data reviews for this ping:**
|
||||
|
||||
- <https://bugzilla.mozilla.org/show_bug.cgi?id=1767442>
|
||||
|
||||
**Bugs related to this ping:**
|
||||
|
||||
- <https://github.com/mozilla/bedrock/issues/10746>
|
||||
|
||||
All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections.
|
||||
|
||||
In addition to those built-in metrics, the following metrics are added to the ping:
|
||||
|
||||
| Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| element.clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event containing metrics related to which element in the page was clicked. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>label: Description of the page element that was clicked. Examples: 'Download Firefox', 'Get Mozilla VPN'. </li><li>position: The position of the element in the page. Examples: 'Primary', 'Secondary', 'Navigation', 'Footer'. </li><li>type: The type of element that was clicked. Examples: 'Button', 'Link'. </li></ul>|never |3 |
|
||||
| page.locale |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The locale of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.page_event |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event containing metrics related to a page level completion or state that want to measure. This can be sent in either an interaction and non-interaction ping, depending upon the use-case. Examples: form completion, scroll events, banner impressions. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>label: The label used to describe the event. Example: 'Newsletters: mozilla-and-you' </li><li>type: The type of event. Example: 'Newsletter Signup Success' </li></ul>|never |3 |
|
||||
| page.path |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The URL path of the page that was viewed, excluding locale. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.query_params |[labeled_string](https://mozilla.github.io/glean/book/user/metrics/labeled_strings.html) |Query parameters associated with the URL of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>utm_source</li><li>utm_campaign</li><li>utm_medium</li><li>utm_content</li><li>entrypoint_experiment</li><li>entrypoing_variation</li><li>experiment</li><li>variation</li><li>v</li><li>xv</li></ul>|never | |
|
||||
| page.referrer |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The referring URL that linked to the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.viewed |[datetime](https://mozilla.github.io/glean/book/user/metrics/datetime.html) |The time a page was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
|
||||
## non-interaction
|
||||
|
||||
A ping which is sent when a non-user initiated event
|
||||
occurs. Examples: a specific banner impression is
|
||||
displayed, a video auto-plays on scroll.
|
||||
|
||||
|
||||
This ping includes the [client id](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section).
|
||||
|
||||
**Data reviews for this ping:**
|
||||
|
||||
- <https://bugzilla.mozilla.org/show_bug.cgi?id=1767442>
|
||||
|
||||
**Bugs related to this ping:**
|
||||
|
||||
- <https://github.com/mozilla/bedrock/issues/10746>
|
||||
|
||||
All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections.
|
||||
|
||||
In addition to those built-in metrics, the following metrics are added to the ping:
|
||||
|
||||
| Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| page.locale |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The locale of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.page_event |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event containing metrics related to a page level completion or state that want to measure. This can be sent in either an interaction and non-interaction ping, depending upon the use-case. Examples: form completion, scroll events, banner impressions. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>label: The label used to describe the event. Example: 'Newsletters: mozilla-and-you' </li><li>type: The type of event. Example: 'Newsletter Signup Success' </li></ul>|never |3 |
|
||||
| page.path |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The URL path of the page that was viewed, excluding locale. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.query_params |[labeled_string](https://mozilla.github.io/glean/book/user/metrics/labeled_strings.html) |Query parameters associated with the URL of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>utm_source</li><li>utm_campaign</li><li>utm_medium</li><li>utm_content</li><li>entrypoint_experiment</li><li>entrypoing_variation</li><li>experiment</li><li>variation</li><li>v</li><li>xv</li></ul>|never | |
|
||||
| page.referrer |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The referring URL that linked to the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.viewed |[datetime](https://mozilla.github.io/glean/book/user/metrics/datetime.html) |The time a page was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
|
||||
## page-view
|
||||
|
||||
A ping which is sent everytime a page is viewed.
|
||||
|
||||
|
||||
This ping includes the [client id](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section).
|
||||
|
||||
**Data reviews for this ping:**
|
||||
|
||||
- <https://bugzilla.mozilla.org/show_bug.cgi?id=1767442>
|
||||
|
||||
**Bugs related to this ping:**
|
||||
|
||||
- <https://github.com/mozilla/bedrock/issues/10746>
|
||||
|
||||
All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections.
|
||||
|
||||
In addition to those built-in metrics, the following metrics are added to the ping:
|
||||
|
||||
| Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| page.locale |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The locale of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.path |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The URL path of the page that was viewed, excluding locale. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.query_params |[labeled_string](https://mozilla.github.io/glean/book/user/metrics/labeled_strings.html) |Query parameters associated with the URL of the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)|<ul><li>utm_source</li><li>utm_campaign</li><li>utm_medium</li><li>utm_content</li><li>entrypoint_experiment</li><li>entrypoing_variation</li><li>experiment</li><li>variation</li><li>v</li><li>xv</li></ul>|never | |
|
||||
| page.referrer |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The referring URL that linked to the page that was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
| page.viewed |[datetime](https://mozilla.github.io/glean/book/user/metrics/datetime.html) |The time a page was viewed. |[Bug 1767442](https://bugzilla.mozilla.org/show_bug.cgi?id=1767442)||never |3 |
|
||||
|
||||
Data categories are [defined here](https://wiki.mozilla.org/Firefox/Data_Collection).
|
||||
|
||||
<!-- AUTOGENERATED BY glean_parser. DO NOT EDIT. -->
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
---
|
||||
$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
|
||||
|
||||
page:
|
||||
viewed:
|
||||
type: datetime
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- page-view
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
The time a page was viewed.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
path:
|
||||
type: string
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- page-view
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
The URL path of the page that was viewed, excluding locale.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
locale:
|
||||
type: string
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- page-view
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
The locale of the page that was viewed.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
query_params:
|
||||
type: labeled_string
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- page-view
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
Query parameters associated with the URL of
|
||||
the page that was viewed.
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
labels:
|
||||
- utm_source
|
||||
- utm_campaign
|
||||
- utm_medium
|
||||
- utm_content
|
||||
- entrypoint_experiment
|
||||
- entrypoing_variation
|
||||
- experiment
|
||||
- variation
|
||||
- v
|
||||
- xv
|
||||
referrer:
|
||||
type: string
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- page-view
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
The referring URL that linked to the page that was viewed.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
page_event:
|
||||
type: event
|
||||
lifetime: ping
|
||||
send_in_pings:
|
||||
- interaction
|
||||
- non-interaction
|
||||
description: |
|
||||
An event containing metrics related to a page level
|
||||
completion or state that want to measure. This can be
|
||||
sent in either an interaction and non-interaction ping,
|
||||
depending upon the use-case. Examples: form completion,
|
||||
scroll events, banner impressions.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
extra_keys:
|
||||
label:
|
||||
description: |
|
||||
The label used to describe the event.
|
||||
Example: 'Newsletters: mozilla-and-you'
|
||||
type: string
|
||||
type:
|
||||
description: |
|
||||
The type of event.
|
||||
Example: 'Newsletter Signup Success'
|
||||
type: string
|
||||
|
||||
element:
|
||||
clicked:
|
||||
type: event
|
||||
lifetime: ping
|
||||
send_in_pings:
|
||||
- interaction
|
||||
description: |
|
||||
An event containing metrics related to which element
|
||||
in the page was clicked.
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
expires: never
|
||||
extra_keys:
|
||||
label:
|
||||
description: |
|
||||
Description of the page element that was
|
||||
clicked. Examples: 'Download Firefox',
|
||||
'Get Mozilla VPN'.
|
||||
type: string
|
||||
type:
|
||||
description: |
|
||||
The type of element that was clicked.
|
||||
Examples: 'Button', 'Link'.
|
||||
type: string
|
||||
position:
|
||||
description: |
|
||||
The position of the element in the page.
|
||||
Examples: 'Primary', 'Secondary',
|
||||
'Navigation', 'Footer'.
|
||||
type: string
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
$schema: moz://mozilla.org/schemas/glean/pings/2-0-0
|
||||
|
||||
page-view:
|
||||
description: |
|
||||
A ping which is sent everytime a page is viewed.
|
||||
include_client_id: true
|
||||
send_if_empty: false
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
|
||||
interaction:
|
||||
description: |
|
||||
A ping which is sent when a page element is
|
||||
interacted with.
|
||||
include_client_id: true
|
||||
send_if_empty: false
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
||||
|
||||
non-interaction:
|
||||
description: |
|
||||
A ping which is sent when a non-user initiated event
|
||||
occurs. Examples: a specific banner impression is
|
||||
displayed, a video auto-plays on scroll.
|
||||
include_client_id: true
|
||||
send_if_empty: false
|
||||
bugs:
|
||||
- https://github.com/mozilla/bedrock/issues/10746
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1767442
|
||||
notification_emails:
|
||||
- marketing-websites-team@mozilla.com
|
|
@ -49,6 +49,14 @@ if (typeof window.Mozilla === 'undefined') {
|
|||
'data-banner-name': Banner.id,
|
||||
'data-banner-dismissal': '1'
|
||||
});
|
||||
|
||||
// Track event in Glean.
|
||||
if (typeof window.Mozilla.Glean !== 'undefined') {
|
||||
window.Mozilla.Glean.pageEventPing({
|
||||
label: Banner.id,
|
||||
type: 'Banner Dismissal'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Banner.show = function (renderAtTopOfPage) {
|
||||
|
|
|
@ -20,5 +20,13 @@
|
|||
languageSelected: newLanguage,
|
||||
previousLanguage: previousLanguage
|
||||
});
|
||||
|
||||
// Track event in Glean.
|
||||
if (typeof window.Mozilla.Glean !== 'undefined') {
|
||||
window.Mozilla.Glean.pageEventPing({
|
||||
label: 'Language Selected: ' + newLanguage,
|
||||
type: 'Change Language'
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { interaction as interactionPing } from '../libs/glean/pings.js';
|
||||
import * as element from '../libs/glean/element.js';
|
||||
|
||||
function interaction(obj) {
|
||||
if (typeof obj !== 'object' && typeof obj.label !== 'string') {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = {
|
||||
label: obj.label
|
||||
};
|
||||
|
||||
if (typeof obj.type === 'string') {
|
||||
data['type'] = obj.type;
|
||||
}
|
||||
|
||||
if (typeof obj.position === 'string') {
|
||||
data['position'] = obj.position;
|
||||
}
|
||||
|
||||
element.clicked.record(data);
|
||||
interactionPing.submit();
|
||||
}
|
||||
|
||||
function getElementAttributes(e) {
|
||||
let el = e.target;
|
||||
|
||||
// If the node isn't a link or button, traverse upward
|
||||
// in case this is a nested child element.
|
||||
if (
|
||||
(el.nodeName !== 'A' || el.nodeName !== 'BUTTON') &&
|
||||
Element.prototype.closest
|
||||
) {
|
||||
el = el.closest('a') || el.closest('button');
|
||||
}
|
||||
|
||||
// Check all link and button elements for data attributes.
|
||||
if (el && (el.nodeName === 'A' || el.nodeName === 'BUTTON')) {
|
||||
const ctaText = el.getAttribute('data-cta-text');
|
||||
const linkName = el.getAttribute('data-link-name');
|
||||
const linkType = el.getAttribute('data-link-type');
|
||||
|
||||
// CTA link clicks
|
||||
if (ctaText) {
|
||||
const type = el.getAttribute('data-cta-type');
|
||||
const position = el.getAttribute('data-cta-position');
|
||||
interaction({
|
||||
label: ctaText,
|
||||
type: type,
|
||||
position: position
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Firefox Download link clicks
|
||||
if (linkType && linkType === 'download') {
|
||||
const os = el.getAttribute('data-download-os');
|
||||
const name = el.getAttribute('data-display-name');
|
||||
const position = el.getAttribute('data-download-location');
|
||||
|
||||
if (os) {
|
||||
const label = `Firefox Download ${os}`;
|
||||
interaction({
|
||||
label: label,
|
||||
type: name,
|
||||
position: position
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Older format links
|
||||
if (linkName) {
|
||||
const position = el.getAttribute('data-link-position');
|
||||
interaction({
|
||||
label: linkName,
|
||||
type: linkType,
|
||||
position: position
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bindElementClicks() {
|
||||
document
|
||||
.querySelector('body')
|
||||
.addEventListener('click', getElementAttributes, false);
|
||||
}
|
||||
|
||||
function unbindElementClicks() {
|
||||
document
|
||||
.querySelector('body')
|
||||
.removeEventListener('click', getElementAttributes, false);
|
||||
}
|
||||
|
||||
export { bindElementClicks, unbindElementClicks };
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import Glean from '@mozilla/glean/web';
|
||||
|
||||
import { initPageView, pageEventPing } from './page.es6';
|
||||
import { bindElementClicks } from './elements.es6';
|
||||
import Utils from './utils.es6';
|
||||
|
||||
function initGlean() {
|
||||
// Automatically console.log() pings.
|
||||
// eslint-disable-next-line no-undef
|
||||
if (process.env.GLEAN_LOG_PINGS === 'True') {
|
||||
Glean.setLogPings(true);
|
||||
}
|
||||
|
||||
// Enable debug view for all non-production environments.
|
||||
// https://debug-ping-preview.firebaseapp.com/
|
||||
if (window.location.href.indexOf('https://www.mozilla.org/') === -1) {
|
||||
Glean.setDebugViewTag('moz-bedrock');
|
||||
}
|
||||
|
||||
// Ensure telemetry coming from automated testing is tagged
|
||||
// https://mozilla.github.io/glean/book/reference/debug/sourceTags.html
|
||||
if (window.location.href.indexOf('automation=true') !== -1) {
|
||||
Glean.setSourceTags(['automation']);
|
||||
}
|
||||
|
||||
Glean.initialize('moz-bedrock', Utils.isTelemetryEnabled(), {
|
||||
maxEvents: 1 // Set max events to 1 so pings are sent as soon as registered.
|
||||
});
|
||||
}
|
||||
|
||||
function initPageEventHelper() {
|
||||
if (typeof window.Mozilla === 'undefined') {
|
||||
window.Mozilla = {};
|
||||
}
|
||||
|
||||
// Create a global for external bundles to fire interaction pings.
|
||||
window.Mozilla.Glean = { pageEventPing };
|
||||
}
|
||||
|
||||
initGlean();
|
||||
initPageView();
|
||||
initPageEventHelper();
|
||||
bindElementClicks();
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import * as page from '../libs/glean/page.js';
|
||||
import Utils from './utils.es6';
|
||||
import {
|
||||
pageView as pageViewPing,
|
||||
interaction as interactionPing,
|
||||
nonInteraction as nonInteractionPing
|
||||
} from '../libs/glean/pings.js';
|
||||
|
||||
const validParams = [
|
||||
'utm_source',
|
||||
'utm_campaign',
|
||||
'utm_medium',
|
||||
'utm_content',
|
||||
'entrypoint_experiment',
|
||||
'entrypoint_variation',
|
||||
'experiment',
|
||||
'variation',
|
||||
'v', // short param for 'variation'
|
||||
'xv' // short param for 'experience version'.
|
||||
];
|
||||
|
||||
function initPageView() {
|
||||
page.viewed.set();
|
||||
page.path.set(Utils.getPathFromUrl());
|
||||
page.locale.set(Utils.getLocaleFromUrl());
|
||||
page.referrer.set(Utils.getReferrer());
|
||||
|
||||
const params = Utils.getQueryParamsFromURL();
|
||||
|
||||
if (params) {
|
||||
// validate only known & trusted query params
|
||||
// for inclusion in Glean metrics.
|
||||
for (const param in validParams) {
|
||||
const allowedChars = /^[\w/.%-]+$/;
|
||||
const p = validParams[param];
|
||||
let v = params.get(p);
|
||||
|
||||
if (v) {
|
||||
v = decodeURIComponent(v);
|
||||
if (allowedChars.test(v)) {
|
||||
page.queryParams[p].set(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pageViewPing.submit();
|
||||
}
|
||||
|
||||
function pageEventPing(obj) {
|
||||
if (typeof obj !== 'object' && typeof obj.label !== 'string') {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = {
|
||||
label: obj.label
|
||||
};
|
||||
|
||||
if (typeof obj.type === 'string') {
|
||||
data['type'] = obj.type;
|
||||
}
|
||||
|
||||
page.pageEvent.record(data);
|
||||
|
||||
if (
|
||||
typeof obj.nonInteraction === 'boolean' &&
|
||||
obj.nonInteraction === true
|
||||
) {
|
||||
nonInteractionPing.submit();
|
||||
} else {
|
||||
interactionPing.submit();
|
||||
}
|
||||
}
|
||||
|
||||
export { initPageView, pageEventPing };
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
const Utils = {
|
||||
getPathFromUrl: function (path) {
|
||||
const pathName = path ? path : document.location.pathname;
|
||||
return pathName.replace(/^(\/\w{2}-\w{2}\/|\/\w{2,3}\/)/, '/');
|
||||
},
|
||||
|
||||
getLocaleFromUrl: function (path) {
|
||||
const pathName = path ? path : document.location.pathname;
|
||||
const locale = pathName.match(/^\/(\w{2}-\w{2}|\w{2,3})\//);
|
||||
// If there's no locale in the path then assume language is `en-US`;
|
||||
return locale && locale.length > 0 ? locale[1] : 'en-US';
|
||||
},
|
||||
|
||||
getQueryParamsFromURL: function (qs) {
|
||||
const query = typeof qs === 'string' ? qs : window.location.search;
|
||||
|
||||
if (typeof window._SearchParams !== 'undefined') {
|
||||
return new window._SearchParams(query);
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
getReferrer: function (ref) {
|
||||
return typeof ref === 'string' ? ref : document.referrer;
|
||||
},
|
||||
|
||||
isTelemetryEnabled: function () {
|
||||
if (
|
||||
typeof Mozilla.Cookies !== 'undefined' &&
|
||||
Mozilla.Cookies.enabled()
|
||||
) {
|
||||
return !Mozilla.Cookies.hasItem('moz-1st-party-data-opt-out');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
export default Utils;
|
|
@ -178,6 +178,20 @@
|
|||
newsletter: newsletters
|
||||
});
|
||||
}
|
||||
|
||||
const newsletterLabel = newsletters
|
||||
.map((n) => {
|
||||
return n;
|
||||
})
|
||||
.join(', ');
|
||||
|
||||
// Track event in Glean.
|
||||
if (typeof window.Mozilla.Glean !== 'undefined') {
|
||||
window.Mozilla.Glean.pageEventPing({
|
||||
label: `Newsletters: ${newsletterLabel}`,
|
||||
type: 'Newsletter Signup Success'
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (response.errors) {
|
||||
for (let i = 0; i < response.errors.length; i++) {
|
||||
|
|
|
@ -1129,6 +1129,12 @@
|
|||
],
|
||||
"name": "site"
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"js/glean/init.es6.js"
|
||||
],
|
||||
"name": "glean"
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"protocol/js/protocol-modal.js",
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"@babel/core": "^7.17.9",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@mozilla-protocol/core": "16.0.0",
|
||||
"@mozilla/glean": "^1.0.0",
|
||||
"@sentry/browser": "^6.19.0",
|
||||
"babel-loader": "^8.2.4",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
|
@ -29,6 +30,7 @@
|
|||
"browser-sync": "^2.27.9",
|
||||
"browser-sync-webpack-plugin": "^2.2.2",
|
||||
"concurrently": "^7.1.0",
|
||||
"dotenv-webpack": "^7.1.0",
|
||||
"eslint": "^8.11.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-json": "^3.1.0",
|
||||
|
@ -1601,6 +1603,37 @@
|
|||
"resolved": "https://registry.npmjs.org/@mozilla-protocol/core/-/core-16.0.0.tgz",
|
||||
"integrity": "sha512-2eICrBcKvm9GpKy7yv90YIVbR/iscyVpjfaeMt+n25lj0svNknDBPmQJR0njgOemzEr8IFdnqL8oj0+JhMGj8g=="
|
||||
},
|
||||
"node_modules/@mozilla/glean": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@mozilla/glean/-/glean-1.0.0.tgz",
|
||||
"integrity": "sha512-2RzkubrxaCV7mkmCXgBmD16XbDuK4SVqlMdLv3zez2lb3WXnLo6j+C+IKIgBke/f/iGgz6O4SISjTAhkaPvgNQ==",
|
||||
"dependencies": {
|
||||
"fflate": "^0.7.1",
|
||||
"jose": "^4.0.4",
|
||||
"tslib": "^2.3.1",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"bin": {
|
||||
"glean": "dist/cli/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.20.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@mozilla/glean/node_modules/tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"node_modules/@mozilla/glean/node_modules/uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
@ -3815,6 +3848,39 @@
|
|||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
|
||||
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv-defaults": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz",
|
||||
"integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"dotenv": "^8.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv-webpack": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.1.0.tgz",
|
||||
"integrity": "sha512-+aUOe+nqgLerA/n611oyC15fY79BIkGm2fOxJAcHDonMZ7AtDpnzv/Oe591eHAenIE0t6w03UyxDnLs/YUxx5Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"dotenv-defaults": "^2.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "^4 || ^5"
|
||||
}
|
||||
},
|
||||
"node_modules/easy-extender": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
|
||||
|
@ -4447,6 +4513,11 @@
|
|||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/fflate": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz",
|
||||
"integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw=="
|
||||
},
|
||||
"node_modules/file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
|
@ -5387,6 +5458,14 @@
|
|||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/jose": {
|
||||
"version": "4.6.1",
|
||||
"resolved": "https://registry.npmjs.org/jose/-/jose-4.6.1.tgz",
|
||||
"integrity": "sha512-EFnufEivlIB6j7+JwaenYQzdUDs/McajDr9WnhT6EI0WxbexnfuZimpWX1GnobF6OnQsUFmWFXUXdWyZHWdQow==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/panva"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
@ -10869,6 +10948,29 @@
|
|||
"resolved": "https://registry.npmjs.org/@mozilla-protocol/core/-/core-16.0.0.tgz",
|
||||
"integrity": "sha512-2eICrBcKvm9GpKy7yv90YIVbR/iscyVpjfaeMt+n25lj0svNknDBPmQJR0njgOemzEr8IFdnqL8oj0+JhMGj8g=="
|
||||
},
|
||||
"@mozilla/glean": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@mozilla/glean/-/glean-1.0.0.tgz",
|
||||
"integrity": "sha512-2RzkubrxaCV7mkmCXgBmD16XbDuK4SVqlMdLv3zez2lb3WXnLo6j+C+IKIgBke/f/iGgz6O4SISjTAhkaPvgNQ==",
|
||||
"requires": {
|
||||
"fflate": "^0.7.1",
|
||||
"jose": "^4.0.4",
|
||||
"tslib": "^2.3.1",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
@ -12572,6 +12674,30 @@
|
|||
"domhandler": "^4.2.0"
|
||||
}
|
||||
},
|
||||
"dotenv": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
|
||||
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
|
||||
"dev": true
|
||||
},
|
||||
"dotenv-defaults": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz",
|
||||
"integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"dotenv": "^8.2.0"
|
||||
}
|
||||
},
|
||||
"dotenv-webpack": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.1.0.tgz",
|
||||
"integrity": "sha512-+aUOe+nqgLerA/n611oyC15fY79BIkGm2fOxJAcHDonMZ7AtDpnzv/Oe591eHAenIE0t6w03UyxDnLs/YUxx5Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"dotenv-defaults": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"easy-extender": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
|
||||
|
@ -13059,6 +13185,11 @@
|
|||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"fflate": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz",
|
||||
"integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw=="
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
|
@ -13745,6 +13876,11 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"jose": {
|
||||
"version": "4.6.1",
|
||||
"resolved": "https://registry.npmjs.org/jose/-/jose-4.6.1.tgz",
|
||||
"integrity": "sha512-EFnufEivlIB6j7+JwaenYQzdUDs/McajDr9WnhT6EI0WxbexnfuZimpWX1GnobF6OnQsUFmWFXUXdWyZHWdQow=="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
|
15
package.json
15
package.json
|
@ -7,6 +7,7 @@
|
|||
"@babel/core": "^7.17.9",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@mozilla-protocol/core": "16.0.0",
|
||||
"@mozilla/glean": "^1.0.0",
|
||||
"@sentry/browser": "^6.19.0",
|
||||
"babel-loader": "^8.2.4",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
|
@ -33,6 +34,7 @@
|
|||
"browser-sync": "^2.27.9",
|
||||
"browser-sync-webpack-plugin": "^2.2.2",
|
||||
"concurrently": "^7.1.0",
|
||||
"dotenv-webpack": "^7.1.0",
|
||||
"eslint": "^8.11.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-json": "^3.1.0",
|
||||
|
@ -51,23 +53,28 @@
|
|||
"tinypng-cli": "^0.0.7"
|
||||
},
|
||||
"scripts": {
|
||||
"prestart": "npm run glean",
|
||||
"start": "concurrently --kill-others \"python manage.py runserver 0.0.0.0:8080\" \"npm run watch\"",
|
||||
"in-pocket-mode": "SITE_MODE=Pocket npm start",
|
||||
"lint-js": "./node_modules/.bin/eslint \"media/js/**/*.js\" \"tests/unit/spec/**/*.js\" webpack.config.js webpack.static.config.js",
|
||||
"lint-css": "./node_modules/.bin/stylelint \"media/css/**/*.{css,scss}\"",
|
||||
"lint-json": "./node_modules/.bin/eslint \"bedrock/base/templates/includes/structured-data/**/*.json\"",
|
||||
"lint": "npm run lint-js && npm run lint-css && npm run lint-json && npm run prettier-check",
|
||||
"pretest": "npm run lint",
|
||||
"test": "./node_modules/.bin/karma start ./tests/unit/karma.conf.js",
|
||||
"test": "npm run glean && npm run lint && npm run karma",
|
||||
"karma": "./node_modules/.bin/karma start ./tests/unit/karma.conf.js",
|
||||
"static": "webpack --config webpack.static.config.js --mode=production --bail",
|
||||
"prebuild": "npm run static",
|
||||
"prebuild": "npm run glean && npm run static",
|
||||
"build": "webpack --mode=production --bail",
|
||||
"prewatch": "npm run static",
|
||||
"watch": "webpack --mode=development --watch",
|
||||
"prettier": "prettier --write .",
|
||||
"prettier-check": "prettier --check .",
|
||||
"stylelint-fix": "./node_modules/.bin/stylelint \"media/css/**/*.{css,scss}\" --fix",
|
||||
"format": "npm run prettier && npm run stylelint-fix"
|
||||
"format": "npm run prettier && npm run stylelint-fix",
|
||||
"glean-docs": "glean translate glean/metrics.yaml glean/pings.yaml -f markdown -o glean/docs/",
|
||||
"glean-lint": "glean glinter glean/metrics.yaml glean/pings.yaml",
|
||||
"preglean": "npm run glean-lint && npm run glean-docs",
|
||||
"glean": "glean translate glean/metrics.yaml glean/pings.yaml -f javascript -o media/js/libs/glean/"
|
||||
},
|
||||
"browserslist": [
|
||||
"defaults",
|
||||
|
|
|
@ -22,4 +22,4 @@ selenium==4.1.3
|
|||
translate-toolkit==3.6.0
|
||||
# Related to moz-l10n-lint, used in CI
|
||||
cl-ext.lang==0.1.0
|
||||
compare-locales==7.6.0
|
||||
compare-locales==7.6.0
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
#
|
||||
# $ make compile-requirements
|
||||
#
|
||||
appdirs==1.4.4 \
|
||||
--hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \
|
||||
--hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
apscheduler==3.9.1 \
|
||||
--hash=sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3 \
|
||||
--hash=sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a
|
||||
|
@ -26,6 +32,7 @@ attrs==21.4.0 \
|
|||
# via
|
||||
# -r requirements/prod.txt
|
||||
# fluent-runtime
|
||||
# jsonschema
|
||||
# outcome
|
||||
# pytest
|
||||
# trio
|
||||
|
@ -177,10 +184,13 @@ cl-ext-lang==0.1.0 \
|
|||
--hash=sha256:662fcccc1ff77063dd9d6bad770c26d1345cf4cf01e679eab136e80f3ec2935c \
|
||||
--hash=sha256:90b94aaee4afecbf2a9be3cd65656940f38edea3ddde14b93a02a9e1ee5d1f72
|
||||
# via -r requirements/dev.in
|
||||
click==8.0.4 \
|
||||
--hash=sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1 \
|
||||
--hash=sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb
|
||||
# via black
|
||||
click==8.1.3 \
|
||||
--hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \
|
||||
--hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# black
|
||||
# glean-parser
|
||||
commonware==0.6.0 \
|
||||
--hash=sha256:0e9520986e292f2bf8cdf80b32f21ef01e4058fd7baa61d2d282d21ed7085b1f \
|
||||
--hash=sha256:f596962fd11bc53b5453ffa766dc99f297895021946096d3e6b4826f9ae075ea
|
||||
|
@ -315,6 +325,12 @@ deprecated==1.2.13 \
|
|||
dirsync==2.2.5 \
|
||||
--hash=sha256:1e3a4cd2b639a2eae5afc03c2b8a003fc43d56a0da5114db579386da9a14a8be
|
||||
# via -r requirements/prod.txt
|
||||
diskcache==5.4.0 \
|
||||
--hash=sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644 \
|
||||
--hash=sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
django==3.2.13 \
|
||||
--hash=sha256:6d93497a0a9bf6ba0e0b1a29cccdc40efbfc76297255b1309b3a884a688ec4b6 \
|
||||
--hash=sha256:b896ca61edc079eb6bbaa15cf6071eb69d6aac08cce5211583cfb41515644fdf
|
||||
|
@ -410,6 +426,10 @@ fluent-syntax==0.17.0 \
|
|||
# via
|
||||
# compare-locales
|
||||
# fluent-runtime
|
||||
glean-parser==5.1.0 \
|
||||
--hash=sha256:68c22006e961190541e267ab896d0d52a848e3a3caa1ef8ae38447b7447abe1a \
|
||||
--hash=sha256:f2831b686b16e4b930f4e96e36c5d77b620135b8dea086fdbc38d53adfae1d1d
|
||||
# via -r requirements/prod.txt
|
||||
greenlet==0.4.17 \
|
||||
--hash=sha256:1023d7b43ca11264ab7052cb09f5635d4afdb43df55e0854498fc63070a0b206 \
|
||||
--hash=sha256:124a3ae41215f71dc91d1a3d45cbf2f84e46b543e5d60b99ecc20e24b4c8f272 \
|
||||
|
@ -477,6 +497,7 @@ jinja2==3.0.3 \
|
|||
# via
|
||||
# -r requirements/prod.txt
|
||||
# django-jinja
|
||||
# glean-parser
|
||||
jmespath==0.10.0 \
|
||||
--hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \
|
||||
--hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f
|
||||
|
@ -484,6 +505,12 @@ jmespath==0.10.0 \
|
|||
# -r requirements/prod.txt
|
||||
# boto3
|
||||
# botocore
|
||||
jsonschema==4.5.1 \
|
||||
--hash=sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f \
|
||||
--hash=sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
lxml==4.8.0 \
|
||||
--hash=sha256:078306d19a33920004addeb5f4630781aaeabb6a8d01398045fcde085091a169 \
|
||||
--hash=sha256:0c1978ff1fd81ed9dcbba4f91cf09faf1f8082c9d72eb122e92294716c605428 \
|
||||
|
@ -557,49 +584,79 @@ markdown==3.3.6 \
|
|||
# -r requirements/prod.txt
|
||||
# django-jinja-markdown
|
||||
# mdx-outline
|
||||
markupsafe==2.1.1 \
|
||||
--hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
|
||||
--hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \
|
||||
--hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \
|
||||
--hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \
|
||||
--hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \
|
||||
--hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \
|
||||
--hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \
|
||||
--hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \
|
||||
--hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \
|
||||
--hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \
|
||||
--hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \
|
||||
--hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \
|
||||
--hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \
|
||||
--hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \
|
||||
--hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \
|
||||
--hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \
|
||||
--hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \
|
||||
--hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \
|
||||
--hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \
|
||||
--hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \
|
||||
--hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \
|
||||
--hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \
|
||||
--hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \
|
||||
--hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \
|
||||
--hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \
|
||||
--hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \
|
||||
--hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \
|
||||
--hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \
|
||||
--hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \
|
||||
--hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \
|
||||
--hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \
|
||||
--hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \
|
||||
--hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \
|
||||
--hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \
|
||||
--hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \
|
||||
--hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \
|
||||
--hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \
|
||||
--hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \
|
||||
--hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \
|
||||
--hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7
|
||||
markupsafe==2.0.1 \
|
||||
--hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \
|
||||
--hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \
|
||||
--hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \
|
||||
--hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \
|
||||
--hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \
|
||||
--hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \
|
||||
--hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \
|
||||
--hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \
|
||||
--hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \
|
||||
--hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \
|
||||
--hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \
|
||||
--hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \
|
||||
--hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \
|
||||
--hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \
|
||||
--hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \
|
||||
--hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \
|
||||
--hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \
|
||||
--hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \
|
||||
--hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \
|
||||
--hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \
|
||||
--hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \
|
||||
--hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \
|
||||
--hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \
|
||||
--hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \
|
||||
--hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \
|
||||
--hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \
|
||||
--hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \
|
||||
--hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \
|
||||
--hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \
|
||||
--hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \
|
||||
--hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \
|
||||
--hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \
|
||||
--hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \
|
||||
--hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \
|
||||
--hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \
|
||||
--hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \
|
||||
--hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \
|
||||
--hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \
|
||||
--hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \
|
||||
--hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \
|
||||
--hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \
|
||||
--hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \
|
||||
--hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \
|
||||
--hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \
|
||||
--hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \
|
||||
--hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \
|
||||
--hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \
|
||||
--hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \
|
||||
--hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \
|
||||
--hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \
|
||||
--hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \
|
||||
--hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \
|
||||
--hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \
|
||||
--hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \
|
||||
--hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \
|
||||
--hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \
|
||||
--hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \
|
||||
--hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \
|
||||
--hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \
|
||||
--hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \
|
||||
--hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \
|
||||
--hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \
|
||||
--hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \
|
||||
--hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \
|
||||
--hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \
|
||||
--hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \
|
||||
--hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \
|
||||
--hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \
|
||||
--hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
# jinja2
|
||||
mccabe==0.6.1 \
|
||||
--hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \
|
||||
|
@ -658,7 +715,10 @@ parsimonious==0.8.1 \
|
|||
pathspec==0.9.0 \
|
||||
--hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \
|
||||
--hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1
|
||||
# via black
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# black
|
||||
# yamllint
|
||||
phonenumberslite==8.12.46 \
|
||||
--hash=sha256:752555fb0cb9e442054c93fd23ab2ac1b741aea30e6e990be560ef75cac55c21 \
|
||||
--hash=sha256:93aa86c9e9e4b15dda89c4b0e7b9a3b6b854e009441a941a29d3b0202fa575bd
|
||||
|
@ -782,6 +842,31 @@ pyquery==1.4.3 \
|
|||
--hash=sha256:1fc33b7699455ed25c75282bc8f80ace1ac078b0dda5a933dacbd8b1c1f83963 \
|
||||
--hash=sha256:a388eefb6bc4a55350de0316fbd97cda999ae669b6743ae5b99102ba54f5aa72
|
||||
# via -r requirements/dev.in
|
||||
pyrsistent==0.18.1 \
|
||||
--hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \
|
||||
--hash=sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc \
|
||||
--hash=sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e \
|
||||
--hash=sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26 \
|
||||
--hash=sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec \
|
||||
--hash=sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286 \
|
||||
--hash=sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045 \
|
||||
--hash=sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec \
|
||||
--hash=sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8 \
|
||||
--hash=sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c \
|
||||
--hash=sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca \
|
||||
--hash=sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22 \
|
||||
--hash=sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a \
|
||||
--hash=sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96 \
|
||||
--hash=sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc \
|
||||
--hash=sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1 \
|
||||
--hash=sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07 \
|
||||
--hash=sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6 \
|
||||
--hash=sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b \
|
||||
--hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \
|
||||
--hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# jsonschema
|
||||
pysocks==1.7.1 \
|
||||
--hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \
|
||||
--hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \
|
||||
|
@ -917,7 +1002,10 @@ pyyaml==6.0 \
|
|||
--hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \
|
||||
--hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \
|
||||
--hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5
|
||||
# via -r requirements/prod.txt
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
# yamllint
|
||||
qrcode==7.3.1 \
|
||||
--hash=sha256:375a6ff240ca9bd41adc070428b5dfc1dcfbb0f2507f1ac848f6cded38956578
|
||||
# via -r requirements/prod.txt
|
||||
|
@ -1164,6 +1252,11 @@ wsproto==1.1.0 \
|
|||
--hash=sha256:2218cb57952d90b9fca325c0dcfb08c3bda93e8fd8070b0a17f048e2e47a521b \
|
||||
--hash=sha256:a2e56bfd5c7cd83c1369d83b5feccd6d37798b74872866e62616e0ecf111bda8
|
||||
# via trio-websocket
|
||||
yamllint==1.26.3 \
|
||||
--hash=sha256:3934dcde484374596d6b52d8db412929a169f6d9e52e20f9ade5bf3523d9b96e
|
||||
# via
|
||||
# -r requirements/prod.txt
|
||||
# glean-parser
|
||||
zipp==3.7.0 \
|
||||
--hash=sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d \
|
||||
--hash=sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
chardet==4.0.0
|
||||
fluent.pygments==0.1.0
|
||||
fluent.syntax==0.17.0 # hard-pinned subdep to avoid compatibility issues
|
||||
markupsafe==2.0.1
|
||||
myst-parser==0.17.2
|
||||
Sphinx==4.5.0
|
||||
sphinx-autobuild==2021.3.14
|
||||
|
|
|
@ -76,48 +76,79 @@ markdown-it-py==2.0.1 \
|
|||
# via
|
||||
# mdit-py-plugins
|
||||
# myst-parser
|
||||
markupsafe==2.1.0 \
|
||||
--hash=sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3 \
|
||||
--hash=sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8 \
|
||||
--hash=sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759 \
|
||||
--hash=sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed \
|
||||
--hash=sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989 \
|
||||
--hash=sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3 \
|
||||
--hash=sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a \
|
||||
--hash=sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c \
|
||||
--hash=sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c \
|
||||
--hash=sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8 \
|
||||
--hash=sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454 \
|
||||
--hash=sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad \
|
||||
--hash=sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d \
|
||||
--hash=sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635 \
|
||||
--hash=sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61 \
|
||||
--hash=sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea \
|
||||
--hash=sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49 \
|
||||
--hash=sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce \
|
||||
--hash=sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e \
|
||||
--hash=sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f \
|
||||
--hash=sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f \
|
||||
--hash=sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f \
|
||||
--hash=sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7 \
|
||||
--hash=sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a \
|
||||
--hash=sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7 \
|
||||
--hash=sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076 \
|
||||
--hash=sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb \
|
||||
--hash=sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7 \
|
||||
--hash=sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7 \
|
||||
--hash=sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c \
|
||||
--hash=sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26 \
|
||||
--hash=sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c \
|
||||
--hash=sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8 \
|
||||
--hash=sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448 \
|
||||
--hash=sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956 \
|
||||
--hash=sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05 \
|
||||
--hash=sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1 \
|
||||
--hash=sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357 \
|
||||
--hash=sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea \
|
||||
--hash=sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730
|
||||
# via jinja2
|
||||
markupsafe==2.0.1 \
|
||||
--hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \
|
||||
--hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \
|
||||
--hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \
|
||||
--hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \
|
||||
--hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \
|
||||
--hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \
|
||||
--hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \
|
||||
--hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \
|
||||
--hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \
|
||||
--hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \
|
||||
--hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \
|
||||
--hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \
|
||||
--hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \
|
||||
--hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \
|
||||
--hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \
|
||||
--hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \
|
||||
--hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \
|
||||
--hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \
|
||||
--hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \
|
||||
--hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \
|
||||
--hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \
|
||||
--hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \
|
||||
--hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \
|
||||
--hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \
|
||||
--hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \
|
||||
--hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \
|
||||
--hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \
|
||||
--hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \
|
||||
--hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \
|
||||
--hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \
|
||||
--hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \
|
||||
--hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \
|
||||
--hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \
|
||||
--hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \
|
||||
--hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \
|
||||
--hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \
|
||||
--hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \
|
||||
--hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \
|
||||
--hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \
|
||||
--hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \
|
||||
--hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \
|
||||
--hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \
|
||||
--hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \
|
||||
--hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \
|
||||
--hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \
|
||||
--hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \
|
||||
--hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \
|
||||
--hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \
|
||||
--hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \
|
||||
--hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \
|
||||
--hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \
|
||||
--hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \
|
||||
--hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \
|
||||
--hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \
|
||||
--hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \
|
||||
--hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \
|
||||
--hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \
|
||||
--hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \
|
||||
--hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \
|
||||
--hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \
|
||||
--hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \
|
||||
--hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \
|
||||
--hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \
|
||||
--hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \
|
||||
--hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \
|
||||
--hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \
|
||||
--hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \
|
||||
--hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \
|
||||
--hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872
|
||||
# via
|
||||
# -r requirements/docs.in
|
||||
# jinja2
|
||||
mdit-py-plugins==0.3.0 \
|
||||
--hash=sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073 \
|
||||
--hash=sha256:ecc24f51eeec6ab7eecc2f9724e8272c2fb191c2e93cf98109120c2cace69750
|
||||
|
|
|
@ -26,6 +26,7 @@ envcat==0.1.1
|
|||
everett==3.0.0
|
||||
fluent.runtime==0.3
|
||||
fluent.syntax==0.17.0 # hard-pinned subdep to avoid compatibility issues
|
||||
glean-parser==5.1.0 # Must match the required version in the Glean NPM package.
|
||||
greenlet==0.4.17 # Pinned for stability but subdep of Meinheld
|
||||
gunicorn==19.7.1
|
||||
honcho==1.1.0
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
#
|
||||
# $ make compile-requirements
|
||||
#
|
||||
appdirs==1.4.4 \
|
||||
--hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \
|
||||
--hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
|
||||
# via glean-parser
|
||||
apscheduler==3.9.1 \
|
||||
--hash=sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3 \
|
||||
--hash=sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a
|
||||
|
@ -15,7 +19,9 @@ asgiref==3.5.0 \
|
|||
attrs==21.4.0 \
|
||||
--hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \
|
||||
--hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd
|
||||
# via fluent.runtime
|
||||
# via
|
||||
# fluent.runtime
|
||||
# jsonschema
|
||||
babel==2.9.1 \
|
||||
--hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \
|
||||
--hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0
|
||||
|
@ -114,6 +120,10 @@ charset-normalizer==2.0.12 \
|
|||
--hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \
|
||||
--hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df
|
||||
# via requests
|
||||
click==8.1.3 \
|
||||
--hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \
|
||||
--hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48
|
||||
# via glean-parser
|
||||
commonware==0.6.0 \
|
||||
--hash=sha256:0e9520986e292f2bf8cdf80b32f21ef01e4058fd7baa61d2d282d21ed7085b1f \
|
||||
--hash=sha256:f596962fd11bc53b5453ffa766dc99f297895021946096d3e6b4826f9ae075ea
|
||||
|
@ -154,6 +164,10 @@ deprecated==1.2.13 \
|
|||
dirsync==2.2.5 \
|
||||
--hash=sha256:1e3a4cd2b639a2eae5afc03c2b8a003fc43d56a0da5114db579386da9a14a8be
|
||||
# via -r requirements/prod.in
|
||||
diskcache==5.4.0 \
|
||||
--hash=sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644 \
|
||||
--hash=sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4
|
||||
# via glean-parser
|
||||
django==3.2.13 \
|
||||
--hash=sha256:6d93497a0a9bf6ba0e0b1a29cccdc40efbfc76297255b1309b3a884a688ec4b6 \
|
||||
--hash=sha256:b896ca61edc079eb6bbaa15cf6071eb69d6aac08cce5211583cfb41515644fdf
|
||||
|
@ -233,6 +247,10 @@ fluent-syntax==0.17.0 \
|
|||
# via
|
||||
# -r requirements/prod.in
|
||||
# fluent.runtime
|
||||
glean-parser==5.1.0 \
|
||||
--hash=sha256:68c22006e961190541e267ab896d0d52a848e3a3caa1ef8ae38447b7447abe1a \
|
||||
--hash=sha256:f2831b686b16e4b930f4e96e36c5d77b620135b8dea086fdbc38d53adfae1d1d
|
||||
# via -r requirements/prod.in
|
||||
greenlet==0.4.17 \
|
||||
--hash=sha256:1023d7b43ca11264ab7052cb09f5635d4afdb43df55e0854498fc63070a0b206 \
|
||||
--hash=sha256:124a3ae41215f71dc91d1a3d45cbf2f84e46b543e5d60b99ecc20e24b4c8f272 \
|
||||
|
@ -278,13 +296,19 @@ importlib-metadata==4.11.3 \
|
|||
jinja2==3.0.3 \
|
||||
--hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \
|
||||
--hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7
|
||||
# via django-jinja
|
||||
# via
|
||||
# django-jinja
|
||||
# glean-parser
|
||||
jmespath==0.10.0 \
|
||||
--hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \
|
||||
--hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f
|
||||
# via
|
||||
# boto3
|
||||
# botocore
|
||||
jsonschema==4.5.1 \
|
||||
--hash=sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f \
|
||||
--hash=sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc
|
||||
# via glean-parser
|
||||
lxml==4.8.0 \
|
||||
--hash=sha256:078306d19a33920004addeb5f4630781aaeabb6a8d01398045fcde085091a169 \
|
||||
--hash=sha256:0c1978ff1fd81ed9dcbba4f91cf09faf1f8082c9d72eb122e92294716c605428 \
|
||||
|
@ -355,48 +379,79 @@ markdown==3.3.6 \
|
|||
# -r requirements/prod.in
|
||||
# django-jinja-markdown
|
||||
# mdx-outline
|
||||
markupsafe==2.1.1 \
|
||||
--hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
|
||||
--hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \
|
||||
--hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \
|
||||
--hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \
|
||||
--hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \
|
||||
--hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \
|
||||
--hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \
|
||||
--hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \
|
||||
--hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \
|
||||
--hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \
|
||||
--hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \
|
||||
--hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \
|
||||
--hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \
|
||||
--hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \
|
||||
--hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \
|
||||
--hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \
|
||||
--hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \
|
||||
--hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \
|
||||
--hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \
|
||||
--hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \
|
||||
--hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \
|
||||
--hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \
|
||||
--hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \
|
||||
--hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \
|
||||
--hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \
|
||||
--hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \
|
||||
--hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \
|
||||
--hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \
|
||||
--hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \
|
||||
--hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \
|
||||
--hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \
|
||||
--hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \
|
||||
--hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \
|
||||
--hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \
|
||||
--hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \
|
||||
--hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \
|
||||
--hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \
|
||||
--hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \
|
||||
--hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \
|
||||
--hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7
|
||||
# via jinja2
|
||||
markupsafe==2.0.1 \
|
||||
--hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \
|
||||
--hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \
|
||||
--hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \
|
||||
--hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \
|
||||
--hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \
|
||||
--hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \
|
||||
--hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \
|
||||
--hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \
|
||||
--hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \
|
||||
--hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \
|
||||
--hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \
|
||||
--hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \
|
||||
--hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \
|
||||
--hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \
|
||||
--hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \
|
||||
--hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \
|
||||
--hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \
|
||||
--hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \
|
||||
--hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \
|
||||
--hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \
|
||||
--hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \
|
||||
--hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \
|
||||
--hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \
|
||||
--hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \
|
||||
--hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \
|
||||
--hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \
|
||||
--hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \
|
||||
--hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \
|
||||
--hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \
|
||||
--hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \
|
||||
--hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \
|
||||
--hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \
|
||||
--hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \
|
||||
--hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \
|
||||
--hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \
|
||||
--hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \
|
||||
--hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \
|
||||
--hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \
|
||||
--hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \
|
||||
--hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \
|
||||
--hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \
|
||||
--hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \
|
||||
--hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \
|
||||
--hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \
|
||||
--hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \
|
||||
--hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \
|
||||
--hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \
|
||||
--hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \
|
||||
--hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \
|
||||
--hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \
|
||||
--hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \
|
||||
--hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \
|
||||
--hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \
|
||||
--hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \
|
||||
--hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \
|
||||
--hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \
|
||||
--hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \
|
||||
--hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \
|
||||
--hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \
|
||||
--hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \
|
||||
--hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \
|
||||
--hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \
|
||||
--hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \
|
||||
--hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \
|
||||
--hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \
|
||||
--hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \
|
||||
--hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \
|
||||
--hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \
|
||||
--hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872
|
||||
# via
|
||||
# glean-parser
|
||||
# jinja2
|
||||
mdx_outline @ https://github.com/mozmeao/mdx_outline/archive/refs/tags/python-3.9-compat.tar.gz \
|
||||
--hash=sha256:c37385f222866684a0a92e3b38588003c6d8c3dbcf55aea854cf543baae425c5
|
||||
# via -r requirements/prod.in
|
||||
|
@ -428,6 +483,10 @@ oauthlib==3.2.0 \
|
|||
--hash=sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2 \
|
||||
--hash=sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe
|
||||
# via requests-oauthlib
|
||||
pathspec==0.9.0 \
|
||||
--hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \
|
||||
--hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1
|
||||
# via yamllint
|
||||
phonenumberslite==8.12.46 \
|
||||
--hash=sha256:752555fb0cb9e442054c93fd23ab2ac1b741aea30e6e990be560ef75cac55c21 \
|
||||
--hash=sha256:93aa86c9e9e4b15dda89c4b0e7b9a3b6b854e009441a941a29d3b0202fa575bd
|
||||
|
@ -502,6 +561,29 @@ pyopenssl==22.0.0 \
|
|||
--hash=sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf \
|
||||
--hash=sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0
|
||||
# via -r requirements/prod.in
|
||||
pyrsistent==0.18.1 \
|
||||
--hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \
|
||||
--hash=sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc \
|
||||
--hash=sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e \
|
||||
--hash=sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26 \
|
||||
--hash=sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec \
|
||||
--hash=sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286 \
|
||||
--hash=sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045 \
|
||||
--hash=sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec \
|
||||
--hash=sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8 \
|
||||
--hash=sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c \
|
||||
--hash=sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca \
|
||||
--hash=sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22 \
|
||||
--hash=sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a \
|
||||
--hash=sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96 \
|
||||
--hash=sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc \
|
||||
--hash=sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1 \
|
||||
--hash=sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07 \
|
||||
--hash=sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6 \
|
||||
--hash=sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b \
|
||||
--hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \
|
||||
--hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6
|
||||
# via jsonschema
|
||||
python-dateutil==2.8.2 \
|
||||
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
|
||||
--hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
|
||||
|
@ -559,7 +641,10 @@ pyyaml==6.0 \
|
|||
--hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \
|
||||
--hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \
|
||||
--hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5
|
||||
# via -r requirements/prod.in
|
||||
# via
|
||||
# -r requirements/prod.in
|
||||
# glean-parser
|
||||
# yamllint
|
||||
qrcode==7.3.1 \
|
||||
--hash=sha256:375a6ff240ca9bd41adc070428b5dfc1dcfbb0f2507f1ac848f6cded38956578
|
||||
# via -r requirements/prod.in
|
||||
|
@ -722,6 +807,9 @@ wrapt==1.14.0 \
|
|||
--hash=sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33 \
|
||||
--hash=sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653
|
||||
# via deprecated
|
||||
yamllint==1.26.3 \
|
||||
--hash=sha256:3934dcde484374596d6b52d8db412929a169f6d9e52e20f9ade5bf3523d9b96e
|
||||
# via glean-parser
|
||||
zipp==3.7.0 \
|
||||
--hash=sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d \
|
||||
--hash=sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375
|
||||
|
|
|
@ -65,6 +65,9 @@ module.exports = function (config) {
|
|||
'tests/unit/spec/firefox/all/all-downloads-unified.js',
|
||||
'tests/unit/spec/firefox/new/common/thanks.js',
|
||||
'tests/unit/spec/pocket/mobile-nav.js',
|
||||
'tests/unit/spec/glean/elements.js',
|
||||
'tests/unit/spec/glean/page.js',
|
||||
'tests/unit/spec/glean/utils.js',
|
||||
'tests/unit/spec/products/vpn/affiliate-attribution.js',
|
||||
{
|
||||
pattern: 'node_modules/sinon/pkg/sinon.js',
|
||||
|
@ -150,6 +153,11 @@ module.exports = function (config) {
|
|||
// If browser does not capture in given timeout [ms], kill it
|
||||
captureTimeout: 60000,
|
||||
|
||||
// Supress console logs triggered in code.
|
||||
client: {
|
||||
captureConsole: false
|
||||
},
|
||||
|
||||
// Continuous Integration mode
|
||||
// if true, it capture browsers, run tests and exit
|
||||
singleRun: true
|
||||
|
|
|
@ -0,0 +1,170 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
/* For reference read the Jasmine and Sinon docs
|
||||
* Jasmine docs: https://jasmine.github.io/
|
||||
* Sinon docs: http://sinonjs.org/docs/
|
||||
*/
|
||||
|
||||
import { testResetGlean } from '@mozilla/glean/testing';
|
||||
import {
|
||||
bindElementClicks,
|
||||
unbindElementClicks
|
||||
} from '../../../../media/js/glean/elements.es6';
|
||||
import * as element from '../../../../media/js/libs/glean/element.js';
|
||||
import { interaction as interactionPing } from '../../../../media/js/libs/glean/pings.js';
|
||||
|
||||
describe('elements.js', function () {
|
||||
beforeEach(async function () {
|
||||
await testResetGlean('moz-bedrock-test');
|
||||
bindElementClicks();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
unbindElementClicks();
|
||||
});
|
||||
|
||||
describe('Element Click (data-cta)', function () {
|
||||
beforeEach(async function () {
|
||||
const link =
|
||||
'<button type="button" class="mzp-c-button glean-test-element" data-cta-text="Subscribe" data-cta-type="button" data-cta-position="primary">Subscribe</button>';
|
||||
document.body.insertAdjacentHTML('beforeend', link);
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
document
|
||||
.querySelectorAll('.glean-test-element')
|
||||
.forEach(function (e) {
|
||||
e.parentNode.removeChild(e);
|
||||
});
|
||||
});
|
||||
|
||||
it('should send an interaction ping when element is clicked containing data-cta attributes', async function () {
|
||||
const ping = interactionPing.testBeforeNextSubmit(
|
||||
async function () {
|
||||
const snapshot = await element.clicked.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const click = snapshot[0];
|
||||
expect(click.extra.label).toEqual('Subscribe');
|
||||
expect(click.extra.type).toEqual('button');
|
||||
expect(click.extra.position).toEqual('primary');
|
||||
}
|
||||
);
|
||||
|
||||
document.querySelector('.glean-test-element').click();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Element Click (data-link)', function () {
|
||||
beforeEach(async function () {
|
||||
const link =
|
||||
'<button type="button" class="mzp-c-button glean-test-element" data-link-name="Submit" data-link-type="button" data-link-position="primary">Submit</button>';
|
||||
document.body.insertAdjacentHTML('beforeend', link);
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
document
|
||||
.querySelectorAll('.glean-test-element')
|
||||
.forEach(function (e) {
|
||||
e.parentNode.removeChild(e);
|
||||
});
|
||||
});
|
||||
|
||||
it('should send an interaction ping when element is clicked containing data-link attributes', async function () {
|
||||
const ping = interactionPing.testBeforeNextSubmit(
|
||||
async function () {
|
||||
const snapshot = await element.clicked.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const click = snapshot[0];
|
||||
expect(click.extra.label).toEqual('Submit');
|
||||
expect(click.extra.type).toEqual('button');
|
||||
expect(click.extra.position).toEqual('primary');
|
||||
}
|
||||
);
|
||||
|
||||
document.querySelector('.glean-test-element').click();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Firefox Download Click', function () {
|
||||
beforeEach(async function () {
|
||||
const link =
|
||||
'<button type="button" class="mzp-c-button glean-test-element" data-link-type="download" data-download-os="Desktop" data-display-name="macOS" data-download-version="osx" data-download-location="primary">Submit</button>';
|
||||
document.body.insertAdjacentHTML('beforeend', link);
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
document
|
||||
.querySelectorAll('.glean-test-element')
|
||||
.forEach(function (e) {
|
||||
e.parentNode.removeChild(e);
|
||||
});
|
||||
});
|
||||
|
||||
it('should send an interaction ping when element is clicked containing data-link attributes', async function () {
|
||||
const ping = interactionPing.testBeforeNextSubmit(
|
||||
async function () {
|
||||
const snapshot = await element.clicked.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const click = snapshot[0];
|
||||
expect(click.extra.label).toEqual(
|
||||
'Firefox Download Desktop'
|
||||
);
|
||||
expect(click.extra.type).toEqual('macOS');
|
||||
expect(click.extra.position).toEqual('primary');
|
||||
}
|
||||
);
|
||||
|
||||
document.querySelector('.glean-test-element').click();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Nested element click (data-cta)', function () {
|
||||
beforeEach(async function () {
|
||||
const link = `<button type="button" class="mzp-c-button glean-test-element" data-cta-text="Subscribe" data-cta-type="button" data-cta-position="primary">
|
||||
<span class="child-element">Subscribe</span>
|
||||
</button>`;
|
||||
document.body.insertAdjacentHTML('beforeend', link);
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
document
|
||||
.querySelectorAll('.glean-test-element')
|
||||
.forEach(function (e) {
|
||||
e.parentNode.removeChild(e);
|
||||
});
|
||||
});
|
||||
|
||||
it('should send an interaction ping for a parent element when element a child element is clicked', async function () {
|
||||
const ping = interactionPing.testBeforeNextSubmit(
|
||||
async function () {
|
||||
const snapshot = await element.clicked.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const click = snapshot[0];
|
||||
expect(click.extra.label).toEqual('Subscribe');
|
||||
expect(click.extra.type).toEqual('button');
|
||||
expect(click.extra.position).toEqual('primary');
|
||||
}
|
||||
);
|
||||
|
||||
document
|
||||
.querySelector('.glean-test-element > .child-element')
|
||||
.click();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,227 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
/* For reference read the Jasmine and Sinon docs
|
||||
* Jasmine docs: https://jasmine.github.io/
|
||||
* Sinon docs: http://sinonjs.org/docs/
|
||||
*/
|
||||
|
||||
import * as page from '../../../../media/js/libs/glean/page.js';
|
||||
import Utils from '../../../../media/js/glean/utils.es6';
|
||||
import {
|
||||
initPageView,
|
||||
pageEventPing
|
||||
} from '../../../../media/js/glean/page.es6';
|
||||
import {
|
||||
pageView as pageViewPing,
|
||||
interaction as interactionPing,
|
||||
nonInteraction as nonInteractionPing
|
||||
} from '../../../../media/js/libs/glean/pings.js';
|
||||
import { testResetGlean } from '@mozilla/glean/testing';
|
||||
|
||||
describe('page.js', function () {
|
||||
beforeEach(async function () {
|
||||
await testResetGlean('moz-bedrock-test');
|
||||
spyOn(Utils, 'getPathFromUrl').and.returnValue('/firefox/new/');
|
||||
spyOn(Utils, 'getLocaleFromUrl').and.returnValue('en-US');
|
||||
spyOn(Utils, 'getReferrer').and.returnValue('https://google.com/');
|
||||
});
|
||||
|
||||
it('should register a page view correctly', async function () {
|
||||
const ping = pageViewPing.testBeforeNextSubmit(async function () {
|
||||
const path = await page.path.testGetValue();
|
||||
expect(path).toEqual('/firefox/new/');
|
||||
|
||||
const locale = await page.locale.testGetValue();
|
||||
expect(locale).toEqual('en-US');
|
||||
|
||||
const referrer = await page.referrer.testGetValue();
|
||||
expect(referrer).toEqual('https://google.com/');
|
||||
});
|
||||
|
||||
initPageView();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should record specific query parameters in the page view', async function () {
|
||||
const query =
|
||||
'utm_source=test-source&utm_campaign=test-campaign&utm_medium=test-medium&utm_content=test-content&entrypoint_experiment=test_entrypoint_experiment&entrypoint_variation=1&experiment=test-experiment&variation=1&v=1&xv=test-xv';
|
||||
spyOn(Utils, 'getQueryParamsFromURL').and.returnValue(
|
||||
new window._SearchParams(query)
|
||||
);
|
||||
|
||||
const ping = pageViewPing.testBeforeNextSubmit(async function () {
|
||||
const source = await page.queryParams['utm_source'].testGetValue();
|
||||
expect(source).toEqual('test-source');
|
||||
|
||||
const campaign = await page.queryParams[
|
||||
'utm_campaign'
|
||||
].testGetValue();
|
||||
expect(campaign).toEqual('test-campaign');
|
||||
|
||||
const medium = await page.queryParams['utm_medium'].testGetValue();
|
||||
expect(medium).toEqual('test-medium');
|
||||
|
||||
const content = await page.queryParams[
|
||||
'utm_content'
|
||||
].testGetValue();
|
||||
expect(content).toEqual('test-content');
|
||||
|
||||
const entrypointExperiment = await page.queryParams[
|
||||
'entrypoint_experiment'
|
||||
].testGetValue();
|
||||
expect(entrypointExperiment).toEqual('test_entrypoint_experiment');
|
||||
|
||||
const entrypointVariation = await page.queryParams[
|
||||
'entrypoint_variation'
|
||||
].testGetValue();
|
||||
expect(entrypointVariation).toEqual('1');
|
||||
|
||||
const experiment = await page.queryParams[
|
||||
'experiment'
|
||||
].testGetValue();
|
||||
expect(experiment).toEqual('test-experiment');
|
||||
|
||||
const variation = await page.queryParams[
|
||||
'variation'
|
||||
].testGetValue();
|
||||
expect(variation).toEqual('1');
|
||||
|
||||
const v = await page.queryParams['v'].testGetValue();
|
||||
expect(v).toEqual('1');
|
||||
|
||||
const xv = await page.queryParams['xv'].testGetValue();
|
||||
expect(xv).toEqual('test-xv');
|
||||
});
|
||||
|
||||
initPageView();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should not record unspecified query params in the page view', async function () {
|
||||
const query =
|
||||
'unspecified_param=test-unspecified-param&utm_content=test-content';
|
||||
spyOn(Utils, 'getQueryParamsFromURL').and.returnValue(
|
||||
new window._SearchParams(query)
|
||||
);
|
||||
|
||||
const ping = pageViewPing.testBeforeNextSubmit(async function () {
|
||||
const unspecifiedParam = await page.queryParams[
|
||||
'unspecified_param'
|
||||
].testGetValue();
|
||||
expect(unspecifiedParam).toBeUndefined();
|
||||
|
||||
const content = await page.queryParams[
|
||||
'utm_content'
|
||||
].testGetValue();
|
||||
expect(content).toEqual('test-content');
|
||||
});
|
||||
|
||||
initPageView();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should decode known params', async function () {
|
||||
const query = 'utm_source=%25&utm_campaign=%2F';
|
||||
spyOn(Utils, 'getQueryParamsFromURL').and.returnValue(
|
||||
new window._SearchParams(query)
|
||||
);
|
||||
|
||||
const ping = pageViewPing.testBeforeNextSubmit(async function () {
|
||||
const source = await page.queryParams['utm_source'].testGetValue();
|
||||
expect(source).toEqual('%');
|
||||
|
||||
const campaign = await page.queryParams[
|
||||
'utm_campaign'
|
||||
].testGetValue();
|
||||
expect(campaign).toEqual('/');
|
||||
});
|
||||
|
||||
initPageView();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should not record known params that contain bad values', async function () {
|
||||
const query =
|
||||
'utm_source=<script>yikes</script>&utm_campaign=%5Ctest&utm_medium=%3Ctest&utm_content=test-content&experiment';
|
||||
spyOn(Utils, 'getQueryParamsFromURL').and.returnValue(
|
||||
new window._SearchParams(query)
|
||||
);
|
||||
|
||||
const ping = pageViewPing.testBeforeNextSubmit(async function () {
|
||||
const source = await page.queryParams['utm_source'].testGetValue();
|
||||
expect(source).toBeUndefined();
|
||||
|
||||
const campaign = await page.queryParams[
|
||||
'utm_campaign'
|
||||
].testGetValue();
|
||||
expect(campaign).toBeUndefined();
|
||||
|
||||
const medium = await page.queryParams['utm_medium'].testGetValue();
|
||||
expect(medium).toBeUndefined();
|
||||
|
||||
const content = await page.queryParams[
|
||||
'utm_content'
|
||||
].testGetValue();
|
||||
expect(content).toEqual('test-content');
|
||||
|
||||
const experiment = await page.queryParams[
|
||||
'experiment'
|
||||
].testGetValue();
|
||||
expect(experiment).toBeUndefined();
|
||||
});
|
||||
|
||||
initPageView();
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should send a page event (interaction)', async function () {
|
||||
const ping = interactionPing.testBeforeNextSubmit(async function () {
|
||||
const snapshot = await page.pageEvent.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const event = snapshot[0];
|
||||
expect(event.extra.label).toEqual('Newsletter: mozilla-and-you');
|
||||
expect(event.extra.type).toEqual('Newsletter Signup Success');
|
||||
});
|
||||
|
||||
pageEventPing({
|
||||
label: 'Newsletter: mozilla-and-you',
|
||||
type: 'Newsletter Signup Success'
|
||||
});
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
|
||||
it('should send a page event (non-interaction)', async function () {
|
||||
const ping = nonInteractionPing.testBeforeNextSubmit(async function () {
|
||||
const snapshot = await page.pageEvent.testGetValue();
|
||||
expect(snapshot.length).toEqual(1);
|
||||
const event = snapshot[0];
|
||||
expect(event.extra.label).toEqual('Auto Play');
|
||||
expect(event.extra.type).toEqual('Video');
|
||||
});
|
||||
|
||||
pageEventPing({
|
||||
label: 'Auto Play',
|
||||
type: 'Video',
|
||||
nonInteraction: true
|
||||
});
|
||||
|
||||
// Wait for the validation to finish.
|
||||
await expectAsync(ping).toBeResolved();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
/* For reference read the Jasmine and Sinon docs
|
||||
* Jasmine docs: https://jasmine.github.io/
|
||||
* Sinon docs: http://sinonjs.org/docs/
|
||||
*/
|
||||
|
||||
import Utils from '../../../../media/js/glean/utils.es6';
|
||||
|
||||
describe('utilsjs', function () {
|
||||
describe('getPathFromUrl', function () {
|
||||
it('should return the path from a page URL excluding locale', function () {
|
||||
expect(Utils.getPathFromUrl('/en-US/firefox/new/')).toEqual(
|
||||
'/firefox/new/'
|
||||
);
|
||||
expect(Utils.getPathFromUrl('/de/firefox/new/')).toEqual(
|
||||
'/firefox/new/'
|
||||
);
|
||||
expect(Utils.getPathFromUrl('/kab/firefox/new/')).toEqual(
|
||||
'/firefox/new/'
|
||||
);
|
||||
expect(Utils.getPathFromUrl('/fr/')).toEqual('/');
|
||||
});
|
||||
|
||||
it('should return original path when there is no locale', function () {
|
||||
expect(Utils.getPathFromUrl('/locales/')).toEqual('/locales/');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getLocaleFromUrl', function () {
|
||||
it('should return the locale from a page URL excluding path', function () {
|
||||
expect(Utils.getLocaleFromUrl('/en-US/firefox/new/')).toEqual(
|
||||
'en-US'
|
||||
);
|
||||
expect(Utils.getLocaleFromUrl('/de/firefox/new/')).toEqual('de');
|
||||
expect(Utils.getLocaleFromUrl('/kab/firefox/new/')).toEqual('kab');
|
||||
expect(Utils.getLocaleFromUrl('/fr/')).toEqual('fr');
|
||||
});
|
||||
|
||||
it('should return `en-US` for language when there is no locale', function () {
|
||||
expect(Utils.getLocaleFromUrl('/locales/')).toEqual('en-US');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getQueryParamsFromURL', function () {
|
||||
it('should return an object made up of params from a query string', function () {
|
||||
const query =
|
||||
'utm_source=test-source&utm_campaign=test-campaign&utm_medium=test-medium&utm_content=test-content&entrypoint_experiment=test_entrypoint_experiment&entrypoint_variation=1&experiment=test-experiment&variation=1&v=1&xv=test-xv';
|
||||
|
||||
expect(Utils.getQueryParamsFromURL(query).params).toEqual({
|
||||
utm_source: 'test-source',
|
||||
utm_campaign: 'test-campaign',
|
||||
utm_medium: 'test-medium',
|
||||
utm_content: 'test-content',
|
||||
entrypoint_experiment: 'test_entrypoint_experiment',
|
||||
entrypoint_variation: 1,
|
||||
experiment: 'test-experiment',
|
||||
variation: 1,
|
||||
v: 1,
|
||||
xv: 'test-xv'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('isTelemetryEnabled', function () {
|
||||
it('should return true if opt out cookie does not exist', function () {
|
||||
spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(false);
|
||||
const result = Utils.isTelemetryEnabled();
|
||||
expect(Mozilla.Cookies.hasItem).toHaveBeenCalledWith(
|
||||
'moz-1st-party-data-opt-out'
|
||||
);
|
||||
expect(result).toBeTrue();
|
||||
});
|
||||
|
||||
it('should return false if opt out cookie exists', function () {
|
||||
spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(true);
|
||||
const result = Utils.isTelemetryEnabled();
|
||||
expect(Mozilla.Cookies.hasItem).toHaveBeenCalledWith(
|
||||
'moz-1st-party-data-opt-out'
|
||||
);
|
||||
expect(result).toBeFalse();
|
||||
});
|
||||
});
|
||||
});
|
|
@ -9,6 +9,7 @@
|
|||
const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
|
||||
const CopyPlugin = require('copy-webpack-plugin');
|
||||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
||||
const Dotenv = require('dotenv-webpack');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const path = require('path');
|
||||
const staticBundles = require('./media/static-bundles.json');
|
||||
|
@ -97,7 +98,8 @@ const jsConfig = {
|
|||
to: 'js/careers/libs/'
|
||||
}
|
||||
]
|
||||
})
|
||||
}),
|
||||
new Dotenv()
|
||||
]
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче