Skip to content

Commit e7acb81

Browse files
committed
feat: storybook app에 test sample code fetching 기능 추가
1 parent 0478d9b commit e7acb81

File tree

6 files changed

+5023
-7
lines changed

6 files changed

+5023
-7
lines changed

apps/storybook/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"build-storybook": "storybook build"
1111
},
1212
"dependencies": {
13+
"dotenv": "^16.4.7",
1314
"notion-to-jsx": "workspace:*",
1415
"notion-to-utils": "workspace:*",
1516
"react": "^18.3.1",
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
var __generator = (this && this.__generator) || function (thisArg, body) {
12+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14+
function verb(n) { return function (v) { return step([n, v]); }; }
15+
function step(op) {
16+
if (f) throw new TypeError("Generator is already executing.");
17+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
18+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19+
if (y = 0, t) op = [op[0] & 2, t.value];
20+
switch (op[0]) {
21+
case 0: case 1: t = op; break;
22+
case 4: _.label++; return { value: op[1], done: false };
23+
case 5: _.label++; y = op[1]; op = [0]; continue;
24+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
25+
default:
26+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30+
if (t[2]) _.ops.pop();
31+
_.trys.pop(); continue;
32+
}
33+
op = body.call(thisArg, _);
34+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36+
}
37+
};
38+
Object.defineProperty(exports, "__esModule", { value: true });
39+
var fs_1 = require("fs");
40+
var path_1 = require("path");
41+
var notion_to_utils_1 = require("notion-to-utils");
42+
var dotenv_1 = require("dotenv");
43+
// 환경 변수 로드
44+
dotenv_1.default.config();
45+
// 페이지 ID
46+
var PAGE_ID = '1239c6bf-2b17-8076-a838-d17ca1c89783';
47+
function fetchAndSaveBlocks() {
48+
return __awaiter(this, void 0, void 0, function () {
49+
var apiKey, client, blocks, outputPath, error_1;
50+
return __generator(this, function (_a) {
51+
switch (_a.label) {
52+
case 0:
53+
_a.trys.push([0, 2, , 3]);
54+
apiKey = process.env.NOTION_API_KEY;
55+
if (!apiKey) {
56+
console.error('NOTION_API_KEY 환경 변수가 설정되지 않았습니다.');
57+
process.exit(1);
58+
}
59+
console.log('Notion API에서 블록 데이터를 가져오는 중...');
60+
client = new notion_to_utils_1.Client({ auth: apiKey });
61+
return [4 /*yield*/, client.getPageBlocks(PAGE_ID)];
62+
case 1:
63+
blocks = _a.sent();
64+
outputPath = (0, path_1.join)(__dirname, '../src/data/notionBlocks.json');
65+
(0, fs_1.writeFileSync)(outputPath, JSON.stringify(blocks, null, 2), 'utf8');
66+
console.log("\uBE14\uB85D \uB370\uC774\uD130\uAC00 \uC131\uACF5\uC801\uC73C\uB85C \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4: ".concat(outputPath));
67+
console.log("\uCD1D ".concat(blocks.length, "\uAC1C\uC758 \uBE14\uB85D\uC744 \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4."));
68+
return [3 /*break*/, 3];
69+
case 2:
70+
error_1 = _a.sent();
71+
console.error('블록 데이터 가져오기 실패:', error_1);
72+
process.exit(1);
73+
return [3 /*break*/, 3];
74+
case 3: return [2 /*return*/];
75+
}
76+
});
77+
});
78+
}
79+
// 스크립트 실행
80+
fetchAndSaveBlocks();
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { writeFileSync, readFileSync } from 'fs';
2+
import { join, resolve, dirname } from 'path';
3+
import { Client } from 'notion-to-utils';
4+
import dotenv from 'dotenv';
5+
import { fileURLToPath } from 'url';
6+
7+
// ES 모듈에서 __dirname 대체
8+
const __filename = fileURLToPath(import.meta.url);
9+
const __dirname = dirname(__filename);
10+
11+
// 환경 변수 로드
12+
dotenv.config({ path: resolve(__dirname, '../.env.local') });
13+
14+
// 페이지 ID
15+
const PAGE_ID = '1239c6bf-2b17-8076-a838-d17ca1c89783';
16+
17+
// ? using this script : npx tsx scripts/fetchNotionBlocks.ts
18+
async function fetchAndSaveBlocks() {
19+
try {
20+
// Notion API 키 확인
21+
let apiKey = process.env.NOTION_API_KEY;
22+
23+
// 환경 변수에서 API 키를 가져오지 못한 경우 .env.local 파일에서 직접 읽기 시도
24+
if (!apiKey) {
25+
try {
26+
const envPath = resolve(__dirname, '../.env.local');
27+
console.log(
28+
`환경 변수에서 API 키를 찾을 수 없어 ${envPath} 파일에서 직접 읽습니다.`
29+
);
30+
const envContent = readFileSync(envPath, 'utf8');
31+
const match = envContent.match(/NOTION_API_KEY=(.+)/);
32+
if (match && match[1]) {
33+
apiKey = match[1];
34+
console.log('API 키를 파일에서 성공적으로 읽었습니다.');
35+
}
36+
} catch (err) {
37+
console.error('.env.local 파일 읽기 실패:', err);
38+
}
39+
}
40+
41+
if (!apiKey) {
42+
console.error(
43+
'NOTION_API_KEY를 찾을 수 없습니다. .env.local 파일에 NOTION_API_KEY=your_key 형식으로 설정해주세요.'
44+
);
45+
process.exit(1);
46+
}
47+
48+
console.log('Notion API에서 블록 데이터를 가져오는 중...');
49+
50+
// Notion 클라이언트 생성
51+
const client = new Client({ auth: apiKey });
52+
53+
// 페이지 블록 가져오기
54+
const blocks = await client.getPageBlocks(PAGE_ID);
55+
56+
// JSON 파일로 저장
57+
const outputPath = join(__dirname, '../src/data/notionBlocks.json');
58+
console.log(`저장 경로: ${outputPath}`);
59+
writeFileSync(outputPath, JSON.stringify(blocks, null, 2), 'utf8');
60+
61+
console.log(`블록 데이터가 성공적으로 저장되었습니다: ${outputPath}`);
62+
console.log(`총 ${blocks.length}개의 블록을 가져왔습니다.`);
63+
} catch (error) {
64+
console.error('블록 데이터 가져오기 실패:', error);
65+
process.exit(1);
66+
}
67+
}
68+
69+
// 스크립트 실행
70+
fetchAndSaveBlocks();

0 commit comments

Comments
 (0)