diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100755
index 36af219..0000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx lint-staged
diff --git a/charts/planka/Chart.yaml b/charts/planka/Chart.yaml
index 5a6debe..45196fc 100644
--- a/charts/planka/Chart.yaml
+++ b/charts/planka/Chart.yaml
@@ -1,31 +1,31 @@
-apiVersion: v2
-name: planka
-description: A Helm chart to deploy Planka and it's dependencies.
-
-# A chart can be either an 'application' or a 'library' chart.
-#
-# Application charts are a collection of templates that can be packaged into versioned archives
-# to be deployed.
-#
-# Library charts provide useful utilities or functions for the chart developer. They're included as
-# a dependency of application charts to inject those utilities and functions into the rendering
-# pipeline. Library charts do not define any templates and therefore cannot be deployed.
-type: application
-
-# This is the chart version. This version number should be incremented each time you make changes
-# to the chart and its templates, including the app version.
-# Versions are expected to follow Semantic Versioning (https://semver.org/)
-version: 0.1.23
-
-# This is the version number of the application being deployed. This version number should be
-# incremented each time you make changes to the application. Versions are not expected to
-# follow Semantic Versioning. They should reflect the version the application is using.
-# It is recommended to use it with quotes.
-appVersion: "1.16.2"
-
-dependencies:
- - alias: postgresql
- condition: postgresql.enabled
- name: postgresql
- repository: &bitnami-repo https://charts.bitnami.com/bitnami
- version: 12.5.1
+apiVersion: v2
+name: planka
+description: A Helm chart to deploy Planka and it's dependencies.
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.23
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.2"
+
+dependencies:
+ - alias: postgresql
+ condition: postgresql.enabled
+ name: postgresql
+ repository: &bitnami-repo https://charts.bitnami.com/bitnami
+ version: 12.5.1
diff --git a/charts/planka/templates/deployment.yaml b/charts/planka/templates/deployment.yaml
index 2d0d35b..b23e5fc 100644
--- a/charts/planka/templates/deployment.yaml
+++ b/charts/planka/templates/deployment.yaml
@@ -1,141 +1,141 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ include "planka.fullname" . }}
- labels:
- {{- include "planka.labels" . | nindent 4 }}
-spec:
- {{- if not .Values.autoscaling.enabled }}
- replicas: {{ .Values.replicaCount }}
- {{- end }}
- selector:
- matchLabels:
- {{- include "planka.selectorLabels" . | nindent 6 }}
- template:
- metadata:
- {{- with .Values.podAnnotations }}
- annotations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- labels:
- {{- include "planka.selectorLabels" . | nindent 8 }}
- spec:
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- serviceAccountName: {{ include "planka.serviceAccountName" . }}
- securityContext:
- {{- toYaml .Values.podSecurityContext | nindent 8 }}
- containers:
- - name: {{ .Chart.Name }}
- securityContext:
- {{- toYaml .Values.securityContext | nindent 12 }}
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
- imagePullPolicy: {{ .Values.image.pullPolicy }}
- ports:
- - name: http
- containerPort: {{ .Values.service.containerPort | default 1337 }}
- protocol: TCP
- livenessProbe:
- httpGet:
- path: /
- port: http
- readinessProbe:
- httpGet:
- path: /
- port: http
- volumeMounts:
- - mountPath: /app/public/user-avatars
- subPath: user-avatars
- name: planka
- - mountPath: /app/public/project-background-images
- subPath: project-background-images
- name: planka
- - mountPath: /app/private/attachments
- subPath: attachments
- name: planka
- resources:
- {{- toYaml .Values.resources | nindent 12 }}
- env:
- {{- if not .Values.postgresql.enabled }}
- - name: DATABASE_URL
- value: {{ required "If the included postgresql deployment is disabled you need to define a Database URL in 'dburl'" .Values.dburl }}
- {{- else }}
- - name: DATABASE_URL
- valueFrom:
- secretKeyRef:
- name: planka-postgresql-svcbind-custom-user
- key: uri
- {{- end }}
- - name: BASE_URL
- {{- if .Values.baseUrl }}
- value: {{ .Values.baseUrl }}
- {{- else if .Values.ingress.enabled }}
- value: {{ printf "https://%s" (first .Values.ingress.hosts).host }}
- {{- else }}
- value: http://localhost:3000
- {{- end }}
- - name: SECRET_KEY
- value: {{ required "A secret key needs to be generated using 'openssl rand -hex 64' and assigned to secretkey." .Values.secretkey }}
- - name: TRUST_PROXY
- value: "0"
- - name: DEFAULT_ADMIN_EMAIL
- value: {{ .Values.admin_email }}
- - name: DEFAULT_ADMIN_PASSWORD
- value: {{ .Values.admin_password }}
- - name: DEFAULT_ADMIN_NAME
- value: {{ .Values.admin_name }}
- - name: DEFAULT_ADMIN_USERNAME
- value: {{ .Values.admin_username }}
- {{ range $k, $v := .Values.env }}
- - name: {{ $k | quote }}
- value: {{ $v | quote }}
- {{- end }}
- {{- if .Values.oidc.enabled }}
- {{- $secretName := default (printf "%s-oidc" (include "planka.fullname" .)) .Values.oidc.existingSecret }}
- - name: OIDC_CLIENT_ID
- valueFrom:
- secretKeyRef:
- key: clientId
- name: {{ $secretName }}
- - name: OIDC_CLIENT_SECRET
- valueFrom:
- secretKeyRef:
- key: clientSecret
- name: {{ $secretName }}
- - name: OIDC_ISSUER
- value: {{ required "issuerUrl is required when configuring OIDC" .Values.oidc.issuerUrl | quote }}
- - name: OIDC_SCOPES
- value: {{ join " " .Values.oidc.scopes | default "openid profile email" | quote }}
- {{- if .Values.oidc.admin.roles }}
- - name: OIDC_ADMIN_ROLES
- value: {{ join "," .Values.oidc.admin.roles | quote }}
- {{- end }}
- - name: OIDC_ROLES_ATTRIBUTE
- value: {{ .Values.oidc.admin.rolesAttribute | default "groups" | quote }}
- {{- if .Values.oidc.admin.ignoreRoles }}
- - name: OIDC_IGNORE_ROLES
- value: {{ .Values.oidc.admin.ignoreRoles | quote }}
- {{- end }}
- {{- end }}
- {{- with .Values.nodeSelector }}
- nodeSelector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.affinity }}
- affinity:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.tolerations }}
- tolerations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - name: planka
- {{- if .Values.persistence.enabled }}
- persistentVolumeClaim:
- claimName: {{ .Values.persistence.existingClaim | default (include "planka.fullname" .) }}
- {{- else }}
- emptyDir: {}
- {{- end }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "planka.fullname" . }}
+ labels:
+ {{- include "planka.labels" . | nindent 4 }}
+spec:
+ {{- if not .Values.autoscaling.enabled }}
+ replicas: {{ .Values.replicaCount }}
+ {{- end }}
+ selector:
+ matchLabels:
+ {{- include "planka.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- with .Values.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "planka.selectorLabels" . | nindent 8 }}
+ spec:
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ serviceAccountName: {{ include "planka.serviceAccountName" . }}
+ securityContext:
+ {{- toYaml .Values.podSecurityContext | nindent 8 }}
+ containers:
+ - name: {{ .Chart.Name }}
+ securityContext:
+ {{- toYaml .Values.securityContext | nindent 12 }}
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ ports:
+ - name: http
+ containerPort: {{ .Values.service.containerPort | default 1337 }}
+ protocol: TCP
+ livenessProbe:
+ httpGet:
+ path: /
+ port: http
+ readinessProbe:
+ httpGet:
+ path: /
+ port: http
+ volumeMounts:
+ - mountPath: /app/public/user-avatars
+ subPath: user-avatars
+ name: planka
+ - mountPath: /app/public/project-background-images
+ subPath: project-background-images
+ name: planka
+ - mountPath: /app/private/attachments
+ subPath: attachments
+ name: planka
+ resources:
+ {{- toYaml .Values.resources | nindent 12 }}
+ env:
+ {{- if not .Values.postgresql.enabled }}
+ - name: DATABASE_URL
+ value: {{ required "If the included postgresql deployment is disabled you need to define a Database URL in 'dburl'" .Values.dburl }}
+ {{- else }}
+ - name: DATABASE_URL
+ valueFrom:
+ secretKeyRef:
+ name: planka-postgresql-svcbind-custom-user
+ key: uri
+ {{- end }}
+ - name: BASE_URL
+ {{- if .Values.baseUrl }}
+ value: {{ .Values.baseUrl }}
+ {{- else if .Values.ingress.enabled }}
+ value: {{ printf "https://%s" (first .Values.ingress.hosts).host }}
+ {{- else }}
+ value: http://localhost:3000
+ {{- end }}
+ - name: SECRET_KEY
+ value: {{ required "A secret key needs to be generated using 'openssl rand -hex 64' and assigned to secretkey." .Values.secretkey }}
+ - name: TRUST_PROXY
+ value: "0"
+ - name: DEFAULT_ADMIN_EMAIL
+ value: {{ .Values.admin_email }}
+ - name: DEFAULT_ADMIN_PASSWORD
+ value: {{ .Values.admin_password }}
+ - name: DEFAULT_ADMIN_NAME
+ value: {{ .Values.admin_name }}
+ - name: DEFAULT_ADMIN_USERNAME
+ value: {{ .Values.admin_username }}
+ {{ range $k, $v := .Values.env }}
+ - name: {{ $k | quote }}
+ value: {{ $v | quote }}
+ {{- end }}
+ {{- if .Values.oidc.enabled }}
+ {{- $secretName := default (printf "%s-oidc" (include "planka.fullname" .)) .Values.oidc.existingSecret }}
+ - name: OIDC_CLIENT_ID
+ valueFrom:
+ secretKeyRef:
+ key: clientId
+ name: {{ $secretName }}
+ - name: OIDC_CLIENT_SECRET
+ valueFrom:
+ secretKeyRef:
+ key: clientSecret
+ name: {{ $secretName }}
+ - name: OIDC_ISSUER
+ value: {{ required "issuerUrl is required when configuring OIDC" .Values.oidc.issuerUrl | quote }}
+ - name: OIDC_SCOPES
+ value: {{ join " " .Values.oidc.scopes | default "openid profile email" | quote }}
+ {{- if .Values.oidc.admin.roles }}
+ - name: OIDC_ADMIN_ROLES
+ value: {{ join "," .Values.oidc.admin.roles | quote }}
+ {{- end }}
+ - name: OIDC_ROLES_ATTRIBUTE
+ value: {{ .Values.oidc.admin.rolesAttribute | default "groups" | quote }}
+ {{- if .Values.oidc.admin.ignoreRoles }}
+ - name: OIDC_IGNORE_ROLES
+ value: {{ .Values.oidc.admin.ignoreRoles | quote }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ volumes:
+ - name: planka
+ {{- if .Values.persistence.enabled }}
+ persistentVolumeClaim:
+ claimName: {{ .Values.persistence.existingClaim | default (include "planka.fullname" .) }}
+ {{- else }}
+ emptyDir: {}
+ {{- end }}
diff --git a/charts/planka/values.yaml b/charts/planka/values.yaml
index 8adf94f..02cbfdd 100644
--- a/charts/planka/values.yaml
+++ b/charts/planka/values.yaml
@@ -1,182 +1,182 @@
-# Default values for planka.
-# This is a YAML-formatted file.
-# Declare variables to be passed into your templates.
-
-replicaCount: 1
-
-image:
- repository: ghcr.io/plankanban/planka
- pullPolicy: IfNotPresent
- # Overrides the image tag whose default is the chart appVersion.
- tag: ""
-
-imagePullSecrets: []
-nameOverride: ""
-fullnameOverride: ""
-
-# Generate a secret using openssl rand -base64 45
-secretkey: ""
-
-# Base url for Planka. Will override `ingress.hosts[0].host`
-# Defaults to `http://localhost:3000` if ingress is disabled.
-baseUrl: ""
-
-serviceAccount:
- # Specifies whether a service account should be created
- create: true
- # Annotations to add to the service account
- annotations: {}
- # The name of the service account to use.
- # If not set and create is true, a name is generated using the fullname template
- name: ""
-
-podAnnotations: {}
-
-podSecurityContext: {}
- # fsGroup: 2000
-
-securityContext: {}
- # capabilities:
- # drop:
- # - ALL
- # readOnlyRootFilesystem: true
- # runAsNonRoot: true
- # runAsUser: 1000
-
-service:
- type: ClusterIP
- port: 1337
- ## @param service.containerPort Planka HTTP container port
- ## If empty will default to 1337
- ##
- containerPort: 1337
-
-ingress:
- enabled: false
- className: ""
- annotations: {}
- # kubernetes.io/ingress.class: nginx
- # kubernetes.io/tls-acme: "true"
- hosts:
- # Used to set planka BASE_URL if no `baseurl` is provided.
- - host: planka.local
- paths:
- - path: /
- pathType: ImplementationSpecific
- tls: []
- # - secretName: planka-tls
- # hosts:
- # - planka.local
-
-resources: {}
- # We usually recommend not to specify default resources and to leave this as a conscious
- # choice for the user. This also increases chances charts run on environments with little
- # resources, such as Minikube. If you do want to specify resources, uncomment the following
- # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
- # limits:
- # cpu: 100m
- # memory: 128Mi
- # requests:
- # cpu: 100m
- # memory: 128Mi
-
-autoscaling:
- enabled: false
- minReplicas: 1
- maxReplicas: 100
- targetCPUUtilizationPercentage: 80
- # targetMemoryUtilizationPercentage: 80
-
-nodeSelector: {}
-
-tolerations: []
-
-affinity: {}
-
-postgresql:
- enabled: true
- auth:
- database: planka
- username: planka
- password: ""
- postgresPassword: ""
- replicationPassword: ""
- # existingSecret: planka-postgresql
- serviceBindings:
- enabled: true
-
-## Set this if you disable the built-in postgresql deployment
-dburl:
-
-## PVC-based data storage configuration
-persistence:
- enabled: false
- # existingClaim: netbox-data
- # storageClass: "-"
- accessMode: ReadWriteOnce
- size: 10Gi
-
-## OpenID Identity Management configuration
-##
-## Example:
-## ---------------
-## oidc:
-## enabled: true
-## clientId: sxxaAIAxVXlCxTmc1YLHBbQr8NL8MqLI2DUbt42d
-## clientSecret: om4RTMRVHRszU7bqxB7RZNkHIzA8e4sGYWxeCwIMYQXPwEBWe4SY5a0wwCe9ltB3zrq5f0dnFnp34cEHD7QSMHsKvV9AiV5Z7eqDraMnv0I8IFivmuV5wovAECAYreSI
-## issuerUrl: https://auth.local/application/o/planka/
-## admin:
-## roles:
-## - planka-admin
-##
-## ---------------
-## NOTE: A minimal configuration requires setting `clientId`, `clientSecret` and `issuerUrl`. (plus `admin.roles` for administrators)
-## ref: https://docs.planka.cloud/docs/Configuration/OIDC
-##
-oidc:
- ## @param oidc.enabled Enable single sign-on (SSO) with OpenID Connect (OIDC)
- ##
- enabled: false
-
- ## OIDC credentials
- ## @param oidc.clientId A string unique to the provider that identifies your app.
- ## @param oidc.clientSecret A secret string that the provider uses to confirm ownership of a client ID.
- ##
- ## NOTE: Either specify inline `clientId` and `clientSecret` or refer to them via `existingSecret`
- ##
- clientId: ""
- clientSecret: ""
-
- ## @param oidc.existingSecret Name of an existing secret containing OIDC credentials
- ## NOTE: Must contain key `clientId` and `clientSecret`
- ## NOTE: When it's set, the `clientId` and `clientSecret` parameters are ignored
- ##
- existingSecret: ""
-
- ## @param oidc.issuerUrl The OpenID connect metadata document endpoint
- ##
- issuerUrl: ""
-
- ## @param oidc.scopes A list of scopes required for OIDC client.
- ## If empty will default to `openid`, `profile` and `email`
- ## NOTE: Planka needs the email and name claims
- ##
- scopes: []
-
- ## Admin permissions configuration
- admin:
- ## @param oidc.admin.ignoreRoles If set to true, the admin roles will be ignored.
- ## It is useful if you want to use OIDC for authentication but not for authorization.
- ## If empty will default to `false`
- ##
- ignoreRoles: false
-
- ## @param oidc.admin.rolesAttribute The name of a custom group claim that you have configured in your OIDC provider
- ## If empty will default to `groups`
- ##
- rolesAttribute: groups
-
- ## @param oidc.admin.roles The names of the admin groups
- ##
- roles: []
- # - planka-admin
+# Default values for planka.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+replicaCount: 1
+
+image:
+ repository: ghcr.io/plankanban/planka
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: ""
+
+imagePullSecrets: []
+nameOverride: ""
+fullnameOverride: ""
+
+# Generate a secret using openssl rand -base64 45
+secretkey: ""
+
+# Base url for Planka. Will override `ingress.hosts[0].host`
+# Defaults to `http://localhost:3000` if ingress is disabled.
+baseUrl: ""
+
+serviceAccount:
+ # Specifies whether a service account should be created
+ create: true
+ # Annotations to add to the service account
+ annotations: {}
+ # The name of the service account to use.
+ # If not set and create is true, a name is generated using the fullname template
+ name: ""
+
+podAnnotations: {}
+
+podSecurityContext: {}
+ # fsGroup: 2000
+
+securityContext: {}
+ # capabilities:
+ # drop:
+ # - ALL
+ # readOnlyRootFilesystem: true
+ # runAsNonRoot: true
+ # runAsUser: 1000
+
+service:
+ type: ClusterIP
+ port: 1337
+ ## @param service.containerPort Planka HTTP container port
+ ## If empty will default to 1337
+ ##
+ containerPort: 1337
+
+ingress:
+ enabled: false
+ className: ""
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ hosts:
+ # Used to set planka BASE_URL if no `baseurl` is provided.
+ - host: planka.local
+ paths:
+ - path: /
+ pathType: ImplementationSpecific
+ tls: []
+ # - secretName: planka-tls
+ # hosts:
+ # - planka.local
+
+resources: {}
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+
+autoscaling:
+ enabled: false
+ minReplicas: 1
+ maxReplicas: 100
+ targetCPUUtilizationPercentage: 80
+ # targetMemoryUtilizationPercentage: 80
+
+nodeSelector: {}
+
+tolerations: []
+
+affinity: {}
+
+postgresql:
+ enabled: true
+ auth:
+ database: planka
+ username: planka
+ password: ""
+ postgresPassword: ""
+ replicationPassword: ""
+ # existingSecret: planka-postgresql
+ serviceBindings:
+ enabled: true
+
+## Set this if you disable the built-in postgresql deployment
+dburl:
+
+## PVC-based data storage configuration
+persistence:
+ enabled: false
+ # existingClaim: netbox-data
+ # storageClass: "-"
+ accessMode: ReadWriteOnce
+ size: 10Gi
+
+## OpenID Identity Management configuration
+##
+## Example:
+## ---------------
+## oidc:
+## enabled: true
+## clientId: sxxaAIAxVXlCxTmc1YLHBbQr8NL8MqLI2DUbt42d
+## clientSecret: om4RTMRVHRszU7bqxB7RZNkHIzA8e4sGYWxeCwIMYQXPwEBWe4SY5a0wwCe9ltB3zrq5f0dnFnp34cEHD7QSMHsKvV9AiV5Z7eqDraMnv0I8IFivmuV5wovAECAYreSI
+## issuerUrl: https://auth.local/application/o/planka/
+## admin:
+## roles:
+## - planka-admin
+##
+## ---------------
+## NOTE: A minimal configuration requires setting `clientId`, `clientSecret` and `issuerUrl`. (plus `admin.roles` for administrators)
+## ref: https://docs.planka.cloud/docs/Configuration/OIDC
+##
+oidc:
+ ## @param oidc.enabled Enable single sign-on (SSO) with OpenID Connect (OIDC)
+ ##
+ enabled: false
+
+ ## OIDC credentials
+ ## @param oidc.clientId A string unique to the provider that identifies your app.
+ ## @param oidc.clientSecret A secret string that the provider uses to confirm ownership of a client ID.
+ ##
+ ## NOTE: Either specify inline `clientId` and `clientSecret` or refer to them via `existingSecret`
+ ##
+ clientId: ""
+ clientSecret: ""
+
+ ## @param oidc.existingSecret Name of an existing secret containing OIDC credentials
+ ## NOTE: Must contain key `clientId` and `clientSecret`
+ ## NOTE: When it's set, the `clientId` and `clientSecret` parameters are ignored
+ ##
+ existingSecret: ""
+
+ ## @param oidc.issuerUrl The OpenID connect metadata document endpoint
+ ##
+ issuerUrl: ""
+
+ ## @param oidc.scopes A list of scopes required for OIDC client.
+ ## If empty will default to `openid`, `profile` and `email`
+ ## NOTE: Planka needs the email and name claims
+ ##
+ scopes: []
+
+ ## Admin permissions configuration
+ admin:
+ ## @param oidc.admin.ignoreRoles If set to true, the admin roles will be ignored.
+ ## It is useful if you want to use OIDC for authentication but not for authorization.
+ ## If empty will default to `false`
+ ##
+ ignoreRoles: false
+
+ ## @param oidc.admin.rolesAttribute The name of a custom group claim that you have configured in your OIDC provider
+ ## If empty will default to `groups`
+ ##
+ rolesAttribute: groups
+
+ ## @param oidc.admin.roles The names of the admin groups
+ ##
+ roles: []
+ # - planka-admin
diff --git a/client/.env b/client/.env
index e17aeb7..8ede5bb 100644
--- a/client/.env
+++ b/client/.env
@@ -1 +1 @@
-REACT_APP_VERSION=1.16.2
+REACT_APP_VERSION=1.16.2
diff --git a/client/src/actions/cards.js b/client/src/actions/cards.js
index 2bbe194..81d43b8 100644
--- a/client/src/actions/cards.js
+++ b/client/src/actions/cards.js
@@ -1,132 +1,132 @@
-import ActionTypes from '../constants/ActionTypes';
-
-const createCard = (card) => ({
- type: ActionTypes.CARD_CREATE,
- payload: {
- card,
- },
-});
-
-createCard.success = (localId, card) => ({
- type: ActionTypes.CARD_CREATE__SUCCESS,
- payload: {
- localId,
- card,
- },
-});
-
-createCard.failure = (localId, error) => ({
- type: ActionTypes.CARD_CREATE__FAILURE,
- payload: {
- localId,
- error,
- },
-});
-
-const handleCardCreate = (card, cardMemberships, cardLabels, tasks, attachments) => ({
- type: ActionTypes.CARD_CREATE_HANDLE,
- payload: {
- card,
- cardMemberships,
- cardLabels,
- tasks,
- attachments,
- },
-});
-
-const updateCard = (id, data) => ({
- type: ActionTypes.CARD_UPDATE,
- payload: {
- id,
- data,
- },
-});
-
-updateCard.success = (card) => ({
- type: ActionTypes.CARD_UPDATE__SUCCESS,
- payload: {
- card,
- },
-});
-
-updateCard.failure = (id, error) => ({
- type: ActionTypes.CARD_UPDATE__FAILURE,
- payload: {
- id,
- error,
- },
-});
-
-const handleCardUpdate = (card) => ({
- type: ActionTypes.CARD_UPDATE_HANDLE,
- payload: {
- card,
- },
-});
-
-const duplicateCard = (id, card, taskIds) => ({
- type: ActionTypes.CARD_DUPLICATE,
- payload: {
- id,
- card,
- taskIds,
- },
-});
-
-duplicateCard.success = (localId, card, cardMemberships, cardLabels, tasks) => ({
- type: ActionTypes.CARD_DUPLICATE__SUCCESS,
- payload: {
- localId,
- card,
- cardMemberships,
- cardLabels,
- tasks,
- },
-});
-
-duplicateCard.failure = (id, error) => ({
- type: ActionTypes.CARD_DUPLICATE__FAILURE,
- payload: {
- id,
- error,
- },
-});
-
-const deleteCard = (id) => ({
- type: ActionTypes.CARD_DELETE,
- payload: {
- id,
- },
-});
-
-deleteCard.success = (card) => ({
- type: ActionTypes.CARD_DELETE__SUCCESS,
- payload: {
- card,
- },
-});
-
-deleteCard.failure = (id, error) => ({
- type: ActionTypes.CARD_DELETE__FAILURE,
- payload: {
- id,
- error,
- },
-});
-
-const handleCardDelete = (card) => ({
- type: ActionTypes.CARD_DELETE_HANDLE,
- payload: {
- card,
- },
-});
-
-export default {
- createCard,
- handleCardCreate,
- updateCard,
- handleCardUpdate,
- duplicateCard,
- deleteCard,
- handleCardDelete,
-};
+import ActionTypes from '../constants/ActionTypes';
+
+const createCard = (card) => ({
+ type: ActionTypes.CARD_CREATE,
+ payload: {
+ card,
+ },
+});
+
+createCard.success = (localId, card) => ({
+ type: ActionTypes.CARD_CREATE__SUCCESS,
+ payload: {
+ localId,
+ card,
+ },
+});
+
+createCard.failure = (localId, error) => ({
+ type: ActionTypes.CARD_CREATE__FAILURE,
+ payload: {
+ localId,
+ error,
+ },
+});
+
+const handleCardCreate = (card, cardMemberships, cardLabels, tasks, attachments) => ({
+ type: ActionTypes.CARD_CREATE_HANDLE,
+ payload: {
+ card,
+ cardMemberships,
+ cardLabels,
+ tasks,
+ attachments,
+ },
+});
+
+const updateCard = (id, data) => ({
+ type: ActionTypes.CARD_UPDATE,
+ payload: {
+ id,
+ data,
+ },
+});
+
+updateCard.success = (card) => ({
+ type: ActionTypes.CARD_UPDATE__SUCCESS,
+ payload: {
+ card,
+ },
+});
+
+updateCard.failure = (id, error) => ({
+ type: ActionTypes.CARD_UPDATE__FAILURE,
+ payload: {
+ id,
+ error,
+ },
+});
+
+const handleCardUpdate = (card) => ({
+ type: ActionTypes.CARD_UPDATE_HANDLE,
+ payload: {
+ card,
+ },
+});
+
+const duplicateCard = (id, card, taskIds) => ({
+ type: ActionTypes.CARD_DUPLICATE,
+ payload: {
+ id,
+ card,
+ taskIds,
+ },
+});
+
+duplicateCard.success = (localId, card, cardMemberships, cardLabels, tasks) => ({
+ type: ActionTypes.CARD_DUPLICATE__SUCCESS,
+ payload: {
+ localId,
+ card,
+ cardMemberships,
+ cardLabels,
+ tasks,
+ },
+});
+
+duplicateCard.failure = (id, error) => ({
+ type: ActionTypes.CARD_DUPLICATE__FAILURE,
+ payload: {
+ id,
+ error,
+ },
+});
+
+const deleteCard = (id) => ({
+ type: ActionTypes.CARD_DELETE,
+ payload: {
+ id,
+ },
+});
+
+deleteCard.success = (card) => ({
+ type: ActionTypes.CARD_DELETE__SUCCESS,
+ payload: {
+ card,
+ },
+});
+
+deleteCard.failure = (id, error) => ({
+ type: ActionTypes.CARD_DELETE__FAILURE,
+ payload: {
+ id,
+ error,
+ },
+});
+
+const handleCardDelete = (card) => ({
+ type: ActionTypes.CARD_DELETE_HANDLE,
+ payload: {
+ card,
+ },
+});
+
+export default {
+ createCard,
+ handleCardCreate,
+ updateCard,
+ handleCardUpdate,
+ duplicateCard,
+ deleteCard,
+ handleCardDelete,
+};
diff --git a/client/src/api/cards.js b/client/src/api/cards.js
index 568ca8e..235ba4c 100755
--- a/client/src/api/cards.js
+++ b/client/src/api/cards.js
@@ -1,94 +1,94 @@
-import socket from './socket';
-import { transformAttachment } from './attachments';
-
-/* Transformers */
-
-export const transformCard = (card) => ({
- ...card,
- ...(card.dueDate && {
- dueDate: new Date(card.dueDate),
- }),
- ...(card.stopwatch && {
- stopwatch: {
- ...card.stopwatch,
- ...(card.stopwatch.startedAt && {
- startedAt: new Date(card.stopwatch.startedAt),
- }),
- },
- }),
-});
-
-export const transformCardData = (data) => ({
- ...data,
- ...(data.dueDate && {
- dueDate: data.dueDate.toISOString(),
- }),
- ...(data.stopwatch && {
- stopwatch: {
- ...data.stopwatch,
- ...(data.stopwatch.startedAt && {
- startedAt: data.stopwatch.startedAt.toISOString(),
- }),
- },
- }),
-});
-
-/* Actions */
-
-const createCard = (listId, data, headers) =>
- socket.post(`/lists/${listId}/cards`, transformCardData(data), headers).then((body) => ({
- ...body,
- item: transformCard(body.item),
- }));
-
-const getCard = (id, headers) =>
- socket.get(`/cards/${id}`, undefined, headers).then((body) => ({
- ...body,
- item: transformCard(body.item),
- included: {
- ...body.included,
- attachments: body.included.attachments.map(transformAttachment),
- },
- }));
-
-const updateCard = (id, data, headers) =>
- socket.patch(`/cards/${id}`, transformCardData(data), headers).then((body) => ({
- ...body,
- item: transformCard(body.item),
- }));
-
-const duplicateCard = (id, data, headers) =>
- socket.post(`/cards/${id}/duplicate`, data, headers).then((body) => ({
- ...body,
- item: transformCard(body.item),
- }));
-
-const deleteCard = (id, headers) =>
- socket.delete(`/cards/${id}`, undefined, headers).then((body) => ({
- ...body,
- item: transformCard(body.item),
- }));
-
-/* Event handlers */
-
-const makeHandleCardCreate = (next) => (body) => {
- next({
- ...body,
- item: transformCard(body.item),
- });
-};
-
-const makeHandleCardUpdate = makeHandleCardCreate;
-
-const makeHandleCardDelete = makeHandleCardCreate;
-
-export default {
- createCard,
- getCard,
- updateCard,
- deleteCard,
- duplicateCard,
- makeHandleCardCreate,
- makeHandleCardUpdate,
- makeHandleCardDelete,
-};
+import socket from './socket';
+import { transformAttachment } from './attachments';
+
+/* Transformers */
+
+export const transformCard = (card) => ({
+ ...card,
+ ...(card.dueDate && {
+ dueDate: new Date(card.dueDate),
+ }),
+ ...(card.stopwatch && {
+ stopwatch: {
+ ...card.stopwatch,
+ ...(card.stopwatch.startedAt && {
+ startedAt: new Date(card.stopwatch.startedAt),
+ }),
+ },
+ }),
+});
+
+export const transformCardData = (data) => ({
+ ...data,
+ ...(data.dueDate && {
+ dueDate: data.dueDate.toISOString(),
+ }),
+ ...(data.stopwatch && {
+ stopwatch: {
+ ...data.stopwatch,
+ ...(data.stopwatch.startedAt && {
+ startedAt: data.stopwatch.startedAt.toISOString(),
+ }),
+ },
+ }),
+});
+
+/* Actions */
+
+const createCard = (listId, data, headers) =>
+ socket.post(`/lists/${listId}/cards`, transformCardData(data), headers).then((body) => ({
+ ...body,
+ item: transformCard(body.item),
+ }));
+
+const getCard = (id, headers) =>
+ socket.get(`/cards/${id}`, undefined, headers).then((body) => ({
+ ...body,
+ item: transformCard(body.item),
+ included: {
+ ...body.included,
+ attachments: body.included.attachments.map(transformAttachment),
+ },
+ }));
+
+const updateCard = (id, data, headers) =>
+ socket.patch(`/cards/${id}`, transformCardData(data), headers).then((body) => ({
+ ...body,
+ item: transformCard(body.item),
+ }));
+
+const duplicateCard = (id, data, headers) =>
+ socket.post(`/cards/${id}/duplicate`, data, headers).then((body) => ({
+ ...body,
+ item: transformCard(body.item),
+ }));
+
+const deleteCard = (id, headers) =>
+ socket.delete(`/cards/${id}`, undefined, headers).then((body) => ({
+ ...body,
+ item: transformCard(body.item),
+ }));
+
+/* Event handlers */
+
+const makeHandleCardCreate = (next) => (body) => {
+ next({
+ ...body,
+ item: transformCard(body.item),
+ });
+};
+
+const makeHandleCardUpdate = makeHandleCardCreate;
+
+const makeHandleCardDelete = makeHandleCardCreate;
+
+export default {
+ createCard,
+ getCard,
+ updateCard,
+ deleteCard,
+ duplicateCard,
+ makeHandleCardCreate,
+ makeHandleCardUpdate,
+ makeHandleCardDelete,
+};
diff --git a/client/src/components/Card/ActionsStep.jsx b/client/src/components/Card/ActionsStep.jsx
index bd9db9e..55a8438 100644
--- a/client/src/components/Card/ActionsStep.jsx
+++ b/client/src/components/Card/ActionsStep.jsx
@@ -1,260 +1,260 @@
-import pick from 'lodash/pick';
-import React, { useCallback } from 'react';
-import PropTypes from 'prop-types';
-import { useTranslation } from 'react-i18next';
-import { Menu } from 'semantic-ui-react';
-import { Popup } from '../../lib/custom-ui';
-
-import { useSteps } from '../../hooks';
-import BoardMembershipsStep from '../BoardMembershipsStep';
-import LabelsStep from '../LabelsStep';
-import DueDateEditStep from '../DueDateEditStep';
-import StopwatchEditStep from '../StopwatchEditStep';
-import CardMoveStep from '../CardMoveStep';
-import DeleteStep from '../DeleteStep';
-
-import styles from './ActionsStep.module.scss';
-
-const StepTypes = {
- USERS: 'USERS',
- LABELS: 'LABELS',
- EDIT_DUE_DATE: 'EDIT_DUE_DATE',
- EDIT_STOPWATCH: 'EDIT_STOPWATCH',
- MOVE: 'MOVE',
- DELETE: 'DELETE',
-};
-
-const ActionsStep = React.memo(
- ({
- card,
- projectsToLists,
- boardMemberships,
- currentUserIds,
- labels,
- currentLabelIds,
- onNameEdit,
- onUpdate,
- onMove,
- onTransfer,
- onDuplicate,
- onDelete,
- onUserAdd,
- onUserRemove,
- onBoardFetch,
- onLabelAdd,
- onLabelRemove,
- onLabelCreate,
- onLabelUpdate,
- onLabelMove,
- onLabelDelete,
- onClose,
- }) => {
- const [t] = useTranslation();
- const [step, openStep, handleBack] = useSteps();
-
- const handleEditNameClick = useCallback(() => {
- onNameEdit();
- onClose();
- }, [onNameEdit, onClose]);
-
- const handleUsersClick = useCallback(() => {
- openStep(StepTypes.USERS);
- }, [openStep]);
-
- const handleLabelsClick = useCallback(() => {
- openStep(StepTypes.LABELS);
- }, [openStep]);
-
- const handleEditDueDateClick = useCallback(() => {
- openStep(StepTypes.EDIT_DUE_DATE);
- }, [openStep]);
-
- const handleEditStopwatchClick = useCallback(() => {
- openStep(StepTypes.EDIT_STOPWATCH);
- }, [openStep]);
-
- const handleMoveClick = useCallback(() => {
- openStep(StepTypes.MOVE);
- }, [openStep]);
-
- const handleDuplicateClick = useCallback(() => {
- onDuplicate();
- onClose();
- }, [onDuplicate, onClose]);
-
- const handleDeleteClick = useCallback(() => {
- openStep(StepTypes.DELETE);
- }, [openStep]);
-
- const handleDueDateUpdate = useCallback(
- (dueDate) => {
- onUpdate({
- dueDate,
- });
- },
- [onUpdate],
- );
-
- const handleStopwatchUpdate = useCallback(
- (stopwatch) => {
- onUpdate({
- stopwatch,
- });
- },
- [onUpdate],
- );
-
- if (step) {
- switch (step.type) {
- case StepTypes.USERS:
- return (
-
- );
- case StepTypes.LABELS:
- return (
-
- );
- case StepTypes.EDIT_DUE_DATE:
- return (
-
- );
- case StepTypes.EDIT_STOPWATCH:
- return (
-
- );
- case StepTypes.MOVE:
- return (
-
- );
- case StepTypes.DELETE:
- return (
-
- );
- default:
- }
- }
-
- return (
- <>
-
- {t('common.cardActions', {
- context: 'title',
- })}
-
-
-
-
- >
- );
- },
-);
-
-ActionsStep.propTypes = {
- /* eslint-disable react/forbid-prop-types */
- card: PropTypes.object.isRequired,
- projectsToLists: PropTypes.array.isRequired,
- boardMemberships: PropTypes.array.isRequired,
- currentUserIds: PropTypes.array.isRequired,
- labels: PropTypes.array.isRequired,
- currentLabelIds: PropTypes.array.isRequired,
- /* eslint-enable react/forbid-prop-types */
- onNameEdit: PropTypes.func.isRequired,
- onUpdate: PropTypes.func.isRequired,
- onMove: PropTypes.func.isRequired,
- onTransfer: PropTypes.func.isRequired,
- onDuplicate: PropTypes.func.isRequired,
- onDelete: PropTypes.func.isRequired,
- onUserAdd: PropTypes.func.isRequired,
- onUserRemove: PropTypes.func.isRequired,
- onBoardFetch: PropTypes.func.isRequired,
- onLabelAdd: PropTypes.func.isRequired,
- onLabelRemove: PropTypes.func.isRequired,
- onLabelCreate: PropTypes.func.isRequired,
- onLabelUpdate: PropTypes.func.isRequired,
- onLabelMove: PropTypes.func.isRequired,
- onLabelDelete: PropTypes.func.isRequired,
- onClose: PropTypes.func.isRequired,
-};
-
-export default ActionsStep;
+import pick from 'lodash/pick';
+import React, { useCallback } from 'react';
+import PropTypes from 'prop-types';
+import { useTranslation } from 'react-i18next';
+import { Menu } from 'semantic-ui-react';
+import { Popup } from '../../lib/custom-ui';
+
+import { useSteps } from '../../hooks';
+import BoardMembershipsStep from '../BoardMembershipsStep';
+import LabelsStep from '../LabelsStep';
+import DueDateEditStep from '../DueDateEditStep';
+import StopwatchEditStep from '../StopwatchEditStep';
+import CardMoveStep from '../CardMoveStep';
+import DeleteStep from '../DeleteStep';
+
+import styles from './ActionsStep.module.scss';
+
+const StepTypes = {
+ USERS: 'USERS',
+ LABELS: 'LABELS',
+ EDIT_DUE_DATE: 'EDIT_DUE_DATE',
+ EDIT_STOPWATCH: 'EDIT_STOPWATCH',
+ MOVE: 'MOVE',
+ DELETE: 'DELETE',
+};
+
+const ActionsStep = React.memo(
+ ({
+ card,
+ projectsToLists,
+ boardMemberships,
+ currentUserIds,
+ labels,
+ currentLabelIds,
+ onNameEdit,
+ onUpdate,
+ onMove,
+ onTransfer,
+ onDuplicate,
+ onDelete,
+ onUserAdd,
+ onUserRemove,
+ onBoardFetch,
+ onLabelAdd,
+ onLabelRemove,
+ onLabelCreate,
+ onLabelUpdate,
+ onLabelMove,
+ onLabelDelete,
+ onClose,
+ }) => {
+ const [t] = useTranslation();
+ const [step, openStep, handleBack] = useSteps();
+
+ const handleEditNameClick = useCallback(() => {
+ onNameEdit();
+ onClose();
+ }, [onNameEdit, onClose]);
+
+ const handleUsersClick = useCallback(() => {
+ openStep(StepTypes.USERS);
+ }, [openStep]);
+
+ const handleLabelsClick = useCallback(() => {
+ openStep(StepTypes.LABELS);
+ }, [openStep]);
+
+ const handleEditDueDateClick = useCallback(() => {
+ openStep(StepTypes.EDIT_DUE_DATE);
+ }, [openStep]);
+
+ const handleEditStopwatchClick = useCallback(() => {
+ openStep(StepTypes.EDIT_STOPWATCH);
+ }, [openStep]);
+
+ const handleMoveClick = useCallback(() => {
+ openStep(StepTypes.MOVE);
+ }, [openStep]);
+
+ const handleDuplicateClick = useCallback(() => {
+ onDuplicate();
+ onClose();
+ }, [onDuplicate, onClose]);
+
+ const handleDeleteClick = useCallback(() => {
+ openStep(StepTypes.DELETE);
+ }, [openStep]);
+
+ const handleDueDateUpdate = useCallback(
+ (dueDate) => {
+ onUpdate({
+ dueDate,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleStopwatchUpdate = useCallback(
+ (stopwatch) => {
+ onUpdate({
+ stopwatch,
+ });
+ },
+ [onUpdate],
+ );
+
+ if (step) {
+ switch (step.type) {
+ case StepTypes.USERS:
+ return (
+
+ );
+ case StepTypes.LABELS:
+ return (
+
+ );
+ case StepTypes.EDIT_DUE_DATE:
+ return (
+
+ );
+ case StepTypes.EDIT_STOPWATCH:
+ return (
+
+ );
+ case StepTypes.MOVE:
+ return (
+
+ );
+ case StepTypes.DELETE:
+ return (
+
+ );
+ default:
+ }
+ }
+
+ return (
+ <>
+
+ {t('common.cardActions', {
+ context: 'title',
+ })}
+
+
+
+
+ >
+ );
+ },
+);
+
+ActionsStep.propTypes = {
+ /* eslint-disable react/forbid-prop-types */
+ card: PropTypes.object.isRequired,
+ projectsToLists: PropTypes.array.isRequired,
+ boardMemberships: PropTypes.array.isRequired,
+ currentUserIds: PropTypes.array.isRequired,
+ labels: PropTypes.array.isRequired,
+ currentLabelIds: PropTypes.array.isRequired,
+ /* eslint-enable react/forbid-prop-types */
+ onNameEdit: PropTypes.func.isRequired,
+ onUpdate: PropTypes.func.isRequired,
+ onMove: PropTypes.func.isRequired,
+ onTransfer: PropTypes.func.isRequired,
+ onDuplicate: PropTypes.func.isRequired,
+ onDelete: PropTypes.func.isRequired,
+ onUserAdd: PropTypes.func.isRequired,
+ onUserRemove: PropTypes.func.isRequired,
+ onBoardFetch: PropTypes.func.isRequired,
+ onLabelAdd: PropTypes.func.isRequired,
+ onLabelRemove: PropTypes.func.isRequired,
+ onLabelCreate: PropTypes.func.isRequired,
+ onLabelUpdate: PropTypes.func.isRequired,
+ onLabelMove: PropTypes.func.isRequired,
+ onLabelDelete: PropTypes.func.isRequired,
+ onClose: PropTypes.func.isRequired,
+};
+
+export default ActionsStep;
diff --git a/client/src/components/Card/Card.jsx b/client/src/components/Card/Card.jsx
index 4adddbc..a344f75 100755
--- a/client/src/components/Card/Card.jsx
+++ b/client/src/components/Card/Card.jsx
@@ -1,262 +1,262 @@
-import React, { useCallback, useRef } from 'react';
-import PropTypes from 'prop-types';
-import classNames from 'classnames';
-import { Button, Icon } from 'semantic-ui-react';
-import { Link } from 'react-router-dom';
-import { Draggable } from 'react-beautiful-dnd';
-import { usePopup } from '../../lib/popup';
-
-import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
-import Paths from '../../constants/Paths';
-import Tasks from './Tasks';
-import NameEdit from './NameEdit';
-import ActionsStep from './ActionsStep';
-import User from '../User';
-import Label from '../Label';
-import DueDate from '../DueDate';
-import Stopwatch from '../Stopwatch';
-
-import styles from './Card.module.scss';
-
-const Card = React.memo(
- ({
- id,
- index,
- name,
- dueDate,
- stopwatch,
- coverUrl,
- boardId,
- listId,
- projectId,
- isPersisted,
- notificationsTotal,
- users,
- labels,
- tasks,
- allProjectsToLists,
- allBoardMemberships,
- allLabels,
- canEdit,
- onUpdate,
- onMove,
- onTransfer,
- onDuplicate,
- onDelete,
- onUserAdd,
- onUserRemove,
- onBoardFetch,
- onLabelAdd,
- onLabelRemove,
- onLabelCreate,
- onLabelUpdate,
- onLabelMove,
- onLabelDelete,
- }) => {
- const nameEdit = useRef(null);
-
- const handleClick = useCallback(() => {
- if (document.activeElement) {
- document.activeElement.blur();
- }
- }, []);
-
- const handleToggleStopwatchClick = useCallback(
- (event) => {
- event.preventDefault();
-
- onUpdate({
- stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
- });
- },
- [stopwatch, onUpdate],
- );
-
- const handleNameUpdate = useCallback(
- (newName) => {
- onUpdate({
- name: newName,
- });
- },
- [onUpdate],
- );
-
- const handleNameEdit = useCallback(() => {
- nameEdit.current.open();
- }, []);
-
- const ActionsPopup = usePopup(ActionsStep);
-
- const contentNode = (
- <>
- {coverUrl &&
}
-
- {labels.length > 0 && (
-
- {labels.map((label) => (
-
-
-
- ))}
-
- )}
-
{name}
- {tasks.length > 0 &&
}
- {(dueDate || stopwatch || notificationsTotal > 0) && (
-
- {notificationsTotal > 0 && (
-
- {notificationsTotal}
-
- )}
- {dueDate && (
-
-
-
- )}
- {stopwatch && (
-
-
-
- )}
-
- )}
- {users.length > 0 && (
-
- {users.map((user) => (
-
-
-
- ))}
-
- )}
-
- >
- );
-
- return (
-
- {({ innerRef, draggableProps, dragHandleProps }) => (
- // eslint-disable-next-line react/jsx-props-no-spreading
-
-
-
- {isPersisted ? (
- <>
-
- {contentNode}
-
- {canEdit && (
-
user.id)}
- labels={allLabels}
- currentLabelIds={labels.map((label) => label.id)}
- onNameEdit={handleNameEdit}
- onUpdate={onUpdate}
- onMove={onMove}
- onTransfer={onTransfer}
- onDuplicate={onDuplicate}
- onDelete={onDelete}
- onUserAdd={onUserAdd}
- onUserRemove={onUserRemove}
- onBoardFetch={onBoardFetch}
- onLabelAdd={onLabelAdd}
- onLabelRemove={onLabelRemove}
- onLabelCreate={onLabelCreate}
- onLabelUpdate={onLabelUpdate}
- onLabelMove={onLabelMove}
- onLabelDelete={onLabelDelete}
- >
-
-
- )}
- >
- ) : (
-
{contentNode}
- )}
-
-
-
- )}
-
- );
- },
-);
-
-Card.propTypes = {
- id: PropTypes.string.isRequired,
- index: PropTypes.number.isRequired,
- name: PropTypes.string.isRequired,
- dueDate: PropTypes.instanceOf(Date),
- stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
- coverUrl: PropTypes.string,
- boardId: PropTypes.string.isRequired,
- listId: PropTypes.string.isRequired,
- projectId: PropTypes.string.isRequired,
- isPersisted: PropTypes.bool.isRequired,
- notificationsTotal: PropTypes.number.isRequired,
- /* eslint-disable react/forbid-prop-types */
- users: PropTypes.array.isRequired,
- labels: PropTypes.array.isRequired,
- tasks: PropTypes.array.isRequired,
- allProjectsToLists: PropTypes.array.isRequired,
- allBoardMemberships: PropTypes.array.isRequired,
- allLabels: PropTypes.array.isRequired,
- /* eslint-enable react/forbid-prop-types */
- canEdit: PropTypes.bool.isRequired,
- onUpdate: PropTypes.func.isRequired,
- onMove: PropTypes.func.isRequired,
- onTransfer: PropTypes.func.isRequired,
- onDuplicate: PropTypes.func.isRequired,
- onDelete: PropTypes.func.isRequired,
- onUserAdd: PropTypes.func.isRequired,
- onUserRemove: PropTypes.func.isRequired,
- onBoardFetch: PropTypes.func.isRequired,
- onLabelAdd: PropTypes.func.isRequired,
- onLabelRemove: PropTypes.func.isRequired,
- onLabelCreate: PropTypes.func.isRequired,
- onLabelUpdate: PropTypes.func.isRequired,
- onLabelMove: PropTypes.func.isRequired,
- onLabelDelete: PropTypes.func.isRequired,
-};
-
-Card.defaultProps = {
- dueDate: undefined,
- stopwatch: undefined,
- coverUrl: undefined,
-};
-
-export default Card;
+import React, { useCallback, useRef } from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import { Button, Icon } from 'semantic-ui-react';
+import { Link } from 'react-router-dom';
+import { Draggable } from 'react-beautiful-dnd';
+import { usePopup } from '../../lib/popup';
+
+import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
+import Paths from '../../constants/Paths';
+import Tasks from './Tasks';
+import NameEdit from './NameEdit';
+import ActionsStep from './ActionsStep';
+import User from '../User';
+import Label from '../Label';
+import DueDate from '../DueDate';
+import Stopwatch from '../Stopwatch';
+
+import styles from './Card.module.scss';
+
+const Card = React.memo(
+ ({
+ id,
+ index,
+ name,
+ dueDate,
+ stopwatch,
+ coverUrl,
+ boardId,
+ listId,
+ projectId,
+ isPersisted,
+ notificationsTotal,
+ users,
+ labels,
+ tasks,
+ allProjectsToLists,
+ allBoardMemberships,
+ allLabels,
+ canEdit,
+ onUpdate,
+ onMove,
+ onTransfer,
+ onDuplicate,
+ onDelete,
+ onUserAdd,
+ onUserRemove,
+ onBoardFetch,
+ onLabelAdd,
+ onLabelRemove,
+ onLabelCreate,
+ onLabelUpdate,
+ onLabelMove,
+ onLabelDelete,
+ }) => {
+ const nameEdit = useRef(null);
+
+ const handleClick = useCallback(() => {
+ if (document.activeElement) {
+ document.activeElement.blur();
+ }
+ }, []);
+
+ const handleToggleStopwatchClick = useCallback(
+ (event) => {
+ event.preventDefault();
+
+ onUpdate({
+ stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
+ });
+ },
+ [stopwatch, onUpdate],
+ );
+
+ const handleNameUpdate = useCallback(
+ (newName) => {
+ onUpdate({
+ name: newName,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleNameEdit = useCallback(() => {
+ nameEdit.current.open();
+ }, []);
+
+ const ActionsPopup = usePopup(ActionsStep);
+
+ const contentNode = (
+ <>
+ {coverUrl &&
}
+
+ {labels.length > 0 && (
+
+ {labels.map((label) => (
+
+
+
+ ))}
+
+ )}
+
{name}
+ {tasks.length > 0 &&
}
+ {(dueDate || stopwatch || notificationsTotal > 0) && (
+
+ {notificationsTotal > 0 && (
+
+ {notificationsTotal}
+
+ )}
+ {dueDate && (
+
+
+
+ )}
+ {stopwatch && (
+
+
+
+ )}
+
+ )}
+ {users.length > 0 && (
+
+ {users.map((user) => (
+
+
+
+ ))}
+
+ )}
+
+ >
+ );
+
+ return (
+
+ {({ innerRef, draggableProps, dragHandleProps }) => (
+ // eslint-disable-next-line react/jsx-props-no-spreading
+
+
+
+ {isPersisted ? (
+ <>
+
+ {contentNode}
+
+ {canEdit && (
+
user.id)}
+ labels={allLabels}
+ currentLabelIds={labels.map((label) => label.id)}
+ onNameEdit={handleNameEdit}
+ onUpdate={onUpdate}
+ onMove={onMove}
+ onTransfer={onTransfer}
+ onDuplicate={onDuplicate}
+ onDelete={onDelete}
+ onUserAdd={onUserAdd}
+ onUserRemove={onUserRemove}
+ onBoardFetch={onBoardFetch}
+ onLabelAdd={onLabelAdd}
+ onLabelRemove={onLabelRemove}
+ onLabelCreate={onLabelCreate}
+ onLabelUpdate={onLabelUpdate}
+ onLabelMove={onLabelMove}
+ onLabelDelete={onLabelDelete}
+ >
+
+
+ )}
+ >
+ ) : (
+
{contentNode}
+ )}
+
+
+
+ )}
+
+ );
+ },
+);
+
+Card.propTypes = {
+ id: PropTypes.string.isRequired,
+ index: PropTypes.number.isRequired,
+ name: PropTypes.string.isRequired,
+ dueDate: PropTypes.instanceOf(Date),
+ stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
+ coverUrl: PropTypes.string,
+ boardId: PropTypes.string.isRequired,
+ listId: PropTypes.string.isRequired,
+ projectId: PropTypes.string.isRequired,
+ isPersisted: PropTypes.bool.isRequired,
+ notificationsTotal: PropTypes.number.isRequired,
+ /* eslint-disable react/forbid-prop-types */
+ users: PropTypes.array.isRequired,
+ labels: PropTypes.array.isRequired,
+ tasks: PropTypes.array.isRequired,
+ allProjectsToLists: PropTypes.array.isRequired,
+ allBoardMemberships: PropTypes.array.isRequired,
+ allLabels: PropTypes.array.isRequired,
+ /* eslint-enable react/forbid-prop-types */
+ canEdit: PropTypes.bool.isRequired,
+ onUpdate: PropTypes.func.isRequired,
+ onMove: PropTypes.func.isRequired,
+ onTransfer: PropTypes.func.isRequired,
+ onDuplicate: PropTypes.func.isRequired,
+ onDelete: PropTypes.func.isRequired,
+ onUserAdd: PropTypes.func.isRequired,
+ onUserRemove: PropTypes.func.isRequired,
+ onBoardFetch: PropTypes.func.isRequired,
+ onLabelAdd: PropTypes.func.isRequired,
+ onLabelRemove: PropTypes.func.isRequired,
+ onLabelCreate: PropTypes.func.isRequired,
+ onLabelUpdate: PropTypes.func.isRequired,
+ onLabelMove: PropTypes.func.isRequired,
+ onLabelDelete: PropTypes.func.isRequired,
+};
+
+Card.defaultProps = {
+ dueDate: undefined,
+ stopwatch: undefined,
+ coverUrl: undefined,
+};
+
+export default Card;
diff --git a/client/src/components/CardModal/CardModal.jsx b/client/src/components/CardModal/CardModal.jsx
index ff77aa9..791e30f 100755
--- a/client/src/components/CardModal/CardModal.jsx
+++ b/client/src/components/CardModal/CardModal.jsx
@@ -1,600 +1,600 @@
-import React, { useCallback, useRef } from 'react';
-import PropTypes from 'prop-types';
-import classNames from 'classnames';
-import { useTranslation } from 'react-i18next';
-import { Button, Grid, Icon, Modal } from 'semantic-ui-react';
-import { usePopup } from '../../lib/popup';
-import { Markdown } from '../../lib/custom-ui';
-
-import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
-import NameField from './NameField';
-import DescriptionEdit from './DescriptionEdit';
-import Tasks from './Tasks';
-import Attachments from './Attachments';
-import AttachmentAddZone from './AttachmentAddZone';
-import AttachmentAddStep from './AttachmentAddStep';
-import Activities from './Activities';
-import User from '../User';
-import Label from '../Label';
-import DueDate from '../DueDate';
-import Stopwatch from '../Stopwatch';
-import BoardMembershipsStep from '../BoardMembershipsStep';
-import LabelsStep from '../LabelsStep';
-import DueDateEditStep from '../DueDateEditStep';
-import StopwatchEditStep from '../StopwatchEditStep';
-import CardMoveStep from '../CardMoveStep';
-import DeleteStep from '../DeleteStep';
-
-import styles from './CardModal.module.scss';
-
-const CardModal = React.memo(
- ({
- name,
- description,
- dueDate,
- stopwatch,
- isSubscribed,
- isActivitiesFetching,
- isAllActivitiesFetched,
- isActivitiesDetailsVisible,
- isActivitiesDetailsFetching,
- listId,
- boardId,
- projectId,
- users,
- labels,
- tasks,
- attachments,
- activities,
- allProjectsToLists,
- allBoardMemberships,
- allLabels,
- canEdit,
- canEditCommentActivities,
- canEditAllCommentActivities,
- onUpdate,
- onMove,
- onTransfer,
- onDuplicate,
- onDelete,
- onUserAdd,
- onUserRemove,
- onBoardFetch,
- onLabelAdd,
- onLabelRemove,
- onLabelCreate,
- onLabelUpdate,
- onLabelMove,
- onLabelDelete,
- onTaskCreate,
- onTaskUpdate,
- onTaskMove,
- onTaskDelete,
- onAttachmentCreate,
- onAttachmentUpdate,
- onAttachmentDelete,
- onActivitiesFetch,
- onActivitiesDetailsToggle,
- onCommentActivityCreate,
- onCommentActivityUpdate,
- onCommentActivityDelete,
- onClose,
- }) => {
- const [t] = useTranslation();
-
- const isGalleryOpened = useRef(false);
-
- const handleToggleStopwatchClick = useCallback(() => {
- onUpdate({
- stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
- });
- }, [stopwatch, onUpdate]);
-
- const handleNameUpdate = useCallback(
- (newName) => {
- onUpdate({
- name: newName,
- });
- },
- [onUpdate],
- );
-
- const handleDescriptionUpdate = useCallback(
- (newDescription) => {
- onUpdate({
- description: newDescription,
- });
- },
- [onUpdate],
- );
-
- const handleDueDateUpdate = useCallback(
- (newDueDate) => {
- onUpdate({
- dueDate: newDueDate,
- });
- },
- [onUpdate],
- );
-
- const handleStopwatchUpdate = useCallback(
- (newStopwatch) => {
- onUpdate({
- stopwatch: newStopwatch,
- });
- },
- [onUpdate],
- );
-
- const handleCoverUpdate = useCallback(
- (newCoverAttachmentId) => {
- onUpdate({
- coverAttachmentId: newCoverAttachmentId,
- });
- },
- [onUpdate],
- );
-
- const handleToggleSubscriptionClick = useCallback(() => {
- onUpdate({
- isSubscribed: !isSubscribed,
- });
- }, [isSubscribed, onUpdate]);
-
- const handleDuplicateClick = useCallback(() => {
- onDuplicate();
- onClose();
- }, [onDuplicate, onClose]);
-
- const handleGalleryOpen = useCallback(() => {
- isGalleryOpened.current = true;
- }, []);
-
- const handleGalleryClose = useCallback(() => {
- isGalleryOpened.current = false;
- }, []);
-
- const handleClose = useCallback(() => {
- if (isGalleryOpened.current) {
- return;
- }
-
- onClose();
- }, [onClose]);
-
- const AttachmentAddPopup = usePopup(AttachmentAddStep);
- const BoardMembershipsPopup = usePopup(BoardMembershipsStep);
- const LabelsPopup = usePopup(LabelsStep);
- const DueDateEditPopup = usePopup(DueDateEditStep);
- const StopwatchEditPopup = usePopup(StopwatchEditStep);
- const CardMovePopup = usePopup(CardMoveStep);
- const DeletePopup = usePopup(DeleteStep);
-
- const userIds = users.map((user) => user.id);
- const labelIds = labels.map((label) => label.id);
-
- const contentNode = (
-
-
-
-
-
-
- {canEdit ? (
-
- ) : (
-
{name}
- )}
-
-
-
-
-
-
- {(users.length > 0 || labels.length > 0 || dueDate || stopwatch) && (
-
- {users.length > 0 && (
-
-
- {t('common.members', {
- context: 'title',
- })}
-
- {users.map((user) => (
-
- {canEdit ? (
-
-
-
- ) : (
-
- )}
-
- ))}
- {canEdit && (
-
- {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
-
-
- )}
-
- )}
- {labels.length > 0 && (
-
-
- {t('common.labels', {
- context: 'title',
- })}
-
- {labels.map((label) => (
-
- {canEdit ? (
-
-
-
- ) : (
-
- )}
-
- ))}
- {canEdit && (
-
- {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
-
-
- )}
-
- )}
- {dueDate && (
-
-
- {t('common.dueDate', {
- context: 'title',
- })}
-
-
- {canEdit ? (
-
-
-
- ) : (
-
- )}
-
-
- )}
- {stopwatch && (
-
-
- {t('common.stopwatch', {
- context: 'title',
- })}
-
-
- {canEdit ? (
-
-
-
- ) : (
-
- )}
-
- {canEdit && (
- // eslint-disable-next-line jsx-a11y/control-has-associated-label
-
- )}
-
- )}
-
- )}
- {(description || canEdit) && (
-
-
-
-
{t('common.description')}
- {canEdit ? (
-
- {description ? (
-
- ) : (
-
- )}
-
- ) : (
-
-
- {description}
-
-
- )}
-
-
- )}
- {(tasks.length > 0 || canEdit) && (
-
-
-
-
{t('common.tasks')}
-
-
-
- )}
- {attachments.length > 0 && (
-
-
-
-
{t('common.attachments')}
-
-
-
- )}
-
-
- {canEdit && (
-
-
-
{t('action.addToCard')}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {t('common.actions')}
-
-
-
-
-
-
-
-
-
-
- )}
-
-
- );
-
- return (
-
- {canEdit ? (
- {contentNode}
- ) : (
- contentNode
- )}
-
- );
- },
-);
-
-CardModal.propTypes = {
- name: PropTypes.string.isRequired,
- description: PropTypes.string,
- dueDate: PropTypes.instanceOf(Date),
- stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
- isSubscribed: PropTypes.bool.isRequired,
- isActivitiesFetching: PropTypes.bool.isRequired,
- isAllActivitiesFetched: PropTypes.bool.isRequired,
- isActivitiesDetailsVisible: PropTypes.bool.isRequired,
- isActivitiesDetailsFetching: PropTypes.bool.isRequired,
- listId: PropTypes.string.isRequired,
- boardId: PropTypes.string.isRequired,
- projectId: PropTypes.string.isRequired,
- /* eslint-disable react/forbid-prop-types */
- users: PropTypes.array.isRequired,
- labels: PropTypes.array.isRequired,
- tasks: PropTypes.array.isRequired,
- attachments: PropTypes.array.isRequired,
- activities: PropTypes.array.isRequired,
- allProjectsToLists: PropTypes.array.isRequired,
- allBoardMemberships: PropTypes.array.isRequired,
- allLabels: PropTypes.array.isRequired,
- /* eslint-enable react/forbid-prop-types */
- canEdit: PropTypes.bool.isRequired,
- canEditCommentActivities: PropTypes.bool.isRequired,
- canEditAllCommentActivities: PropTypes.bool.isRequired,
- onUpdate: PropTypes.func.isRequired,
- onMove: PropTypes.func.isRequired,
- onTransfer: PropTypes.func.isRequired,
- onDuplicate: PropTypes.func.isRequired,
- onDelete: PropTypes.func.isRequired,
- onUserAdd: PropTypes.func.isRequired,
- onUserRemove: PropTypes.func.isRequired,
- onBoardFetch: PropTypes.func.isRequired,
- onLabelAdd: PropTypes.func.isRequired,
- onLabelRemove: PropTypes.func.isRequired,
- onLabelCreate: PropTypes.func.isRequired,
- onLabelUpdate: PropTypes.func.isRequired,
- onLabelMove: PropTypes.func.isRequired,
- onLabelDelete: PropTypes.func.isRequired,
- onTaskCreate: PropTypes.func.isRequired,
- onTaskUpdate: PropTypes.func.isRequired,
- onTaskMove: PropTypes.func.isRequired,
- onTaskDelete: PropTypes.func.isRequired,
- onAttachmentCreate: PropTypes.func.isRequired,
- onAttachmentUpdate: PropTypes.func.isRequired,
- onAttachmentDelete: PropTypes.func.isRequired,
- onActivitiesFetch: PropTypes.func.isRequired,
- onActivitiesDetailsToggle: PropTypes.func.isRequired,
- onCommentActivityCreate: PropTypes.func.isRequired,
- onCommentActivityUpdate: PropTypes.func.isRequired,
- onCommentActivityDelete: PropTypes.func.isRequired,
- onClose: PropTypes.func.isRequired,
-};
-
-CardModal.defaultProps = {
- description: undefined,
- dueDate: undefined,
- stopwatch: undefined,
-};
-
-export default CardModal;
+import React, { useCallback, useRef } from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import { useTranslation } from 'react-i18next';
+import { Button, Grid, Icon, Modal } from 'semantic-ui-react';
+import { usePopup } from '../../lib/popup';
+import { Markdown } from '../../lib/custom-ui';
+
+import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
+import NameField from './NameField';
+import DescriptionEdit from './DescriptionEdit';
+import Tasks from './Tasks';
+import Attachments from './Attachments';
+import AttachmentAddZone from './AttachmentAddZone';
+import AttachmentAddStep from './AttachmentAddStep';
+import Activities from './Activities';
+import User from '../User';
+import Label from '../Label';
+import DueDate from '../DueDate';
+import Stopwatch from '../Stopwatch';
+import BoardMembershipsStep from '../BoardMembershipsStep';
+import LabelsStep from '../LabelsStep';
+import DueDateEditStep from '../DueDateEditStep';
+import StopwatchEditStep from '../StopwatchEditStep';
+import CardMoveStep from '../CardMoveStep';
+import DeleteStep from '../DeleteStep';
+
+import styles from './CardModal.module.scss';
+
+const CardModal = React.memo(
+ ({
+ name,
+ description,
+ dueDate,
+ stopwatch,
+ isSubscribed,
+ isActivitiesFetching,
+ isAllActivitiesFetched,
+ isActivitiesDetailsVisible,
+ isActivitiesDetailsFetching,
+ listId,
+ boardId,
+ projectId,
+ users,
+ labels,
+ tasks,
+ attachments,
+ activities,
+ allProjectsToLists,
+ allBoardMemberships,
+ allLabels,
+ canEdit,
+ canEditCommentActivities,
+ canEditAllCommentActivities,
+ onUpdate,
+ onMove,
+ onTransfer,
+ onDuplicate,
+ onDelete,
+ onUserAdd,
+ onUserRemove,
+ onBoardFetch,
+ onLabelAdd,
+ onLabelRemove,
+ onLabelCreate,
+ onLabelUpdate,
+ onLabelMove,
+ onLabelDelete,
+ onTaskCreate,
+ onTaskUpdate,
+ onTaskMove,
+ onTaskDelete,
+ onAttachmentCreate,
+ onAttachmentUpdate,
+ onAttachmentDelete,
+ onActivitiesFetch,
+ onActivitiesDetailsToggle,
+ onCommentActivityCreate,
+ onCommentActivityUpdate,
+ onCommentActivityDelete,
+ onClose,
+ }) => {
+ const [t] = useTranslation();
+
+ const isGalleryOpened = useRef(false);
+
+ const handleToggleStopwatchClick = useCallback(() => {
+ onUpdate({
+ stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
+ });
+ }, [stopwatch, onUpdate]);
+
+ const handleNameUpdate = useCallback(
+ (newName) => {
+ onUpdate({
+ name: newName,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleDescriptionUpdate = useCallback(
+ (newDescription) => {
+ onUpdate({
+ description: newDescription,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleDueDateUpdate = useCallback(
+ (newDueDate) => {
+ onUpdate({
+ dueDate: newDueDate,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleStopwatchUpdate = useCallback(
+ (newStopwatch) => {
+ onUpdate({
+ stopwatch: newStopwatch,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleCoverUpdate = useCallback(
+ (newCoverAttachmentId) => {
+ onUpdate({
+ coverAttachmentId: newCoverAttachmentId,
+ });
+ },
+ [onUpdate],
+ );
+
+ const handleToggleSubscriptionClick = useCallback(() => {
+ onUpdate({
+ isSubscribed: !isSubscribed,
+ });
+ }, [isSubscribed, onUpdate]);
+
+ const handleDuplicateClick = useCallback(() => {
+ onDuplicate();
+ onClose();
+ }, [onDuplicate, onClose]);
+
+ const handleGalleryOpen = useCallback(() => {
+ isGalleryOpened.current = true;
+ }, []);
+
+ const handleGalleryClose = useCallback(() => {
+ isGalleryOpened.current = false;
+ }, []);
+
+ const handleClose = useCallback(() => {
+ if (isGalleryOpened.current) {
+ return;
+ }
+
+ onClose();
+ }, [onClose]);
+
+ const AttachmentAddPopup = usePopup(AttachmentAddStep);
+ const BoardMembershipsPopup = usePopup(BoardMembershipsStep);
+ const LabelsPopup = usePopup(LabelsStep);
+ const DueDateEditPopup = usePopup(DueDateEditStep);
+ const StopwatchEditPopup = usePopup(StopwatchEditStep);
+ const CardMovePopup = usePopup(CardMoveStep);
+ const DeletePopup = usePopup(DeleteStep);
+
+ const userIds = users.map((user) => user.id);
+ const labelIds = labels.map((label) => label.id);
+
+ const contentNode = (
+
+
+
+
+
+
+ {canEdit ? (
+
+ ) : (
+
{name}
+ )}
+
+
+
+
+
+
+ {(users.length > 0 || labels.length > 0 || dueDate || stopwatch) && (
+
+ {users.length > 0 && (
+
+
+ {t('common.members', {
+ context: 'title',
+ })}
+
+ {users.map((user) => (
+
+ {canEdit ? (
+
+
+
+ ) : (
+
+ )}
+
+ ))}
+ {canEdit && (
+
+ {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
+
+
+ )}
+
+ )}
+ {labels.length > 0 && (
+
+
+ {t('common.labels', {
+ context: 'title',
+ })}
+
+ {labels.map((label) => (
+
+ {canEdit ? (
+
+
+
+ ) : (
+
+ )}
+
+ ))}
+ {canEdit && (
+
+ {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
+
+
+ )}
+
+ )}
+ {dueDate && (
+
+
+ {t('common.dueDate', {
+ context: 'title',
+ })}
+
+
+ {canEdit ? (
+
+
+
+ ) : (
+
+ )}
+
+
+ )}
+ {stopwatch && (
+
+
+ {t('common.stopwatch', {
+ context: 'title',
+ })}
+
+
+ {canEdit ? (
+
+
+
+ ) : (
+
+ )}
+
+ {canEdit && (
+ // eslint-disable-next-line jsx-a11y/control-has-associated-label
+
+ )}
+
+ )}
+
+ )}
+ {(description || canEdit) && (
+
+
+
+
{t('common.description')}
+ {canEdit ? (
+
+ {description ? (
+
+ ) : (
+
+ )}
+
+ ) : (
+
+
+ {description}
+
+
+ )}
+
+
+ )}
+ {(tasks.length > 0 || canEdit) && (
+
+
+
+
{t('common.tasks')}
+
+
+
+ )}
+ {attachments.length > 0 && (
+
+
+
+
{t('common.attachments')}
+
+
+
+ )}
+
+
+ {canEdit && (
+
+
+
{t('action.addToCard')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {t('common.actions')}
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+ );
+
+ return (
+
+ {canEdit ? (
+ {contentNode}
+ ) : (
+ contentNode
+ )}
+
+ );
+ },
+);
+
+CardModal.propTypes = {
+ name: PropTypes.string.isRequired,
+ description: PropTypes.string,
+ dueDate: PropTypes.instanceOf(Date),
+ stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
+ isSubscribed: PropTypes.bool.isRequired,
+ isActivitiesFetching: PropTypes.bool.isRequired,
+ isAllActivitiesFetched: PropTypes.bool.isRequired,
+ isActivitiesDetailsVisible: PropTypes.bool.isRequired,
+ isActivitiesDetailsFetching: PropTypes.bool.isRequired,
+ listId: PropTypes.string.isRequired,
+ boardId: PropTypes.string.isRequired,
+ projectId: PropTypes.string.isRequired,
+ /* eslint-disable react/forbid-prop-types */
+ users: PropTypes.array.isRequired,
+ labels: PropTypes.array.isRequired,
+ tasks: PropTypes.array.isRequired,
+ attachments: PropTypes.array.isRequired,
+ activities: PropTypes.array.isRequired,
+ allProjectsToLists: PropTypes.array.isRequired,
+ allBoardMemberships: PropTypes.array.isRequired,
+ allLabels: PropTypes.array.isRequired,
+ /* eslint-enable react/forbid-prop-types */
+ canEdit: PropTypes.bool.isRequired,
+ canEditCommentActivities: PropTypes.bool.isRequired,
+ canEditAllCommentActivities: PropTypes.bool.isRequired,
+ onUpdate: PropTypes.func.isRequired,
+ onMove: PropTypes.func.isRequired,
+ onTransfer: PropTypes.func.isRequired,
+ onDuplicate: PropTypes.func.isRequired,
+ onDelete: PropTypes.func.isRequired,
+ onUserAdd: PropTypes.func.isRequired,
+ onUserRemove: PropTypes.func.isRequired,
+ onBoardFetch: PropTypes.func.isRequired,
+ onLabelAdd: PropTypes.func.isRequired,
+ onLabelRemove: PropTypes.func.isRequired,
+ onLabelCreate: PropTypes.func.isRequired,
+ onLabelUpdate: PropTypes.func.isRequired,
+ onLabelMove: PropTypes.func.isRequired,
+ onLabelDelete: PropTypes.func.isRequired,
+ onTaskCreate: PropTypes.func.isRequired,
+ onTaskUpdate: PropTypes.func.isRequired,
+ onTaskMove: PropTypes.func.isRequired,
+ onTaskDelete: PropTypes.func.isRequired,
+ onAttachmentCreate: PropTypes.func.isRequired,
+ onAttachmentUpdate: PropTypes.func.isRequired,
+ onAttachmentDelete: PropTypes.func.isRequired,
+ onActivitiesFetch: PropTypes.func.isRequired,
+ onActivitiesDetailsToggle: PropTypes.func.isRequired,
+ onCommentActivityCreate: PropTypes.func.isRequired,
+ onCommentActivityUpdate: PropTypes.func.isRequired,
+ onCommentActivityDelete: PropTypes.func.isRequired,
+ onClose: PropTypes.func.isRequired,
+};
+
+CardModal.defaultProps = {
+ description: undefined,
+ dueDate: undefined,
+ stopwatch: undefined,
+};
+
+export default CardModal;
diff --git a/client/src/constants/ActionTypes.js b/client/src/constants/ActionTypes.js
index d5724e1..55829bd 100644
--- a/client/src/constants/ActionTypes.js
+++ b/client/src/constants/ActionTypes.js
@@ -1,266 +1,266 @@
-export default {
- /* Router */
-
- LOCATION_CHANGE_HANDLE: 'LOCATION_CHANGE_HANDLE',
- LOCATION_CHANGE_HANDLE__BOARD_FETCH: 'LOCATION_CHANGE_HANDLE__BOARD_FETCH',
-
- /* Socket */
-
- SOCKET_DISCONNECT_HANDLE: 'SOCKET_DISCONNECT_HANDLE',
- SOCKET_RECONNECT_HANDLE: 'SOCKET_RECONNECT_HANDLE',
- SOCKET_RECONNECT_HANDLE__CORE_FETCH: 'SOCKET_RECONNECT_HANDLE__CORE_FETCH',
-
- /* Login */
-
- LOGIN_INITIALIZE: 'LOGIN_INITIALIZE',
- AUTHENTICATE: 'AUTHENTICATE',
- AUTHENTICATE__SUCCESS: 'AUTHENTICATE__SUCCESS',
- AUTHENTICATE__FAILURE: 'AUTHENTICATE__FAILURE',
- USING_OIDC_AUTHENTICATE: 'USING_OIDC_AUTHENTICATE',
- USING_OIDC_AUTHENTICATE__SUCCESS: 'USING_OIDC_AUTHENTICATE__SUCCESS',
- USING_OIDC_AUTHENTICATE__FAILURE: 'USING_OIDC_AUTHENTICATE__FAILURE',
- AUTHENTICATE_ERROR_CLEAR: 'AUTHENTICATE_ERROR_CLEAR',
-
- /* Core */
-
- CORE_INITIALIZE: 'CORE_INITIALIZE',
- CORE_INITIALIZE__CONFIG_FETCH: 'CORE_INITIALIZE__CONFIG_FETCH',
- LOGOUT: 'LOGOUT',
- LOGOUT__ACCESS_TOKEN_INVALIDATE: 'LOGOUT__ACCESS_TOKEN_INVALIDATE',
-
- /* Modals */
-
- MODAL_OPEN: 'MODAL_OPEN',
- MODAL_CLOSE: 'MODAL_CLOSE',
-
- /* Users */
-
- USER_CREATE: 'USER_CREATE',
- USER_CREATE__SUCCESS: 'USER_CREATE__SUCCESS',
- USER_CREATE__FAILURE: 'USER_CREATE__FAILURE',
- USER_CREATE_HANDLE: 'USER_CREATE_HANDLE',
- USER_CREATE_ERROR_CLEAR: 'USER_CREATE_ERROR_CLEAR',
- USER_UPDATE: 'USER_UPDATE',
- USER_UPDATE__SUCCESS: 'USER_UPDATE__SUCCESS',
- USER_UPDATE__FAILURE: 'USER_UPDATE__FAILURE',
- USER_UPDATE_HANDLE: 'USER_UPDATE_HANDLE',
- USER_EMAIL_UPDATE: 'USER_EMAIL_UPDATE',
- USER_EMAIL_UPDATE__SUCCESS: 'USER_EMAIL_UPDATE__SUCCESS',
- USER_EMAIL_UPDATE__FAILURE: 'USER_EMAIL_UPDATE__FAILURE',
- USER_EMAIL_UPDATE_ERROR_CLEAR: 'USER_EMAIL_UPDATE_ERROR_CLEAR',
- USER_PASSWORD_UPDATE: 'USER_PASSWORD_UPDATE',
- USER_PASSWORD_UPDATE__SUCCESS: 'USER_PASSWORD_UPDATE__SUCCESS',
- USER_PASSWORD_UPDATE__FAILURE: 'USER_PASSWORD_UPDATE__FAILURE',
- USER_PASSWORD_UPDATE_ERROR_CLEAR: 'USER_PASSWORD_UPDATE_ERROR_CLEAR',
- USER_USERNAME_UPDATE: 'USER_USERNAME_UPDATE',
- USER_USERNAME_UPDATE__SUCCESS: 'USER_USERNAME_UPDATE__SUCCESS',
- USER_USERNAME_UPDATE__FAILURE: 'USER_USERNAME_UPDATE__FAILURE',
- USER_USERNAME_UPDATE_ERROR_CLEAR: 'USER_USERNAME_UPDATE_ERROR_CLEAR',
- USER_AVATAR_UPDATE: 'USER_AVATAR_UPDATE',
- USER_AVATAR_UPDATE__SUCCESS: 'USER_AVATAR_UPDATE__SUCCESS',
- USER_AVATAR_UPDATE__FAILURE: 'USER_AVATAR_UPDATE__FAILURE',
- USER_DELETE: 'USER_DELETE',
- USER_DELETE__SUCCESS: 'USER_DELETE__SUCCESS',
- USER_DELETE__FAILURE: 'USER_DELETE__FAILURE',
- USER_DELETE_HANDLE: 'USER_DELETE_HANDLE',
- USER_TO_CARD_ADD: 'USER_TO_CARD_ADD',
- USER_TO_CARD_ADD__SUCCESS: 'USER_TO_CARD_ADD__SUCCESS',
- USER_TO_CARD_ADD__FAILURE: 'USER_TO_CARD_ADD__FAILURE',
- USER_TO_CARD_ADD_HANDLE: 'USER_TO_CARD_ADD_HANDLE',
- USER_FROM_CARD_REMOVE: 'USER_FROM_CARD_REMOVE',
- USER_FROM_CARD_REMOVE__SUCCESS: 'USER_FROM_CARD_REMOVE__SUCCESS',
- USER_FROM_CARD_REMOVE__FAILURE: 'USER_FROM_CARD_REMOVE__FAILURE',
- USER_FROM_CARD_REMOVE_HANDLE: 'USER_FROM_CARD_REMOVE_HANDLE',
- USER_TO_BOARD_FILTER_ADD: 'USER_TO_BOARD_FILTER_ADD',
- USER_FROM_BOARD_FILTER_REMOVE: 'USER_FROM_BOARD_FILTER_REMOVE',
-
- /* Projects */
-
- PROJECT_CREATE: 'PROJECT_CREATE',
- PROJECT_CREATE__SUCCESS: 'PROJECT_CREATE__SUCCESS',
- PROJECT_CREATE__FAILURE: 'PROJECT_CREATE__FAILURE',
- PROJECT_CREATE_HANDLE: 'PROJECT_CREATE_HANDLE',
- PROJECT_UPDATE: 'PROJECT_UPDATE',
- PROJECT_UPDATE__SUCCESS: 'PROJECT_UPDATE__SUCCESS',
- PROJECT_UPDATE__FAILURE: 'PROJECT_UPDATE__FAILURE',
- PROJECT_UPDATE_HANDLE: 'PROJECT_UPDATE_HANDLE',
- PROJECT_BACKGROUND_IMAGE_UPDATE: 'PROJECT_BACKGROUND_IMAGE_UPDATE',
- PROJECT_BACKGROUND_IMAGE_UPDATE__SUCCESS: 'PROJECT_BACKGROUND_IMAGE_UPDATE__SUCCESS',
- PROJECT_BACKGROUND_IMAGE_UPDATE__FAILURE: 'PROJECT_BACKGROUND_IMAGE_UPDATE__FAILURE',
- PROJECT_DELETE: 'PROJECT_DELETE',
- PROJECT_DELETE__SUCCESS: 'PROJECT_DELETE__SUCCESS',
- PROJECT_DELETE__FAILURE: 'PROJECT_DELETE__FAILURE',
- PROJECT_DELETE_HANDLE: 'PROJECT_DELETE_HANDLE',
-
- /* Project managers */
-
- PROJECT_MANAGER_CREATE: 'PROJECT_MANAGER_CREATE',
- PROJECT_MANAGER_CREATE__SUCCESS: 'PROJECT_MANAGER_CREATE__SUCCESS',
- PROJECT_MANAGER_CREATE__FAILURE: 'PROJECT_MANAGER_CREATE__FAILURE',
- PROJECT_MANAGER_CREATE_HANDLE: 'PROJECT_MANAGER_CREATE_HANDLE',
- PROJECT_MANAGER_CREATE_HANDLE__PROJECT_FETCH: 'PROJECT_MANAGER_CREATE_HANDLE__PROJECT_FETCH',
- PROJECT_MANAGER_DELETE: 'PROJECT_MANAGER_DELETE',
- PROJECT_MANAGER_DELETE__SUCCESS: 'PROJECT_MANAGER_DELETE__SUCCESS',
- PROJECT_MANAGER_DELETE__FAILURE: 'PROJECT_MANAGER_DELETE__FAILURE',
- PROJECT_MANAGER_DELETE_HANDLE: 'PROJECT_MANAGER_DELETE_HANDLE',
-
- /* Boards */
-
- BOARD_CREATE: 'BOARD_CREATE',
- BOARD_CREATE__SUCCESS: 'BOARD_CREATE__SUCCESS',
- BOARD_CREATE__FAILURE: 'BOARD_CREATE__FAILURE',
- BOARD_CREATE_HANDLE: 'BOARD_CREATE_HANDLE',
- BOARD_FETCH: 'BOARD_FETCH',
- BOARD_FETCH__SUCCESS: 'BOARD_FETCH__SUCCESS',
- BOARD_FETCH__FAILURE: 'BOARD_FETCH__FAILURE',
- BOARD_UPDATE: 'BOARD_UPDATE',
- BOARD_UPDATE__SUCCESS: 'BOARD_UPDATE__SUCCESS',
- BOARD_UPDATE__FAILURE: 'BOARD_UPDATE__FAILURE',
- BOARD_UPDATE_HANDLE: 'BOARD_UPDATE_HANDLE',
- BOARD_DELETE: 'BOARD_DELETE',
- BOARD_DELETE__SUCCESS: 'BOARD_DELETE__SUCCESS',
- BOARD_DELETE__FAILURE: 'BOARD_DELETE__FAILURE',
- BOARD_DELETE_HANDLE: 'BOARD_DELETE_HANDLE',
-
- /* Board memberships */
-
- BOARD_MEMBERSHIP_CREATE: 'BOARD_MEMBERSHIP_CREATE',
- BOARD_MEMBERSHIP_CREATE__SUCCESS: 'BOARD_MEMBERSHIP_CREATE__SUCCESS',
- BOARD_MEMBERSHIP_CREATE__FAILURE: 'BOARD_MEMBERSHIP_CREATE__FAILURE',
- BOARD_MEMBERSHIP_CREATE_HANDLE: 'BOARD_MEMBERSHIP_CREATE_HANDLE',
- BOARD_MEMBERSHIP_CREATE_HANDLE__PROJECT_FETCH: 'BOARD_MEMBERSHIP_CREATE_HANDLE__PROJECT_FETCH',
- BOARD_MEMBERSHIP_UPDATE: 'BOARD_MEMBERSHIP_UPDATE',
- BOARD_MEMBERSHIP_UPDATE__SUCCESS: 'BOARD_MEMBERSHIP_UPDATE__SUCCESS',
- BOARD_MEMBERSHIP_UPDATE__FAILURE: 'BOARD_MEMBERSHIP_UPDATE__FAILURE',
- BOARD_MEMBERSHIP_UPDATE_HANDLE: 'BOARD_MEMBERSHIP_UPDATE_HANDLE',
- BOARD_MEMBERSHIP_DELETE: 'BOARD_MEMBERSHIP_DELETE',
- BOARD_MEMBERSHIP_DELETE__SUCCESS: 'BOARD_MEMBERSHIP_DELETE__SUCCESS',
- BOARD_MEMBERSHIP_DELETE__FAILURE: 'BOARD_MEMBERSHIP_DELETE__FAILURE',
- BOARD_MEMBERSHIP_DELETE_HANDLE: 'BOARD_MEMBERSHIP_DELETE_HANDLE',
-
- /* Labels */
-
- LABEL_CREATE: 'LABEL_CREATE',
- LABEL_CREATE__SUCCESS: 'LABEL_CREATE__SUCCESS',
- LABEL_CREATE__FAILURE: 'LABEL_CREATE__FAILURE',
- LABEL_CREATE_HANDLE: 'LABEL_CREATE_HANDLE',
- LABEL_UPDATE: 'LABEL_UPDATE',
- LABEL_UPDATE__SUCCESS: 'LABEL_UPDATE__SUCCESS',
- LABEL_UPDATE__FAILURE: 'LABEL_UPDATE__FAILURE',
- LABEL_UPDATE_HANDLE: 'LABEL_UPDATE_HANDLE',
- LABEL_DELETE: 'LABEL_DELETE',
- LABEL_DELETE__SUCCESS: 'LABEL_DELETE__SUCCESS',
- LABEL_DELETE__FAILURE: 'LABEL_DELETE__FAILURE',
- LABEL_DELETE_HANDLE: 'LABEL_DELETE_HANDLE',
- LABEL_TO_CARD_ADD: 'LABEL_TO_CARD_ADD',
- LABEL_TO_CARD_ADD__SUCCESS: 'LABEL_TO_CARD_ADD__SUCCESS',
- LABEL_TO_CARD_ADD__FAILURE: 'LABEL_TO_CARD_ADD__FAILURE',
- LABEL_TO_CARD_ADD_HANDLE: 'LABEL_TO_CARD_ADD_HANDLE',
- LABEL_FROM_CARD_REMOVE: 'LABEL_FROM_CARD_REMOVE',
- LABEL_FROM_CARD_REMOVE__SUCCESS: 'LABEL_FROM_CARD_REMOVE__SUCCESS',
- LABEL_FROM_CARD_REMOVE__FAILURE: 'LABEL_FROM_CARD_REMOVE__FAILURE',
- LABEL_FROM_CARD_REMOVE_HANDLE: 'LABEL_FROM_CARD_REMOVE_HANDLE',
- LABEL_TO_BOARD_FILTER_ADD: 'LABEL_TO_BOARD_FILTER_ADD',
- LABEL_FROM_BOARD_FILTER_REMOVE: 'LABEL_FROM_BOARD_FILTER_REMOVE',
-
- /* Lists */
-
- LIST_CREATE: 'LIST_CREATE',
- LIST_CREATE__SUCCESS: 'LIST_CREATE__SUCCESS',
- LIST_CREATE__FAILURE: 'LIST_CREATE__FAILURE',
- LIST_CREATE_HANDLE: 'LIST_CREATE_HANDLE',
- LIST_UPDATE: 'LIST_UPDATE',
- LIST_UPDATE__SUCCESS: 'LIST_UPDATE__SUCCESS',
- LIST_UPDATE__FAILURE: 'LIST_UPDATE__FAILURE',
- LIST_UPDATE_HANDLE: 'LIST_UPDATE_HANDLE',
- LIST_DELETE: 'LIST_DELETE',
- LIST_DELETE__SUCCESS: 'LIST_DELETE__SUCCESS',
- LIST_DELETE__FAILURE: 'LIST_DELETE__FAILURE',
- LIST_DELETE_HANDLE: 'LIST_DELETE_HANDLE',
-
- /* Cards */
-
- CARD_CREATE: 'CARD_CREATE',
- CARD_CREATE__SUCCESS: 'CARD_CREATE__SUCCESS',
- CARD_CREATE__FAILURE: 'CARD_CREATE__FAILURE',
- CARD_CREATE_HANDLE: 'CARD_CREATE_HANDLE',
- CARD_FETCH: 'CARD_FETCH',
- CARD_FETCH__SUCCESS: 'CARD_FETCH__SUCCESS',
- CARD_FETCH__FAILURE: 'CARD_FETCH__FAILURE',
- CARD_UPDATE: 'CARD_UPDATE',
- CARD_UPDATE__SUCCESS: 'CARD_UPDATE__SUCCESS',
- CARD_UPDATE__FAILURE: 'CARD_UPDATE__FAILURE',
- CARD_UPDATE_HANDLE: 'CARD_UPDATE_HANDLE',
- CARD_TRANSFER: 'CARD_TRANSFER',
- CARD_TRANSFER__SUCCESS: 'CARD_TRANSFER__SUCCESS',
- CARD_TRANSFER__FAILURE: 'CARD_TRANSFER__FAILURE',
- CARD_DUPLICATE: 'CARD_DUPLICATE',
- CARD_DUPLICATE__SUCCESS: 'CARD_DUPLICATE__SUCCESS',
- CARD_DUPLICATE__FAILURE: 'CARD_DUPLICATE__FAILURE',
- CARD_DELETE: 'CARD_DELETE',
- CARD_DELETE__SUCCESS: 'CARD_DELETE__SUCCESS',
- CARD_DELETE__FAILURE: 'CARD_DELETE__FAILURE',
- CARD_DELETE_HANDLE: 'CARD_DELETE_HANDLE',
-
- /* Tasks */
-
- TASK_CREATE: 'TASK_CREATE',
- TASK_CREATE__SUCCESS: 'TASK_CREATE__SUCCESS',
- TASK_CREATE__FAILURE: 'TASK_CREATE__FAILURE',
- TASK_CREATE_HANDLE: 'TASK_CREATE_HANDLE',
- TASK_UPDATE: 'TASK_UPDATE',
- TASK_UPDATE__SUCCESS: 'TASK_UPDATE__SUCCESS',
- TASK_UPDATE__FAILURE: 'TASK_UPDATE__FAILURE',
- TASK_UPDATE_HANDLE: 'TASK_UPDATE_HANDLE',
- TASK_DELETE: 'TASK_DELETE',
- TASK_DELETE__SUCCESS: 'TASK_DELETE__SUCCESS',
- TASK_DELETE__FAILURE: 'TASK_DELETE__FAILURE',
- TASK_DELETE_HANDLE: 'TASK_DELETE_HANDLE',
-
- /* Attachments */
-
- ATTACHMENT_CREATE: 'ATTACHMENT_CREATE',
- ATTACHMENT_CREATE__SUCCESS: 'ATTACHMENT_CREATE__SUCCESS',
- ATTACHMENT_CREATE__FAILURE: 'ATTACHMENT_CREATE__FAILURE',
- ATTACHMENT_CREATE_HANDLE: 'ATTACHMENT_CREATE_HANDLE',
- ATTACHMENT_UPDATE: 'ATTACHMENT_UPDATE',
- ATTACHMENT_UPDATE__SUCCESS: 'ATTACHMENT_UPDATE__SUCCESS',
- ATTACHMENT_UPDATE__FAILURE: 'ATTACHMENT_UPDATE__FAILURE',
- ATTACHMENT_UPDATE_HANDLE: 'ATTACHMENT_UPDATE_HANDLE',
- ATTACHMENT_DELETE: 'ATTACHMENT_DELETE',
- ATTACHMENT_DELETE__SUCCESS: 'ATTACHMENT_DELETE__SUCCESS',
- ATTACHMENT_DELETE__FAILURE: 'ATTACHMENT_DELETE__FAILURE',
- ATTACHMENT_DELETE_HANDLE: 'ATTACHMENT_DELETE_HANDLE',
-
- /* Activities */
-
- ACTIVITIES_FETCH: 'ACTIVITIES_FETCH',
- ACTIVITIES_FETCH__SUCCESS: 'ACTIVITIES_FETCH__SUCCESS',
- ACTIVITIES_FETCH__FAILURE: 'ACTIVITIES_FETCH__FAILURE',
- ACTIVITIES_DETAILS_TOGGLE: 'ACTIVITIES_DETAILS_TOGGLE',
- ACTIVITIES_DETAILS_TOGGLE__SUCCESS: 'ACTIVITIES_DETAILS_TOGGLE__SUCCESS',
- ACTIVITIES_DETAILS_TOGGLE__FAILURE: 'ACTIVITIES_DETAILS_TOGGLE__FAILURE',
- ACTIVITY_CREATE_HANDLE: 'ACTIVITY_CREATE_HANDLE',
- ACTIVITY_UPDATE_HANDLE: 'ACTIVITY_UPDATE_HANDLE',
- ACTIVITY_DELETE_HANDLE: 'ACTIVITY_DELETE_HANDLE',
-
- /* Comment activities */
-
- COMMENT_ACTIVITY_CREATE: 'COMMENT_ACTIVITY_CREATE',
- COMMENT_ACTIVITY_CREATE__SUCCESS: 'COMMENT_ACTIVITY_CREATE__SUCCESS',
- COMMENT_ACTIVITY_CREATE__FAILURE: 'COMMENT_ACTIVITY_CREATE__FAILURE',
- COMMENT_ACTIVITY_UPDATE: 'COMMENT_ACTIVITY_UPDATE',
- COMMENT_ACTIVITY_UPDATE__SUCCESS: 'COMMENT_ACTIVITY_UPDATE__SUCCESS',
- COMMENT_ACTIVITY_UPDATE__FAILURE: 'COMMENT_ACTIVITY_UPDATE__FAILURE',
- COMMENT_ACTIVITY_DELETE: 'COMMENT_ACTIVITY_DELETE',
- COMMENT_ACTIVITY_DELETE__SUCCESS: 'COMMENT_ACTIVITY_DELETE__SUCCESS',
- COMMENT_ACTIVITY_DELETE__FAILURE: 'COMMENT_ACTIVITY_DELETE__FAILURE',
-
- /* Notifications */
-
- NOTIFICATION_CREATE_HANDLE: 'NOTIFICATION_CREATE_HANDLE',
- NOTIFICATION_DELETE: 'NOTIFICATION_DELETE',
- NOTIFICATION_DELETE__SUCCESS: 'NOTIFICATION_DELETE__SUCCESS',
- NOTIFICATION_DELETE__FAILURE: 'NOTIFICATION_DELETE__FAILURE',
- NOTIFICATION_DELETE_HANDLE: 'NOTIFICATION_DELETE_HANDLE',
-};
+export default {
+ /* Router */
+
+ LOCATION_CHANGE_HANDLE: 'LOCATION_CHANGE_HANDLE',
+ LOCATION_CHANGE_HANDLE__BOARD_FETCH: 'LOCATION_CHANGE_HANDLE__BOARD_FETCH',
+
+ /* Socket */
+
+ SOCKET_DISCONNECT_HANDLE: 'SOCKET_DISCONNECT_HANDLE',
+ SOCKET_RECONNECT_HANDLE: 'SOCKET_RECONNECT_HANDLE',
+ SOCKET_RECONNECT_HANDLE__CORE_FETCH: 'SOCKET_RECONNECT_HANDLE__CORE_FETCH',
+
+ /* Login */
+
+ LOGIN_INITIALIZE: 'LOGIN_INITIALIZE',
+ AUTHENTICATE: 'AUTHENTICATE',
+ AUTHENTICATE__SUCCESS: 'AUTHENTICATE__SUCCESS',
+ AUTHENTICATE__FAILURE: 'AUTHENTICATE__FAILURE',
+ USING_OIDC_AUTHENTICATE: 'USING_OIDC_AUTHENTICATE',
+ USING_OIDC_AUTHENTICATE__SUCCESS: 'USING_OIDC_AUTHENTICATE__SUCCESS',
+ USING_OIDC_AUTHENTICATE__FAILURE: 'USING_OIDC_AUTHENTICATE__FAILURE',
+ AUTHENTICATE_ERROR_CLEAR: 'AUTHENTICATE_ERROR_CLEAR',
+
+ /* Core */
+
+ CORE_INITIALIZE: 'CORE_INITIALIZE',
+ CORE_INITIALIZE__CONFIG_FETCH: 'CORE_INITIALIZE__CONFIG_FETCH',
+ LOGOUT: 'LOGOUT',
+ LOGOUT__ACCESS_TOKEN_INVALIDATE: 'LOGOUT__ACCESS_TOKEN_INVALIDATE',
+
+ /* Modals */
+
+ MODAL_OPEN: 'MODAL_OPEN',
+ MODAL_CLOSE: 'MODAL_CLOSE',
+
+ /* Users */
+
+ USER_CREATE: 'USER_CREATE',
+ USER_CREATE__SUCCESS: 'USER_CREATE__SUCCESS',
+ USER_CREATE__FAILURE: 'USER_CREATE__FAILURE',
+ USER_CREATE_HANDLE: 'USER_CREATE_HANDLE',
+ USER_CREATE_ERROR_CLEAR: 'USER_CREATE_ERROR_CLEAR',
+ USER_UPDATE: 'USER_UPDATE',
+ USER_UPDATE__SUCCESS: 'USER_UPDATE__SUCCESS',
+ USER_UPDATE__FAILURE: 'USER_UPDATE__FAILURE',
+ USER_UPDATE_HANDLE: 'USER_UPDATE_HANDLE',
+ USER_EMAIL_UPDATE: 'USER_EMAIL_UPDATE',
+ USER_EMAIL_UPDATE__SUCCESS: 'USER_EMAIL_UPDATE__SUCCESS',
+ USER_EMAIL_UPDATE__FAILURE: 'USER_EMAIL_UPDATE__FAILURE',
+ USER_EMAIL_UPDATE_ERROR_CLEAR: 'USER_EMAIL_UPDATE_ERROR_CLEAR',
+ USER_PASSWORD_UPDATE: 'USER_PASSWORD_UPDATE',
+ USER_PASSWORD_UPDATE__SUCCESS: 'USER_PASSWORD_UPDATE__SUCCESS',
+ USER_PASSWORD_UPDATE__FAILURE: 'USER_PASSWORD_UPDATE__FAILURE',
+ USER_PASSWORD_UPDATE_ERROR_CLEAR: 'USER_PASSWORD_UPDATE_ERROR_CLEAR',
+ USER_USERNAME_UPDATE: 'USER_USERNAME_UPDATE',
+ USER_USERNAME_UPDATE__SUCCESS: 'USER_USERNAME_UPDATE__SUCCESS',
+ USER_USERNAME_UPDATE__FAILURE: 'USER_USERNAME_UPDATE__FAILURE',
+ USER_USERNAME_UPDATE_ERROR_CLEAR: 'USER_USERNAME_UPDATE_ERROR_CLEAR',
+ USER_AVATAR_UPDATE: 'USER_AVATAR_UPDATE',
+ USER_AVATAR_UPDATE__SUCCESS: 'USER_AVATAR_UPDATE__SUCCESS',
+ USER_AVATAR_UPDATE__FAILURE: 'USER_AVATAR_UPDATE__FAILURE',
+ USER_DELETE: 'USER_DELETE',
+ USER_DELETE__SUCCESS: 'USER_DELETE__SUCCESS',
+ USER_DELETE__FAILURE: 'USER_DELETE__FAILURE',
+ USER_DELETE_HANDLE: 'USER_DELETE_HANDLE',
+ USER_TO_CARD_ADD: 'USER_TO_CARD_ADD',
+ USER_TO_CARD_ADD__SUCCESS: 'USER_TO_CARD_ADD__SUCCESS',
+ USER_TO_CARD_ADD__FAILURE: 'USER_TO_CARD_ADD__FAILURE',
+ USER_TO_CARD_ADD_HANDLE: 'USER_TO_CARD_ADD_HANDLE',
+ USER_FROM_CARD_REMOVE: 'USER_FROM_CARD_REMOVE',
+ USER_FROM_CARD_REMOVE__SUCCESS: 'USER_FROM_CARD_REMOVE__SUCCESS',
+ USER_FROM_CARD_REMOVE__FAILURE: 'USER_FROM_CARD_REMOVE__FAILURE',
+ USER_FROM_CARD_REMOVE_HANDLE: 'USER_FROM_CARD_REMOVE_HANDLE',
+ USER_TO_BOARD_FILTER_ADD: 'USER_TO_BOARD_FILTER_ADD',
+ USER_FROM_BOARD_FILTER_REMOVE: 'USER_FROM_BOARD_FILTER_REMOVE',
+
+ /* Projects */
+
+ PROJECT_CREATE: 'PROJECT_CREATE',
+ PROJECT_CREATE__SUCCESS: 'PROJECT_CREATE__SUCCESS',
+ PROJECT_CREATE__FAILURE: 'PROJECT_CREATE__FAILURE',
+ PROJECT_CREATE_HANDLE: 'PROJECT_CREATE_HANDLE',
+ PROJECT_UPDATE: 'PROJECT_UPDATE',
+ PROJECT_UPDATE__SUCCESS: 'PROJECT_UPDATE__SUCCESS',
+ PROJECT_UPDATE__FAILURE: 'PROJECT_UPDATE__FAILURE',
+ PROJECT_UPDATE_HANDLE: 'PROJECT_UPDATE_HANDLE',
+ PROJECT_BACKGROUND_IMAGE_UPDATE: 'PROJECT_BACKGROUND_IMAGE_UPDATE',
+ PROJECT_BACKGROUND_IMAGE_UPDATE__SUCCESS: 'PROJECT_BACKGROUND_IMAGE_UPDATE__SUCCESS',
+ PROJECT_BACKGROUND_IMAGE_UPDATE__FAILURE: 'PROJECT_BACKGROUND_IMAGE_UPDATE__FAILURE',
+ PROJECT_DELETE: 'PROJECT_DELETE',
+ PROJECT_DELETE__SUCCESS: 'PROJECT_DELETE__SUCCESS',
+ PROJECT_DELETE__FAILURE: 'PROJECT_DELETE__FAILURE',
+ PROJECT_DELETE_HANDLE: 'PROJECT_DELETE_HANDLE',
+
+ /* Project managers */
+
+ PROJECT_MANAGER_CREATE: 'PROJECT_MANAGER_CREATE',
+ PROJECT_MANAGER_CREATE__SUCCESS: 'PROJECT_MANAGER_CREATE__SUCCESS',
+ PROJECT_MANAGER_CREATE__FAILURE: 'PROJECT_MANAGER_CREATE__FAILURE',
+ PROJECT_MANAGER_CREATE_HANDLE: 'PROJECT_MANAGER_CREATE_HANDLE',
+ PROJECT_MANAGER_CREATE_HANDLE__PROJECT_FETCH: 'PROJECT_MANAGER_CREATE_HANDLE__PROJECT_FETCH',
+ PROJECT_MANAGER_DELETE: 'PROJECT_MANAGER_DELETE',
+ PROJECT_MANAGER_DELETE__SUCCESS: 'PROJECT_MANAGER_DELETE__SUCCESS',
+ PROJECT_MANAGER_DELETE__FAILURE: 'PROJECT_MANAGER_DELETE__FAILURE',
+ PROJECT_MANAGER_DELETE_HANDLE: 'PROJECT_MANAGER_DELETE_HANDLE',
+
+ /* Boards */
+
+ BOARD_CREATE: 'BOARD_CREATE',
+ BOARD_CREATE__SUCCESS: 'BOARD_CREATE__SUCCESS',
+ BOARD_CREATE__FAILURE: 'BOARD_CREATE__FAILURE',
+ BOARD_CREATE_HANDLE: 'BOARD_CREATE_HANDLE',
+ BOARD_FETCH: 'BOARD_FETCH',
+ BOARD_FETCH__SUCCESS: 'BOARD_FETCH__SUCCESS',
+ BOARD_FETCH__FAILURE: 'BOARD_FETCH__FAILURE',
+ BOARD_UPDATE: 'BOARD_UPDATE',
+ BOARD_UPDATE__SUCCESS: 'BOARD_UPDATE__SUCCESS',
+ BOARD_UPDATE__FAILURE: 'BOARD_UPDATE__FAILURE',
+ BOARD_UPDATE_HANDLE: 'BOARD_UPDATE_HANDLE',
+ BOARD_DELETE: 'BOARD_DELETE',
+ BOARD_DELETE__SUCCESS: 'BOARD_DELETE__SUCCESS',
+ BOARD_DELETE__FAILURE: 'BOARD_DELETE__FAILURE',
+ BOARD_DELETE_HANDLE: 'BOARD_DELETE_HANDLE',
+
+ /* Board memberships */
+
+ BOARD_MEMBERSHIP_CREATE: 'BOARD_MEMBERSHIP_CREATE',
+ BOARD_MEMBERSHIP_CREATE__SUCCESS: 'BOARD_MEMBERSHIP_CREATE__SUCCESS',
+ BOARD_MEMBERSHIP_CREATE__FAILURE: 'BOARD_MEMBERSHIP_CREATE__FAILURE',
+ BOARD_MEMBERSHIP_CREATE_HANDLE: 'BOARD_MEMBERSHIP_CREATE_HANDLE',
+ BOARD_MEMBERSHIP_CREATE_HANDLE__PROJECT_FETCH: 'BOARD_MEMBERSHIP_CREATE_HANDLE__PROJECT_FETCH',
+ BOARD_MEMBERSHIP_UPDATE: 'BOARD_MEMBERSHIP_UPDATE',
+ BOARD_MEMBERSHIP_UPDATE__SUCCESS: 'BOARD_MEMBERSHIP_UPDATE__SUCCESS',
+ BOARD_MEMBERSHIP_UPDATE__FAILURE: 'BOARD_MEMBERSHIP_UPDATE__FAILURE',
+ BOARD_MEMBERSHIP_UPDATE_HANDLE: 'BOARD_MEMBERSHIP_UPDATE_HANDLE',
+ BOARD_MEMBERSHIP_DELETE: 'BOARD_MEMBERSHIP_DELETE',
+ BOARD_MEMBERSHIP_DELETE__SUCCESS: 'BOARD_MEMBERSHIP_DELETE__SUCCESS',
+ BOARD_MEMBERSHIP_DELETE__FAILURE: 'BOARD_MEMBERSHIP_DELETE__FAILURE',
+ BOARD_MEMBERSHIP_DELETE_HANDLE: 'BOARD_MEMBERSHIP_DELETE_HANDLE',
+
+ /* Labels */
+
+ LABEL_CREATE: 'LABEL_CREATE',
+ LABEL_CREATE__SUCCESS: 'LABEL_CREATE__SUCCESS',
+ LABEL_CREATE__FAILURE: 'LABEL_CREATE__FAILURE',
+ LABEL_CREATE_HANDLE: 'LABEL_CREATE_HANDLE',
+ LABEL_UPDATE: 'LABEL_UPDATE',
+ LABEL_UPDATE__SUCCESS: 'LABEL_UPDATE__SUCCESS',
+ LABEL_UPDATE__FAILURE: 'LABEL_UPDATE__FAILURE',
+ LABEL_UPDATE_HANDLE: 'LABEL_UPDATE_HANDLE',
+ LABEL_DELETE: 'LABEL_DELETE',
+ LABEL_DELETE__SUCCESS: 'LABEL_DELETE__SUCCESS',
+ LABEL_DELETE__FAILURE: 'LABEL_DELETE__FAILURE',
+ LABEL_DELETE_HANDLE: 'LABEL_DELETE_HANDLE',
+ LABEL_TO_CARD_ADD: 'LABEL_TO_CARD_ADD',
+ LABEL_TO_CARD_ADD__SUCCESS: 'LABEL_TO_CARD_ADD__SUCCESS',
+ LABEL_TO_CARD_ADD__FAILURE: 'LABEL_TO_CARD_ADD__FAILURE',
+ LABEL_TO_CARD_ADD_HANDLE: 'LABEL_TO_CARD_ADD_HANDLE',
+ LABEL_FROM_CARD_REMOVE: 'LABEL_FROM_CARD_REMOVE',
+ LABEL_FROM_CARD_REMOVE__SUCCESS: 'LABEL_FROM_CARD_REMOVE__SUCCESS',
+ LABEL_FROM_CARD_REMOVE__FAILURE: 'LABEL_FROM_CARD_REMOVE__FAILURE',
+ LABEL_FROM_CARD_REMOVE_HANDLE: 'LABEL_FROM_CARD_REMOVE_HANDLE',
+ LABEL_TO_BOARD_FILTER_ADD: 'LABEL_TO_BOARD_FILTER_ADD',
+ LABEL_FROM_BOARD_FILTER_REMOVE: 'LABEL_FROM_BOARD_FILTER_REMOVE',
+
+ /* Lists */
+
+ LIST_CREATE: 'LIST_CREATE',
+ LIST_CREATE__SUCCESS: 'LIST_CREATE__SUCCESS',
+ LIST_CREATE__FAILURE: 'LIST_CREATE__FAILURE',
+ LIST_CREATE_HANDLE: 'LIST_CREATE_HANDLE',
+ LIST_UPDATE: 'LIST_UPDATE',
+ LIST_UPDATE__SUCCESS: 'LIST_UPDATE__SUCCESS',
+ LIST_UPDATE__FAILURE: 'LIST_UPDATE__FAILURE',
+ LIST_UPDATE_HANDLE: 'LIST_UPDATE_HANDLE',
+ LIST_DELETE: 'LIST_DELETE',
+ LIST_DELETE__SUCCESS: 'LIST_DELETE__SUCCESS',
+ LIST_DELETE__FAILURE: 'LIST_DELETE__FAILURE',
+ LIST_DELETE_HANDLE: 'LIST_DELETE_HANDLE',
+
+ /* Cards */
+
+ CARD_CREATE: 'CARD_CREATE',
+ CARD_CREATE__SUCCESS: 'CARD_CREATE__SUCCESS',
+ CARD_CREATE__FAILURE: 'CARD_CREATE__FAILURE',
+ CARD_CREATE_HANDLE: 'CARD_CREATE_HANDLE',
+ CARD_FETCH: 'CARD_FETCH',
+ CARD_FETCH__SUCCESS: 'CARD_FETCH__SUCCESS',
+ CARD_FETCH__FAILURE: 'CARD_FETCH__FAILURE',
+ CARD_UPDATE: 'CARD_UPDATE',
+ CARD_UPDATE__SUCCESS: 'CARD_UPDATE__SUCCESS',
+ CARD_UPDATE__FAILURE: 'CARD_UPDATE__FAILURE',
+ CARD_UPDATE_HANDLE: 'CARD_UPDATE_HANDLE',
+ CARD_TRANSFER: 'CARD_TRANSFER',
+ CARD_TRANSFER__SUCCESS: 'CARD_TRANSFER__SUCCESS',
+ CARD_TRANSFER__FAILURE: 'CARD_TRANSFER__FAILURE',
+ CARD_DUPLICATE: 'CARD_DUPLICATE',
+ CARD_DUPLICATE__SUCCESS: 'CARD_DUPLICATE__SUCCESS',
+ CARD_DUPLICATE__FAILURE: 'CARD_DUPLICATE__FAILURE',
+ CARD_DELETE: 'CARD_DELETE',
+ CARD_DELETE__SUCCESS: 'CARD_DELETE__SUCCESS',
+ CARD_DELETE__FAILURE: 'CARD_DELETE__FAILURE',
+ CARD_DELETE_HANDLE: 'CARD_DELETE_HANDLE',
+
+ /* Tasks */
+
+ TASK_CREATE: 'TASK_CREATE',
+ TASK_CREATE__SUCCESS: 'TASK_CREATE__SUCCESS',
+ TASK_CREATE__FAILURE: 'TASK_CREATE__FAILURE',
+ TASK_CREATE_HANDLE: 'TASK_CREATE_HANDLE',
+ TASK_UPDATE: 'TASK_UPDATE',
+ TASK_UPDATE__SUCCESS: 'TASK_UPDATE__SUCCESS',
+ TASK_UPDATE__FAILURE: 'TASK_UPDATE__FAILURE',
+ TASK_UPDATE_HANDLE: 'TASK_UPDATE_HANDLE',
+ TASK_DELETE: 'TASK_DELETE',
+ TASK_DELETE__SUCCESS: 'TASK_DELETE__SUCCESS',
+ TASK_DELETE__FAILURE: 'TASK_DELETE__FAILURE',
+ TASK_DELETE_HANDLE: 'TASK_DELETE_HANDLE',
+
+ /* Attachments */
+
+ ATTACHMENT_CREATE: 'ATTACHMENT_CREATE',
+ ATTACHMENT_CREATE__SUCCESS: 'ATTACHMENT_CREATE__SUCCESS',
+ ATTACHMENT_CREATE__FAILURE: 'ATTACHMENT_CREATE__FAILURE',
+ ATTACHMENT_CREATE_HANDLE: 'ATTACHMENT_CREATE_HANDLE',
+ ATTACHMENT_UPDATE: 'ATTACHMENT_UPDATE',
+ ATTACHMENT_UPDATE__SUCCESS: 'ATTACHMENT_UPDATE__SUCCESS',
+ ATTACHMENT_UPDATE__FAILURE: 'ATTACHMENT_UPDATE__FAILURE',
+ ATTACHMENT_UPDATE_HANDLE: 'ATTACHMENT_UPDATE_HANDLE',
+ ATTACHMENT_DELETE: 'ATTACHMENT_DELETE',
+ ATTACHMENT_DELETE__SUCCESS: 'ATTACHMENT_DELETE__SUCCESS',
+ ATTACHMENT_DELETE__FAILURE: 'ATTACHMENT_DELETE__FAILURE',
+ ATTACHMENT_DELETE_HANDLE: 'ATTACHMENT_DELETE_HANDLE',
+
+ /* Activities */
+
+ ACTIVITIES_FETCH: 'ACTIVITIES_FETCH',
+ ACTIVITIES_FETCH__SUCCESS: 'ACTIVITIES_FETCH__SUCCESS',
+ ACTIVITIES_FETCH__FAILURE: 'ACTIVITIES_FETCH__FAILURE',
+ ACTIVITIES_DETAILS_TOGGLE: 'ACTIVITIES_DETAILS_TOGGLE',
+ ACTIVITIES_DETAILS_TOGGLE__SUCCESS: 'ACTIVITIES_DETAILS_TOGGLE__SUCCESS',
+ ACTIVITIES_DETAILS_TOGGLE__FAILURE: 'ACTIVITIES_DETAILS_TOGGLE__FAILURE',
+ ACTIVITY_CREATE_HANDLE: 'ACTIVITY_CREATE_HANDLE',
+ ACTIVITY_UPDATE_HANDLE: 'ACTIVITY_UPDATE_HANDLE',
+ ACTIVITY_DELETE_HANDLE: 'ACTIVITY_DELETE_HANDLE',
+
+ /* Comment activities */
+
+ COMMENT_ACTIVITY_CREATE: 'COMMENT_ACTIVITY_CREATE',
+ COMMENT_ACTIVITY_CREATE__SUCCESS: 'COMMENT_ACTIVITY_CREATE__SUCCESS',
+ COMMENT_ACTIVITY_CREATE__FAILURE: 'COMMENT_ACTIVITY_CREATE__FAILURE',
+ COMMENT_ACTIVITY_UPDATE: 'COMMENT_ACTIVITY_UPDATE',
+ COMMENT_ACTIVITY_UPDATE__SUCCESS: 'COMMENT_ACTIVITY_UPDATE__SUCCESS',
+ COMMENT_ACTIVITY_UPDATE__FAILURE: 'COMMENT_ACTIVITY_UPDATE__FAILURE',
+ COMMENT_ACTIVITY_DELETE: 'COMMENT_ACTIVITY_DELETE',
+ COMMENT_ACTIVITY_DELETE__SUCCESS: 'COMMENT_ACTIVITY_DELETE__SUCCESS',
+ COMMENT_ACTIVITY_DELETE__FAILURE: 'COMMENT_ACTIVITY_DELETE__FAILURE',
+
+ /* Notifications */
+
+ NOTIFICATION_CREATE_HANDLE: 'NOTIFICATION_CREATE_HANDLE',
+ NOTIFICATION_DELETE: 'NOTIFICATION_DELETE',
+ NOTIFICATION_DELETE__SUCCESS: 'NOTIFICATION_DELETE__SUCCESS',
+ NOTIFICATION_DELETE__FAILURE: 'NOTIFICATION_DELETE__FAILURE',
+ NOTIFICATION_DELETE_HANDLE: 'NOTIFICATION_DELETE_HANDLE',
+};
diff --git a/client/src/constants/EntryActionTypes.js b/client/src/constants/EntryActionTypes.js
index 9cd0694..ed1425e 100755
--- a/client/src/constants/EntryActionTypes.js
+++ b/client/src/constants/EntryActionTypes.js
@@ -1,179 +1,179 @@
-const PREFIX = '@entry';
-
-export default {
- PREFIX,
-
- /* Socket */
-
- SOCKET_DISCONNECT_HANDLE: `${PREFIX}/SOCKET_DISCONNECT_HANDLE`,
- SOCKET_RECONNECT_HANDLE: `${PREFIX}/SOCKET_RECONNECT_HANDLE`,
-
- /* Login */
-
- AUTHENTICATE: `${PREFIX}/AUTHENTICATE`,
- USING_OIDC_AUTHENTICATE: `${PREFIX}/USING_OIDC_AUTHENTICATE`,
- AUTHENTICATE_ERROR_CLEAR: `${PREFIX}/AUTHENTICATE_ERROR_CLEAR`,
-
- /* Core */
-
- LOGOUT: `${PREFIX}/LOGOUT`,
-
- /* Modals */
-
- MODAL_OPEN: `${PREFIX}/MODAL_OPEN`,
- MODAL_CLOSE: `${PREFIX}/MODAL_CLOSE`,
-
- /* Users */
-
- USER_CREATE: `${PREFIX}/USER_CREATE`,
- USER_CREATE_HANDLE: `${PREFIX}/USER_CREATE_HANDLE`,
- USER_CREATE_ERROR_CLEAR: `${PREFIX}/USER_CREATE_ERROR_CLEAR`,
- USER_UPDATE: `${PREFIX}/USER_UPDATE`,
- CURRENT_USER_UPDATE: `${PREFIX}/CURRENT_USER_UPDATE`,
- USER_UPDATE_HANDLE: `${PREFIX}/USER_UPDATE_HANDLE`,
- CURRENT_USER_LANGUAGE_UPDATE: `${PREFIX}/CURRENT_USER_LANGUAGE_UPDATE`,
- USER_EMAIL_UPDATE: `${PREFIX}/USER_EMAIL_UPDATE`,
- CURRENT_USER_EMAIL_UPDATE: `${PREFIX}/CURRENT_USER_EMAIL_UPDATE`,
- USER_EMAIL_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_EMAIL_UPDATE_ERROR_CLEAR`,
- CURRENT_USER_EMAIL_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_EMAIL_UPDATE_ERROR_CLEAR`,
- USER_PASSWORD_UPDATE: `${PREFIX}/USER_PASSWORD_UPDATE`,
- CURRENT_USER_PASSWORD_UPDATE: `${PREFIX}/CURRENT_USER_PASSWORD_UPDATE`,
- USER_PASSWORD_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_PASSWORD_UPDATE_ERROR_CLEAR`,
- CURRENT_USER_PASSWORD_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_PASSWORD_UPDATE_ERROR_CLEAR`,
- USER_USERNAME_UPDATE: `${PREFIX}/USER_USERNAME_UPDATE`,
- CURRENT_USER_USERNAME_UPDATE: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE`,
- USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_USERNAME_UPDATE_ERROR_CLEAR`,
- CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR`,
- CURRENT_USER_AVATAR_UPDATE: `${PREFIX}/CURRENT_USER_AVATAR_UPDATE`,
- USER_DELETE: `${PREFIX}/USER_DELETE`,
- USER_DELETE_HANDLE: `${PREFIX}/USER_DELETE_HANDLE`,
- USER_TO_CARD_ADD: `${PREFIX}/USER_TO_CARD_ADD`,
- USER_TO_CURRENT_CARD_ADD: `${PREFIX}/USER_TO_CURRENT_CARD_ADD`,
- USER_TO_CARD_ADD_HANDLE: `${PREFIX}/USER_TO_CARD_ADD_HANDLE`,
- USER_FROM_CARD_REMOVE: `${PREFIX}/USER_FROM_CARD_REMOVE`,
- USER_FROM_CURRENT_CARD_REMOVE: `${PREFIX}/USER_FROM_CURRENT_CARD_REMOVE`,
- USER_FROM_CARD_REMOVE_HANDLE: `${PREFIX}/USER_FROM_CARD_REMOVE_HANDLE`,
- USER_TO_FILTER_IN_CURRENT_BOARD_ADD: `${PREFIX}/USER_TO_FILTER_IN_CURRENT_BOARD_ADD`,
- USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE: `${PREFIX}/USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE`,
-
- /* Projects */
-
- PROJECT_CREATE: `${PREFIX}/PROJECT_CREATE`,
- PROJECT_CREATE_HANDLE: `${PREFIX}/PROJECT_CREATE_HANDLE`,
- CURRENT_PROJECT_UPDATE: `${PREFIX}/CURRENT_PROJECT_UPDATE`,
- PROJECT_UPDATE_HANDLE: `${PREFIX}/PROJECT_UPDATE_HANDLE`,
- CURRENT_PROJECT_BACKGROUND_IMAGE_UPDATE: `${PREFIX}/CURRENT_PROJECT_BACKGROUND_IMAGE_UPDATE`,
- CURRENT_PROJECT_DELETE: `${PREFIX}/CURRENT_PROJECT_DELETE`,
- PROJECT_DELETE_HANDLE: `${PREFIX}/PROJECT_DELETE_HANDLE`,
-
- /* Project managers */
-
- MANAGER_IN_CURRENT_PROJECT_CREATE: `${PREFIX}/MANAGER_IN_CURRENT_PROJECT_CREATE`,
- PROJECT_MANAGER_CREATE_HANDLE: `${PREFIX}/PROJECT_MANAGER_CREATE_HANDLE`,
- PROJECT_MANAGER_DELETE: `${PREFIX}/PROJECT_MANAGER_DELETE`,
- PROJECT_MANAGER_DELETE_HANDLE: `${PREFIX}/PROJECT_MANAGER_DELETE_HANDLE`,
-
- /* Boards */
-
- BOARD_IN_CURRENT_PROJECT_CREATE: `${PREFIX}/BOARD_IN_CURRENT_PROJECT_CREATE`,
- BOARD_CREATE_HANDLE: `${PREFIX}/BOARD_CREATE_HANDLE`,
- BOARD_FETCH: `${PREFIX}/BOARD_FETCH`,
- BOARD_UPDATE: `${PREFIX}/BOARD_UPDATE`,
- BOARD_UPDATE_HANDLE: `${PREFIX}/BOARD_UPDATE_HANDLE`,
- BOARD_MOVE: `${PREFIX}/BOARD_MOVE`,
- BOARD_DELETE: `${PREFIX}/BOARD_DELETE`,
- BOARD_DELETE_HANDLE: `${PREFIX}/BOARD_DELETE_HANDLE`,
-
- /* Board memberships */
-
- MEMBERSHIP_IN_CURRENT_BOARD_CREATE: `${PREFIX}/MEMBERSHIP_IN_CURRENT_BOARD_CREATE`,
- BOARD_MEMBERSHIP_CREATE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_CREATE_HANDLE`,
- BOARD_MEMBERSHIP_UPDATE: `${PREFIX}/BOARD_MEMBERSHIP_UPDATE`,
- BOARD_MEMBERSHIP_UPDATE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_UPDATE_HANDLE`,
- BOARD_MEMBERSHIP_DELETE: `${PREFIX}/BOARD_MEMBERSHIP_DELETE`,
- BOARD_MEMBERSHIP_DELETE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_DELETE_HANDLE`,
-
- /* Labels */
-
- LABEL_IN_CURRENT_BOARD_CREATE: `${PREFIX}/LABEL_IN_CURRENT_BOARD_CREATE`,
- LABEL_CREATE_HANDLE: `${PREFIX}/LABEL_CREATE_HANDLE`,
- LABEL_UPDATE: `${PREFIX}/LABEL_UPDATE`,
- LABEL_UPDATE_HANDLE: `${PREFIX}/LABEL_UPDATE_HANDLE`,
- LABEL_MOVE: `${PREFIX}/LABEL_MOVE`,
- LABEL_DELETE: `${PREFIX}/LABEL_DELETE`,
- LABEL_DELETE_HANDLE: `${PREFIX}/LABEL_DELETE_HANDLE`,
- LABEL_TO_CARD_ADD: `${PREFIX}/LABEL_TO_CARD_ADD`,
- LABEL_TO_CURRENT_CARD_ADD: `${PREFIX}/LABEL_TO_CURRENT_CARD_ADD`,
- LABEL_TO_CARD_ADD_HANDLE: `${PREFIX}/LABEL_TO_CARD_ADD_HANDLE`,
- LABEL_FROM_CARD_REMOVE: `${PREFIX}/LABEL_FROM_CARD_REMOVE`,
- LABEL_FROM_CURRENT_CARD_REMOVE: `${PREFIX}/LABEL_FROM_CURRENT_CARD_REMOVE`,
- LABEL_FROM_CARD_REMOVE_HANDLE: `${PREFIX}/LABEL_FROM_CARD_REMOVE_HANDLE`,
- LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD: `${PREFIX}/LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD`,
- LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE: `${PREFIX}/LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE`,
-
- /* Lists */
-
- LIST_IN_CURRENT_BOARD_CREATE: `${PREFIX}/LIST_IN_CURRENT_BOARD_CREATE`,
- LIST_CREATE_HANDLE: `${PREFIX}/LIST_CREATE_HANDLE`,
- LIST_UPDATE: `${PREFIX}/LIST_UPDATE`,
- LIST_UPDATE_HANDLE: `${PREFIX}/LIST_UPDATE_HANDLE`,
- LIST_MOVE: `${PREFIX}/LIST_MOVE`,
- LIST_DELETE: `${PREFIX}/LIST_DELETE`,
- LIST_DELETE_HANDLE: `${PREFIX}/LIST_DELETE_HANDLE`,
-
- /* Cards */
-
- CARD_CREATE: `${PREFIX}/CARD_CREATE`,
- CARD_CREATE_HANDLE: `${PREFIX}/CARD_CREATE_HANDLE`,
- CARD_UPDATE: `${PREFIX}/CARD_UPDATE`,
- CURRENT_CARD_UPDATE: `${PREFIX}/CURRENT_CARD_UPDATE`,
- CARD_UPDATE_HANDLE: `${PREFIX}/CARD_UPDATE_HANDLE`,
- CARD_MOVE: `${PREFIX}/CARD_MOVE`,
- CURRENT_CARD_MOVE: `${PREFIX}/CURRENT_CARD_MOVE`,
- CARD_TRANSFER: `${PREFIX}/CARD_TRANSFER`,
- CURRENT_CARD_TRANSFER: `${PREFIX}/CURRENT_CARD_TRANSFER`,
- CARD_DUPLICATE: `${PREFIX}/CARD_DUPLICATE`,
- CURRENT_CARD_DUPLICATE: `${PREFIX}/CURRENT_CARD_DUPLICATE`,
- CARD_DELETE: `${PREFIX}/CARD_DELETE`,
- CURRENT_CARD_DELETE: `${PREFIX}/CURRENT_CARD_DELETE`,
- CARD_DELETE_HANDLE: `${PREFIX}/CARD_DELETE_HANDLE`,
-
- /* Tasks */
-
- TASK_IN_CURRENT_CARD_CREATE: `${PREFIX}/TASK_IN_CURRENT_CARD_CREATE`,
- TASK_CREATE_HANDLE: `${PREFIX}/TASK_CREATE_HANDLE`,
- TASK_UPDATE: `${PREFIX}/TASK_UPDATE`,
- TASK_UPDATE_HANDLE: `${PREFIX}/TASK_UPDATE_HANDLE`,
- TASK_MOVE: `${PREFIX}/TASK_MOVE`,
- TASK_DELETE: `${PREFIX}/TASK_DELETE`,
- TASK_DELETE_HANDLE: `${PREFIX}/TASK_DELETE_HANDLE`,
-
- /* Attachments */
-
- ATTACHMENT_IN_CURRENT_CARD_CREATE: `${PREFIX}/ATTACHMENT_IN_CURRENT_CARD_CREATE`,
- ATTACHMENT_CREATE_HANDLE: `${PREFIX}/ATTACHMENT_CREATE_HANDLE`,
- ATTACHMENT_UPDATE: `${PREFIX}/ATTACHMENT_UPDATE`,
- ATTACHMENT_UPDATE_HANDLE: `${PREFIX}/ATTACHMENT_UPDATE_HANDLE`,
- ATTACHMENT_DELETE: `${PREFIX}/ATTACHMENT_DELETE`,
- ATTACHMENT_DELETE_HANDLE: `${PREFIX}/ATTACHMENT_DELETE_HANDLE`,
-
- /* Activities */
-
- ACTIVITIES_IN_CURRENT_CARD_FETCH: `${PREFIX}/ACTIVITIES_IN_CURRENT_CARD_FETCH`,
- ACTIVITIES_DETAILS_IN_CURRENT_CARD_TOGGLE: `${PREFIX}/ACTIVITIES_DETAILS_IN_CURRENT_CARD_TOGGLE`,
- ACTIVITY_CREATE_HANDLE: `${PREFIX}/ACTIVITY_CREATE_HANDLE`,
- ACTIVITY_UPDATE_HANDLE: `${PREFIX}/ACTIVITY_UPDATE_HANDLE`,
- ACTIVITY_DELETE_HANDLE: `${PREFIX}/ACTIVITY_DELETE_HANDLE`,
-
- /* Comment activities */
-
- COMMENT_ACTIVITY_IN_CURRENT_CARD_CREATE: `${PREFIX}/COMMENT_ACTIVITY_IN_CURRENT_CARD_CREATE`,
- COMMENT_ACTIVITY_UPDATE: `${PREFIX}/COMMENT_ACTIVITY_UPDATE`,
- COMMENT_ACTIVITY_DELETE: `${PREFIX}/COMMENT_ACTIVITY_DELETE`,
-
- /* Notifications */
-
- NOTIFICATION_CREATE_HANDLE: `${PREFIX}/NOTIFICATION_CREATE_HANDLE`,
- NOTIFICATION_DELETE: `${PREFIX}/NOTIFICATION_DELETE`,
- NOTIFICATION_DELETE_HANDLE: `${PREFIX}/NOTIFICATION_DELETE_HANDLE`,
-};
+const PREFIX = '@entry';
+
+export default {
+ PREFIX,
+
+ /* Socket */
+
+ SOCKET_DISCONNECT_HANDLE: `${PREFIX}/SOCKET_DISCONNECT_HANDLE`,
+ SOCKET_RECONNECT_HANDLE: `${PREFIX}/SOCKET_RECONNECT_HANDLE`,
+
+ /* Login */
+
+ AUTHENTICATE: `${PREFIX}/AUTHENTICATE`,
+ USING_OIDC_AUTHENTICATE: `${PREFIX}/USING_OIDC_AUTHENTICATE`,
+ AUTHENTICATE_ERROR_CLEAR: `${PREFIX}/AUTHENTICATE_ERROR_CLEAR`,
+
+ /* Core */
+
+ LOGOUT: `${PREFIX}/LOGOUT`,
+
+ /* Modals */
+
+ MODAL_OPEN: `${PREFIX}/MODAL_OPEN`,
+ MODAL_CLOSE: `${PREFIX}/MODAL_CLOSE`,
+
+ /* Users */
+
+ USER_CREATE: `${PREFIX}/USER_CREATE`,
+ USER_CREATE_HANDLE: `${PREFIX}/USER_CREATE_HANDLE`,
+ USER_CREATE_ERROR_CLEAR: `${PREFIX}/USER_CREATE_ERROR_CLEAR`,
+ USER_UPDATE: `${PREFIX}/USER_UPDATE`,
+ CURRENT_USER_UPDATE: `${PREFIX}/CURRENT_USER_UPDATE`,
+ USER_UPDATE_HANDLE: `${PREFIX}/USER_UPDATE_HANDLE`,
+ CURRENT_USER_LANGUAGE_UPDATE: `${PREFIX}/CURRENT_USER_LANGUAGE_UPDATE`,
+ USER_EMAIL_UPDATE: `${PREFIX}/USER_EMAIL_UPDATE`,
+ CURRENT_USER_EMAIL_UPDATE: `${PREFIX}/CURRENT_USER_EMAIL_UPDATE`,
+ USER_EMAIL_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_EMAIL_UPDATE_ERROR_CLEAR`,
+ CURRENT_USER_EMAIL_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_EMAIL_UPDATE_ERROR_CLEAR`,
+ USER_PASSWORD_UPDATE: `${PREFIX}/USER_PASSWORD_UPDATE`,
+ CURRENT_USER_PASSWORD_UPDATE: `${PREFIX}/CURRENT_USER_PASSWORD_UPDATE`,
+ USER_PASSWORD_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_PASSWORD_UPDATE_ERROR_CLEAR`,
+ CURRENT_USER_PASSWORD_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_PASSWORD_UPDATE_ERROR_CLEAR`,
+ USER_USERNAME_UPDATE: `${PREFIX}/USER_USERNAME_UPDATE`,
+ CURRENT_USER_USERNAME_UPDATE: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE`,
+ USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_USERNAME_UPDATE_ERROR_CLEAR`,
+ CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR`,
+ CURRENT_USER_AVATAR_UPDATE: `${PREFIX}/CURRENT_USER_AVATAR_UPDATE`,
+ USER_DELETE: `${PREFIX}/USER_DELETE`,
+ USER_DELETE_HANDLE: `${PREFIX}/USER_DELETE_HANDLE`,
+ USER_TO_CARD_ADD: `${PREFIX}/USER_TO_CARD_ADD`,
+ USER_TO_CURRENT_CARD_ADD: `${PREFIX}/USER_TO_CURRENT_CARD_ADD`,
+ USER_TO_CARD_ADD_HANDLE: `${PREFIX}/USER_TO_CARD_ADD_HANDLE`,
+ USER_FROM_CARD_REMOVE: `${PREFIX}/USER_FROM_CARD_REMOVE`,
+ USER_FROM_CURRENT_CARD_REMOVE: `${PREFIX}/USER_FROM_CURRENT_CARD_REMOVE`,
+ USER_FROM_CARD_REMOVE_HANDLE: `${PREFIX}/USER_FROM_CARD_REMOVE_HANDLE`,
+ USER_TO_FILTER_IN_CURRENT_BOARD_ADD: `${PREFIX}/USER_TO_FILTER_IN_CURRENT_BOARD_ADD`,
+ USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE: `${PREFIX}/USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE`,
+
+ /* Projects */
+
+ PROJECT_CREATE: `${PREFIX}/PROJECT_CREATE`,
+ PROJECT_CREATE_HANDLE: `${PREFIX}/PROJECT_CREATE_HANDLE`,
+ CURRENT_PROJECT_UPDATE: `${PREFIX}/CURRENT_PROJECT_UPDATE`,
+ PROJECT_UPDATE_HANDLE: `${PREFIX}/PROJECT_UPDATE_HANDLE`,
+ CURRENT_PROJECT_BACKGROUND_IMAGE_UPDATE: `${PREFIX}/CURRENT_PROJECT_BACKGROUND_IMAGE_UPDATE`,
+ CURRENT_PROJECT_DELETE: `${PREFIX}/CURRENT_PROJECT_DELETE`,
+ PROJECT_DELETE_HANDLE: `${PREFIX}/PROJECT_DELETE_HANDLE`,
+
+ /* Project managers */
+
+ MANAGER_IN_CURRENT_PROJECT_CREATE: `${PREFIX}/MANAGER_IN_CURRENT_PROJECT_CREATE`,
+ PROJECT_MANAGER_CREATE_HANDLE: `${PREFIX}/PROJECT_MANAGER_CREATE_HANDLE`,
+ PROJECT_MANAGER_DELETE: `${PREFIX}/PROJECT_MANAGER_DELETE`,
+ PROJECT_MANAGER_DELETE_HANDLE: `${PREFIX}/PROJECT_MANAGER_DELETE_HANDLE`,
+
+ /* Boards */
+
+ BOARD_IN_CURRENT_PROJECT_CREATE: `${PREFIX}/BOARD_IN_CURRENT_PROJECT_CREATE`,
+ BOARD_CREATE_HANDLE: `${PREFIX}/BOARD_CREATE_HANDLE`,
+ BOARD_FETCH: `${PREFIX}/BOARD_FETCH`,
+ BOARD_UPDATE: `${PREFIX}/BOARD_UPDATE`,
+ BOARD_UPDATE_HANDLE: `${PREFIX}/BOARD_UPDATE_HANDLE`,
+ BOARD_MOVE: `${PREFIX}/BOARD_MOVE`,
+ BOARD_DELETE: `${PREFIX}/BOARD_DELETE`,
+ BOARD_DELETE_HANDLE: `${PREFIX}/BOARD_DELETE_HANDLE`,
+
+ /* Board memberships */
+
+ MEMBERSHIP_IN_CURRENT_BOARD_CREATE: `${PREFIX}/MEMBERSHIP_IN_CURRENT_BOARD_CREATE`,
+ BOARD_MEMBERSHIP_CREATE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_CREATE_HANDLE`,
+ BOARD_MEMBERSHIP_UPDATE: `${PREFIX}/BOARD_MEMBERSHIP_UPDATE`,
+ BOARD_MEMBERSHIP_UPDATE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_UPDATE_HANDLE`,
+ BOARD_MEMBERSHIP_DELETE: `${PREFIX}/BOARD_MEMBERSHIP_DELETE`,
+ BOARD_MEMBERSHIP_DELETE_HANDLE: `${PREFIX}/BOARD_MEMBERSHIP_DELETE_HANDLE`,
+
+ /* Labels */
+
+ LABEL_IN_CURRENT_BOARD_CREATE: `${PREFIX}/LABEL_IN_CURRENT_BOARD_CREATE`,
+ LABEL_CREATE_HANDLE: `${PREFIX}/LABEL_CREATE_HANDLE`,
+ LABEL_UPDATE: `${PREFIX}/LABEL_UPDATE`,
+ LABEL_UPDATE_HANDLE: `${PREFIX}/LABEL_UPDATE_HANDLE`,
+ LABEL_MOVE: `${PREFIX}/LABEL_MOVE`,
+ LABEL_DELETE: `${PREFIX}/LABEL_DELETE`,
+ LABEL_DELETE_HANDLE: `${PREFIX}/LABEL_DELETE_HANDLE`,
+ LABEL_TO_CARD_ADD: `${PREFIX}/LABEL_TO_CARD_ADD`,
+ LABEL_TO_CURRENT_CARD_ADD: `${PREFIX}/LABEL_TO_CURRENT_CARD_ADD`,
+ LABEL_TO_CARD_ADD_HANDLE: `${PREFIX}/LABEL_TO_CARD_ADD_HANDLE`,
+ LABEL_FROM_CARD_REMOVE: `${PREFIX}/LABEL_FROM_CARD_REMOVE`,
+ LABEL_FROM_CURRENT_CARD_REMOVE: `${PREFIX}/LABEL_FROM_CURRENT_CARD_REMOVE`,
+ LABEL_FROM_CARD_REMOVE_HANDLE: `${PREFIX}/LABEL_FROM_CARD_REMOVE_HANDLE`,
+ LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD: `${PREFIX}/LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD`,
+ LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE: `${PREFIX}/LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE`,
+
+ /* Lists */
+
+ LIST_IN_CURRENT_BOARD_CREATE: `${PREFIX}/LIST_IN_CURRENT_BOARD_CREATE`,
+ LIST_CREATE_HANDLE: `${PREFIX}/LIST_CREATE_HANDLE`,
+ LIST_UPDATE: `${PREFIX}/LIST_UPDATE`,
+ LIST_UPDATE_HANDLE: `${PREFIX}/LIST_UPDATE_HANDLE`,
+ LIST_MOVE: `${PREFIX}/LIST_MOVE`,
+ LIST_DELETE: `${PREFIX}/LIST_DELETE`,
+ LIST_DELETE_HANDLE: `${PREFIX}/LIST_DELETE_HANDLE`,
+
+ /* Cards */
+
+ CARD_CREATE: `${PREFIX}/CARD_CREATE`,
+ CARD_CREATE_HANDLE: `${PREFIX}/CARD_CREATE_HANDLE`,
+ CARD_UPDATE: `${PREFIX}/CARD_UPDATE`,
+ CURRENT_CARD_UPDATE: `${PREFIX}/CURRENT_CARD_UPDATE`,
+ CARD_UPDATE_HANDLE: `${PREFIX}/CARD_UPDATE_HANDLE`,
+ CARD_MOVE: `${PREFIX}/CARD_MOVE`,
+ CURRENT_CARD_MOVE: `${PREFIX}/CURRENT_CARD_MOVE`,
+ CARD_TRANSFER: `${PREFIX}/CARD_TRANSFER`,
+ CURRENT_CARD_TRANSFER: `${PREFIX}/CURRENT_CARD_TRANSFER`,
+ CARD_DUPLICATE: `${PREFIX}/CARD_DUPLICATE`,
+ CURRENT_CARD_DUPLICATE: `${PREFIX}/CURRENT_CARD_DUPLICATE`,
+ CARD_DELETE: `${PREFIX}/CARD_DELETE`,
+ CURRENT_CARD_DELETE: `${PREFIX}/CURRENT_CARD_DELETE`,
+ CARD_DELETE_HANDLE: `${PREFIX}/CARD_DELETE_HANDLE`,
+
+ /* Tasks */
+
+ TASK_IN_CURRENT_CARD_CREATE: `${PREFIX}/TASK_IN_CURRENT_CARD_CREATE`,
+ TASK_CREATE_HANDLE: `${PREFIX}/TASK_CREATE_HANDLE`,
+ TASK_UPDATE: `${PREFIX}/TASK_UPDATE`,
+ TASK_UPDATE_HANDLE: `${PREFIX}/TASK_UPDATE_HANDLE`,
+ TASK_MOVE: `${PREFIX}/TASK_MOVE`,
+ TASK_DELETE: `${PREFIX}/TASK_DELETE`,
+ TASK_DELETE_HANDLE: `${PREFIX}/TASK_DELETE_HANDLE`,
+
+ /* Attachments */
+
+ ATTACHMENT_IN_CURRENT_CARD_CREATE: `${PREFIX}/ATTACHMENT_IN_CURRENT_CARD_CREATE`,
+ ATTACHMENT_CREATE_HANDLE: `${PREFIX}/ATTACHMENT_CREATE_HANDLE`,
+ ATTACHMENT_UPDATE: `${PREFIX}/ATTACHMENT_UPDATE`,
+ ATTACHMENT_UPDATE_HANDLE: `${PREFIX}/ATTACHMENT_UPDATE_HANDLE`,
+ ATTACHMENT_DELETE: `${PREFIX}/ATTACHMENT_DELETE`,
+ ATTACHMENT_DELETE_HANDLE: `${PREFIX}/ATTACHMENT_DELETE_HANDLE`,
+
+ /* Activities */
+
+ ACTIVITIES_IN_CURRENT_CARD_FETCH: `${PREFIX}/ACTIVITIES_IN_CURRENT_CARD_FETCH`,
+ ACTIVITIES_DETAILS_IN_CURRENT_CARD_TOGGLE: `${PREFIX}/ACTIVITIES_DETAILS_IN_CURRENT_CARD_TOGGLE`,
+ ACTIVITY_CREATE_HANDLE: `${PREFIX}/ACTIVITY_CREATE_HANDLE`,
+ ACTIVITY_UPDATE_HANDLE: `${PREFIX}/ACTIVITY_UPDATE_HANDLE`,
+ ACTIVITY_DELETE_HANDLE: `${PREFIX}/ACTIVITY_DELETE_HANDLE`,
+
+ /* Comment activities */
+
+ COMMENT_ACTIVITY_IN_CURRENT_CARD_CREATE: `${PREFIX}/COMMENT_ACTIVITY_IN_CURRENT_CARD_CREATE`,
+ COMMENT_ACTIVITY_UPDATE: `${PREFIX}/COMMENT_ACTIVITY_UPDATE`,
+ COMMENT_ACTIVITY_DELETE: `${PREFIX}/COMMENT_ACTIVITY_DELETE`,
+
+ /* Notifications */
+
+ NOTIFICATION_CREATE_HANDLE: `${PREFIX}/NOTIFICATION_CREATE_HANDLE`,
+ NOTIFICATION_DELETE: `${PREFIX}/NOTIFICATION_DELETE`,
+ NOTIFICATION_DELETE_HANDLE: `${PREFIX}/NOTIFICATION_DELETE_HANDLE`,
+};
diff --git a/client/src/containers/CardContainer.js b/client/src/containers/CardContainer.js
index e174564..8a5ec30 100755
--- a/client/src/containers/CardContainer.js
+++ b/client/src/containers/CardContainer.js
@@ -1,80 +1,80 @@
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-
-import selectors from '../selectors';
-import entryActions from '../entry-actions';
-import { BoardMembershipRoles } from '../constants/Enums';
-import Card from '../components/Card';
-
-const makeMapStateToProps = () => {
- const selectCardById = selectors.makeSelectCardById();
- const selectUsersByCardId = selectors.makeSelectUsersByCardId();
- const selectLabelsByCardId = selectors.makeSelectLabelsByCardId();
- const selectTasksByCardId = selectors.makeSelectTasksByCardId();
- const selectNotificationsTotalByCardId = selectors.makeSelectNotificationsTotalByCardId();
-
- return (state, { id, index }) => {
- const { projectId } = selectors.selectPath(state);
- const allProjectsToLists = selectors.selectProjectsToListsForCurrentUser(state);
- const allBoardMemberships = selectors.selectMembershipsForCurrentBoard(state);
- const allLabels = selectors.selectLabelsForCurrentBoard(state);
- const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
-
- const { name, dueDate, stopwatch, coverUrl, boardId, listId, isPersisted } = selectCardById(
- state,
- id,
- );
-
- const users = selectUsersByCardId(state, id);
- const labels = selectLabelsByCardId(state, id);
- const tasks = selectTasksByCardId(state, id);
- const notificationsTotal = selectNotificationsTotalByCardId(state, id);
-
- const isCurrentUserEditor =
- !!currentUserMembership && currentUserMembership.role === BoardMembershipRoles.EDITOR;
-
- return {
- id,
- index,
- name,
- dueDate,
- stopwatch,
- coverUrl,
- boardId,
- listId,
- projectId,
- isPersisted,
- notificationsTotal,
- users,
- labels,
- tasks,
- allProjectsToLists,
- allBoardMemberships,
- allLabels,
- canEdit: isCurrentUserEditor,
- };
- };
-};
-
-const mapDispatchToProps = (dispatch, { id }) =>
- bindActionCreators(
- {
- onUpdate: (data) => entryActions.updateCard(id, data),
- onMove: (listId, index) => entryActions.moveCard(id, listId, index),
- onTransfer: (boardId, listId) => entryActions.transferCard(id, boardId, listId),
- onDuplicate: () => entryActions.duplicateCard(id),
- onDelete: () => entryActions.deleteCard(id),
- onUserAdd: (userId) => entryActions.addUserToCard(userId, id),
- onUserRemove: (userId) => entryActions.removeUserFromCard(userId, id),
- onBoardFetch: entryActions.fetchBoard,
- onLabelAdd: (labelId) => entryActions.addLabelToCard(labelId, id),
- onLabelRemove: (labelId) => entryActions.removeLabelFromCard(labelId, id),
- onLabelCreate: (data) => entryActions.createLabelInCurrentBoard(data),
- onLabelUpdate: (labelId, data) => entryActions.updateLabel(labelId, data),
- onLabelMove: (labelId, index) => entryActions.moveLabel(labelId, index),
- onLabelDelete: (labelId) => entryActions.deleteLabel(labelId),
- },
- dispatch,
- );
-
-export default connect(makeMapStateToProps, mapDispatchToProps)(Card);
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+
+import selectors from '../selectors';
+import entryActions from '../entry-actions';
+import { BoardMembershipRoles } from '../constants/Enums';
+import Card from '../components/Card';
+
+const makeMapStateToProps = () => {
+ const selectCardById = selectors.makeSelectCardById();
+ const selectUsersByCardId = selectors.makeSelectUsersByCardId();
+ const selectLabelsByCardId = selectors.makeSelectLabelsByCardId();
+ const selectTasksByCardId = selectors.makeSelectTasksByCardId();
+ const selectNotificationsTotalByCardId = selectors.makeSelectNotificationsTotalByCardId();
+
+ return (state, { id, index }) => {
+ const { projectId } = selectors.selectPath(state);
+ const allProjectsToLists = selectors.selectProjectsToListsForCurrentUser(state);
+ const allBoardMemberships = selectors.selectMembershipsForCurrentBoard(state);
+ const allLabels = selectors.selectLabelsForCurrentBoard(state);
+ const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
+
+ const { name, dueDate, stopwatch, coverUrl, boardId, listId, isPersisted } = selectCardById(
+ state,
+ id,
+ );
+
+ const users = selectUsersByCardId(state, id);
+ const labels = selectLabelsByCardId(state, id);
+ const tasks = selectTasksByCardId(state, id);
+ const notificationsTotal = selectNotificationsTotalByCardId(state, id);
+
+ const isCurrentUserEditor =
+ !!currentUserMembership && currentUserMembership.role === BoardMembershipRoles.EDITOR;
+
+ return {
+ id,
+ index,
+ name,
+ dueDate,
+ stopwatch,
+ coverUrl,
+ boardId,
+ listId,
+ projectId,
+ isPersisted,
+ notificationsTotal,
+ users,
+ labels,
+ tasks,
+ allProjectsToLists,
+ allBoardMemberships,
+ allLabels,
+ canEdit: isCurrentUserEditor,
+ };
+ };
+};
+
+const mapDispatchToProps = (dispatch, { id }) =>
+ bindActionCreators(
+ {
+ onUpdate: (data) => entryActions.updateCard(id, data),
+ onMove: (listId, index) => entryActions.moveCard(id, listId, index),
+ onTransfer: (boardId, listId) => entryActions.transferCard(id, boardId, listId),
+ onDuplicate: () => entryActions.duplicateCard(id),
+ onDelete: () => entryActions.deleteCard(id),
+ onUserAdd: (userId) => entryActions.addUserToCard(userId, id),
+ onUserRemove: (userId) => entryActions.removeUserFromCard(userId, id),
+ onBoardFetch: entryActions.fetchBoard,
+ onLabelAdd: (labelId) => entryActions.addLabelToCard(labelId, id),
+ onLabelRemove: (labelId) => entryActions.removeLabelFromCard(labelId, id),
+ onLabelCreate: (data) => entryActions.createLabelInCurrentBoard(data),
+ onLabelUpdate: (labelId, data) => entryActions.updateLabel(labelId, data),
+ onLabelMove: (labelId, index) => entryActions.moveLabel(labelId, index),
+ onLabelDelete: (labelId) => entryActions.deleteLabel(labelId),
+ },
+ dispatch,
+ );
+
+export default connect(makeMapStateToProps, mapDispatchToProps)(Card);
diff --git a/client/src/containers/CardModalContainer.js b/client/src/containers/CardModalContainer.js
index a8df6ea..907d36f 100755
--- a/client/src/containers/CardModalContainer.js
+++ b/client/src/containers/CardModalContainer.js
@@ -1,115 +1,115 @@
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import omit from 'lodash/omit';
-import { push } from '../lib/redux-router';
-
-import selectors from '../selectors';
-import entryActions from '../entry-actions';
-import Paths from '../constants/Paths';
-import { BoardMembershipRoles } from '../constants/Enums';
-import CardModal from '../components/CardModal';
-
-const mapStateToProps = (state) => {
- const { projectId } = selectors.selectPath(state);
- const allProjectsToLists = selectors.selectProjectsToListsForCurrentUser(state);
- const isCurrentUserManager = selectors.selectIsCurrentUserManagerForCurrentProject(state);
- const allBoardMemberships = selectors.selectMembershipsForCurrentBoard(state);
- const allLabels = selectors.selectLabelsForCurrentBoard(state);
- const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
-
- const {
- name,
- description,
- dueDate,
- stopwatch,
- isSubscribed,
- isActivitiesFetching,
- isAllActivitiesFetched,
- isActivitiesDetailsVisible,
- isActivitiesDetailsFetching,
- boardId,
- listId,
- } = selectors.selectCurrentCard(state);
-
- const users = selectors.selectUsersForCurrentCard(state);
- const labels = selectors.selectLabelsForCurrentCard(state);
- const tasks = selectors.selectTasksForCurrentCard(state);
- const attachments = selectors.selectAttachmentsForCurrentCard(state);
- const activities = selectors.selectActivitiesForCurrentCard(state);
-
- let isCurrentUserEditor = false;
- let isCurrentUserEditorOrCanComment = false;
-
- if (currentUserMembership) {
- isCurrentUserEditor = currentUserMembership.role === BoardMembershipRoles.EDITOR;
- isCurrentUserEditorOrCanComment = isCurrentUserEditor || currentUserMembership.canComment;
- }
-
- return {
- name,
- description,
- dueDate,
- stopwatch,
- isSubscribed,
- isActivitiesFetching,
- isAllActivitiesFetched,
- isActivitiesDetailsVisible,
- isActivitiesDetailsFetching,
- listId,
- boardId,
- projectId,
- users,
- labels,
- tasks,
- attachments,
- activities,
- allProjectsToLists,
- allBoardMemberships,
- allLabels,
- canEdit: isCurrentUserEditor,
- canEditCommentActivities: isCurrentUserEditorOrCanComment,
- canEditAllCommentActivities: isCurrentUserManager,
- };
-};
-
-const mapDispatchToProps = (dispatch) =>
- bindActionCreators(
- {
- onUpdate: entryActions.updateCurrentCard,
- onMove: entryActions.moveCurrentCard,
- onTransfer: entryActions.transferCurrentCard,
- onDuplicate: entryActions.duplicateCurrentCard,
- onDelete: entryActions.deleteCurrentCard,
- onUserAdd: entryActions.addUserToCurrentCard,
- onUserRemove: entryActions.removeUserFromCurrentCard,
- onBoardFetch: entryActions.fetchBoard,
- onLabelAdd: entryActions.addLabelToCurrentCard,
- onLabelRemove: entryActions.removeLabelFromCurrentCard,
- onLabelCreate: entryActions.createLabelInCurrentBoard,
- onLabelUpdate: entryActions.updateLabel,
- onLabelMove: entryActions.moveLabel,
- onLabelDelete: entryActions.deleteLabel,
- onTaskCreate: entryActions.createTaskInCurrentCard,
- onTaskUpdate: entryActions.updateTask,
- onTaskMove: entryActions.moveTask,
- onTaskDelete: entryActions.deleteTask,
- onAttachmentCreate: entryActions.createAttachmentInCurrentCard,
- onAttachmentUpdate: entryActions.updateAttachment,
- onAttachmentDelete: entryActions.deleteAttachment,
- onActivitiesFetch: entryActions.fetchActivitiesInCurrentCard,
- onActivitiesDetailsToggle: entryActions.toggleActivitiesDetailsInCurrentCard,
- onCommentActivityCreate: entryActions.createCommentActivityInCurrentCard,
- onCommentActivityUpdate: entryActions.updateCommentActivity,
- onCommentActivityDelete: entryActions.deleteCommentActivity,
- push,
- },
- dispatch,
- );
-
-const mergeProps = (stateProps, dispatchProps) => ({
- ...stateProps,
- ...omit(dispatchProps, 'push'),
- onClose: () => dispatchProps.push(Paths.BOARDS.replace(':id', stateProps.boardId)),
-});
-
-export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(CardModal);
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+import omit from 'lodash/omit';
+import { push } from '../lib/redux-router';
+
+import selectors from '../selectors';
+import entryActions from '../entry-actions';
+import Paths from '../constants/Paths';
+import { BoardMembershipRoles } from '../constants/Enums';
+import CardModal from '../components/CardModal';
+
+const mapStateToProps = (state) => {
+ const { projectId } = selectors.selectPath(state);
+ const allProjectsToLists = selectors.selectProjectsToListsForCurrentUser(state);
+ const isCurrentUserManager = selectors.selectIsCurrentUserManagerForCurrentProject(state);
+ const allBoardMemberships = selectors.selectMembershipsForCurrentBoard(state);
+ const allLabels = selectors.selectLabelsForCurrentBoard(state);
+ const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
+
+ const {
+ name,
+ description,
+ dueDate,
+ stopwatch,
+ isSubscribed,
+ isActivitiesFetching,
+ isAllActivitiesFetched,
+ isActivitiesDetailsVisible,
+ isActivitiesDetailsFetching,
+ boardId,
+ listId,
+ } = selectors.selectCurrentCard(state);
+
+ const users = selectors.selectUsersForCurrentCard(state);
+ const labels = selectors.selectLabelsForCurrentCard(state);
+ const tasks = selectors.selectTasksForCurrentCard(state);
+ const attachments = selectors.selectAttachmentsForCurrentCard(state);
+ const activities = selectors.selectActivitiesForCurrentCard(state);
+
+ let isCurrentUserEditor = false;
+ let isCurrentUserEditorOrCanComment = false;
+
+ if (currentUserMembership) {
+ isCurrentUserEditor = currentUserMembership.role === BoardMembershipRoles.EDITOR;
+ isCurrentUserEditorOrCanComment = isCurrentUserEditor || currentUserMembership.canComment;
+ }
+
+ return {
+ name,
+ description,
+ dueDate,
+ stopwatch,
+ isSubscribed,
+ isActivitiesFetching,
+ isAllActivitiesFetched,
+ isActivitiesDetailsVisible,
+ isActivitiesDetailsFetching,
+ listId,
+ boardId,
+ projectId,
+ users,
+ labels,
+ tasks,
+ attachments,
+ activities,
+ allProjectsToLists,
+ allBoardMemberships,
+ allLabels,
+ canEdit: isCurrentUserEditor,
+ canEditCommentActivities: isCurrentUserEditorOrCanComment,
+ canEditAllCommentActivities: isCurrentUserManager,
+ };
+};
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators(
+ {
+ onUpdate: entryActions.updateCurrentCard,
+ onMove: entryActions.moveCurrentCard,
+ onTransfer: entryActions.transferCurrentCard,
+ onDuplicate: entryActions.duplicateCurrentCard,
+ onDelete: entryActions.deleteCurrentCard,
+ onUserAdd: entryActions.addUserToCurrentCard,
+ onUserRemove: entryActions.removeUserFromCurrentCard,
+ onBoardFetch: entryActions.fetchBoard,
+ onLabelAdd: entryActions.addLabelToCurrentCard,
+ onLabelRemove: entryActions.removeLabelFromCurrentCard,
+ onLabelCreate: entryActions.createLabelInCurrentBoard,
+ onLabelUpdate: entryActions.updateLabel,
+ onLabelMove: entryActions.moveLabel,
+ onLabelDelete: entryActions.deleteLabel,
+ onTaskCreate: entryActions.createTaskInCurrentCard,
+ onTaskUpdate: entryActions.updateTask,
+ onTaskMove: entryActions.moveTask,
+ onTaskDelete: entryActions.deleteTask,
+ onAttachmentCreate: entryActions.createAttachmentInCurrentCard,
+ onAttachmentUpdate: entryActions.updateAttachment,
+ onAttachmentDelete: entryActions.deleteAttachment,
+ onActivitiesFetch: entryActions.fetchActivitiesInCurrentCard,
+ onActivitiesDetailsToggle: entryActions.toggleActivitiesDetailsInCurrentCard,
+ onCommentActivityCreate: entryActions.createCommentActivityInCurrentCard,
+ onCommentActivityUpdate: entryActions.updateCommentActivity,
+ onCommentActivityDelete: entryActions.deleteCommentActivity,
+ push,
+ },
+ dispatch,
+ );
+
+const mergeProps = (stateProps, dispatchProps) => ({
+ ...stateProps,
+ ...omit(dispatchProps, 'push'),
+ onClose: () => dispatchProps.push(Paths.BOARDS.replace(':id', stateProps.boardId)),
+});
+
+export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(CardModal);
diff --git a/client/src/entry-actions/cards.js b/client/src/entry-actions/cards.js
index 346fc8d..c9b4281 100755
--- a/client/src/entry-actions/cards.js
+++ b/client/src/entry-actions/cards.js
@@ -1,123 +1,123 @@
-import EntryActionTypes from '../constants/EntryActionTypes';
-
-const createCard = (listId, data, autoOpen) => ({
- type: EntryActionTypes.CARD_CREATE,
- payload: {
- listId,
- data,
- autoOpen,
- },
-});
-
-const handleCardCreate = (card) => ({
- type: EntryActionTypes.CARD_CREATE_HANDLE,
- payload: {
- card,
- },
-});
-
-const updateCard = (id, data) => ({
- type: EntryActionTypes.CARD_UPDATE,
- payload: {
- id,
- data,
- },
-});
-
-const updateCurrentCard = (data) => ({
- type: EntryActionTypes.CURRENT_CARD_UPDATE,
- payload: {
- data,
- },
-});
-
-const handleCardUpdate = (card) => ({
- type: EntryActionTypes.CARD_UPDATE_HANDLE,
- payload: {
- card,
- },
-});
-
-const moveCard = (id, listId, index = 0) => ({
- type: EntryActionTypes.CARD_MOVE,
- payload: {
- id,
- listId,
- index,
- },
-});
-
-const moveCurrentCard = (listId, index = 0) => ({
- type: EntryActionTypes.CURRENT_CARD_MOVE,
- payload: {
- listId,
- index,
- },
-});
-
-const transferCard = (id, boardId, listId, index = 0) => ({
- type: EntryActionTypes.CARD_TRANSFER,
- payload: {
- id,
- boardId,
- listId,
- index,
- },
-});
-
-const transferCurrentCard = (boardId, listId, index = 0) => ({
- type: EntryActionTypes.CURRENT_CARD_TRANSFER,
- payload: {
- boardId,
- listId,
- index,
- },
-});
-
-const duplicateCard = (id) => ({
- type: EntryActionTypes.CARD_DUPLICATE,
- payload: {
- id,
- },
-});
-
-const duplicateCurrentCard = () => ({
- type: EntryActionTypes.CURRENT_CARD_DUPLICATE,
- payload: {},
-});
-
-const deleteCard = (id) => ({
- type: EntryActionTypes.CARD_DELETE,
- payload: {
- id,
- },
-});
-
-const deleteCurrentCard = () => ({
- type: EntryActionTypes.CURRENT_CARD_DELETE,
- payload: {},
-});
-
-const handleCardDelete = (card) => ({
- type: EntryActionTypes.CARD_DELETE_HANDLE,
- payload: {
- card,
- },
-});
-
-export default {
- createCard,
- handleCardCreate,
- updateCard,
- updateCurrentCard,
- handleCardUpdate,
- moveCard,
- moveCurrentCard,
- transferCard,
- transferCurrentCard,
- duplicateCard,
- duplicateCurrentCard,
- deleteCard,
- deleteCurrentCard,
- handleCardDelete,
-};
+import EntryActionTypes from '../constants/EntryActionTypes';
+
+const createCard = (listId, data, autoOpen) => ({
+ type: EntryActionTypes.CARD_CREATE,
+ payload: {
+ listId,
+ data,
+ autoOpen,
+ },
+});
+
+const handleCardCreate = (card) => ({
+ type: EntryActionTypes.CARD_CREATE_HANDLE,
+ payload: {
+ card,
+ },
+});
+
+const updateCard = (id, data) => ({
+ type: EntryActionTypes.CARD_UPDATE,
+ payload: {
+ id,
+ data,
+ },
+});
+
+const updateCurrentCard = (data) => ({
+ type: EntryActionTypes.CURRENT_CARD_UPDATE,
+ payload: {
+ data,
+ },
+});
+
+const handleCardUpdate = (card) => ({
+ type: EntryActionTypes.CARD_UPDATE_HANDLE,
+ payload: {
+ card,
+ },
+});
+
+const moveCard = (id, listId, index = 0) => ({
+ type: EntryActionTypes.CARD_MOVE,
+ payload: {
+ id,
+ listId,
+ index,
+ },
+});
+
+const moveCurrentCard = (listId, index = 0) => ({
+ type: EntryActionTypes.CURRENT_CARD_MOVE,
+ payload: {
+ listId,
+ index,
+ },
+});
+
+const transferCard = (id, boardId, listId, index = 0) => ({
+ type: EntryActionTypes.CARD_TRANSFER,
+ payload: {
+ id,
+ boardId,
+ listId,
+ index,
+ },
+});
+
+const transferCurrentCard = (boardId, listId, index = 0) => ({
+ type: EntryActionTypes.CURRENT_CARD_TRANSFER,
+ payload: {
+ boardId,
+ listId,
+ index,
+ },
+});
+
+const duplicateCard = (id) => ({
+ type: EntryActionTypes.CARD_DUPLICATE,
+ payload: {
+ id,
+ },
+});
+
+const duplicateCurrentCard = () => ({
+ type: EntryActionTypes.CURRENT_CARD_DUPLICATE,
+ payload: {},
+});
+
+const deleteCard = (id) => ({
+ type: EntryActionTypes.CARD_DELETE,
+ payload: {
+ id,
+ },
+});
+
+const deleteCurrentCard = () => ({
+ type: EntryActionTypes.CURRENT_CARD_DELETE,
+ payload: {},
+});
+
+const handleCardDelete = (card) => ({
+ type: EntryActionTypes.CARD_DELETE_HANDLE,
+ payload: {
+ card,
+ },
+});
+
+export default {
+ createCard,
+ handleCardCreate,
+ updateCard,
+ updateCurrentCard,
+ handleCardUpdate,
+ moveCard,
+ moveCurrentCard,
+ transferCard,
+ transferCurrentCard,
+ duplicateCard,
+ duplicateCurrentCard,
+ deleteCard,
+ deleteCurrentCard,
+ handleCardDelete,
+};
diff --git a/client/src/locales/en/core.js b/client/src/locales/en/core.js
index 41e4494..4a85b26 100644
--- a/client/src/locales/en/core.js
+++ b/client/src/locales/en/core.js
@@ -1,239 +1,239 @@
-export default {
- format: {
- date: 'M/d/yyyy',
- time: 'p',
- dateTime: '$t(format:date) $t(format:time)',
- longDate: 'MMM d',
- longDateTime: "MMMM d 'at' p",
- fullDate: 'MMM d, y',
- fullDateTime: "MMMM d, y 'at' p",
- },
-
- translation: {
- common: {
- aboutPlanka: 'About Planka',
- account: 'Account',
- actions: 'Actions',
- addAttachment_title: 'Add Attachment',
- addComment: 'Add comment',
- addManager_title: 'Add Manager',
- addMember_title: 'Add Member',
- addUser_title: 'Add User',
- administrator: 'Administrator',
- all: 'All',
- allChangesWillBeAutomaticallySavedAfterConnectionRestored:
- 'All changes will be automatically saved
after connection restored.',
- areYouSureYouWantToDeleteThisAttachment: 'Are you sure you want to delete this attachment?',
- areYouSureYouWantToDeleteThisBoard: 'Are you sure you want to delete this board?',
- areYouSureYouWantToDeleteThisCard: 'Are you sure you want to delete this card?',
- areYouSureYouWantToDeleteThisComment: 'Are you sure you want to delete this comment?',
- areYouSureYouWantToDeleteThisLabel: 'Are you sure you want to delete this label?',
- areYouSureYouWantToDeleteThisList: 'Are you sure you want to delete this list?',
- areYouSureYouWantToDeleteThisProject: 'Are you sure you want to delete this project?',
- areYouSureYouWantToDeleteThisTask: 'Are you sure you want to delete this task?',
- areYouSureYouWantToDeleteThisUser: 'Are you sure you want to delete this user?',
- areYouSureYouWantToLeaveBoard: 'Are you sure you want to leave the board?',
- areYouSureYouWantToLeaveProject: 'Are you sure you want to leave the project?',
- areYouSureYouWantToRemoveThisManagerFromProject:
- 'Are you sure you want to remove this manager from the project?',
- areYouSureYouWantToRemoveThisMemberFromBoard:
- 'Are you sure you want to remove this member from the board?',
- attachment: 'Attachment',
- attachments: 'Attachments',
- authentication: 'Authentication',
- background: 'Background',
- board: 'Board',
- boardNotFound_title: 'Board Not Found',
- canComment: 'Can comment',
- canEditContentOfBoard: 'Can edit the content of the board.',
- canOnlyViewBoard: 'Can only view the board.',
- cardActions_title: 'Card Actions',
- cardNotFound_title: 'Card Not Found',
- cardOrActionAreDeleted: 'Card or action are deleted.',
- color: 'Color',
- copy_inline: 'copy',
- createBoard_title: 'Create Board',
- createLabel_title: 'Create Label',
- createNewOneOrSelectExistingOne: 'Create a new one or select
an existing one.',
- createProject_title: 'Create Project',
- createTextFile_title: 'Create Text File',
- currentPassword: 'Current password',
- dangerZone_title: 'Danger Zone',
- date: 'Date',
- dueDate_title: 'Due Date',
- deleteAttachment_title: 'Delete Attachment',
- deleteBoard_title: 'Delete Board',
- deleteCard_title: 'Delete Card',
- deleteComment_title: 'Delete Comment',
- deleteLabel_title: 'Delete Label',
- deleteList_title: 'Delete List',
- deleteProject_title: 'Delete Project',
- deleteTask_title: 'Delete Task',
- deleteUser_title: 'Delete User',
- description: 'Description',
- detectAutomatically: 'Detect automatically',
- dropFileToUpload: 'Drop file to upload',
- editor: 'Editor',
- editAttachment_title: 'Edit Attachment',
- editAvatar_title: 'Edit Avatar',
- editBoard_title: 'Edit Board',
- editDueDate_title: 'Edit Due Date',
- editEmail_title: 'Edit E-mail',
- editInformation_title: 'Edit Information',
- editLabel_title: 'Edit Label',
- editPassword_title: 'Edit Password',
- editPermissions_title: 'Edit Permissions',
- editStopwatch_title: 'Edit Stopwatch',
- editUsername_title: 'Edit Username',
- email: 'E-mail',
- emailAlreadyInUse: 'E-mail already in use',
- enterCardTitle: 'Enter card title... [Ctrl+Enter] to auto-open.',
- enterDescription: 'Enter description...',
- enterFilename: 'Enter filename',
- enterListTitle: 'Enter list title...',
- enterProjectTitle: 'Enter project title',
- enterTaskDescription: 'Enter task description...',
- filterByLabels_title: 'Filter By Labels',
- filterByMembers_title: 'Filter By Members',
- fromComputer_title: 'From Computer',
- fromTrello: 'From Trello',
- general: 'General',
- hours: 'Hours',
- importBoard_title: 'Import Board',
- invalidCurrentPassword: 'Invalid current password',
- labels: 'Labels',
- language: 'Language',
- leaveBoard_title: 'Leave Board',
- leaveProject_title: 'Leave Project',
- list: 'List',
- listActions_title: 'List Actions',
- managers: 'Managers',
- members: 'Members',
- minutes: 'Minutes',
- moveCard_title: 'Move Card',
- name: 'Name',
- newEmail: 'New e-mail',
- newPassword: 'New password',
- newUsername: 'New username',
- noConnectionToServer: 'No connection to server',
- noBoards: 'No boards',
- noLists: 'No lists',
- noProjects: 'No projects',
- notifications: 'Notifications',
- noUnreadNotifications: 'No unread notifications.',
- openBoard_title: 'Open Board',
- optional_inline: 'optional',
- organization: 'Organization',
- phone: 'Phone',
- preferences: 'Preferences',
- pressPasteShortcutToAddAttachmentFromClipboard:
- 'Tip: press Ctrl-V (Cmd-V on Mac) to add an attachment from the clipboard.',
- project: 'Project',
- projectNotFound_title: 'Project Not Found',
- removeManager_title: 'Remove Manager',
- removeMember_title: 'Remove Member',
- searchLabels: 'Search labels...',
- searchMembers: 'Search members...',
- searchUsers: 'Search users...',
- seconds: 'Seconds',
- selectBoard: 'Select board',
- selectList: 'Select list',
- selectPermissions_title: 'Select Permissions',
- selectProject: 'Select project',
- settings: 'Settings',
- stopwatch: 'Stopwatch',
- subscribeToMyOwnCardsByDefault: 'Subscribe to my own cards by default',
- taskActions_title: 'Task Actions',
- tasks: 'Tasks',
- thereIsNoPreviewAvailableForThisAttachment:
- 'There is no preview available for this attachment.',
- time: 'Time',
- title: 'Title',
- userActions_title: 'User Actions',
- userAddedThisCardToList: '<0>{{user}}0><1> added this card to {{list}}1>',
- userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}2>',
- userMovedCardFromListToList: '{{user}} moved <2>{{card}}2> from {{fromList}} to {{toList}}',
- userMovedThisCardFromListToList:
- '<0>{{user}}0><1> moved this card from {{fromList}} to {{toList}}1>',
- username: 'Username',
- usernameAlreadyInUse: 'Username already in use',
- users: 'Users',
- version: 'Version',
- viewer: 'Viewer',
- writeComment: 'Write a comment...',
- },
-
- action: {
- addAnotherCard: 'Add another card',
- addAnotherList: 'Add another list',
- addAnotherTask: 'Add another task',
- addCard: 'Add card',
- addCard_title: 'Add Card',
- addComment: 'Add comment',
- addList: 'Add list',
- addMember: 'Add member',
- addMoreDetailedDescription: 'Add more detailed description',
- addTask: 'Add task',
- addToCard: 'Add to card',
- addUser: 'Add user',
- createBoard: 'Create board',
- createFile: 'Create file',
- createLabel: 'Create label',
- createNewLabel: 'Create new label',
- createProject: 'Create project',
- delete: 'Delete',
- deleteAttachment: 'Delete attachment',
- deleteAvatar: 'Delete avatar',
- deleteBoard: 'Delete board',
- deleteCard: 'Delete card',
- deleteCard_title: 'Delete Card',
- deleteComment: 'Delete comment',
- deleteImage: 'Delete image',
- deleteLabel: 'Delete label',
- deleteList: 'Delete list',
- deleteList_title: 'Delete List',
- deleteProject: 'Delete project',
- deleteProject_title: 'Delete Project',
- deleteTask: 'Delete task',
- deleteTask_title: 'Delete Task',
- deleteUser: 'Delete user',
- duplicate: 'Duplicate',
- duplicateCard_title: 'Duplicate Card',
- edit: 'Edit',
- editDueDate_title: 'Edit Due Date',
- editDescription_title: 'Edit Description',
- editEmail_title: 'Edit E-mail',
- editInformation_title: 'Edit Information',
- editPassword_title: 'Edit Password',
- editPermissions: 'Edit permissions',
- editStopwatch_title: 'Edit Stopwatch',
- editTitle_title: 'Edit Title',
- editUsername_title: 'Edit Username',
- hideDetails: 'Hide details',
- import: 'Import',
- leaveBoard: 'Leave board',
- leaveProject: 'Leave project',
- logOut_title: 'Log Out',
- makeCover_title: 'Make Cover',
- move: 'Move',
- moveCard_title: 'Move Card',
- remove: 'Remove',
- removeBackground: 'Remove background',
- removeCover_title: 'Remove Cover',
- removeFromBoard: 'Remove from board',
- removeFromProject: 'Remove from project',
- removeManager: 'Remove manager',
- removeMember: 'Remove member',
- save: 'Save',
- showAllAttachments: 'Show all attachments ({{hidden}} hidden)',
- showDetails: 'Show details',
- showFewerAttachments: 'Show fewer attachments',
- start: 'Start',
- stop: 'Stop',
- subscribe: 'Subscribe',
- unsubscribe: 'Unsubscribe',
- uploadNewAvatar: 'Upload new avatar',
- uploadNewImage: 'Upload new image',
- },
- },
-};
+export default {
+ format: {
+ date: 'M/d/yyyy',
+ time: 'p',
+ dateTime: '$t(format:date) $t(format:time)',
+ longDate: 'MMM d',
+ longDateTime: "MMMM d 'at' p",
+ fullDate: 'MMM d, y',
+ fullDateTime: "MMMM d, y 'at' p",
+ },
+
+ translation: {
+ common: {
+ aboutPlanka: 'About Planka',
+ account: 'Account',
+ actions: 'Actions',
+ addAttachment_title: 'Add Attachment',
+ addComment: 'Add comment',
+ addManager_title: 'Add Manager',
+ addMember_title: 'Add Member',
+ addUser_title: 'Add User',
+ administrator: 'Administrator',
+ all: 'All',
+ allChangesWillBeAutomaticallySavedAfterConnectionRestored:
+ 'All changes will be automatically saved
after connection restored.',
+ areYouSureYouWantToDeleteThisAttachment: 'Are you sure you want to delete this attachment?',
+ areYouSureYouWantToDeleteThisBoard: 'Are you sure you want to delete this board?',
+ areYouSureYouWantToDeleteThisCard: 'Are you sure you want to delete this card?',
+ areYouSureYouWantToDeleteThisComment: 'Are you sure you want to delete this comment?',
+ areYouSureYouWantToDeleteThisLabel: 'Are you sure you want to delete this label?',
+ areYouSureYouWantToDeleteThisList: 'Are you sure you want to delete this list?',
+ areYouSureYouWantToDeleteThisProject: 'Are you sure you want to delete this project?',
+ areYouSureYouWantToDeleteThisTask: 'Are you sure you want to delete this task?',
+ areYouSureYouWantToDeleteThisUser: 'Are you sure you want to delete this user?',
+ areYouSureYouWantToLeaveBoard: 'Are you sure you want to leave the board?',
+ areYouSureYouWantToLeaveProject: 'Are you sure you want to leave the project?',
+ areYouSureYouWantToRemoveThisManagerFromProject:
+ 'Are you sure you want to remove this manager from the project?',
+ areYouSureYouWantToRemoveThisMemberFromBoard:
+ 'Are you sure you want to remove this member from the board?',
+ attachment: 'Attachment',
+ attachments: 'Attachments',
+ authentication: 'Authentication',
+ background: 'Background',
+ board: 'Board',
+ boardNotFound_title: 'Board Not Found',
+ canComment: 'Can comment',
+ canEditContentOfBoard: 'Can edit the content of the board.',
+ canOnlyViewBoard: 'Can only view the board.',
+ cardActions_title: 'Card Actions',
+ cardNotFound_title: 'Card Not Found',
+ cardOrActionAreDeleted: 'Card or action are deleted.',
+ color: 'Color',
+ copy_inline: 'copy',
+ createBoard_title: 'Create Board',
+ createLabel_title: 'Create Label',
+ createNewOneOrSelectExistingOne: 'Create a new one or select
an existing one.',
+ createProject_title: 'Create Project',
+ createTextFile_title: 'Create Text File',
+ currentPassword: 'Current password',
+ dangerZone_title: 'Danger Zone',
+ date: 'Date',
+ dueDate_title: 'Due Date',
+ deleteAttachment_title: 'Delete Attachment',
+ deleteBoard_title: 'Delete Board',
+ deleteCard_title: 'Delete Card',
+ deleteComment_title: 'Delete Comment',
+ deleteLabel_title: 'Delete Label',
+ deleteList_title: 'Delete List',
+ deleteProject_title: 'Delete Project',
+ deleteTask_title: 'Delete Task',
+ deleteUser_title: 'Delete User',
+ description: 'Description',
+ detectAutomatically: 'Detect automatically',
+ dropFileToUpload: 'Drop file to upload',
+ editor: 'Editor',
+ editAttachment_title: 'Edit Attachment',
+ editAvatar_title: 'Edit Avatar',
+ editBoard_title: 'Edit Board',
+ editDueDate_title: 'Edit Due Date',
+ editEmail_title: 'Edit E-mail',
+ editInformation_title: 'Edit Information',
+ editLabel_title: 'Edit Label',
+ editPassword_title: 'Edit Password',
+ editPermissions_title: 'Edit Permissions',
+ editStopwatch_title: 'Edit Stopwatch',
+ editUsername_title: 'Edit Username',
+ email: 'E-mail',
+ emailAlreadyInUse: 'E-mail already in use',
+ enterCardTitle: 'Enter card title... [Ctrl+Enter] to auto-open.',
+ enterDescription: 'Enter description...',
+ enterFilename: 'Enter filename',
+ enterListTitle: 'Enter list title...',
+ enterProjectTitle: 'Enter project title',
+ enterTaskDescription: 'Enter task description...',
+ filterByLabels_title: 'Filter By Labels',
+ filterByMembers_title: 'Filter By Members',
+ fromComputer_title: 'From Computer',
+ fromTrello: 'From Trello',
+ general: 'General',
+ hours: 'Hours',
+ importBoard_title: 'Import Board',
+ invalidCurrentPassword: 'Invalid current password',
+ labels: 'Labels',
+ language: 'Language',
+ leaveBoard_title: 'Leave Board',
+ leaveProject_title: 'Leave Project',
+ list: 'List',
+ listActions_title: 'List Actions',
+ managers: 'Managers',
+ members: 'Members',
+ minutes: 'Minutes',
+ moveCard_title: 'Move Card',
+ name: 'Name',
+ newEmail: 'New e-mail',
+ newPassword: 'New password',
+ newUsername: 'New username',
+ noConnectionToServer: 'No connection to server',
+ noBoards: 'No boards',
+ noLists: 'No lists',
+ noProjects: 'No projects',
+ notifications: 'Notifications',
+ noUnreadNotifications: 'No unread notifications.',
+ openBoard_title: 'Open Board',
+ optional_inline: 'optional',
+ organization: 'Organization',
+ phone: 'Phone',
+ preferences: 'Preferences',
+ pressPasteShortcutToAddAttachmentFromClipboard:
+ 'Tip: press Ctrl-V (Cmd-V on Mac) to add an attachment from the clipboard.',
+ project: 'Project',
+ projectNotFound_title: 'Project Not Found',
+ removeManager_title: 'Remove Manager',
+ removeMember_title: 'Remove Member',
+ searchLabels: 'Search labels...',
+ searchMembers: 'Search members...',
+ searchUsers: 'Search users...',
+ seconds: 'Seconds',
+ selectBoard: 'Select board',
+ selectList: 'Select list',
+ selectPermissions_title: 'Select Permissions',
+ selectProject: 'Select project',
+ settings: 'Settings',
+ stopwatch: 'Stopwatch',
+ subscribeToMyOwnCardsByDefault: 'Subscribe to my own cards by default',
+ taskActions_title: 'Task Actions',
+ tasks: 'Tasks',
+ thereIsNoPreviewAvailableForThisAttachment:
+ 'There is no preview available for this attachment.',
+ time: 'Time',
+ title: 'Title',
+ userActions_title: 'User Actions',
+ userAddedThisCardToList: '<0>{{user}}0><1> added this card to {{list}}1>',
+ userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}2>',
+ userMovedCardFromListToList: '{{user}} moved <2>{{card}}2> from {{fromList}} to {{toList}}',
+ userMovedThisCardFromListToList:
+ '<0>{{user}}0><1> moved this card from {{fromList}} to {{toList}}1>',
+ username: 'Username',
+ usernameAlreadyInUse: 'Username already in use',
+ users: 'Users',
+ version: 'Version',
+ viewer: 'Viewer',
+ writeComment: 'Write a comment...',
+ },
+
+ action: {
+ addAnotherCard: 'Add another card',
+ addAnotherList: 'Add another list',
+ addAnotherTask: 'Add another task',
+ addCard: 'Add card',
+ addCard_title: 'Add Card',
+ addComment: 'Add comment',
+ addList: 'Add list',
+ addMember: 'Add member',
+ addMoreDetailedDescription: 'Add more detailed description',
+ addTask: 'Add task',
+ addToCard: 'Add to card',
+ addUser: 'Add user',
+ createBoard: 'Create board',
+ createFile: 'Create file',
+ createLabel: 'Create label',
+ createNewLabel: 'Create new label',
+ createProject: 'Create project',
+ delete: 'Delete',
+ deleteAttachment: 'Delete attachment',
+ deleteAvatar: 'Delete avatar',
+ deleteBoard: 'Delete board',
+ deleteCard: 'Delete card',
+ deleteCard_title: 'Delete Card',
+ deleteComment: 'Delete comment',
+ deleteImage: 'Delete image',
+ deleteLabel: 'Delete label',
+ deleteList: 'Delete list',
+ deleteList_title: 'Delete List',
+ deleteProject: 'Delete project',
+ deleteProject_title: 'Delete Project',
+ deleteTask: 'Delete task',
+ deleteTask_title: 'Delete Task',
+ deleteUser: 'Delete user',
+ duplicate: 'Duplicate',
+ duplicateCard_title: 'Duplicate Card',
+ edit: 'Edit',
+ editDueDate_title: 'Edit Due Date',
+ editDescription_title: 'Edit Description',
+ editEmail_title: 'Edit E-mail',
+ editInformation_title: 'Edit Information',
+ editPassword_title: 'Edit Password',
+ editPermissions: 'Edit permissions',
+ editStopwatch_title: 'Edit Stopwatch',
+ editTitle_title: 'Edit Title',
+ editUsername_title: 'Edit Username',
+ hideDetails: 'Hide details',
+ import: 'Import',
+ leaveBoard: 'Leave board',
+ leaveProject: 'Leave project',
+ logOut_title: 'Log Out',
+ makeCover_title: 'Make Cover',
+ move: 'Move',
+ moveCard_title: 'Move Card',
+ remove: 'Remove',
+ removeBackground: 'Remove background',
+ removeCover_title: 'Remove Cover',
+ removeFromBoard: 'Remove from board',
+ removeFromProject: 'Remove from project',
+ removeManager: 'Remove manager',
+ removeMember: 'Remove member',
+ save: 'Save',
+ showAllAttachments: 'Show all attachments ({{hidden}} hidden)',
+ showDetails: 'Show details',
+ showFewerAttachments: 'Show fewer attachments',
+ start: 'Start',
+ stop: 'Stop',
+ subscribe: 'Subscribe',
+ unsubscribe: 'Unsubscribe',
+ uploadNewAvatar: 'Upload new avatar',
+ uploadNewImage: 'Upload new image',
+ },
+ },
+};
diff --git a/client/src/locales/fr/core.js b/client/src/locales/fr/core.js
index 1b9296f..c8353b5 100644
--- a/client/src/locales/fr/core.js
+++ b/client/src/locales/fr/core.js
@@ -1,201 +1,201 @@
-import dateFns from 'date-fns/locale/fr';
-
-export default {
- dateFns,
-
- format: {
- date: 'P',
- time: 'HH:mm',
- dateTime: '$t(format:date) $t(format:time)',
- longDate: 'd MMM',
- longDateTime: "d MMMM 'Ã ' p",
- fullDate: 'd MMM y',
- fullDateTime: "d MMMM y 'Ã ' p",
- },
-
- translation: {
- common: {
- account: 'Compte',
- actions: 'Actions',
- addAttachment_title: 'Ajouter une pièce jointe',
- addComment: 'Ajouter un commentaire',
- addMember_title: 'Ajouter un membre',
- addUser_title: 'Ajouter un utilisateur',
- administrator: 'Administrateur',
- all: 'Tout',
- allChangesWillBeAutomaticallySavedAfterConnectionRestored:
- 'Toutes les modifications seront automatiquement enregistrées
une fois la connexion rétablie.',
- areYouSureYouWantToDeleteThisAttachment: 'Voulez-vous vraiment supprimer cette pièce jointe?',
- areYouSureYouWantToDeleteThisBoard: 'Êtes-vous sûr de vouloir supprimer ce forum?',
- areYouSureYouWantToDeleteThisCard: 'Voulez-vous vraiment supprimer cette carte?',
- areYouSureYouWantToDeleteThisComment: 'Êtes-vous sûr de vouloir supprimer ce commentaire?',
- areYouSureYouWantToDeleteThisLabel: 'Voulez-vous vraiment supprimer ce libellé?',
- areYouSureYouWantToDeleteThisList: 'Êtes-vous sûr de vouloir supprimer cette liste?',
- areYouSureYouWantToDeleteThisProject: 'Êtes-vous sûr de vouloir supprimer ce projet?',
- areYouSureYouWantToDeleteThisTask: 'Êtes-vous sûr de vouloir supprimer cette tâche?',
- areYouSureYouWantToDeleteThisUser: 'Êtes-vous sûr de vouloir supprimer cet utilisateur?',
- areYouSureYouWantToRemoveThisMemberFromProject:
- 'Êtes-vous sûr de vouloir supprimer ce membre du projet?',
- attachment: 'Attachement',
- attachments: 'Pièces jointes',
- authentication: 'Authentification',
- board: 'Tableau',
- boardNotFound_title: 'Carte non trouvée',
- cardActions_title: 'Actions sur la carte',
- cardNotFound_title: 'Carte non trouvée',
- cardOrActionAreDeleted: "La carte ou l'action sont supprimées.",
- color: 'Couleur',
- createBoard_title: 'Créer un tableau',
- createLabel_title: 'Créer une étiquette',
- createNewOneOrSelectExistingOne: 'Créez-en un nouveau ou sélectionnez
un existant.',
- createProject_title: 'Créer un projet',
- createTextFile_title: 'Créer un fichier texte',
- currentPassword: 'Mot de passe actuel',
- date: 'Date',
- dueDate_title: "Date d'échéance",
- deleteAttachment_title: 'Supprimer la pièce jointe',
- deleteBoard_title: 'Supprimer le tableau',
- deleteCard_title: 'Supprimer la carte',
- deleteComment_title: 'Supprimer le commentaire',
- deleteLabel_title: "Supprimer l'étiquette",
- deleteList_title: 'Supprimer la liste',
- deleteProject_title: 'Supprimer le projet',
- deleteTask_title: 'Supprimer la tâche',
- deleteUser_title: "Supprimer l'utilisateur",
- description: 'Description',
- dropFileToUpload: 'Déposer le fichier à télécharger',
- editAttachment_title: 'Modifier la pièce jointe',
- editAvatar_title: 'Modifier Avatar',
- editBoard_title: 'Modifier le tableau',
- editDueDate_title: "Modifier la date d'échéance",
- editEmail_title: "Modifier l'e-mail",
- editLabel_title: "Modifier l'étiquette",
- editPassword_title: 'Modifier le mot de passe',
- editStopwatch_title: 'Modifier la minuterie',
- editUsername_title: "Modifier le nom d'utilisateur",
- email: 'E-mail',
- emailAlreadyInUse: 'Email déjà utilisé',
- enterCardTitle: 'Entrer le titre de la carte...',
- enterDescription: 'Entrez la description...',
- enterFilename: 'Entrez le nom du fichier',
- enterListTitle: 'Entrer le titre de la liste...',
- enterProjectTitle: 'Saisir le titre du projet',
- enterTaskDescription: 'Saisir la description de la tâche...',
- filterByLabels_title: 'Filtrer par libellés',
- filterByMembers_title: 'Filtrer par membres',
- fromComputer_title: "Depuis l'ordinateur",
- hours: 'Les heures',
- invalidCurrentPassword: 'Mot de passe actuel invalide',
- labels: 'Étiquettes',
- list: 'Lister',
- listActions_title: 'Liste des actions',
- members: 'Membres',
- minutes: 'Minutes',
- moveCard_title: 'Déplacer la carte',
- name: 'Nom',
- newEmail: 'Nouveau courriel',
- newPassword: 'Nouveau mot de passe',
- newUsername: "Nouveau nom d'utilisateur",
- noConnectionToServer: 'Pas de connexion au serveur',
- noBoards: 'Pas de planches',
- noLists: 'Pas de listes',
- noProjects: 'Pas de projets',
- notifications: 'Notifications',
- noUnreadNotifications: 'Aucune notification non lue.',
- openBoard_title: 'Open Board',
- optional_inline: 'optionnel',
- organization: 'Organisation',
- phone: 'Téléphone',
- preferences: 'Préférences',
- pressPasteShortcutToAddAttachmentFromClipboard: 'Conseil',
- project: 'Projet',
- projectNotFound_title: 'Projet introuvable',
- removeMember_title: 'Supprimer le membre',
- seconds: 'Secondes',
- selectBoard: 'Sélectionner une carte',
- selectList: 'Sélectionner une liste',
- selectProject: 'Sélectionner un projet',
- settings: 'Réglages',
- stopwatch: 'Minuteur',
- subscribeToMyOwnCardsByDefault: 'Abonnez-vous à mes propres cartes par défaut',
- taskActions_title: 'Actions de tâche',
- tasks: 'Tâches',
- time: 'Temps',
- title: 'Titre',
- userActions_title: "Actions de l'utilisateur",
- userAddedThisCardToList: '<0> {{user}} 0> <1> a ajouté cette carte à {{list}} 1>',
- userLeftNewCommentToCard:
- '{{user}} a laissé un nouveau commentaire {{comment}} à <2> {{card}} 2>',
- userMovedCardFromListToList:
- '{{user}} a déplacé <2> {{card}} 2> de {{fromList}} vers {{toList}}',
- userMovedThisCardFromListToList:
- '<0> {{user}} 0> <1> a déplacé cette carte de {{fromList}} vers {{toList}} 1>',
- username: "Nom d'utilisateur",
- usernameAlreadyInUse: "Nom d'utilisateur déjà utilisé",
- users: 'Utilisateurs',
- writeComment: 'Écrire un commentaire...',
- },
-
- action: {
- addAnotherCard: 'Ajouter une autre carte',
- addAnotherList: 'Ajouter une autre liste',
- addAnotherTask: 'Ajouter une autre tâche',
- addCard: 'Ajouter une carte',
- addCard_title: 'Ajouter une carte',
- addComment: 'Ajouter un commentaire',
- addList: 'Ajouter la liste',
- addMoreDetailedDescription: 'Ajouter une description plus détaillée',
- addTask: 'Ajouter une tâche',
- addToCard: 'Ajouter à la carte',
- addUser: 'Ajouter un utilisateur',
- createBoard: 'Créer un tableau',
- createFile: 'Créer un fichier',
- createLabel: 'Créer une étiquette',
- createNewLabel: 'Créer une nouvelle étiquette',
- createProject: 'Créer un projet',
- delete: 'Supprimer',
- deleteAttachment: 'Supprimer la pièce jointe',
- deleteAvatar: "Supprimer l'avatar",
- deleteBoard: 'Supprimer le tableau',
- deleteCard: 'Supprimer la carte',
- deleteCard_title: 'Supprimer la carte',
- deleteComment: 'Supprimer le commentaire',
- deleteImage: "Supprimer l'image",
- deleteLabel: "Supprimer l'étiquette",
- deleteList: 'Supprimer la liste',
- deleteList_title: 'Supprimer la liste',
- deleteProject: 'Supprimer le projet',
- deleteProject_title: 'Supprimer le projet',
- deleteTask: 'Supprimer la tâche',
- deleteTask_title: 'Supprimer la tâche',
- deleteUser: "Supprimer l'utilisateur",
- duplicate: 'Dupliquer',
- edit: 'Modifier',
- editDueDate_title: "Modifier la date d'échéance",
- editDescription_title: 'Éditer la description',
- editEmail_title: "Modifier l'e-mail",
- editPassword_title: 'Modifier le mot de passe',
- editStopwatch_title: 'Modifier la minuterie',
- editTitle_title: 'Modifier le titre',
- editUsername_title: "Modifier le nom d'utilisateur",
- logOut_title: 'Se déconnecter',
- makeCover_title: 'Faire la jaquette',
- move: 'Déplacer',
- moveCard_title: 'Déplacer la carte',
- remove: 'Supprimer',
- removeBackground: "Supprimer l'arrière-plan",
- removeCover_title: 'Supprimer la jaquette',
- removeFromProject: 'Supprimer du projet',
- removeMember: 'Supprimer le membre',
- save: 'Sauvegarder',
- showAllAttachments: 'Afficher toutes les pièces jointes ({{hidden}} masquées)',
- showFewerAttachments: 'Afficher moins de pièces jointes',
- start: 'Début',
- stop: 'Arrêter',
- subscribe: "S'abonner",
- unsubscribe: 'Se désabonner',
- uploadNewAvatar: 'Télécharger un nouvel avatar',
- uploadNewImage: 'Télécharger une nouvelle image',
- },
- },
-};
+import dateFns from 'date-fns/locale/fr';
+
+export default {
+ dateFns,
+
+ format: {
+ date: 'P',
+ time: 'HH:mm',
+ dateTime: '$t(format:date) $t(format:time)',
+ longDate: 'd MMM',
+ longDateTime: "d MMMM 'Ã ' p",
+ fullDate: 'd MMM y',
+ fullDateTime: "d MMMM y 'Ã ' p",
+ },
+
+ translation: {
+ common: {
+ account: 'Compte',
+ actions: 'Actions',
+ addAttachment_title: 'Ajouter une pièce jointe',
+ addComment: 'Ajouter un commentaire',
+ addMember_title: 'Ajouter un membre',
+ addUser_title: 'Ajouter un utilisateur',
+ administrator: 'Administrateur',
+ all: 'Tout',
+ allChangesWillBeAutomaticallySavedAfterConnectionRestored:
+ 'Toutes les modifications seront automatiquement enregistrées
une fois la connexion rétablie.',
+ areYouSureYouWantToDeleteThisAttachment: 'Voulez-vous vraiment supprimer cette pièce jointe?',
+ areYouSureYouWantToDeleteThisBoard: 'Êtes-vous sûr de vouloir supprimer ce forum?',
+ areYouSureYouWantToDeleteThisCard: 'Voulez-vous vraiment supprimer cette carte?',
+ areYouSureYouWantToDeleteThisComment: 'Êtes-vous sûr de vouloir supprimer ce commentaire?',
+ areYouSureYouWantToDeleteThisLabel: 'Voulez-vous vraiment supprimer ce libellé?',
+ areYouSureYouWantToDeleteThisList: 'Êtes-vous sûr de vouloir supprimer cette liste?',
+ areYouSureYouWantToDeleteThisProject: 'Êtes-vous sûr de vouloir supprimer ce projet?',
+ areYouSureYouWantToDeleteThisTask: 'Êtes-vous sûr de vouloir supprimer cette tâche?',
+ areYouSureYouWantToDeleteThisUser: 'Êtes-vous sûr de vouloir supprimer cet utilisateur?',
+ areYouSureYouWantToRemoveThisMemberFromProject:
+ 'Êtes-vous sûr de vouloir supprimer ce membre du projet?',
+ attachment: 'Attachement',
+ attachments: 'Pièces jointes',
+ authentication: 'Authentification',
+ board: 'Tableau',
+ boardNotFound_title: 'Carte non trouvée',
+ cardActions_title: 'Actions sur la carte',
+ cardNotFound_title: 'Carte non trouvée',
+ cardOrActionAreDeleted: "La carte ou l'action sont supprimées.",
+ color: 'Couleur',
+ createBoard_title: 'Créer un tableau',
+ createLabel_title: 'Créer une étiquette',
+ createNewOneOrSelectExistingOne: 'Créez-en un nouveau ou sélectionnez
un existant.',
+ createProject_title: 'Créer un projet',
+ createTextFile_title: 'Créer un fichier texte',
+ currentPassword: 'Mot de passe actuel',
+ date: 'Date',
+ dueDate_title: "Date d'échéance",
+ deleteAttachment_title: 'Supprimer la pièce jointe',
+ deleteBoard_title: 'Supprimer le tableau',
+ deleteCard_title: 'Supprimer la carte',
+ deleteComment_title: 'Supprimer le commentaire',
+ deleteLabel_title: "Supprimer l'étiquette",
+ deleteList_title: 'Supprimer la liste',
+ deleteProject_title: 'Supprimer le projet',
+ deleteTask_title: 'Supprimer la tâche',
+ deleteUser_title: "Supprimer l'utilisateur",
+ description: 'Description',
+ dropFileToUpload: 'Déposer le fichier à télécharger',
+ editAttachment_title: 'Modifier la pièce jointe',
+ editAvatar_title: 'Modifier Avatar',
+ editBoard_title: 'Modifier le tableau',
+ editDueDate_title: "Modifier la date d'échéance",
+ editEmail_title: "Modifier l'e-mail",
+ editLabel_title: "Modifier l'étiquette",
+ editPassword_title: 'Modifier le mot de passe',
+ editStopwatch_title: 'Modifier la minuterie',
+ editUsername_title: "Modifier le nom d'utilisateur",
+ email: 'E-mail',
+ emailAlreadyInUse: 'Email déjà utilisé',
+ enterCardTitle: 'Entrer le titre de la carte...',
+ enterDescription: 'Entrez la description...',
+ enterFilename: 'Entrez le nom du fichier',
+ enterListTitle: 'Entrer le titre de la liste...',
+ enterProjectTitle: 'Saisir le titre du projet',
+ enterTaskDescription: 'Saisir la description de la tâche...',
+ filterByLabels_title: 'Filtrer par libellés',
+ filterByMembers_title: 'Filtrer par membres',
+ fromComputer_title: "Depuis l'ordinateur",
+ hours: 'Les heures',
+ invalidCurrentPassword: 'Mot de passe actuel invalide',
+ labels: 'Étiquettes',
+ list: 'Lister',
+ listActions_title: 'Liste des actions',
+ members: 'Membres',
+ minutes: 'Minutes',
+ moveCard_title: 'Déplacer la carte',
+ name: 'Nom',
+ newEmail: 'Nouveau courriel',
+ newPassword: 'Nouveau mot de passe',
+ newUsername: "Nouveau nom d'utilisateur",
+ noConnectionToServer: 'Pas de connexion au serveur',
+ noBoards: 'Pas de planches',
+ noLists: 'Pas de listes',
+ noProjects: 'Pas de projets',
+ notifications: 'Notifications',
+ noUnreadNotifications: 'Aucune notification non lue.',
+ openBoard_title: 'Open Board',
+ optional_inline: 'optionnel',
+ organization: 'Organisation',
+ phone: 'Téléphone',
+ preferences: 'Préférences',
+ pressPasteShortcutToAddAttachmentFromClipboard: 'Conseil',
+ project: 'Projet',
+ projectNotFound_title: 'Projet introuvable',
+ removeMember_title: 'Supprimer le membre',
+ seconds: 'Secondes',
+ selectBoard: 'Sélectionner une carte',
+ selectList: 'Sélectionner une liste',
+ selectProject: 'Sélectionner un projet',
+ settings: 'Réglages',
+ stopwatch: 'Minuteur',
+ subscribeToMyOwnCardsByDefault: 'Abonnez-vous à mes propres cartes par défaut',
+ taskActions_title: 'Actions de tâche',
+ tasks: 'Tâches',
+ time: 'Temps',
+ title: 'Titre',
+ userActions_title: "Actions de l'utilisateur",
+ userAddedThisCardToList: '<0> {{user}} 0> <1> a ajouté cette carte à {{list}} 1>',
+ userLeftNewCommentToCard:
+ '{{user}} a laissé un nouveau commentaire {{comment}} à <2> {{card}} 2>',
+ userMovedCardFromListToList:
+ '{{user}} a déplacé <2> {{card}} 2> de {{fromList}} vers {{toList}}',
+ userMovedThisCardFromListToList:
+ '<0> {{user}} 0> <1> a déplacé cette carte de {{fromList}} vers {{toList}} 1>',
+ username: "Nom d'utilisateur",
+ usernameAlreadyInUse: "Nom d'utilisateur déjà utilisé",
+ users: 'Utilisateurs',
+ writeComment: 'Écrire un commentaire...',
+ },
+
+ action: {
+ addAnotherCard: 'Ajouter une autre carte',
+ addAnotherList: 'Ajouter une autre liste',
+ addAnotherTask: 'Ajouter une autre tâche',
+ addCard: 'Ajouter une carte',
+ addCard_title: 'Ajouter une carte',
+ addComment: 'Ajouter un commentaire',
+ addList: 'Ajouter la liste',
+ addMoreDetailedDescription: 'Ajouter une description plus détaillée',
+ addTask: 'Ajouter une tâche',
+ addToCard: 'Ajouter à la carte',
+ addUser: 'Ajouter un utilisateur',
+ createBoard: 'Créer un tableau',
+ createFile: 'Créer un fichier',
+ createLabel: 'Créer une étiquette',
+ createNewLabel: 'Créer une nouvelle étiquette',
+ createProject: 'Créer un projet',
+ delete: 'Supprimer',
+ deleteAttachment: 'Supprimer la pièce jointe',
+ deleteAvatar: "Supprimer l'avatar",
+ deleteBoard: 'Supprimer le tableau',
+ deleteCard: 'Supprimer la carte',
+ deleteCard_title: 'Supprimer la carte',
+ deleteComment: 'Supprimer le commentaire',
+ deleteImage: "Supprimer l'image",
+ deleteLabel: "Supprimer l'étiquette",
+ deleteList: 'Supprimer la liste',
+ deleteList_title: 'Supprimer la liste',
+ deleteProject: 'Supprimer le projet',
+ deleteProject_title: 'Supprimer le projet',
+ deleteTask: 'Supprimer la tâche',
+ deleteTask_title: 'Supprimer la tâche',
+ deleteUser: "Supprimer l'utilisateur",
+ duplicate: 'Dupliquer',
+ edit: 'Modifier',
+ editDueDate_title: "Modifier la date d'échéance",
+ editDescription_title: 'Éditer la description',
+ editEmail_title: "Modifier l'e-mail",
+ editPassword_title: 'Modifier le mot de passe',
+ editStopwatch_title: 'Modifier la minuterie',
+ editTitle_title: 'Modifier le titre',
+ editUsername_title: "Modifier le nom d'utilisateur",
+ logOut_title: 'Se déconnecter',
+ makeCover_title: 'Faire la jaquette',
+ move: 'Déplacer',
+ moveCard_title: 'Déplacer la carte',
+ remove: 'Supprimer',
+ removeBackground: "Supprimer l'arrière-plan",
+ removeCover_title: 'Supprimer la jaquette',
+ removeFromProject: 'Supprimer du projet',
+ removeMember: 'Supprimer le membre',
+ save: 'Sauvegarder',
+ showAllAttachments: 'Afficher toutes les pièces jointes ({{hidden}} masquées)',
+ showFewerAttachments: 'Afficher moins de pièces jointes',
+ start: 'Début',
+ stop: 'Arrêter',
+ subscribe: "S'abonner",
+ unsubscribe: 'Se désabonner',
+ uploadNewAvatar: 'Télécharger un nouvel avatar',
+ uploadNewImage: 'Télécharger une nouvelle image',
+ },
+ },
+};
diff --git a/client/src/models/Card.js b/client/src/models/Card.js
index 3c45256..867df26 100755
--- a/client/src/models/Card.js
+++ b/client/src/models/Card.js
@@ -1,358 +1,358 @@
-import pick from 'lodash/pick';
-import { attr, fk, many, oneToOne } from 'redux-orm';
-
-import BaseModel from './BaseModel';
-import ActionTypes from '../constants/ActionTypes';
-import Config from '../constants/Config';
-import { ActivityTypes } from '../constants/Enums';
-
-export default class extends BaseModel {
- static modelName = 'Card';
-
- static fields = {
- id: attr(),
- position: attr(),
- name: attr(),
- description: attr(),
- dueDate: attr(),
- stopwatch: attr(),
- isSubscribed: attr({
- getDefault: () => false,
- }),
- isActivitiesFetching: attr({
- getDefault: () => false,
- }),
- isAllActivitiesFetched: attr({
- getDefault: () => false,
- }),
- isActivitiesDetailsVisible: attr({
- getDefault: () => false,
- }),
- isActivitiesDetailsFetching: attr({
- getDefault: () => false,
- }),
- boardId: fk({
- to: 'Board',
- as: 'board',
- relatedName: 'cards',
- }),
- listId: fk({
- to: 'List',
- as: 'list',
- relatedName: 'cards',
- }),
- coverAttachmentId: oneToOne({
- to: 'Attachment',
- as: 'coverAttachment',
- relatedName: 'coveredCard',
- }),
- users: many('User', 'cards'),
- labels: many('Label', 'cards'),
- };
-
- static reducer({ type, payload }, Card) {
- switch (type) {
- case ActionTypes.LOCATION_CHANGE_HANDLE:
- case ActionTypes.CORE_INITIALIZE:
- case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
- case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
- if (payload.cards) {
- payload.cards.forEach((card) => {
- Card.upsert(card);
- });
- }
-
- if (payload.cardMemberships) {
- payload.cardMemberships.forEach(({ cardId, userId }) => {
- Card.withId(cardId).users.add(userId);
- });
- }
-
- if (payload.cardLabels) {
- payload.cardLabels.forEach(({ cardId, labelId }) => {
- Card.withId(cardId).labels.add(labelId);
- });
- }
-
- break;
- case ActionTypes.SOCKET_RECONNECT_HANDLE:
- Card.all()
- .toModelArray()
- .forEach((cardModel) => {
- cardModel.deleteWithClearable();
- });
-
- if (payload.cards) {
- payload.cards.forEach((card) => {
- Card.upsert(card);
- });
- }
-
- if (payload.cardMemberships) {
- payload.cardMemberships.forEach(({ cardId, userId }) => {
- Card.withId(cardId).users.add(userId);
- });
- }
-
- if (payload.cardLabels) {
- payload.cardLabels.forEach(({ cardId, labelId }) => {
- Card.withId(cardId).labels.add(labelId);
- });
- }
-
- break;
- case ActionTypes.USER_TO_CARD_ADD: {
- const cardModel = Card.withId(payload.cardId);
- cardModel.users.add(payload.id);
-
- if (payload.isCurrent) {
- cardModel.isSubscribed = true;
- }
-
- break;
- }
- case ActionTypes.USER_TO_CARD_ADD__SUCCESS:
- case ActionTypes.USER_TO_CARD_ADD_HANDLE:
- try {
- Card.withId(payload.cardMembership.cardId).users.add(payload.cardMembership.userId);
- } catch {} // eslint-disable-line no-empty
-
- break;
- case ActionTypes.USER_FROM_CARD_REMOVE:
- Card.withId(payload.cardId).users.remove(payload.id);
-
- break;
- case ActionTypes.USER_FROM_CARD_REMOVE__SUCCESS:
- case ActionTypes.USER_FROM_CARD_REMOVE_HANDLE:
- try {
- Card.withId(payload.cardMembership.cardId).users.remove(payload.cardMembership.userId);
- } catch {} // eslint-disable-line no-empty
-
- break;
- case ActionTypes.BOARD_FETCH__SUCCESS:
- payload.cards.forEach((card) => {
- Card.upsert(card);
- });
-
- payload.cardMemberships.forEach(({ cardId, userId }) => {
- Card.withId(cardId).users.add(userId);
- });
-
- payload.cardLabels.forEach(({ cardId, labelId }) => {
- Card.withId(cardId).labels.add(labelId);
- });
-
- break;
- case ActionTypes.LABEL_TO_CARD_ADD:
- Card.withId(payload.cardId).labels.add(payload.id);
-
- break;
- case ActionTypes.LABEL_TO_CARD_ADD__SUCCESS:
- case ActionTypes.LABEL_TO_CARD_ADD_HANDLE:
- try {
- Card.withId(payload.cardLabel.cardId).labels.add(payload.cardLabel.labelId);
- } catch {} // eslint-disable-line no-empty
-
- break;
- case ActionTypes.LABEL_FROM_CARD_REMOVE:
- Card.withId(payload.cardId).labels.remove(payload.id);
-
- break;
- case ActionTypes.LABEL_FROM_CARD_REMOVE__SUCCESS:
- case ActionTypes.LABEL_FROM_CARD_REMOVE_HANDLE:
- try {
- Card.withId(payload.cardLabel.cardId).labels.remove(payload.cardLabel.labelId);
- } catch {} // eslint-disable-line no-empty
-
- break;
- case ActionTypes.CARD_CREATE:
- case ActionTypes.CARD_UPDATE__SUCCESS:
- case ActionTypes.CARD_UPDATE_HANDLE:
- Card.upsert(payload.card);
-
- break;
- case ActionTypes.CARD_CREATE__SUCCESS:
- Card.withId(payload.localId).delete();
- Card.upsert(payload.card);
-
- break;
- case ActionTypes.CARD_CREATE_HANDLE: {
- const cardModel = Card.upsert(payload.card);
-
- payload.cardMemberships.forEach(({ userId }) => {
- cardModel.users.add(userId);
- });
-
- payload.cardLabels.forEach(({ labelId }) => {
- cardModel.labels.add(labelId);
- });
-
- break;
- }
- case ActionTypes.CARD_UPDATE:
- Card.withId(payload.id).update(payload.data);
-
- break;
- case ActionTypes.CARD_DUPLICATE: {
- const cardModel = Card.withId(payload.id);
-
- const nextCardModel = Card.upsert({
- ...pick(cardModel.ref, [
- 'boardId',
- 'listId',
- 'position',
- 'name',
- 'description',
- 'dueDate',
- 'stopwatch',
- ]),
- ...payload.card,
- });
-
- cardModel.users.toRefArray().forEach(({ id }) => {
- nextCardModel.users.add(id);
- });
-
- cardModel.labels.toRefArray().forEach(({ id }) => {
- nextCardModel.labels.add(id);
- });
-
- break;
- }
- case ActionTypes.CARD_DUPLICATE__SUCCESS: {
- Card.withId(payload.localId).deleteWithRelated();
- const cardModel = Card.upsert(payload.card);
-
- payload.cardMemberships.forEach(({ userId }) => {
- cardModel.users.add(userId);
- });
-
- payload.cardLabels.forEach(({ labelId }) => {
- cardModel.labels.add(labelId);
- });
-
- break;
- }
- case ActionTypes.CARD_DELETE:
- Card.withId(payload.id).deleteWithRelated();
-
- break;
- case ActionTypes.CARD_DELETE__SUCCESS:
- case ActionTypes.CARD_DELETE_HANDLE: {
- const cardModel = Card.withId(payload.card.id);
-
- if (cardModel) {
- cardModel.deleteWithRelated();
- }
-
- break;
- }
- case ActionTypes.ACTIVITIES_FETCH:
- Card.withId(payload.cardId).update({
- isActivitiesFetching: true,
- });
-
- break;
- case ActionTypes.ACTIVITIES_FETCH__SUCCESS:
- Card.withId(payload.cardId).update({
- isActivitiesFetching: false,
- isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
- });
-
- break;
- case ActionTypes.ACTIVITIES_DETAILS_TOGGLE: {
- const cardModel = Card.withId(payload.cardId);
- cardModel.isActivitiesDetailsVisible = payload.isVisible;
-
- if (payload.isVisible) {
- cardModel.isActivitiesDetailsFetching = true;
- }
-
- break;
- }
- case ActionTypes.ACTIVITIES_DETAILS_TOGGLE__SUCCESS: {
- const cardModel = Card.withId(payload.cardId);
-
- cardModel.update({
- isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
- isActivitiesDetailsFetching: false,
- });
-
- cardModel.deleteActivities();
-
- break;
- }
- case ActionTypes.NOTIFICATION_CREATE_HANDLE:
- payload.cards.forEach((card) => {
- Card.upsert(card);
- });
-
- break;
- default:
- }
- }
-
- getOrderedTasksQuerySet() {
- return this.tasks.orderBy('position');
- }
-
- getOrderedAttachmentsQuerySet() {
- return this.attachments.orderBy('createdAt', false);
- }
-
- getFilteredOrderedInCardActivitiesQuerySet() {
- const filter = {
- isInCard: true,
- };
-
- if (!this.isActivitiesDetailsVisible) {
- filter.type = ActivityTypes.COMMENT_CARD;
- }
-
- return this.activities.filter(filter).orderBy('createdAt', false);
- }
-
- getUnreadNotificationsQuerySet() {
- return this.notifications.filter({
- isRead: false,
- });
- }
-
- isAvailableForUser(userId) {
- return this.board && this.board.isAvailableForUser(userId);
- }
-
- deleteClearable() {
- this.users.clear();
- this.labels.clear();
- }
-
- deleteActivities() {
- this.activities.toModelArray().forEach((activityModel) => {
- if (activityModel.notification) {
- activityModel.update({
- isInCard: false,
- });
- } else {
- activityModel.delete();
- }
- });
- }
-
- deleteRelated() {
- this.deleteClearable();
- this.tasks.delete();
- this.attachments.delete();
- this.deleteActivities();
- }
-
- deleteWithClearable() {
- this.deleteClearable();
- this.delete();
- }
-
- deleteWithRelated() {
- this.deleteRelated();
- this.delete();
- }
-}
+import pick from 'lodash/pick';
+import { attr, fk, many, oneToOne } from 'redux-orm';
+
+import BaseModel from './BaseModel';
+import ActionTypes from '../constants/ActionTypes';
+import Config from '../constants/Config';
+import { ActivityTypes } from '../constants/Enums';
+
+export default class extends BaseModel {
+ static modelName = 'Card';
+
+ static fields = {
+ id: attr(),
+ position: attr(),
+ name: attr(),
+ description: attr(),
+ dueDate: attr(),
+ stopwatch: attr(),
+ isSubscribed: attr({
+ getDefault: () => false,
+ }),
+ isActivitiesFetching: attr({
+ getDefault: () => false,
+ }),
+ isAllActivitiesFetched: attr({
+ getDefault: () => false,
+ }),
+ isActivitiesDetailsVisible: attr({
+ getDefault: () => false,
+ }),
+ isActivitiesDetailsFetching: attr({
+ getDefault: () => false,
+ }),
+ boardId: fk({
+ to: 'Board',
+ as: 'board',
+ relatedName: 'cards',
+ }),
+ listId: fk({
+ to: 'List',
+ as: 'list',
+ relatedName: 'cards',
+ }),
+ coverAttachmentId: oneToOne({
+ to: 'Attachment',
+ as: 'coverAttachment',
+ relatedName: 'coveredCard',
+ }),
+ users: many('User', 'cards'),
+ labels: many('Label', 'cards'),
+ };
+
+ static reducer({ type, payload }, Card) {
+ switch (type) {
+ case ActionTypes.LOCATION_CHANGE_HANDLE:
+ case ActionTypes.CORE_INITIALIZE:
+ case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
+ case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
+ if (payload.cards) {
+ payload.cards.forEach((card) => {
+ Card.upsert(card);
+ });
+ }
+
+ if (payload.cardMemberships) {
+ payload.cardMemberships.forEach(({ cardId, userId }) => {
+ Card.withId(cardId).users.add(userId);
+ });
+ }
+
+ if (payload.cardLabels) {
+ payload.cardLabels.forEach(({ cardId, labelId }) => {
+ Card.withId(cardId).labels.add(labelId);
+ });
+ }
+
+ break;
+ case ActionTypes.SOCKET_RECONNECT_HANDLE:
+ Card.all()
+ .toModelArray()
+ .forEach((cardModel) => {
+ cardModel.deleteWithClearable();
+ });
+
+ if (payload.cards) {
+ payload.cards.forEach((card) => {
+ Card.upsert(card);
+ });
+ }
+
+ if (payload.cardMemberships) {
+ payload.cardMemberships.forEach(({ cardId, userId }) => {
+ Card.withId(cardId).users.add(userId);
+ });
+ }
+
+ if (payload.cardLabels) {
+ payload.cardLabels.forEach(({ cardId, labelId }) => {
+ Card.withId(cardId).labels.add(labelId);
+ });
+ }
+
+ break;
+ case ActionTypes.USER_TO_CARD_ADD: {
+ const cardModel = Card.withId(payload.cardId);
+ cardModel.users.add(payload.id);
+
+ if (payload.isCurrent) {
+ cardModel.isSubscribed = true;
+ }
+
+ break;
+ }
+ case ActionTypes.USER_TO_CARD_ADD__SUCCESS:
+ case ActionTypes.USER_TO_CARD_ADD_HANDLE:
+ try {
+ Card.withId(payload.cardMembership.cardId).users.add(payload.cardMembership.userId);
+ } catch {} // eslint-disable-line no-empty
+
+ break;
+ case ActionTypes.USER_FROM_CARD_REMOVE:
+ Card.withId(payload.cardId).users.remove(payload.id);
+
+ break;
+ case ActionTypes.USER_FROM_CARD_REMOVE__SUCCESS:
+ case ActionTypes.USER_FROM_CARD_REMOVE_HANDLE:
+ try {
+ Card.withId(payload.cardMembership.cardId).users.remove(payload.cardMembership.userId);
+ } catch {} // eslint-disable-line no-empty
+
+ break;
+ case ActionTypes.BOARD_FETCH__SUCCESS:
+ payload.cards.forEach((card) => {
+ Card.upsert(card);
+ });
+
+ payload.cardMemberships.forEach(({ cardId, userId }) => {
+ Card.withId(cardId).users.add(userId);
+ });
+
+ payload.cardLabels.forEach(({ cardId, labelId }) => {
+ Card.withId(cardId).labels.add(labelId);
+ });
+
+ break;
+ case ActionTypes.LABEL_TO_CARD_ADD:
+ Card.withId(payload.cardId).labels.add(payload.id);
+
+ break;
+ case ActionTypes.LABEL_TO_CARD_ADD__SUCCESS:
+ case ActionTypes.LABEL_TO_CARD_ADD_HANDLE:
+ try {
+ Card.withId(payload.cardLabel.cardId).labels.add(payload.cardLabel.labelId);
+ } catch {} // eslint-disable-line no-empty
+
+ break;
+ case ActionTypes.LABEL_FROM_CARD_REMOVE:
+ Card.withId(payload.cardId).labels.remove(payload.id);
+
+ break;
+ case ActionTypes.LABEL_FROM_CARD_REMOVE__SUCCESS:
+ case ActionTypes.LABEL_FROM_CARD_REMOVE_HANDLE:
+ try {
+ Card.withId(payload.cardLabel.cardId).labels.remove(payload.cardLabel.labelId);
+ } catch {} // eslint-disable-line no-empty
+
+ break;
+ case ActionTypes.CARD_CREATE:
+ case ActionTypes.CARD_UPDATE__SUCCESS:
+ case ActionTypes.CARD_UPDATE_HANDLE:
+ Card.upsert(payload.card);
+
+ break;
+ case ActionTypes.CARD_CREATE__SUCCESS:
+ Card.withId(payload.localId).delete();
+ Card.upsert(payload.card);
+
+ break;
+ case ActionTypes.CARD_CREATE_HANDLE: {
+ const cardModel = Card.upsert(payload.card);
+
+ payload.cardMemberships.forEach(({ userId }) => {
+ cardModel.users.add(userId);
+ });
+
+ payload.cardLabels.forEach(({ labelId }) => {
+ cardModel.labels.add(labelId);
+ });
+
+ break;
+ }
+ case ActionTypes.CARD_UPDATE:
+ Card.withId(payload.id).update(payload.data);
+
+ break;
+ case ActionTypes.CARD_DUPLICATE: {
+ const cardModel = Card.withId(payload.id);
+
+ const nextCardModel = Card.upsert({
+ ...pick(cardModel.ref, [
+ 'boardId',
+ 'listId',
+ 'position',
+ 'name',
+ 'description',
+ 'dueDate',
+ 'stopwatch',
+ ]),
+ ...payload.card,
+ });
+
+ cardModel.users.toRefArray().forEach(({ id }) => {
+ nextCardModel.users.add(id);
+ });
+
+ cardModel.labels.toRefArray().forEach(({ id }) => {
+ nextCardModel.labels.add(id);
+ });
+
+ break;
+ }
+ case ActionTypes.CARD_DUPLICATE__SUCCESS: {
+ Card.withId(payload.localId).deleteWithRelated();
+ const cardModel = Card.upsert(payload.card);
+
+ payload.cardMemberships.forEach(({ userId }) => {
+ cardModel.users.add(userId);
+ });
+
+ payload.cardLabels.forEach(({ labelId }) => {
+ cardModel.labels.add(labelId);
+ });
+
+ break;
+ }
+ case ActionTypes.CARD_DELETE:
+ Card.withId(payload.id).deleteWithRelated();
+
+ break;
+ case ActionTypes.CARD_DELETE__SUCCESS:
+ case ActionTypes.CARD_DELETE_HANDLE: {
+ const cardModel = Card.withId(payload.card.id);
+
+ if (cardModel) {
+ cardModel.deleteWithRelated();
+ }
+
+ break;
+ }
+ case ActionTypes.ACTIVITIES_FETCH:
+ Card.withId(payload.cardId).update({
+ isActivitiesFetching: true,
+ });
+
+ break;
+ case ActionTypes.ACTIVITIES_FETCH__SUCCESS:
+ Card.withId(payload.cardId).update({
+ isActivitiesFetching: false,
+ isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
+ });
+
+ break;
+ case ActionTypes.ACTIVITIES_DETAILS_TOGGLE: {
+ const cardModel = Card.withId(payload.cardId);
+ cardModel.isActivitiesDetailsVisible = payload.isVisible;
+
+ if (payload.isVisible) {
+ cardModel.isActivitiesDetailsFetching = true;
+ }
+
+ break;
+ }
+ case ActionTypes.ACTIVITIES_DETAILS_TOGGLE__SUCCESS: {
+ const cardModel = Card.withId(payload.cardId);
+
+ cardModel.update({
+ isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
+ isActivitiesDetailsFetching: false,
+ });
+
+ cardModel.deleteActivities();
+
+ break;
+ }
+ case ActionTypes.NOTIFICATION_CREATE_HANDLE:
+ payload.cards.forEach((card) => {
+ Card.upsert(card);
+ });
+
+ break;
+ default:
+ }
+ }
+
+ getOrderedTasksQuerySet() {
+ return this.tasks.orderBy('position');
+ }
+
+ getOrderedAttachmentsQuerySet() {
+ return this.attachments.orderBy('createdAt', false);
+ }
+
+ getFilteredOrderedInCardActivitiesQuerySet() {
+ const filter = {
+ isInCard: true,
+ };
+
+ if (!this.isActivitiesDetailsVisible) {
+ filter.type = ActivityTypes.COMMENT_CARD;
+ }
+
+ return this.activities.filter(filter).orderBy('createdAt', false);
+ }
+
+ getUnreadNotificationsQuerySet() {
+ return this.notifications.filter({
+ isRead: false,
+ });
+ }
+
+ isAvailableForUser(userId) {
+ return this.board && this.board.isAvailableForUser(userId);
+ }
+
+ deleteClearable() {
+ this.users.clear();
+ this.labels.clear();
+ }
+
+ deleteActivities() {
+ this.activities.toModelArray().forEach((activityModel) => {
+ if (activityModel.notification) {
+ activityModel.update({
+ isInCard: false,
+ });
+ } else {
+ activityModel.delete();
+ }
+ });
+ }
+
+ deleteRelated() {
+ this.deleteClearable();
+ this.tasks.delete();
+ this.attachments.delete();
+ this.deleteActivities();
+ }
+
+ deleteWithClearable() {
+ this.deleteClearable();
+ this.delete();
+ }
+
+ deleteWithRelated() {
+ this.deleteRelated();
+ this.delete();
+ }
+}
diff --git a/client/src/models/Task.js b/client/src/models/Task.js
index b990fe2..0c9dc37 100755
--- a/client/src/models/Task.js
+++ b/client/src/models/Task.js
@@ -1,100 +1,100 @@
-import { attr, fk } from 'redux-orm';
-
-import { createLocalId } from '../utils/local-id';
-import BaseModel from './BaseModel';
-import ActionTypes from '../constants/ActionTypes';
-
-export default class extends BaseModel {
- static modelName = 'Task';
-
- static fields = {
- id: attr(),
- position: attr(),
- name: attr(),
- isCompleted: attr({
- getDefault: () => false,
- }),
- cardId: fk({
- to: 'Card',
- as: 'card',
- relatedName: 'tasks',
- }),
- };
-
- static reducer({ type, payload }, Task) {
- switch (type) {
- case ActionTypes.LOCATION_CHANGE_HANDLE:
- case ActionTypes.CORE_INITIALIZE:
- case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
- case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
- if (payload.tasks) {
- payload.tasks.forEach((task) => {
- Task.upsert(task);
- });
- }
-
- break;
- case ActionTypes.SOCKET_RECONNECT_HANDLE:
- Task.all().delete();
-
- if (payload.tasks) {
- payload.tasks.forEach((task) => {
- Task.upsert(task);
- });
- }
-
- break;
- case ActionTypes.BOARD_FETCH__SUCCESS:
- case ActionTypes.CARD_CREATE_HANDLE:
- case ActionTypes.CARD_DUPLICATE__SUCCESS:
- payload.tasks.forEach((task) => {
- Task.upsert(task);
- });
-
- break;
- case ActionTypes.CARD_DUPLICATE:
- payload.taskIds.forEach((taskId, index) => {
- const taskModel = Task.withId(taskId);
-
- Task.upsert({
- ...taskModel.ref,
- id: `${createLocalId()}-${index}`, // TODO: hack?
- cardId: payload.card.id,
- });
- });
-
- break;
- case ActionTypes.TASK_CREATE:
- case ActionTypes.TASK_CREATE_HANDLE:
- case ActionTypes.TASK_UPDATE__SUCCESS:
- case ActionTypes.TASK_UPDATE_HANDLE:
- Task.upsert(payload.task);
-
- break;
- case ActionTypes.TASK_CREATE__SUCCESS:
- Task.withId(payload.localId).delete();
- Task.upsert(payload.task);
-
- break;
- case ActionTypes.TASK_UPDATE:
- Task.withId(payload.id).update(payload.data);
-
- break;
- case ActionTypes.TASK_DELETE:
- Task.withId(payload.id).delete();
-
- break;
- case ActionTypes.TASK_DELETE__SUCCESS:
- case ActionTypes.TASK_DELETE_HANDLE: {
- const taskModel = Task.withId(payload.task.id);
-
- if (taskModel) {
- taskModel.delete();
- }
-
- break;
- }
- default:
- }
- }
-}
+import { attr, fk } from 'redux-orm';
+
+import { createLocalId } from '../utils/local-id';
+import BaseModel from './BaseModel';
+import ActionTypes from '../constants/ActionTypes';
+
+export default class extends BaseModel {
+ static modelName = 'Task';
+
+ static fields = {
+ id: attr(),
+ position: attr(),
+ name: attr(),
+ isCompleted: attr({
+ getDefault: () => false,
+ }),
+ cardId: fk({
+ to: 'Card',
+ as: 'card',
+ relatedName: 'tasks',
+ }),
+ };
+
+ static reducer({ type, payload }, Task) {
+ switch (type) {
+ case ActionTypes.LOCATION_CHANGE_HANDLE:
+ case ActionTypes.CORE_INITIALIZE:
+ case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
+ case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
+ if (payload.tasks) {
+ payload.tasks.forEach((task) => {
+ Task.upsert(task);
+ });
+ }
+
+ break;
+ case ActionTypes.SOCKET_RECONNECT_HANDLE:
+ Task.all().delete();
+
+ if (payload.tasks) {
+ payload.tasks.forEach((task) => {
+ Task.upsert(task);
+ });
+ }
+
+ break;
+ case ActionTypes.BOARD_FETCH__SUCCESS:
+ case ActionTypes.CARD_CREATE_HANDLE:
+ case ActionTypes.CARD_DUPLICATE__SUCCESS:
+ payload.tasks.forEach((task) => {
+ Task.upsert(task);
+ });
+
+ break;
+ case ActionTypes.CARD_DUPLICATE:
+ payload.taskIds.forEach((taskId, index) => {
+ const taskModel = Task.withId(taskId);
+
+ Task.upsert({
+ ...taskModel.ref,
+ id: `${createLocalId()}-${index}`, // TODO: hack?
+ cardId: payload.card.id,
+ });
+ });
+
+ break;
+ case ActionTypes.TASK_CREATE:
+ case ActionTypes.TASK_CREATE_HANDLE:
+ case ActionTypes.TASK_UPDATE__SUCCESS:
+ case ActionTypes.TASK_UPDATE_HANDLE:
+ Task.upsert(payload.task);
+
+ break;
+ case ActionTypes.TASK_CREATE__SUCCESS:
+ Task.withId(payload.localId).delete();
+ Task.upsert(payload.task);
+
+ break;
+ case ActionTypes.TASK_UPDATE:
+ Task.withId(payload.id).update(payload.data);
+
+ break;
+ case ActionTypes.TASK_DELETE:
+ Task.withId(payload.id).delete();
+
+ break;
+ case ActionTypes.TASK_DELETE__SUCCESS:
+ case ActionTypes.TASK_DELETE_HANDLE: {
+ const taskModel = Task.withId(payload.task.id);
+
+ if (taskModel) {
+ taskModel.delete();
+ }
+
+ break;
+ }
+ default:
+ }
+ }
+}
diff --git a/client/src/sagas/core/services/cards.js b/client/src/sagas/core/services/cards.js
index eb2d1da..6297bf5 100644
--- a/client/src/sagas/core/services/cards.js
+++ b/client/src/sagas/core/services/cards.js
@@ -1,225 +1,225 @@
-import { call, put, select } from 'redux-saga/effects';
-
-import { goToBoard, goToCard } from './router';
-import request from '../request';
-import selectors from '../../../selectors';
-import actions from '../../../actions';
-import api from '../../../api';
-import i18n from '../../../i18n';
-import { createLocalId } from '../../../utils/local-id';
-
-export function* createCard(listId, data, autoOpen) {
- const { boardId } = yield select(selectors.selectListById, listId);
-
- const nextData = {
- ...data,
- position: yield select(selectors.selectNextCardPosition, listId),
- };
-
- const localId = yield call(createLocalId);
-
- yield put(
- actions.createCard({
- ...nextData,
- boardId,
- listId,
- id: localId,
- }),
- );
-
- let card;
- try {
- ({ item: card } = yield call(request, api.createCard, listId, nextData));
- } catch (error) {
- yield put(actions.createCard.failure(localId, error));
- return;
- }
-
- yield put(actions.createCard.success(localId, card));
-
- if (autoOpen) {
- yield call(goToCard, card.id);
- }
-}
-
-export function* handleCardCreate({ id }) {
- let card;
- let cardMemberships;
- let cardLabels;
- let tasks;
- let attachments;
-
- try {
- ({
- item: card,
- included: { cardMemberships, cardLabels, tasks, attachments },
- } = yield call(request, api.getCard, id));
- } catch (error) {
- return;
- }
-
- yield put(actions.handleCardCreate(card, cardMemberships, cardLabels, tasks, attachments));
-}
-
-export function* updateCard(id, data) {
- yield put(actions.updateCard(id, data));
-
- let card;
- try {
- ({ item: card } = yield call(request, api.updateCard, id, data));
- } catch (error) {
- yield put(actions.updateCard.failure(id, error));
- return;
- }
-
- yield put(actions.updateCard.success(card));
-}
-
-export function* updateCurrentCard(data) {
- const { cardId } = yield select(selectors.selectPath);
-
- yield call(updateCard, cardId, data);
-}
-
-// TODO: handle card transfer
-export function* handleCardUpdate(card) {
- yield put(actions.handleCardUpdate(card));
-}
-
-export function* moveCard(id, listId, index) {
- const position = yield select(selectors.selectNextCardPosition, listId, index, id);
-
- yield call(updateCard, id, {
- listId,
- position,
- });
-}
-
-export function* moveCurrentCard(listId, index) {
- const { cardId } = yield select(selectors.selectPath);
-
- yield call(moveCard, cardId, listId, index);
-}
-
-export function* transferCard(id, boardId, listId, index) {
- const { cardId: currentCardId, boardId: currentBoardId } = yield select(selectors.selectPath);
- const position = yield select(selectors.selectNextCardPosition, listId, index, id);
-
- if (id === currentCardId) {
- yield call(goToBoard, currentBoardId);
- }
-
- yield call(updateCard, id, {
- boardId,
- listId,
- position,
- });
-}
-
-export function* transferCurrentCard(boardId, listId, index) {
- const { cardId } = yield select(selectors.selectPath);
-
- yield call(transferCard, cardId, boardId, listId, index);
-}
-
-export function* duplicateCard(id) {
- const { listId, name } = yield select(selectors.selectCardById, id);
- const index = yield select(selectors.selectCardIndexById, id);
-
- const nextData = {
- position: yield select(selectors.selectNextCardPosition, listId, index + 1),
- name: `${name} (${i18n.t('common.copy', {
- context: 'inline',
- })})`,
- };
-
- const localId = yield call(createLocalId);
- const taskIds = yield select(selectors.selectTaskIdsByCardId, id);
-
- yield put(
- actions.duplicateCard(
- id,
- {
- ...nextData,
- id: localId,
- },
- taskIds,
- ),
- );
-
- let card;
- let cardMemberships;
- let cardLabels;
- let tasks;
-
- try {
- ({
- item: card,
- included: { cardMemberships, cardLabels, tasks },
- } = yield call(request, api.duplicateCard, id, nextData));
- } catch (error) {
- yield put(actions.duplicateCard.failure(localId, error));
- return;
- }
-
- yield put(actions.duplicateCard.success(localId, card, cardMemberships, cardLabels, tasks));
-}
-
-export function* duplicateCurrentCard() {
- const { cardId } = yield select(selectors.selectPath);
-
- yield call(duplicateCard, cardId);
-}
-
-export function* deleteCard(id) {
- const { cardId, boardId } = yield select(selectors.selectPath);
-
- if (id === cardId) {
- yield call(goToBoard, boardId);
- }
-
- yield put(actions.deleteCard(id));
-
- let card;
- try {
- ({ item: card } = yield call(request, api.deleteCard, id));
- } catch (error) {
- yield put(actions.deleteCard.failure(id, error));
- return;
- }
-
- yield put(actions.deleteCard.success(card));
-}
-
-export function* deleteCurrentCard() {
- const { cardId } = yield select(selectors.selectPath);
-
- yield call(deleteCard, cardId);
-}
-
-export function* handleCardDelete(card) {
- const { cardId, boardId } = yield select(selectors.selectPath);
-
- if (card.id === cardId) {
- yield call(goToBoard, boardId);
- }
-
- yield put(actions.handleCardDelete(card));
-}
-
-export default {
- createCard,
- handleCardCreate,
- updateCard,
- updateCurrentCard,
- handleCardUpdate,
- moveCard,
- moveCurrentCard,
- transferCard,
- transferCurrentCard,
- duplicateCard,
- duplicateCurrentCard,
- deleteCard,
- deleteCurrentCard,
- handleCardDelete,
-};
+import { call, put, select } from 'redux-saga/effects';
+
+import { goToBoard, goToCard } from './router';
+import request from '../request';
+import selectors from '../../../selectors';
+import actions from '../../../actions';
+import api from '../../../api';
+import i18n from '../../../i18n';
+import { createLocalId } from '../../../utils/local-id';
+
+export function* createCard(listId, data, autoOpen) {
+ const { boardId } = yield select(selectors.selectListById, listId);
+
+ const nextData = {
+ ...data,
+ position: yield select(selectors.selectNextCardPosition, listId),
+ };
+
+ const localId = yield call(createLocalId);
+
+ yield put(
+ actions.createCard({
+ ...nextData,
+ boardId,
+ listId,
+ id: localId,
+ }),
+ );
+
+ let card;
+ try {
+ ({ item: card } = yield call(request, api.createCard, listId, nextData));
+ } catch (error) {
+ yield put(actions.createCard.failure(localId, error));
+ return;
+ }
+
+ yield put(actions.createCard.success(localId, card));
+
+ if (autoOpen) {
+ yield call(goToCard, card.id);
+ }
+}
+
+export function* handleCardCreate({ id }) {
+ let card;
+ let cardMemberships;
+ let cardLabels;
+ let tasks;
+ let attachments;
+
+ try {
+ ({
+ item: card,
+ included: { cardMemberships, cardLabels, tasks, attachments },
+ } = yield call(request, api.getCard, id));
+ } catch (error) {
+ return;
+ }
+
+ yield put(actions.handleCardCreate(card, cardMemberships, cardLabels, tasks, attachments));
+}
+
+export function* updateCard(id, data) {
+ yield put(actions.updateCard(id, data));
+
+ let card;
+ try {
+ ({ item: card } = yield call(request, api.updateCard, id, data));
+ } catch (error) {
+ yield put(actions.updateCard.failure(id, error));
+ return;
+ }
+
+ yield put(actions.updateCard.success(card));
+}
+
+export function* updateCurrentCard(data) {
+ const { cardId } = yield select(selectors.selectPath);
+
+ yield call(updateCard, cardId, data);
+}
+
+// TODO: handle card transfer
+export function* handleCardUpdate(card) {
+ yield put(actions.handleCardUpdate(card));
+}
+
+export function* moveCard(id, listId, index) {
+ const position = yield select(selectors.selectNextCardPosition, listId, index, id);
+
+ yield call(updateCard, id, {
+ listId,
+ position,
+ });
+}
+
+export function* moveCurrentCard(listId, index) {
+ const { cardId } = yield select(selectors.selectPath);
+
+ yield call(moveCard, cardId, listId, index);
+}
+
+export function* transferCard(id, boardId, listId, index) {
+ const { cardId: currentCardId, boardId: currentBoardId } = yield select(selectors.selectPath);
+ const position = yield select(selectors.selectNextCardPosition, listId, index, id);
+
+ if (id === currentCardId) {
+ yield call(goToBoard, currentBoardId);
+ }
+
+ yield call(updateCard, id, {
+ boardId,
+ listId,
+ position,
+ });
+}
+
+export function* transferCurrentCard(boardId, listId, index) {
+ const { cardId } = yield select(selectors.selectPath);
+
+ yield call(transferCard, cardId, boardId, listId, index);
+}
+
+export function* duplicateCard(id) {
+ const { listId, name } = yield select(selectors.selectCardById, id);
+ const index = yield select(selectors.selectCardIndexById, id);
+
+ const nextData = {
+ position: yield select(selectors.selectNextCardPosition, listId, index + 1),
+ name: `${name} (${i18n.t('common.copy', {
+ context: 'inline',
+ })})`,
+ };
+
+ const localId = yield call(createLocalId);
+ const taskIds = yield select(selectors.selectTaskIdsByCardId, id);
+
+ yield put(
+ actions.duplicateCard(
+ id,
+ {
+ ...nextData,
+ id: localId,
+ },
+ taskIds,
+ ),
+ );
+
+ let card;
+ let cardMemberships;
+ let cardLabels;
+ let tasks;
+
+ try {
+ ({
+ item: card,
+ included: { cardMemberships, cardLabels, tasks },
+ } = yield call(request, api.duplicateCard, id, nextData));
+ } catch (error) {
+ yield put(actions.duplicateCard.failure(localId, error));
+ return;
+ }
+
+ yield put(actions.duplicateCard.success(localId, card, cardMemberships, cardLabels, tasks));
+}
+
+export function* duplicateCurrentCard() {
+ const { cardId } = yield select(selectors.selectPath);
+
+ yield call(duplicateCard, cardId);
+}
+
+export function* deleteCard(id) {
+ const { cardId, boardId } = yield select(selectors.selectPath);
+
+ if (id === cardId) {
+ yield call(goToBoard, boardId);
+ }
+
+ yield put(actions.deleteCard(id));
+
+ let card;
+ try {
+ ({ item: card } = yield call(request, api.deleteCard, id));
+ } catch (error) {
+ yield put(actions.deleteCard.failure(id, error));
+ return;
+ }
+
+ yield put(actions.deleteCard.success(card));
+}
+
+export function* deleteCurrentCard() {
+ const { cardId } = yield select(selectors.selectPath);
+
+ yield call(deleteCard, cardId);
+}
+
+export function* handleCardDelete(card) {
+ const { cardId, boardId } = yield select(selectors.selectPath);
+
+ if (card.id === cardId) {
+ yield call(goToBoard, boardId);
+ }
+
+ yield put(actions.handleCardDelete(card));
+}
+
+export default {
+ createCard,
+ handleCardCreate,
+ updateCard,
+ updateCurrentCard,
+ handleCardUpdate,
+ moveCard,
+ moveCurrentCard,
+ transferCard,
+ transferCurrentCard,
+ duplicateCard,
+ duplicateCurrentCard,
+ deleteCard,
+ deleteCurrentCard,
+ handleCardDelete,
+};
diff --git a/client/src/sagas/core/watchers/cards.js b/client/src/sagas/core/watchers/cards.js
index 3fcb599..a75965d 100644
--- a/client/src/sagas/core/watchers/cards.js
+++ b/client/src/sagas/core/watchers/cards.js
@@ -1,43 +1,43 @@
-import { all, takeEvery } from 'redux-saga/effects';
-
-import services from '../services';
-import EntryActionTypes from '../../../constants/EntryActionTypes';
-
-export default function* cardsWatchers() {
- yield all([
- takeEvery(EntryActionTypes.CARD_CREATE, ({ payload: { listId, data, autoOpen } }) =>
- services.createCard(listId, data, autoOpen),
- ),
- takeEvery(EntryActionTypes.CARD_CREATE_HANDLE, ({ payload: { card } }) =>
- services.handleCardCreate(card),
- ),
- takeEvery(EntryActionTypes.CARD_UPDATE, ({ payload: { id, data } }) =>
- services.updateCard(id, data),
- ),
- takeEvery(EntryActionTypes.CURRENT_CARD_UPDATE, ({ payload: { data } }) =>
- services.updateCurrentCard(data),
- ),
- takeEvery(EntryActionTypes.CARD_UPDATE_HANDLE, ({ payload: { card } }) =>
- services.handleCardUpdate(card),
- ),
- takeEvery(EntryActionTypes.CARD_MOVE, ({ payload: { id, listId, index } }) =>
- services.moveCard(id, listId, index),
- ),
- takeEvery(EntryActionTypes.CURRENT_CARD_MOVE, ({ payload: { listId, index } }) =>
- services.moveCurrentCard(listId, index),
- ),
- takeEvery(EntryActionTypes.CARD_TRANSFER, ({ payload: { id, boardId, listId, index } }) =>
- services.transferCard(id, boardId, listId, index),
- ),
- takeEvery(EntryActionTypes.CURRENT_CARD_TRANSFER, ({ payload: { boardId, listId, index } }) =>
- services.transferCurrentCard(boardId, listId, index),
- ),
- takeEvery(EntryActionTypes.CARD_DUPLICATE, ({ payload: { id } }) => services.duplicateCard(id)),
- takeEvery(EntryActionTypes.CURRENT_CARD_DUPLICATE, () => services.duplicateCurrentCard()),
- takeEvery(EntryActionTypes.CARD_DELETE, ({ payload: { id } }) => services.deleteCard(id)),
- takeEvery(EntryActionTypes.CURRENT_CARD_DELETE, () => services.deleteCurrentCard()),
- takeEvery(EntryActionTypes.CARD_DELETE_HANDLE, ({ payload: { card } }) =>
- services.handleCardDelete(card),
- ),
- ]);
-}
+import { all, takeEvery } from 'redux-saga/effects';
+
+import services from '../services';
+import EntryActionTypes from '../../../constants/EntryActionTypes';
+
+export default function* cardsWatchers() {
+ yield all([
+ takeEvery(EntryActionTypes.CARD_CREATE, ({ payload: { listId, data, autoOpen } }) =>
+ services.createCard(listId, data, autoOpen),
+ ),
+ takeEvery(EntryActionTypes.CARD_CREATE_HANDLE, ({ payload: { card } }) =>
+ services.handleCardCreate(card),
+ ),
+ takeEvery(EntryActionTypes.CARD_UPDATE, ({ payload: { id, data } }) =>
+ services.updateCard(id, data),
+ ),
+ takeEvery(EntryActionTypes.CURRENT_CARD_UPDATE, ({ payload: { data } }) =>
+ services.updateCurrentCard(data),
+ ),
+ takeEvery(EntryActionTypes.CARD_UPDATE_HANDLE, ({ payload: { card } }) =>
+ services.handleCardUpdate(card),
+ ),
+ takeEvery(EntryActionTypes.CARD_MOVE, ({ payload: { id, listId, index } }) =>
+ services.moveCard(id, listId, index),
+ ),
+ takeEvery(EntryActionTypes.CURRENT_CARD_MOVE, ({ payload: { listId, index } }) =>
+ services.moveCurrentCard(listId, index),
+ ),
+ takeEvery(EntryActionTypes.CARD_TRANSFER, ({ payload: { id, boardId, listId, index } }) =>
+ services.transferCard(id, boardId, listId, index),
+ ),
+ takeEvery(EntryActionTypes.CURRENT_CARD_TRANSFER, ({ payload: { boardId, listId, index } }) =>
+ services.transferCurrentCard(boardId, listId, index),
+ ),
+ takeEvery(EntryActionTypes.CARD_DUPLICATE, ({ payload: { id } }) => services.duplicateCard(id)),
+ takeEvery(EntryActionTypes.CURRENT_CARD_DUPLICATE, () => services.duplicateCurrentCard()),
+ takeEvery(EntryActionTypes.CARD_DELETE, ({ payload: { id } }) => services.deleteCard(id)),
+ takeEvery(EntryActionTypes.CURRENT_CARD_DELETE, () => services.deleteCurrentCard()),
+ takeEvery(EntryActionTypes.CARD_DELETE_HANDLE, ({ payload: { card } }) =>
+ services.handleCardDelete(card),
+ ),
+ ]);
+}
diff --git a/client/src/selectors/cards.js b/client/src/selectors/cards.js
index d1137dc..ea43960 100644
--- a/client/src/selectors/cards.js
+++ b/client/src/selectors/cards.js
@@ -1,350 +1,350 @@
-import { createSelector } from 'redux-orm';
-
-import orm from '../orm';
-import { selectPath } from './router';
-import { selectCurrentUserId } from './users';
-import { isLocalId } from '../utils/local-id';
-
-export const makeSelectCardById = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return {
- ...cardModel.ref,
- coverUrl: cardModel.coverAttachment && cardModel.coverAttachment.coverUrl,
- isPersisted: !isLocalId(id),
- };
- },
- );
-
-export const selectCardById = makeSelectCardById();
-
-export const makeSelectCardIndexById = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- const cardModels = cardModel.list.getFilteredOrderedCardsModelArray();
- return cardModels.findIndex((cardModelItem) => cardModelItem.id === cardModel.id);
- },
- );
-
-export const selectCardIndexById = makeSelectCardIndexById();
-
-export const makeSelectUsersByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.users.toRefArray();
- },
- );
-
-export const selectUsersByCardId = makeSelectUsersByCardId();
-
-export const makeSelectLabelsByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.labels.toRefArray();
- },
- );
-
-export const selectLabelsByCardId = makeSelectLabelsByCardId();
-
-export const makeSelectTaskIdsByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel
- .getOrderedTasksQuerySet()
- .toRefArray()
- .map((task) => task.id);
- },
- );
-
-export const selectTaskIdsByCardId = makeSelectTaskIdsByCardId();
-
-export const makeSelectTasksByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.getOrderedTasksQuerySet().toRefArray();
- },
- );
-
-export const selectTasksByCardId = makeSelectTasksByCardId();
-
-export const makeSelectLastActivityIdByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- const lastActivityModel = cardModel.getFilteredOrderedInCardActivitiesQuerySet().last();
-
- return lastActivityModel && lastActivityModel.id;
- },
- );
-
-export const selectLastActivityIdByCardId = makeSelectLastActivityIdByCardId();
-
-export const makeSelectNotificationsByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.getUnreadNotificationsQuerySet().toRefArray();
- },
- );
-
-export const selectNotificationsByCardId = makeSelectNotificationsByCardId();
-
-export const makeSelectNotificationsTotalByCardId = () =>
- createSelector(
- orm,
- (_, id) => id,
- ({ Card }, id) => {
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.getUnreadNotificationsQuerySet().count();
- },
- );
-
-export const selectNotificationsTotalByCardId = makeSelectNotificationsTotalByCardId();
-
-export const selectCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.ref;
- },
-);
-
-export const selectUsersForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.users.toRefArray();
- },
-);
-
-export const selectLabelsForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel.labels.toRefArray();
- },
-);
-
-export const selectTasksForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel
- .getOrderedTasksQuerySet()
- .toRefArray()
- .map((task) => ({
- ...task,
- isPersisted: !isLocalId(task.id),
- }));
- },
-);
-
-export const selectAttachmentsForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel
- .getOrderedAttachmentsQuerySet()
- .toRefArray()
- .map((attachment) => ({
- ...attachment,
- isCover: attachment.id === cardModel.coverAttachmentId,
- isPersisted: !isLocalId(attachment.id),
- }));
- },
-);
-
-export const selectActivitiesForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- (state) => selectCurrentUserId(state),
- ({ Card }, id, currentUserId) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel
- .getFilteredOrderedInCardActivitiesQuerySet()
- .toModelArray()
- .map((activityModel) => ({
- ...activityModel.ref,
- isPersisted: !isLocalId(activityModel.id),
- user: {
- ...activityModel.user.ref,
- isCurrent: activityModel.user.id === currentUserId,
- },
- }));
- },
-);
-
-export const selectNotificationIdsForCurrentCard = createSelector(
- orm,
- (state) => selectPath(state).cardId,
- ({ Card }, id) => {
- if (!id) {
- return id;
- }
-
- const cardModel = Card.withId(id);
-
- if (!cardModel) {
- return cardModel;
- }
-
- return cardModel
- .getUnreadNotificationsQuerySet()
- .toRefArray()
- .map((notification) => notification.id);
- },
-);
-
-export default {
- makeSelectCardById,
- selectCardById,
- makeSelectCardIndexById,
- selectCardIndexById,
- makeSelectUsersByCardId,
- selectUsersByCardId,
- makeSelectLabelsByCardId,
- selectLabelsByCardId,
- makeSelectTaskIdsByCardId,
- selectTaskIdsByCardId,
- makeSelectTasksByCardId,
- selectTasksByCardId,
- makeSelectLastActivityIdByCardId,
- selectLastActivityIdByCardId,
- makeSelectNotificationsByCardId,
- selectNotificationsByCardId,
- makeSelectNotificationsTotalByCardId,
- selectNotificationsTotalByCardId,
- selectCurrentCard,
- selectUsersForCurrentCard,
- selectLabelsForCurrentCard,
- selectTasksForCurrentCard,
- selectAttachmentsForCurrentCard,
- selectActivitiesForCurrentCard,
- selectNotificationIdsForCurrentCard,
-};
+import { createSelector } from 'redux-orm';
+
+import orm from '../orm';
+import { selectPath } from './router';
+import { selectCurrentUserId } from './users';
+import { isLocalId } from '../utils/local-id';
+
+export const makeSelectCardById = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return {
+ ...cardModel.ref,
+ coverUrl: cardModel.coverAttachment && cardModel.coverAttachment.coverUrl,
+ isPersisted: !isLocalId(id),
+ };
+ },
+ );
+
+export const selectCardById = makeSelectCardById();
+
+export const makeSelectCardIndexById = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ const cardModels = cardModel.list.getFilteredOrderedCardsModelArray();
+ return cardModels.findIndex((cardModelItem) => cardModelItem.id === cardModel.id);
+ },
+ );
+
+export const selectCardIndexById = makeSelectCardIndexById();
+
+export const makeSelectUsersByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.users.toRefArray();
+ },
+ );
+
+export const selectUsersByCardId = makeSelectUsersByCardId();
+
+export const makeSelectLabelsByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.labels.toRefArray();
+ },
+ );
+
+export const selectLabelsByCardId = makeSelectLabelsByCardId();
+
+export const makeSelectTaskIdsByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel
+ .getOrderedTasksQuerySet()
+ .toRefArray()
+ .map((task) => task.id);
+ },
+ );
+
+export const selectTaskIdsByCardId = makeSelectTaskIdsByCardId();
+
+export const makeSelectTasksByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.getOrderedTasksQuerySet().toRefArray();
+ },
+ );
+
+export const selectTasksByCardId = makeSelectTasksByCardId();
+
+export const makeSelectLastActivityIdByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ const lastActivityModel = cardModel.getFilteredOrderedInCardActivitiesQuerySet().last();
+
+ return lastActivityModel && lastActivityModel.id;
+ },
+ );
+
+export const selectLastActivityIdByCardId = makeSelectLastActivityIdByCardId();
+
+export const makeSelectNotificationsByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.getUnreadNotificationsQuerySet().toRefArray();
+ },
+ );
+
+export const selectNotificationsByCardId = makeSelectNotificationsByCardId();
+
+export const makeSelectNotificationsTotalByCardId = () =>
+ createSelector(
+ orm,
+ (_, id) => id,
+ ({ Card }, id) => {
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.getUnreadNotificationsQuerySet().count();
+ },
+ );
+
+export const selectNotificationsTotalByCardId = makeSelectNotificationsTotalByCardId();
+
+export const selectCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.ref;
+ },
+);
+
+export const selectUsersForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.users.toRefArray();
+ },
+);
+
+export const selectLabelsForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel.labels.toRefArray();
+ },
+);
+
+export const selectTasksForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel
+ .getOrderedTasksQuerySet()
+ .toRefArray()
+ .map((task) => ({
+ ...task,
+ isPersisted: !isLocalId(task.id),
+ }));
+ },
+);
+
+export const selectAttachmentsForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel
+ .getOrderedAttachmentsQuerySet()
+ .toRefArray()
+ .map((attachment) => ({
+ ...attachment,
+ isCover: attachment.id === cardModel.coverAttachmentId,
+ isPersisted: !isLocalId(attachment.id),
+ }));
+ },
+);
+
+export const selectActivitiesForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ (state) => selectCurrentUserId(state),
+ ({ Card }, id, currentUserId) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel
+ .getFilteredOrderedInCardActivitiesQuerySet()
+ .toModelArray()
+ .map((activityModel) => ({
+ ...activityModel.ref,
+ isPersisted: !isLocalId(activityModel.id),
+ user: {
+ ...activityModel.user.ref,
+ isCurrent: activityModel.user.id === currentUserId,
+ },
+ }));
+ },
+);
+
+export const selectNotificationIdsForCurrentCard = createSelector(
+ orm,
+ (state) => selectPath(state).cardId,
+ ({ Card }, id) => {
+ if (!id) {
+ return id;
+ }
+
+ const cardModel = Card.withId(id);
+
+ if (!cardModel) {
+ return cardModel;
+ }
+
+ return cardModel
+ .getUnreadNotificationsQuerySet()
+ .toRefArray()
+ .map((notification) => notification.id);
+ },
+);
+
+export default {
+ makeSelectCardById,
+ selectCardById,
+ makeSelectCardIndexById,
+ selectCardIndexById,
+ makeSelectUsersByCardId,
+ selectUsersByCardId,
+ makeSelectLabelsByCardId,
+ selectLabelsByCardId,
+ makeSelectTaskIdsByCardId,
+ selectTaskIdsByCardId,
+ makeSelectTasksByCardId,
+ selectTasksByCardId,
+ makeSelectLastActivityIdByCardId,
+ selectLastActivityIdByCardId,
+ makeSelectNotificationsByCardId,
+ selectNotificationsByCardId,
+ makeSelectNotificationsTotalByCardId,
+ selectNotificationsTotalByCardId,
+ selectCurrentCard,
+ selectUsersForCurrentCard,
+ selectLabelsForCurrentCard,
+ selectTasksForCurrentCard,
+ selectAttachmentsForCurrentCard,
+ selectActivitiesForCurrentCard,
+ selectNotificationIdsForCurrentCard,
+};
diff --git a/package-lock.json b/package-lock.json
index eee91c9..5ec6c0e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,4122 +1,4122 @@
-{
- "name": "planka",
- "version": "1.16.2",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "planka",
- "version": "1.16.2",
- "hasInstallScript": true,
- "license": "AGPL-3.0",
- "dependencies": {
- "concurrently": "^8.2.2",
- "husky": "^8.0.3",
- "lint-staged": "^15.1.0"
- },
- "devDependencies": {
- "eslint": "^8.53.0",
- "eslint-config-prettier": "^9.0.0",
- "eslint-plugin-prettier": "^5.0.1",
- "prettier": "^3.1.0"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.13",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
- "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
- "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
- "dev": true
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@pkgr/utils": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
- "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "fast-glob": "^3.3.0",
- "is-glob": "^4.0.3",
- "open": "^9.1.0",
- "picocolors": "^1.0.0",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
- "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
- "dependencies": {
- "type-fest": "^1.0.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/bplist-parser": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
- "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
- "dev": true,
- "dependencies": {
- "big-integer": "^1.6.44"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bundle-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
- "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
- "dev": true,
- "dependencies": {
- "run-applescript": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
- "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
- "dependencies": {
- "restore-cursor": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-truncate": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
- "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
- "dependencies": {
- "slice-ansi": "^5.0.0",
- "string-width": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
- },
- "node_modules/commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/concurrently": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
- "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
- "dependencies": {
- "chalk": "^4.1.2",
- "date-fns": "^2.30.0",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.1",
- "shell-quote": "^1.8.1",
- "spawn-command": "0.0.2",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.2"
- },
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
- "dependencies": {
- "@babel/runtime": "^7.21.0"
- },
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/default-browser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
- "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
- "dev": true,
- "dependencies": {
- "bundle-name": "^3.0.0",
- "default-browser-id": "^3.0.0",
- "execa": "^7.1.1",
- "titleize": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
- "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
- "dev": true,
- "dependencies": {
- "bplist-parser": "^0.2.0",
- "untildify": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser/node_modules/execa": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
- "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.1",
- "human-signals": "^4.3.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^3.0.7",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/default-browser/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser/node_modules/human-signals": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
- "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
- "dev": true,
- "engines": {
- "node": ">=14.18.0"
- }
- },
- "node_modules/default-browser/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
- "@humanwhocodes/config-array": "^0.11.13",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-prettier": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
- "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
- "dev": true,
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-prettier": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz",
- "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==",
- "dev": true,
- "dependencies": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.8.5"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/prettier"
- },
- "peerDependencies": {
- "@types/eslint": ">=8.0.0",
- "eslint": ">=8.0.0",
- "prettier": ">=3.0.0"
- },
- "peerDependenciesMeta": {
- "@types/eslint": {
- "optional": true
- },
- "eslint-config-prettier": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
- "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
- },
- "node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-diff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
- "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/husky": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
- "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
- "bin": {
- "husky": "lib/bin.js"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/typicode"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
- "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
- "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dev": true,
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-wsl/node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lint-staged": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz",
- "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==",
- "dependencies": {
- "chalk": "5.3.0",
- "commander": "11.1.0",
- "debug": "4.3.4",
- "execa": "8.0.1",
- "lilconfig": "2.1.0",
- "listr2": "7.0.2",
- "micromatch": "4.0.5",
- "pidtree": "0.6.0",
- "string-argv": "0.3.2",
- "yaml": "2.3.4"
- },
- "bin": {
- "lint-staged": "bin/lint-staged.js"
- },
- "engines": {
- "node": ">=18.12.0"
- },
- "funding": {
- "url": "https://opencollective.com/lint-staged"
- }
- },
- "node_modules/lint-staged/node_modules/chalk": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/listr2": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz",
- "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==",
- "dependencies": {
- "cli-truncate": "^3.1.0",
- "colorette": "^2.0.20",
- "eventemitter3": "^5.0.1",
- "log-update": "^5.0.1",
- "rfdc": "^1.3.0",
- "wrap-ansi": "^8.1.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/log-update": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
- "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
- "dependencies": {
- "ansi-escapes": "^5.0.0",
- "cli-cursor": "^4.0.0",
- "slice-ansi": "^5.0.0",
- "strip-ansi": "^7.0.1",
- "wrap-ansi": "^8.0.1"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-update/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/npm-run-path": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
- "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
- "dependencies": {
- "path-key": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
- "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
- "dev": true,
- "dependencies": {
- "default-browser": "^4.0.0",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pidtree": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
- "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
- "bin": {
- "pidtree": "bin/pidtree.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prettier": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
- "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
- "dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
- "dev": true,
- "dependencies": {
- "fast-diff": "^1.1.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/restore-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
- "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/restore-cursor/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/restore-cursor/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/restore-cursor/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-applescript": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
- "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
- "dev": true,
- "dependencies": {
- "execa": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/run-applescript/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/run-applescript/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/run-applescript/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/run-applescript/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/run-applescript/node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/slice-ansi": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
- "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
- "dependencies": {
- "ansi-styles": "^6.0.0",
- "is-fullwidth-code-point": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
- "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ=="
- },
- "node_modules/string-argv": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
- "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
- "engines": {
- "node": ">=0.6.19"
- }
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/synckit": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
- "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
- "dev": true,
- "dependencies": {
- "@pkgr/utils": "^2.3.1",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/titleize": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
- "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
- "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true
- },
- "@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
- "dev": true
- },
- "@humanwhocodes/config-array": {
- "version": "0.11.13",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
- "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^2.0.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
- "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
- "dev": true
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@pkgr/utils": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
- "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "fast-glob": "^3.3.0",
- "is-glob": "^4.0.3",
- "open": "^9.1.0",
- "picocolors": "^1.0.0",
- "tslib": "^2.6.0"
- }
- },
- "@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
- "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
- "requires": {
- "type-fest": "^1.0.2"
- },
- "dependencies": {
- "type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
- "dev": true
- },
- "bplist-parser": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
- "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
- "dev": true,
- "requires": {
- "big-integer": "^1.6.44"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "bundle-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
- "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
- "dev": true,
- "requires": {
- "run-applescript": "^5.0.0"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "cli-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
- "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
- "requires": {
- "restore-cursor": "^4.0.0"
- }
- },
- "cli-truncate": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
- "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
- "requires": {
- "slice-ansi": "^5.0.0",
- "string-width": "^5.0.0"
- }
- },
- "cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
- },
- "commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "concurrently": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
- "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
- "requires": {
- "chalk": "^4.1.2",
- "date-fns": "^2.30.0",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.1",
- "shell-quote": "^1.8.1",
- "spawn-command": "0.0.2",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.2"
- }
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
- "requires": {
- "@babel/runtime": "^7.21.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "default-browser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
- "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
- "dev": true,
- "requires": {
- "bundle-name": "^3.0.0",
- "default-browser-id": "^3.0.0",
- "execa": "^7.1.1",
- "titleize": "^3.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
- "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.1",
- "human-signals": "^4.3.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^3.0.7",
- "strip-final-newline": "^3.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "human-signals": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
- "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- }
- }
- },
- "default-browser-id": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
- "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
- "dev": true,
- "requires": {
- "bplist-parser": "^0.2.0",
- "untildify": "^4.0.0"
- }
- },
- "define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
- "@humanwhocodes/config-array": "^0.11.13",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- }
- },
- "eslint-config-prettier": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
- "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-prettier": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz",
- "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.8.5"
- }
- },
- "eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true
- },
- "espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- }
- },
- "esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "eventemitter3": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
- "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
- },
- "execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-diff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
- "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
- },
- "husky": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
- "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg=="
- },
- "ignore": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
- "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
- "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dev": true,
- "requires": {
- "is-docker": "^3.0.0"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- },
- "dependencies": {
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true
- }
- }
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
- },
- "lint-staged": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz",
- "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==",
- "requires": {
- "chalk": "5.3.0",
- "commander": "11.1.0",
- "debug": "4.3.4",
- "execa": "8.0.1",
- "lilconfig": "2.1.0",
- "listr2": "7.0.2",
- "micromatch": "4.0.5",
- "pidtree": "0.6.0",
- "string-argv": "0.3.2",
- "yaml": "2.3.4"
- },
- "dependencies": {
- "chalk": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="
- }
- }
- },
- "listr2": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz",
- "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==",
- "requires": {
- "cli-truncate": "^3.1.0",
- "colorette": "^2.0.20",
- "eventemitter3": "^5.0.1",
- "log-update": "^5.0.1",
- "rfdc": "^1.3.0",
- "wrap-ansi": "^8.1.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "log-update": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
- "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
- "requires": {
- "ansi-escapes": "^5.0.0",
- "cli-cursor": "^4.0.0",
- "slice-ansi": "^5.0.0",
- "strip-ansi": "^7.0.1",
- "wrap-ansi": "^8.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "npm-run-path": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
- "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
- "requires": {
- "path-key": "^4.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
- }
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
- "requires": {
- "mimic-fn": "^4.0.0"
- }
- },
- "open": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
- "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
- "dev": true,
- "requires": {
- "default-browser": "^4.0.0",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^2.2.0"
- }
- },
- "optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "requires": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
- },
- "pidtree": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
- "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "prettier": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
- "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
- "dev": true
- },
- "prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
- "dev": true,
- "requires": {
- "fast-diff": "^1.1.2"
- }
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "restore-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
- "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "dependencies": {
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- }
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-applescript": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
- "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
- "dev": true,
- "requires": {
- "execa": "^5.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- }
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "requires": {
- "tslib": "^2.1.0"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
- },
- "shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA=="
- },
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
- },
- "slice-ansi": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
- "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
- "requires": {
- "ansi-styles": "^6.0.0",
- "is-fullwidth-code-point": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
- }
- }
- },
- "spawn-command": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
- "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ=="
- },
- "string-argv": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
- "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "synckit": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
- "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
- "dev": true,
- "requires": {
- "@pkgr/utils": "^2.3.1",
- "tslib": "^2.5.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "titleize": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
- "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
- },
- "tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
- },
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yaml": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
- "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA=="
- },
- "yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
+{
+ "name": "planka",
+ "version": "1.16.2",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "planka",
+ "version": "1.16.2",
+ "hasInstallScript": true,
+ "license": "AGPL-3.0",
+ "dependencies": {
+ "concurrently": "^8.2.2",
+ "husky": "^8.0.3",
+ "lint-staged": "^15.1.0"
+ },
+ "devDependencies": {
+ "eslint": "^8.53.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-plugin-prettier": "^5.0.1",
+ "prettier": "^3.1.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
+ "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgr/utils": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
+ "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "fast-glob": "^3.3.0",
+ "is-glob": "^4.0.3",
+ "open": "^9.1.0",
+ "picocolors": "^1.0.0",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "dependencies": {
+ "type-fest": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/big-integer": {
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/bplist-parser": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+ "dev": true,
+ "dependencies": {
+ "big-integer": "^1.6.44"
+ },
+ "engines": {
+ "node": ">= 5.10.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bundle-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+ "dev": true,
+ "dependencies": {
+ "run-applescript": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "dependencies": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
+ },
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/concurrently": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
+ "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "date-fns": "^2.30.0",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "spawn-command": "0.0.2",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": "^14.13.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/default-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
+ "dev": true,
+ "dependencies": {
+ "bundle-name": "^3.0.0",
+ "default-browser-id": "^3.0.0",
+ "execa": "^7.1.1",
+ "titleize": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser-id": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+ "dev": true,
+ "dependencies": {
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser/node_modules/execa": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/default-browser/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser/node_modules/human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.18.0"
+ }
+ },
+ "node_modules/default-browser/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz",
+ "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.5"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/husky": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
+ "bin": {
+ "husky": "lib/bin.js"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "dev": true,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dev": true,
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-wsl/node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lint-staged": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz",
+ "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==",
+ "dependencies": {
+ "chalk": "5.3.0",
+ "commander": "11.1.0",
+ "debug": "4.3.4",
+ "execa": "8.0.1",
+ "lilconfig": "2.1.0",
+ "listr2": "7.0.2",
+ "micromatch": "4.0.5",
+ "pidtree": "0.6.0",
+ "string-argv": "0.3.2",
+ "yaml": "2.3.4"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/lint-staged"
+ }
+ },
+ "node_modules/lint-staged/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz",
+ "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==",
+ "dependencies": {
+ "cli-truncate": "^3.1.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^5.0.1",
+ "rfdc": "^1.3.0",
+ "wrap-ansi": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/log-update": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+ "dependencies": {
+ "ansi-escapes": "^5.0.0",
+ "cli-cursor": "^4.0.0",
+ "slice-ansi": "^5.0.0",
+ "strip-ansi": "^7.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/open": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
+ "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
+ "dev": true,
+ "dependencies": {
+ "default-browser": "^4.0.0",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
+ "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-applescript": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
+ "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-applescript/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/run-applescript/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-applescript/node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/run-applescript/node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-applescript/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/run-applescript/node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/run-applescript/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-applescript/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/run-applescript/node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dependencies": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/spawn-command": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ=="
+ },
+ "node_modules/string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/titleize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
+ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
+ "@babel/runtime": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
+ "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@eslint/js": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "dev": true
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@pkgr/utils": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
+ "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "fast-glob": "^3.3.0",
+ "is-glob": "^4.0.3",
+ "open": "^9.1.0",
+ "picocolors": "^1.0.0",
+ "tslib": "^2.6.0"
+ }
+ },
+ "@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "requires": {
+ "type-fest": "^1.0.2"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "big-integer": {
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "dev": true
+ },
+ "bplist-parser": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+ "dev": true,
+ "requires": {
+ "big-integer": "^1.6.44"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "bundle-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+ "dev": true,
+ "requires": {
+ "run-applescript": "^5.0.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "requires": {
+ "restore-cursor": "^4.0.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "requires": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ }
+ },
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
+ },
+ "commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "concurrently": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
+ "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
+ "requires": {
+ "chalk": "^4.1.2",
+ "date-fns": "^2.30.0",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "spawn-command": "0.0.2",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "requires": {
+ "@babel/runtime": "^7.21.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "default-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
+ "dev": true,
+ "requires": {
+ "bundle-name": "^3.0.0",
+ "default-browser-id": "^3.0.0",
+ "execa": "^7.1.1",
+ "titleize": "^3.0.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ }
+ }
+ },
+ "default-browser-id": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+ "dev": true,
+ "requires": {
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
+ }
+ },
+ "define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-prettier": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz",
+ "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.5"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ },
+ "execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
+ },
+ "husky": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg=="
+ },
+ "ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^3.0.0"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ },
+ "dependencies": {
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true
+ }
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ },
+ "lint-staged": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz",
+ "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==",
+ "requires": {
+ "chalk": "5.3.0",
+ "commander": "11.1.0",
+ "debug": "4.3.4",
+ "execa": "8.0.1",
+ "lilconfig": "2.1.0",
+ "listr2": "7.0.2",
+ "micromatch": "4.0.5",
+ "pidtree": "0.6.0",
+ "string-argv": "0.3.2",
+ "yaml": "2.3.4"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="
+ }
+ }
+ },
+ "listr2": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz",
+ "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==",
+ "requires": {
+ "cli-truncate": "^3.1.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^5.0.1",
+ "rfdc": "^1.3.0",
+ "wrap-ansi": "^8.1.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "log-update": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+ "requires": {
+ "ansi-escapes": "^5.0.0",
+ "cli-cursor": "^4.0.0",
+ "slice-ansi": "^5.0.0",
+ "strip-ansi": "^7.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "open": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
+ "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
+ "dev": true,
+ "requires": {
+ "default-browser": "^4.0.0",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
+ "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ }
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-applescript": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
+ "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
+ "dev": true,
+ "requires": {
+ "execa": "^5.0.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ }
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA=="
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
+ "slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "requires": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
+ }
+ }
+ },
+ "spawn-command": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ=="
+ },
+ "string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "synckit": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
+ "dev": true,
+ "requires": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.5.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "titleize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
+ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
+ },
+ "tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
+ },
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA=="
+ },
+ "yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index a4258a1..7ee9657 100644
--- a/package.json
+++ b/package.json
@@ -1,69 +1,61 @@
-{
- "name": "planka",
- "version": "0.0.1-beta.1",
- "private": true,
- "homepage": "https://plankanban.github.io/planka",
- "repository": {
- "type": "git",
- "url": "https://github.com/plankanban/planka.git"
- },
- "license": "AGPL-3.0",
- "author": "Maksim Eltyshev",
- "scripts": {
- "client:build": "npm run build --prefix client",
- "client:lint": "npm run lint --prefix client",
- "client:start": "npm start --prefix client",
- "client:test": "npm test --prefix client",
- "docker:build": "docker build -t ghcr.io/plankanban/planka:local -f Dockerfile .",
- "docker:build:base": "docker build -t ghcr.io/plankanban/planka:base-local -f Dockerfile.base .",
- "postinstall": "(cd server && npm i && cd ../client && npm i)",
- "lint": "npm run server:lint && npm run client:lint",
- "prepare": "husky install",
- "server:console": "npm run console --prefix server",
- "server:db:init": "npm run db:init --prefix server",
- "server:db:migrate": "npm run db:migrate --prefix server",
- "server:db:seed": "npm run db:seed --prefix server",
- "server:lint": "npm run lint --prefix server",
- "server:start": "npm start --prefix server",
- "server:start:prod": "npm run start:prod --prefix server",
- "server:test": "npm test --prefix server",
- "start": "concurrently -n server,client \"npm run server:start\" \"npm run client:start\"",
- "test": "npm run server:test && npm run client:test"
- },
- "lint-staged": {
- "client/**/*.{js,jsx}": [
- "npm run client:lint"
- ],
- "server/**/*.js": [
- "npm run server:lint"
- ]
- },
- "prettier": {
- "printWidth": 100,
- "singleQuote": true,
- "trailingComma": "all"
- },
- "eslintConfig": {
- "plugins": [
- "prettier"
- ],
- "extends": [
- "plugin:prettier/recommended"
- ],
- "rules": {
- "no-undef": "off",
- "prettier/prettier": "error"
- }
- },
- "dependencies": {
- "concurrently": "^8.2.2",
- "husky": "^8.0.3",
- "lint-staged": "^15.1.0"
- },
- "devDependencies": {
- "eslint": "^8.53.0",
- "eslint-config-prettier": "^9.0.0",
- "eslint-plugin-prettier": "^5.0.1",
- "prettier": "^3.1.0"
- }
-}
+{
+ "name": "planka",
+ "version": "0.0.1-beta.1",
+ "private": true,
+ "homepage": "https://plankanban.github.io/planka",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/plankanban/planka.git"
+ },
+ "license": "AGPL-3.0",
+ "author": "Maksim Eltyshev",
+ "scripts": {
+ "client:build": "npm run build --prefix client",
+ "client:lint": "npm run lint --prefix client",
+ "client:start": "npm start --prefix client",
+ "client:test": "npm test --prefix client",
+ "docker:build": "docker build -t ghcr.io/plankanban/planka:local -f Dockerfile .",
+ "docker:build:base": "docker build -t ghcr.io/plankanban/planka:base-local -f Dockerfile.base .",
+ "postinstall": "(cd server && npm i && cd ../client && npm i)",
+ "lint": "npm run server:lint && npm run client:lint",
+ "prepare": "husky install",
+ "server:console": "npm run console --prefix server",
+ "server:db:init": "npm run db:init --prefix server",
+ "server:db:migrate": "npm run db:migrate --prefix server",
+ "server:db:seed": "npm run db:seed --prefix server",
+ "server:lint": "npm run lint --prefix server",
+ "server:start": "npm start --prefix server",
+ "server:start:prod": "npm run start:prod --prefix server",
+ "server:test": "npm test --prefix server",
+ "start": "concurrently -n server,client \"npm run server:start\" \"npm run client:start\"",
+ "test": "npm run server:test && npm run client:test"
+ },
+ "prettier": {
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "all"
+ },
+ "eslintConfig": {
+ "plugins": [
+ "prettier"
+ ],
+ "extends": [
+ "plugin:prettier/recommended"
+ ],
+ "rules": {
+ "no-undef": "off",
+ "prettier/prettier": "error"
+ }
+ },
+ "dependencies": {
+ "concurrently": "^8.2.2",
+ "husky": "^8.0.3",
+ "lint-staged": "^15.1.0"
+ },
+ "devDependencies": {
+ "eslint": "^8.53.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-plugin-prettier": "^5.0.1",
+ "prettier": "^3.1.0"
+ }
+}
diff --git a/server/api/controllers/cards/duplicate.js b/server/api/controllers/cards/duplicate.js
index 918a8ec..8b8a6dd 100755
--- a/server/api/controllers/cards/duplicate.js
+++ b/server/api/controllers/cards/duplicate.js
@@ -1,82 +1,82 @@
-const Errors = {
- NOT_ENOUGH_RIGHTS: {
- notEnoughRights: 'Not enough rights',
- },
- CARD_NOT_FOUND: {
- cardNotFound: 'Card not found',
- },
-};
-
-module.exports = {
- inputs: {
- id: {
- type: 'string',
- regex: /^[0-9]+$/,
- required: true,
- },
- position: {
- type: 'number',
- required: true,
- },
- name: {
- type: 'string',
- },
- },
-
- exits: {
- notEnoughRights: {
- responseType: 'forbidden',
- },
- cardNotFound: {
- responseType: 'notFound',
- },
- },
-
- async fn(inputs) {
- const { currentUser } = this.req;
-
- const { card, list, board } = await sails.helpers.cards
- .getProjectPath(inputs.id)
- .intercept('pathNotFound', () => Errors.CARD_NOT_FOUND);
-
- const boardMembership = await BoardMembership.findOne({
- boardId: card.boardId,
- userId: currentUser.id,
- });
-
- if (!boardMembership) {
- throw Errors.CARD_NOT_FOUND; // Forbidden
- }
-
- if (boardMembership.role !== BoardMembership.Roles.EDITOR) {
- throw Errors.NOT_ENOUGH_RIGHTS;
- }
-
- const values = _.pick(inputs, ['position', 'name']);
-
- const {
- card: nextCard,
- cardMemberships,
- cardLabels,
- tasks,
- } = await sails.helpers.cards.duplicateOne.with({
- board,
- list,
- record: card,
- values: {
- ...values,
- creatorUser: currentUser,
- },
- request: this.req,
- });
-
- return {
- item: nextCard,
- included: {
- cardMemberships,
- cardLabels,
- tasks,
- },
- };
- },
-};
+const Errors = {
+ NOT_ENOUGH_RIGHTS: {
+ notEnoughRights: 'Not enough rights',
+ },
+ CARD_NOT_FOUND: {
+ cardNotFound: 'Card not found',
+ },
+};
+
+module.exports = {
+ inputs: {
+ id: {
+ type: 'string',
+ regex: /^[0-9]+$/,
+ required: true,
+ },
+ position: {
+ type: 'number',
+ required: true,
+ },
+ name: {
+ type: 'string',
+ },
+ },
+
+ exits: {
+ notEnoughRights: {
+ responseType: 'forbidden',
+ },
+ cardNotFound: {
+ responseType: 'notFound',
+ },
+ },
+
+ async fn(inputs) {
+ const { currentUser } = this.req;
+
+ const { card, list, board } = await sails.helpers.cards
+ .getProjectPath(inputs.id)
+ .intercept('pathNotFound', () => Errors.CARD_NOT_FOUND);
+
+ const boardMembership = await BoardMembership.findOne({
+ boardId: card.boardId,
+ userId: currentUser.id,
+ });
+
+ if (!boardMembership) {
+ throw Errors.CARD_NOT_FOUND; // Forbidden
+ }
+
+ if (boardMembership.role !== BoardMembership.Roles.EDITOR) {
+ throw Errors.NOT_ENOUGH_RIGHTS;
+ }
+
+ const values = _.pick(inputs, ['position', 'name']);
+
+ const {
+ card: nextCard,
+ cardMemberships,
+ cardLabels,
+ tasks,
+ } = await sails.helpers.cards.duplicateOne.with({
+ board,
+ list,
+ record: card,
+ values: {
+ ...values,
+ creatorUser: currentUser,
+ },
+ request: this.req,
+ });
+
+ return {
+ item: nextCard,
+ included: {
+ cardMemberships,
+ cardLabels,
+ tasks,
+ },
+ };
+ },
+};
diff --git a/server/api/helpers/boards/import-from-trello.js b/server/api/helpers/boards/import-from-trello.js
index 2ab6e0a..6484396 100644
--- a/server/api/helpers/boards/import-from-trello.js
+++ b/server/api/helpers/boards/import-from-trello.js
@@ -1,156 +1,156 @@
-const POSITION_GAP = 65535; // TODO: move to config
-
-module.exports = {
- inputs: {
- user: {
- type: 'ref',
- required: true,
- },
- board: {
- type: 'ref',
- required: true,
- },
- trelloBoard: {
- type: 'json',
- required: true,
- },
- },
-
- async fn(inputs) {
- const trelloToPlankaLabels = {};
-
- const getTrelloLists = () => inputs.trelloBoard.lists.filter((list) => !list.closed);
-
- const getUsedTrelloLabels = () => {
- const result = {};
- inputs.trelloBoard.cards
- .map((card) => card.labels)
- .flat()
- .forEach((label) => {
- result[label.id] = label;
- });
-
- return Object.values(result);
- };
-
- const getTrelloCardsOfList = (listId) =>
- inputs.trelloBoard.cards.filter((card) => card.idList === listId && !card.closed);
-
- const getAllTrelloCheckItemsOfCard = (cardId) =>
- inputs.trelloBoard.checklists
- .filter((checklist) => checklist.idCard === cardId)
- .map((checklist) => checklist.checkItems)
- .flat();
-
- const getTrelloCommentsOfCard = (cardId) =>
- inputs.trelloBoard.actions.filter(
- (action) =>
- action.type === 'commentCard' &&
- action.data &&
- action.data.card &&
- action.data.card.id === cardId,
- );
-
- const getPlankaLabelColor = (trelloLabelColor) =>
- Label.COLORS.find((color) => color.indexOf(trelloLabelColor) !== -1) || 'desert-sand';
-
- const importCardLabels = async (plankaCard, trelloCard) => {
- return Promise.all(
- trelloCard.labels.map(async (trelloLabel) => {
- return CardLabel.create({
- cardId: plankaCard.id,
- labelId: trelloToPlankaLabels[trelloLabel.id].id,
- });
- }),
- );
- };
-
- const importTasks = async (plankaCard, trelloCard) => {
- // TODO find workaround for tasks/checklist mismapping, see issue trello2planka#5
- return Promise.all(
- getAllTrelloCheckItemsOfCard(trelloCard.id).map(async (trelloCheckItem) => {
- return Task.create({
- cardId: plankaCard.id,
- position: trelloCheckItem.pos,
- name: trelloCheckItem.name,
- isCompleted: trelloCheckItem.state === 'complete',
- }).fetch();
- }),
- );
- };
-
- const importComments = async (plankaCard, trelloCard) => {
- const trelloComments = getTrelloCommentsOfCard(trelloCard.id);
- trelloComments.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
-
- return Promise.all(
- trelloComments.map(async (trelloComment) => {
- return Action.create({
- cardId: plankaCard.id,
- userId: inputs.user.id,
- type: 'commentCard',
- data: {
- text:
- `${trelloComment.data.text}\n\n---\n*Note: imported comment, originally posted by ` +
- `\n${trelloComment.memberCreator.fullName} (${trelloComment.memberCreator.username}) on ${trelloComment.date}*`,
- },
- }).fetch();
- }),
- );
- };
-
- const importCards = async (plankaList, trelloList) => {
- return Promise.all(
- getTrelloCardsOfList(trelloList.id).map(async (trelloCard) => {
- const plankaCard = await Card.create({
- boardId: inputs.board.id,
- listId: plankaList.id,
- creatorUserId: inputs.user.id,
- position: trelloCard.pos,
- name: trelloCard.name,
- description: trelloCard.desc || null,
- dueDate: trelloCard.due,
- }).fetch();
-
- await importCardLabels(plankaCard, trelloCard);
- await importTasks(plankaCard, trelloCard);
- await importComments(plankaCard, trelloCard);
-
- return plankaCard;
- }),
- );
- };
-
- const importLabels = async () => {
- return Promise.all(
- getUsedTrelloLabels().map(async (trelloLabel, index) => {
- const plankaLabel = await Label.create({
- boardId: inputs.board.id,
- position: POSITION_GAP * (index + 1),
- name: trelloLabel.name || null,
- color: getPlankaLabelColor(trelloLabel.color),
- }).fetch();
-
- trelloToPlankaLabels[trelloLabel.id] = plankaLabel;
- }),
- );
- };
-
- const importLists = async () => {
- return Promise.all(
- getTrelloLists().map(async (trelloList) => {
- const plankaList = await List.create({
- boardId: inputs.board.id,
- name: trelloList.name,
- position: trelloList.pos,
- }).fetch();
-
- return importCards(plankaList, trelloList);
- }),
- );
- };
-
- await importLabels();
- await importLists();
- },
-};
+const POSITION_GAP = 65535; // TODO: move to config
+
+module.exports = {
+ inputs: {
+ user: {
+ type: 'ref',
+ required: true,
+ },
+ board: {
+ type: 'ref',
+ required: true,
+ },
+ trelloBoard: {
+ type: 'json',
+ required: true,
+ },
+ },
+
+ async fn(inputs) {
+ const trelloToPlankaLabels = {};
+
+ const getTrelloLists = () => inputs.trelloBoard.lists.filter((list) => !list.closed);
+
+ const getUsedTrelloLabels = () => {
+ const result = {};
+ inputs.trelloBoard.cards
+ .map((card) => card.labels)
+ .flat()
+ .forEach((label) => {
+ result[label.id] = label;
+ });
+
+ return Object.values(result);
+ };
+
+ const getTrelloCardsOfList = (listId) =>
+ inputs.trelloBoard.cards.filter((card) => card.idList === listId && !card.closed);
+
+ const getAllTrelloCheckItemsOfCard = (cardId) =>
+ inputs.trelloBoard.checklists
+ .filter((checklist) => checklist.idCard === cardId)
+ .map((checklist) => checklist.checkItems)
+ .flat();
+
+ const getTrelloCommentsOfCard = (cardId) =>
+ inputs.trelloBoard.actions.filter(
+ (action) =>
+ action.type === 'commentCard' &&
+ action.data &&
+ action.data.card &&
+ action.data.card.id === cardId,
+ );
+
+ const getPlankaLabelColor = (trelloLabelColor) =>
+ Label.COLORS.find((color) => color.indexOf(trelloLabelColor) !== -1) || 'desert-sand';
+
+ const importCardLabels = async (plankaCard, trelloCard) => {
+ return Promise.all(
+ trelloCard.labels.map(async (trelloLabel) => {
+ return CardLabel.create({
+ cardId: plankaCard.id,
+ labelId: trelloToPlankaLabels[trelloLabel.id].id,
+ });
+ }),
+ );
+ };
+
+ const importTasks = async (plankaCard, trelloCard) => {
+ // TODO find workaround for tasks/checklist mismapping, see issue trello2planka#5
+ return Promise.all(
+ getAllTrelloCheckItemsOfCard(trelloCard.id).map(async (trelloCheckItem) => {
+ return Task.create({
+ cardId: plankaCard.id,
+ position: trelloCheckItem.pos,
+ name: trelloCheckItem.name,
+ isCompleted: trelloCheckItem.state === 'complete',
+ }).fetch();
+ }),
+ );
+ };
+
+ const importComments = async (plankaCard, trelloCard) => {
+ const trelloComments = getTrelloCommentsOfCard(trelloCard.id);
+ trelloComments.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
+
+ return Promise.all(
+ trelloComments.map(async (trelloComment) => {
+ return Action.create({
+ cardId: plankaCard.id,
+ userId: inputs.user.id,
+ type: 'commentCard',
+ data: {
+ text:
+ `${trelloComment.data.text}\n\n---\n*Note: imported comment, originally posted by ` +
+ `\n${trelloComment.memberCreator.fullName} (${trelloComment.memberCreator.username}) on ${trelloComment.date}*`,
+ },
+ }).fetch();
+ }),
+ );
+ };
+
+ const importCards = async (plankaList, trelloList) => {
+ return Promise.all(
+ getTrelloCardsOfList(trelloList.id).map(async (trelloCard) => {
+ const plankaCard = await Card.create({
+ boardId: inputs.board.id,
+ listId: plankaList.id,
+ creatorUserId: inputs.user.id,
+ position: trelloCard.pos,
+ name: trelloCard.name,
+ description: trelloCard.desc || null,
+ dueDate: trelloCard.due,
+ }).fetch();
+
+ await importCardLabels(plankaCard, trelloCard);
+ await importTasks(plankaCard, trelloCard);
+ await importComments(plankaCard, trelloCard);
+
+ return plankaCard;
+ }),
+ );
+ };
+
+ const importLabels = async () => {
+ return Promise.all(
+ getUsedTrelloLabels().map(async (trelloLabel, index) => {
+ const plankaLabel = await Label.create({
+ boardId: inputs.board.id,
+ position: POSITION_GAP * (index + 1),
+ name: trelloLabel.name || null,
+ color: getPlankaLabelColor(trelloLabel.color),
+ }).fetch();
+
+ trelloToPlankaLabels[trelloLabel.id] = plankaLabel;
+ }),
+ );
+ };
+
+ const importLists = async () => {
+ return Promise.all(
+ getTrelloLists().map(async (trelloList) => {
+ const plankaList = await List.create({
+ boardId: inputs.board.id,
+ name: trelloList.name,
+ position: trelloList.pos,
+ }).fetch();
+
+ return importCards(plankaList, trelloList);
+ }),
+ );
+ };
+
+ await importLabels();
+ await importLists();
+ },
+};
diff --git a/server/api/helpers/cards/duplicate-one.js b/server/api/helpers/cards/duplicate-one.js
index a63feaa..5b85099 100644
--- a/server/api/helpers/cards/duplicate-one.js
+++ b/server/api/helpers/cards/duplicate-one.js
@@ -1,144 +1,144 @@
-const valuesValidator = (value) => {
- if (!_.isPlainObject(value)) {
- return false;
- }
-
- if (!_.isUndefined(value.position) && !_.isFinite(value.position)) {
- return false;
- }
-
- if (!_.isPlainObject(value.creatorUser)) {
- return false;
- }
-
- return true;
-};
-
-module.exports = {
- inputs: {
- record: {
- type: 'ref',
- required: true,
- },
- values: {
- type: 'ref',
- custom: valuesValidator,
- required: true,
- },
- board: {
- type: 'ref',
- required: true,
- },
- list: {
- type: 'ref',
- required: true,
- },
- request: {
- type: 'ref',
- },
- },
-
- async fn(inputs) {
- const { values } = inputs;
-
- const cards = await sails.helpers.lists.getCards(inputs.record.listId);
-
- const { position, repositions } = sails.helpers.utils.insertToPositionables(
- values.position,
- cards,
- );
-
- repositions.forEach(async ({ id, position: nextPosition }) => {
- await Card.update({
- id,
- listId: inputs.record.listId,
- }).set({
- position: nextPosition,
- });
-
- sails.sockets.broadcast(`board:${inputs.record.boardId}`, 'cardUpdate', {
- item: {
- id,
- position: nextPosition,
- },
- });
- });
-
- const card = await Card.create({
- ..._.pick(inputs.record, [
- 'boardId',
- 'listId',
- 'name',
- 'description',
- 'dueDate',
- 'stopwatch',
- ]),
- ...values,
- position,
- creatorUserId: values.creatorUser.id,
- }).fetch();
-
- const cardMemberships = await sails.helpers.cards.getCardMemberships(inputs.record.id);
- const cardMembershipsValues = cardMemberships.map((cardMembership) => ({
- ..._.pick(cardMembership, ['userId']),
- cardId: card.id,
- }));
- const nextCardMemberships = await CardMembership.createEach(cardMembershipsValues).fetch();
-
- const cardLabels = await sails.helpers.cards.getCardLabels(inputs.record.id);
- const cardLabelsValues = cardLabels.map((cardLabel) => ({
- ..._.pick(cardLabel, ['labelId']),
- cardId: card.id,
- }));
- const nextCardLabels = await CardLabel.createEach(cardLabelsValues).fetch();
-
- const tasks = await sails.helpers.cards.getTasks(inputs.record.id);
- const tasksValues = tasks.map((task) => ({
- ..._.pick(task, ['position', 'name', 'isCompleted']),
- cardId: card.id,
- }));
- const nextTasks = await Task.createEach(tasksValues).fetch();
-
- sails.sockets.broadcast(
- `board:${card.boardId}`,
- 'cardCreate',
- {
- item: card,
- },
- inputs.request,
- );
-
- if (values.creatorUser.subscribeToOwnCards) {
- await CardSubscription.create({
- cardId: card.id,
- userId: card.creatorUserId,
- }).tolerate('E_UNIQUE');
-
- sails.sockets.broadcast(`user:${card.creatorUserId}`, 'cardUpdate', {
- item: {
- id: card.id,
- isSubscribed: true,
- },
- });
- }
-
- await sails.helpers.actions.createOne.with({
- values: {
- card,
- type: Action.Types.CREATE_CARD, // TODO: introduce separate type?
- data: {
- list: _.pick(inputs.list, ['id', 'name']),
- },
- user: values.creatorUser,
- },
- board: inputs.board,
- });
-
- return {
- card,
- cardMemberships: nextCardMemberships,
- cardLabels: nextCardLabels,
- tasks: nextTasks,
- };
- },
-};
+const valuesValidator = (value) => {
+ if (!_.isPlainObject(value)) {
+ return false;
+ }
+
+ if (!_.isUndefined(value.position) && !_.isFinite(value.position)) {
+ return false;
+ }
+
+ if (!_.isPlainObject(value.creatorUser)) {
+ return false;
+ }
+
+ return true;
+};
+
+module.exports = {
+ inputs: {
+ record: {
+ type: 'ref',
+ required: true,
+ },
+ values: {
+ type: 'ref',
+ custom: valuesValidator,
+ required: true,
+ },
+ board: {
+ type: 'ref',
+ required: true,
+ },
+ list: {
+ type: 'ref',
+ required: true,
+ },
+ request: {
+ type: 'ref',
+ },
+ },
+
+ async fn(inputs) {
+ const { values } = inputs;
+
+ const cards = await sails.helpers.lists.getCards(inputs.record.listId);
+
+ const { position, repositions } = sails.helpers.utils.insertToPositionables(
+ values.position,
+ cards,
+ );
+
+ repositions.forEach(async ({ id, position: nextPosition }) => {
+ await Card.update({
+ id,
+ listId: inputs.record.listId,
+ }).set({
+ position: nextPosition,
+ });
+
+ sails.sockets.broadcast(`board:${inputs.record.boardId}`, 'cardUpdate', {
+ item: {
+ id,
+ position: nextPosition,
+ },
+ });
+ });
+
+ const card = await Card.create({
+ ..._.pick(inputs.record, [
+ 'boardId',
+ 'listId',
+ 'name',
+ 'description',
+ 'dueDate',
+ 'stopwatch',
+ ]),
+ ...values,
+ position,
+ creatorUserId: values.creatorUser.id,
+ }).fetch();
+
+ const cardMemberships = await sails.helpers.cards.getCardMemberships(inputs.record.id);
+ const cardMembershipsValues = cardMemberships.map((cardMembership) => ({
+ ..._.pick(cardMembership, ['userId']),
+ cardId: card.id,
+ }));
+ const nextCardMemberships = await CardMembership.createEach(cardMembershipsValues).fetch();
+
+ const cardLabels = await sails.helpers.cards.getCardLabels(inputs.record.id);
+ const cardLabelsValues = cardLabels.map((cardLabel) => ({
+ ..._.pick(cardLabel, ['labelId']),
+ cardId: card.id,
+ }));
+ const nextCardLabels = await CardLabel.createEach(cardLabelsValues).fetch();
+
+ const tasks = await sails.helpers.cards.getTasks(inputs.record.id);
+ const tasksValues = tasks.map((task) => ({
+ ..._.pick(task, ['position', 'name', 'isCompleted']),
+ cardId: card.id,
+ }));
+ const nextTasks = await Task.createEach(tasksValues).fetch();
+
+ sails.sockets.broadcast(
+ `board:${card.boardId}`,
+ 'cardCreate',
+ {
+ item: card,
+ },
+ inputs.request,
+ );
+
+ if (values.creatorUser.subscribeToOwnCards) {
+ await CardSubscription.create({
+ cardId: card.id,
+ userId: card.creatorUserId,
+ }).tolerate('E_UNIQUE');
+
+ sails.sockets.broadcast(`user:${card.creatorUserId}`, 'cardUpdate', {
+ item: {
+ id: card.id,
+ isSubscribed: true,
+ },
+ });
+ }
+
+ await sails.helpers.actions.createOne.with({
+ values: {
+ card,
+ type: Action.Types.CREATE_CARD, // TODO: introduce separate type?
+ data: {
+ list: _.pick(inputs.list, ['id', 'name']),
+ },
+ user: values.creatorUser,
+ },
+ board: inputs.board,
+ });
+
+ return {
+ card,
+ cardMemberships: nextCardMemberships,
+ cardLabels: nextCardLabels,
+ tasks: nextTasks,
+ };
+ },
+};
diff --git a/server/config/routes.js b/server/config/routes.js
index 8b88df5..35c53a9 100644
--- a/server/config/routes.js
+++ b/server/config/routes.js
@@ -1,97 +1,97 @@
-/**
- * Route Mappings
- * (sails.config.routes)
- *
- * Your routes tell Sails what to do each time it receives a request.
- *
- * For more information on configuring custom routes, check out:
- * https://sailsjs.com/anatomy/config/routes-js
- */
-
-module.exports.routes = {
- 'GET /api/config': 'show-config',
-
- 'POST /api/access-tokens': 'access-tokens/create',
- 'POST /api/access-tokens/exchange-using-oidc': 'access-tokens/exchange-using-oidc',
- 'DELETE /api/access-tokens/me': 'access-tokens/delete',
-
- 'GET /api/users': 'users/index',
- 'POST /api/users': 'users/create',
- 'GET /api/users/:id': 'users/show',
- 'PATCH /api/users/:id': 'users/update',
- 'PATCH /api/users/:id/email': 'users/update-email',
- 'PATCH /api/users/:id/password': 'users/update-password',
- 'PATCH /api/users/:id/username': 'users/update-username',
- 'POST /api/users/:id/avatar': 'users/update-avatar',
- 'DELETE /api/users/:id': 'users/delete',
-
- 'GET /api/projects': 'projects/index',
- 'POST /api/projects': 'projects/create',
- 'GET /api/projects/:id': 'projects/show',
- 'PATCH /api/projects/:id': 'projects/update',
- 'POST /api/projects/:id/background-image': 'projects/update-background-image',
- 'DELETE /api/projects/:id': 'projects/delete',
-
- 'POST /api/projects/:projectId/managers': 'project-managers/create',
- 'DELETE /api/project-managers/:id': 'project-managers/delete',
-
- 'POST /api/projects/:projectId/boards': 'boards/create',
- 'GET /api/boards/:id': 'boards/show',
- 'PATCH /api/boards/:id': 'boards/update',
- 'DELETE /api/boards/:id': 'boards/delete',
-
- 'POST /api/boards/:boardId/memberships': 'board-memberships/create',
- 'PATCH /api/board-memberships/:id': 'board-memberships/update',
- 'DELETE /api/board-memberships/:id': 'board-memberships/delete',
-
- 'POST /api/boards/:boardId/labels': 'labels/create',
- 'PATCH /api/labels/:id': 'labels/update',
- 'DELETE /api/labels/:id': 'labels/delete',
-
- 'POST /api/boards/:boardId/lists': 'lists/create',
- 'PATCH /api/lists/:id': 'lists/update',
- 'DELETE /api/lists/:id': 'lists/delete',
-
- 'POST /api/lists/:listId/cards': 'cards/create',
- 'GET /api/cards/:id': 'cards/show',
- 'PATCH /api/cards/:id': 'cards/update',
- 'POST /api/cards/:id/duplicate': 'cards/duplicate',
- 'DELETE /api/cards/:id': 'cards/delete',
- 'POST /api/cards/:cardId/memberships': 'card-memberships/create',
- 'DELETE /api/cards/:cardId/memberships': 'card-memberships/delete',
- 'POST /api/cards/:cardId/labels': 'card-labels/create',
- 'DELETE /api/cards/:cardId/labels/:labelId': 'card-labels/delete',
-
- 'POST /api/cards/:cardId/tasks': 'tasks/create',
- 'PATCH /api/tasks/:id': 'tasks/update',
- 'DELETE /api/tasks/:id': 'tasks/delete',
-
- 'POST /api/cards/:cardId/attachments': 'attachments/create',
- 'PATCH /api/attachments/:id': 'attachments/update',
- 'DELETE /api/attachments/:id': 'attachments/delete',
-
- 'GET /api/cards/:cardId/actions': 'actions/index',
-
- 'POST /api/cards/:cardId/comment-actions': 'comment-actions/create',
- 'PATCH /api/comment-actions/:id': 'comment-actions/update',
- 'DELETE /api/comment-actions/:id': 'comment-actions/delete',
-
- 'GET /api/notifications': 'notifications/index',
- 'GET /api/notifications/:id': 'notifications/show',
- 'PATCH /api/notifications/:ids': 'notifications/update',
-
- 'GET /attachments/:id/download/:filename': {
- action: 'attachments/download',
- skipAssets: false,
- },
-
- 'GET /attachments/:id/download/thumbnails/cover-256.:extension': {
- action: 'attachments/download-thumbnail',
- skipAssets: false,
- },
-
- 'GET /*': {
- view: 'index',
- skipAssets: true,
- },
-};
+/**
+ * Route Mappings
+ * (sails.config.routes)
+ *
+ * Your routes tell Sails what to do each time it receives a request.
+ *
+ * For more information on configuring custom routes, check out:
+ * https://sailsjs.com/anatomy/config/routes-js
+ */
+
+module.exports.routes = {
+ 'GET /api/config': 'show-config',
+
+ 'POST /api/access-tokens': 'access-tokens/create',
+ 'POST /api/access-tokens/exchange-using-oidc': 'access-tokens/exchange-using-oidc',
+ 'DELETE /api/access-tokens/me': 'access-tokens/delete',
+
+ 'GET /api/users': 'users/index',
+ 'POST /api/users': 'users/create',
+ 'GET /api/users/:id': 'users/show',
+ 'PATCH /api/users/:id': 'users/update',
+ 'PATCH /api/users/:id/email': 'users/update-email',
+ 'PATCH /api/users/:id/password': 'users/update-password',
+ 'PATCH /api/users/:id/username': 'users/update-username',
+ 'POST /api/users/:id/avatar': 'users/update-avatar',
+ 'DELETE /api/users/:id': 'users/delete',
+
+ 'GET /api/projects': 'projects/index',
+ 'POST /api/projects': 'projects/create',
+ 'GET /api/projects/:id': 'projects/show',
+ 'PATCH /api/projects/:id': 'projects/update',
+ 'POST /api/projects/:id/background-image': 'projects/update-background-image',
+ 'DELETE /api/projects/:id': 'projects/delete',
+
+ 'POST /api/projects/:projectId/managers': 'project-managers/create',
+ 'DELETE /api/project-managers/:id': 'project-managers/delete',
+
+ 'POST /api/projects/:projectId/boards': 'boards/create',
+ 'GET /api/boards/:id': 'boards/show',
+ 'PATCH /api/boards/:id': 'boards/update',
+ 'DELETE /api/boards/:id': 'boards/delete',
+
+ 'POST /api/boards/:boardId/memberships': 'board-memberships/create',
+ 'PATCH /api/board-memberships/:id': 'board-memberships/update',
+ 'DELETE /api/board-memberships/:id': 'board-memberships/delete',
+
+ 'POST /api/boards/:boardId/labels': 'labels/create',
+ 'PATCH /api/labels/:id': 'labels/update',
+ 'DELETE /api/labels/:id': 'labels/delete',
+
+ 'POST /api/boards/:boardId/lists': 'lists/create',
+ 'PATCH /api/lists/:id': 'lists/update',
+ 'DELETE /api/lists/:id': 'lists/delete',
+
+ 'POST /api/lists/:listId/cards': 'cards/create',
+ 'GET /api/cards/:id': 'cards/show',
+ 'PATCH /api/cards/:id': 'cards/update',
+ 'POST /api/cards/:id/duplicate': 'cards/duplicate',
+ 'DELETE /api/cards/:id': 'cards/delete',
+ 'POST /api/cards/:cardId/memberships': 'card-memberships/create',
+ 'DELETE /api/cards/:cardId/memberships': 'card-memberships/delete',
+ 'POST /api/cards/:cardId/labels': 'card-labels/create',
+ 'DELETE /api/cards/:cardId/labels/:labelId': 'card-labels/delete',
+
+ 'POST /api/cards/:cardId/tasks': 'tasks/create',
+ 'PATCH /api/tasks/:id': 'tasks/update',
+ 'DELETE /api/tasks/:id': 'tasks/delete',
+
+ 'POST /api/cards/:cardId/attachments': 'attachments/create',
+ 'PATCH /api/attachments/:id': 'attachments/update',
+ 'DELETE /api/attachments/:id': 'attachments/delete',
+
+ 'GET /api/cards/:cardId/actions': 'actions/index',
+
+ 'POST /api/cards/:cardId/comment-actions': 'comment-actions/create',
+ 'PATCH /api/comment-actions/:id': 'comment-actions/update',
+ 'DELETE /api/comment-actions/:id': 'comment-actions/delete',
+
+ 'GET /api/notifications': 'notifications/index',
+ 'GET /api/notifications/:id': 'notifications/show',
+ 'PATCH /api/notifications/:ids': 'notifications/update',
+
+ 'GET /attachments/:id/download/:filename': {
+ action: 'attachments/download',
+ skipAssets: false,
+ },
+
+ 'GET /attachments/:id/download/thumbnails/cover-256.:extension': {
+ action: 'attachments/download-thumbnail',
+ skipAssets: false,
+ },
+
+ 'GET /*': {
+ view: 'index',
+ skipAssets: true,
+ },
+};
diff --git a/server/db/migrations/20180722005928_create_card_label_table.js b/server/db/migrations/20180722005928_create_card_label_table.js
index 1d9fb79..f0798a1 100755
--- a/server/db/migrations/20180722005928_create_card_label_table.js
+++ b/server/db/migrations/20180722005928_create_card_label_table.js
@@ -1,19 +1,19 @@
-module.exports.up = (knex) =>
- knex.schema.createTable('card_label', (table) => {
- /* Columns */
-
- table.bigInteger('id').primary().defaultTo(knex.raw('next_id()'));
-
- table.bigInteger('card_id').notNullable();
- table.bigInteger('label_id').notNullable();
-
- table.timestamp('created_at', true);
- table.timestamp('updated_at', true);
-
- /* Indexes */
-
- table.unique(['card_id', 'label_id']);
- table.index('label_id');
- });
-
-module.exports.down = (knex) => knex.schema.dropTable('card_label');
+module.exports.up = (knex) =>
+ knex.schema.createTable('card_label', (table) => {
+ /* Columns */
+
+ table.bigInteger('id').primary().defaultTo(knex.raw('next_id()'));
+
+ table.bigInteger('card_id').notNullable();
+ table.bigInteger('label_id').notNullable();
+
+ table.timestamp('created_at', true);
+ table.timestamp('updated_at', true);
+
+ /* Indexes */
+
+ table.unique(['card_id', 'label_id']);
+ table.index('label_id');
+ });
+
+module.exports.down = (knex) => knex.schema.dropTable('card_label');
diff --git a/server/db/migrations/20230809022050_oidc_with_pkce_flow.js b/server/db/migrations/20230809022050_oidc_with_pkce_flow.js
index d3d997b..8ce4105 100644
--- a/server/db/migrations/20230809022050_oidc_with_pkce_flow.js
+++ b/server/db/migrations/20230809022050_oidc_with_pkce_flow.js
@@ -1,44 +1,44 @@
-module.exports.up = async (knex) => {
- await knex.schema.createTable('identity_provider_user', (table) => {
- /* Columns */
-
- table.bigInteger('id').primary().defaultTo(knex.raw('next_id()'));
-
- table.bigInteger('user_id').notNullable();
-
- table.text('issuer').notNullable();
- table.text('sub').notNullable();
-
- table.timestamp('created_at', true);
- table.timestamp('updated_at', true);
-
- /* Indexes */
-
- table.unique(['issuer', 'sub']);
- table.index('user_id');
- });
-
- await knex.schema.table('user_account', (table) => {
- /* Columns */
-
- table.boolean('is_sso').notNullable().default(false);
-
- /* Modifications */
-
- table.setNullable('password');
- });
-
- return knex.schema.alterTable('user_account', (table) => {
- table.boolean('is_sso').notNullable().alter();
- });
-};
-
-module.exports.down = async (knex) => {
- await knex.schema.dropTable('identity_provider_user');
-
- return knex.schema.table('user_account', (table) => {
- table.dropColumn('is_sso');
-
- table.dropNullable('password');
- });
-};
+module.exports.up = async (knex) => {
+ await knex.schema.createTable('identity_provider_user', (table) => {
+ /* Columns */
+
+ table.bigInteger('id').primary().defaultTo(knex.raw('next_id()'));
+
+ table.bigInteger('user_id').notNullable();
+
+ table.text('issuer').notNullable();
+ table.text('sub').notNullable();
+
+ table.timestamp('created_at', true);
+ table.timestamp('updated_at', true);
+
+ /* Indexes */
+
+ table.unique(['issuer', 'sub']);
+ table.index('user_id');
+ });
+
+ await knex.schema.table('user_account', (table) => {
+ /* Columns */
+
+ table.boolean('is_sso').notNullable().default(false);
+
+ /* Modifications */
+
+ table.setNullable('password');
+ });
+
+ return knex.schema.alterTable('user_account', (table) => {
+ table.boolean('is_sso').notNullable().alter();
+ });
+};
+
+module.exports.down = async (knex) => {
+ await knex.schema.dropTable('identity_provider_user');
+
+ return knex.schema.table('user_account', (table) => {
+ table.dropColumn('is_sso');
+
+ table.dropNullable('password');
+ });
+};