Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
myieye committed May 17, 2024
2 parents ebb8e5e + 4b5cca5 commit 272760c
Show file tree
Hide file tree
Showing 32 changed files with 1,643 additions and 1,800 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ HASURA_GRAPHQL_ADMIN_SECRET=c67eeb626bee405d883b482046934860
# Get test key at https://ui.honeycomb.io/sil-language-forge/environments/test/api_keys
HONEYCOMB_API_KEY=__REPLACE__
OTEL_RESOURCE_ATTRIBUTES=service.version=0.0.1,deployment.environment=dev
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION=true

SMTP_USER=maildev
SMTP_PASSWORD=maildev
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ local.env
cookies.txt
dump.sql
test-results/
**/*.sqlite
**/*.sqlite-*
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using LexCore.ServiceInterfaces;
using LfClassicData;
using MongoDB.Driver;
using MongoDB.Driver.Linq;

namespace LexBoxApi.GraphQL.CustomTypes;

public class IsLanguageForgeProjectDataLoader : BatchDataLoader<string, bool>, IIsLanguageForgeProjectDataLoader
{
private readonly SystemDbContext _systemDbContext;

public IsLanguageForgeProjectDataLoader(
SystemDbContext systemDbContext,
IBatchScheduler batchScheduler,
DataLoaderOptions? options = null)
: base(batchScheduler, options)
{
_systemDbContext = systemDbContext;
}

protected override async Task<IReadOnlyDictionary<string, bool>> LoadBatchAsync(
IReadOnlyList<string> projectCodes,
CancellationToken cancellationToken)
{
return await MongoExtensions.ToAsyncEnumerable(_systemDbContext.Projects.AsQueryable()
.Select(p => p.ProjectCode)
.Where(projectCode => projectCodes.Contains(projectCode)))

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Build API / publish-api

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (ubuntu-latest, 3) / Test ubuntu-latest for Mercurial 3 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (ubuntu-latest, 3) / Test ubuntu-latest for Mercurial 3 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (windows-latest, 3) / Test windows-latest for Mercurial 3 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (windows-latest, 3) / Test windows-latest for Mercurial 3 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (windows-latest, 6) / Test windows-latest for Mercurial 6 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (windows-latest, 6) / Test windows-latest for Mercurial 6 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (ubuntu-latest, 6) / Test ubuntu-latest for Mercurial 6 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)

Check warning on line 27 in backend/LexBoxApi/GraphQL/CustomTypes/IsLanguageForgeProjectDataLoader.cs

View workflow job for this annotation

GitHub Actions / Integration tests (ubuntu-latest, 6) / Test ubuntu-latest for Mercurial 6 on staging

Method referencing lambda parameter is not supported LINQ expression. (https://www.mongodb.com/docs/mongodb-analyzer/current/rules/#MALinq2001)
.ToDictionaryAsync(projectCode => projectCode, _ => true, cancellationToken);
}
}
1 change: 1 addition & 0 deletions backend/LexBoxApi/GraphQL/GraphQlSetupKernel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public static void AddLexGraphQL(this IServiceCollection services, IHostEnvironm
.InitializeOnStartup()
.RegisterDbContext<LexBoxDbContext>()
.RegisterService<IHgService>()
.RegisterService<IIsLanguageForgeProjectDataLoader>()
.RegisterService<LoggedInContext>()
.RegisterService<EmailService>()
.RegisterService<LexAuthService>()
Expand Down
32 changes: 20 additions & 12 deletions backend/LexBoxApi/GraphQL/ProjectMutations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,25 @@ await dbContext.ProjectUsers.Where(pu => pu.ProjectId == input.ProjectId && pu.U
return dbContext.Projects.Where(p => p.Id == input.ProjectId);
}

[Error<NotFoundException>]
[Error<DbError>]
[AdminRequired]
[UseMutationConvention]
[UseProjection]
public async Task<DraftProject> DeleteDraftProject(
Guid draftProjectId,
LexBoxDbContext dbContext)
{
var deletedDraft = await dbContext.DraftProjects.FindAsync(draftProjectId);
if (deletedDraft == null)
{
throw NotFoundException.ForType<DraftProject>();
}
// Draft projects are deleted immediately, not soft-deleted
dbContext.DraftProjects.Remove(deletedDraft);
await dbContext.SaveChangesAsync();
return deletedDraft;
}

[Error<NotFoundException>]
[Error<DbError>]
Expand All @@ -356,18 +375,7 @@ public async Task<IQueryable<Project>> SoftDeleteProject(
var project = await dbContext.Projects.Include(p => p.Users).FirstOrDefaultAsync(p => p.Id == projectId);
if (project is null)
{
// Draft projects, if any, are deleted immediately, not soft-deleted
var deletedDraftCount = await dbContext.DraftProjects.Where(dp => dp.Id == projectId).ExecuteDeleteAsync();
if (deletedDraftCount == 0)
{
// No draft project either, so return standard project not found error
throw NotFoundException.ForType<Project>();
}
else
{
// Return an empty project list to indicate success
return dbContext.Projects.Where(p => p.Id == projectId);
}
throw NotFoundException.ForType<Project>();
}
if (project.DeletedDate is not null) throw new InvalidOperationException("Project already deleted");

Expand Down
14 changes: 7 additions & 7 deletions backend/LexBoxApi/LexBoxApi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,16 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Nito.AsyncEx.Coordination" Version="5.1.2" />
<PackageReference Include="Npgsql.OpenTelemetry" Version="8.0.1" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.7.0" />
<PackageReference Include="Npgsql.OpenTelemetry" Version="8.0.3" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta.8" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Process" Version="0.5.0-beta.3" />
<PackageReference Include="OpenTelemetry.Instrumentation.Quartz" Version="1.0.0-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.8.0" />
<PackageReference Include="Quartz.AspNetCore" Version="3.8.0" />
<PackageReference Include="Quartz.Serialization.Json" Version="3.8.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
Expand Down
2 changes: 2 additions & 0 deletions backend/LexBoxApi/LexBoxKernel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using LexBoxApi.Auth;
using LexBoxApi.Config;
using LexBoxApi.GraphQL;
using LexBoxApi.GraphQL.CustomTypes;
using LexBoxApi.Services;
using LexCore.Config;
using LexCore.ServiceInterfaces;
Expand Down Expand Up @@ -52,6 +53,7 @@ public static void AddLexBoxApi(this IServiceCollection services,
services.AddScoped<TusService>();
services.AddScoped<TurnstileService>();
services.AddScoped<IHgService, HgService>();
services.AddScoped<IIsLanguageForgeProjectDataLoader, IsLanguageForgeProjectDataLoader>();
services.AddScoped<ILexProxyService, LexProxyService>();
services.AddSingleton<ISendReceiveService, SendReceiveService>();
services.AddSingleton<LexboxLinkGenerator>();
Expand Down
4 changes: 2 additions & 2 deletions backend/LexBoxApi/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"Microsoft.AspNetCore": "Information",
"Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersMiddleware": "Debug",
"Microsoft.EntityFrameworkCore": "Information",
"MongoDB.Command": "Debug",
"MongoDB.Command": "Debug"
}
},
"ForwardedHeadersOptions": {
Expand Down Expand Up @@ -66,6 +66,6 @@
"Endpoint": "http://localhost:4317"
},
"Email": {
"CreateProjectEmailDestination": "admin@languagedepot.org"
"CreateProjectEmailDestination": "lexbox_support@groups.sil.org"
}
}
9 changes: 9 additions & 0 deletions backend/LexCore/Entities/Project.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@ public bool GetHasAbandonedTransactions(IHgService hgService)
{
return hgService.HasAbandonedTransactions(Code);
}

