target-supabase-sdk 0.1.0

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.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/auth/auth.api.d.ts +28 -0
  4. package/dist/auth/auth.api.d.ts.map +1 -0
  5. package/dist/auth/auth.api.js +50 -0
  6. package/dist/auth/auth.api.js.map +1 -0
  7. package/dist/core.api.d.ts +68 -0
  8. package/dist/core.api.d.ts.map +1 -0
  9. package/dist/core.api.js +226 -0
  10. package/dist/core.api.js.map +1 -0
  11. package/dist/core.interface.d.ts +36 -0
  12. package/dist/core.interface.d.ts.map +1 -0
  13. package/dist/core.interface.js +46 -0
  14. package/dist/core.interface.js.map +1 -0
  15. package/dist/core.utils.d.ts +19 -0
  16. package/dist/core.utils.d.ts.map +1 -0
  17. package/dist/core.utils.js +86 -0
  18. package/dist/core.utils.js.map +1 -0
  19. package/dist/feed/feed.interface.d.ts +27 -0
  20. package/dist/feed/feed.interface.d.ts.map +1 -0
  21. package/dist/feed/feed.interface.js +17 -0
  22. package/dist/feed/feed.interface.js.map +1 -0
  23. package/dist/file/file-manager.d.ts +24 -0
  24. package/dist/file/file-manager.d.ts.map +1 -0
  25. package/dist/file/file-manager.js +109 -0
  26. package/dist/file/file-manager.js.map +1 -0
  27. package/dist/file/file.api.d.ts +15 -0
  28. package/dist/file/file.api.d.ts.map +1 -0
  29. package/dist/file/file.api.js +30 -0
  30. package/dist/file/file.api.js.map +1 -0
  31. package/dist/file/file.interface.d.ts +25 -0
  32. package/dist/file/file.interface.d.ts.map +1 -0
  33. package/dist/file/file.interface.js +9 -0
  34. package/dist/file/file.interface.js.map +1 -0
  35. package/dist/file-list/file-list.api.d.ts +15 -0
  36. package/dist/file-list/file-list.api.d.ts.map +1 -0
  37. package/dist/file-list/file-list.api.js +54 -0
  38. package/dist/file-list/file-list.api.js.map +1 -0
  39. package/dist/file-list/file-list.interface.d.ts +22 -0
  40. package/dist/file-list/file-list.interface.d.ts.map +1 -0
  41. package/dist/file-list/file-list.interface.js +5 -0
  42. package/dist/file-list/file-list.interface.js.map +1 -0
  43. package/dist/idea/idea.interface.d.ts +25 -0
  44. package/dist/idea/idea.interface.d.ts.map +1 -0
  45. package/dist/idea/idea.interface.js +15 -0
  46. package/dist/idea/idea.interface.js.map +1 -0
  47. package/dist/index.d.ts +33 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +28 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/link/link.interface.d.ts +18 -0
  52. package/dist/link/link.interface.d.ts.map +1 -0
  53. package/dist/link/link.interface.js +6 -0
  54. package/dist/link/link.interface.js.map +1 -0
  55. package/dist/parcel/parcel-manager.d.ts +39 -0
  56. package/dist/parcel/parcel-manager.d.ts.map +1 -0
  57. package/dist/parcel/parcel-manager.js +156 -0
  58. package/dist/parcel/parcel-manager.js.map +1 -0
  59. package/dist/parcel/parcel.interface.d.ts +34 -0
  60. package/dist/parcel/parcel.interface.d.ts.map +1 -0
  61. package/dist/parcel/parcel.interface.js +11 -0
  62. package/dist/parcel/parcel.interface.js.map +1 -0
  63. package/dist/question-list/question-list.api.d.ts +13 -0
  64. package/dist/question-list/question-list.api.d.ts.map +1 -0
  65. package/dist/question-list/question-list.api.js +35 -0
  66. package/dist/question-list/question-list.api.js.map +1 -0
  67. package/dist/question-list/question-list.interface.d.ts +18 -0
  68. package/dist/question-list/question-list.interface.d.ts.map +1 -0
  69. package/dist/question-list/question-list.interface.js +5 -0
  70. package/dist/question-list/question-list.interface.js.map +1 -0
  71. package/dist/review/review.api.d.ts +14 -0
  72. package/dist/review/review.api.d.ts.map +1 -0
  73. package/dist/review/review.api.js +133 -0
  74. package/dist/review/review.api.js.map +1 -0
  75. package/dist/review/review.interface.d.ts +24 -0
  76. package/dist/review/review.interface.d.ts.map +1 -0
  77. package/dist/review/review.interface.js +10 -0
  78. package/dist/review/review.interface.js.map +1 -0
  79. package/dist/review-v2/apis/post-review-setting.api.d.ts +12 -0
  80. package/dist/review-v2/apis/post-review-setting.api.d.ts.map +1 -0
  81. package/dist/review-v2/apis/post-review-setting.api.js +27 -0
  82. package/dist/review-v2/apis/post-review-setting.api.js.map +1 -0
  83. package/dist/review-v2/apis/post-review.api.d.ts +13 -0
  84. package/dist/review-v2/apis/post-review.api.d.ts.map +1 -0
  85. package/dist/review-v2/apis/post-review.api.js +46 -0
  86. package/dist/review-v2/apis/post-review.api.js.map +1 -0
  87. package/dist/review-v2/review-setting.interface.d.ts +23 -0
  88. package/dist/review-v2/review-setting.interface.d.ts.map +1 -0
  89. package/dist/review-v2/review-setting.interface.js +5 -0
  90. package/dist/review-v2/review-setting.interface.js.map +1 -0
  91. package/dist/review-v2/review.interface.d.ts +20 -0
  92. package/dist/review-v2/review.interface.d.ts.map +1 -0
  93. package/dist/review-v2/review.interface.js +5 -0
  94. package/dist/review-v2/review.interface.js.map +1 -0
  95. package/dist/service/api.interface.d.ts +35 -0
  96. package/dist/service/api.interface.d.ts.map +1 -0
  97. package/dist/service/api.interface.js +12 -0
  98. package/dist/service/api.interface.js.map +1 -0
  99. package/dist/service/base.interface.d.ts +83 -0
  100. package/dist/service/base.interface.d.ts.map +1 -0
  101. package/dist/service/base.interface.js +7 -0
  102. package/dist/service/base.interface.js.map +1 -0
  103. package/dist/service/service.interface.d.ts +24 -0
  104. package/dist/service/service.interface.d.ts.map +1 -0
  105. package/dist/service/service.interface.js +11 -0
  106. package/dist/service/service.interface.js.map +1 -0
  107. package/dist/supabase.d.ts +32 -0
  108. package/dist/supabase.d.ts.map +1 -0
  109. package/dist/supabase.js +100 -0
  110. package/dist/supabase.js.map +1 -0
  111. package/package.json +45 -0
  112. package/src/auth/auth.api.ts +85 -0
  113. package/src/core.api.ts +338 -0
  114. package/src/core.interface.ts +74 -0
  115. package/src/core.utils.ts +98 -0
  116. package/src/feed/feed.interface.ts +33 -0
  117. package/src/file/file-manager.ts +145 -0
  118. package/src/file/file.api.ts +43 -0
  119. package/src/file/file.interface.ts +30 -0
  120. package/src/file-list/file-list.api.ts +64 -0
  121. package/src/file-list/file-list.interface.ts +24 -0
  122. package/src/idea/idea.interface.ts +28 -0
  123. package/src/index.ts +50 -0
  124. package/src/link/link.interface.ts +21 -0
  125. package/src/parcel/parcel-manager.ts +209 -0
  126. package/src/parcel/parcel.interface.ts +40 -0
  127. package/src/question-list/question-list.api.ts +42 -0
  128. package/src/question-list/question-list.interface.ts +21 -0
  129. package/src/review/review.api.ts +145 -0
  130. package/src/review/review.interface.ts +26 -0
  131. package/src/review-v2/apis/post-review-setting.api.ts +35 -0
  132. package/src/review-v2/apis/post-review.api.ts +59 -0
  133. package/src/review-v2/review-setting.interface.ts +26 -0
  134. package/src/review-v2/review.interface.ts +23 -0
  135. package/src/service/api.interface.ts +47 -0
  136. package/src/service/base.interface.ts +97 -0
  137. package/src/service/service.interface.ts +27 -0
  138. package/src/supabase.ts +143 -0
