revisium 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -0
- package/README.md +23 -3
- package/dist/e2e/setup/global-setup.js +2 -3
- package/dist/e2e/setup/global-setup.js.map +1 -1
- package/dist/e2e/setup/global-teardown.js +0 -2
- package/dist/e2e/setup/global-teardown.js.map +1 -1
- package/dist/e2e/utils/constants.d.ts +0 -2
- package/dist/e2e/utils/constants.js +0 -2
- package/dist/e2e/utils/constants.js.map +1 -1
- package/dist/e2e/utils/docker-helper.d.ts +0 -2
- package/dist/e2e/utils/docker-helper.js +0 -13
- package/dist/e2e/utils/docker-helper.js.map +1 -1
- package/dist/package.json +10 -12
- package/dist/src/commands/migration/apply-migrations.command.d.ts +1 -1
- package/dist/src/commands/migration/apply-migrations.command.js +4 -5
- package/dist/src/commands/migration/apply-migrations.command.js.map +1 -1
- package/dist/src/commands/migration/save-migrations.command.d.ts +1 -1
- package/dist/src/commands/migration/save-migrations.command.js +6 -6
- package/dist/src/commands/migration/save-migrations.command.js.map +1 -1
- package/dist/src/commands/rows/save-rows.command.d.ts +1 -1
- package/dist/src/commands/rows/save-rows.command.js +12 -10
- package/dist/src/commands/rows/save-rows.command.js.map +1 -1
- package/dist/src/commands/rows/upload-rows.command.d.ts +1 -1
- package/dist/src/commands/rows/upload-rows.command.js +12 -15
- package/dist/src/commands/rows/upload-rows.command.js.map +1 -1
- package/dist/src/commands/schema/create-migrations.command.js.map +1 -1
- package/dist/src/commands/schema/save-schema.command.d.ts +1 -1
- package/dist/src/commands/schema/save-schema.command.js +7 -7
- package/dist/src/commands/schema/save-schema.command.js.map +1 -1
- package/dist/src/services/connection/api-client-adapter.d.ts +2 -4
- package/dist/src/services/connection/api-client-adapter.js +40 -36
- package/dist/src/services/connection/api-client-adapter.js.map +1 -1
- package/dist/src/services/connection/api-client.d.ts +3 -4
- package/dist/src/services/connection/api-client.js +11 -33
- package/dist/src/services/connection/api-client.js.map +1 -1
- package/dist/src/services/connection/connection-factory.service.d.ts +4 -6
- package/dist/src/services/connection/connection-factory.service.js +18 -39
- package/dist/src/services/connection/connection-factory.service.js.map +1 -1
- package/dist/src/services/connection/connection.service.d.ts +2 -73
- package/dist/src/services/connection/connection.service.js +2 -11
- package/dist/src/services/connection/connection.service.js.map +1 -1
- package/dist/src/services/sync/commit-revision.service.js +6 -28
- package/dist/src/services/sync/commit-revision.service.js.map +1 -1
- package/dist/src/services/sync/row-sync.service.d.ts +5 -5
- package/dist/src/services/sync/row-sync.service.js +10 -10
- package/dist/src/services/sync/row-sync.service.js.map +1 -1
- package/dist/src/services/sync/sync-data.service.d.ts +1 -0
- package/dist/src/services/sync/sync-data.service.js +21 -21
- package/dist/src/services/sync/sync-data.service.js.map +1 -1
- package/dist/src/services/sync/sync-schema.service.d.ts +1 -0
- package/dist/src/services/sync/sync-schema.service.js +11 -10
- package/dist/src/services/sync/sync-schema.service.js.map +1 -1
- package/dist/src/types/migration.types.d.ts +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/configuration.md +58 -9
- package/docs/docker-deployment.md +48 -13
- package/docs/migrate-commands.md +35 -10
- package/docs/rows-commands.md +30 -7
- package/docs/schema-commands.md +21 -5
- package/docs/sync-commands.md +44 -12
- package/e2e/setup/global-setup.ts +3 -9
- package/e2e/setup/global-teardown.ts +0 -6
- package/e2e/utils/constants.ts +0 -2
- package/e2e/utils/docker-helper.ts +0 -23
- package/package.json +10 -12
- package/revisium-entrypoint.sh +3 -8
- package/src/__tests__/entrypoint.spec.ts +371 -0
- package/src/commands/migration/apply-migrations.command.ts +5 -6
- package/src/commands/migration/save-migrations.command.ts +7 -6
- package/src/commands/rows/save-rows.command.ts +14 -28
- package/src/commands/rows/upload-rows.command.ts +7 -15
- package/src/commands/schema/create-migrations.command.ts +1 -1
- package/src/commands/schema/save-schema.command.ts +9 -14
- package/src/services/connection/__tests__/connection-factory.service.spec.ts +117 -0
- package/src/services/connection/__tests__/connection.service.spec.ts +27 -117
- package/src/services/connection/api-client-adapter.ts +41 -45
- package/src/services/connection/api-client.ts +11 -50
- package/src/services/connection/connection-factory.service.ts +35 -65
- package/src/services/connection/connection.service.ts +3 -14
- package/src/services/sync/__tests__/row-sync.service.spec.ts +3 -6
- package/src/services/sync/commit-revision.service.ts +7 -51
- package/src/services/sync/row-sync.service.ts +4 -18
- package/src/services/sync/sync-data.service.ts +32 -45
- package/src/services/sync/sync-schema.service.ts +14 -22
- package/src/types/migration.types.ts +2 -2
- package/dist/src/__generated__/api.d.ts +0 -688
- package/dist/src/__generated__/api.js +0 -698
- package/dist/src/__generated__/api.js.map +0 -1
- package/e2e/docker-compose.e2e.yml +0 -31
- package/src/__generated__/api.ts +0 -2598
package/.github/workflows/ci.yml
CHANGED
|
@@ -46,9 +46,41 @@ jobs:
|
|
|
46
46
|
- name: Build CLI for E2E tests
|
|
47
47
|
run: npm run build
|
|
48
48
|
|
|
49
|
+
- name: Start Revisium
|
|
50
|
+
run: |
|
|
51
|
+
FILE_PLUGIN_PUBLIC_ENDPOINT=https://cdn.example.com npx @revisium/standalone --auth --port 8082 --data .e2e-test > revisium.log 2>&1 &
|
|
52
|
+
echo $! > .e2e-test.pid
|
|
53
|
+
echo "Started with PID $(cat .e2e-test.pid)"
|
|
54
|
+
|
|
55
|
+
- name: Wait for Revisium to be ready
|
|
56
|
+
run: |
|
|
57
|
+
for i in $(seq 1 300); do
|
|
58
|
+
if curl -sf http://localhost:8082/health/readiness > /dev/null 2>&1; then
|
|
59
|
+
echo "Ready after ${i}s"
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
sleep 1
|
|
63
|
+
done
|
|
64
|
+
echo "Timed out waiting for Revisium"
|
|
65
|
+
cat revisium.log
|
|
66
|
+
exit 1
|
|
67
|
+
|
|
49
68
|
- name: Run E2E tests with coverage
|
|
50
69
|
run: npm run test:e2e:cov
|
|
51
70
|
|
|
71
|
+
- name: Stop Revisium
|
|
72
|
+
if: always()
|
|
73
|
+
run: |
|
|
74
|
+
if [ -f .e2e-test.pid ]; then
|
|
75
|
+
kill $(cat .e2e-test.pid) 2>/dev/null || true
|
|
76
|
+
rm -f .e2e-test.pid
|
|
77
|
+
fi
|
|
78
|
+
rm -rf .e2e-test
|
|
79
|
+
|
|
80
|
+
- name: Show Revisium logs on failure
|
|
81
|
+
if: failure()
|
|
82
|
+
run: cat revisium.log 2>/dev/null || true
|
|
83
|
+
|
|
52
84
|
- name: Merge coverage reports
|
|
53
85
|
run: npm run coverage:merge
|
|
54
86
|
|
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ Like Prisma, save schema migrations locally and apply them in CI/CD:
|
|
|
54
54
|
```bash
|
|
55
55
|
# 1. Save migrations locally (during development)
|
|
56
56
|
revisium migrate save --file ./revisium/migrations.json \
|
|
57
|
-
--url revisium://
|
|
57
|
+
--url revisium://admin:admin@localhost:8080/myorg/myproject/master
|
|
58
58
|
|
|
59
59
|
# 2. Commit to git
|
|
60
60
|
git add revisium/migrations.json
|
|
@@ -116,9 +116,18 @@ revisium rows upload --folder ./data --commit \
|
|
|
116
116
|
Synchronize directly between two projects without intermediate files:
|
|
117
117
|
|
|
118
118
|
```bash
|
|
119
|
+
# With tokens in URL
|
|
119
120
|
revisium sync all \
|
|
120
121
|
--source revisium://source.example.com/org/proj/master:head?token=xxx \
|
|
121
|
-
--target revisium://target.example.com/org/proj?token=yyy \
|
|
122
|
+
--target revisium://target.example.com/org/proj/master?token=yyy \
|
|
123
|
+
--commit
|
|
124
|
+
|
|
125
|
+
# With tokens via environment (recommended for CI/CD)
|
|
126
|
+
export REVISIUM_SOURCE_TOKEN=$SOURCE_TOKEN
|
|
127
|
+
export REVISIUM_TARGET_TOKEN=$TARGET_TOKEN
|
|
128
|
+
revisium sync all \
|
|
129
|
+
--source revisium://source.example.com/org/proj/master:head \
|
|
130
|
+
--target revisium://target.example.com/org/proj/master \
|
|
122
131
|
--commit
|
|
123
132
|
```
|
|
124
133
|
|
|
@@ -141,14 +150,25 @@ revisium sync all \
|
|
|
141
150
|
Configure via environment variables or `.env` file:
|
|
142
151
|
|
|
143
152
|
```env
|
|
153
|
+
# Recommended: URL + Token
|
|
154
|
+
REVISIUM_URL=revisium://cloud.revisium.io/your_org/your_project/main
|
|
155
|
+
REVISIUM_TOKEN=your_jwt_token
|
|
156
|
+
|
|
157
|
+
# Alternative: URL + Username/Password
|
|
144
158
|
REVISIUM_URL=revisium://cloud.revisium.io/your_org/your_project/main
|
|
145
159
|
REVISIUM_USERNAME=your_username
|
|
146
160
|
REVISIUM_PASSWORD=your_password
|
|
147
161
|
```
|
|
148
162
|
|
|
149
|
-
Or use command-line
|
|
163
|
+
Or use command-line `--url` option with credentials via environment:
|
|
150
164
|
|
|
151
165
|
```bash
|
|
166
|
+
# Token in environment, target in URL
|
|
167
|
+
export REVISIUM_TOKEN=$MY_TOKEN
|
|
168
|
+
revisium schema save --folder ./schemas \
|
|
169
|
+
--url revisium://cloud.revisium.io/my-org/my-project/develop
|
|
170
|
+
|
|
171
|
+
# Token in URL query parameter
|
|
152
172
|
revisium schema save --folder ./schemas \
|
|
153
173
|
--url revisium://cloud.revisium.io/my-org/my-project/develop?token=$TOKEN
|
|
154
174
|
```
|
|
@@ -11,9 +11,8 @@ async function globalSetup() {
|
|
|
11
11
|
console.log('\n========================================');
|
|
12
12
|
console.log('E2E Global Setup');
|
|
13
13
|
console.log('========================================\n');
|
|
14
|
-
(
|
|
15
|
-
|
|
16
|
-
await (0, docker_helper_1.waitForHealthy)(`${constants_1.E2E_CONFIG.API_URL}/health`);
|
|
14
|
+
console.log('Waiting for Revisium to be ready...');
|
|
15
|
+
await (0, docker_helper_1.waitForHealthy)(`${constants_1.E2E_CONFIG.API_URL}/health/readiness`);
|
|
17
16
|
console.log('\nLogging in as admin...');
|
|
18
17
|
const token = await api_client_1.api.login();
|
|
19
18
|
console.log('Login successful');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-setup.js","sourceRoot":"","sources":["../../../e2e/setup/global-setup.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"global-setup.js","sourceRoot":"","sources":["../../../e2e/setup/global-setup.ts"],"names":[],"mappings":";;AAQA,8BAuBC;AA/BD,yBAAyB;AACzB,6BAA6B;AAC7B,0DAAwD;AACxD,oDAA0C;AAC1C,kDAAgD;AAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;AAE5C,KAAK,UAAU,WAAW;IACvC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,IAAA,8BAAc,EAAC,GAAG,sBAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAE/D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,gBAAG,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,sBAAU,CAAC,OAAO;QAC/B,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -4,13 +4,11 @@ exports.default = globalTeardown;
|
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const child_process_1 = require("child_process");
|
|
7
|
-
const docker_helper_1 = require("../utils/docker-helper");
|
|
8
7
|
const ENV_FILE = path.join(process.cwd(), '.e2e-env.json');
|
|
9
8
|
function globalTeardown() {
|
|
10
9
|
console.log('\n========================================');
|
|
11
10
|
console.log('E2E Global Teardown');
|
|
12
11
|
console.log('========================================\n');
|
|
13
|
-
(0, docker_helper_1.stopDocker)();
|
|
14
12
|
const nycOutputDir = path.join(process.cwd(), '.nyc_output');
|
|
15
13
|
if (fs.existsSync(nycOutputDir)) {
|
|
16
14
|
const files = fs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-teardown.js","sourceRoot":"","sources":["../../../e2e/setup/global-teardown.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"global-teardown.js","sourceRoot":"","sources":["../../../e2e/setup/global-teardown.ts"],"names":[],"mappings":";;AAMA,iCA+BC;AArCD,yBAAyB;AACzB,6BAA6B;AAC7B,iDAAyC;AAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;AAE3D,SAAwB,cAAc;IACpC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,EAAE;aACb,WAAW,CAAC,YAAY,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,0DAA0D,EAAE;oBACnE,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -5,8 +5,6 @@ exports.E2E_CONFIG = {
|
|
|
5
5
|
API_URL: 'http://localhost:8082',
|
|
6
6
|
ADMIN_USERNAME: 'admin',
|
|
7
7
|
ADMIN_PASSWORD: 'admin',
|
|
8
|
-
DOCKER_COMPOSE_FILE: 'e2e/docker-compose.e2e.yml',
|
|
9
|
-
DOCKER_PROJECT_NAME: 'revisium-cli-e2e',
|
|
10
8
|
HEALTH_CHECK_TIMEOUT: 60000,
|
|
11
9
|
HEALTH_CHECK_INTERVAL: 1000,
|
|
12
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../e2e/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG;IACxB,OAAO,EAAE,uBAAuB;IAChC,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,OAAO;IACvB,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../e2e/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG;IACxB,OAAO,EAAE,uBAAuB;IAChC,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,OAAO;IACvB,oBAAoB,EAAE,KAAK;IAC3B,qBAAqB,EAAE,IAAI;CAC5B,CAAC;AAEW,QAAA,aAAa,GAAG,0BAA0B,CAAC"}
|
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.startDocker = startDocker;
|
|
4
|
-
exports.stopDocker = stopDocker;
|
|
5
3
|
exports.waitForHealthy = waitForHealthy;
|
|
6
|
-
const child_process_1 = require("child_process");
|
|
7
4
|
const constants_1 = require("./constants");
|
|
8
|
-
function startDocker() {
|
|
9
|
-
console.log('Starting Docker containers...');
|
|
10
|
-
(0, child_process_1.execSync)(`docker compose -f ${constants_1.E2E_CONFIG.DOCKER_COMPOSE_FILE} -p ${constants_1.E2E_CONFIG.DOCKER_PROJECT_NAME} up -d --wait`, { stdio: 'inherit' });
|
|
11
|
-
console.log('Docker containers started');
|
|
12
|
-
}
|
|
13
|
-
function stopDocker() {
|
|
14
|
-
console.log('Stopping Docker containers...');
|
|
15
|
-
(0, child_process_1.execSync)(`docker compose -f ${constants_1.E2E_CONFIG.DOCKER_COMPOSE_FILE} -p ${constants_1.E2E_CONFIG.DOCKER_PROJECT_NAME} down -v`, { stdio: 'inherit' });
|
|
16
|
-
console.log('Docker containers stopped');
|
|
17
|
-
}
|
|
18
5
|
async function waitForHealthy(url, timeout = constants_1.E2E_CONFIG.HEALTH_CHECK_TIMEOUT) {
|
|
19
6
|
const startTime = Date.now();
|
|
20
7
|
while (Date.now() - startTime < timeout) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-helper.js","sourceRoot":"","sources":["../../../e2e/utils/docker-helper.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"docker-helper.js","sourceRoot":"","sources":["../../../e2e/utils/docker-helper.ts"],"names":[],"mappings":";;AAEA,wCAuBC;AAzBD,2CAAyC;AAElC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,UAAkB,sBAAU,CAAC,oBAAoB;IAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,sBAAU,CAAC,qBAAqB,CAAC,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oBAAoB,OAAO,IAAI,CAAC,CAAC;AAC/E,CAAC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "revisium",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"homepage": "https://revisium.io",
|
|
5
5
|
"description": "A CLI tool for interacting with Revisium instances, providing migration management, schema export, and data export capabilities.",
|
|
6
6
|
"author": "Anton Kashirov",
|
|
@@ -27,13 +27,11 @@
|
|
|
27
27
|
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
|
28
28
|
"test:e2e": "jest --config ./e2e/jest-e2e.json",
|
|
29
29
|
"test:e2e:cov": "npm run build:instrumented && E2E_INSTRUMENTED=1 jest --config ./e2e/jest-e2e.json",
|
|
30
|
+
"test:e2e:up": "FILE_PLUGIN_PUBLIC_ENDPOINT=https://cdn.example.com npx @revisium/standalone --auth --port 8082 --data .e2e-test & echo $! > .e2e-test.pid",
|
|
31
|
+
"test:e2e:down": "if [ -f .e2e-test.pid ]; then kill $(cat .e2e-test.pid) 2>/dev/null; rm -f .e2e-test.pid; fi; rm -rf .e2e-test",
|
|
30
32
|
"build:instrumented": "npm run build && rm -rf dist-instrumented && mkdir -p dist-instrumented && cp dist/package.json dist-instrumented/ && npx nyc instrument dist/src dist-instrumented/src --include='**/*.js'",
|
|
31
33
|
"test:all": "npm run test:cov && npm run test:e2e:cov && npm run coverage:merge",
|
|
32
|
-
"coverage:merge": "node scripts/merge-coverage.js"
|
|
33
|
-
"docker:e2e:up": "docker-compose -f e2e/docker-compose.e2e.yml up -d",
|
|
34
|
-
"docker:e2e:down": "docker-compose -f e2e/docker-compose.e2e.yml down -v",
|
|
35
|
-
"docker:e2e:logs": "docker-compose -f e2e/docker-compose.e2e.yml logs -f",
|
|
36
|
-
"generate:api": "npx swagger-typescript-api generate -p https://cloud.revisium.io/api-json -o src/__generated__ -n api.ts --extract-request-params --disable-throw-on-error"
|
|
34
|
+
"coverage:merge": "node scripts/merge-coverage.js"
|
|
37
35
|
},
|
|
38
36
|
"bin": {
|
|
39
37
|
"revisium": "dist/src/main.js"
|
|
@@ -44,6 +42,7 @@
|
|
|
44
42
|
"@nestjs/config": "^4.0.2",
|
|
45
43
|
"@nestjs/core": "^11.0.1",
|
|
46
44
|
"@nestjs/platform-express": "^11.0.1",
|
|
45
|
+
"@revisium/client": "^0.4.0",
|
|
47
46
|
"@revisium/schema-toolkit": "^0.4.1",
|
|
48
47
|
"@types/object-hash": "^3.0.6",
|
|
49
48
|
"ajv": "^8.17.1",
|
|
@@ -51,15 +50,16 @@
|
|
|
51
50
|
"nest-commander": "^3.18.0",
|
|
52
51
|
"object-hash": "^3.0.0",
|
|
53
52
|
"reflect-metadata": "^0.2.2",
|
|
54
|
-
"rxjs": "^7.8.1"
|
|
55
|
-
"swagger-typescript-api": "^13.2.7"
|
|
53
|
+
"rxjs": "^7.8.1"
|
|
56
54
|
},
|
|
57
55
|
"devDependencies": {
|
|
58
56
|
"@eslint/eslintrc": "^3.2.0",
|
|
59
57
|
"@eslint/js": "^9.18.0",
|
|
58
|
+
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
|
60
59
|
"@nestjs/cli": "^11.0.0",
|
|
61
60
|
"@nestjs/schematics": "^11.0.0",
|
|
62
61
|
"@nestjs/testing": "^11.0.1",
|
|
62
|
+
"@revisium/standalone": "2.6.0",
|
|
63
63
|
"@swc/cli": "^0.6.0",
|
|
64
64
|
"@swc/core": "^1.10.7",
|
|
65
65
|
"@types/express": "^5.0.0",
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"eslint-plugin-sonarjs": "^3.0.5",
|
|
73
73
|
"globals": "^16.0.0",
|
|
74
74
|
"jest": "^29.7.0",
|
|
75
|
+
"nyc": "^17.1.0",
|
|
75
76
|
"prettier": "^3.4.2",
|
|
76
77
|
"source-map-support": "^0.5.21",
|
|
77
78
|
"supertest": "^7.0.0",
|
|
@@ -80,9 +81,7 @@
|
|
|
80
81
|
"ts-node": "^10.9.2",
|
|
81
82
|
"tsconfig-paths": "^4.2.0",
|
|
82
83
|
"typescript": "^5.7.3",
|
|
83
|
-
"typescript-eslint": "^8.20.0"
|
|
84
|
-
"nyc": "^17.1.0",
|
|
85
|
-
"@istanbuljs/nyc-config-typescript": "^1.0.2"
|
|
84
|
+
"typescript-eslint": "^8.20.0"
|
|
86
85
|
},
|
|
87
86
|
"jest": {
|
|
88
87
|
"modulePaths": [
|
|
@@ -102,7 +101,6 @@
|
|
|
102
101
|
"<rootDir>/src/**/*.(t|j)s",
|
|
103
102
|
"!<rootDir>/src/main.ts",
|
|
104
103
|
"!<rootDir>/src/app.module.ts",
|
|
105
|
-
"!<rootDir>/src/__generated__/**",
|
|
106
104
|
"!<rootDir>/src/**/__tests__/**",
|
|
107
105
|
"!<rootDir>/src/**/index.ts"
|
|
108
106
|
],
|
|
@@ -15,7 +15,7 @@ export declare class ApplyMigrationsCommand extends BaseCommand {
|
|
|
15
15
|
run(_inputs: string[], options: Options): Promise<void>;
|
|
16
16
|
private validateJsonFile;
|
|
17
17
|
private applyMigration;
|
|
18
|
-
private get
|
|
18
|
+
private get revisionScope();
|
|
19
19
|
parseFile(value: string): string;
|
|
20
20
|
parseCommit(value?: string): boolean;
|
|
21
21
|
}
|
|
@@ -52,7 +52,6 @@ let ApplyMigrationsCommand = class ApplyMigrationsCommand extends base_command_1
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
async applyMigration(migrations) {
|
|
55
|
-
const revisionId = this.connectionService.draftRevisionId;
|
|
56
55
|
if (migrations.length === 0) {
|
|
57
56
|
this.logger.success('No migrations to apply - all migrations are up to date');
|
|
58
57
|
return;
|
|
@@ -61,10 +60,10 @@ let ApplyMigrationsCommand = class ApplyMigrationsCommand extends base_command_1
|
|
|
61
60
|
let countAppliedMigrations = 0;
|
|
62
61
|
try {
|
|
63
62
|
for (const localMigration of migrations) {
|
|
64
|
-
const
|
|
63
|
+
const results = await this.revisionScope.applyMigrationsWithStatus([
|
|
65
64
|
localMigration,
|
|
66
65
|
]);
|
|
67
|
-
const response =
|
|
66
|
+
const response = results[0];
|
|
68
67
|
if (response.status === 'failed') {
|
|
69
68
|
this.logger.migrationFailed(response);
|
|
70
69
|
throw new Error(`Migration ${response.id} failed: ${response.error || 'Unknown error'}`);
|
|
@@ -91,8 +90,8 @@ let ApplyMigrationsCommand = class ApplyMigrationsCommand extends base_command_1
|
|
|
91
90
|
}
|
|
92
91
|
return countAppliedMigrations;
|
|
93
92
|
}
|
|
94
|
-
get
|
|
95
|
-
return this.connectionService.
|
|
93
|
+
get revisionScope() {
|
|
94
|
+
return this.connectionService.revisionScope;
|
|
96
95
|
}
|
|
97
96
|
parseFile(value) {
|
|
98
97
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-migrations.command.js","sourceRoot":"","sources":["../../../../src/commands/migration/apply-migrations.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA4C;AAC5C,mDAAoD;
|
|
1
|
+
{"version":3,"file":"apply-migrations.command.js","sourceRoot":"","sources":["../../../../src/commands/migration/apply-migrations.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,12 +28,12 @@ let SaveMigrationsCommand = class SaveMigrationsCommand extends base_command_1.B
|
|
|
28
28
|
throw new Error('Error: --file option is required');
|
|
29
29
|
}
|
|
30
30
|
await this.connectionService.connect(options);
|
|
31
|
-
await this.saveFile(
|
|
31
|
+
await this.saveFile(options.file);
|
|
32
32
|
}
|
|
33
|
-
async saveFile(
|
|
33
|
+
async saveFile(filePath) {
|
|
34
34
|
try {
|
|
35
|
-
const
|
|
36
|
-
await (0, promises_1.writeFile)(filePath, JSON.stringify(
|
|
35
|
+
const migrations = await this.revisionScope.getMigrations();
|
|
36
|
+
await (0, promises_1.writeFile)(filePath, JSON.stringify(migrations, null, 2), 'utf-8');
|
|
37
37
|
this.logger.success(`Save migrations to: ${filePath}`);
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
@@ -44,8 +44,8 @@ let SaveMigrationsCommand = class SaveMigrationsCommand extends base_command_1.B
|
|
|
44
44
|
parseFile(value) {
|
|
45
45
|
return value;
|
|
46
46
|
}
|
|
47
|
-
get
|
|
48
|
-
return this.connectionService.
|
|
47
|
+
get revisionScope() {
|
|
48
|
+
return this.connectionService.revisionScope;
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
exports.SaveMigrationsCommand = SaveMigrationsCommand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-migrations.command.js","sourceRoot":"","sources":["../../../../src/commands/migration/save-migrations.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6C;AAC7C,mDAAoD;
|
|
1
|
+
{"version":3,"file":"save-migrations.command.js","sourceRoot":"","sources":["../../../../src/commands/migration/save-migrations.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6C;AAC7C,mDAAoD;AAEpD,kDAAqE;AACrE,0DAA4D;AAC5D,kDAAoD;AAU7C,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,0BAAW;IAEjC;IACA;IAFnB,YACmB,iBAAoC,EACpC,MAAqB;QAEtC,KAAK,EAAE,CAAC;QAHS,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,WAAM,GAAN,MAAM,CAAe;IAGxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAiB,EAAE,OAAgB;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YAE5D,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAExE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3F,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAOD,SAAS,CAAC,KAAa;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAC9C,CAAC;CACF,CAAA;AA5CY,sDAAqB;AAqChC;IALC,IAAA,uBAAM,EAAC;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,IAAI;KACf,CAAC;;;;sDAGD;gCAvCU,qBAAqB;IAJjC,IAAA,2BAAU,EAAC;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,yBAAyB;KACvC,CAAC;qCAGsC,8BAAiB;QAC5B,sBAAa;GAH7B,qBAAqB,CA4CjC"}
|
|
@@ -13,7 +13,7 @@ export declare class SaveRowsCommand extends BaseCommand {
|
|
|
13
13
|
private saveAllTableRows;
|
|
14
14
|
private getTargetTables;
|
|
15
15
|
private saveRowsFromTable;
|
|
16
|
-
private get
|
|
16
|
+
private get revisionScope();
|
|
17
17
|
parseFolder(val: string): string;
|
|
18
18
|
parseTables(value: string): string;
|
|
19
19
|
}
|
|
@@ -30,15 +30,15 @@ let SaveRowsCommand = class SaveRowsCommand extends base_command_1.BaseCommand {
|
|
|
30
30
|
throw new Error('Error: --folder option is required');
|
|
31
31
|
}
|
|
32
32
|
await this.connectionService.connect(options);
|
|
33
|
-
await this.saveAllTableRows(
|
|
33
|
+
await this.saveAllTableRows(options.folder, options.tables);
|
|
34
34
|
}
|
|
35
|
-
async saveAllTableRows(
|
|
35
|
+
async saveAllTableRows(folderPath, tableFilter) {
|
|
36
36
|
try {
|
|
37
37
|
await (0, promises_1.mkdir)(folderPath, { recursive: true });
|
|
38
|
-
const tablesToProcess = await this.getTargetTables(
|
|
38
|
+
const tablesToProcess = await this.getTargetTables(tableFilter);
|
|
39
39
|
this.logger.foundItems(tablesToProcess.length, 'tables to process');
|
|
40
40
|
for (const tableId of tablesToProcess) {
|
|
41
|
-
await this.saveRowsFromTable(
|
|
41
|
+
await this.saveRowsFromTable(tableId, folderPath);
|
|
42
42
|
}
|
|
43
43
|
this.logger.summary(`Successfully processed ${tablesToProcess.length} tables in: ${folderPath}`);
|
|
44
44
|
}
|
|
@@ -47,19 +47,21 @@ let SaveRowsCommand = class SaveRowsCommand extends base_command_1.BaseCommand {
|
|
|
47
47
|
throw error;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
async getTargetTables(
|
|
50
|
+
async getTargetTables(tableFilter) {
|
|
51
51
|
if (tableFilter) {
|
|
52
52
|
return tableFilter.split(',').map((id) => id.trim());
|
|
53
53
|
}
|
|
54
|
-
const { items } = await (0, paginated_fetcher_1.fetchAllPages)((params) => this.
|
|
54
|
+
const { items } = await (0, paginated_fetcher_1.fetchAllPages)((params) => this.revisionScope.getTables(params).then((data) => ({ data })));
|
|
55
55
|
return items.map((table) => table.id);
|
|
56
56
|
}
|
|
57
|
-
async saveRowsFromTable(
|
|
57
|
+
async saveRowsFromTable(tableId, folderPath) {
|
|
58
58
|
try {
|
|
59
59
|
this.logger.processingTable(tableId);
|
|
60
60
|
const tableFolderPath = (0, node_path_1.join)(folderPath, tableId);
|
|
61
61
|
await (0, promises_1.mkdir)(tableFolderPath, { recursive: true });
|
|
62
|
-
const { processed, total } = await (0, paginated_fetcher_1.fetchAndProcessPages)((params) => this.
|
|
62
|
+
const { processed, total } = await (0, paginated_fetcher_1.fetchAndProcessPages)((params) => this.revisionScope
|
|
63
|
+
.getRows(tableId, params)
|
|
64
|
+
.then((data) => ({ data })), async (row) => {
|
|
63
65
|
const filePath = (0, node_path_1.join)(tableFolderPath, `${row.id}.json`);
|
|
64
66
|
await (0, promises_1.writeFile)(filePath, JSON.stringify(row, null, 2), 'utf-8');
|
|
65
67
|
}, {
|
|
@@ -71,8 +73,8 @@ let SaveRowsCommand = class SaveRowsCommand extends base_command_1.BaseCommand {
|
|
|
71
73
|
this.logger.error(`Failed to process table ${tableId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
get
|
|
75
|
-
return this.connectionService.
|
|
76
|
+
get revisionScope() {
|
|
77
|
+
return this.connectionService.revisionScope;
|
|
76
78
|
}
|
|
77
79
|
parseFolder(val) {
|
|
78
80
|
return val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-rows.command.js","sourceRoot":"","sources":["../../../../src/commands/rows/save-rows.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAoD;AACpD,yCAAiC;AACjC,mDAAoD;
|
|
1
|
+
{"version":3,"file":"save-rows.command.js","sourceRoot":"","sources":["../../../../src/commands/rows/save-rows.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export declare class UploadRowsCommand extends BaseCommand {
|
|
|
23
23
|
private getSortedTables;
|
|
24
24
|
private uploadTableRows;
|
|
25
25
|
private handleError;
|
|
26
|
-
private get
|
|
26
|
+
private get revisionScope();
|
|
27
27
|
parseFolder(val: string): string;
|
|
28
28
|
parseTables(val: string): string;
|
|
29
29
|
parseCommit(value?: string): boolean;
|
|
@@ -43,21 +43,20 @@ let UploadRowsCommand = class UploadRowsCommand extends base_command_1.BaseComma
|
|
|
43
43
|
throw new Error('Error: --folder option is required');
|
|
44
44
|
}
|
|
45
45
|
await this.connectionService.connect(options);
|
|
46
|
-
const revisionId = this.connectionService.draftRevisionId;
|
|
47
46
|
const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
48
|
-
const totalStats = await this.uploadAllTableRows(
|
|
47
|
+
const totalStats = await this.uploadAllTableRows(options.folder, options.tables, batchSize);
|
|
49
48
|
const totalChanges = totalStats.uploaded + totalStats.updated;
|
|
50
49
|
await this.commitRevisionService.handleCommitFlow(options.commit, 'Uploaded', totalChanges);
|
|
51
50
|
}
|
|
52
|
-
async uploadAllTableRows(
|
|
51
|
+
async uploadAllTableRows(folderPath, tableFilter, batchSize) {
|
|
53
52
|
const tableIds = await this.fileRowLoader.getTableIds(folderPath, tableFilter);
|
|
54
53
|
this.logger.foundItems(tableIds.length, 'tables to process');
|
|
55
|
-
const tableSchemas = await this.fetchTableSchemas(
|
|
54
|
+
const tableSchemas = await this.fetchTableSchemas(tableIds);
|
|
56
55
|
const sortedTables = this.getSortedTables(tableSchemas, tableIds);
|
|
57
56
|
const totalStats = (0, stats_formatter_utils_1.createEmptyUploadStats)();
|
|
58
57
|
for (const tableId of sortedTables) {
|
|
59
58
|
try {
|
|
60
|
-
const tableStats = await this.uploadTableRows(
|
|
59
|
+
const tableStats = await this.uploadTableRows(tableId, folderPath, tableSchemas[tableId], batchSize);
|
|
61
60
|
(0, stats_formatter_utils_1.aggregateUploadStats)(totalStats, tableStats);
|
|
62
61
|
}
|
|
63
62
|
catch (error) {
|
|
@@ -68,14 +67,12 @@ let UploadRowsCommand = class UploadRowsCommand extends base_command_1.BaseComma
|
|
|
68
67
|
this.logger.lines((0, stats_formatter_utils_1.formatUploadSummary)(totalStats));
|
|
69
68
|
return totalStats;
|
|
70
69
|
}
|
|
71
|
-
async fetchTableSchemas(
|
|
70
|
+
async fetchTableSchemas(tables) {
|
|
72
71
|
const schemas = {};
|
|
73
72
|
for (const tableId of tables) {
|
|
74
73
|
try {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
schemas[tableId] = result.data;
|
|
78
|
-
}
|
|
74
|
+
const schema = await this.revisionScope.getTableSchema(tableId);
|
|
75
|
+
schemas[tableId] = schema;
|
|
79
76
|
}
|
|
80
77
|
catch (error) {
|
|
81
78
|
this.logger.warn(`Could not fetch schema for table ${tableId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -91,7 +88,7 @@ let UploadRowsCommand = class UploadRowsCommand extends base_command_1.BaseComma
|
|
|
91
88
|
}
|
|
92
89
|
return result.sortedTables.filter((id) => originalTables.includes(id));
|
|
93
90
|
}
|
|
94
|
-
async uploadTableRows(
|
|
91
|
+
async uploadTableRows(tableId, folderPath, schema, batchSize) {
|
|
95
92
|
this.logger.processingTable(tableId);
|
|
96
93
|
const validator = schema
|
|
97
94
|
? (data) => this.jsonValidatorService.validateSchema(schema)(data)
|
|
@@ -112,8 +109,8 @@ let UploadRowsCommand = class UploadRowsCommand extends base_command_1.BaseComma
|
|
|
112
109
|
this.logger.info((0, stats_formatter_utils_1.formatTableResult)(tableId, stats));
|
|
113
110
|
return stats;
|
|
114
111
|
}
|
|
115
|
-
const apiClient = (0, connection_1.createApiClientAdapter)(this.
|
|
116
|
-
const syncStats = await this.rowSyncService.syncTableRows(apiClient,
|
|
112
|
+
const apiClient = (0, connection_1.createApiClientAdapter)(this.revisionScope);
|
|
113
|
+
const syncStats = await this.rowSyncService.syncTableRows(apiClient, tableId, loadResult.rows, batchSize, (state) => (0, progress_1.printProgress)(state, { indent: ' ' }));
|
|
117
114
|
(0, progress_1.clearProgressLine)();
|
|
118
115
|
stats.uploaded = syncStats.created;
|
|
119
116
|
stats.updated = syncStats.updated;
|
|
@@ -137,8 +134,8 @@ let UploadRowsCommand = class UploadRowsCommand extends base_command_1.BaseComma
|
|
|
137
134
|
this.logger.error(`Upload stopped due to error in table "${tableId}": ${error instanceof Error ? error.message : String(error)}`);
|
|
138
135
|
}
|
|
139
136
|
}
|
|
140
|
-
get
|
|
141
|
-
return this.connectionService.
|
|
137
|
+
get revisionScope() {
|
|
138
|
+
return this.connectionService.revisionScope;
|
|
142
139
|
}
|
|
143
140
|
parseFolder(val) {
|
|
144
141
|
return val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-rows.command.js","sourceRoot":"","sources":["../../../../src/commands/rows/upload-rows.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAoD;
|
|
1
|
+
{"version":3,"file":"upload-rows.command.js","sourceRoot":"","sources":["../../../../src/commands/rows/upload-rows.command.ts"],"names":[],"mappings":"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"}
|