Skip to content

Commit

Permalink
feat: 지원자 카운트 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
saseungmin committed Dec 2, 2024
1 parent 34f2f16 commit 9776e60
Show file tree
Hide file tree
Showing 20 changed files with 226 additions and 41 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4 changes: 2 additions & 2 deletions apps/admin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
"@tanstack/react-query": "5.52.0",
"@vercel/blob": "0.23.4",
"clsx": "2.1.1",
"google-auth-library": "9.13.0",
"google-spreadsheet": "4.1.2",
"google-auth-library": "9.15.0",
"google-spreadsheet": "4.1.4",
"motion": "11.11.17",
"next": "14.2.15",
"next-auth": "5.0.0-beta.19",
Expand Down
2 changes: 1 addition & 1 deletion apps/web/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ module.exports = {
],
rules: {
'import/no-extraneous-dependencies': ['error', {
devDependencies: ['**/*.test.ts', '**/*.test.tsx', '**/*.stories.tsx', '**/*.stories.ts', 'next.config.js'],
devDependencies: ['**/*.test.ts', '**/*.test.tsx', '**/*.stories.tsx', '**/*.stories.ts', 'next.config.js', 'scripts/**/*.ts'],
}],
},
};
4 changes: 4 additions & 0 deletions apps/web/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ cypress/log

# eslint cache
.eslintcache

# google spreadsheet
dist/
src/lib/assets/data/applicant-count.json
9 changes: 7 additions & 2 deletions apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"scripts": {
"open-browser": "open http://dnd-academy.localhost:3000",
"dev": "next dev -H dnd-academy.localhost -p 3000 & yarn open-browser",
"build": "next build",
"build": "yarn generate:applicant-count && next build",
"start": "next start",
"lint": "eslint '**/*.{js,jsx,ts,tsx}' --fix",
"stylelint": "stylelint **/*.scss",
Expand All @@ -20,7 +20,9 @@
"check-types": "tsc --noEmit",
"test:e2e": "start-server-and-test dev http://localhost:3000 cypress:run",
"storybook": "storybook dev -p 6006",
"build:storybook": "storybook build"
"build:storybook": "storybook build",
"build:scripts": "tsc --project tsconfig.scripts.json",
"generate:applicant-count": "yarn build:scripts && node dist/scripts/generate-applicant-count.js"
},
"repository": {
"type": "git",
Expand Down Expand Up @@ -57,6 +59,7 @@
"@chromatic-com/storybook": "2.0.2",
"@codecov/nextjs-webpack-plugin": "1.2.0",
"@dnd-academy/eslint-config": "workspace:*",
"@next/env": "14.2.15",
"@next/eslint-plugin-next": "14.2.15",
"@storybook/addon-essentials": "8.3.3",
"@storybook/addon-interactions": "8.3.3",
Expand Down Expand Up @@ -95,6 +98,8 @@
"eslint-plugin-storybook": "0.8.0",
"eslint-plugin-testing-library": "6.2.0",
"eslint-plugin-unused-imports": "3.2.0",
"google-auth-library": "9.15.0",
"google-spreadsheet": "4.1.4",
"identity-obj-proxy": "3.0.0",
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
Expand Down
64 changes: 64 additions & 0 deletions apps/web/scripts/generate-applicant-count.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import * as fs from 'fs';
import * as path from 'path';

import { loadEnvConfig } from '@next/env';
import { JWT } from 'google-auth-library';
import { GoogleSpreadsheet } from 'google-spreadsheet';

import { checkNumber } from '@/utils';

const projectDir = process.cwd();
loadEnvConfig(projectDir);

const PROJECT_ROOT = path.resolve(__dirname, '../..');

async function generateApplicantCount() {
try {
const serviceAccountAuth = new JWT({
email: process.env.GOOGLE_CLIENT_EMAIL,
key: process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, '\n'),
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});

const developerApplicantDoc = new GoogleSpreadsheet('1OLzUsZ1TBmKeEJh-ENoXWdccfwTg7WY3-zeOmcACxRc', serviceAccountAuth);
const designerApplicantDoc = new GoogleSpreadsheet('1KrwSZoUY3i6asMWtxIQsaofMP9rCmxnDpD_sZ4yOC-c', serviceAccountAuth);

await developerApplicantDoc.loadInfo();
await designerApplicantDoc.loadInfo();

const developerApplicantRows = await developerApplicantDoc.sheetsByIndex[0].getRows();
const designerApplicantRows = await designerApplicantDoc.sheetsByIndex[0].getRows();

const developerApplicantCount = checkNumber(developerApplicantRows?.length);
const designerApplicantCount = checkNumber(designerApplicantRows?.length);

const applicantData = {
developer: developerApplicantCount,
designer: designerApplicantCount,
total: developerApplicantCount + designerApplicantCount,
lastUpdated: new Date().toISOString(),
};

const outputPath = path.join(PROJECT_ROOT, 'src/lib/assets/data/applicant-count.json');

const dir = path.dirname(outputPath);

if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}

fs.writeFileSync(outputPath, JSON.stringify(applicantData, null, 2));

console.log('✅ 지원자 수 데이터가 성공적으로 생성되었습니다.');
console.log(`📁 파일 위치: ${outputPath}`);
console.log('📊 현재 지원자 현황:');
console.log(`- 개발자: ${applicantData.developer}명`);
console.log(`- 디자이너: ${applicantData.designer}명`);
console.log(`- 총 지원자: ${applicantData.total}명`);
} catch (error) {
console.error('❌ 데이터 생성 중 오류가 발생했습니다:', error);
process.exit(1);
}
}