@@ -0,0 +1,86 @@
1
+ import { pick, pickBy } from "lodash-es";
2
+ /** True when running in a development build (Vite or Node). Defaults to false for safety. */
3
+ export function isDevEnvironment() {
4
+ if (typeof import.meta !== "undefined" && "env" in import.meta) {
5
+ const env = import.meta.env;
6
+ if (env?.DEV === true || env?.MODE === "development")
7
+ return true;
8
+ if (env?.DEV === false || env?.MODE === "production")
9
+ return false;
10
+ }
11
+ if (typeof process !== "undefined" && process.env?.NODE_ENV) {
12
+ return process.env.NODE_ENV !== "production";
13
+ }
14
+ return false;
15
+ }
16
+ export function logDev(...args) {
17
+ if (isDevEnvironment()) {
18
+ console.log(...args);
19
+ }
20
+ }
21
+ export function logDevGroup(label, fn) {
22
+ if (!isDevEnvironment())
23
+ return;
24
+ console.group(label);
25
+ try {
26
+ fn();
27
+ }
28
+ finally {
29
+ console.groupEnd();
30
+ }
31
+ }
32
+ /** Log internal details, then throw a sanitized error safe to expose to callers. */
33
+ export function handleSupabaseError(context, error, publicMessage) {
34
+ console.error(`[${context}] failed:`, error);
35
+ throw new Error(publicMessage ?? `[${context}] Operation failed`);
36
+ }
37
+ /** Raw payload -> Available data */
38
+ export class BaseValidator {
39
+ requiredFields = [];
40
+ optionalFields = [];
41
+ ignoredFields = [];
42
+ customValidators = [];
43
+ /** @deprecated -> addCustomValidator */
44
+ addValidator(validator) {
45
+ this.customValidators.push(validator);
46
+ return this;
47
+ }
48
+ addCustomValidator(validator) {
49
+ this.customValidators.push(validator);
50
+ return this;
51
+ }
52
+ validateField(field, value) {
53
+ // TODO now only empty check, later should add type checks
54
+ return value != null;
55
+ }
56
+ validate = (val) => {
57
+ const errors = [];
58
+ // Step 1: Check required fields
59
+ this.requiredFields.forEach((field) => {
60
+ if (!this.validateField(field, val[field])) {
61
+ errors.push(`Missing required field: ${String(field)}`);
62
+ }
63
+ });
64
+ // Step 2: Run custom validators
65
+ this.customValidators.forEach((validator) => {
66
+ const result = validator(val);
67
+ if (result !== true) {
68
+ errors.push(`Custom validation failed ${result}`);
69
+ }
70
+ });
71
+ if (errors.length > 0) {
72
+ const errorCount = errors.length;
73
+ const errorList = errors.map((error, index) => ` ${index + 1}. ${error}`).join("\n");
74
+ throw new Error(`[${this.constructor.name}] Validation failed (${errorCount} error${errorCount > 1 ? "s" : ""}):\n${errorList}`);
75
+ }
76
+ // Step 3: Pick required and optional fields
77
+ const required = pick(val, this.requiredFields);
78
+ const optional = pickBy(val, (value, key) => {
79
+ const typedKey = key;
80
+ return this.optionalFields.includes(typedKey) && value != null;
81
+ });
82
+ // TODO ignoredFields
83
+ return { ...required, ...optional };
84
+ };
85
+ }
86
+ //# sourceMappingURL=core.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.utils.js","sourceRoot":"","sources":["../src/core.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Target } from "../core.interface";
2
+ export interface Feed extends Target {
3
+ category: CategoryFeed;
4
+ details: FeedDetails;
5
+ }
6
+ export declare enum CategoryFeed {
7
+ FEED = "feed",
8
+ DOC = "doc"
9
+ }
10
+ export interface FeedDetails {
11
+ manifestVersion: number;
12
+ list: FeedItem[];
13
+ }
14
+ export declare enum FeedItemType {
15
+ /** Plain Target */
16
+ TEXT = "TEXT",
17
+ /** Parcel */
18
+ IMAGE = "IMAGE",
19
+ /** Parcel */
20
+ VIDEO = "VIDEO"
21
+ }
22
+ export interface FeedItem {
23
+ index: number;
24
+ type: FeedItemType;
25
+ refTargetId: string;
26
+ }
27
+ //# sourceMappingURL=feed.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.interface.d.ts","sourceRoot":"","sources":["../../src/feed/feed.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,WAAW,IAAK,SAAQ,MAAM;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,oBAAY,YAAY;IACtB,mBAAmB;IACnB,IAAI,SAAS;IACb,aAAa;IACb,KAAK,UAAU;IACf,aAAa;IACb,KAAK,UAAU;CAGhB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,17 @@
1
+ export var CategoryFeed;
2
+ (function (CategoryFeed) {
3
+ CategoryFeed["FEED"] = "feed";
4
+ CategoryFeed["DOC"] = "doc";
5
+ })(CategoryFeed || (CategoryFeed = {}));
6
+ export var FeedItemType;
7
+ (function (FeedItemType) {
8
+ /** Plain Target */
9
+ FeedItemType["TEXT"] = "TEXT";
10
+ /** Parcel */
11
+ FeedItemType["IMAGE"] = "IMAGE";
12
+ /** Parcel */
13
+ FeedItemType["VIDEO"] = "VIDEO";
14
+ /** TODO Review */
15
+ // REVIEW = "REVIEW",
16
+ })(FeedItemType || (FeedItemType = {}));
17
+ //# sourceMappingURL=feed.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.interface.js","sourceRoot":"","sources":["../../src/feed/feed.interface.ts"],"names":[],"mappings":"AAOA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,2BAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAOD,MAAM,CAAN,IAAY,YASX;AATD,WAAY,YAAY;IACtB,mBAAmB;IACnB,6BAAa,CAAA;IACb,aAAa;IACb,+BAAe,CAAA;IACf,aAAa;IACb,+BAAe,CAAA;IACf,kBAAkB;IAClB,qBAAqB;AACvB,CAAC,EATW,YAAY,KAAZ,YAAY,QASvB"}
@@ -0,0 +1,24 @@
1
+ import type { FileDetails, FilePreview } from "./file.interface";
2
+ export declare class FileManagerError extends Error {
3
+ constructor(message: string, cause?: unknown);
4
+ }
5
+ export interface CreatePreviewProps {
6
+ refTargetId: string;
7
+ }
8
+ declare function createPreviewV0(props: CreatePreviewProps): FilePreview;
9
+ export interface CreateFileProps {
10
+ manifestVersion: 0;
11
+ /** "abc.1" */
12
+ value: string;
13
+ filePath: string;
14
+ needParcel: boolean;
15
+ }
16
+ declare function createFileV0(props: CreateFileProps): Promise<FileDetails>;
17
+ declare function verifyFileHash(filePath: string, expectedHash: string): Promise<boolean>;
18
+ declare const FileManager: {
19
+ createFile: typeof createFileV0;
20
+ createPreview: typeof createPreviewV0;
21
+ verifyFileHash: typeof verifyFileHash;
22
+ };
23
+ export default FileManager;
24
+ //# sourceMappingURL=file-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-manager.d.ts","sourceRoot":"","sources":["../../src/file/file-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKjE,qBAAa,gBAAiB,SAAQ,KAAK;gBAEnC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO;CAKtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,WAAW,CAK/D;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,EAAE,CAAC,CAAA;IAClB,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACvB;AAyED,iBAAe,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAiBxE;AAED,iBAAe,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAStF;AAKD,QAAA,MAAM,WAAW;;;;CAIhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,109 @@
1
+ const FILE_MANIFEST_VERSION = 1;
2
+ const PREVIEW_MANIFEST_VERSION = 1;
3
+ export class FileManagerError extends Error {
4
+ constructor(message, cause) {
5
+ super(message, { cause });
6
+ this.name = "FileManagerError";
7
+ }
8
+ }
9
+ function createPreviewV0(props) {
10
+ return {
11
+ manifestVersion: PREVIEW_MANIFEST_VERSION,
12
+ refTargetId: props.refTargetId,
13
+ };
14
+ }
15
+ async function sha256Hex(buffer) {
16
+ try {
17
+ const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", buffer);
18
+ const bytes = new Uint8Array(hashBuffer);
19
+ return Array.from(bytes)
20
+ .map((byte) => byte.toString(16).padStart(2, "0"))
21
+ .join("");
22
+ }
23
+ catch (error) {
24
+ throw new FileManagerError("FileManager.sha256Hex: 計算文件 hash 失敗", error);
25
+ }
26
+ }
27
+ function isLikelyLocalPath(path) {
28
+ // Windows: C:\foo\bar.txt / \\server\share ; POSIX absolute: /foo/bar
29
+ return /^[a-zA-Z]:[\\/]/.test(path) || path.startsWith("\\\\") || path.startsWith("/");
30
+ }
31
+ function isFetchableResource(path) {
32
+ return /^(https?:|blob:|data:)/.test(path) || path.startsWith("./") || path.startsWith("../");
33
+ }
34
+ function getBaseName(path) {
35
+ const parts = path.split(/[\\/]/).filter(Boolean);
36
+ return parts.at(-1) ?? "unknown";
37
+ }
38
+ async function readLocalFileByPicker(filePath) {
39
+ try {
40
+ if (!("showOpenFilePicker" in globalThis) || typeof globalThis.showOpenFilePicker !== "function") {
41
+ throw new FileManagerError("FileManager.readLocalFileByPicker: 當前瀏覽器不支持 File System Access API", { filePath });
42
+ }
43
+ const [handle] = await globalThis.showOpenFilePicker({
44
+ multiple: false,
45
+ });
46
+ const file = await handle.getFile();
47
+ const expectedName = getBaseName(filePath);
48
+ if (expectedName !== "unknown" && file.name !== expectedName) {
49
+ throw new FileManagerError("FileManager.readLocalFileByPicker: 選擇的文件與目標路徑不一致", { expectedName, actualName: file.name, filePath });
50
+ }
51
+ return file.arrayBuffer();
52
+ }
53
+ catch (error) {
54
+ throw new FileManagerError("FileManager.readLocalFileByPicker: 本地文件讀取失敗", error);
55
+ }
56
+ }
57
+ async function readFileBufferFromPath(filePath) {
58
+ try {
59
+ if (isLikelyLocalPath(filePath) && !isFetchableResource(filePath)) {
60
+ return readLocalFileByPicker(filePath);
61
+ }
62
+ const response = await fetch(filePath);
63
+ if (!response.ok) {
64
+ throw new FileManagerError(`FileManager.readFileBufferFromPath: 無法讀取文件內容 (${response.status})`, { status: response.status, statusText: response.statusText, filePath });
65
+ }
66
+ return response.arrayBuffer();
67
+ }
68
+ catch (error) {
69
+ throw new FileManagerError("FileManager.readFileBufferFromPath: 讀取文件失敗", error);
70
+ }
71
+ }
72
+ async function createFileV0(props) {
73
+ try {
74
+ const fileBuffer = await readFileBufferFromPath(props.filePath);
75
+ const contentHash = await sha256Hex(fileBuffer);
76
+ return {
77
+ manifestVersion: props.manifestVersion ?? FILE_MANIFEST_VERSION,
78
+ value: props.value,
79
+ // Hash file bytes directly so checksum can be verified by re-hashing the same content.
80
+ hash: contentHash,
81
+ preview: null,
82
+ url: props.needParcel ? null : props.filePath,
83
+ parcelId: null,
84
+ };
85
+ }
86
+ catch (error) {
87
+ throw new FileManagerError("FileManager.createFile: 建立文件 metadata 失敗", error);
88
+ }
89
+ }
90
+ async function verifyFileHash(filePath, expectedHash) {
91
+ try {
92
+ const normalizedExpected = expectedHash.trim().toLowerCase();
93
+ const fileBuffer = await readFileBufferFromPath(filePath);
94
+ const actualHash = await sha256Hex(fileBuffer);
95
+ return actualHash === normalizedExpected;
96
+ }
97
+ catch (error) {
98
+ throw new FileManagerError("FileManager.verifyFileHash: 文件 hash 驗證失敗", error);
99
+ }
100
+ }
101
+ const createFile = createFileV0;
102
+ const createPreview = createPreviewV0;
103
+ const FileManager = {
104
+ createFile,
105
+ createPreview,
106
+ verifyFileHash,
107
+ };
108
+ export default FileManager;
109
+ //# sourceMappingURL=file-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-manager.js","sourceRoot":"","sources":["../../src/file/file-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseValidator } from "../core.utils";
2
+ import { File, FileDetails } from "./file.interface";
3
+ export interface PostFileCreatePayload {
4
+ name: File["name"];
5
+ value: File["value"];
6
+ category: File["category"];
7
+ details: FileDetails;
8
+ }
9
+ export declare class PostFileValidator extends BaseValidator<PostFileCreatePayload> {
10
+ protected requiredFields: (keyof PostFileCreatePayload)[];
11
+ protected optionalFields: (keyof PostFileCreatePayload)[];
12
+ constructor();
13
+ }
14
+ export declare const postFileCreate: (payload: PostFileCreatePayload) => Promise<import("..").SupabaseResponse<File>>;
15
+ //# sourceMappingURL=file.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.api.d.ts","sourceRoot":"","sources":["../../src/file/file.api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAgB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,qBAAqB,CAAC;IACzE,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,qBAAqB,CAAC,EAAE,CAA4C;IACrG,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,qBAAqB,CAAC,EAAE,CAAM;;CAShE;AAID,eAAO,MAAM,cAAc,YAAmB,qBAAqB,iDAgBlE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { createTarget } from "../core.api";
2
+ import { BaseValidator } from "../core.utils";
3
+ export class PostFileValidator extends BaseValidator {
4
+ requiredFields = ["name", "value", "category", "details"];
5
+ optionalFields = [];
6
+ constructor() {
7
+ super();
8
+ // Add custom
9
+ this.addCustomValidator((val) => {
10
+ return true;
11
+ });
12
+ }
13
+ }
14
+ export const postFileCreate = async (payload) => {
15
+ return createTarget({
16
+ payload: payload,
17
+ validator: PostFileValidator,
18
+ createFn: (validPayload) => {
19
+ const { name, value, category, details } = validPayload;
20
+ return {
21
+ name,
22
+ category,
23
+ value,
24
+ tagList: [],
25
+ details,
26
+ };
27
+ },
28
+ });
29
+ };
30
+ //# sourceMappingURL=file.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.api.js","sourceRoot":"","sources":["../../src/file/file.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAU9C,MAAM,OAAO,iBAAkB,SAAQ,aAAoC;IAC/D,cAAc,GAAoC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3F,cAAc,GAAoC,EAAE,CAAC;IAE/D;QACE,KAAK,EAAE,CAAC;QACR,aAAa;QACb,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAID,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAE;IACrE,OAAO,YAAY,CAA8B;QAC/C,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,iBAAiB;QAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE;YACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;YAExD,OAAO;gBACL,IAAI;gBACJ,QAAQ;gBACR,KAAK;gBACL,OAAO,EAAE,EAAE;gBACX,OAAO;aACR,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Target } from "../core.interface";
2
+ export declare enum CategoryFile {
3
+ VIDEO = "video",
4
+ IMAGE = "image",
5
+ TEXT = "text"
6
+ }
7
+ export interface File extends Target {
8
+ details: FileDetails;
9
+ category: CategoryFile;
10
+ }
11
+ export interface FileDetails {
12
+ manifestVersion: number;
13
+ /** "abc.1" 唯一键 */
14
+ value: string;
15
+ hash: string | null;
16
+ preview: FilePreview | null;
17
+ /** Quickly access the file */
18
+ url: string | null;
19
+ parcelId: string | null;
20
+ }
21
+ export interface FilePreview {
22
+ manifestVersion: number;
23
+ refTargetId: string;
24
+ }
25
+ //# sourceMappingURL=file.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.interface.d.ts","sourceRoot":"","sources":["../../src/file/file.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,IAAK,SAAQ,MAAM;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAGzB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,9 @@
1
+ export var CategoryFile;
2
+ (function (CategoryFile) {
3
+ CategoryFile["VIDEO"] = "video";
4
+ CategoryFile["IMAGE"] = "image";
5
+ CategoryFile["TEXT"] = "text";
6
+ })(CategoryFile || (CategoryFile = {}));
7
+ ;
8
+ ;
9
+ //# sourceMappingURL=file.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.interface.js","sourceRoot":"","sources":["../../src/file/file.interface.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,+BAAe,CAAA;IACf,+BAAe,CAAA;IACf,6BAAa,CAAA;AACf,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAkBA,CAAC;AAKD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { BaseValidator } from "../core.utils";
2
+ import { FileList, FileListDetails } from "./file-list.interface";
3
+ export declare class PostCreateFileListValidator extends BaseValidator<PostCreateFileListPayload> {
4
+ protected requiredFields: (keyof PostCreateFileListPayload)[];
5
+ protected optionalFields: (keyof PostCreateFileListPayload)[];
6
+ constructor();
7
+ }
8
+ export interface PostCreateFileListPayload {
9
+ name: FileListDetails["name"];
10
+ dirName: FileListDetails["dirName"];
11
+ dirSize: FileListDetails["dirSize"];
12
+ storageUrl: FileListDetails["storageUrl"];
13
+ }
14
+ export declare const postCreateFileList: (payload: PostCreateFileListPayload) => Promise<import("..").SupabaseResponse<FileList>>;
15
+ //# sourceMappingURL=file-list.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-list.api.d.ts","sourceRoot":"","sources":["../../src/file-list/file-list.api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAoB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpF,qBAAa,2BAA4B,SAAQ,aAAa,CAAC,yBAAyB,CAAC;IACvF,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,yBAAyB,CAAC,EAAE,CAAgD;IAC7G,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,yBAAyB,CAAC,EAAE,CAAM;;CASpE;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,kBAAkB,YAAmB,yBAAyB,qDAuC1E,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { createTarget } from "../core.api";
2
+ import { BaseValidator } from "../core.utils";
3
+ import { CategoryFileList } from "./file-list.interface";
4
+ export class PostCreateFileListValidator extends BaseValidator {
5
+ requiredFields = ["name", "dirName", "dirSize", "storageUrl"];
6
+ optionalFields = [];
7
+ constructor() {
8
+ super();
9
+ // Add custom
10
+ this.addValidator((val) => {
11
+ return true;
12
+ });
13
+ }
14
+ }
15
+ export const postCreateFileList = async (payload) => {
16
+ return createTarget({
17
+ payload: payload,
18
+ validator: PostCreateFileListValidator,
19
+ checkRedundancyFilterList: [
20
+ {
21
+ field: "category",
22
+ operator: "eq",
23
+ value: CategoryFileList.FILE_LIST,
24
+ },
25
+ {
26
+ field: "details->>dirName",
27
+ operator: "eq",
28
+ value: payload.dirName,
29
+ },
30
+ {
31
+ field: "details->>storageUrl",
32
+ operator: "eq",
33
+ value: payload.storageUrl,
34
+ },
35
+ ],
36
+ createFn: (validPayload) => {
37
+ const { name, dirName, dirSize, storageUrl = "" } = validPayload;
38
+ const details = {
39
+ name,
40
+ dirName,
41
+ dirSize,
42
+ storageUrl,
43
+ };
44
+ return {
45
+ name: validPayload.name,
46
+ category: CategoryFileList.FILE_LIST,
47
+ value: dirName,
48
+ tagList: [],
49
+ details,
50
+ };
51
+ },
52
+ });
53
+ };
54
+ //# sourceMappingURL=file-list.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-list.api.js","sourceRoot":"","sources":["../../src/file-list/file-list.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAY,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;AAEpF,MAAM,OAAO,2BAA4B,SAAQ,aAAwC;IAC7E,cAAc,GAAwC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACnG,cAAc,GAAwC,EAAE,CAAC;IAEnE;QACE,KAAK,EAAE,CAAC;QACR,aAAa;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AASD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAkC,EAAE,EAAE;IAC7E,OAAO,YAAY,CAAsC;QACvD,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,2BAA2B;QACtC,yBAAyB,EAAE;YACzB;gBACE,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,gBAAgB,CAAC,SAAS;aAClC;YACD;gBACE,KAAK,EAAE,mBAAmB;gBAC1B,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,OAAO;aACvB;YACD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,UAAU;aAC1B;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE;YACzB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC;YACjE,MAAM,OAAO,GAAoB;gBAC/B,IAAI;gBACJ,OAAO;gBACP,OAAO;gBACP,UAAU;aACX,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,QAAQ,EAAE,gBAAgB,CAAC,SAAS;gBACpC,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,EAAE;gBACX,OAAO;aACR,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Target } from "../core.interface";
2
+ /**
3
+ * Use storageUrl+dirName to identify the file list
4
+ * You can iterate all files in the directory
5
+ */
6
+ export type FileListDetails = {
7
+ /** Human readable name, should be same to Target.name */
8
+ name: string;
9
+ /** unique path */
10
+ dirName: string;
11
+ dirSize: number;
12
+ /** where to store the file list */
13
+ storageUrl: string;
14
+ };
15
+ export declare enum CategoryFileList {
16
+ FILE_LIST = "file-list"
17
+ }
18
+ export interface FileList extends Target {
19
+ details: FileListDetails;
20
+ category: CategoryFileList;
21
+ }
22
+ //# sourceMappingURL=file-list.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-list.interface.d.ts","sourceRoot":"","sources":["../../src/file-list/file-list.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,gBAAgB;IAC1B,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,QAAS,SAAQ,MAAM;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B"}
@@ -0,0 +1,5 @@
1
+ export var CategoryFileList;
2
+ (function (CategoryFileList) {
3
+ CategoryFileList["FILE_LIST"] = "file-list";
4
+ })(CategoryFileList || (CategoryFileList = {}));
5
+ //# sourceMappingURL=file-list.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-list.interface.js","sourceRoot":"","sources":["../../src/file-list/file-list.interface.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAN,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IAC1B,2CAAuB,CAAA;AACzB,CAAC,EAFW,gBAAgB,KAAhB,gBAAgB,QAE3B"}
@@ -0,0 +1,25 @@
1
+ import { Target } from "../core.interface";
2
+ export declare enum CategoryIdea {
3
+ OPPORTUNITY = "opportunity"
4
+ }
5
+ export interface Idea extends Target {
6
+ /** 主題 */
7
+ value: string;
8
+ details: IdeaDetails;
9
+ category: CategoryIdea;
10
+ }
11
+ export interface IdeaDetails {
12
+ manifestVersion: number;
13
+ marketList: Market[];
14
+ reviewList: string[];
15
+ /** 切入點 */
16
+ point: string;
17
+ }
18
+ export declare enum Market {
19
+ NA = "NA",
20
+ EU = "EU",
21
+ JP = "JP",
22
+ CN = "CN",
23
+ TW = "TW"
24
+ }
25
+ //# sourceMappingURL=idea.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idea.interface.d.ts","sourceRoot":"","sources":["../../src/idea/idea.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,oBAAY,YAAY;IACpB,WAAW,gBAAgB;CAC9B;AAED,MAAM,WAAW,IAAK,SAAQ,MAAM;IAChC,SAAS;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU;IACV,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,MAAM;IACd,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACZ"}
@@ -0,0 +1,15 @@
1
+ export var CategoryIdea;
2
+ (function (CategoryIdea) {
3
+ CategoryIdea["OPPORTUNITY"] = "opportunity";
4
+ })(CategoryIdea || (CategoryIdea = {}));
5
+ ;
6
+ export var Market;
7
+ (function (Market) {
8
+ Market["NA"] = "NA";
9
+ Market["EU"] = "EU";
10
+ Market["JP"] = "JP";
11
+ Market["CN"] = "CN";
12
+ Market["TW"] = "TW";
13
+ })(Market || (Market = {}));
14
+ ;
15
+ //# sourceMappingURL=idea.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idea.interface.js","sourceRoot":"","sources":["../../src/idea/idea.interface.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,YAEX;AAFD,WAAY,YAAY;IACpB,2CAA2B,CAAA;AAC/B,CAAC,EAFW,YAAY,KAAZ,YAAY,QAEvB;AAeA,CAAC;AAEF,MAAM,CAAN,IAAY,MAMX;AAND,WAAY,MAAM;IACd,mBAAS,CAAA;IACT,mBAAS,CAAA;IACT,mBAAS,CAAA;IACT,mBAAS,CAAA;IACT,mBAAS,CAAA;AACb,CAAC,EANW,MAAM,KAAN,MAAM,QAMjB;AAAA,CAAC"}
@@ -0,0 +1,33 @@
1
+ export { SupabaseInitializer } from "./supabase";
2
+ export type { SupabaseInitializerParams } from "./supabase";
3
+ export type { SupabaseClient } from "@supabase/supabase-js";
4
+ import { SupabaseInitializer } from "./supabase";
5
+ export declare const supabase: SupabaseInitializer;
6
+ export * from "./core.api";
7
+ export * from "./core.interface";
8
+ export * from "./core.utils";
9
+ export * from "./auth/auth.api";
10
+ export * from "./feed/feed.interface";
11
+ export * from "./idea/idea.interface";
12
+ export * from "./link/link.interface";
13
+ export { CategoryParcel } from "./parcel/parcel.interface";
14
+ export type { Parcel, ParcelDetails, Chunk, LifecycleStatus as ParcelLifecycleStatus, Lifecycle as ParcelLifecycle, } from "./parcel/parcel.interface";
15
+ export { default as ParcelManager } from "./parcel/parcel-manager";
16
+ export * from "./file/file.interface";
17
+ export * from "./file/file.api";
18
+ export * from "./file/file-manager";
19
+ export * from "./file-list/file-list.interface";
20
+ export * from "./file-list/file-list.api";
21
+ export * from "./question-list/question-list.interface";
22
+ export * from "./question-list/question-list.api";
23
+ export * from "./review/review.interface";
24
+ export * from "./review/review.api";
25
+ export type { ReviewV2, ReviewV2Details, ReviewResult } from "./review-v2/review.interface";
26
+ export * from "./review-v2/review-setting.interface";
27
+ export { postReview as postReviewV2, PostReviewValidator as PostReviewV2Validator } from "./review-v2/apis/post-review.api";
28
+ export type { PostReviewPayload as PostReviewV2Payload } from "./review-v2/apis/post-review.api";
29
+ export * from "./review-v2/apis/post-review-setting.api";
30
+ export * from "./service/base.interface";
31
+ export * from "./service/service.interface";
32
+ export * from "./service/api.interface";
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,QAAQ,qBAAoC,CAAC;AAE1D,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EACV,MAAM,EACN,aAAa,EACb,KAAK,EACL,eAAe,IAAI,qBAAqB,EACxC,SAAS,IAAI,eAAe,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEnE,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAE1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAElD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5F,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,mBAAmB,IAAI,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC5H,YAAY,EAAE,iBAAiB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACjG,cAAc,0CAA0C,CAAC;AAEzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ export { SupabaseInitializer } from "./supabase";
2
+ import { SupabaseInitializer } from "./supabase";
3
+ export const supabase = SupabaseInitializer.getInstance();
4
+ export * from "./core.api";
5
+ export * from "./core.interface";
6
+ export * from "./core.utils";
7
+ export * from "./auth/auth.api";
8
+ export * from "./feed/feed.interface";
9
+ export * from "./idea/idea.interface";
10
+ export * from "./link/link.interface";
11
+ export { CategoryParcel } from "./parcel/parcel.interface";
12
+ export { default as ParcelManager } from "./parcel/parcel-manager";
13
+ export * from "./file/file.interface";
14
+ export * from "./file/file.api";
15
+ export * from "./file/file-manager";
16
+ export * from "./file-list/file-list.interface";
17
+ export * from "./file-list/file-list.api";
18
+ export * from "./question-list/question-list.interface";
19
+ export * from "./question-list/question-list.api";
20
+ export * from "./review/review.interface";
21
+ export * from "./review/review.api";
22
+ export * from "./review-v2/review-setting.interface";
23
+ export { postReview as postReviewV2, PostReviewValidator as PostReviewV2Validator } from "./review-v2/apis/post-review.api";
24
+ export * from "./review-v2/apis/post-review-setting.api";
25
+ export * from "./service/base.interface";
26
+ export * from "./service/service.interface";
27
+ export * from "./service/api.interface";
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;AAE1D,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEnE,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAE1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAElD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,mBAAmB,IAAI,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE5H,cAAc,0CAA0C,CAAC;AAEzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}