target-supabase-sdk 0.1.9 → 0.2.1
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 +184 -1
- package/dist/browser.d.ts +60 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +6 -0
- package/dist/browser.js.map +1 -0
- 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-C_bSw6Kx.js +1362 -0
- package/dist/chunks/enable-log-persist-C_bSw6Kx.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/index.d.ts +2 -48
- package/dist/index.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 +3 -3
- 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 +60 -0
- package/dist/node/node-runtime.base.d.ts.map +1 -0
- package/dist/node/node.api.d.ts +4 -4
- 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 +36 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +2483 -0
- package/dist/node.js.map +1 -0
- 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 +14 -3
- 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 +5 -5
- 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 +10 -0
- package/dist/shared/log/index.d.ts.map +1 -0
- package/dist/shared/log/log-manager.d.ts +37 -60
- 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 +17 -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 +56 -0
- package/dist/shared/log/log-scope.d.ts.map +1 -0
- 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 +16 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/local-task-registry.d.ts +11 -1
- package/dist/task/local-task-registry.d.ts.map +1 -1
- package/dist/task/task-manager.d.ts +21 -11
- package/dist/task/task-manager.d.ts.map +1 -1
- package/dist/task/task-node.d.ts +19 -0
- 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 +54 -0
- package/dist/task/task-post.api.d.ts.map +1 -0
- 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 +2 -0
- package/dist/task/task-repo-context.d.ts.map +1 -1
- package/dist/task/task-repo-validation.d.ts +46 -0
- package/dist/task/task-repo-validation.d.ts.map +1 -0
- package/dist/task/task.api.d.ts +5 -47
- 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 +3 -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 +140 -0
- package/dist/trigger/trigger.api.d.ts.map +1 -0
- 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 +87 -0
- package/dist/trigger/trigger.interface.d.ts.map +1 -0
- package/dist/trigger/trigger.utils.d.ts +6 -0
- package/dist/trigger/trigger.utils.d.ts.map +1 -0
- 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 +91 -61
- package/src/browser.ts +165 -0
- package/src/command/command.api.ts +20 -18
- 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/index.ts +2 -79
- package/src/link/link.api.ts +28 -30
- package/src/link/link.interface.ts +4 -5
- 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 +481 -0
- package/src/node/node.api.ts +12 -11
- 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 +153 -0
- 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 +54 -39
- package/src/repo/repo.api.ts +5 -5
- package/src/repo/repo.interface.ts +1 -2
- package/src/repo/repo.script-loader.ts +16 -20
- 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 +31 -0
- package/src/shared/log/log-manager.ts +112 -121
- 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 +109 -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 +123 -0
- 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 +45 -0
- package/src/task/local-task-registry.ts +115 -36
- package/src/task/task-manager.ts +101 -113
- package/src/task/task-node.ts +302 -0
- package/src/task/task-post-validated.api.ts +47 -0
- package/src/task/task-post.api.ts +99 -0
- package/src/task/task-queue.ts +18 -0
- package/src/task/task-repo-context.ts +4 -1
- package/src/task/task-repo-validation.ts +169 -0
- package/src/task/task.api.ts +68 -92
- package/src/task/task.constant.ts +4 -0
- package/src/task/task.interface.ts +6 -7
- package/src/trigger/trigger-manager.ts +287 -0
- package/src/trigger/trigger-node.ts +80 -0
- package/src/trigger/trigger.api.ts +166 -0
- package/src/trigger/trigger.constant.ts +10 -0
- package/src/trigger/trigger.interface.ts +100 -0
- package/src/trigger/trigger.utils.ts +56 -0
- 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 -42
- 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-manager.d.ts +0 -48
- package/dist/node/node-manager.d.ts.map +0 -1
- package/dist/node/node-manager.js +0 -619
- package/dist/node/node-manager.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/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 -156
- 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 -17
- package/dist/shared/log/create-api-logger.d.ts.map +0 -1
- package/dist/shared/log/create-api-logger.js +0 -15
- package/dist/shared/log/create-api-logger.js.map +0 -1
- package/dist/shared/log/log-manager.js +0 -218
- package/dist/shared/log/log-manager.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/local-task-registry.js +0 -153
- package/dist/task/local-task-registry.js.map +0 -1
- package/dist/task/task-manager.js +0 -217
- package/dist/task/task-manager.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.api.js +0 -351
- 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/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-manager.ts +0 -673
- package/src/node/node-task.preset.ts +0 -13
- 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 -25
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { ChildProcess } from "node:child_process";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import type { LoggerWithScope } from "../../shared/log";
|
|
4
|
+
import { isChildProcessRunning, spawnTsxChild } from "./process-spawn";
|
|
5
|
+
|
|
6
|
+
export interface ManagedChildProcessesOptions {
|
|
7
|
+
projectRoot: string;
|
|
8
|
+
preloadModules?: readonly string[];
|
|
9
|
+
/** SIGTERM -> wait -> SIGKILL delay (default 5000 ms). */
|
|
10
|
+
graceMs?: number;
|
|
11
|
+
logger?: Pick<LoggerWithScope, "info" | "warn" | "error">;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SpawnChildResult {
|
|
15
|
+
child: ChildProcess;
|
|
16
|
+
/** false when an equivalent label was already running. */
|
|
17
|
+
created: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface StopAllChildrenOptions {
|
|
21
|
+
/** PIDs to SIGTERM when not tracked by this registry (cross-process cleanup). */
|
|
22
|
+
extraPids?: readonly number[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Process-local registry for tsx child processes (supervisor, worker, etc.).
|
|
27
|
+
* Each OS process has its own instance - do not expect cross-process PID tracking.
|
|
28
|
+
*/
|
|
29
|
+
export class ManagedChildProcesses {
|
|
30
|
+
private readonly projectRoot: string;
|
|
31
|
+
private readonly preloadModules: readonly string[];
|
|
32
|
+
private readonly graceMs: number;
|
|
33
|
+
private readonly logger?: Pick<LoggerWithScope, "info" | "warn" | "error">;
|
|
34
|
+
private readonly byLabel = new Map<string, ChildProcess>();
|
|
35
|
+
|
|
36
|
+
constructor(options: ManagedChildProcessesOptions) {
|
|
37
|
+
this.projectRoot = options.projectRoot;
|
|
38
|
+
this.preloadModules = options.preloadModules ?? [];
|
|
39
|
+
this.graceMs = options.graceMs ?? 5_000;
|
|
40
|
+
this.logger = options.logger;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
get(label: string): ChildProcess | null {
|
|
44
|
+
return this.byLabel.get(label) ?? null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
getRunning(label: string): ChildProcess | null {
|
|
48
|
+
const child = this.byLabel.get(label);
|
|
49
|
+
return isChildProcessRunning(child) ? child : null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
runningLabels(): string[] {
|
|
53
|
+
return [...this.byLabel.entries()]
|
|
54
|
+
.filter((entry): entry is [string, ChildProcess] => isChildProcessRunning(entry[1]))
|
|
55
|
+
.map(([label]) => label);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
spawn(label: string, entryScript: string): SpawnChildResult {
|
|
59
|
+
const existing = this.getRunning(label);
|
|
60
|
+
if (existing != null) {
|
|
61
|
+
return { child: existing, created: false };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const child = spawnTsxChild({
|
|
65
|
+
projectRoot: this.projectRoot,
|
|
66
|
+
entryScript,
|
|
67
|
+
preloadModules: this.preloadModules,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
child.on("exit", (code, signal) => {
|
|
71
|
+
this.logger?.info("child exited", { topic: "process", data: { label, code, signal } });
|
|
72
|
+
const current = this.byLabel.get(label);
|
|
73
|
+
if (current === child) {
|
|
74
|
+
this.byLabel.delete(label);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
this.byLabel.set(label, child);
|
|
79
|
+
|
|
80
|
+
this.logger?.info("child started", {
|
|
81
|
+
topic: "process",
|
|
82
|
+
data: {
|
|
83
|
+
label,
|
|
84
|
+
pid: child.pid,
|
|
85
|
+
script: resolve(this.projectRoot, entryScript),
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return { child, created: true };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async stopAll(options?: StopAllChildrenOptions): Promise<void> {
|
|
93
|
+
const tracked = [...this.byLabel.values()].filter((child) => isChildProcessRunning(child));
|
|
94
|
+
|
|
95
|
+
await Promise.all(tracked.map((child) => this.stopChild(child)));
|
|
96
|
+
|
|
97
|
+
const extraPids = options?.extraPids ?? [];
|
|
98
|
+
for (const pid of extraPids) {
|
|
99
|
+
if (pid == null || tracked.some((child) => child.pid === pid)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
process.kill(pid, "SIGTERM");
|
|
104
|
+
} catch {
|
|
105
|
+
// already exited
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private stopChild(child: ChildProcess): Promise<void> {
|
|
111
|
+
return new Promise((resolvePromise) => {
|
|
112
|
+
child.once("exit", () => resolvePromise());
|
|
113
|
+
child.kill("SIGTERM");
|
|
114
|
+
setTimeout(() => {
|
|
115
|
+
if (isChildProcessRunning(child)) {
|
|
116
|
+
child.kill("SIGKILL");
|
|
117
|
+
}
|
|
118
|
+
}, this.graceMs);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type ChildProcess, type StdioOptions, spawn } from "node:child_process";
|
|
2
|
+
|
|
3
|
+
export interface BuildNodeImportArgsInput {
|
|
4
|
+
/** Relative `--import` paths (e.g. `./scripts/preload-env.mjs`). */
|
|
5
|
+
preloadModules?: readonly string[];
|
|
6
|
+
/** When true (default), inserts `--import tsx` before the entry script. */
|
|
7
|
+
useTsx?: boolean;
|
|
8
|
+
/** Entry script relative to `projectRoot` when spawning. */
|
|
9
|
+
entryScript: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Build argv for `node --import … --import tsx <entry>`.
|
|
14
|
+
* Use **relative** preload paths with `cwd: projectRoot` — Node 24 on Windows rejects
|
|
15
|
+
* absolute paths like `D:\…` for `--import` (ESM URL scheme error).
|
|
16
|
+
*/
|
|
17
|
+
export function buildNodeImportArgs(input: BuildNodeImportArgsInput): string[] {
|
|
18
|
+
const preloadModules = input.preloadModules ?? [];
|
|
19
|
+
const useTsx = input.useTsx ?? true;
|
|
20
|
+
const args: string[] = [];
|
|
21
|
+
|
|
22
|
+
for (const modulePath of preloadModules) {
|
|
23
|
+
args.push("--import", modulePath);
|
|
24
|
+
}
|
|
25
|
+
if (useTsx) {
|
|
26
|
+
args.push("--import", "tsx");
|
|
27
|
+
}
|
|
28
|
+
args.push(input.entryScript);
|
|
29
|
+
return args;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface SpawnTsxChildOptions {
|
|
33
|
+
projectRoot: string;
|
|
34
|
+
entryScript: string;
|
|
35
|
+
preloadModules?: readonly string[];
|
|
36
|
+
useTsx?: boolean;
|
|
37
|
+
env?: NodeJS.ProcessEnv;
|
|
38
|
+
stdio?: StdioOptions;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Spawn `node` with preload chain + tsx + TypeScript entry (relative to projectRoot). */
|
|
42
|
+
export function spawnTsxChild(options: SpawnTsxChildOptions): ChildProcess {
|
|
43
|
+
return spawn(
|
|
44
|
+
process.execPath,
|
|
45
|
+
buildNodeImportArgs({
|
|
46
|
+
preloadModules: options.preloadModules,
|
|
47
|
+
useTsx: options.useTsx,
|
|
48
|
+
entryScript: options.entryScript,
|
|
49
|
+
}),
|
|
50
|
+
{
|
|
51
|
+
cwd: options.projectRoot,
|
|
52
|
+
env: options.env ?? process.env,
|
|
53
|
+
stdio: options.stdio ?? "inherit",
|
|
54
|
+
shell: false,
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function isChildProcessRunning(child: ChildProcess | null | undefined): child is ChildProcess {
|
|
60
|
+
return child != null && child.exitCode == null && !child.killed;
|
|
61
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type { PollUntilOptions } from "./poll-until";
|
|
2
|
+
export { pollUntil } from "./poll-until";
|
|
3
|
+
export type { ReadinessCheck, ReadinessCheckResult, ReadinessReport } from "./readiness.types";
|
|
4
|
+
export type {
|
|
5
|
+
PathsExistCheckOptions,
|
|
6
|
+
RequiredEnvCheckOptions,
|
|
7
|
+
SupabaseReachableCheckOptions,
|
|
8
|
+
} from "./readiness-checks";
|
|
9
|
+
export {
|
|
10
|
+
createPathsExistCheck,
|
|
11
|
+
createRequiredEnvCheck,
|
|
12
|
+
createSupabaseReachableCheck,
|
|
13
|
+
} from "./readiness-checks";
|
|
14
|
+
export { runReadinessChecks } from "./run-readiness-checks";
|
|
15
|
+
export type {
|
|
16
|
+
ServiceReadyGate,
|
|
17
|
+
ServiceReadySnapshot,
|
|
18
|
+
WaitForServiceReadyOptions,
|
|
19
|
+
} from "./service-ready-gate";
|
|
20
|
+
export { waitForServiceReady } from "./service-ready-gate";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function sleep(ms: number): Promise<void> {
|
|
2
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface PollUntilOptions {
|
|
6
|
+
timeoutMs: number;
|
|
7
|
+
intervalMs?: number;
|
|
8
|
+
until: () => boolean | Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Poll `until()` until it returns true or `timeoutMs` elapses.
|
|
13
|
+
* @throws Error on timeout
|
|
14
|
+
*/
|
|
15
|
+
export async function pollUntil(options: PollUntilOptions): Promise<void> {
|
|
16
|
+
const intervalMs = options.intervalMs ?? 500;
|
|
17
|
+
const deadline = Date.now() + options.timeoutMs;
|
|
18
|
+
|
|
19
|
+
while (Date.now() < deadline) {
|
|
20
|
+
if (await options.until()) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await sleep(intervalMs);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
throw new Error(`pollUntil timeout after ${options.timeoutMs}ms`);
|
|
27
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { scanTargetList } from "../../core.api";
|
|
3
|
+
import { requireEnv } from "../env/require-env";
|
|
4
|
+
import type { ReadinessCheck, ReadinessCheckResult } from "./readiness.types";
|
|
5
|
+
|
|
6
|
+
export interface RequiredEnvCheckOptions {
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Factory: all listed env keys must be non-empty. */
|
|
11
|
+
export function createRequiredEnvCheck(
|
|
12
|
+
name: string,
|
|
13
|
+
keys: string[],
|
|
14
|
+
options?: RequiredEnvCheckOptions,
|
|
15
|
+
): ReadinessCheck {
|
|
16
|
+
return () => {
|
|
17
|
+
const env = options?.env ?? process.env;
|
|
18
|
+
try {
|
|
19
|
+
for (const key of keys) {
|
|
20
|
+
requireEnv(key, env);
|
|
21
|
+
}
|
|
22
|
+
return { name, ok: true };
|
|
23
|
+
} catch (error) {
|
|
24
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
+
return { name, ok: false, detail: message };
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface PathsExistCheckOptions {
|
|
31
|
+
/** Detail string when all paths exist (default: last path). */
|
|
32
|
+
successDetail?: string;
|
|
33
|
+
/** Detail prefix when a path is missing. */
|
|
34
|
+
missingDetail?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Factory: every path must exist on disk. */
|
|
38
|
+
export function createPathsExistCheck(name: string, paths: string[], options?: PathsExistCheckOptions): ReadinessCheck {
|
|
39
|
+
return async () => {
|
|
40
|
+
for (const filePath of paths) {
|
|
41
|
+
try {
|
|
42
|
+
await access(filePath);
|
|
43
|
+
} catch {
|
|
44
|
+
return {
|
|
45
|
+
name,
|
|
46
|
+
ok: false,
|
|
47
|
+
detail: options?.missingDetail ?? `Missing ${filePath}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const detail = options?.successDetail ?? paths[paths.length - 1] ?? paths.join(", ");
|
|
53
|
+
|
|
54
|
+
return { name, ok: true, detail };
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface SupabaseReachableCheckOptions {
|
|
59
|
+
name?: string;
|
|
60
|
+
category?: string;
|
|
61
|
+
maxRows?: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Factory: lightweight Supabase query via {@link scanTargetList}. */
|
|
65
|
+
export function createSupabaseReachableCheck(options?: SupabaseReachableCheckOptions): ReadinessCheck {
|
|
66
|
+
const name = options?.name ?? "supabase_connectivity";
|
|
67
|
+
const category = options?.category ?? "node";
|
|
68
|
+
const maxRows = options?.maxRows ?? 1;
|
|
69
|
+
|
|
70
|
+
return async (): Promise<ReadinessCheckResult> => {
|
|
71
|
+
try {
|
|
72
|
+
await scanTargetList({ category, maxRows });
|
|
73
|
+
return { name, ok: true };
|
|
74
|
+
} catch (error) {
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
return { name, ok: false, detail: message };
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ReadinessCheckResult {
|
|
2
|
+
name: string;
|
|
3
|
+
ok: boolean;
|
|
4
|
+
detail?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface ReadinessReport {
|
|
8
|
+
ok: boolean;
|
|
9
|
+
checks: ReadinessCheckResult[];
|
|
10
|
+
message: string | null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ReadinessCheck = () => ReadinessCheckResult | Promise<ReadinessCheckResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReadinessCheck, ReadinessReport } from "./readiness.types";
|
|
2
|
+
|
|
3
|
+
function formatFailureMessage(checks: ReadinessReport["checks"]): string {
|
|
4
|
+
return checks
|
|
5
|
+
.filter((check) => !check.ok)
|
|
6
|
+
.map((check) => `${check.name}: ${check.detail ?? "failed"}`)
|
|
7
|
+
.join("; ");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Run checks in order and aggregate into a {@link ReadinessReport}. */
|
|
11
|
+
export async function runReadinessChecks(checks: ReadinessCheck[]): Promise<ReadinessReport> {
|
|
12
|
+
const results = await Promise.all(checks.map((check) => check()));
|
|
13
|
+
const failed = results.filter((check) => !check.ok);
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
ok: failed.length === 0,
|
|
17
|
+
checks: results,
|
|
18
|
+
message: failed.length === 0 ? null : formatFailureMessage(results),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { LoggerWithScope } from "../../shared/log";
|
|
2
|
+
|
|
3
|
+
function sleep(ms: number): Promise<void> {
|
|
4
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface ServiceReadySnapshot {
|
|
8
|
+
failed: boolean;
|
|
9
|
+
ready: boolean;
|
|
10
|
+
failureMessage?: string | null;
|
|
11
|
+
/** Logged on success (e.g. worker tasks, pid). */
|
|
12
|
+
readyDetail?: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Cross-process ready gate — service implements by reading shared state (file, RPC, …). */
|
|
16
|
+
export interface ServiceReadyGate {
|
|
17
|
+
read(): Promise<ServiceReadySnapshot>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface WaitForServiceReadyOptions {
|
|
21
|
+
timeoutMs: number;
|
|
22
|
+
pollMs?: number;
|
|
23
|
+
logger?: Pick<LoggerWithScope, "info">;
|
|
24
|
+
/** Default failure message when gate.read().failureMessage is empty. */
|
|
25
|
+
failureMessage?: string;
|
|
26
|
+
formatTimeoutError?: (last: ServiceReadySnapshot, timeoutMs: number) => string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Poll {@link ServiceReadyGate} until ready, fail fast on `failed`, or timeout.
|
|
31
|
+
* Returns the final ready snapshot.
|
|
32
|
+
*/
|
|
33
|
+
export async function waitForServiceReady(
|
|
34
|
+
gate: ServiceReadyGate,
|
|
35
|
+
options: WaitForServiceReadyOptions,
|
|
36
|
+
): Promise<ServiceReadySnapshot> {
|
|
37
|
+
const pollMs = options.pollMs ?? 500;
|
|
38
|
+
const defaultFailureMessage = options.failureMessage ?? "Readiness checks failed";
|
|
39
|
+
const deadline = Date.now() + options.timeoutMs;
|
|
40
|
+
let last: ServiceReadySnapshot = { failed: false, ready: false };
|
|
41
|
+
|
|
42
|
+
while (Date.now() < deadline) {
|
|
43
|
+
last = await gate.read();
|
|
44
|
+
|
|
45
|
+
if (last.failed) {
|
|
46
|
+
throw new Error(last.failureMessage ?? defaultFailureMessage);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (last.ready) {
|
|
50
|
+
options.logger?.info("service ready", {
|
|
51
|
+
topic: "readiness",
|
|
52
|
+
data: last.readyDetail ?? {},
|
|
53
|
+
});
|
|
54
|
+
return last;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
await sleep(pollMs);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const message =
|
|
61
|
+
options.formatTimeoutError?.(last, options.timeoutMs) ??
|
|
62
|
+
`Service ready timeout after ${options.timeoutMs}ms (failed=${last.failed}, ready=${last.ready})`;
|
|
63
|
+
|
|
64
|
+
throw new Error(message);
|
|
65
|
+
}
|
package/src/node.ts
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js runtime entry — browser API plus local FS / worker orchestration.
|
|
3
|
+
*
|
|
4
|
+
* import { TaskManager, RepoManager, TaskNode } from "target-supabase-sdk/node";
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "./browser";
|
|
8
|
+
export * from "./command/command.api";
|
|
9
|
+
export * from "./command/command.interface";
|
|
10
|
+
export type {
|
|
11
|
+
EnvIntOptions,
|
|
12
|
+
EnvNumberOptions,
|
|
13
|
+
InitSupabaseFromStandardEnvOptions,
|
|
14
|
+
LoadEnvFilesOptions,
|
|
15
|
+
PublicBaseUrlFromEnvOptions,
|
|
16
|
+
} from "./node/env";
|
|
17
|
+
export {
|
|
18
|
+
envBool,
|
|
19
|
+
envInt,
|
|
20
|
+
envMs,
|
|
21
|
+
envNumber,
|
|
22
|
+
envPort,
|
|
23
|
+
initSupabaseFromStandardEnv,
|
|
24
|
+
loadEnvFiles,
|
|
25
|
+
parseEnvFile,
|
|
26
|
+
parseEnvLine,
|
|
27
|
+
publicBaseUrlFromEnv,
|
|
28
|
+
readEnv,
|
|
29
|
+
requireEnv,
|
|
30
|
+
resolveProjectRootByPackageName,
|
|
31
|
+
resolveProjectRootFromModule,
|
|
32
|
+
} from "./node/env";
|
|
33
|
+
export type {
|
|
34
|
+
CreateJsonFileStateStoreOptions,
|
|
35
|
+
JsonFileStateStore,
|
|
36
|
+
JsonStatePatch,
|
|
37
|
+
} from "./node/fs/json-state-store";
|
|
38
|
+
export { createJsonFileStateStore } from "./node/fs/json-state-store";
|
|
39
|
+
export type {
|
|
40
|
+
ReadAndVerifySourceFileOptions,
|
|
41
|
+
SourceFilePayload,
|
|
42
|
+
} from "./node/fs/read-source-file";
|
|
43
|
+
export {
|
|
44
|
+
nodeBufferToArrayBuffer,
|
|
45
|
+
readAndVerifySourceFile,
|
|
46
|
+
} from "./node/fs/read-source-file";
|
|
47
|
+
export { BaseNodeRuntime } from "./node/node-runtime.base";
|
|
48
|
+
export type {
|
|
49
|
+
BuildNodeImportArgsInput,
|
|
50
|
+
ManagedChildProcessesOptions,
|
|
51
|
+
SpawnChildResult,
|
|
52
|
+
SpawnTsxChildOptions,
|
|
53
|
+
StopAllChildrenOptions,
|
|
54
|
+
} from "./node/process";
|
|
55
|
+
export {
|
|
56
|
+
buildNodeImportArgs,
|
|
57
|
+
isChildProcessRunning,
|
|
58
|
+
ManagedChildProcesses,
|
|
59
|
+
spawnTsxChild,
|
|
60
|
+
} from "./node/process";
|
|
61
|
+
export type {
|
|
62
|
+
PathsExistCheckOptions,
|
|
63
|
+
PollUntilOptions,
|
|
64
|
+
ReadinessCheck,
|
|
65
|
+
ReadinessCheckResult,
|
|
66
|
+
ReadinessReport,
|
|
67
|
+
RequiredEnvCheckOptions,
|
|
68
|
+
ServiceReadyGate,
|
|
69
|
+
ServiceReadySnapshot,
|
|
70
|
+
SupabaseReachableCheckOptions,
|
|
71
|
+
WaitForServiceReadyOptions,
|
|
72
|
+
} from "./node/readiness";
|
|
73
|
+
export {
|
|
74
|
+
createPathsExistCheck,
|
|
75
|
+
createRequiredEnvCheck,
|
|
76
|
+
createSupabaseReachableCheck,
|
|
77
|
+
pollUntil,
|
|
78
|
+
runReadinessChecks,
|
|
79
|
+
waitForServiceReady,
|
|
80
|
+
} from "./node/readiness";
|
|
81
|
+
export { RepoManager } from "./repo/repo-manager";
|
|
82
|
+
export {
|
|
83
|
+
disableLogPersist,
|
|
84
|
+
enableLogPersist,
|
|
85
|
+
ensureLogPersistFromEnv,
|
|
86
|
+
getLogPersistStats,
|
|
87
|
+
logPersistEnabledFromEnv,
|
|
88
|
+
resolveLogPersistRegistryPath,
|
|
89
|
+
snapshotLogPersistReady,
|
|
90
|
+
validateLogPersistPreloadEnv,
|
|
91
|
+
waitForLogPersistReady,
|
|
92
|
+
} from "./shared/log/enable-log-persist";
|
|
93
|
+
export type {
|
|
94
|
+
EnableLogPersistOptions,
|
|
95
|
+
EnsureLogPersistFromEnvOptions,
|
|
96
|
+
LogPersistLane,
|
|
97
|
+
LogPersistReadySnapshot,
|
|
98
|
+
LogPersistStats,
|
|
99
|
+
WaitForLogPersistReadyOptions,
|
|
100
|
+
} from "./shared/log/log-persist.interface";
|
|
101
|
+
export type {
|
|
102
|
+
BootstrapLocalTasksResult,
|
|
103
|
+
BootstrapLocalTasksStatus,
|
|
104
|
+
ExecutableTaskFn,
|
|
105
|
+
PrepareTaskParams,
|
|
106
|
+
PrepareTaskResponse,
|
|
107
|
+
RegisterTasksOptions,
|
|
108
|
+
RegisterTasksResult,
|
|
109
|
+
TaskFn,
|
|
110
|
+
TaskLocalPackageConfig,
|
|
111
|
+
TaskRepoContext,
|
|
112
|
+
TaskRepoScriptDetails,
|
|
113
|
+
TaskRepoScriptRecord,
|
|
114
|
+
TaskRunnerRootConfig,
|
|
115
|
+
TaskRunResult,
|
|
116
|
+
} from "./task/task-manager";
|
|
117
|
+
export {
|
|
118
|
+
TASK_LOCAL_PACKAGE_CONFIG_FILENAME,
|
|
119
|
+
TASK_REPO_SCRIPT_CATEGORY,
|
|
120
|
+
TASK_RUNNER_CONFIG_DIR,
|
|
121
|
+
TASK_RUNNER_ROOT_CONFIG_FILENAME,
|
|
122
|
+
TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH,
|
|
123
|
+
TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH,
|
|
124
|
+
TaskManager,
|
|
125
|
+
} from "./task/task-manager";
|
|
126
|
+
export { TaskNode } from "./task/task-node";
|
|
127
|
+
export type { PostTaskPayload } from "./task/task-post.api";
|
|
128
|
+
export { postTaskWithValidation } from "./task/task-post-validated.api";
|
|
129
|
+
export type {
|
|
130
|
+
TaskRepoValidationFailureReason,
|
|
131
|
+
ValidateTaskRepoAndParamsInput,
|
|
132
|
+
ValidateTaskRepoAndParamsResult,
|
|
133
|
+
} from "./task/task-repo-validation";
|
|
134
|
+
export {
|
|
135
|
+
TaskRepoValidation,
|
|
136
|
+
validateTaskRepoAndParams,
|
|
137
|
+
} from "./task/task-repo-validation";
|
|
138
|
+
export * from "./trigger/trigger.api";
|
|
139
|
+
export {
|
|
140
|
+
LOG_TOPIC_TRIGGER,
|
|
141
|
+
TRIGGER_LOOP_INTERVAL_MS,
|
|
142
|
+
TRIGGER_RUNNER_DEFAULT_RETRY_COUNT,
|
|
143
|
+
TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS,
|
|
144
|
+
} from "./trigger/trigger.constant";
|
|
145
|
+
export type {
|
|
146
|
+
RegisterTriggerRunnerOptions,
|
|
147
|
+
TriggerNodeOptions,
|
|
148
|
+
TriggerRunnerContext,
|
|
149
|
+
TriggerRunnerFn,
|
|
150
|
+
} from "./trigger/trigger.interface";
|
|
151
|
+
export * from "./trigger/trigger.interface";
|
|
152
|
+
export { TriggerManager } from "./trigger/trigger-manager";
|
|
153
|
+
export { TriggerNode } from "./trigger/trigger-node";
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { isHttpUrl, resolveFetchUrl } from "../shared/utils/fetch-url";
|
|
2
|
+
import { isLocalFilesystemPath, parseProviderPrefixedUrl } from "./chunk-url.utils";
|
|
3
|
+
|
|
4
|
+
interface ChunkResolver {
|
|
5
|
+
provider: string;
|
|
6
|
+
matches(url: string): boolean;
|
|
7
|
+
resolve(locator: string): Promise<ArrayBuffer>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Provider module subset used for opaque {@link Chunk} restore. */
|
|
11
|
+
export interface ChunkResolveProvider {
|
|
12
|
+
readonly provider: string;
|
|
13
|
+
resolveChunk?(locator: string): Promise<ArrayBuffer>;
|
|
14
|
+
matchesOpaqueUrl?(url: string): boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const resolvers = new Map<string, ChunkResolver>();
|
|
18
|
+
|
|
19
|
+
function registerChunkResolver(resolver: ChunkResolver): void {
|
|
20
|
+
resolvers.set(resolver.provider, resolver);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Register a provider's chunk resolver (call when the provider module loads). */
|
|
24
|
+
export function registerProviderChunkResolver(module: ChunkResolveProvider): void {
|
|
25
|
+
if (module.resolveChunk == null) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const resolveChunk = module.resolveChunk;
|
|
30
|
+
|
|
31
|
+
registerChunkResolver({
|
|
32
|
+
provider: module.provider,
|
|
33
|
+
matches(url: string) {
|
|
34
|
+
const prefixed = parseProviderPrefixedUrl(url);
|
|
35
|
+
if (prefixed != null) {
|
|
36
|
+
return prefixed.provider === module.provider;
|
|
37
|
+
}
|
|
38
|
+
return module.matchesOpaqueUrl?.(url) === true;
|
|
39
|
+
},
|
|
40
|
+
resolve(locator: string) {
|
|
41
|
+
const prefixed = parseProviderPrefixedUrl(locator);
|
|
42
|
+
const opaque = prefixed?.provider === module.provider ? prefixed.locator : locator;
|
|
43
|
+
return resolveChunk(opaque);
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function resolveOpaqueUrl(url: string): Promise<ArrayBuffer> {
|
|
49
|
+
const prefixed = parseProviderPrefixedUrl(url);
|
|
50
|
+
if (prefixed != null) {
|
|
51
|
+
const resolver = resolvers.get(prefixed.provider);
|
|
52
|
+
if (resolver == null) {
|
|
53
|
+
throw new Error(`No chunk resolver registered for provider: ${prefixed.provider}`);
|
|
54
|
+
}
|
|
55
|
+
return resolver.resolve(prefixed.locator);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const matches = [...resolvers.values()].filter((entry) => entry.matches(url));
|
|
59
|
+
if (matches.length === 1) {
|
|
60
|
+
return matches[0].resolve(url);
|
|
61
|
+
}
|
|
62
|
+
if (matches.length > 1) {
|
|
63
|
+
throw new Error(`Ambiguous chunk url (${url}); use provider-prefixed form e.g. telegram:${url.slice(0, 12)}…`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const registered = [...resolvers.keys()].join(", ") || "(none)";
|
|
67
|
+
throw new Error(`No chunk resolver for opaque url (${url.slice(0, 24)}…). Registered: ${registered}`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Patch global fetch so ParcelManager.reassemble can resolve opaque chunk locators.
|
|
72
|
+
* HTTP URLs use the original fetch (S3 presigned, etc.).
|
|
73
|
+
*/
|
|
74
|
+
export function installChunkFetchRegistry(): () => void {
|
|
75
|
+
const originalFetch = globalThis.fetch.bind(globalThis);
|
|
76
|
+
|
|
77
|
+
globalThis.fetch = (async (input: string | URL | Request, init?: RequestInit) => {
|
|
78
|
+
const url = resolveFetchUrl(input);
|
|
79
|
+
if (isHttpUrl(url)) {
|
|
80
|
+
return originalFetch(input, init);
|
|
81
|
+
}
|
|
82
|
+
if (isLocalFilesystemPath(url)) {
|
|
83
|
+
throw new Error(
|
|
84
|
+
`Chunk fetch registry: local path not supported (${url}). ` +
|
|
85
|
+
"Use a local provider module or parcel-restore-local.",
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const buffer = await resolveOpaqueUrl(url);
|
|
90
|
+
return new Response(buffer, { headers: { "Content-Type": "application/octet-stream" } });
|
|
91
|
+
}) as typeof fetch;
|
|
92
|
+
|
|
93
|
+
return () => {
|
|
94
|
+
globalThis.fetch = originalFetch;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { isHttpUrl } from "../shared/utils/fetch-url";
|
|
2
|
+
|
|
3
|
+
export function isLocalFilesystemPath(url: string): boolean {
|
|
4
|
+
if (url.startsWith("file://")) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
return /^[a-zA-Z]:[\\/]/.test(url) || url.startsWith("\\\\") || url.startsWith("/");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Opaque chunk locator - not HTTP and not a local path (e.g. Telegram file_id). */
|
|
11
|
+
export function isOpaqueChunkUrl(url: string): boolean {
|
|
12
|
+
return !isHttpUrl(url) && !isLocalFilesystemPath(url);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** `provider:opaque` scheme (e.g. `telegram:BQACAg...`). */
|
|
16
|
+
export function parseProviderPrefixedUrl(url: string): { provider: string; locator: string } | null {
|
|
17
|
+
const match = /^([a-z][a-z0-9_-]*):(.+)$/i.exec(url);
|
|
18
|
+
if (match == null) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const provider = match[1].toLowerCase();
|
|
22
|
+
const locator = match[2].trim();
|
|
23
|
+
if (locator === "") {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
if (provider === "http" || provider === "https" || provider === "file") {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return { provider, locator };
|
|
30
|
+
}
|