target-supabase-sdk 0.2.0 → 0.2.2
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 +130 -11
- package/dist/browser.d.ts +44 -36
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -45
- package/dist/browser.js.map +1 -1
- package/dist/chunks/create-logger-DyH3mZ8p.js +1028 -0
- package/dist/chunks/create-logger-DyH3mZ8p.js.map +1 -0
- package/dist/chunks/enable-log-persist-BH-tbKEj.js +1481 -0
- package/dist/chunks/enable-log-persist-BH-tbKEj.js.map +1 -0
- package/dist/chunks/word.interface-DLgRobKV.js +1973 -0
- package/dist/chunks/word.interface-DLgRobKV.js.map +1 -0
- package/dist/command/command.api.d.ts +1 -1
- package/dist/command/command.api.d.ts.map +1 -1
- package/dist/command/command.interface.d.ts +1 -1
- package/dist/command/command.interface.d.ts.map +1 -1
- package/dist/core.api.d.ts +10 -6
- package/dist/core.api.d.ts.map +1 -1
- package/dist/core.interface.d.ts +3 -2
- package/dist/core.interface.d.ts.map +1 -1
- package/dist/core.utils.d.ts +1 -1
- package/dist/core.utils.d.ts.map +1 -1
- package/dist/idea/idea.interface.d.ts +1 -1
- package/dist/idea/idea.interface.d.ts.map +1 -1
- package/dist/link/link.api.d.ts +1 -1
- package/dist/link/link.api.d.ts.map +1 -1
- package/dist/link/link.interface.d.ts +2 -2
- package/dist/link/link.interface.d.ts.map +1 -1
- package/dist/list/list.api.d.ts +3 -1
- package/dist/list/list.api.d.ts.map +1 -1
- package/dist/list/list.interface.d.ts +2 -2
- package/dist/list/list.interface.d.ts.map +1 -1
- package/dist/node/env/env-parsers.d.ts +19 -0
- package/dist/node/env/env-parsers.d.ts.map +1 -0
- package/dist/node/env/index.d.ts +11 -0
- package/dist/node/env/index.d.ts.map +1 -0
- package/dist/node/env/init-supabase-from-env.d.ts +17 -0
- package/dist/node/env/init-supabase-from-env.d.ts.map +1 -0
- package/dist/node/env/load-env.d.ts +20 -0
- package/dist/node/env/load-env.d.ts.map +1 -0
- package/dist/node/env/project-root.d.ts +11 -0
- package/dist/node/env/project-root.d.ts.map +1 -0
- package/dist/node/env/public-base-url.d.ts +10 -0
- package/dist/node/env/public-base-url.d.ts.map +1 -0
- package/dist/node/env/require-env.d.ts +3 -0
- package/dist/node/env/require-env.d.ts.map +1 -0
- package/dist/node/fs/json-state-store.d.ts +19 -0
- package/dist/node/fs/json-state-store.d.ts.map +1 -0
- package/dist/node/fs/read-source-file.d.ts +19 -0
- package/dist/node/fs/read-source-file.d.ts.map +1 -0
- package/dist/node/node-liveness.d.ts +30 -0
- package/dist/node/node-liveness.d.ts.map +1 -0
- package/dist/node/node-runtime.base.d.ts +21 -3
- package/dist/node/node-runtime.base.d.ts.map +1 -1
- package/dist/node/node.api.d.ts +1 -1
- package/dist/node/node.api.d.ts.map +1 -1
- package/dist/node/node.interface.d.ts +1 -6
- package/dist/node/node.interface.d.ts.map +1 -1
- package/dist/node/preload/run-service-preload.d.ts +14 -0
- package/dist/node/preload/run-service-preload.d.ts.map +1 -0
- package/dist/node/preload/service-preload.interface.d.ts +15 -0
- package/dist/node/preload/service-preload.interface.d.ts.map +1 -0
- package/dist/node/process/index.d.ts +5 -0
- package/dist/node/process/index.d.ts.map +1 -0
- package/dist/node/process/managed-child-processes.d.ts +37 -0
- package/dist/node/process/managed-child-processes.d.ts.map +1 -0
- package/dist/node/process/process-spawn.d.ts +27 -0
- package/dist/node/process/process-spawn.d.ts.map +1 -0
- package/dist/node/readiness/index.d.ts +9 -0
- package/dist/node/readiness/index.d.ts.map +1 -0
- package/dist/node/readiness/poll-until.d.ts +11 -0
- package/dist/node/readiness/poll-until.d.ts.map +1 -0
- package/dist/node/readiness/readiness-checks.d.ts +22 -0
- package/dist/node/readiness/readiness-checks.d.ts.map +1 -0
- package/dist/node/readiness/readiness.types.d.ts +12 -0
- package/dist/node/readiness/readiness.types.d.ts.map +1 -0
- package/dist/node/readiness/run-readiness-checks.d.ts +4 -0
- package/dist/node/readiness/run-readiness-checks.d.ts.map +1 -0
- package/dist/node/readiness/service-ready-gate.d.ts +26 -0
- package/dist/node/readiness/service-ready-gate.d.ts.map +1 -0
- package/dist/node.d.ts +26 -12
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2482 -18
- package/dist/node.js.map +1 -1
- package/dist/parcel/chunk-fetch-registry.d.ts +14 -0
- package/dist/parcel/chunk-fetch-registry.d.ts.map +1 -0
- package/dist/parcel/chunk-url.utils.d.ts +9 -0
- package/dist/parcel/chunk-url.utils.d.ts.map +1 -0
- package/dist/parcel/parcel-manager.d.ts +44 -20
- package/dist/parcel/parcel-manager.d.ts.map +1 -1
- package/dist/parcel/parcel.api.d.ts +306 -0
- package/dist/parcel/parcel.api.d.ts.map +1 -0
- package/dist/parcel/parcel.interface.d.ts +26 -5
- package/dist/parcel/parcel.interface.d.ts.map +1 -1
- package/dist/parcel/parcel.service.d.ts +38 -0
- package/dist/parcel/parcel.service.d.ts.map +1 -0
- package/dist/parcel/storage-provider-registry.d.ts +17 -0
- package/dist/parcel/storage-provider-registry.d.ts.map +1 -0
- package/dist/parcel/storage-provider.types.d.ts +31 -0
- package/dist/parcel/storage-provider.types.d.ts.map +1 -0
- package/dist/preload.d.ts +7 -0
- package/dist/preload.d.ts.map +1 -0
- package/dist/preload.js +47 -0
- package/dist/preload.js.map +1 -0
- package/dist/repo/repo-context.utils.d.ts.map +1 -1
- package/dist/repo/repo-manager.d.ts +1 -1
- package/dist/repo/repo-manager.d.ts.map +1 -1
- package/dist/repo/repo.api.d.ts +1 -1
- package/dist/repo/repo.api.d.ts.map +1 -1
- package/dist/repo/repo.interface.d.ts +1 -1
- package/dist/repo/repo.interface.d.ts.map +1 -1
- package/dist/repo/repo.script-loader.d.ts +3 -3
- package/dist/repo/repo.script-loader.d.ts.map +1 -1
- package/dist/service/base.interface.d.ts +54 -57
- package/dist/service/base.interface.d.ts.map +1 -1
- package/dist/service/index.d.ts +21 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/service.api.d.ts +503 -0
- package/dist/service/service.api.d.ts.map +1 -0
- package/dist/service/service.interface.d.ts +36 -9
- package/dist/service/service.interface.d.ts.map +1 -1
- package/dist/shared/http/fetch-retry.d.ts +21 -0
- package/dist/shared/http/fetch-retry.d.ts.map +1 -0
- package/dist/shared/log/create-logger.d.ts +27 -0
- package/dist/shared/log/create-logger.d.ts.map +1 -0
- package/dist/shared/log/enable-log-persist.d.ts +28 -0
- package/dist/shared/log/enable-log-persist.d.ts.map +1 -0
- package/dist/shared/log/index.d.ts +6 -6
- package/dist/shared/log/index.d.ts.map +1 -1
- package/dist/shared/log/log-manager.d.ts +25 -27
- package/dist/shared/log/log-manager.d.ts.map +1 -1
- package/dist/shared/log/log-persist-batch-id.d.ts +13 -0
- package/dist/shared/log/log-persist-batch-id.d.ts.map +1 -0
- package/dist/shared/log/log-persist-flush.d.ts +8 -0
- package/dist/shared/log/log-persist-flush.d.ts.map +1 -0
- package/dist/shared/log/log-persist-hook.d.ts +6 -0
- package/dist/shared/log/log-persist-hook.d.ts.map +1 -0
- package/dist/shared/log/log-persist-logger.d.ts +15 -0
- package/dist/shared/log/log-persist-logger.d.ts.map +1 -0
- package/dist/shared/log/log-persist-registry.d.ts +18 -0
- package/dist/shared/log/log-persist-registry.d.ts.map +1 -0
- package/dist/shared/log/log-persist.config.d.ts +10 -0
- package/dist/shared/log/log-persist.config.d.ts.map +1 -0
- package/dist/shared/log/log-persist.d.ts +55 -0
- package/dist/shared/log/log-persist.d.ts.map +1 -0
- package/dist/shared/log/log-persist.interface.d.ts +116 -0
- package/dist/shared/log/log-persist.interface.d.ts.map +1 -0
- package/dist/shared/log/log-scope.d.ts +25 -18
- package/dist/shared/log/log-scope.d.ts.map +1 -1
- package/dist/shared/utils/fetch-url.d.ts +3 -0
- package/dist/shared/utils/fetch-url.d.ts.map +1 -0
- package/dist/shared/utils/network-error.d.ts +14 -0
- package/dist/shared/utils/network-error.d.ts.map +1 -0
- package/dist/shared/utils/safe-file-name.d.ts +14 -0
- package/dist/shared/utils/safe-file-name.d.ts.map +1 -0
- package/dist/shared/utils/sha256.d.ts +3 -0
- package/dist/shared/utils/sha256.d.ts.map +1 -0
- package/dist/supabase.d.ts +7 -2
- package/dist/supabase.d.ts.map +1 -1
- package/dist/task/index.d.ts +8 -7
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/local-task-registry.d.ts +1 -1
- package/dist/task/local-task-registry.d.ts.map +1 -1
- package/dist/task/task-manager.d.ts +7 -9
- package/dist/task/task-manager.d.ts.map +1 -1
- package/dist/{node → task}/task-node.d.ts +2 -3
- package/dist/task/task-node.d.ts.map +1 -0
- package/dist/task/task-post-validated.api.d.ts +19 -0
- package/dist/task/task-post-validated.api.d.ts.map +1 -0
- package/dist/task/task-post.api.d.ts +10 -5
- package/dist/task/task-post.api.d.ts.map +1 -1
- package/dist/task/task-queue.d.ts +7 -0
- package/dist/task/task-queue.d.ts.map +1 -0
- package/dist/task/task-repo-context.d.ts.map +1 -1
- package/dist/task/task-repo-validation.d.ts +2 -2
- package/dist/task/task-repo-validation.d.ts.map +1 -1
- package/dist/task/task.api.d.ts +13 -13
- package/dist/task/task.api.d.ts.map +1 -1
- package/dist/task/task.constant.d.ts +4 -0
- package/dist/task/task.constant.d.ts.map +1 -0
- package/dist/task/task.interface.d.ts +1 -1
- package/dist/task/task.interface.d.ts.map +1 -1
- package/dist/trigger/trigger-manager.d.ts +25 -0
- package/dist/trigger/trigger-manager.d.ts.map +1 -0
- package/dist/trigger/trigger-node.d.ts +23 -0
- package/dist/trigger/trigger-node.d.ts.map +1 -0
- package/dist/trigger/trigger.api.d.ts +4 -4
- package/dist/trigger/trigger.api.d.ts.map +1 -1
- package/dist/trigger/trigger.constant.d.ts +8 -0
- package/dist/trigger/trigger.constant.d.ts.map +1 -0
- package/dist/trigger/trigger.interface.d.ts +46 -2
- package/dist/trigger/trigger.interface.d.ts.map +1 -1
- package/dist/word/word.api.d.ts +1 -1
- package/dist/word/word.api.d.ts.map +1 -1
- package/dist/word/word.interface.d.ts +2 -2
- package/dist/word/word.interface.d.ts.map +1 -1
- package/package.json +84 -74
- package/src/browser.ts +144 -79
- package/src/command/command.api.ts +19 -17
- package/src/command/command.interface.ts +2 -3
- package/src/core.api.ts +466 -477
- package/src/core.interface.ts +63 -62
- package/src/core.utils.ts +64 -64
- package/src/idea/idea.interface.ts +3 -3
- package/src/link/link.api.ts +28 -30
- package/src/link/link.interface.ts +3 -4
- package/src/list/list.api.ts +50 -29
- package/src/list/list.interface.ts +3 -4
- package/src/node/env/env-parsers.ts +77 -0
- package/src/node/env/index.ts +10 -0
- package/src/node/env/init-supabase-from-env.ts +38 -0
- package/src/node/env/load-env.ts +67 -0
- package/src/node/env/project-root.ts +34 -0
- package/src/node/env/public-base-url.ts +18 -0
- package/src/node/env/require-env.ts +15 -0
- package/src/node/fs/json-state-store.ts +97 -0
- package/src/node/fs/read-source-file.ts +75 -0
- package/src/node/node-liveness.ts +80 -0
- package/src/node/node-runtime.base.ts +135 -104
- package/src/node/node.api.ts +11 -10
- package/src/node/node.interface.ts +1 -8
- package/src/node/node.utils.ts +1 -1
- package/src/node/preload/run-service-preload.ts +48 -0
- package/src/node/preload/service-preload.interface.ts +14 -0
- package/src/node/process/index.ts +8 -0
- package/src/node/process/managed-child-processes.ts +121 -0
- package/src/node/process/process-spawn.ts +61 -0
- package/src/node/readiness/index.ts +20 -0
- package/src/node/readiness/poll-until.ts +27 -0
- package/src/node/readiness/readiness-checks.ts +79 -0
- package/src/node/readiness/readiness.types.ts +13 -0
- package/src/node/readiness/run-readiness-checks.ts +20 -0
- package/src/node/readiness/service-ready-gate.ts +65 -0
- package/src/node.ts +138 -47
- package/src/parcel/chunk-fetch-registry.ts +96 -0
- package/src/parcel/chunk-url.utils.ts +30 -0
- package/src/parcel/parcel-manager.ts +431 -173
- package/src/parcel/parcel.api.ts +103 -0
- package/src/parcel/parcel.interface.ts +44 -23
- package/src/parcel/parcel.service.ts +79 -0
- package/src/parcel/storage-provider-registry.ts +49 -0
- package/src/parcel/storage-provider.types.ts +45 -0
- package/src/preload.ts +7 -0
- package/src/repo/repo-context.utils.ts +3 -4
- package/src/repo/repo-manager.ts +7 -20
- package/src/repo/repo.api.ts +5 -5
- package/src/repo/repo.interface.ts +1 -2
- package/src/repo/repo.script-loader.ts +4 -8
- package/src/service/base.interface.ts +81 -90
- package/src/service/index.ts +173 -0
- package/src/service/service.api.ts +294 -0
- package/src/service/service.interface.ts +49 -17
- package/src/shared/http/fetch-retry.ts +145 -0
- package/src/shared/log/create-logger.ts +51 -0
- package/src/shared/log/enable-log-persist.ts +225 -0
- package/src/shared/log/index.ts +19 -11
- package/src/shared/log/log-manager.ts +65 -69
- package/src/shared/log/log-persist-batch-id.ts +43 -0
- package/src/shared/log/log-persist-flush.ts +128 -0
- package/src/shared/log/log-persist-hook.ts +13 -0
- package/src/shared/log/log-persist-logger.ts +33 -0
- package/src/shared/log/log-persist-registry.ts +252 -0
- package/src/shared/log/log-persist.config.ts +97 -0
- package/src/shared/log/log-persist.interface.ts +132 -0
- package/src/shared/log/log-persist.ts +704 -0
- package/src/shared/log/log-scope.ts +46 -46
- package/src/shared/utils/config-path.utils.ts +1 -1
- package/src/shared/utils/fetch-url.ts +13 -0
- package/src/shared/utils/network-error.ts +152 -0
- package/src/shared/utils/safe-file-name.ts +37 -0
- package/src/shared/utils/sha256.ts +15 -0
- package/src/supabase.ts +125 -119
- package/src/task/index.ts +31 -34
- package/src/task/local-task-registry.ts +9 -17
- package/src/task/task-manager.ts +34 -35
- package/src/{node → task}/task-node.ts +91 -73
- package/src/task/task-post-validated.api.ts +47 -0
- package/src/task/task-post.api.ts +81 -98
- package/src/task/task-queue.ts +18 -0
- package/src/task/task-repo-context.ts +2 -1
- package/src/task/task-repo-validation.ts +6 -8
- package/src/task/task.api.ts +61 -25
- package/src/task/task.constant.ts +4 -0
- package/src/task/task.interface.ts +4 -7
- package/src/trigger/trigger-manager.ts +287 -0
- package/src/trigger/trigger-node.ts +80 -0
- package/src/trigger/trigger.api.ts +11 -11
- package/src/trigger/trigger.constant.ts +10 -0
- package/src/trigger/trigger.interface.ts +52 -2
- package/src/trigger/trigger.utils.ts +1 -1
- package/src/word/word.api.ts +28 -30
- package/src/word/word.interface.ts +3 -4
- package/dist/auth/auth.api.d.ts +0 -28
- package/dist/auth/auth.api.d.ts.map +0 -1
- package/dist/auth/auth.api.js +0 -51
- package/dist/auth/auth.api.js.map +0 -1
- package/dist/command/command.api.js +0 -58
- package/dist/command/command.api.js.map +0 -1
- package/dist/command/command.interface.js +0 -9
- package/dist/command/command.interface.js.map +0 -1
- package/dist/core.api.js +0 -412
- package/dist/core.api.js.map +0 -1
- package/dist/core.interface.js +0 -46
- package/dist/core.interface.js.map +0 -1
- package/dist/core.utils.js +0 -81
- package/dist/core.utils.js.map +0 -1
- package/dist/feed/feed.interface.d.ts +0 -27
- package/dist/feed/feed.interface.d.ts.map +0 -1
- package/dist/feed/feed.interface.js +0 -17
- package/dist/feed/feed.interface.js.map +0 -1
- package/dist/file/file-manager.d.ts +0 -24
- package/dist/file/file-manager.d.ts.map +0 -1
- package/dist/file/file-manager.js +0 -109
- package/dist/file/file-manager.js.map +0 -1
- package/dist/file/file.api.d.ts +0 -15
- package/dist/file/file.api.d.ts.map +0 -1
- package/dist/file/file.api.js +0 -30
- package/dist/file/file.api.js.map +0 -1
- package/dist/file/file.interface.d.ts +0 -25
- package/dist/file/file.interface.d.ts.map +0 -1
- package/dist/file/file.interface.js +0 -9
- package/dist/file/file.interface.js.map +0 -1
- package/dist/file-list/file-list.api.d.ts +0 -15
- package/dist/file-list/file-list.api.d.ts.map +0 -1
- package/dist/file-list/file-list.api.js +0 -54
- package/dist/file-list/file-list.api.js.map +0 -1
- package/dist/file-list/file-list.interface.d.ts +0 -22
- package/dist/file-list/file-list.interface.d.ts.map +0 -1
- package/dist/file-list/file-list.interface.js +0 -5
- package/dist/file-list/file-list.interface.js.map +0 -1
- package/dist/idea/idea.interface.js +0 -15
- package/dist/idea/idea.interface.js.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/link/link.api.js +0 -30
- package/dist/link/link.api.js.map +0 -1
- package/dist/link/link.interface.js +0 -7
- package/dist/link/link.interface.js.map +0 -1
- package/dist/list/list.api.js +0 -30
- package/dist/list/list.api.js.map +0 -1
- package/dist/list/list.interface.js +0 -6
- package/dist/list/list.interface.js.map +0 -1
- package/dist/node/node-log-scope.d.ts +0 -11
- package/dist/node/node-log-scope.d.ts.map +0 -1
- package/dist/node/node-log-scope.js +0 -7
- package/dist/node/node-log-scope.js.map +0 -1
- package/dist/node/node-runtime.base.js +0 -397
- package/dist/node/node-runtime.base.js.map +0 -1
- package/dist/node/node-task.preset.d.ts +0 -1
- package/dist/node/node-task.preset.d.ts.map +0 -1
- package/dist/node/node-task.preset.js +0 -14
- package/dist/node/node-task.preset.js.map +0 -1
- package/dist/node/node.api.js +0 -100
- package/dist/node/node.api.js.map +0 -1
- package/dist/node/node.interface.js +0 -19
- package/dist/node/node.interface.js.map +0 -1
- package/dist/node/node.utils.js +0 -36
- package/dist/node/node.utils.js.map +0 -1
- package/dist/node/task-node.d.ts.map +0 -1
- package/dist/node/task-node.js +0 -245
- package/dist/node/task-node.js.map +0 -1
- package/dist/node/trigger-node.d.ts +0 -18
- package/dist/node/trigger-node.d.ts.map +0 -1
- package/dist/node/trigger-node.js +0 -150
- package/dist/node/trigger-node.js.map +0 -1
- package/dist/parcel/parcel-manager.js +0 -156
- package/dist/parcel/parcel-manager.js.map +0 -1
- package/dist/parcel/parcel.interface.js +0 -11
- package/dist/parcel/parcel.interface.js.map +0 -1
- package/dist/question-list/question-list.api.d.ts +0 -13
- package/dist/question-list/question-list.api.d.ts.map +0 -1
- package/dist/question-list/question-list.api.js +0 -35
- package/dist/question-list/question-list.api.js.map +0 -1
- package/dist/question-list/question-list.interface.d.ts +0 -18
- package/dist/question-list/question-list.interface.d.ts.map +0 -1
- package/dist/question-list/question-list.interface.js +0 -5
- package/dist/question-list/question-list.interface.js.map +0 -1
- package/dist/repo/repo-context.utils.js +0 -81
- package/dist/repo/repo-context.utils.js.map +0 -1
- package/dist/repo/repo-manager.js +0 -166
- package/dist/repo/repo-manager.js.map +0 -1
- package/dist/repo/repo.api.js +0 -40
- package/dist/repo/repo.api.js.map +0 -1
- package/dist/repo/repo.interface.js +0 -8
- package/dist/repo/repo.interface.js.map +0 -1
- package/dist/repo/repo.script-loader.js +0 -108
- package/dist/repo/repo.script-loader.js.map +0 -1
- package/dist/review/review.api.d.ts +0 -14
- package/dist/review/review.api.d.ts.map +0 -1
- package/dist/review/review.api.js +0 -133
- package/dist/review/review.api.js.map +0 -1
- package/dist/review/review.interface.d.ts +0 -24
- package/dist/review/review.interface.d.ts.map +0 -1
- package/dist/review/review.interface.js +0 -10
- package/dist/review/review.interface.js.map +0 -1
- package/dist/review-v2/apis/post-review-setting.api.d.ts +0 -12
- package/dist/review-v2/apis/post-review-setting.api.d.ts.map +0 -1
- package/dist/review-v2/apis/post-review-setting.api.js +0 -27
- package/dist/review-v2/apis/post-review-setting.api.js.map +0 -1
- package/dist/review-v2/apis/post-review.api.d.ts +0 -13
- package/dist/review-v2/apis/post-review.api.d.ts.map +0 -1
- package/dist/review-v2/apis/post-review.api.js +0 -46
- package/dist/review-v2/apis/post-review.api.js.map +0 -1
- package/dist/review-v2/review-setting.interface.d.ts +0 -23
- package/dist/review-v2/review-setting.interface.d.ts.map +0 -1
- package/dist/review-v2/review-setting.interface.js +0 -5
- package/dist/review-v2/review-setting.interface.js.map +0 -1
- package/dist/review-v2/review.interface.d.ts +0 -20
- package/dist/review-v2/review.interface.d.ts.map +0 -1
- package/dist/review-v2/review.interface.js +0 -5
- package/dist/review-v2/review.interface.js.map +0 -1
- package/dist/service/api.interface.d.ts +0 -35
- package/dist/service/api.interface.d.ts.map +0 -1
- package/dist/service/api.interface.js +0 -12
- package/dist/service/api.interface.js.map +0 -1
- package/dist/service/base.interface.js +0 -7
- package/dist/service/base.interface.js.map +0 -1
- package/dist/service/service.interface.js +0 -11
- package/dist/service/service.interface.js.map +0 -1
- package/dist/shared/log/create-api-logger.d.ts +0 -21
- package/dist/shared/log/create-api-logger.d.ts.map +0 -1
- package/dist/shared/log/create-api-logger.js +0 -19
- package/dist/shared/log/create-api-logger.js.map +0 -1
- package/dist/shared/log/index.js +0 -10
- package/dist/shared/log/index.js.map +0 -1
- package/dist/shared/log/log-manager.js +0 -237
- package/dist/shared/log/log-manager.js.map +0 -1
- package/dist/shared/log/log-scope.js +0 -70
- package/dist/shared/log/log-scope.js.map +0 -1
- package/dist/shared/utils/config-path.utils.js +0 -85
- package/dist/shared/utils/config-path.utils.js.map +0 -1
- package/dist/shared/utils/error.utils.js +0 -15
- package/dist/shared/utils/error.utils.js.map +0 -1
- package/dist/shared/utils/id.utils.js +0 -5
- package/dist/shared/utils/id.utils.js.map +0 -1
- package/dist/supabase.js +0 -100
- package/dist/supabase.js.map +0 -1
- package/dist/task/index.js +0 -14
- package/dist/task/index.js.map +0 -1
- package/dist/task/local-task-registry.js +0 -214
- package/dist/task/local-task-registry.js.map +0 -1
- package/dist/task/task-manager.js +0 -196
- package/dist/task/task-manager.js.map +0 -1
- package/dist/task/task-post.api.js +0 -91
- package/dist/task/task-post.api.js.map +0 -1
- package/dist/task/task-repo-context.js +0 -12
- package/dist/task/task-repo-context.js.map +0 -1
- package/dist/task/task-repo-validation.js +0 -96
- package/dist/task/task-repo-validation.js.map +0 -1
- package/dist/task/task.api.js +0 -303
- package/dist/task/task.api.js.map +0 -1
- package/dist/task/task.interface.js +0 -36
- package/dist/task/task.interface.js.map +0 -1
- package/dist/task/task.utils.js +0 -2
- package/dist/task/task.utils.js.map +0 -1
- package/dist/trigger/trigger.api.js +0 -125
- package/dist/trigger/trigger.api.js.map +0 -1
- package/dist/trigger/trigger.interface.js +0 -11
- package/dist/trigger/trigger.interface.js.map +0 -1
- package/dist/trigger/trigger.utils.js +0 -39
- package/dist/trigger/trigger.utils.js.map +0 -1
- package/dist/word/word.api.js +0 -30
- package/dist/word/word.api.js.map +0 -1
- package/dist/word/word.interface.js +0 -6
- package/dist/word/word.interface.js.map +0 -1
- package/src/auth/auth.api.ts +0 -87
- package/src/feed/feed.interface.ts +0 -33
- package/src/file/file-manager.ts +0 -145
- package/src/file/file.api.ts +0 -43
- package/src/file/file.interface.ts +0 -30
- package/src/file-list/file-list.api.ts +0 -64
- package/src/file-list/file-list.interface.ts +0 -24
- package/src/node/node-log-scope.ts +0 -15
- package/src/node/node-task.preset.ts +0 -13
- package/src/node/trigger-node.ts +0 -180
- package/src/question-list/question-list.api.ts +0 -42
- package/src/question-list/question-list.interface.ts +0 -21
- package/src/review/review.api.ts +0 -145
- package/src/review/review.interface.ts +0 -26
- package/src/review-v2/apis/post-review-setting.api.ts +0 -35
- package/src/review-v2/apis/post-review.api.ts +0 -59
- package/src/review-v2/review-setting.interface.ts +0 -26
- package/src/review-v2/review.interface.ts +0 -23
- package/src/service/api.interface.ts +0 -47
- package/src/shared/log/create-api-logger.ts +0 -36
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createTarget, deleteTarget, getTarget, validateWithSchema } from "../core.api";
|
|
3
|
+
import { CategoryParcel, type Parcel, type ParcelDetails } from "./parcel.interface";
|
|
4
|
+
|
|
5
|
+
const parcelIdSchema = z.string().trim().min(1);
|
|
6
|
+
|
|
7
|
+
const chunkSchema = z.object({
|
|
8
|
+
index: z.number().int().nonnegative(),
|
|
9
|
+
size: z.number().int().nonnegative(),
|
|
10
|
+
checksum: z.string().trim().min(1),
|
|
11
|
+
url: z.string().trim().min(1),
|
|
12
|
+
provider: z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const parcelCryptoSchema = z.object({
|
|
16
|
+
enabled: z.boolean(),
|
|
17
|
+
algorithm: z.string().optional(),
|
|
18
|
+
iv: z.string().optional(),
|
|
19
|
+
keyDerivation: z.string().optional(),
|
|
20
|
+
salt: z.string().optional(),
|
|
21
|
+
pbkdf2Iterations: z.number().int().positive().optional(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const parcelDetailsSchema = z.object({
|
|
25
|
+
manifestVersion: z.number().int().nonnegative(),
|
|
26
|
+
chunkList: z.array(chunkSchema).min(1),
|
|
27
|
+
checksum: z.string().trim().min(1),
|
|
28
|
+
size: z.number().int().nonnegative(),
|
|
29
|
+
preview: z.string().optional(),
|
|
30
|
+
crypto: parcelCryptoSchema.optional(),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export const postParcelSchema = z.object({
|
|
34
|
+
name: z.string().trim().min(1),
|
|
35
|
+
value: z.string().trim().min(1),
|
|
36
|
+
details: parcelDetailsSchema,
|
|
37
|
+
tagList: z.array(z.string()).optional().default([]),
|
|
38
|
+
extra: z.string().optional(),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export type PostParcelPayload = z.infer<typeof postParcelSchema>;
|
|
42
|
+
|
|
43
|
+
export const getParcelSchema = z.object({
|
|
44
|
+
id: parcelIdSchema,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export type GetParcelPayload = z.infer<typeof getParcelSchema>;
|
|
48
|
+
|
|
49
|
+
export const deleteParcelSchema = z.object({
|
|
50
|
+
id: parcelIdSchema,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export type DeleteParcelPayload = z.infer<typeof deleteParcelSchema>;
|
|
54
|
+
|
|
55
|
+
const parcelCategoryFilter = {
|
|
56
|
+
field: "category",
|
|
57
|
+
operator: "eq" as const,
|
|
58
|
+
value: CategoryParcel.PARCEL,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** Persist a Parcel row (`category=parcel`) after chunks are uploaded via {@link ParcelManager.save}. */
|
|
62
|
+
export const postParcel = validateWithSchema(
|
|
63
|
+
postParcelSchema,
|
|
64
|
+
"postParcelSchema",
|
|
65
|
+
)(async ({ name, value, details, tagList, extra }) => {
|
|
66
|
+
return createTarget<Parcel, PostParcelPayload>({
|
|
67
|
+
payload: { name, value, details, tagList, extra },
|
|
68
|
+
createFn: () => ({
|
|
69
|
+
name,
|
|
70
|
+
value,
|
|
71
|
+
category: CategoryParcel.PARCEL,
|
|
72
|
+
tagList,
|
|
73
|
+
extra,
|
|
74
|
+
details: details as ParcelDetails,
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
/** Fetch a Parcel by id (`category=parcel`). */
|
|
80
|
+
export const getParcel = validateWithSchema(
|
|
81
|
+
getParcelSchema,
|
|
82
|
+
"getParcelSchema",
|
|
83
|
+
)(async ({ id }) => {
|
|
84
|
+
const result = await getTarget({
|
|
85
|
+
id,
|
|
86
|
+
filterList: [parcelCategoryFilter],
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
...result,
|
|
90
|
+
data: result.data as Parcel,
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/** Delete a Parcel row by id (`category=parcel`). Does not remove chunk blobs from storage providers. */
|
|
95
|
+
export const deleteParcel = validateWithSchema(
|
|
96
|
+
deleteParcelSchema,
|
|
97
|
+
"deleteParcelSchema",
|
|
98
|
+
)(async ({ id }) => {
|
|
99
|
+
return deleteTarget({
|
|
100
|
+
id,
|
|
101
|
+
filterList: [parcelCategoryFilter],
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -1,40 +1,61 @@
|
|
|
1
|
-
import { Target } from "../core.interface";
|
|
1
|
+
import type { Target } from "../core.interface";
|
|
2
|
+
|
|
3
|
+
export enum CategoryParcel {
|
|
4
|
+
PARCEL = "parcel",
|
|
5
|
+
}
|
|
2
6
|
|
|
3
7
|
export interface Parcel extends Target {
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
/** Human readable name */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Used to search the parcel, should be unique */
|
|
11
|
+
value: string;
|
|
12
|
+
category: CategoryParcel;
|
|
13
|
+
details: ParcelDetails;
|
|
6
14
|
}
|
|
7
15
|
|
|
8
|
-
export
|
|
9
|
-
|
|
16
|
+
export interface ParcelCrypto {
|
|
17
|
+
/** 未設置或 false → 明文分片 */
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
/** 例如 "AES-GCM-256";enabled 時必填 */
|
|
20
|
+
algorithm?: string;
|
|
21
|
+
/** Base64 IV;AES-GCM 時必填 */
|
|
22
|
+
iv?: string;
|
|
23
|
+
/** 口令派生密鑰時的 KDF,例如 "PBKDF2-SHA256" */
|
|
24
|
+
keyDerivation?: string;
|
|
25
|
+
/** PBKDF2 salt(Base64);keyDerivation 為 PBKDF2 時必填 */
|
|
26
|
+
salt?: string;
|
|
27
|
+
/** PBKDF2 迭代次數;未設置時由 SDK 默認 */
|
|
28
|
+
pbkdf2Iterations?: number;
|
|
10
29
|
}
|
|
11
30
|
|
|
12
31
|
export interface ParcelDetails {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
32
|
+
manifestVersion: number;
|
|
33
|
+
chunkList: Chunk[];
|
|
34
|
+
/** 還原後的明文 sha256 */
|
|
35
|
+
checksum: string;
|
|
36
|
+
/** 還原後的明文大小(字節) */
|
|
37
|
+
size: number;
|
|
38
|
+
preview?: string;
|
|
39
|
+
crypto?: ParcelCrypto;
|
|
18
40
|
}
|
|
19
41
|
|
|
20
42
|
export enum LifecycleStatus {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
43
|
+
STORED = "STORED",
|
|
44
|
+
SOFT_DELETED = "SOFT_DELETED",
|
|
45
|
+
HARD_DELETED = "HARD_DELETED",
|
|
24
46
|
}
|
|
25
47
|
|
|
26
48
|
export interface Lifecycle {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
49
|
+
status: LifecycleStatus;
|
|
50
|
+
storedAt: string;
|
|
51
|
+
softDeletedAt: string | null;
|
|
52
|
+
hardDeletedAt: string | null;
|
|
31
53
|
}
|
|
32
54
|
|
|
33
55
|
export interface Chunk {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
url: string;
|
|
56
|
+
index: number;
|
|
57
|
+
size: number;
|
|
58
|
+
checksum: string; // 該 chunk 字節的 sha256(明文或密文,與 create 時一致)
|
|
59
|
+
url: string;
|
|
60
|
+
provider?: string; // 對應 StorageAdapter / 平台標識(呼應 TODO shardKey)
|
|
40
61
|
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { SupabaseResponse } from "../core.interface";
|
|
2
|
+
import { getParcel, postParcel } from "./parcel.api";
|
|
3
|
+
import type { Parcel } from "./parcel.interface";
|
|
4
|
+
import { type CreateOptions, ParcelManager, type ReassembleOptions, type StorageAdapter } from "./parcel-manager";
|
|
5
|
+
|
|
6
|
+
export interface PublishParcelInput {
|
|
7
|
+
file: ArrayBuffer;
|
|
8
|
+
adapters: StorageAdapter[];
|
|
9
|
+
name: string;
|
|
10
|
+
value: string;
|
|
11
|
+
tagList?: string[];
|
|
12
|
+
extra?: string;
|
|
13
|
+
createOptions?: CreateOptions;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface PublishParcelResult {
|
|
17
|
+
parcel: Parcel;
|
|
18
|
+
/** Present when encrypted without passphrase — caller must persist outside Supabase */
|
|
19
|
+
key?: CryptoKey;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface RestoreParcelByIdInput {
|
|
23
|
+
id: string;
|
|
24
|
+
reassembleOptions?: ReassembleOptions;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface RestoreParcelByIdResult {
|
|
28
|
+
parcel: Parcel;
|
|
29
|
+
file: ArrayBuffer;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function requireResponseData<T>(response: SupabaseResponse<T>, label: string): T {
|
|
33
|
+
if (response.data == null) {
|
|
34
|
+
const suffix = response.message != null ? ` (${response.message})` : "";
|
|
35
|
+
throw new Error(`${label}: no data${suffix}`);
|
|
36
|
+
}
|
|
37
|
+
return response.data;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* One-shot publish: split (optional encrypt) → upload chunks → persist Parcel row.
|
|
42
|
+
* Orchestrates {@link ParcelManager} + {@link postParcel}.
|
|
43
|
+
*/
|
|
44
|
+
export async function publishParcel(input: PublishParcelInput): Promise<PublishParcelResult> {
|
|
45
|
+
const { file, adapters, name, value, tagList = [], extra, createOptions } = input;
|
|
46
|
+
|
|
47
|
+
const createResult = await ParcelManager.create(file, createOptions ?? {});
|
|
48
|
+
const draft = await ParcelManager.save(createResult, adapters, { name, value, tagList });
|
|
49
|
+
|
|
50
|
+
const response = await postParcel({
|
|
51
|
+
name: draft.name,
|
|
52
|
+
value: draft.value,
|
|
53
|
+
details: draft.details,
|
|
54
|
+
tagList: draft.tagList ?? [],
|
|
55
|
+
extra,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
parcel: requireResponseData(response, "postParcel"),
|
|
60
|
+
key: createResult.key,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Reassemble file bytes from a {@link Parcel} (chunk URLs in details).
|
|
66
|
+
*/
|
|
67
|
+
export async function restoreParcel(parcel: Parcel, reassembleOptions?: ReassembleOptions): Promise<ArrayBuffer> {
|
|
68
|
+
return ParcelManager.reassemble(parcel, reassembleOptions ?? {});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Fetch Parcel by id, then reassemble. Orchestrates {@link getParcel} + {@link restoreParcel}.
|
|
73
|
+
*/
|
|
74
|
+
export async function restoreParcelById(input: RestoreParcelByIdInput): Promise<RestoreParcelByIdResult> {
|
|
75
|
+
const response = await getParcel({ id: input.id });
|
|
76
|
+
const parcel = requireResponseData(response, "getParcel");
|
|
77
|
+
const file = await restoreParcel(parcel, input.reassembleOptions);
|
|
78
|
+
return { parcel, file };
|
|
79
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { registerProviderChunkResolver } from "./chunk-fetch-registry";
|
|
2
|
+
import type { ProviderProbeResult, StorageProviderModule } from "./storage-provider.types";
|
|
3
|
+
|
|
4
|
+
export type ProviderProbeMap = Record<string, ProviderProbeResult | { ok: true; detail: { skipped: true } }>;
|
|
5
|
+
|
|
6
|
+
export interface StorageProviderRegistry {
|
|
7
|
+
register(module: StorageProviderModule): void;
|
|
8
|
+
get(provider: string): StorageProviderModule;
|
|
9
|
+
has(provider: string): boolean;
|
|
10
|
+
list(): string[];
|
|
11
|
+
probeAll(): Promise<ProviderProbeMap>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** In-process registry for {@link StorageProviderModule}; syncs chunk resolvers on register. */
|
|
15
|
+
export function createStorageProviderRegistry(): StorageProviderRegistry {
|
|
16
|
+
const modules = new Map<string, StorageProviderModule>();
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
register(module) {
|
|
20
|
+
modules.set(module.provider, module);
|
|
21
|
+
registerProviderChunkResolver(module);
|
|
22
|
+
},
|
|
23
|
+
get(provider) {
|
|
24
|
+
const found = modules.get(provider);
|
|
25
|
+
if (found == null) {
|
|
26
|
+
const available = [...modules.keys()].join(", ") || "(none)";
|
|
27
|
+
throw new Error(`Unknown storage provider: ${provider}. Registered: ${available}`);
|
|
28
|
+
}
|
|
29
|
+
return found;
|
|
30
|
+
},
|
|
31
|
+
has(provider) {
|
|
32
|
+
return modules.has(provider);
|
|
33
|
+
},
|
|
34
|
+
list() {
|
|
35
|
+
return [...modules.keys()];
|
|
36
|
+
},
|
|
37
|
+
async probeAll() {
|
|
38
|
+
const out: ProviderProbeMap = {};
|
|
39
|
+
for (const [name, module] of modules) {
|
|
40
|
+
if (module.probe == null) {
|
|
41
|
+
out[name] = { ok: true, detail: { skipped: true } };
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
out[name] = await module.probe();
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ChunkResolveProvider } from "./chunk-fetch-registry";
|
|
2
|
+
import type { Parcel } from "./parcel.interface";
|
|
3
|
+
import type { StorageAdapter } from "./parcel-manager";
|
|
4
|
+
|
|
5
|
+
export interface ProviderProbeOk {
|
|
6
|
+
ok: true;
|
|
7
|
+
detail?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ProviderProbeFail {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type ProviderProbeResult = ProviderProbeOk | ProviderProbeFail;
|
|
16
|
+
|
|
17
|
+
/** Best-effort rollback of partial uploads. */
|
|
18
|
+
export interface UploadTracker<THandle> {
|
|
19
|
+
readonly handles: THandle[];
|
|
20
|
+
push(handle: THandle): void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface CreateUploadAdapterOptions {
|
|
24
|
+
/** Collect rollback handles during upload (partial-failure cleanup). */
|
|
25
|
+
tracker?: UploadTracker<unknown>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Full storage backend module: upload, restore, probe, rollback. */
|
|
29
|
+
export interface StorageProviderModule extends ChunkResolveProvider {
|
|
30
|
+
createUploadAdapter(options?: CreateUploadAdapterOptions): StorageAdapter;
|
|
31
|
+
probe?(): Promise<ProviderProbeResult>;
|
|
32
|
+
rollbackUpload?(handles: unknown[]): Promise<void>;
|
|
33
|
+
/** Validate parcel before restore (provider mix, missing chunks). */
|
|
34
|
+
assertParcelRestorable?(parcel: Parcel): void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function createUploadTracker<THandle>(): UploadTracker<THandle> {
|
|
38
|
+
const handles: THandle[] = [];
|
|
39
|
+
return {
|
|
40
|
+
handles,
|
|
41
|
+
push(handle: THandle) {
|
|
42
|
+
handles.push(handle);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
package/src/preload.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node `--import` entry — `target-supabase-sdk/preload`
|
|
3
|
+
* @see .cursor/skills/service-preload/SKILL.md
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export { runServicePreload } from "./node/preload/run-service-preload";
|
|
7
|
+
export type { ServicePreloadOptions } from "./node/preload/service-preload.interface";
|
|
@@ -31,15 +31,14 @@ export function isTaskRepoContext(value: unknown): value is TaskRepoContext {
|
|
|
31
31
|
export function normalizeRepoContextModule(
|
|
32
32
|
moduleExports: unknown,
|
|
33
33
|
taskTypeKey: string,
|
|
34
|
-
exportName?: string
|
|
34
|
+
exportName?: string,
|
|
35
35
|
): TaskRepoContext | null {
|
|
36
36
|
if (moduleExports == null) {
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const record = moduleExports as Record<string, unknown>;
|
|
41
|
-
const namedExport =
|
|
42
|
-
exportName != null && exportName !== "" ? record[exportName] : undefined;
|
|
41
|
+
const namedExport = exportName != null && exportName !== "" ? record[exportName] : undefined;
|
|
43
42
|
const defaultExport = record.default;
|
|
44
43
|
const candidate = namedExport ?? defaultExport ?? moduleExports;
|
|
45
44
|
|
|
@@ -103,7 +102,7 @@ export function getScriptLoadKey(script: TaskRepoScriptRecord): string {
|
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
export function assertScriptLoadable(
|
|
106
|
-
details: TaskRepoScriptDetails
|
|
105
|
+
details: TaskRepoScriptDetails,
|
|
107
106
|
): details is TaskRepoScriptDetails & ({ source: string } | { modulePath: string }) {
|
|
108
107
|
const hasSource = details.source != null && details.source.trim() !== "";
|
|
109
108
|
const hasModulePath = details.modulePath != null && details.modulePath.trim() !== "";
|
package/src/repo/repo-manager.ts
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import { getPossibleTarget } from "../core.api";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { LoggerWithScope } from "../shared/log";
|
|
3
|
+
import { supabase } from "../supabase";
|
|
4
4
|
import type { TaskRepoContext, TaskRepoScriptRecord } from "../task/task-repo-context";
|
|
5
5
|
import { TASK_REPO_SCRIPT_CATEGORY } from "../task/task-repo-context";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
pickEntryScript,
|
|
10
|
-
} from "./repo-context.utils";
|
|
11
|
-
import { CategoryRepo, Repo } from "./repo.interface";
|
|
12
|
-
import {
|
|
13
|
-
clearRepoScriptModuleCache,
|
|
14
|
-
loadRepoContextFromScript,
|
|
15
|
-
loadRepoContextFromUrl,
|
|
16
|
-
} from "./repo.script-loader";
|
|
17
|
-
|
|
18
|
-
const supabase = SupabaseInitializer.getInstance();
|
|
6
|
+
import { CategoryRepo, type Repo } from "./repo.interface";
|
|
7
|
+
import { clearRepoScriptModuleCache, loadRepoContextFromScript, loadRepoContextFromUrl } from "./repo.script-loader";
|
|
8
|
+
import { assertScriptLoadable, isTaskRepoContext, pickEntryScript } from "./repo-context.utils";
|
|
19
9
|
|
|
20
10
|
type LocalRepoEntry =
|
|
21
11
|
| { kind: "context"; context: TaskRepoContext }
|
|
@@ -82,7 +72,7 @@ async function fetchRemoteScripts(taskTypeKey: string): Promise<TaskRepoScriptRe
|
|
|
82
72
|
async function loadLocalEntry(
|
|
83
73
|
logger: LoggerWithScope,
|
|
84
74
|
entry: LocalRepoEntry,
|
|
85
|
-
taskTypeKey: string
|
|
75
|
+
taskTypeKey: string,
|
|
86
76
|
): Promise<TaskRepoContext | null> {
|
|
87
77
|
if (entry.kind === "context") {
|
|
88
78
|
return entry.context;
|
|
@@ -105,10 +95,7 @@ async function loadLocalEntry(
|
|
|
105
95
|
return loaded?.context ?? null;
|
|
106
96
|
}
|
|
107
97
|
|
|
108
|
-
async function loadRemoteRepoContext(
|
|
109
|
-
logger: LoggerWithScope,
|
|
110
|
-
taskTypeKey: string
|
|
111
|
-
): Promise<GetRepoContextResult> {
|
|
98
|
+
async function loadRemoteRepoContext(logger: LoggerWithScope, taskTypeKey: string): Promise<GetRepoContextResult> {
|
|
112
99
|
logger.info("從 Supabase 加載 Repo", { topic: "repo", data: { taskTypeKey } });
|
|
113
100
|
|
|
114
101
|
const remoteRepo = await fetchRemoteRepo(taskTypeKey);
|
package/src/repo/repo.api.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { scanTargetList, validateWithSchema } from "../core.api";
|
|
2
|
-
import { generateResponse, SupabaseResponse } from "../core.interface";
|
|
3
1
|
import { z } from "zod";
|
|
4
|
-
import {
|
|
2
|
+
import { scanTargetList, validateWithSchema } from "../core.api";
|
|
3
|
+
import { generateResponse, type SupabaseResponse } from "../core.interface";
|
|
4
|
+
import { CategoryRepo, type Repo } from "./repo.interface";
|
|
5
5
|
|
|
6
6
|
const REPO_USAGE_FIELD = "details->>usage" as const;
|
|
7
7
|
|
|
@@ -16,7 +16,7 @@ export type GetScanRemoteRepoValuesPayload = z.infer<typeof getScanRemoteRepoVal
|
|
|
16
16
|
* Returns `{ data: string[] }` on success; validation and DB failures use `{ error }` (never throws).
|
|
17
17
|
*/
|
|
18
18
|
export const getScanRemoteRepoValues = async (
|
|
19
|
-
payload: GetScanRemoteRepoValuesPayload
|
|
19
|
+
payload: GetScanRemoteRepoValuesPayload,
|
|
20
20
|
): Promise<SupabaseResponse<string[]>> => {
|
|
21
21
|
try {
|
|
22
22
|
return await getScanRemoteRepoValuesValidated(payload);
|
|
@@ -28,7 +28,7 @@ export const getScanRemoteRepoValues = async (
|
|
|
28
28
|
|
|
29
29
|
const getScanRemoteRepoValuesValidated = validateWithSchema(
|
|
30
30
|
getScanRemoteRepoValuesSchema,
|
|
31
|
-
"getScanRemoteRepoValuesSchema"
|
|
31
|
+
"getScanRemoteRepoValuesSchema",
|
|
32
32
|
)(async ({ usage }): Promise<SupabaseResponse<string[]>> => {
|
|
33
33
|
try {
|
|
34
34
|
const { data } = await scanTargetList<Repo>({
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
-
import { join, resolve } from "node:path";
|
|
4
3
|
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
|
|
6
|
-
import { LoggerWithScope } from "../shared/log";
|
|
6
|
+
import type { LoggerWithScope } from "../shared/log";
|
|
7
7
|
import { resolvePathFromCwd, toFileImportHref } from "../shared/utils/config-path.utils";
|
|
8
|
-
import { TaskRepoScriptRecord } from "../task/task-repo-context";
|
|
9
|
-
import {
|
|
10
|
-
getScriptLoadKey,
|
|
11
|
-
LoadedRepoContext,
|
|
12
|
-
normalizeRepoContextModule,
|
|
13
|
-
} from "./repo-context.utils";
|
|
8
|
+
import type { TaskRepoScriptRecord } from "../task/task-repo-context";
|
|
9
|
+
import { getScriptLoadKey, type LoadedRepoContext, normalizeRepoContextModule } from "./repo-context.utils";
|
|
14
10
|
|
|
15
11
|
const importedModuleCache = new Map<string, LoadedRepoContext>();
|
|
16
12
|
|
|
@@ -1,97 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
DEPRECATED = "DEPRECATED",
|
|
6
|
-
SUNSET = "SUNSET",
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface Lifecycle {
|
|
10
|
-
status: LifecycleStatus;
|
|
11
|
-
/** YYYY-MM-DD */
|
|
12
|
-
activeSince: string;
|
|
13
|
-
deprecatedAt: string | null;
|
|
14
|
-
sunsetAt: string | null;
|
|
1
|
+
export enum ServiceLifecycleStatus {
|
|
2
|
+
ACTIVE = "ACTIVE",
|
|
3
|
+
DEPRECATED = "DEPRECATED",
|
|
4
|
+
SUNSET = "SUNSET",
|
|
15
5
|
}
|
|
16
6
|
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
minLength: number;
|
|
24
|
-
/** 64 */
|
|
25
|
-
maxLength: number;
|
|
26
|
-
/** ^[a-z0-9_-]+$ */
|
|
27
|
-
pattern: string;
|
|
28
|
-
}
|
|
29
|
-
| {
|
|
30
|
-
type: "number";
|
|
31
|
-
nullable: boolean;
|
|
32
|
-
required: boolean;
|
|
33
|
-
/** 1 */
|
|
34
|
-
minimum: number;
|
|
35
|
-
/** 64 */
|
|
36
|
-
maximum: number;
|
|
37
|
-
}
|
|
38
|
-
| {
|
|
39
|
-
type: "boolean";
|
|
40
|
-
nullable: boolean;
|
|
41
|
-
required: boolean;
|
|
42
|
-
}
|
|
43
|
-
| {
|
|
44
|
-
type: "enum";
|
|
45
|
-
nullable: boolean;
|
|
46
|
-
required: boolean;
|
|
47
|
-
/** 'core.Gender.0' */
|
|
48
|
-
enumKey: string;
|
|
49
|
-
}
|
|
50
|
-
| {
|
|
51
|
-
type: "array";
|
|
52
|
-
nullable: boolean;
|
|
53
|
-
required: boolean;
|
|
54
|
-
/** 'string'|'number'|'boolean'|'enum.enumKey'|'ref.refKey' */
|
|
55
|
-
itemType: string;
|
|
56
|
-
}
|
|
57
|
-
| {
|
|
58
|
-
/** Object */
|
|
59
|
-
type: "ref";
|
|
60
|
-
nullable: boolean;
|
|
61
|
-
required: boolean;
|
|
62
|
-
/** 'core.QuestionReview.0' */
|
|
63
|
-
refKey: string;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
export interface TargetDescriptor extends Target {
|
|
68
|
-
/** "core.QuestionReview.0" 唯一键 领域 + targetName + VERSION */
|
|
69
|
-
value: string;
|
|
70
|
-
category: 'target-descriptor';
|
|
71
|
-
details: TargetDescriptorDetails;
|
|
7
|
+
export interface ServiceLifecycle {
|
|
8
|
+
status: ServiceLifecycleStatus;
|
|
9
|
+
/** YYYY-MM-DD */
|
|
10
|
+
activeSince: string;
|
|
11
|
+
deprecatedAt: string | null;
|
|
12
|
+
sunsetAt: string | null;
|
|
72
13
|
}
|
|
73
14
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
name: string;
|
|
77
|
-
} & Field>;
|
|
78
|
-
refMap?: Record<string, TargetDescriptor>;
|
|
79
|
-
enumMap?: Record<string, string[]>;
|
|
80
|
-
manifestVersion: number;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export interface EnumDescriptor extends Target {
|
|
84
|
-
/** "core.Gender.0" 唯一键 领域 + enumName + VERSION */
|
|
85
|
-
value: string;
|
|
86
|
-
category: 'target-descriptor';
|
|
87
|
-
details: EnumDescriptorDetails;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface EnumDescriptorDetails {
|
|
91
|
-
list: Array<{
|
|
15
|
+
/** Inline enum members (no registry lookup). */
|
|
16
|
+
export type EnumMembers = ReadonlyArray<{
|
|
92
17
|
key: string;
|
|
93
18
|
value: string;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
19
|
+
}>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Schema node without a field name — used for array items and anonymous nesting.
|
|
23
|
+
* Named properties use {@link FieldDefinition} (`fieldName` + `SchemaDefinition`).
|
|
24
|
+
*/
|
|
25
|
+
export type SchemaDefinition =
|
|
26
|
+
| {
|
|
27
|
+
type: "string";
|
|
28
|
+
nullable: boolean;
|
|
29
|
+
optional: boolean;
|
|
30
|
+
/** string length */
|
|
31
|
+
min?: number;
|
|
32
|
+
/** string length */
|
|
33
|
+
max?: number;
|
|
34
|
+
/** e.g. ^[a-z0-9_-]+$ */
|
|
35
|
+
regex?: string;
|
|
36
|
+
default?: string;
|
|
37
|
+
}
|
|
38
|
+
| {
|
|
39
|
+
type: "number";
|
|
40
|
+
nullable: boolean;
|
|
41
|
+
optional: boolean;
|
|
42
|
+
min?: number;
|
|
43
|
+
max?: number;
|
|
44
|
+
default?: number;
|
|
45
|
+
}
|
|
46
|
+
| {
|
|
47
|
+
type: "boolean";
|
|
48
|
+
nullable: boolean;
|
|
49
|
+
optional: boolean;
|
|
50
|
+
default?: boolean;
|
|
51
|
+
}
|
|
52
|
+
| {
|
|
53
|
+
type: "unknown";
|
|
54
|
+
nullable: boolean;
|
|
55
|
+
optional: boolean;
|
|
56
|
+
default?: unknown;
|
|
57
|
+
}
|
|
58
|
+
| {
|
|
59
|
+
type: "enum";
|
|
60
|
+
nullable: boolean;
|
|
61
|
+
optional: boolean;
|
|
62
|
+
members: EnumMembers;
|
|
63
|
+
/** Must match a `members[].key` */
|
|
64
|
+
defaultKey?: string;
|
|
65
|
+
}
|
|
66
|
+
| {
|
|
67
|
+
type: "object";
|
|
68
|
+
nullable: boolean;
|
|
69
|
+
optional: boolean;
|
|
70
|
+
fields: FieldDefinition[];
|
|
71
|
+
default?: Record<string, unknown>;
|
|
72
|
+
}
|
|
73
|
+
| {
|
|
74
|
+
type: "array";
|
|
75
|
+
nullable: boolean;
|
|
76
|
+
optional: boolean;
|
|
77
|
+
items: SchemaDefinition;
|
|
78
|
+
/** min/max item count */
|
|
79
|
+
min?: number;
|
|
80
|
+
max?: number;
|
|
81
|
+
default?: unknown;
|
|
82
|
+
};
|
|
97
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Named field schema. `fieldName` is required for introspection (walk paths, docs, forms).
|
|
86
|
+
* Use `fields: FieldDefinition[]` — not `Record<string, …>` — so the name has a single source of truth.
|
|
87
|
+
*/
|
|
88
|
+
export type FieldDefinition = { fieldName: string } & SchemaDefinition;
|