@haustle/notion-orm 0.0.37 → 0.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/build/src/BuildCall.d.ts +15 -2
- package/build/src/BuildCall.d.ts.map +1 -1
- package/build/src/BuildCall.js +35 -2
- package/build/src/BuildCall.js.map +1 -1
- package/build/src/DatabaseActions.d.ts +3 -4
- package/build/src/DatabaseActions.d.ts.map +1 -1
- package/build/src/DatabaseActions.js +7 -2
- package/build/src/DatabaseActions.js.map +1 -1
- package/build/src/GenerateTypes.d.ts +0 -3
- package/build/src/GenerateTypes.d.ts.map +1 -1
- package/build/src/GenerateTypes.js +49 -58
- package/build/src/GenerateTypes.js.map +1 -1
- package/build/src/cli.js +2 -4
- package/build/src/cli.js.map +1 -1
- package/build/src/index.d.ts +12 -0
- package/build/src/index.d.ts.map +1 -0
- package/build/src/{NotionConfig.js → index.js} +21 -15
- package/build/src/index.js.map +1 -0
- package/build/src/queryTypes.d.ts +22 -11
- package/build/src/queryTypes.d.ts.map +1 -1
- package/build/src/queryTypes.js +0 -6
- package/build/src/queryTypes.js.map +1 -1
- package/package.json +3 -5
- package/build/databases/5f4bf76a-1e3f-48d6-84d2-506ea2690d64.js +0 -28
- package/build/databases/5f4bf76a-1e3f-48d6-84d2-506ea2690d64.ts +0 -34
- package/build/databases/a52239e4-839d-4a3a-8f48-75376cfbfb02.js +0 -24
- package/build/databases/a52239e4-839d-4a3a-8f48-75376cfbfb02.ts +0 -30
- package/build/databases/notion.js +0 -2
- package/build/databases/notion.ts +0 -2
- package/build/src/NotionConfig.d.ts +0 -9
- package/build/src/NotionConfig.d.ts.map +0 -1
- package/build/src/NotionConfig.js.map +0 -1
- package/src/BuildCall.ts +0 -85
- package/src/DatabaseActions.ts +0 -134
- package/src/GenerateTypes.ts +0 -424
- package/src/NotionConfig.ts +0 -132
- package/src/cli.ts +0 -43
- package/src/queryTypes.ts +0 -160
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Responsible for consuming notion.config.js
|
|
4
|
+
*/
|
|
2
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
6
|
if (k2 === undefined) k2 = k;
|
|
4
7
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -41,10 +44,9 @@ const GenerateTypes_1 = require("./GenerateTypes");
|
|
|
41
44
|
const ts = __importStar(require("typescript"));
|
|
42
45
|
const fs_1 = __importDefault(require("fs"));
|
|
43
46
|
const path_1 = __importDefault(require("path"));
|
|
44
|
-
require("dotenv").config();
|
|
45
47
|
exports.DATABASES_DIR = path_1.default.join(__dirname, "../../build", "databases");
|
|
46
|
-
const createDatabaseTypes = (
|
|
47
|
-
const { auth, databaseIds } =
|
|
48
|
+
const createDatabaseTypes = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
const { auth, databaseIds } = args;
|
|
48
50
|
// Making sure the user is passing valid arguments
|
|
49
51
|
if (!auth) {
|
|
50
52
|
console.error("Please pass a valid Notion Integration Key");
|
|
@@ -74,7 +76,6 @@ const createDatabaseTypes = (notionInfo) => __awaiter(void 0, void 0, void 0, fu
|
|
|
74
76
|
databaseNames.push(databaseName);
|
|
75
77
|
databaseClassExportStatements.push(databaseExportStatement({
|
|
76
78
|
databaseClassName,
|
|
77
|
-
databaseId,
|
|
78
79
|
}));
|
|
79
80
|
}
|
|
80
81
|
catch (e) {
|
|
@@ -83,31 +84,36 @@ const createDatabaseTypes = (notionInfo) => __awaiter(void 0, void 0, void 0, fu
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
// Create a file that exports all databases
|
|
86
|
-
|
|
87
|
+
createDatabaseBarrelFile({
|
|
88
|
+
databaseClassExportStatements,
|
|
89
|
+
});
|
|
87
90
|
return { databaseNames };
|
|
88
91
|
});
|
|
89
92
|
exports.createDatabaseTypes = createDatabaseTypes;
|
|
90
|
-
// Create the
|
|
91
|
-
|
|
93
|
+
// Create the export statement for database file file
|
|
94
|
+
// export { databaseName } from "./databaseName"
|
|
95
|
+
function databaseExportStatement(args) {
|
|
96
|
+
const { databaseClassName } = args;
|
|
92
97
|
return ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([
|
|
93
|
-
ts.factory.createExportSpecifier(false, undefined, ts.factory.createIdentifier(
|
|
94
|
-
]), ts.factory.createStringLiteral(`./${
|
|
98
|
+
ts.factory.createExportSpecifier(false, undefined, ts.factory.createIdentifier(databaseClassName)),
|
|
99
|
+
]), ts.factory.createStringLiteral(`./${databaseClassName}`), undefined);
|
|
95
100
|
}
|
|
96
101
|
// Creates file that import all generated notion database Ids
|
|
97
|
-
function
|
|
98
|
-
const
|
|
102
|
+
function createDatabaseBarrelFile(args) {
|
|
103
|
+
const { databaseClassExportStatements } = args;
|
|
104
|
+
const nodes = ts.factory.createNodeArray(databaseClassExportStatements);
|
|
99
105
|
const sourceFile = ts.createSourceFile("placeholder.ts", "", ts.ScriptTarget.ESNext, true, ts.ScriptKind.TS);
|
|
100
106
|
const printer = ts.createPrinter();
|
|
101
107
|
const typescriptCodeToString = printer.printList(ts.ListFormat.MultiLine, nodes, sourceFile);
|
|
102
108
|
const transpileToJavaScript = ts.transpile(typescriptCodeToString, {
|
|
103
109
|
module: ts.ModuleKind.None,
|
|
104
|
-
target: ts.ScriptTarget.
|
|
110
|
+
target: ts.ScriptTarget.ES2015,
|
|
105
111
|
});
|
|
106
112
|
if (!fs_1.default.existsSync(exports.DATABASES_DIR)) {
|
|
107
113
|
fs_1.default.mkdirSync(exports.DATABASES_DIR);
|
|
108
114
|
}
|
|
109
115
|
// Create TypeScript and JavaScript file
|
|
110
|
-
fs_1.default.writeFileSync(path_1.default.resolve(exports.DATABASES_DIR, "
|
|
111
|
-
fs_1.default.writeFileSync(path_1.default.resolve(exports.DATABASES_DIR, "
|
|
116
|
+
fs_1.default.writeFileSync(path_1.default.resolve(exports.DATABASES_DIR, "index.ts"), typescriptCodeToString);
|
|
117
|
+
fs_1.default.writeFileSync(path_1.default.resolve(exports.DATABASES_DIR, "index.js"), transpileToJavaScript);
|
|
112
118
|
}
|
|
113
|
-
//# sourceMappingURL=
|
|
119
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Column types' for all query options
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
import { PageObjectResponse } from "@notionhq/client/build/src/api-endpoints";
|
|
5
|
+
type columnDiscriminatedUnionTypes = PageObjectResponse["properties"];
|
|
6
|
+
export type NotionColumnTypes = columnDiscriminatedUnionTypes[keyof columnDiscriminatedUnionTypes]["type"];
|
|
7
|
+
export type SupportedNotionColumnTypes = Exclude<NotionColumnTypes, "formula" | "files" | "people" | "relation" | "rollup" | "created_by" | "last_edited_by" | "created_time" | "last_edited_time">;
|
|
5
8
|
type TextPropertyFilters = {
|
|
6
9
|
equals: string;
|
|
7
10
|
does_not_equal: string;
|
|
@@ -38,11 +41,13 @@ type MultiSelectPropertyFilters<T> = {
|
|
|
38
41
|
is_empty: true;
|
|
39
42
|
is_not_empty: true;
|
|
40
43
|
};
|
|
44
|
+
type StatusPropertyFilters<T> = SelectPropertyFilters<T>;
|
|
45
|
+
type ISO8601Date = string;
|
|
41
46
|
type DatePropertyFilters = {
|
|
42
|
-
equals:
|
|
43
|
-
before:
|
|
44
|
-
after:
|
|
45
|
-
on_or_before:
|
|
47
|
+
equals: ISO8601Date;
|
|
48
|
+
before: ISO8601Date;
|
|
49
|
+
after: ISO8601Date;
|
|
50
|
+
on_or_before: ISO8601Date;
|
|
46
51
|
is_empty: true;
|
|
47
52
|
is_not_empty: true;
|
|
48
53
|
on_or_after: string;
|
|
@@ -55,26 +60,32 @@ type DatePropertyFilters = {
|
|
|
55
60
|
next_year: {};
|
|
56
61
|
};
|
|
57
62
|
export type FilterOptions<T = []> = {
|
|
58
|
-
|
|
63
|
+
rich_text: TextPropertyFilters;
|
|
59
64
|
title: TextPropertyFilters;
|
|
60
65
|
number: NumberPropertyFilters;
|
|
61
66
|
checkbox: CheckBoxPropertyFilters;
|
|
62
67
|
select: SelectPropertyFilters<T>;
|
|
63
68
|
multi_select: MultiSelectPropertyFilters<T>;
|
|
64
|
-
url:
|
|
69
|
+
url: TextPropertyFilters;
|
|
65
70
|
date: DatePropertyFilters;
|
|
71
|
+
status: StatusPropertyFilters<T>;
|
|
72
|
+
email: TextPropertyFilters;
|
|
73
|
+
phone_number: TextPropertyFilters;
|
|
66
74
|
};
|
|
67
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Types to build query object user types out
|
|
77
|
+
*/
|
|
78
|
+
type ColumnNameToNotionColumnType<T> = Record<keyof T, SupportedNotionColumnTypes>;
|
|
68
79
|
export type SingleFilter<Y extends Record<string, any>, T extends ColumnNameToNotionColumnType<Y>> = {
|
|
69
80
|
[Property in keyof Y]?: Partial<FilterOptions<Y[Property]>[T[Property]]>;
|
|
70
81
|
};
|
|
71
|
-
export type CompoundFilters<Y extends Record<string, any>, T extends Record<keyof Y,
|
|
82
|
+
export type CompoundFilters<Y extends Record<string, any>, T extends Record<keyof Y, SupportedNotionColumnTypes>> = {
|
|
72
83
|
and: Array<SingleFilter<Y, T> | CompoundFilters<Y, T>>;
|
|
73
84
|
} | {
|
|
74
85
|
or: Array<SingleFilter<Y, T> | CompoundFilters<Y, T>>;
|
|
75
86
|
};
|
|
76
|
-
export type QueryFilter<Y extends Record<string, any>, T extends Record<keyof Y,
|
|
77
|
-
export type Query<Y extends Record<string, any>, T extends Record<keyof Y,
|
|
87
|
+
export type QueryFilter<Y extends Record<string, any>, T extends Record<keyof Y, SupportedNotionColumnTypes>> = SingleFilter<Y, T> | CompoundFilters<Y, T>;
|
|
88
|
+
export type Query<Y extends Record<string, any>, T extends Record<keyof Y, SupportedNotionColumnTypes>> = {
|
|
78
89
|
filter?: QueryFilter<Y, T>;
|
|
79
90
|
sort?: [];
|
|
80
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryTypes.d.ts","sourceRoot":"","sources":["../../src/queryTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"queryTypes.d.ts","sourceRoot":"","sources":["../../src/queryTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,KAAK,6BAA6B,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAC5B,6BAA6B,CAAC,MAAM,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAG5E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAC/C,iBAAiB,EACf,SAAS,GACT,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,cAAc,GACd,kBAAkB,CACpB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;CACnB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;CACnB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACxB,CAAC;AAGF,KAAK,qBAAqB,CAAC,CAAC,IAAI;IAC/B,MAAM,EAAE,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/D,cAAc,EAAE,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACvE,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;CACnB,CAAC;AAGF,KAAK,0BAA0B,CAAC,CAAC,IAAI;IACpC,QAAQ,EAAE,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACjE,gBAAgB,EAAE,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzE,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;CACnB,CAAC;AAEF,KAAK,qBAAqB,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEzD,KAAK,WAAW,GAAG,MAAM,CAAC;AAC1B,KAAK,mBAAmB,GAAG;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,EAAE,CAAC;IACd,UAAU,EAAE,EAAE,CAAC;IACf,SAAS,EAAE,EAAE,CAAC;IACd,SAAS,EAAE,EAAE,CAAC;IACd,SAAS,EAAE,EAAE,CAAC;IACd,UAAU,EAAE,EAAE,CAAC;IACf,SAAS,EAAE,EAAE,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,EAAE,IAAI;IACnC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAC5C,GAAG,EAAE,mBAAmB,CAAC;IACzB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACjC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,YAAY,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF;;GAEG;AAEH,KAAK,4BAA4B,CAAC,CAAC,IAAI,MAAM,CAC5C,MAAM,CAAC,EACP,0BAA0B,CAC1B,CAAC;AAIF,MAAM,MAAM,YAAY,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,4BAA4B,CAAC,CAAC,CAAC,IACtC;KAEF,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,eAAe,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC,IAEnD;IAAE,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1D;IAAE,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,WAAW,CACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC,IAClD,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,KAAK,CAChB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC,IAClD;IACH,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,MAAM,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,WAAW,CAAC;CACtD,CAAC;AAEF;;;GAGG;AAEH,KAAK,sBAAsB,GAAG;KAC5B,IAAI,IAAI,MAAM,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;CAC5D,CAAC;AACF,MAAM,WAAW,eAAgB,SAAQ,sBAAsB;IAC9D,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GACtB,eAAe,GACf,YAAY,GACZ,WAAW,GACX,SAAS,CAAC;AACb,KAAK,YAAY,GAAG;IACnB,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC1B,CAAC;AAEF,KAAK,WAAW,GAAG;IAClB,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CACzB,CAAC"}
|
package/build/src/queryTypes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryTypes.js","sourceRoot":"","sources":["../../src/queryTypes.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,gCAAgC
|
|
1
|
+
{"version":3,"file":"queryTypes.js","sourceRoot":"","sources":["../../src/queryTypes.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,gCAAgC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haustle/notion-orm",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.41",
|
|
4
4
|
"description": "tool to bring notion databases schemas/types to typescript",
|
|
5
|
-
"main": "build/
|
|
5
|
+
"main": "build/databases/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"notion": "build/src/cli.js"
|
|
8
8
|
},
|
|
@@ -19,8 +19,6 @@
|
|
|
19
19
|
"typescript": "^4.8.4"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@notionhq/client": "^2.2.2"
|
|
23
|
-
"dotenv": "^16.0.3",
|
|
24
|
-
"path": "^0.12.7"
|
|
22
|
+
"@notionhq/client": "^2.2.2"
|
|
25
23
|
}
|
|
26
24
|
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.newGradApps = void 0;
|
|
4
|
-
const DatabaseActions_1 = require("../src/DatabaseActions");
|
|
5
|
-
const databaseId = "5f4bf76a-1e3f-48d6-84d2-506ea2690d64";
|
|
6
|
-
const propMap = {
|
|
7
|
-
"role": {
|
|
8
|
-
columnName: "Role",
|
|
9
|
-
type: "select"
|
|
10
|
-
},
|
|
11
|
-
"deadline": {
|
|
12
|
-
columnName: "Deadline",
|
|
13
|
-
type: "date"
|
|
14
|
-
},
|
|
15
|
-
"process": {
|
|
16
|
-
columnName: "Process",
|
|
17
|
-
type: "select"
|
|
18
|
-
},
|
|
19
|
-
"complete": {
|
|
20
|
-
columnName: "Complete",
|
|
21
|
-
type: "checkbox"
|
|
22
|
-
},
|
|
23
|
-
"company": {
|
|
24
|
-
columnName: "Company",
|
|
25
|
-
type: "title"
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
exports.newGradApps = new DatabaseActions_1.DatabaseActions(databaseId, propMap);
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { DatabaseActions } from "../src/DatabaseActions";
|
|
2
|
-
const databaseId = "5f4bf76a-1e3f-48d6-84d2-506ea2690d64";
|
|
3
|
-
type DatabaseSchemaType = {
|
|
4
|
-
role?: "SWE Intern" | "New Grad" | "SWE Co-op" | "Software Engineer" | (string & {});
|
|
5
|
-
deadline?: Date;
|
|
6
|
-
process?: "Applied" | "OA" | "Phone Interview" | "TH Project" | "Offer" | "Accepted" | (string & {});
|
|
7
|
-
company: string;
|
|
8
|
-
};
|
|
9
|
-
const propMap = {
|
|
10
|
-
"role": {
|
|
11
|
-
columnName: "Role",
|
|
12
|
-
type: "select"
|
|
13
|
-
},
|
|
14
|
-
"deadline": {
|
|
15
|
-
columnName: "Deadline",
|
|
16
|
-
type: "date"
|
|
17
|
-
},
|
|
18
|
-
"process": {
|
|
19
|
-
columnName: "Process",
|
|
20
|
-
type: "select"
|
|
21
|
-
},
|
|
22
|
-
"complete": {
|
|
23
|
-
columnName: "Complete",
|
|
24
|
-
type: "checkbox"
|
|
25
|
-
},
|
|
26
|
-
"company": {
|
|
27
|
-
columnName: "Company",
|
|
28
|
-
type: "title"
|
|
29
|
-
}
|
|
30
|
-
} as const
|
|
31
|
-
type ColumnNameToColumnType = {
|
|
32
|
-
[Property in keyof typeof propMap]: (typeof propMap)[Property]["type"];
|
|
33
|
-
};
|
|
34
|
-
export const newGradApps = new DatabaseActions<DatabaseSchemaType, ColumnNameToColumnType>(databaseId, propMap);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dimitriSFightingVideo = void 0;
|
|
4
|
-
const DatabaseActions_1 = require("../src/DatabaseActions");
|
|
5
|
-
const databaseId = "a52239e4-839d-4a3a-8f48-75376cfbfb02";
|
|
6
|
-
const propMap = {
|
|
7
|
-
"character": {
|
|
8
|
-
columnName: "Character",
|
|
9
|
-
type: "multi_select"
|
|
10
|
-
},
|
|
11
|
-
"game": {
|
|
12
|
-
columnName: "Game",
|
|
13
|
-
type: "select"
|
|
14
|
-
},
|
|
15
|
-
"link": {
|
|
16
|
-
columnName: "Link",
|
|
17
|
-
type: "url"
|
|
18
|
-
},
|
|
19
|
-
"combo": {
|
|
20
|
-
columnName: "Combo",
|
|
21
|
-
type: "title"
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
exports.dimitriSFightingVideo = new DatabaseActions_1.DatabaseActions(databaseId, propMap);
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { DatabaseActions } from "../src/DatabaseActions";
|
|
2
|
-
const databaseId = "a52239e4-839d-4a3a-8f48-75376cfbfb02";
|
|
3
|
-
type DatabaseSchemaType = {
|
|
4
|
-
character?: ("fox" | "kirby" | "falcon" | "android 21" | "Joker" | "Kid buu" | (string & {}))[];
|
|
5
|
-
game?: "smash" | "dragon ball" | (string & {});
|
|
6
|
-
link?: string;
|
|
7
|
-
combo: string;
|
|
8
|
-
};
|
|
9
|
-
const propMap = {
|
|
10
|
-
"character": {
|
|
11
|
-
columnName: "Character",
|
|
12
|
-
type: "multi_select"
|
|
13
|
-
},
|
|
14
|
-
"game": {
|
|
15
|
-
columnName: "Game",
|
|
16
|
-
type: "select"
|
|
17
|
-
},
|
|
18
|
-
"link": {
|
|
19
|
-
columnName: "Link",
|
|
20
|
-
type: "url"
|
|
21
|
-
},
|
|
22
|
-
"combo": {
|
|
23
|
-
columnName: "Combo",
|
|
24
|
-
type: "title"
|
|
25
|
-
}
|
|
26
|
-
} as const
|
|
27
|
-
type ColumnNameToColumnType = {
|
|
28
|
-
[Property in keyof typeof propMap]: (typeof propMap)[Property]["type"];
|
|
29
|
-
};
|
|
30
|
-
export const dimitriSFightingVideo = new DatabaseActions<DatabaseSchemaType, ColumnNameToColumnType>(databaseId, propMap);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const DATABASES_DIR: string;
|
|
2
|
-
export type NotionConfigType = {
|
|
3
|
-
auth: string;
|
|
4
|
-
databaseIds: string[];
|
|
5
|
-
};
|
|
6
|
-
export declare const createDatabaseTypes: (notionInfo: NotionConfigType) => Promise<{
|
|
7
|
-
databaseNames: string[];
|
|
8
|
-
}>;
|
|
9
|
-
//# sourceMappingURL=NotionConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NotionConfig.d.ts","sourceRoot":"","sources":["../../src/NotionConfig.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,QAAmD,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAOF,eAAO,MAAM,mBAAmB,eAAsB,gBAAgB;;EAwDrE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NotionConfig.js","sourceRoot":"","sources":["../../src/NotionConfig.ts"],"names":[],"mappings":"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"}
|
package/src/BuildCall.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { PropertyType } from "./GenerateTypes";
|
|
2
|
-
|
|
3
|
-
export function getCall(args: {
|
|
4
|
-
type: PropertyType;
|
|
5
|
-
value: string | number | boolean;
|
|
6
|
-
}) {
|
|
7
|
-
const { type, value } = args;
|
|
8
|
-
console.log(type, value, typeof value);
|
|
9
|
-
if (type === "select" && typeof value === "string") {
|
|
10
|
-
return selectCall({ value });
|
|
11
|
-
} else if (type === "multi_select" && Array.isArray(value)) {
|
|
12
|
-
return multiSelectCall({ value });
|
|
13
|
-
} else if (type === "number" && typeof value === "number") {
|
|
14
|
-
return numberCall({ value });
|
|
15
|
-
} else if (type === "url" && typeof value === "string") {
|
|
16
|
-
return urlCall({ url: value });
|
|
17
|
-
} else if (type === "checkbox" && typeof value === "boolean") {
|
|
18
|
-
return checkboxCall({ checked: value });
|
|
19
|
-
} else if (type === "title" && typeof value === "string") {
|
|
20
|
-
return titleCall({ title: value });
|
|
21
|
-
} else if (type === "text" && typeof value === "string") {
|
|
22
|
-
return textCall({ text: value });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/*
|
|
27
|
-
======================================================
|
|
28
|
-
GENERATE OBJECT BASED ON TYPE
|
|
29
|
-
======================================================
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
const selectCall = (args: { value: string }) => {
|
|
33
|
-
const { value } = args;
|
|
34
|
-
const select = {
|
|
35
|
-
name: value,
|
|
36
|
-
};
|
|
37
|
-
return { select };
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const multiSelectCall = (args: { value: Array<string> }) => {
|
|
41
|
-
const { value } = args;
|
|
42
|
-
const multi_select = value.map((option) => ({ name: option }));
|
|
43
|
-
return { multi_select };
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const textCall = (args: { text: string }) => {
|
|
47
|
-
const { text } = args;
|
|
48
|
-
const rich_text = [
|
|
49
|
-
{
|
|
50
|
-
text: {
|
|
51
|
-
content: text,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
return { rich_text };
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const titleCall = (args: { title: string }) => {
|
|
60
|
-
const { title } = args;
|
|
61
|
-
const titleObject = [
|
|
62
|
-
{
|
|
63
|
-
text: {
|
|
64
|
-
content: title,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
];
|
|
68
|
-
|
|
69
|
-
return { title: titleObject };
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const numberCall = (args: { value: number }) => {
|
|
73
|
-
const { value: number } = args;
|
|
74
|
-
return { number };
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const urlCall = (args: { url: string }) => {
|
|
78
|
-
const { url } = args;
|
|
79
|
-
return { url };
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const checkboxCall = (args: { checked: boolean }) => {
|
|
83
|
-
const { checked: checkbox } = args;
|
|
84
|
-
return { checkbox };
|
|
85
|
-
};
|
package/src/DatabaseActions.ts
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CreatePageParameters,
|
|
3
|
-
QueryDatabaseParameters,
|
|
4
|
-
} from "@notionhq/client/build/src/api-endpoints";
|
|
5
|
-
import { Client } from "@notionhq/client";
|
|
6
|
-
import { getCall } from "./BuildCall";
|
|
7
|
-
import { PropertyType } from "./GenerateTypes";
|
|
8
|
-
import {
|
|
9
|
-
apiFilterType,
|
|
10
|
-
apiSingleFilter,
|
|
11
|
-
CompoundFilters,
|
|
12
|
-
FilterOptionNames,
|
|
13
|
-
Query,
|
|
14
|
-
QueryFilter,
|
|
15
|
-
SingleFilter,
|
|
16
|
-
} from "./queryTypes";
|
|
17
|
-
require("dotenv").config();
|
|
18
|
-
|
|
19
|
-
export type propNameToColumnNameType = Record<
|
|
20
|
-
string,
|
|
21
|
-
{ columnName: string; type: PropertyType }
|
|
22
|
-
>;
|
|
23
|
-
|
|
24
|
-
export class DatabaseActions<
|
|
25
|
-
DatabaseSchemaType extends Record<string, any>,
|
|
26
|
-
ColumnNameToColumnType extends Record<
|
|
27
|
-
keyof DatabaseSchemaType,
|
|
28
|
-
FilterOptionNames
|
|
29
|
-
>
|
|
30
|
-
> {
|
|
31
|
-
private NotionClient: Client = new Client({
|
|
32
|
-
auth: process.env.NOTION_KEY,
|
|
33
|
-
});
|
|
34
|
-
private databaseId: string;
|
|
35
|
-
private propNameToColumnName: propNameToColumnNameType;
|
|
36
|
-
private columnNames: string[];
|
|
37
|
-
|
|
38
|
-
constructor(
|
|
39
|
-
datbaseId: string,
|
|
40
|
-
propNameToColumnName: propNameToColumnNameType
|
|
41
|
-
) {
|
|
42
|
-
this.databaseId = datbaseId;
|
|
43
|
-
this.propNameToColumnName = propNameToColumnName;
|
|
44
|
-
this.columnNames = Object.keys(propNameToColumnName);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Add page to a database
|
|
48
|
-
async add(pageObject: DatabaseSchemaType) {
|
|
49
|
-
const callBody: CreatePageParameters = {
|
|
50
|
-
parent: {
|
|
51
|
-
database_id: this.databaseId,
|
|
52
|
-
},
|
|
53
|
-
properties: {},
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const columnTypePropNames = Object.keys(pageObject);
|
|
57
|
-
columnTypePropNames.forEach((propName) => {
|
|
58
|
-
const { type, columnName } = this.propNameToColumnName[propName];
|
|
59
|
-
const columnObject = getCall({
|
|
60
|
-
type,
|
|
61
|
-
value: pageObject[propName],
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
callBody.properties[columnName] = columnObject!;
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// console.log(JSON.stringify(callBody, null, 4));
|
|
68
|
-
await this.NotionClient.pages.create(callBody);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Look for page inside the database
|
|
72
|
-
async query(query: Query<DatabaseSchemaType, ColumnNameToColumnType>) {
|
|
73
|
-
const queryCall: QueryDatabaseParameters = {
|
|
74
|
-
database_id: this.databaseId,
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const filters = query.filter
|
|
78
|
-
? this.recursivelyBuildFilter(query.filter)
|
|
79
|
-
: undefined;
|
|
80
|
-
if (filters) {
|
|
81
|
-
// @ts-ignore errors vs notion api types
|
|
82
|
-
queryCall["filter"] = filters;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
console.log(JSON.stringify(queryCall, null, 4));
|
|
86
|
-
|
|
87
|
-
const sort = query.sort;
|
|
88
|
-
|
|
89
|
-
const apiQuery = await this.NotionClient.databases.query(queryCall);
|
|
90
|
-
console.log(apiQuery);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
private recursivelyBuildFilter(
|
|
94
|
-
queryFilter: QueryFilter<DatabaseSchemaType, ColumnNameToColumnType>
|
|
95
|
-
): apiFilterType {
|
|
96
|
-
// Need to loop because we don't kno
|
|
97
|
-
for (const prop in queryFilter) {
|
|
98
|
-
// if the filter is "and" || "or" we need to recursively
|
|
99
|
-
if (prop === "and" || prop === "or") {
|
|
100
|
-
const compoundFilters: QueryFilter<
|
|
101
|
-
DatabaseSchemaType,
|
|
102
|
-
ColumnNameToColumnType
|
|
103
|
-
>[] =
|
|
104
|
-
// @ts-ignore
|
|
105
|
-
queryFilter[prop];
|
|
106
|
-
|
|
107
|
-
const compoundApiFilters = compoundFilters.map(
|
|
108
|
-
(i: QueryFilter<DatabaseSchemaType, ColumnNameToColumnType>) => {
|
|
109
|
-
return this.recursivelyBuildFilter(i);
|
|
110
|
-
}
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
// Either have an `and` or an `or` compound filter
|
|
114
|
-
let temp: apiFilterType = {
|
|
115
|
-
...(prop === "and"
|
|
116
|
-
? { and: compoundApiFilters }
|
|
117
|
-
: { or: compoundApiFilters }),
|
|
118
|
-
};
|
|
119
|
-
return temp;
|
|
120
|
-
} else {
|
|
121
|
-
const propType = this.propNameToColumnName[prop].type;
|
|
122
|
-
const temp: apiSingleFilter = {
|
|
123
|
-
property: this.propNameToColumnName[prop].columnName,
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
//@ts-ignore
|
|
127
|
-
temp[propType] = (queryFilter as SingleFilter<ColumnNameToColumnType>)[
|
|
128
|
-
prop
|
|
129
|
-
];
|
|
130
|
-
return temp;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|