public Task<bool> GetIsLanguageForgeProject(IIsLanguageForgeProjectDataLoader loader)
{
if (Type is ProjectType.Unknown or ProjectType.FLEx)
{
return loader.LoadAsync(Code);
}
return Task.FromResult(false);
}
}

public enum ProjectMigrationStatus
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace LexCore.ServiceInterfaces;

public interface IIsLanguageForgeProjectDataLoader
{
public Task<bool> LoadAsync(string projectCode, CancellationToken cancellationToken = default);
}
4 changes: 2 additions & 2 deletions backend/LexData/LexData.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
<PackageReference Include="Npgsql" Version="8.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
<PackageReference Include="Npgsql" Version="8.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
</ItemGroup>

<ItemGroup>
Expand Down
10 changes: 5 additions & 5 deletions backend/SyncReverseProxy/SyncReverseProxy.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.3.0" />
<PackageReference Include="Yarp.ReverseProxy" Version="2.1.0" />

<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.8.1" />
<PackageReference Include="Yarp.Telemetry.Consumption" Version="2.1.0" />

</ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions backend/Testing/Testing.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
<Choose>
<When Condition=" '$(MercurialVersion)' == '6' ">
<ItemGroup>
<PackageReference Include="SIL.Chorus.LibChorus" Version="6.0.0-beta0045" />
<PackageReference Include="SIL.Chorus.Mercurial" Version="6.5.1.29" />
<PackageReference Include="SIL.Chorus.LibChorus" Version="6.0.0-beta0046" />
<PackageReference Include="SIL.Chorus.Mercurial" Version="6.*" />
</ItemGroup>
</When>
<Otherwise>
Expand Down
2 changes: 2 additions & 0 deletions deployment/base/lexbox-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ spec:
fieldPath: spec.nodeName
- name: OTEL_RESOURCE_ATTRIBUTES
value: k8s.node.name=$(K8S_NODE_NAME)
- name: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION
value: 'true'
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
Expand Down
1 change: 0 additions & 1 deletion deployment/develop/lexbox-deployment.patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ spec:
- name: Email__SmtpPort
value: '587'
- name: Email__From
# TODO: need to parameterize this
value: "Language Depot (Develop) <no-reply@develop.languagedepot.org>"
- name: Email__BaseUrl
value: "https://develop.lexbox.org"
3 changes: 2 additions & 1 deletion deployment/production/lexbox-deployment.patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ spec:
- name: Email__SmtpPort
value: '587'
- name: Email__From
# TODO: need to parameterize this
value: "Language Depot <no-reply@languagedepot.org>"
- name: Email__CreateProjectEmailDestination
value: "admin@languagedepot.org"
- name: Email__BaseUrl
value: "https://languagedepot.org"
1 change: 0 additions & 1 deletion deployment/staging/lexbox-deployment.patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ spec:
- name: Email__SmtpPort
value: '587'
- name: Email__From
# TODO: need to parameterize this
value: "Language Depot (Staging) <no-reply@staging.languagedepot.org>"
- name: Email__BaseUrl
value: "https://staging.languagedepot.org"
96 changes: 48 additions & 48 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"test-flaky": "playwright test --retries=3 -j 30%",
"test-hard": "playwright test --repeat-each=3 -j 30%",
"test-report": "playwright show-report test-results/_html-report",
"_env-comment": "Run any command with .env.local loaded: (e.g. `pnpm run env test-flaky`)",
"_env-comment": "Run any command with .env.local loaded: (e.g. `pnpm run env run test -g \"test name\")",
"env": "dotenvx run --env-file=.env.local -- pnpm",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
Expand All @@ -27,79 +27,79 @@
"clean": "rimraf node_modules .svelte-kit"
},
"devDependencies": {
"@dotenvx/dotenvx": "^0.37.0",
"@egoist/tailwindcss-icons": "^1.7.4",
"@eslint/js": "^8.56.0",
"@graphql-codegen/cli": "^5.0.0",
"@graphql-codegen/client-preset": "^4.1.0",
"@graphql-codegen/schema-ast": "^4.0.0",
"@graphql-codegen/typescript": "^4.0.1",
"@dotenvx/dotenvx": "^0.37.1",
"@egoist/tailwindcss-icons": "^1.8.0",
"@eslint/js": "^8.57.0",
"@graphql-codegen/cli": "^5.0.2",
"@graphql-codegen/client-preset": "^4.2.5",
"@graphql-codegen/schema-ast": "^4.0.2",
"@graphql-codegen/typescript": "^4.0.6",
"@graphql-typed-document-node/core": "^3.2.0",
"@iconify-json/mdi": "^1.1.64",
"@playwright/test": "^1.41.1",
"@iconify-json/mdi": "^1.1.66",
"@playwright/test": "^1.44.0",
"@sveltejs/adapter-node": "^4.0.1",
"@sveltejs/kit": "^2.5.0",
"@sveltejs/vite-plugin-svelte": "^3.0.2",
"@tailwindcss/typography": "^0.5.10",
"@sveltejs/kit": "^2.5.8",
"@sveltejs/vite-plugin-svelte": "^3.1.0",
"@tailwindcss/typography": "^0.5.13",
"@types/mjml": "^4.7.4",
"@types/node": "^20.11.16",
"@types/node": "^20.12.12",
"@types/zxcvbn": "^4.4.4",
"@typescript-eslint/eslint-plugin": "^6.20.0",
"@typescript-eslint/parser": "^6.20.0",
"@urql/core": "^4.2.3",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"@urql/core": "^5.0.3",
"@urql/devtools": "^2.0.3",
"@urql/exchange-graphcache": "^6.4.0",
"@urql/svelte": "^4.0.4",
"autoprefixer": "^10.4.17",
"daisyui": "^4.7.2",
"eslint": "^8.56.0",
"eslint-plugin-svelte": "^2.35.1",
"@urql/exchange-graphcache": "^6.5.1",
"@urql/svelte": "^4.2.0",
"autoprefixer": "^10.4.19",
"daisyui": "^4.11.1",
"eslint": "^8.57.0",
"eslint-plugin-svelte": "^2.39.0",
"globals": "^13.24.0",
"graphql": "^16.8.1",
"jwt-decode": "^4.0.0",
"postcss": "^8.4.33",
"rimraf": "^5.0.5",
"svelte": "^4.2.9",
"svelte-check": "^3.6.3",
"postcss": "^8.4.38",
"rimraf": "^5.0.7",
"svelte": "^4.2.17",
"svelte-check": "^3.7.1",
"svelte-eslint-parser": "^0.33.1",
"svelte-preprocess": "^5.1.3",
"svelte-preprocess": "^5.1.4",
"svelte-turnstile": "^0.5.0",
"sveltekit-superforms": "^1.13.4",
"tailwindcss": "^3.4.1",
"tailwindcss": "^3.4.3",
"tslib": "^2.6.2",
"type-fest": "^4.10.2",
"type-fest": "^4.18.2",
"typescript": "^5.3.3",
"vite": "^5.2.9",
"vite": "^5.2.11",
"vite-plugin-graphql-codegen": "^3.3.6",
"vitest": "^1.2.2",
"zod": "^3.22.4",
"vitest": "^1.6.0",
"zod": "^3.23.8",
"zxcvbn": "^4.4.2"
},
"type": "module",
"dependencies": {
"@floating-ui/dom": "^1.6.1",
"@opentelemetry/api": "^1.7.0",
"@opentelemetry/auto-instrumentations-node": "^0.41.0",
"@opentelemetry/auto-instrumentations-web": "^0.36.0",
"@opentelemetry/context-zone": "^1.21.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.48.0",
"@opentelemetry/instrumentation": "^0.48.0",
"@opentelemetry/resources": "^1.21.0",
"@opentelemetry/sdk-node": "^0.48.0",
"@opentelemetry/sdk-trace-web": "^1.21.0",
"@opentelemetry/semantic-conventions": "^1.21.0",
"@floating-ui/dom": "^1.6.5",
"@opentelemetry/api": "^1.8.0",
"@opentelemetry/auto-instrumentations-node": "^0.46.1",
"@opentelemetry/auto-instrumentations-web": "^0.39.0",
"@opentelemetry/context-zone": "^1.24.1",
"@opentelemetry/exporter-trace-otlp-http": "^0.51.1",
"@opentelemetry/instrumentation": "^0.51.1",
"@opentelemetry/resources": "^1.24.1",
"@opentelemetry/sdk-node": "^0.51.1",
"@opentelemetry/sdk-trace-web": "^1.24.1",
"@opentelemetry/semantic-conventions": "^1.24.1",
"@tailwindcss/container-queries": "^0.1.1",
"@types/js-cookie": "^3.0.6",
"@types/set-cookie-parser": "^2.4.7",
"@vitejs/plugin-basic-ssl": "^1.1.0",
"css-tree": "^2.3.1",
"js-cookie": "^3.0.5",
"mjml": "^4.15.2",
"mjml": "^4.15.3",
"set-cookie-parser": "^2.6.0",
"svelte-exmarkdown": "^3.0.3",
"svelte-exmarkdown": "^3.0.5",
"svelte-intl-precompile": "^0.12.3",
"sveltekit-search-params": "^2.1.0",
"tus-js-client": "^4.0.1",
"sveltekit-search-params": "^2.1.2",
"tus-js-client": "^4.1.0",
"viewer": "workspace:*"
}
}
Loading

0 comments on commit 272760c

Please sign in to comment.