generateApplicantCount();
18 changes: 4 additions & 14 deletions apps/web/src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import {
api, type CurrentApplicantCount, type FAQ,
} from '@dnd-academy/core';
import { api, type FAQ } from '@dnd-academy/core';

import HomePage from '@/components/pages/HomePage';
import { getEventStatus } from '@/lib/apis/event';
import { getApplicantCount, getEventStatus } from '@/lib/apis/event';
import { DEFAULT_METADATA } from '@/lib/constants/metadata';
import { checkNumber } from '@/utils';

export const metadata = DEFAULT_METADATA;

Expand All @@ -16,27 +13,20 @@ type Props = {
};

async function Home({ searchParams }: Props) {
const currentApplicantCountData = await api<CurrentApplicantCount>({
url: '/current_applicant_count.json',
type: 'blob',
});

const faqData = await api<FAQ[]>({
url: '/faq.json',
type: 'blob',
});

const currentApplicantCount = checkNumber(currentApplicantCountData?.designer)
+ checkNumber(currentApplicantCountData?.developer);

const eventStatus = getEventStatus();
const applicantCount = getApplicantCount();

return (
<HomePage
tab={searchParams.tab}
currentApplicantCount={currentApplicantCount}
eventStatus={eventStatus}
faqItems={faqData}
applicantTotalCount={applicantCount.total}
/>
);
}
Expand Down
6 changes: 3 additions & 3 deletions apps/web/src/components/pages/HomePage/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ import styles from './index.module.scss';

type Props = {
tab?: string;
currentApplicantCount: number;
applicantTotalCount: number;
eventStatus: Event;
faqItems: FAQ[];
};

