@restforgejs/platform 5.0.9 → 5.1.4
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/build-info.json +2 -2
- package/cli/consumer-deploy.js +1 -1
- package/cli/consumer.js +1 -1
- package/generators/cli/data/pull.js +95 -0
- package/generators/cli/data/push.js +85 -0
- package/generators/cli/fast-track.js +950 -0
- package/generators/cli/payload/sync.js +18 -2
- package/generators/cli/schema/introspect.js +10 -10
- package/generators/lib/data/db-executor.js +440 -0
- package/generators/lib/data/dialect-kit.js +56 -0
- package/generators/lib/data/envelope.js +220 -0
- package/generators/lib/data/pull-runner.js +407 -0
- package/generators/lib/data/push-runner.js +382 -0
- package/generators/lib/data/sdf-reader.js +132 -0
- package/generators/lib/data/table-order.js +126 -0
- package/generators/lib/data/value-codec.js +188 -0
- package/generators/lib/migrate/field-type-resolver.js +18 -5
- package/generators/lib/payload/payload-runner.js +724 -39
- package/generators/lib/templates/dashboard-catalog.js +1 -1
- package/generators/lib/templates/db-connection-env.js +1 -1
- package/generators/lib/templates/dbschema-catalog.js +1 -1
- package/generators/lib/templates/field-validation-catalog.js +1 -1
- package/generators/lib/templates/mysql-template.js +1 -1
- package/generators/lib/templates/oracle-template.js +1 -1
- package/generators/lib/templates/postgres-template.js +1 -1
- package/generators/lib/templates/query-declarative-catalog.js +1 -1
- package/generators/lib/templates/sqlite-template.js +1 -1
- package/integrity-manifest.json +18 -18
- package/package.json +1 -1
- package/scripts/verify-integrity.js +1 -1
- package/server.js +1 -1
- package/src/components/handlers/adjust_handler.js +1 -1
- package/src/components/handlers/audit_handler.js +1 -1
- package/src/components/handlers/delete_handler.js +1 -1
- package/src/components/handlers/export_handler.js +1 -1
- package/src/components/handlers/import_handler.js +1 -1
- package/src/components/handlers/insert_handler.js +1 -1
- package/src/components/handlers/update_handler.js +1 -1
- package/src/components/handlers/upload_handler.js +1 -1
- package/src/components/handlers/workflow_handler.js +1 -1
- package/src/components/integrations/webhook.js +1 -1
- package/src/consumers/baseConsumer.js +1 -1
- package/src/consumers/declarativeMapper.js +1 -1
- package/src/consumers/handlers/apiHandler.js +1 -1
- package/src/consumers/handlers/consoleHandler.js +1 -1
- package/src/consumers/handlers/databaseHandler.js +1 -1
- package/src/consumers/handlers/index.js +1 -1
- package/src/consumers/handlers/kafkaHandler.js +1 -1
- package/src/consumers/index.js +1 -1
- package/src/consumers/messageTransformer.js +1 -1
- package/src/consumers/validator.js +1 -1
- package/src/core/db/dialect/base-dialect.js +1 -1
- package/src/core/db/dialect/index.js +1 -1
- package/src/core/db/dialect/mysql-dialect.js +1 -1
- package/src/core/db/dialect/oracle-dialect.js +1 -1
- package/src/core/db/dialect/postgres-dialect.js +1 -1
- package/src/core/db/dialect/sqlite-dialect.js +1 -1
- package/src/core/db/flatten-helper.js +1 -1
- package/src/core/db/query-builder-error.js +1 -1
- package/src/core/db/query-builder.js +1 -1
- package/src/core/db/relation-helper.js +1 -1
- package/src/core/handlers/delete_handler.js +1 -1
- package/src/core/handlers/insert_handler.js +1 -1
- package/src/core/handlers/update_handler.js +1 -1
- package/src/core/models/base-model.js +1 -1
- package/src/core/utils/cache-manager.js +1 -1
- package/src/core/utils/component-engine.js +1 -1
- package/src/core/utils/context-builder.js +1 -1
- package/src/core/utils/datetime-formatter.js +1 -1
- package/src/core/utils/datetime-parser.js +1 -1
- package/src/core/utils/db.js +1 -1
- package/src/core/utils/logger.js +1 -1
- package/src/core/utils/payload-loader.js +1 -1
- package/src/core/utils/security-checks.js +1 -1
- package/src/middleware/body-options.js +1 -1
- package/src/middleware/cors.js +1 -1
- package/src/middleware/idempotency.js +1 -1
- package/src/middleware/rate-limiter.js +1 -1
- package/src/middleware/request-logger.js +1 -1
- package/src/middleware/security-headers.js +1 -1
- package/src/models/base-model-mysql.js +1 -1
- package/src/models/base-model-oracle.js +1 -1
- package/src/models/base-model-sqlite.js +1 -1
- package/src/models/base-model.js +1 -1
- package/src/pro/caching/redis-client.js +1 -1
- package/src/pro/caching/redis-helper.js +1 -1
- package/src/pro/consumers/baseConsumer.js +1 -1
- package/src/pro/consumers/declarativeMapper.js +1 -1
- package/src/pro/consumers/handlers/apiHandler.js +1 -1
- package/src/pro/consumers/handlers/consoleHandler.js +1 -1
- package/src/pro/consumers/handlers/databaseHandler.js +1 -1
- package/src/pro/consumers/handlers/index.js +1 -1
- package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
- package/src/pro/consumers/index.js +1 -1
- package/src/pro/consumers/messageTransformer.js +1 -1
- package/src/pro/consumers/validator.js +1 -1
- package/src/pro/database/base-model-mysql.js +1 -1
- package/src/pro/database/base-model-oracle.js +1 -1
- package/src/pro/database/base-model-sqlite.js +1 -1
- package/src/pro/database/db-mysql.js +1 -1
- package/src/pro/database/db-oracle.js +1 -1
- package/src/pro/database/db-sqlite.js +1 -1
- package/src/pro/excel/excel-generator.js +1 -1
- package/src/pro/excel/excel-parser.js +1 -1
- package/src/pro/excel/export-service.js +1 -1
- package/src/pro/excel/export_handler.js +1 -1
- package/src/pro/excel/import-service.js +1 -1
- package/src/pro/excel/import-validator.js +1 -1
- package/src/pro/excel/import_handler.js +1 -1
- package/src/pro/excel/upsert-builder.js +1 -1
- package/src/pro/idgen/idgen-routes.js +1 -1
- package/src/pro/integrations/lookup-resolver.js +1 -1
- package/src/pro/integrations/upload-handler-v2.js +1 -1
- package/src/pro/integrations/upload-handler.js +1 -1
- package/src/pro/integrations/webhook.js +1 -1
- package/src/pro/locking/lock-routes.js +1 -1
- package/src/pro/locking/resource-lock-manager.js +1 -1
- package/src/pro/messaging/kafkaConsumerService.js +1 -1
- package/src/pro/messaging/kafkaService.js +1 -1
- package/src/pro/messaging/messagehubService.js +1 -1
- package/src/pro/messaging/rabbitmqService.js +1 -1
- package/src/pro/scheduler/job-manager.js +1 -1
- package/src/pro/scheduler/job-routes.js +1 -1
- package/src/pro/scheduler/job-validator.js +1 -1
- package/src/pro/storage/base-storage-provider.js +1 -1
- package/src/pro/storage/file-metadata-helper.js +1 -1
- package/src/pro/storage/index.js +1 -1
- package/src/pro/storage/local-storage-provider.js +1 -1
- package/src/pro/storage/s3-storage-provider.js +1 -1
- package/src/pro/storage/upload-cleanup-job.js +1 -1
- package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
- package/src/pro/storage/upload-pending-tracker.js +1 -1
- package/src/pro/websocket/broadcast-helper.js +1 -1
- package/src/pro/websocket/index.js +1 -1
- package/src/pro/websocket/livesync-server.js +1 -1
- package/src/pro/websocket/ws-broadcaster.js +1 -1
- package/src/services/export-service.js +1 -1
- package/src/services/import-service.js +1 -1
- package/src/services/kafkaConsumerService.js +1 -1
- package/src/services/kafkaService.js +1 -1
- package/src/services/messagehubService.js +1 -1
- package/src/services/rabbitmqService.js +1 -1
- package/src/utils/cache-invalidation-registry.js +1 -1
- package/src/utils/cache-manager.js +1 -1
- package/src/utils/component-engine.js +1 -1
- package/src/utils/config-extractor.js +1 -1
- package/src/utils/consumerLogger.js +1 -1
- package/src/utils/context-builder.js +1 -1
- package/src/utils/dashboard-helpers.js +1 -1
- package/src/utils/dateHelper.js +1 -1
- package/src/utils/datetime-formatter.js +1 -1
- package/src/utils/datetime-parser.js +1 -1
- package/src/utils/db-bootstrap.js +1 -1
- package/src/utils/db-mysql.js +1 -1
- package/src/utils/db-oracle.js +1 -1
- package/src/utils/db-sqlite.js +1 -1
- package/src/utils/db.js +1 -1
- package/src/utils/demo-generator.js +1 -1
- package/src/utils/excel-generator.js +1 -1
- package/src/utils/excel-parser.js +1 -1
- package/src/utils/file-watcher.js +1 -1
- package/src/utils/id-generator.js +1 -1
- package/src/utils/idempotency-manager.js +1 -1
- package/src/utils/import-validator.js +1 -1
- package/src/utils/license-client.js +1 -1
- package/src/utils/lock-manager.js +1 -1
- package/src/utils/logger.js +1 -1
- package/src/utils/lookup-resolver.js +1 -1
- package/src/utils/payload-loader.js +1 -1
- package/src/utils/processor-response.js +1 -1
- package/src/utils/rabbitmq.js +1 -1
- package/src/utils/redis-client.js +1 -1
- package/src/utils/redis-helper.js +1 -1
- package/src/utils/request-scope.js +1 -1
- package/src/utils/security-checks.js +1 -1
- package/src/utils/service-resolver.js +1 -1
- package/src/utils/shutdown-coordinator.js +1 -1
- package/src/utils/trusted-keys.js +1 -1
- package/src/utils/upload-handler.js +1 -1
- package/src/utils/upsert-builder.js +1 -1
- package/src/utils/workflow-hook-executor.js +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Contract: data pull
|
|
5
|
+
*
|
|
6
|
+
* Export isi sebuah tabel database ke file envelope JSON
|
|
7
|
+
* (`{cwd}/data-storage/<table>.json`) dengan whitelist kolom dan metadata
|
|
8
|
+
* bersumber MURNI dari SDF (Schema Definition File), bukan introspeksi DB.
|
|
9
|
+
*
|
|
10
|
+
* Eksekusi via jalur CLI generator (cli-entry.js) tanpa gerbang license/integrity
|
|
11
|
+
* (amandemen arah B, lihat docs/plan/data-pull-push/data-pull-push-09-amendments.md).
|
|
12
|
+
* Handler tetap tipis: seluruh logika berada di lib/data/pull-runner.js.
|
|
13
|
+
*
|
|
14
|
+
* Catatan: flag `--schema` (namespace) TIDAK dideklarasikan — namespace tabel
|
|
15
|
+
* diambil dari SDF IR (amandemen A4). Lokasi SDF ditentukan `--schema-path`.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
module.exports = {
|
|
19
|
+
resource: 'data',
|
|
20
|
+
verb: 'pull',
|
|
21
|
+
description: 'Export isi tabel database ke file envelope JSON (data-storage/<table>.json) berdasarkan metadata SDF',
|
|
22
|
+
category: 'introspection',
|
|
23
|
+
flags: {
|
|
24
|
+
table: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
required: false,
|
|
27
|
+
default: null,
|
|
28
|
+
description: 'Nama tabel sumber yang akan di-pull (harus terdaftar di SDF)'
|
|
29
|
+
},
|
|
30
|
+
'all-tables': {
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
required: false,
|
|
33
|
+
default: false,
|
|
34
|
+
description: 'Pull seluruh tabel yang terdaftar di --schema-path (mutual-exclusive dengan --table)'
|
|
35
|
+
},
|
|
36
|
+
config: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
required: false,
|
|
39
|
+
default: null,
|
|
40
|
+
description: 'File config database (.env). Fallback ke `.restforge/defaults.json` bila tidak disediakan eksplisit (set via `config set-default`)'
|
|
41
|
+
},
|
|
42
|
+
'schema-path': {
|
|
43
|
+
type: 'string',
|
|
44
|
+
required: false,
|
|
45
|
+
default: 'schema',
|
|
46
|
+
description: 'Lokasi SDF (file atau folder) sumber metadata tabel'
|
|
47
|
+
},
|
|
48
|
+
format: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
required: false,
|
|
51
|
+
default: 'json',
|
|
52
|
+
description: "Format penyimpanan nilai; saat ini hanya menerima 'json'"
|
|
53
|
+
},
|
|
54
|
+
limit: {
|
|
55
|
+
type: 'number',
|
|
56
|
+
required: false,
|
|
57
|
+
default: null,
|
|
58
|
+
description: 'Batas maksimum total rows yang di-export (null = seluruh tabel)'
|
|
59
|
+
},
|
|
60
|
+
'batch-size': {
|
|
61
|
+
type: 'number',
|
|
62
|
+
required: false,
|
|
63
|
+
default: 1000,
|
|
64
|
+
description: 'Ukuran batch baca internal dari database'
|
|
65
|
+
},
|
|
66
|
+
'storage-path': {
|
|
67
|
+
type: 'string',
|
|
68
|
+
required: false,
|
|
69
|
+
default: 'data-storage',
|
|
70
|
+
description: 'Folder output relatif terhadap working directory'
|
|
71
|
+
},
|
|
72
|
+
force: {
|
|
73
|
+
type: 'boolean',
|
|
74
|
+
required: false,
|
|
75
|
+
default: false,
|
|
76
|
+
description: 'Overwrite file output bila sudah ada'
|
|
77
|
+
},
|
|
78
|
+
json: {
|
|
79
|
+
type: 'boolean',
|
|
80
|
+
required: false,
|
|
81
|
+
default: false,
|
|
82
|
+
description: 'Output ringkasan dalam format JSON (untuk konsumsi CI/CD)'
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
examples: [
|
|
86
|
+
'npx restforge data pull --table=visitors',
|
|
87
|
+
'npx restforge data pull --all-tables --config=db.env',
|
|
88
|
+
'npx restforge data pull --all-tables --config=db.env --json',
|
|
89
|
+
'npx restforge data pull --table=visitors --config=db.env --limit=500',
|
|
90
|
+
'npx restforge data pull --table=visitors --config=db.env --json'
|
|
91
|
+
],
|
|
92
|
+
async handler(args) {
|
|
93
|
+
return require('../../lib/data/pull-runner').run(args);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Contract: data push
|
|
5
|
+
*
|
|
6
|
+
* Muat isi file envelope JSON (`{cwd}/data-storage/<qualifiedName>.json`) ke tabel
|
|
7
|
+
* tujuan via INSERT batch dengan commit per batch. Nama file diturunkan dari SDF
|
|
8
|
+
* (aturan IDENTIK `data pull`, bukan dari flag `--table` mentah). Metadata kolom +
|
|
9
|
+
* tipe canonical bersumber MURNI dari SDF; konversi nilai per dialect tujuan
|
|
10
|
+
* ditangani value-codec.
|
|
11
|
+
*
|
|
12
|
+
* Eksekusi via jalur CLI generator (cli-entry.js) tanpa gerbang license/integrity
|
|
13
|
+
* (amandemen arah B, lihat docs/plan/data-pull-push/data-pull-push-09-amendments.md).
|
|
14
|
+
* Handler tetap tipis: seluruh logika berada di lib/data/push-runner.js.
|
|
15
|
+
*
|
|
16
|
+
* Push bersifat append-only (amandemen A6, User konfirmasi 2026-06-03). Mode
|
|
17
|
+
* `upsert`/`replace` di-descope dari v1, sehingga flag `--mode` dan `--force`
|
|
18
|
+
* TIDAK dideklarasikan. Push selalu menjalankan jalur append (INSERT batch +
|
|
19
|
+
* commit per batch). `--mode=...`/`--force` kini menjadi unknown flag → ditolak
|
|
20
|
+
* arg-parser dengan exit 2 (perilaku standar).
|
|
21
|
+
*
|
|
22
|
+
* Catatan: flag `--schema` (namespace) TIDAK dideklarasikan — namespace tabel
|
|
23
|
+
* diambil dari SDF IR (amandemen A4). Lokasi SDF ditentukan `--schema-path`.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
module.exports = {
|
|
27
|
+
resource: 'data',
|
|
28
|
+
verb: 'push',
|
|
29
|
+
description: 'Muat isi file envelope JSON (data-storage/<table>.json) ke tabel tujuan via INSERT batch berdasarkan metadata SDF',
|
|
30
|
+
category: 'management',
|
|
31
|
+
flags: {
|
|
32
|
+
table: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
required: false,
|
|
35
|
+
default: null,
|
|
36
|
+
description: 'Nama tabel tujuan yang akan di-push (harus terdaftar di SDF)'
|
|
37
|
+
},
|
|
38
|
+
'all-tables': {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
required: false,
|
|
41
|
+
default: false,
|
|
42
|
+
description: 'Push seluruh tabel yang punya file di --storage-path, urut topological FK parent→child (mutual-exclusive dengan --table)'
|
|
43
|
+
},
|
|
44
|
+
config: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
required: false,
|
|
47
|
+
default: null,
|
|
48
|
+
description: 'File config database tujuan (.env). Fallback ke `.restforge/defaults.json` bila tidak disediakan eksplisit (set via `config set-default`)'
|
|
49
|
+
},
|
|
50
|
+
'schema-path': {
|
|
51
|
+
type: 'string',
|
|
52
|
+
required: false,
|
|
53
|
+
default: 'schema',
|
|
54
|
+
description: 'Lokasi SDF (file atau folder) sumber metadata tabel'
|
|
55
|
+
},
|
|
56
|
+
'storage-path': {
|
|
57
|
+
type: 'string',
|
|
58
|
+
required: false,
|
|
59
|
+
default: 'data-storage',
|
|
60
|
+
description: 'Folder sumber file envelope relatif terhadap working directory'
|
|
61
|
+
},
|
|
62
|
+
'batch-size': {
|
|
63
|
+
type: 'number',
|
|
64
|
+
required: false,
|
|
65
|
+
default: 1000,
|
|
66
|
+
description: 'Ukuran batch INSERT, sekaligus unit commit per batch'
|
|
67
|
+
},
|
|
68
|
+
json: {
|
|
69
|
+
type: 'boolean',
|
|
70
|
+
required: false,
|
|
71
|
+
default: false,
|
|
72
|
+
description: 'Output ringkasan dalam format JSON (untuk konsumsi CI/CD)'
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
examples: [
|
|
76
|
+
'npx restforge data push --table=visitors',
|
|
77
|
+
'npx restforge data push --all-tables --config=db.env',
|
|
78
|
+
'npx restforge data push --all-tables --config=db.env --json',
|
|
79
|
+
'npx restforge data push --table=visitors --config=db.env --batch-size=500',
|
|
80
|
+
'npx restforge data push --table=visitors --config=db.env --json'
|
|
81
|
+
],
|
|
82
|
+
async handler(args) {
|
|
83
|
+
return require('../../lib/data/push-runner').run(args);
|
|
84
|
+
}
|
|
85
|
+
};
|