Compare commits
1 Commits
v1.1.0
...
feature/8-
| Author | SHA1 | Date | |
|---|---|---|---|
| 6983fc7b84 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "api",
|
"name": "api",
|
||||||
"version": "1.1.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -20,24 +20,25 @@
|
|||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@azure/functions": "^1.0.3",
|
||||||
"@nestjs/axios": "^4.0.0",
|
"@nestjs/axios": "^4.0.0",
|
||||||
"@nestjs/azure-func-http": "^0.10.0",
|
"@nestjs/azure-func-http": "^0.10.0",
|
||||||
"@nestjs/common": "^11.0.11",
|
"@nestjs/common": "^10.0.0",
|
||||||
"@nestjs/config": "^4.0.1",
|
"@nestjs/config": "^4.0.0",
|
||||||
"@nestjs/core": "^11.0.11",
|
"@nestjs/core": "^10.0.0",
|
||||||
"@nestjs/platform-express": "^11.0.11",
|
"@nestjs/platform-express": "^10.0.0",
|
||||||
"@noahspan/azure-database": "^3.1.2",
|
"@noahspan/azure-database": "^3.1.2",
|
||||||
"@noahspan/noahspan-modules": "^1.1.5",
|
"@noahspan/noahspan-modules": "^1.0.0",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "7.8.2",
|
"rxjs": "^7.8.2",
|
||||||
"uuid": "^11.0.5"
|
"uuid": "^11.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/schematics": "^19.1.4",
|
"@angular-devkit/schematics": "^19.1.4",
|
||||||
"@nestjs/cli": "^11.0.5",
|
"@nestjs/cli": "^10.0.0",
|
||||||
"@nestjs/schematics": "^11.0.2",
|
"@nestjs/schematics": "^10.0.0",
|
||||||
"@nestjs/testing": "^11.0.11",
|
"@nestjs/testing": "^10.0.0",
|
||||||
"@schematics/angular": "^19.1.4",
|
"@schematics/angular": "^19.1.4",
|
||||||
"@types/express": "^4.17.17",
|
"@types/express": "^4.17.17",
|
||||||
"@types/jest": "^29.5.2",
|
"@types/jest": "^29.5.2",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { APP_FILTER } from '@nestjs/core';
|
import { APP_FILTER, APP_GUARD } from '@nestjs/core';
|
||||||
import { HttpExceptionFilter } from './filters/http-exception.filter';
|
import { HttpExceptionFilter } from './filters/http-exception.filter';
|
||||||
import { ProjectModule } from './project/project.module';
|
import { ProjectModule } from './project/project.module';
|
||||||
import { AuthModule, UserModule } from '@noahspan/noahspan-modules'
|
import { AuthGuard, AuthModule, UserModule } from '@noahspan/noahspan-modules'
|
||||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||||
import configuration from './config/configuration';
|
import configuration from './config/configuration';
|
||||||
|
|
||||||
@@ -39,6 +39,10 @@ import configuration from './config/configuration';
|
|||||||
{
|
{
|
||||||
provide: APP_FILTER,
|
provide: APP_FILTER,
|
||||||
useClass: HttpExceptionFilter
|
useClass: HttpExceptionFilter
|
||||||
|
},
|
||||||
|
{
|
||||||
|
provide: APP_GUARD,
|
||||||
|
useClass: AuthGuard
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,14 +12,13 @@ import {
|
|||||||
import { ProjectDto } from './project.dto';
|
import { ProjectDto } from './project.dto';
|
||||||
import { Project } from './project.entity';
|
import { Project } from './project.entity';
|
||||||
import { ProjectService } from './project.service';
|
import { ProjectService } from './project.service';
|
||||||
import { AuthGuard, CustomError, Public } from '@noahspan/noahspan-modules';
|
import { CustomError, Public } from '@noahspan/noahspan-modules';
|
||||||
|
|
||||||
@Controller('projects')
|
@Controller('projects')
|
||||||
export class ProjectController {
|
export class ProjectController {
|
||||||
constructor(private readonly projectService: ProjectService) {}
|
constructor(private readonly projectService: ProjectService) {}
|
||||||
|
|
||||||
@Get(':partitionKey/:rowKey')
|
@Get(':partitionKey/:rowKey')
|
||||||
@UseGuards(AuthGuard)
|
|
||||||
async find(
|
async find(
|
||||||
@Param('partitionKey') partitionKey: string,
|
@Param('partitionKey') partitionKey: string,
|
||||||
@Param('rowKey') rowKey: string
|
@Param('rowKey') rowKey: string
|
||||||
@@ -33,12 +32,12 @@ export class ProjectController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Public()
|
||||||
@Get()
|
@Get()
|
||||||
async findAll() {
|
async findAll() {
|
||||||
try {
|
try {
|
||||||
return await this.projectService.findAll();
|
return await this.projectService.findAll();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error)
|
|
||||||
const customError = error as CustomError;
|
const customError = error as CustomError;
|
||||||
|
|
||||||
throw new HttpException(customError.message, customError.statusCode);
|
throw new HttpException(customError.message, customError.statusCode);
|
||||||
@@ -46,7 +45,6 @@ export class ProjectController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Post()
|
@Post()
|
||||||
@UseGuards(AuthGuard)
|
|
||||||
async create(@Body() projectDto: ProjectDto) {
|
async create(@Body() projectDto: ProjectDto) {
|
||||||
try {
|
try {
|
||||||
const project = new Project();
|
const project = new Project();
|
||||||
@@ -62,7 +60,6 @@ export class ProjectController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Put(':partitionKey/:rowKey')
|
@Put(':partitionKey/:rowKey')
|
||||||
@UseGuards(AuthGuard)
|
|
||||||
async update(
|
async update(
|
||||||
@Param('partitionKey') partitionKey: string,
|
@Param('partitionKey') partitionKey: string,
|
||||||
@Param('rowKey') rowKey: string,
|
@Param('rowKey') rowKey: string,
|
||||||
@@ -82,7 +79,6 @@ export class ProjectController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Delete(':partitionKey/:rowKey')
|
@Delete(':partitionKey/:rowKey')
|
||||||
@UseGuards(AuthGuard)
|
|
||||||
async delete(
|
async delete(
|
||||||
@Param('partitionKey') partitionKey: string,
|
@Param('partitionKey') partitionKey: string,
|
||||||
@Param('rowKey') rowKey: string
|
@Param('rowKey') rowKey: string
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import { EntityString } from '@noahspan/azure-database';
|
|
||||||
|
|
||||||
export class Project {
|
export class Project {
|
||||||
@EntityString() partitionKey: string;
|
partitionKey: string;
|
||||||
@EntityString() rowKey: string;
|
rowKey: string;
|
||||||
@EntityString() displayName: string;
|
displayName: string;
|
||||||
@EntityString() icon: string;
|
icon: string;
|
||||||
@EntityString() summary: string;
|
summary: string;
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ import { ConfigModule, ConfigService } from '@nestjs/config';
|
|||||||
inject: [ConfigService]
|
inject: [ConfigService]
|
||||||
}),
|
}),
|
||||||
AzureTableStorageModule.forFeature(Project, {
|
AzureTableStorageModule.forFeature(Project, {
|
||||||
createTableIfNotExists: false,
|
createTableIfNotExists: true,
|
||||||
table: 'projects'
|
table: 'projects'
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { InjectRepository, Repository } from '@noahspan/azure-database';
|
import { InjectRepository, Repository } from '@noahspan/azure-database';
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { Project } from './project.entity';
|
import { Project } from './project.entity';
|
||||||
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ProjectService {
|
export class ProjectService {
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ const ProjectForm = ({ isDrawerOpen, mode, onOpenClose, projectId }: ProjectForm
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onSubmit = async (data: unknown) => {
|
const onSubmit = async (data: unknown) => {
|
||||||
|
console.log(data)
|
||||||
try {
|
try {
|
||||||
dispatch({ type: 'SET_IS_LOADING', payload: true });
|
dispatch({ type: 'SET_IS_LOADING', payload: true });
|
||||||
|
|
||||||
|
|||||||
@@ -37,14 +37,12 @@ const Projects = () => {
|
|||||||
`api/projects`,
|
`api/projects`,
|
||||||
);
|
);
|
||||||
const projects: Project[] = response.data;
|
const projects: Project[] = response.data;
|
||||||
console.log(projects);
|
|
||||||
projects.sort((a, b) => Number(a.order) - Number(b.order))
|
projects.sort((a, b) => Number(a.order) - Number(b.order))
|
||||||
|
|
||||||
return projects;
|
return projects;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const axiosError = error as AxiosError;
|
throw new Error('broken');
|
||||||
|
|
||||||
throw new Error(axiosError.message);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ const SiteNav: React.FC<unknown> = () => {
|
|||||||
|
|
||||||
return imageUrl;
|
return imageUrl;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
throw new Error();
|
throw new Error();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -93,6 +94,7 @@ const SiteNav: React.FC<unknown> = () => {
|
|||||||
const accessToken: string = await getAccessToken();
|
const accessToken: string = await getAccessToken();
|
||||||
const userProfile = await getUserProfile(accessToken);
|
const userProfile = await getUserProfile(accessToken);
|
||||||
const userPhoto = await getUserPhoto(accessToken);
|
const userPhoto = await getUserPhoto(accessToken);
|
||||||
|
console.log(userPhoto)
|
||||||
|
|
||||||
setUserPhoto(userPhoto);
|
setUserPhoto(userPhoto);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
body {
|
|
||||||
background-color: #f2f2f2;
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,6 @@ import { BrowserRouter } from 'react-router-dom';
|
|||||||
import { AuthenticationResult, EventMessage, EventType, PublicClientApplication } from '@azure/msal-browser';
|
import { AuthenticationResult, EventMessage, EventType, PublicClientApplication } from '@azure/msal-browser';
|
||||||
import { msalConfig } from './auth/msalConfig.ts';
|
import { msalConfig } from './auth/msalConfig.ts';
|
||||||
import AppContextProvider from './context/appContext/AppContextProvider.tsx';
|
import AppContextProvider from './context/appContext/AppContextProvider.tsx';
|
||||||
import './index.css';
|
|
||||||
|
|
||||||
const msalInstance: PublicClientApplication = new PublicClientApplication(msalConfig);
|
const msalInstance: PublicClientApplication = new PublicClientApplication(msalConfig);
|
||||||
|
|
||||||
|
|||||||
212
data/profile/profile.json
Normal file
212
data/profile/profile.json
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
{
|
||||||
|
"experiences": [
|
||||||
|
{
|
||||||
|
"jobTitle": "Senior Software Engineer",
|
||||||
|
"company": "Sensonix, Inc.",
|
||||||
|
"location": "Plymouth, Minnesota",
|
||||||
|
"startDate": "April 2023",
|
||||||
|
"endDate": "Present",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "Senior Software Engineer",
|
||||||
|
"company": "Amano McGann, Inc.",
|
||||||
|
"location": "Roseville, Minnesota",
|
||||||
|
"startDate": "July 2022",
|
||||||
|
"endDate": "April 2023",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "Senior Software Engineer",
|
||||||
|
"company": "Optum",
|
||||||
|
"location": "Eden Prairie, Minnesota",
|
||||||
|
"startDate": "March 2021",
|
||||||
|
"endDate": "June 2022",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "Senior Software Engineer",
|
||||||
|
"company": "Target",
|
||||||
|
"location": "Minneapolis, Minnesota",
|
||||||
|
"startDate": "December 2018",
|
||||||
|
"endDate": "February 2021",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "Developer, Business Systems",
|
||||||
|
"company": "Minnesota Twins",
|
||||||
|
"location": "Minneapolis, Minnesota",
|
||||||
|
"startDate": "February 2017",
|
||||||
|
"endDate": "December 2018",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "SharePoint Administrator/Developer",
|
||||||
|
"company": "Minnesota Judicial Branch",
|
||||||
|
"location": "Saint Paul, Minnesota",
|
||||||
|
"startDate": "January 2016",
|
||||||
|
"endDate": "February 2017",
|
||||||
|
"details": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jobTitle": "Consultant",
|
||||||
|
"company": "Magenic Technologies",
|
||||||
|
"location": "Saint Louis Park, Minnesota",
|
||||||
|
"startDate": "August 2011",
|
||||||
|
"endDate": "January 2016",
|
||||||
|
"details": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"education": [
|
||||||
|
{
|
||||||
|
"school": "Metropolitan State University",
|
||||||
|
"location": "Saint Paul, Minnesota",
|
||||||
|
"degree": "Bachelor of Arts",
|
||||||
|
"fieldOfStudy": "Technical Communication"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"school": "Century College",
|
||||||
|
"location": "White Bear Lake, Minnesota",
|
||||||
|
"degree": "Associate of Arts",
|
||||||
|
"fieldOfStudy": "Liberal Arts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"about": {
|
||||||
|
"details": "\\# This is some markdown.",
|
||||||
|
"summary": null
|
||||||
|
},
|
||||||
|
"intro": {
|
||||||
|
"firstName": "Noah",
|
||||||
|
"lastName": "Spannbauer",
|
||||||
|
"photoUrl": null,
|
||||||
|
"title": "Senior Software Engineer",
|
||||||
|
"location": "Minneapolis, Minnesota, United States"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Agile Methodologies",
|
||||||
|
"skills": [
|
||||||
|
"Scrum"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Containerization",
|
||||||
|
"skills": [
|
||||||
|
"Docker",
|
||||||
|
"Kubernetes",
|
||||||
|
"Helm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Continuous Integration and Continuous Delivery",
|
||||||
|
"skills": [
|
||||||
|
"GitHub Actions",
|
||||||
|
"Argo CD"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Database",
|
||||||
|
"skills": [
|
||||||
|
"PostgreSQL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Front-End Web Development",
|
||||||
|
"skills": [
|
||||||
|
"React",
|
||||||
|
"Node.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Infrastructure as Code",
|
||||||
|
"skills": [
|
||||||
|
"Terraform"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Messaging",
|
||||||
|
"skills": [
|
||||||
|
"RabbitMQ"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Programming Languages",
|
||||||
|
"skills": [
|
||||||
|
"JavaScript",
|
||||||
|
"Typescript"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Test Automation",
|
||||||
|
"skills": [
|
||||||
|
"Cucumber",
|
||||||
|
"Gherkin",
|
||||||
|
"Jest",
|
||||||
|
"Playwright"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Experienced",
|
||||||
|
"group": "Cloud",
|
||||||
|
"skills": [
|
||||||
|
"Amazon Web Services (AWS)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Cloud",
|
||||||
|
"skills": [
|
||||||
|
"Azure"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Continuous Integration and Continuous Delivery",
|
||||||
|
"skills": [
|
||||||
|
"Azure DevOps",
|
||||||
|
"Drone",
|
||||||
|
"Vela"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Database",
|
||||||
|
"skills": [
|
||||||
|
"MongoDB",
|
||||||
|
"SQL Server"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Messaging",
|
||||||
|
"skills": [
|
||||||
|
"Khafka"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Programming Languages",
|
||||||
|
"skills": [
|
||||||
|
"C#",
|
||||||
|
"Powershell"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"category": "Familiar",
|
||||||
|
"group": "Test Automation",
|
||||||
|
"skills": [
|
||||||
|
"Cypress"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"___mb_schema": "/.mattrbld/schemas/Profile.json"
|
||||||
|
}
|
||||||
0
data/projects/.gitkeep
Normal file
0
data/projects/.gitkeep
Normal file
23
data/projects/projects.json
Normal file
23
data/projects/projects.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"projects": [
|
||||||
|
{
|
||||||
|
"repoName": "noahspan-components",
|
||||||
|
"title": "Components (React + Storybook)",
|
||||||
|
"iconName": "fa-puzzle-piece",
|
||||||
|
"summary": "A component library with custom React components, extended components from Material UI, and a subset of Font Awesome icons."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repoName": "noahspan-flying",
|
||||||
|
"title": "Flying (React + Nest.js)",
|
||||||
|
"iconName": "fa-plane",
|
||||||
|
"summary": "A pilot logbook for logging flight hours."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repoName": "noahspan-modules",
|
||||||
|
"title": "Modules (Nest.js)",
|
||||||
|
"iconName": "fa-gear",
|
||||||
|
"summary": "A library of custom modules for projects using Nest.js."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"___mb_schema": "/.mattrbld/schemas/Projects.json"
|
||||||
|
}
|
||||||
@@ -2,15 +2,13 @@ version: '3.8'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
azurite:
|
azurite:
|
||||||
container_name: azurite-root
|
container_name: azurite
|
||||||
image: mcr.microsoft.com/azure-storage/azurite:3.33.0
|
image: mcr.microsoft.com/azure-storage/azurite:3.33.0
|
||||||
ports:
|
ports:
|
||||||
- '10000:10000'
|
- '10000:10000'
|
||||||
- '10001:10001'
|
- '10001:10001'
|
||||||
- '10002:10002'
|
- '10002:10002'
|
||||||
command: 'azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --loose'
|
command: 'azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --loose'
|
||||||
volumes:
|
|
||||||
- ./azurite-root:/data
|
|
||||||
|
|
||||||
api:
|
api:
|
||||||
container_name: root-api
|
container_name: root-api
|
||||||
@@ -28,7 +26,4 @@ services:
|
|||||||
context: .
|
context: .
|
||||||
target: app
|
target: app
|
||||||
ports:
|
ports:
|
||||||
- '8080:8080'
|
- '8080:8080'
|
||||||
|
|
||||||
volumes:
|
|
||||||
azurite-root:
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@noahspan/noahspan-root",
|
"name": "@noahspan/noahspan-root",
|
||||||
"version": "1.1.0",
|
"version": "1.0.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"preprod": "rimraf ./.prod && pnpm --filter api build && pnpm --filter app build",
|
"preprod": "rimraf ./.prod && pnpm --filter api build && pnpm --filter app build",
|
||||||
|
|||||||
1205
pnpm-lock.yaml
generated
1205
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user