@credibledata/cred-cli 0.0.103 → 0.0.105
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 +106 -1
- package/dist/agent-contract.spec.js +548 -0
- package/dist/agent-contract.spec.js.map +1 -0
- package/dist/browser.js +72 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.spec.js +125 -0
- package/dist/browser.spec.js.map +1 -0
- package/dist/client/api.js +4137 -1159
- package/dist/client/api.js.map +1 -1
- package/dist/client-codeassist/api.js +476 -0
- package/dist/client-codeassist/api.js.map +1 -0
- package/dist/client-codeassist/base.js +69 -0
- package/dist/client-codeassist/base.js.map +1 -0
- package/dist/client-codeassist/common.js +162 -0
- package/dist/client-codeassist/common.js.map +1 -0
- package/dist/client-codeassist/configuration.js +44 -0
- package/dist/client-codeassist/configuration.js.map +1 -0
- package/dist/client-codeassist/index.js +32 -0
- package/dist/client-codeassist/index.js.map +1 -0
- package/dist/clientconfiguration.js +17 -289
- package/dist/clientconfiguration.js.map +1 -1
- package/dist/clientconfiguration.spec.js +35 -96
- package/dist/clientconfiguration.spec.js.map +1 -1
- package/dist/commands/add.js +103 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.spec.js +113 -0
- package/dist/commands/add.spec.js.map +1 -0
- package/dist/commands/connection/createconnections.js +104 -7
- package/dist/commands/connection/createconnections.js.map +1 -1
- package/dist/commands/connection/createconnections.spec.js +35 -1
- package/dist/commands/connection/createconnections.spec.js.map +1 -1
- package/dist/commands/connection/deleteconnection.js +4 -2
- package/dist/commands/connection/deleteconnection.js.map +1 -1
- package/dist/commands/connection/deleteconnection.spec.js +6 -1
- package/dist/commands/connection/deleteconnection.spec.js.map +1 -1
- package/dist/commands/connection/listconnections.js +2 -0
- package/dist/commands/connection/listconnections.js.map +1 -1
- package/dist/commands/connection/updateconnection.js +365 -0
- package/dist/commands/connection/updateconnection.js.map +1 -0
- package/dist/commands/connection/updateconnection.spec.js +625 -0
- package/dist/commands/connection/updateconnection.spec.js.map +1 -0
- package/dist/commands/database/createdatabase.js +52 -0
- package/dist/commands/database/createdatabase.js.map +1 -0
- package/dist/commands/database/database.spec.js +267 -0
- package/dist/commands/database/database.spec.js.map +1 -0
- package/dist/commands/database/deletedatabase.js +91 -0
- package/dist/commands/database/deletedatabase.js.map +1 -0
- package/dist/commands/database/getdatabase.js +97 -0
- package/dist/commands/database/getdatabase.js.map +1 -0
- package/dist/commands/database/listdatabases.js +36 -0
- package/dist/commands/database/listdatabases.js.map +1 -0
- package/dist/commands/database/shared.js +125 -0
- package/dist/commands/database/shared.js.map +1 -0
- package/dist/commands/database/shared.spec.js +109 -0
- package/dist/commands/database/shared.spec.js.map +1 -0
- package/dist/commands/database/updatedatabase.js +39 -0
- package/dist/commands/database/updatedatabase.js.map +1 -0
- package/dist/commands/environment/createenvironment.js +59 -28
- package/dist/commands/environment/createenvironment.js.map +1 -1
- package/dist/commands/environment/createenvironment.spec.js +29 -0
- package/dist/commands/environment/createenvironment.spec.js.map +1 -1
- package/dist/commands/environment/deleteenvironment.js +3 -2
- package/dist/commands/environment/deleteenvironment.js.map +1 -1
- package/dist/commands/environment/deleteenvironment.spec.js +5 -1
- package/dist/commands/environment/deleteenvironment.spec.js.map +1 -1
- package/dist/commands/environment/getenvironment.js +1 -0
- package/dist/commands/environment/getenvironment.js.map +1 -1
- package/dist/commands/environment/listenvironments.js +40 -8
- package/dist/commands/environment/listenvironments.js.map +1 -1
- package/dist/commands/environment/listenvironments.spec.js +41 -2
- package/dist/commands/environment/listenvironments.spec.js.map +1 -1
- package/dist/commands/environment/setenvironment.js +145 -6
- package/dist/commands/environment/setenvironment.js.map +1 -1
- package/dist/commands/environment/setenvironment.spec.js +256 -8
- package/dist/commands/environment/setenvironment.spec.js.map +1 -1
- package/dist/commands/environment/updateenvironment.js +12 -8
- package/dist/commands/environment/updateenvironment.js.map +1 -1
- package/dist/commands/environment/updateenvironment.spec.js +36 -2
- package/dist/commands/environment/updateenvironment.spec.js.map +1 -1
- package/dist/commands/get.js +64 -1
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/group/addmember.js +3 -1
- package/dist/commands/group/addmember.js.map +1 -1
- package/dist/commands/group/addmember.spec.js +7 -2
- package/dist/commands/group/addmember.spec.js.map +1 -1
- package/dist/commands/group/creategroup.js +2 -0
- package/dist/commands/group/creategroup.js.map +1 -1
- package/dist/commands/group/deletegroup.js +3 -1
- package/dist/commands/group/deletegroup.js.map +1 -1
- package/dist/commands/group/deletegroup.spec.js +7 -1
- package/dist/commands/group/deletegroup.spec.js.map +1 -1
- package/dist/commands/group/getgroup.js +2 -0
- package/dist/commands/group/getgroup.js.map +1 -1
- package/dist/commands/group/listgroups.js +2 -0
- package/dist/commands/group/listgroups.js.map +1 -1
- package/dist/commands/group/removemember.js +3 -1
- package/dist/commands/group/removemember.js.map +1 -1
- package/dist/commands/group/removemember.spec.js +7 -2
- package/dist/commands/group/removemember.spec.js.map +1 -1
- package/dist/commands/groupaccesstoken/deleteToken.js +2 -1
- package/dist/commands/groupaccesstoken/deleteToken.js.map +1 -1
- package/dist/commands/groupaccesstoken/groupContainer.js +2 -0
- package/dist/commands/groupaccesstoken/groupContainer.js.map +1 -1
- package/dist/commands/list.js +24 -4
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/materialization/cancelrun.js +3 -1
- package/dist/commands/materialization/cancelrun.js.map +1 -1
- package/dist/commands/materialization/getindex.js +2 -0
- package/dist/commands/materialization/getindex.js.map +1 -1
- package/dist/commands/materialization/getmaterialization.js +2 -0
- package/dist/commands/materialization/getmaterialization.js.map +1 -1
- package/dist/commands/materialization/getpreaggregate.js +2 -0
- package/dist/commands/materialization/getpreaggregate.js.map +1 -1
- package/dist/commands/materialization/getrun.js +2 -0
- package/dist/commands/materialization/getrun.js.map +1 -1
- package/dist/commands/materialization/listindexes.js +2 -0
- package/dist/commands/materialization/listindexes.js.map +1 -1
- package/dist/commands/materialization/listmaterializations.js +2 -0
- package/dist/commands/materialization/listmaterializations.js.map +1 -1
- package/dist/commands/materialization/listpreaggregates.js +2 -0
- package/dist/commands/materialization/listpreaggregates.js.map +1 -1
- package/dist/commands/materialization/listruns.js +3 -1
- package/dist/commands/materialization/listruns.js.map +1 -1
- package/dist/commands/materialization/rerun.js +3 -1
- package/dist/commands/materialization/rerun.js.map +1 -1
- package/dist/commands/misc/inquirerHost.js +87 -0
- package/dist/commands/misc/inquirerHost.js.map +1 -0
- package/dist/commands/misc/inquirerHost.spec.js +91 -0
- package/dist/commands/misc/inquirerHost.spec.js.map +1 -0
- package/dist/commands/misc/login.js +348 -58
- package/dist/commands/misc/login.js.map +1 -1
- package/dist/commands/misc/login.spec.js +525 -7
- package/dist/commands/misc/login.spec.js.map +1 -1
- package/dist/commands/misc/logout.js +26 -3
- package/dist/commands/misc/logout.js.map +1 -1
- package/dist/commands/misc/logout.spec.js +52 -12
- package/dist/commands/misc/logout.spec.js.map +1 -1
- package/dist/commands/misc/resolveLoginTarget.spec.js +90 -0
- package/dist/commands/misc/resolveLoginTarget.spec.js.map +1 -0
- package/dist/commands/misc/scope.spec.js +108 -0
- package/dist/commands/misc/scope.spec.js.map +1 -0
- package/dist/commands/misc/set-access-token.js +1 -1
- package/dist/commands/misc/set-access-token.js.map +1 -1
- package/dist/commands/misc/set-access-token.spec.js +13 -2
- package/dist/commands/misc/set-access-token.spec.js.map +1 -1
- package/dist/commands/misc/setup.js +819 -0
- package/dist/commands/misc/setup.js.map +1 -0
- package/dist/commands/misc/setup.spec.js +783 -0
- package/dist/commands/misc/setup.spec.js.map +1 -0
- package/dist/commands/misc/status.js +168 -0
- package/dist/commands/misc/status.js.map +1 -0
- package/dist/commands/misc/status.spec.js +301 -0
- package/dist/commands/misc/status.spec.js.map +1 -0
- package/dist/commands/misc/token.js +57 -0
- package/dist/commands/misc/token.js.map +1 -0
- package/dist/commands/misc/token.spec.js +92 -0
- package/dist/commands/misc/token.spec.js.map +1 -0
- package/dist/commands/package/deletepackage.js +4 -2
- package/dist/commands/package/deletepackage.js.map +1 -1
- package/dist/commands/package/deletepackage.spec.js +7 -1
- package/dist/commands/package/deletepackage.spec.js.map +1 -1
- package/dist/commands/package/getpackage.js +142 -0
- package/dist/commands/package/getpackage.js.map +1 -0
- package/dist/commands/package/getpackage.spec.js +246 -0
- package/dist/commands/package/getpackage.spec.js.map +1 -0
- package/dist/commands/package/listpackages.js +2 -0
- package/dist/commands/package/listpackages.js.map +1 -1
- package/dist/commands/package/publish.archive.spec.js +570 -0
- package/dist/commands/package/publish.archive.spec.js.map +1 -0
- package/dist/commands/package/publish.js +780 -49
- package/dist/commands/package/publish.js.map +1 -1
- package/dist/commands/package/publish.spec.js +451 -8
- package/dist/commands/package/publish.spec.js.map +1 -1
- package/dist/commands/package/updatepackage.js +22 -19
- package/dist/commands/package/updatepackage.js.map +1 -1
- package/dist/commands/package/updatepackage.spec.js +36 -1
- package/dist/commands/package/updatepackage.spec.js.map +1 -1
- package/dist/commands/permission/createpermission.js +3 -1
- package/dist/commands/permission/createpermission.js.map +1 -1
- package/dist/commands/permission/deletepermission.js +6 -3
- package/dist/commands/permission/deletepermission.js.map +1 -1
- package/dist/commands/permission/getpermission.js +2 -0
- package/dist/commands/permission/getpermission.js.map +1 -1
- package/dist/commands/permission/listpermissions.js +2 -0
- package/dist/commands/permission/listpermissions.js.map +1 -1
- package/dist/commands/rm.js +21 -0
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/set.js +40 -6
- package/dist/commands/set.js.map +1 -1
- package/dist/commands/set.spec.js +123 -0
- package/dist/commands/set.spec.js.map +1 -0
- package/dist/commands/table/addtable.js +155 -0
- package/dist/commands/table/addtable.js.map +1 -0
- package/dist/commands/table/deletetable.js +45 -0
- package/dist/commands/table/deletetable.js.map +1 -0
- package/dist/commands/table/gettable.js +32 -0
- package/dist/commands/table/gettable.js.map +1 -0
- package/dist/commands/table/listtables.js +36 -0
- package/dist/commands/table/listtables.js.map +1 -0
- package/dist/commands/table/table.spec.js +304 -0
- package/dist/commands/table/table.spec.js.map +1 -0
- package/dist/commands/table/tablefile.js +195 -0
- package/dist/commands/table/tablefile.js.map +1 -0
- package/dist/commands/table/tablefile.spec.js +158 -0
- package/dist/commands/table/tablefile.spec.js.map +1 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.js +4 -2
- package/dist/commands/version/archive-unarchive-version.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.spec.js +6 -1
- package/dist/commands/version/archive-unarchive-version.spec.js.map +1 -1
- package/dist/commands/version/listversions.js +2 -0
- package/dist/commands/version/listversions.js.map +1 -1
- package/dist/common/UserGroupId.js +9 -4
- package/dist/common/UserGroupId.js.map +1 -1
- package/dist/common/UserGroupId.spec.js +5 -0
- package/dist/common/UserGroupId.spec.js.map +1 -1
- package/dist/constants.js +37 -143
- package/dist/constants.js.map +1 -1
- package/dist/index.js +487 -90
- package/dist/index.js.map +1 -1
- package/dist/logger.js +42 -9
- package/dist/logger.js.map +1 -1
- package/dist/session.js +56 -0
- package/dist/session.js.map +1 -0
- package/dist/session.spec.js +103 -0
- package/dist/session.spec.js.map +1 -0
- package/dist/setup-core/briefing.js +176 -0
- package/dist/setup-core/briefing.js.map +1 -0
- package/dist/setup-core/credstore.js +415 -0
- package/dist/setup-core/credstore.js.map +1 -0
- package/dist/setup-core/credstore.spec.js +238 -0
- package/dist/setup-core/credstore.spec.js.map +1 -0
- package/dist/setup-core/environments.js +267 -0
- package/dist/setup-core/environments.js.map +1 -0
- package/dist/setup-core/flow.e2e.js +165 -0
- package/dist/setup-core/flow.e2e.js.map +1 -0
- package/dist/setup-core/flow.js +765 -0
- package/dist/setup-core/flow.js.map +1 -0
- package/dist/setup-core/flow.spec.js +1348 -0
- package/dist/setup-core/flow.spec.js.map +1 -0
- package/dist/setup-core/folderconfig.js +283 -0
- package/dist/setup-core/folderconfig.js.map +1 -0
- package/dist/setup-core/git.js +97 -0
- package/dist/setup-core/git.js.map +1 -0
- package/dist/setup-core/host.js +77 -0
- package/dist/setup-core/host.js.map +1 -0
- package/dist/setup-core/importconnections.js +470 -0
- package/dist/setup-core/importconnections.js.map +1 -0
- package/dist/setup-core/importconnections.spec.js +594 -0
- package/dist/setup-core/importconnections.spec.js.map +1 -0
- package/dist/setup-core/liveness.js +94 -0
- package/dist/setup-core/liveness.js.map +1 -0
- package/dist/setup-core/liveness.spec.js +59 -0
- package/dist/setup-core/liveness.spec.js.map +1 -0
- package/dist/setup-core/localpublisherconfig.js +26 -0
- package/dist/setup-core/localpublisherconfig.js.map +1 -0
- package/dist/setup-core/localpublisherconfig.spec.js +29 -0
- package/dist/setup-core/localpublisherconfig.spec.js.map +1 -0
- package/dist/setup-core/mcpconfig.js +198 -0
- package/dist/setup-core/mcpconfig.js.map +1 -0
- package/dist/setup-core/mcpconfig.spec.js +205 -0
- package/dist/setup-core/mcpconfig.spec.js.map +1 -0
- package/dist/setup-core/packagemanifest.js +55 -0
- package/dist/setup-core/packagemanifest.js.map +1 -0
- package/dist/setup-core/ports.js +182 -0
- package/dist/setup-core/ports.js.map +1 -0
- package/dist/setup-core/ports.spec.js +173 -0
- package/dist/setup-core/ports.spec.js.map +1 -0
- package/dist/setup-core/publisherconfig.js +268 -0
- package/dist/setup-core/publisherconfig.js.map +1 -0
- package/dist/setup-core/publisherconfig.oracle.js +166 -0
- package/dist/setup-core/publisherconfig.oracle.js.map +1 -0
- package/dist/setup-core/publisherconfig.spec.js +277 -0
- package/dist/setup-core/publisherconfig.spec.js.map +1 -0
- package/dist/setup-core/publisherversion.js +26 -0
- package/dist/setup-core/publisherversion.js.map +1 -0
- package/dist/setup-core/readiness.spec.js +161 -0
- package/dist/setup-core/readiness.spec.js.map +1 -0
- package/dist/setup-core/readylines.js +169 -0
- package/dist/setup-core/readylines.js.map +1 -0
- package/dist/setup-core/readylines.spec.js +70 -0
- package/dist/setup-core/readylines.spec.js.map +1 -0
- package/dist/setup-core/refresh.js +348 -0
- package/dist/setup-core/refresh.js.map +1 -0
- package/dist/setup-core/refresh.spec.js +501 -0
- package/dist/setup-core/refresh.spec.js.map +1 -0
- package/dist/setup-core/skills.js +279 -0
- package/dist/setup-core/skills.js.map +1 -0
- package/dist/setup-core/skills.spec.js +334 -0
- package/dist/setup-core/skills.spec.js.map +1 -0
- package/dist/setup-core/supervisor.js +879 -0
- package/dist/setup-core/supervisor.js.map +1 -0
- package/dist/setup-core/supervisor.spec.js +833 -0
- package/dist/setup-core/supervisor.spec.js.map +1 -0
- package/dist/setup-core/writefile.js +61 -0
- package/dist/setup-core/writefile.js.map +1 -0
- package/dist/setup-core/writefile.spec.js +68 -0
- package/dist/setup-core/writefile.spec.js.map +1 -0
- package/dist/utils.js +409 -3
- package/dist/utils.js.map +1 -1
- package/dist/utils.spec.js +373 -2
- package/dist/utils.spec.js.map +1 -1
- package/dist/versioncheck-refresh.js +18 -0
- package/dist/versioncheck-refresh.js.map +1 -0
- package/dist/versioncheck.js +324 -0
- package/dist/versioncheck.js.map +1 -0
- package/dist/versioncheck.spec.js +587 -0
- package/dist/versioncheck.spec.js.map +1 -0
- package/node_modules/@credibledata/cli-auth/dist/index.d.ts +86 -0
- package/node_modules/@credibledata/cli-auth/dist/index.js +102 -0
- package/node_modules/@credibledata/cli-auth/package.json +19 -0
- package/package.json +18 -6
- package/.github/workflows/build.yml +0 -23
- package/.mocharc.json +0 -10
- package/.prettierignore +0 -2
- package/.prettierrc +0 -4
- package/README-DEV.md +0 -40
- package/coverage/coverage-summary.json +0 -40
- package/coverage/tmp/coverage-2152-1789496974457-0.json +0 -1
- package/coverage/tmp/coverage-2153-1789496954404-0.json +0 -1
- package/docker/Dockerfile.ci +0 -18
- package/docker-compose.yml +0 -18
- package/eslint.config.mjs +0 -45
- package/generate-client.sh +0 -27
- package/mocha.setup.ts +0 -4
- package/openapitools.json +0 -10
- package/src/client/.openapi-generator/FILES +0 -9
- package/src/client/.openapi-generator/VERSION +0 -1
- package/src/client/.openapi-generator-ignore +0 -23
- package/src/client/api.ts +0 -15999
- package/src/client/base.ts +0 -86
- package/src/client/common.ts +0 -150
- package/src/client/configuration.ts +0 -110
- package/src/client/git_push.sh +0 -57
- package/src/client/index.ts +0 -18
- package/src/clientconfiguration.spec.ts +0 -615
- package/src/clientconfiguration.ts +0 -364
- package/src/commands/add.ts +0 -191
- package/src/commands/connection/createconnections.spec.ts +0 -413
- package/src/commands/connection/createconnections.ts +0 -109
- package/src/commands/connection/deleteconnection.spec.ts +0 -189
- package/src/commands/connection/deleteconnection.ts +0 -57
- package/src/commands/connection/listconnections.spec.ts +0 -132
- package/src/commands/connection/listconnections.ts +0 -58
- package/src/commands/environment/createenvironment.spec.ts +0 -249
- package/src/commands/environment/createenvironment.ts +0 -73
- package/src/commands/environment/deleteenvironment.spec.ts +0 -152
- package/src/commands/environment/deleteenvironment.ts +0 -48
- package/src/commands/environment/getenvironment.spec.ts +0 -110
- package/src/commands/environment/getenvironment.ts +0 -43
- package/src/commands/environment/listenvironments.spec.ts +0 -123
- package/src/commands/environment/listenvironments.ts +0 -67
- package/src/commands/environment/setenvironment.spec.ts +0 -63
- package/src/commands/environment/setenvironment.ts +0 -14
- package/src/commands/environment/updateenvironment.spec.ts +0 -386
- package/src/commands/environment/updateenvironment.ts +0 -168
- package/src/commands/get.ts +0 -153
- package/src/commands/group/addmember.spec.ts +0 -257
- package/src/commands/group/addmember.ts +0 -85
- package/src/commands/group/creategroup.spec.ts +0 -146
- package/src/commands/group/creategroup.ts +0 -54
- package/src/commands/group/deletegroup.spec.ts +0 -120
- package/src/commands/group/deletegroup.ts +0 -45
- package/src/commands/group/getgroup.spec.ts +0 -129
- package/src/commands/group/getgroup.ts +0 -47
- package/src/commands/group/listgroups.spec.ts +0 -137
- package/src/commands/group/listgroups.ts +0 -45
- package/src/commands/group/removemember.spec.ts +0 -224
- package/src/commands/group/removemember.ts +0 -75
- package/src/commands/groupaccesstoken/createToken.spec.ts +0 -211
- package/src/commands/groupaccesstoken/createToken.ts +0 -72
- package/src/commands/groupaccesstoken/deleteToken.spec.ts +0 -147
- package/src/commands/groupaccesstoken/deleteToken.ts +0 -29
- package/src/commands/groupaccesstoken/groupContainer.ts +0 -83
- package/src/commands/groupaccesstoken/listTokens.spec.ts +0 -147
- package/src/commands/groupaccesstoken/listTokens.ts +0 -29
- package/src/commands/legacy.ts +0 -5
- package/src/commands/list.ts +0 -326
- package/src/commands/materialization/cancelrun.ts +0 -70
- package/src/commands/materialization/getindex.ts +0 -55
- package/src/commands/materialization/getmaterialization.ts +0 -57
- package/src/commands/materialization/getpreaggregate.ts +0 -58
- package/src/commands/materialization/getrun.ts +0 -55
- package/src/commands/materialization/listindexes.ts +0 -69
- package/src/commands/materialization/listmaterializations.ts +0 -53
- package/src/commands/materialization/listpreaggregates.ts +0 -74
- package/src/commands/materialization/listruns.ts +0 -77
- package/src/commands/materialization/rerun.ts +0 -123
- package/src/commands/misc/login.spec.ts +0 -371
- package/src/commands/misc/login.ts +0 -343
- package/src/commands/misc/logout.spec.ts +0 -32
- package/src/commands/misc/logout.ts +0 -9
- package/src/commands/misc/loopbackOAuth.ts +0 -127
- package/src/commands/misc/set-access-token.spec.ts +0 -95
- package/src/commands/misc/set-access-token.ts +0 -32
- package/src/commands/package/deletepackage.spec.ts +0 -164
- package/src/commands/package/deletepackage.ts +0 -58
- package/src/commands/package/listpackages.spec.ts +0 -163
- package/src/commands/package/listpackages.ts +0 -74
- package/src/commands/package/publish.spec.ts +0 -642
- package/src/commands/package/publish.ts +0 -236
- package/src/commands/package/updatepackage.spec.ts +0 -319
- package/src/commands/package/updatepackage.ts +0 -95
- package/src/commands/permission/createpermission.spec.ts +0 -507
- package/src/commands/permission/createpermission.ts +0 -181
- package/src/commands/permission/deletepermission.ts +0 -117
- package/src/commands/permission/getpermission.ts +0 -115
- package/src/commands/permission/listpermissions.ts +0 -101
- package/src/commands/permission/scope.ts +0 -180
- package/src/commands/rm.ts +0 -146
- package/src/commands/set.ts +0 -25
- package/src/commands/update.ts +0 -107
- package/src/commands/version/archive-unarchive-version.spec.ts +0 -456
- package/src/commands/version/archive-unarchive-version.ts +0 -108
- package/src/commands/version/listversions.spec.ts +0 -138
- package/src/commands/version/listversions.ts +0 -45
- package/src/common/UserGroupId.spec.ts +0 -115
- package/src/common/UserGroupId.ts +0 -137
- package/src/constants.spec.ts +0 -111
- package/src/constants.ts +0 -228
- package/src/index.ts +0 -378
- package/src/logger.spec.ts +0 -158
- package/src/logger.ts +0 -90
- package/src/polyfills/file.polyfill.ts +0 -6
- package/src/utils.spec.ts +0 -135
- package/src/utils.ts +0 -115
- package/src/validator.spec.ts +0 -51
- package/src/validator.ts +0 -44
- package/tsconfig.json +0 -17
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const os_1 = __importDefault(require("os"));
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
20
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
21
|
+
const api_1 = require("../../client/api");
|
|
22
|
+
const logger_1 = require("../../logger");
|
|
23
|
+
const database_spec_1 = require("../database/database.spec");
|
|
24
|
+
const shared_spec_1 = require("../database/shared.spec");
|
|
25
|
+
const addtable_1 = require("./addtable");
|
|
26
|
+
const deletetable_1 = require("./deletetable");
|
|
27
|
+
const gettable_1 = require("./gettable");
|
|
28
|
+
const listtables_1 = require("./listtables");
|
|
29
|
+
const upload = {
|
|
30
|
+
url: "https://storage.example/staging/orders/u/orders.csv?sig=1",
|
|
31
|
+
method: "PUT",
|
|
32
|
+
headers: { "Content-MD5": "abc==", "Content-Length": "8" },
|
|
33
|
+
expiresAt: "2026-10-28T12:00:00Z",
|
|
34
|
+
};
|
|
35
|
+
function table(overrides) {
|
|
36
|
+
return Object.assign({ name: "orders", schema: "main", status: "PENDING_UPLOAD", source: { kind: "file", filename: "orders.csv" } }, overrides);
|
|
37
|
+
}
|
|
38
|
+
const loaded = table({
|
|
39
|
+
status: "READY",
|
|
40
|
+
rowCount: 1234,
|
|
41
|
+
sizeBytes: 2048,
|
|
42
|
+
columns: [
|
|
43
|
+
{ name: "id", type: "BIGINT" },
|
|
44
|
+
{ name: "amount", type: "DOUBLE" },
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
describe("table commands", () => {
|
|
48
|
+
let sandbox;
|
|
49
|
+
let stdout;
|
|
50
|
+
let dir;
|
|
51
|
+
let deps;
|
|
52
|
+
const errors = () => logger_1.logger.error.getCalls().map((c) => c.args[0]);
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
sandbox = sinon_1.default.createSandbox();
|
|
55
|
+
sandbox.stub(logger_1.logger);
|
|
56
|
+
stdout = sandbox.stub(console, "log");
|
|
57
|
+
sandbox
|
|
58
|
+
.stub(require("../../setup-core/refresh"), "ensureFreshTokens")
|
|
59
|
+
.resolves({ status: "fresh" });
|
|
60
|
+
dir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), "addtable-"));
|
|
61
|
+
fs_1.default.writeFileSync(path_1.default.join(dir, "Orders.csv"), "id,amount\n");
|
|
62
|
+
deps = {
|
|
63
|
+
upload: sandbox.stub().resolves(),
|
|
64
|
+
progress: () => ({ update: () => { }, done: () => { } }),
|
|
65
|
+
poll: { intervalMs: 1, sleep: () => __awaiter(void 0, void 0, void 0, function* () { }) },
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
afterEach(() => {
|
|
69
|
+
sandbox.restore();
|
|
70
|
+
fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
71
|
+
});
|
|
72
|
+
describe("cred add table", () => {
|
|
73
|
+
it("creates, uploads, reports complete, and reads by name until READY", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
var _a;
|
|
75
|
+
const create = sandbox
|
|
76
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
77
|
+
.resolves({ data: table({ upload }) });
|
|
78
|
+
const report = sandbox
|
|
79
|
+
.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable")
|
|
80
|
+
.resolves({ data: table({ status: "LOADING" }) });
|
|
81
|
+
const get = sandbox.stub(api_1.DatabasesApi.prototype, "getDatabaseTable");
|
|
82
|
+
get.onCall(0).resolves({
|
|
83
|
+
data: table({ status: "LOADING" }),
|
|
84
|
+
});
|
|
85
|
+
get.onCall(1).resolves({ data: loaded });
|
|
86
|
+
const file = path_1.default.join(dir, "Orders.csv");
|
|
87
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [file], { option: ["header=true"], sheet: undefined }, (0, database_spec_1.fakeConfig)(), deps);
|
|
88
|
+
const [org, env, db, request] = create.firstCall.args;
|
|
89
|
+
(0, chai_1.expect)([org, env, db]).to.eql(["acme", "analytics", "credible"]);
|
|
90
|
+
(0, chai_1.expect)(request).to.eql({
|
|
91
|
+
name: "orders",
|
|
92
|
+
source: {
|
|
93
|
+
filename: "Orders.csv",
|
|
94
|
+
sizeBytes: 10,
|
|
95
|
+
sha256: crypto_1.default
|
|
96
|
+
.createHash("sha256")
|
|
97
|
+
.update("id,amount\n")
|
|
98
|
+
.digest("hex"),
|
|
99
|
+
contentMd5: crypto_1.default
|
|
100
|
+
.createHash("md5")
|
|
101
|
+
.update("id,amount\n")
|
|
102
|
+
.digest("base64"),
|
|
103
|
+
options: { header: true },
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
(0, chai_1.expect)(deps.upload.firstCall.args.slice(0, 3)).to.eql([
|
|
107
|
+
file,
|
|
108
|
+
upload,
|
|
109
|
+
10,
|
|
110
|
+
]);
|
|
111
|
+
(0, chai_1.expect)(report.firstCall.args.slice(2, 5)).to.eql([
|
|
112
|
+
"credible",
|
|
113
|
+
"orders",
|
|
114
|
+
{ upload: { status: "COMPLETE" } },
|
|
115
|
+
]);
|
|
116
|
+
(0, chai_1.expect)(get.alwaysCalledWith("acme", "analytics", "credible", "orders")).to.equal(true);
|
|
117
|
+
(0, chai_1.expect)(stdout.firstCall.args[0]).to.equal("credible.orders loaded from Orders.csv: 1,234 rows, 2.0 KiB; columns: id BIGINT, amount DOUBLE. Read it as credible.table('orders').");
|
|
118
|
+
(0, chai_1.expect)((_a = process.exitCode) !== null && _a !== void 0 ? _a : 0).to.equal(0);
|
|
119
|
+
}));
|
|
120
|
+
it("asks the create to replace under --replace and --name", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
|
+
const create = sandbox
|
|
122
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
123
|
+
.resolves({ data: table({ name: "o2", upload }) });
|
|
124
|
+
sandbox
|
|
125
|
+
.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable")
|
|
126
|
+
.resolves({});
|
|
127
|
+
sandbox
|
|
128
|
+
.stub(api_1.DatabasesApi.prototype, "getDatabaseTable")
|
|
129
|
+
.resolves({ data: Object.assign(Object.assign({}, loaded), { name: "o2" }) });
|
|
130
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], { name: "o2", replace: true, format: "csv" }, (0, database_spec_1.fakeConfig)(), deps);
|
|
131
|
+
const request = create.firstCall.args[3];
|
|
132
|
+
(0, chai_1.expect)(request.name).to.equal("o2");
|
|
133
|
+
(0, chai_1.expect)(request.replace).to.equal(true);
|
|
134
|
+
(0, chai_1.expect)(request.source.format).to.equal("csv");
|
|
135
|
+
}));
|
|
136
|
+
it("prints a failed load's error verbatim and exits 1", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
137
|
+
sandbox
|
|
138
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
139
|
+
.resolves({ data: table({ upload }) });
|
|
140
|
+
sandbox
|
|
141
|
+
.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable")
|
|
142
|
+
.resolves({});
|
|
143
|
+
sandbox.stub(api_1.DatabasesApi.prototype, "getDatabaseTable").resolves({
|
|
144
|
+
data: table({
|
|
145
|
+
status: "FAILED",
|
|
146
|
+
error: "Could not convert string 'N/A' to DOUBLE in column 'amount'",
|
|
147
|
+
}),
|
|
148
|
+
});
|
|
149
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], {}, (0, database_spec_1.fakeConfig)(), deps);
|
|
150
|
+
(0, chai_1.expect)(stdout.called).to.equal(false);
|
|
151
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
152
|
+
(0, chai_1.expect)(errors()).to.include("credible.orders failed to load from Orders.csv: Could not convert string 'N/A' to DOUBLE in column 'amount'");
|
|
153
|
+
}));
|
|
154
|
+
it("names --replace when the table exists", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
155
|
+
sandbox.stub(api_1.DatabasesApi.prototype, "createDatabaseTable").rejects((0, shared_spec_1.httpError)(409, {
|
|
156
|
+
code: "DATABASE_TABLE_EXISTS",
|
|
157
|
+
message: "credible already has a table named orders.",
|
|
158
|
+
}));
|
|
159
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], {}, (0, database_spec_1.fakeConfig)(), deps);
|
|
160
|
+
(0, chai_1.expect)(deps.upload.called).to.equal(false);
|
|
161
|
+
(0, chai_1.expect)(errors()[0]).to.equal("Failed to add Orders.csv → credible.orders: credible already has a table named orders. Fix: pass --replace to replace it, or --name to add it under another name.");
|
|
162
|
+
}));
|
|
163
|
+
it("does not report complete when the upload fails", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
164
|
+
sandbox
|
|
165
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
166
|
+
.resolves({ data: table({ upload }) });
|
|
167
|
+
const report = sandbox.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable");
|
|
168
|
+
deps.upload.rejects(new Error("storage refused the upload with HTTP 403"));
|
|
169
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], {}, (0, database_spec_1.fakeConfig)(), deps);
|
|
170
|
+
(0, chai_1.expect)(report.called).to.equal(false);
|
|
171
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
172
|
+
}));
|
|
173
|
+
it("adds several files as several tables, one at a time, and goes on past a failure", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
fs_1.default.writeFileSync(path_1.default.join(dir, "returns.csv"), "id\n");
|
|
175
|
+
const create = sandbox.stub(api_1.DatabasesApi.prototype, "createDatabaseTable");
|
|
176
|
+
create.onCall(0).rejects((0, shared_spec_1.httpError)(413, { message: "over the cap" }));
|
|
177
|
+
create
|
|
178
|
+
.onCall(1)
|
|
179
|
+
.resolves({ data: table({ name: "returns", upload }) });
|
|
180
|
+
sandbox
|
|
181
|
+
.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable")
|
|
182
|
+
.resolves({});
|
|
183
|
+
sandbox
|
|
184
|
+
.stub(api_1.DatabasesApi.prototype, "getDatabaseTable")
|
|
185
|
+
.resolves({ data: Object.assign(Object.assign({}, loaded), { name: "returns" }) });
|
|
186
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv"), path_1.default.join(dir, "returns.csv")], {}, (0, database_spec_1.fakeConfig)(), deps);
|
|
187
|
+
(0, chai_1.expect)(create.secondCall.args[3].name).to.equal("returns");
|
|
188
|
+
(0, chai_1.expect)(stdout.callCount).to.equal(1);
|
|
189
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
190
|
+
}));
|
|
191
|
+
it("stops at the timeout while still LOADING, naming the command that shows when it is READY", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
192
|
+
sandbox
|
|
193
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
194
|
+
.resolves({ data: table({ upload }) });
|
|
195
|
+
sandbox
|
|
196
|
+
.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable")
|
|
197
|
+
.resolves({});
|
|
198
|
+
const get = sandbox
|
|
199
|
+
.stub(api_1.DatabasesApi.prototype, "getDatabaseTable")
|
|
200
|
+
.resolves({ data: table({ status: "LOADING" }) });
|
|
201
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], {}, (0, database_spec_1.fakeConfig)(), Object.assign(Object.assign({}, deps), { poll: Object.assign(Object.assign({}, deps.poll), { timeoutMs: 0 }) }));
|
|
202
|
+
(0, chai_1.expect)(get.callCount).to.equal(1);
|
|
203
|
+
(0, chai_1.expect)(stdout.called).to.equal(false);
|
|
204
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
205
|
+
(0, chai_1.expect)(errors()).to.eql([
|
|
206
|
+
"credible.orders is still LOADING. `cred get table credible orders` shows when it is READY.",
|
|
207
|
+
]);
|
|
208
|
+
}));
|
|
209
|
+
it("fails without uploading when the create answers with no upload", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
210
|
+
sandbox
|
|
211
|
+
.stub(api_1.DatabasesApi.prototype, "createDatabaseTable")
|
|
212
|
+
.resolves({ data: table({}) });
|
|
213
|
+
const report = sandbox.stub(api_1.DatabasesApi.prototype, "updateDatabaseTable");
|
|
214
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [path_1.default.join(dir, "Orders.csv")], {}, (0, database_spec_1.fakeConfig)(), deps);
|
|
215
|
+
(0, chai_1.expect)(deps.upload.called).to.equal(false);
|
|
216
|
+
(0, chai_1.expect)(report.called).to.equal(false);
|
|
217
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
218
|
+
(0, chai_1.expect)(errors()).to.eql([
|
|
219
|
+
"Failed to add Orders.csv → credible.orders: the server answered without an upload URL (status PENDING_UPLOAD).",
|
|
220
|
+
]);
|
|
221
|
+
}));
|
|
222
|
+
it("refuses usage mistakes with exit 2 before sending anything", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
223
|
+
const create = sandbox.stub(api_1.DatabasesApi.prototype, "createDatabaseTable");
|
|
224
|
+
const file = path_1.default.join(dir, "Orders.csv");
|
|
225
|
+
for (const [files, options] of [
|
|
226
|
+
[[file, file], { name: "x" }],
|
|
227
|
+
[[file], { name: "1bad" }],
|
|
228
|
+
[[file], { format: "avro" }],
|
|
229
|
+
[[file], { option: ["nope=1"] }],
|
|
230
|
+
[[path_1.default.join(dir, "missing.csv")], {}],
|
|
231
|
+
]) {
|
|
232
|
+
process.exitCode = undefined;
|
|
233
|
+
yield (0, addtable_1.addTables)("http://cp", "credible", [...files], Object.assign(Object.assign({}, options), { option: "option" in options ? [...options.option] : [] }), (0, database_spec_1.fakeConfig)(), deps);
|
|
234
|
+
(0, chai_1.expect)(process.exitCode).to.equal(2);
|
|
235
|
+
}
|
|
236
|
+
(0, chai_1.expect)(create.called).to.equal(false);
|
|
237
|
+
}));
|
|
238
|
+
});
|
|
239
|
+
describe("describeLoadedTable", () => {
|
|
240
|
+
it("says the rows are not counted yet when the server has no count, and leaves out an unknown size", () => {
|
|
241
|
+
(0, chai_1.expect)((0, addtable_1.describeLoadedTable)("credible", "Orders.csv", table({ status: "READY", columns: [] }))).to.equal("credible.orders loaded from Orders.csv: rows not counted yet; columns: none. Read it as credible.table('orders').");
|
|
242
|
+
});
|
|
243
|
+
it("counts one row in the singular", () => {
|
|
244
|
+
(0, chai_1.expect)((0, addtable_1.describeLoadedTable)("credible", "Orders.csv", table({
|
|
245
|
+
status: "READY",
|
|
246
|
+
rowCount: 1,
|
|
247
|
+
columns: [{ name: "id", type: "BIGINT" }],
|
|
248
|
+
}))).to.equal("credible.orders loaded from Orders.csv: 1 row; columns: id BIGINT. Read it as credible.table('orders').");
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
it("cred ls tables prints the database's tables with the total", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
252
|
+
const list = sandbox
|
|
253
|
+
.stub(api_1.DatabasesApi.prototype, "listDatabaseTables")
|
|
254
|
+
.resolves({
|
|
255
|
+
data: [loaded],
|
|
256
|
+
headers: { "total-count": "1" },
|
|
257
|
+
});
|
|
258
|
+
yield (0, listtables_1.listTables)("http://cp", "credible", false, "1", "-1", (0, database_spec_1.fakeConfig)());
|
|
259
|
+
(0, chai_1.expect)(list.firstCall.args.slice(0, 5)).to.eql([
|
|
260
|
+
"acme",
|
|
261
|
+
"analytics",
|
|
262
|
+
"credible",
|
|
263
|
+
-1,
|
|
264
|
+
0,
|
|
265
|
+
]);
|
|
266
|
+
(0, chai_1.expect)(JSON.parse(stdout.firstCall.args[0])).to.eql({
|
|
267
|
+
tables: [loaded],
|
|
268
|
+
totalCount: 1,
|
|
269
|
+
});
|
|
270
|
+
}));
|
|
271
|
+
it("cred get table prints the table", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
272
|
+
sandbox
|
|
273
|
+
.stub(api_1.DatabasesApi.prototype, "getDatabaseTable")
|
|
274
|
+
.resolves({ data: loaded });
|
|
275
|
+
yield (0, gettable_1.getTable)("http://cp", "credible", "orders", false, (0, database_spec_1.fakeConfig)());
|
|
276
|
+
(0, chai_1.expect)(JSON.parse(stdout.firstCall.args[0])).to.eql(loaded);
|
|
277
|
+
}));
|
|
278
|
+
describe("cred rm table", () => {
|
|
279
|
+
it("deletes after a yes and says the files stay recoverable for 7 days", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
280
|
+
sandbox.stub(require("../../utils"), "getConfirmation").resolves(true);
|
|
281
|
+
const del = sandbox
|
|
282
|
+
.stub(api_1.DatabasesApi.prototype, "deleteDatabaseTable")
|
|
283
|
+
.resolves({});
|
|
284
|
+
yield (0, deletetable_1.deleteTable)("http://cp", "credible", "orders", {}, (0, database_spec_1.fakeConfig)());
|
|
285
|
+
(0, chai_1.expect)(del.firstCall.args.slice(0, 4)).to.eql([
|
|
286
|
+
"acme",
|
|
287
|
+
"analytics",
|
|
288
|
+
"credible",
|
|
289
|
+
"orders",
|
|
290
|
+
]);
|
|
291
|
+
(0, chai_1.expect)(String(stdout.firstCall.args[0])).to.match(/^Table credible\.orders deleted\. Its files stay recoverable for 7 days/);
|
|
292
|
+
}));
|
|
293
|
+
it("surfaces the server's refusal of a materialized table", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
294
|
+
sandbox.stub(api_1.DatabasesApi.prototype, "deleteDatabaseTable").rejects((0, shared_spec_1.httpError)(409, {
|
|
295
|
+
code: "DATABASE_TABLE_MANAGED",
|
|
296
|
+
message: "orders is built by the package sales.",
|
|
297
|
+
}));
|
|
298
|
+
yield (0, deletetable_1.deleteTable)("http://cp", "credible", "orders", { yes: true }, (0, database_spec_1.fakeConfig)());
|
|
299
|
+
(0, chai_1.expect)(process.exitCode).to.equal(1);
|
|
300
|
+
(0, chai_1.expect)(errors()).to.include("Failed to delete credible.orders: orders is built by the package sales.");
|
|
301
|
+
}));
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
//# sourceMappingURL=table.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.spec.js","sourceRoot":"","sources":["../../../src/commands/table/table.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TABLE_NAME_PATTERN = void 0;
|
|
7
|
+
exports.defaultTableName = defaultTableName;
|
|
8
|
+
exports.describeFile = describeFile;
|
|
9
|
+
exports.parseFormat = parseFormat;
|
|
10
|
+
exports.parseReaderOptions = parseReaderOptions;
|
|
11
|
+
exports.createProgress = createProgress;
|
|
12
|
+
exports.uploadFile = uploadFile;
|
|
13
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const http_1 = __importDefault(require("http"));
|
|
16
|
+
const https_1 = __importDefault(require("https"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const api_1 = require("../../client/api");
|
|
19
|
+
const shared_1 = require("../database/shared");
|
|
20
|
+
/**
|
|
21
|
+
* The name a new table may take: lowercase, as the server requires on create.
|
|
22
|
+
* (`DatabaseTableNamePattern` also admits uppercase, for reading or deleting a
|
|
23
|
+
* table a package built.)
|
|
24
|
+
*/
|
|
25
|
+
exports.TABLE_NAME_PATTERN = /^[a-z_][a-z0-9_]{0,62}$/;
|
|
26
|
+
/**
|
|
27
|
+
* The table a file becomes when `--name` is not given: the file's stem,
|
|
28
|
+
* lowercased, each run of non-identifier characters one `_`, a leading digit
|
|
29
|
+
* prefixed with `_`, and cut to the 63 characters a name may hold.
|
|
30
|
+
* `Q3 Orders (final).csv` is `q3_orders_final_`; `2024-sales.csv.gz` is
|
|
31
|
+
* `_2024_sales`. A compressed file's inner extension is part of the suffix.
|
|
32
|
+
*/
|
|
33
|
+
function defaultTableName(filePath) {
|
|
34
|
+
let stem = path_1.default.basename(filePath);
|
|
35
|
+
if (/\.gz$/i.test(stem))
|
|
36
|
+
stem = stem.slice(0, -3);
|
|
37
|
+
const dot = stem.lastIndexOf(".");
|
|
38
|
+
if (dot > 0)
|
|
39
|
+
stem = stem.slice(0, dot);
|
|
40
|
+
let name = stem.toLowerCase().replace(/[^a-z0-9_]+/g, "_");
|
|
41
|
+
if (!name)
|
|
42
|
+
name = "_";
|
|
43
|
+
if (/^[0-9]/.test(name))
|
|
44
|
+
name = `_${name}`;
|
|
45
|
+
return name.slice(0, 63);
|
|
46
|
+
}
|
|
47
|
+
/** Size, SHA-256 and MD5 in one streaming pass: the file is never held in memory. */
|
|
48
|
+
function describeFile(filePath) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const sha256 = crypto_1.default.createHash("sha256");
|
|
51
|
+
const md5 = crypto_1.default.createHash("md5");
|
|
52
|
+
let sizeBytes = 0;
|
|
53
|
+
fs_1.default.createReadStream(filePath)
|
|
54
|
+
.on("data", (chunk) => {
|
|
55
|
+
const buffer = chunk;
|
|
56
|
+
sizeBytes += buffer.length;
|
|
57
|
+
sha256.update(buffer);
|
|
58
|
+
md5.update(buffer);
|
|
59
|
+
})
|
|
60
|
+
.on("error", reject)
|
|
61
|
+
.on("end", () => resolve({
|
|
62
|
+
sizeBytes,
|
|
63
|
+
sha256: sha256.digest("hex"),
|
|
64
|
+
contentMd5: md5.digest("base64"),
|
|
65
|
+
}));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const TABLE_FORMATS = Object.values(api_1.DatabaseTableFileFormatEnum);
|
|
69
|
+
/** `--format`, checked against the spec's enum before anything is sent. */
|
|
70
|
+
function parseFormat(value) {
|
|
71
|
+
if (value === undefined)
|
|
72
|
+
return undefined;
|
|
73
|
+
const format = value.toLowerCase();
|
|
74
|
+
if (!TABLE_FORMATS.includes(format)) {
|
|
75
|
+
throw new Error(`Unknown --format '${value}'. Fix: one of ${TABLE_FORMATS.join(", ")}, or leave it out to infer it from the file name.`);
|
|
76
|
+
}
|
|
77
|
+
return format;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* `--option k=v` (repeatable) and `--sheet`, as the reader options the admin
|
|
81
|
+
* API accepts: `header` (true|false), `delimiter`, `skip` (rows, an integer).
|
|
82
|
+
* Anything else is refused here, where the flag can be named, rather than as
|
|
83
|
+
* a 400 from the server.
|
|
84
|
+
*/
|
|
85
|
+
function parseReaderOptions(pairs, sheet) {
|
|
86
|
+
const options = {};
|
|
87
|
+
for (const pair of pairs) {
|
|
88
|
+
const at = pair.indexOf("=");
|
|
89
|
+
const key = at > 0 ? pair.slice(0, at).trim() : "";
|
|
90
|
+
const value = at > 0 ? pair.slice(at + 1) : "";
|
|
91
|
+
if (key === "header") {
|
|
92
|
+
if (!/^(true|false)$/i.test(value)) {
|
|
93
|
+
throw new Error(`--option header=${value}: expected true or false.`);
|
|
94
|
+
}
|
|
95
|
+
options.header = value.toLowerCase() === "true";
|
|
96
|
+
}
|
|
97
|
+
else if (key === "delimiter") {
|
|
98
|
+
if (!value)
|
|
99
|
+
throw new Error("--option delimiter= needs a value.");
|
|
100
|
+
options.delimiter = value;
|
|
101
|
+
}
|
|
102
|
+
else if (key === "skip") {
|
|
103
|
+
if (!/^\d+$/.test(value)) {
|
|
104
|
+
throw new Error(`--option skip=${value}: expected a whole number of rows.`);
|
|
105
|
+
}
|
|
106
|
+
options.skip = Number(value);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new Error(`Unknown --option '${pair}'. Fix: header=true|false, delimiter=<char> or skip=<rows>; --sheet <name> picks a spreadsheet's sheet.`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (sheet !== undefined)
|
|
113
|
+
options.sheet = sheet;
|
|
114
|
+
return Object.keys(options).length ? options : undefined;
|
|
115
|
+
}
|
|
116
|
+
const BAR_WIDTH = 24;
|
|
117
|
+
const REDRAW_MS = 100;
|
|
118
|
+
function createProgress(label, total, stream = process.stderr, now = Date.now) {
|
|
119
|
+
if (!stream.isTTY)
|
|
120
|
+
return { update: () => { }, done: () => { } };
|
|
121
|
+
let drawnAt = -Infinity;
|
|
122
|
+
let last = 0;
|
|
123
|
+
const draw = (sent) => {
|
|
124
|
+
const fraction = total > 0 ? Math.min(sent / total, 1) : 1;
|
|
125
|
+
const filled = Math.round(fraction * BAR_WIDTH);
|
|
126
|
+
stream.write(`\r${label} [${"#".repeat(filled)}${"-".repeat(BAR_WIDTH - filled)}] ${String(Math.floor(fraction * 100)).padStart(3)}% ${(0, shared_1.formatBytes)(sent)} / ${(0, shared_1.formatBytes)(total)}`);
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
update(sent) {
|
|
130
|
+
last = sent;
|
|
131
|
+
if (now() - drawnAt < REDRAW_MS)
|
|
132
|
+
return;
|
|
133
|
+
drawnAt = now();
|
|
134
|
+
draw(sent);
|
|
135
|
+
},
|
|
136
|
+
done() {
|
|
137
|
+
draw(last);
|
|
138
|
+
stream.write("\n");
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Send the file to the signed URL, streamed from disk, with every header the
|
|
144
|
+
* server signed (`Content-MD5` and `Content-Length` among them: storage refuses
|
|
145
|
+
* any other body). Resolves on a 2xx; rejects with storage's status and the
|
|
146
|
+
* start of its answer, which for a signature mismatch is the only explanation.
|
|
147
|
+
*/
|
|
148
|
+
function uploadFile(filePath, upload, sizeBytes, onProgress = () => { }) {
|
|
149
|
+
return new Promise((resolve, reject) => {
|
|
150
|
+
var _a;
|
|
151
|
+
const url = new URL(upload.url);
|
|
152
|
+
const headers = Object.assign({}, upload.headers);
|
|
153
|
+
if (!Object.keys(headers).some((h) => h.toLowerCase() === "content-length")) {
|
|
154
|
+
headers["Content-Length"] = String(sizeBytes);
|
|
155
|
+
}
|
|
156
|
+
const send = url.protocol === "https:" ? https_1.default.request : http_1.default.request;
|
|
157
|
+
const request = send(url, { method: (_a = upload.method) !== null && _a !== void 0 ? _a : "PUT", headers }, (response) => {
|
|
158
|
+
const chunks = [];
|
|
159
|
+
let kept = 0;
|
|
160
|
+
response.on("data", (chunk) => {
|
|
161
|
+
if (kept < 2048) {
|
|
162
|
+
chunks.push(chunk);
|
|
163
|
+
kept += chunk.length;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
response.on("end", () => {
|
|
167
|
+
var _a;
|
|
168
|
+
const status = (_a = response.statusCode) !== null && _a !== void 0 ? _a : 0;
|
|
169
|
+
if (status >= 200 && status < 300) {
|
|
170
|
+
resolve();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const body = Buffer.concat(chunks)
|
|
174
|
+
.toString("utf8")
|
|
175
|
+
.slice(0, 500)
|
|
176
|
+
.trim();
|
|
177
|
+
reject(new Error(`storage refused the upload with HTTP ${status}${body ? `: ${body}` : ""}`));
|
|
178
|
+
});
|
|
179
|
+
response.on("error", reject);
|
|
180
|
+
});
|
|
181
|
+
request.on("error", reject);
|
|
182
|
+
let sent = 0;
|
|
183
|
+
const file = fs_1.default.createReadStream(filePath);
|
|
184
|
+
file.on("data", (chunk) => {
|
|
185
|
+
sent += chunk.length;
|
|
186
|
+
onProgress(sent);
|
|
187
|
+
});
|
|
188
|
+
file.on("error", (error) => {
|
|
189
|
+
request.destroy(error);
|
|
190
|
+
reject(error);
|
|
191
|
+
});
|
|
192
|
+
file.pipe(request);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=tablefile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tablefile.js","sourceRoot":"","sources":["../../../src/commands/table/tablefile.ts"],"names":[],"mappings":"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"}
|