function HomePage({
tab, currentApplicantCount, eventStatus, faqItems,
tab, applicantTotalCount, eventStatus, faqItems,
}: Props) {
const isChristmas = isChristmasTheme();

Expand Down Expand Up @@ -55,7 +55,7 @@ function HomePage({
{['ONGOING', 'HOT'].includes(eventStatus.status) && (
<div className={styles.counter}>
오늘까지&nbsp;
<Counter count={currentApplicantCount} />
<Counter count={applicantTotalCount} />
명이 지원했어요!
</div>
)}
Expand Down
7 changes: 4 additions & 3 deletions apps/web/src/lib/apis/event.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { EventStatus } from '@dnd-academy/core';
import { CurrentApplicantCount, EventStatus } from '@dnd-academy/core';

import { eventStatusData } from '../assets/data';
import { applicantCountData, eventStatusData } from '../assets/data';

// eslint-disable-next-line import/prefer-default-export
export const getEventStatus = () => eventStatusData as EventStatus;

export const getApplicantCount = () => applicantCountData as CurrentApplicantCount;
2 changes: 1 addition & 1 deletion apps/web/src/lib/assets/data/event_status.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"status": "UPCOMING",
"status": "ONGOING",
"applicationStartDateTime": "2024/11/18 00:00:00",
"applicationEndDateTime": "2024/12/15 23:59:59",
"applicantAcceptanceDateTime": "2024/12/25 00:00:00"
Expand Down
2 changes: 2 additions & 0 deletions apps/web/src/lib/assets/data/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import applicantCountData from './applicant-count.json';
import eventStatusData from './event_status.json';
import jobsData from './jobs.json';
import organizersData from './organizers.json';
Expand All @@ -6,6 +7,7 @@ import reviewsData from './reviews.json';
import totalCountStatusData from './total_count_status.json';

export {
applicantCountData,
eventStatusData,
jobsData,
organizersData,
Expand Down
15 changes: 15 additions & 0 deletions apps/web/tsconfig.scripts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"moduleResolution": "node",
"esModuleInterop": true,
"outDir": "./dist",
"rootDir": "./",
"strict": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["scripts/**/*"],
"exclude": ["node_modules"]
}
2 changes: 2 additions & 0 deletions packages/core/src/@types/count.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
export interface CurrentApplicantCount {
developer: number;
designer: number;
total: number;
lastUpdated: string;
}

export interface TotalCountStatus {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// vite.config.mts
import { resolve } from "path";
import { defineConfig } from "file:///Users/levit/Documents/dnd-academy-v2/packages/core/node_modules/vite/dist/node/index.js";
import dts from "file:///Users/levit/Documents/dnd-academy-v2/packages/core/node_modules/vite-plugin-dts/dist/index.mjs";
var __vite_injected_original_dirname = "/Users/levit/Documents/dnd-academy-v2/packages/core";
var vite_config_default = defineConfig({
plugins: [
dts({
include: ["./src"],
outDir: "dist",
insertTypesEntry: true
})
],
build: {
lib: {
entry: {
index: resolve(__vite_injected_original_dirname, "src/index.ts")
},
formats: ["es", "cjs"],
name: "@dnd-academy/core",
fileName: (format, entryName) => `${entryName}.${format === "es" ? "mjs" : "js"}`
}
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL2xldml0L0RvY3VtZW50cy9kbmQtYWNhZGVteS12Mi9wYWNrYWdlcy9jb3JlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvbGV2aXQvRG9jdW1lbnRzL2RuZC1hY2FkZW15LXYyL3BhY2thZ2VzL2NvcmUvdml0ZS5jb25maWcubXRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9sZXZpdC9Eb2N1bWVudHMvZG5kLWFjYWRlbXktdjIvcGFja2FnZXMvY29yZS92aXRlLmNvbmZpZy5tdHNcIjtpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IGR0cyBmcm9tICd2aXRlLXBsdWdpbi1kdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbXG4gICAgZHRzKHtcbiAgICAgIGluY2x1ZGU6IFsnLi9zcmMnXSxcbiAgICAgIG91dERpcjogJ2Rpc3QnLFxuICAgICAgaW5zZXJ0VHlwZXNFbnRyeTogdHJ1ZSxcbiAgICB9KSxcbiAgXSxcbiAgYnVpbGQ6IHtcbiAgICBsaWI6IHtcbiAgICAgIGVudHJ5OiB7XG4gICAgICAgIGluZGV4OiByZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9pbmRleC50cycpLFxuICAgICAgfSxcbiAgICAgIGZvcm1hdHM6IFsnZXMnLCAnY2pzJ10sXG4gICAgICBuYW1lOiAnQGRuZC1hY2FkZW15L2NvcmUnLFxuICAgICAgZmlsZU5hbWU6IChmb3JtYXQsIGVudHJ5TmFtZSkgPT4gYCR7ZW50cnlOYW1lfS4ke2Zvcm1hdCA9PT0gJ2VzJyA/ICdtanMnIDogJ2pzJ31gLFxuICAgIH0sXG4gIH0sXG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBNlUsU0FBUyxlQUFlO0FBRXJXLFNBQVMsb0JBQW9CO0FBQzdCLE9BQU8sU0FBUztBQUhoQixJQUFNLG1DQUFtQztBQUt6QyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTO0FBQUEsSUFDUCxJQUFJO0FBQUEsTUFDRixTQUFTLENBQUMsT0FBTztBQUFBLE1BQ2pCLFFBQVE7QUFBQSxNQUNSLGtCQUFrQjtBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxLQUFLO0FBQUEsTUFDSCxPQUFPO0FBQUEsUUFDTCxPQUFPLFFBQVEsa0NBQVcsY0FBYztBQUFBLE1BQzFDO0FBQUEsTUFDQSxTQUFTLENBQUMsTUFBTSxLQUFLO0FBQUEsTUFDckIsTUFBTTtBQUFBLE1BQ04sVUFBVSxDQUFDLFFBQVEsY0FBYyxHQUFHLFNBQVMsSUFBSSxXQUFXLE9BQU8sUUFBUSxJQUFJO0FBQUEsSUFDakY7QUFBQSxFQUNGO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// vite.config.mts
import { resolve } from "path";
import react from "file:///Users/levit/Documents/dnd-academy-v2/node_modules/@vitejs/plugin-react/dist/index.mjs";
import preserveDirectives from "file:///Users/levit/Documents/dnd-academy-v2/node_modules/rollup-preserve-directives/dist/es/index.mjs";
import { defineConfig } from "file:///Users/levit/Documents/dnd-academy-v2/node_modules/vite/dist/node/index.js";
import dts from "file:///Users/levit/Documents/dnd-academy-v2/node_modules/vite-plugin-dts/dist/index.mjs";
import svgr from "file:///Users/levit/Documents/dnd-academy-v2/node_modules/vite-plugin-svgr/dist/index.js";
var __vite_injected_original_dirname = "/Users/levit/Documents/dnd-academy-v2/packages/ui";
var vite_config_default = defineConfig({
plugins: [
react(),
dts({
include: ["./src"],
outDir: "dist",
insertTypesEntry: true
}),
svgr()
],
resolve: {
extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".scss"],
alias: {
"@": resolve(__vite_injected_original_dirname, "./src")
}
},
build: {
lib: {
entry: {
index: resolve(__vite_injected_original_dirname, "src/index.ts"),
server: resolve(__vite_injected_original_dirname, "src/server.ts"),
client: resolve(__vite_injected_original_dirname, "src/client.ts")
},
formats: ["es", "cjs"],
name: "@dnd-academy/ui",
fileName: (format, entryName) => `${entryName}.${format === "es" ? "mjs" : "js"}`
},
rollupOptions: {
plugins: [preserveDirectives()],
external: ["react", "react-dom"],
output: {
globals: {
react: "React",
"react-dom": "ReactDOM"
},
assetFileNames: (assetInfo) => {
if (!assetInfo.name) {
return "assets/[name].[ext]";
}
if (assetInfo.name === "style.css") {
return "style.css";
}
return assetInfo.name;
}
}
}
},
css: {
modules: {
localsConvention: "camelCaseOnly",
generateScopedName: "[name]__[local]___[hash:base64:5]"
},
preprocessorOptions: {
scss: {
additionalData: '@import "./src/styles/main.scss";'
}
}
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL2xldml0L0RvY3VtZW50cy9kbmQtYWNhZGVteS12Mi9wYWNrYWdlcy91aVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2xldml0L0RvY3VtZW50cy9kbmQtYWNhZGVteS12Mi9wYWNrYWdlcy91aS92aXRlLmNvbmZpZy5tdHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2xldml0L0RvY3VtZW50cy9kbmQtYWNhZGVteS12Mi9wYWNrYWdlcy91aS92aXRlLmNvbmZpZy5tdHNcIjsvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0JztcbmltcG9ydCBwcmVzZXJ2ZURpcmVjdGl2ZXMgZnJvbSAncm9sbHVwLXByZXNlcnZlLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgZHRzIGZyb20gJ3ZpdGUtcGx1Z2luLWR0cyc7XG5pbXBvcnQgc3ZnciBmcm9tICd2aXRlLXBsdWdpbi1zdmdyJztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW1xuICAgIHJlYWN0KCksXG4gICAgZHRzKHtcbiAgICAgIGluY2x1ZGU6IFsnLi9zcmMnXSxcbiAgICAgIG91dERpcjogJ2Rpc3QnLFxuICAgICAgaW5zZXJ0VHlwZXNFbnRyeTogdHJ1ZSxcbiAgICB9KSxcbiAgICBzdmdyKCksXG4gIF0sXG4gIHJlc29sdmU6IHtcbiAgICBleHRlbnNpb25zOiBbJy5tanMnLCAnLmpzJywgJy50cycsICcuanN4JywgJy50c3gnLCAnLmpzb24nLCAnLnNjc3MnXSxcbiAgICBhbGlhczoge1xuICAgICAgJ0AnOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjJyksXG4gICAgfSxcbiAgfSxcbiAgYnVpbGQ6IHtcbiAgICBsaWI6IHtcbiAgICAgIGVudHJ5OiB7XG4gICAgICAgIGluZGV4OiByZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9pbmRleC50cycpLFxuICAgICAgICBzZXJ2ZXI6IHJlc29sdmUoX19kaXJuYW1lLCAnc3JjL3NlcnZlci50cycpLFxuICAgICAgICBjbGllbnQ6IHJlc29sdmUoX19kaXJuYW1lLCAnc3JjL2NsaWVudC50cycpLFxuICAgICAgfSxcbiAgICAgIGZvcm1hdHM6IFsnZXMnLCAnY2pzJ10sXG4gICAgICBuYW1lOiAnQGRuZC1hY2FkZW15L3VpJyxcbiAgICAgIGZpbGVOYW1lOiAoZm9ybWF0LCBlbnRyeU5hbWUpID0+IGAke2VudHJ5TmFtZX0uJHtmb3JtYXQgPT09ICdlcycgPyAnbWpzJyA6ICdqcyd9YCxcbiAgICB9LFxuICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgIHBsdWdpbnM6IFtwcmVzZXJ2ZURpcmVjdGl2ZXMoKV0sXG4gICAgICBleHRlcm5hbDogWydyZWFjdCcsICdyZWFjdC1kb20nXSxcbiAgICAgIG91dHB1dDoge1xuICAgICAgICBnbG9iYWxzOiB7XG4gICAgICAgICAgcmVhY3Q6ICdSZWFjdCcsXG4gICAgICAgICAgJ3JlYWN0LWRvbSc6ICdSZWFjdERPTScsXG4gICAgICAgIH0sXG4gICAgICAgIGFzc2V0RmlsZU5hbWVzOiAoYXNzZXRJbmZvKSA9PiB7XG4gICAgICAgICAgaWYgKCFhc3NldEluZm8ubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuICdhc3NldHMvW25hbWVdLltleHRdJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzZXRJbmZvLm5hbWUgPT09ICdzdHlsZS5jc3MnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3N0eWxlLmNzcyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFzc2V0SW5mby5uYW1lO1xuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgIH0sXG4gIH0sXG4gIGNzczoge1xuICAgIG1vZHVsZXM6IHtcbiAgICAgIGxvY2Fsc0NvbnZlbnRpb246ICdjYW1lbENhc2VPbmx5JyxcbiAgICAgIGdlbmVyYXRlU2NvcGVkTmFtZTogJ1tuYW1lXV9fW2xvY2FsXV9fX1toYXNoOmJhc2U2NDo1XScsXG4gICAgfSxcbiAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICBzY3NzOiB7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiAnQGltcG9ydCBcIi4vc3JjL3N0eWxlcy9tYWluLnNjc3NcIjsnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxlQUFlO0FBRXhCLE9BQU8sV0FBVztBQUNsQixPQUFPLHdCQUF3QjtBQUMvQixTQUFTLG9CQUFvQjtBQUM3QixPQUFPLFNBQVM7QUFDaEIsT0FBTyxVQUFVO0FBUGpCLElBQU0sbUNBQW1DO0FBU3pDLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVM7QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLElBQUk7QUFBQSxNQUNGLFNBQVMsQ0FBQyxPQUFPO0FBQUEsTUFDakIsUUFBUTtBQUFBLE1BQ1Isa0JBQWtCO0FBQUEsSUFDcEIsQ0FBQztBQUFBLElBQ0QsS0FBSztBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLFlBQVksQ0FBQyxRQUFRLE9BQU8sT0FBTyxRQUFRLFFBQVEsU0FBUyxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLE1BQ0wsS0FBSyxRQUFRLGtDQUFXLE9BQU87QUFBQSxJQUNqQztBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLEtBQUs7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNMLE9BQU8sUUFBUSxrQ0FBVyxjQUFjO0FBQUEsUUFDeEMsUUFBUSxRQUFRLGtDQUFXLGVBQWU7QUFBQSxRQUMxQyxRQUFRLFFBQVEsa0NBQVcsZUFBZTtBQUFBLE1BQzVDO0FBQUEsTUFDQSxTQUFTLENBQUMsTUFBTSxLQUFLO0FBQUEsTUFDckIsTUFBTTtBQUFBLE1BQ04sVUFBVSxDQUFDLFFBQVEsY0FBYyxHQUFHLFNBQVMsSUFBSSxXQUFXLE9BQU8sUUFBUSxJQUFJO0FBQUEsSUFDakY7QUFBQSxJQUNBLGVBQWU7QUFBQSxNQUNiLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztBQUFBLE1BQzlCLFVBQVUsQ0FBQyxTQUFTLFdBQVc7QUFBQSxNQUMvQixRQUFRO0FBQUEsUUFDTixTQUFTO0FBQUEsVUFDUCxPQUFPO0FBQUEsVUFDUCxhQUFhO0FBQUEsUUFDZjtBQUFBLFFBQ0EsZ0JBQWdCLENBQUMsY0FBYztBQUM3QixjQUFJLENBQUMsVUFBVSxNQUFNO0FBQ25CLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksVUFBVSxTQUFTLGFBQWE7QUFDbEMsbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sVUFBVTtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLElBRUY7QUFBQSxFQUNGO0FBQUEsRUFDQSxLQUFLO0FBQUEsSUFDSCxTQUFTO0FBQUEsTUFDUCxrQkFBa0I7QUFBQSxNQUNsQixvQkFBb0I7QUFBQSxJQUN0QjtBQUFBLElBQ0EscUJBQXFCO0FBQUEsTUFDbkIsTUFBTTtBQUFBLFFBQ0osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
Loading

0 comments on commit 9776e60

Please sign in to comment.