@solidxai/core 0.1.11-beta.1 → 0.1.11-beta.11
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/.claude/settings.local.json +16 -0
- package/CLAUDE.md +26 -0
- package/dist/commands/migrate-removed-fields.command.d.ts +19 -0
- package/dist/commands/migrate-removed-fields.command.d.ts.map +1 -0
- package/dist/commands/migrate-removed-fields.command.js +77 -0
- package/dist/commands/migrate-removed-fields.command.js.map +1 -0
- package/dist/controllers/datasource-introspection.controller.d.ts +46 -1
- package/dist/controllers/datasource-introspection.controller.d.ts.map +1 -1
- package/dist/controllers/datasource-introspection.controller.js +38 -0
- package/dist/controllers/datasource-introspection.controller.js.map +1 -1
- package/dist/controllers/service.controller.d.ts +1 -0
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +2 -2
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts +5 -0
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts.map +1 -1
- package/dist/dtos/datasource-introspection-mapping.dto.js +24 -2
- package/dist/dtos/datasource-introspection-mapping.dto.js.map +1 -1
- package/dist/entities/{legacy-common-with-id.entity.d.ts → legacy-common-with-generated-id.entity.d.ts} +2 -2
- package/dist/entities/legacy-common-with-generated-id.entity.d.ts.map +1 -0
- package/dist/entities/{legacy-common-with-id.entity.js → legacy-common-with-generated-id.entity.js} +4 -4
- package/dist/entities/legacy-common-with-generated-id.entity.js.map +1 -0
- package/dist/entities/{legacy-common.entity.d.ts → legacy-common.entity-with-existing-id.entity.d.ts} +1 -1
- package/dist/entities/legacy-common.entity-with-existing-id.entity.d.ts.map +1 -0
- package/dist/entities/{legacy-common.entity.js → legacy-common.entity-with-existing-id.entity.js} +1 -1
- package/dist/entities/legacy-common.entity-with-existing-id.entity.js.map +1 -0
- package/dist/helpers/command.service.d.ts +2 -0
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +6 -2
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/environment.helper.d.ts +1 -0
- package/dist/helpers/environment.helper.d.ts.map +1 -1
- package/dist/helpers/environment.helper.js +4 -0
- package/dist/helpers/environment.helper.js.map +1 -1
- package/dist/helpers/field-crud-managers/IntFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/IntFieldCrudManager.js +4 -1
- package/dist/helpers/field-crud-managers/IntFieldCrudManager.js.map +1 -1
- package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +9 -5
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/helpers/nodemon-heartbeat.d.ts +5 -0
- package/dist/helpers/nodemon-heartbeat.d.ts.map +1 -0
- package/dist/helpers/nodemon-heartbeat.js +67 -0
- package/dist/helpers/nodemon-heartbeat.js.map +1 -0
- package/dist/helpers/solid-registry.d.ts +2 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts +1 -0
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
- package/dist/helpers/typeorm-db-helper.js +12 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts +1 -0
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/datasource-introspection-provider.interface.js.map +1 -1
- package/dist/interfaces.d.ts +1 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/repository/scheduled-job.repository.d.ts +2 -2
- package/dist/repository/scheduled-job.repository.d.ts.map +1 -1
- package/dist/repository/scheduled-job.repository.js +6 -3
- package/dist/repository/scheduled-job.repository.js.map +1 -1
- package/dist/repository/security-rule.repository.d.ts +2 -2
- package/dist/repository/security-rule.repository.d.ts.map +1 -1
- package/dist/repository/security-rule.repository.js +6 -3
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +11 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +163 -3
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +128 -34
- package/dist/services/api-key.service.d.ts.map +1 -1
- package/dist/services/api-key.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +2 -0
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +32 -11
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +7 -5
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts +4 -0
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js +18 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +25 -12
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +1 -0
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +27 -0
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js +12 -0
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js +2 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js +28 -15
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection.service.d.ts +62 -2
- package/dist/services/datasource-introspection.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection.service.js +654 -186
- package/dist/services/datasource-introspection.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +3 -0
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/locale.service.d.ts +14 -0
- package/dist/services/locale.service.d.ts.map +1 -1
- package/dist/services/locale.service.js +83 -0
- package/dist/services/locale.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +10 -10
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +1 -0
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +3 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +78 -0
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +28 -0
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/removed-field-migration.service.d.ts +30 -0
- package/dist/services/removed-field-migration.service.d.ts.map +1 -0
- package/dist/services/removed-field-migration.service.js +319 -0
- package/dist/services/removed-field-migration.service.js.map +1 -0
- package/dist/services/role-metadata.service.d.ts +1 -0
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +23 -2
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +244 -0
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +120 -0
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +6 -0
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- package/dist/services/solid-ts-morph.service.js +43 -0
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +4 -7
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +4 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +5 -1
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +76 -12
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +9 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +45 -11
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +3 -2
- package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js +5 -3
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/migrate-removed-fields.command.ts +81 -0
- package/src/controllers/datasource-introspection.controller.ts +27 -1
- package/src/controllers/service.controller.ts +3 -2
- package/src/dtos/datasource-introspection-mapping.dto.ts +15 -0
- package/src/entities/{legacy-common-with-id.entity.ts → legacy-common-with-generated-id.entity.ts} +1 -1
- package/src/helpers/command.service.ts +10 -2
- package/src/helpers/environment.helper.ts +11 -0
- package/src/helpers/field-crud-managers/IntFieldCrudManager.ts +4 -1
- package/src/helpers/model-metadata-helper.service.ts +8 -3
- package/src/helpers/nodemon-heartbeat.ts +59 -0
- package/src/helpers/solid-registry.ts +7 -1
- package/src/helpers/typeorm-db-helper.ts +15 -0
- package/src/index.ts +3 -2
- package/src/interfaces/datasource-introspection-provider.interface.ts +1 -0
- package/src/interfaces.ts +1 -0
- package/src/repository/scheduled-job.repository.ts +10 -4
- package/src/repository/security-rule.repository.ts +10 -4
- package/src/seeders/module-metadata-seeder.service.ts +192 -2
- package/src/seeders/seed-data/solid-core-metadata.json +128 -34
- package/src/services/1.js +6 -0
- package/src/services/api-key.service.ts +36 -36
- package/src/services/authentication.service.ts +46 -12
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +11 -5
- package/src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts +15 -1
- package/src/services/crud-helper.service.ts +25 -12
- package/src/services/crud.service.ts +36 -11
- package/src/services/datasource-introspection/mssql-datasource-introspection-provider.service.ts +12 -0
- package/src/services/datasource-introspection/mysql-datasource-introspection-provider.service.ts +2 -0
- package/src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts +28 -15
- package/src/services/datasource-introspection.service.ts +811 -161
- package/src/services/import-transaction.service.ts +5 -0
- package/src/services/locale.service.ts +111 -3
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +2 -2
- package/src/services/menu-item-metadata.service.ts +2 -1
- package/src/services/model-metadata.service.ts +109 -1
- package/src/services/module-metadata.service.ts +36 -0
- package/src/services/removed-field-migration.service.ts +334 -0
- package/src/services/role-metadata.service.ts +26 -2
- package/src/services/settings/default-settings-provider.service.ts +120 -0
- package/src/services/solid-ts-morph.service.ts +61 -1
- package/src/services/view-metadata.service.ts +4 -8
- package/src/solid-core.module.ts +4 -0
- package/src/subscribers/audit.subscriber.ts +101 -18
- package/src/subscribers/computed-entity-field.subscriber.ts +81 -28
- package/src/subscribers/created-by-updated-by.subscriber.ts +3 -0
- package/src/subscribers/field-metadata.subscriber.ts +3 -0
- package/src/subscribers/scheduled-job.subscriber.ts +3 -2
- package/src/subscribers/security-rule.subscriber.ts +8 -3
- package/dist/entities/legacy-common-with-id.entity.d.ts.map +0 -1
- package/dist/entities/legacy-common-with-id.entity.js.map +0 -1
- package/dist/entities/legacy-common.entity.d.ts.map +0 -1
- package/dist/entities/legacy-common.entity.js.map +0 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/agent-hub-grooming.md +0 -301
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
- package/docs/datasource-introspection-ddl-analysis.md +0 -326
- package/docs/datasource-introspection-implementation-plan.md +0 -306
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/module-package-import-handoff.md +0 -691
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
- /package/src/entities/{legacy-common.entity.ts → legacy-common.entity-with-existing-id.entity.ts} +0 -0
package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js
CHANGED
|
@@ -33,24 +33,36 @@ let PostgresDatasourceIntrospectionProviderService = class PostgresDatasourceInt
|
|
|
33
33
|
async listColumns(dataSource) {
|
|
34
34
|
const rows = await dataSource.query(`
|
|
35
35
|
SELECT
|
|
36
|
-
TABLE_SCHEMA AS "tableSchema",
|
|
37
|
-
TABLE_NAME AS "tableName",
|
|
38
|
-
COLUMN_NAME AS "columnName",
|
|
39
|
-
DATA_TYPE AS "dataType",
|
|
36
|
+
c.TABLE_SCHEMA AS "tableSchema",
|
|
37
|
+
c.TABLE_NAME AS "tableName",
|
|
38
|
+
c.COLUMN_NAME AS "columnName",
|
|
39
|
+
c.DATA_TYPE AS "dataType",
|
|
40
40
|
CASE
|
|
41
|
-
WHEN is_identity = 'YES' THEN true
|
|
42
|
-
WHEN COLUMN_DEFAULT LIKE 'nextval(%' THEN true
|
|
41
|
+
WHEN c.is_identity = 'YES' THEN true
|
|
42
|
+
WHEN c.COLUMN_DEFAULT LIKE 'nextval(%' THEN true
|
|
43
43
|
ELSE false
|
|
44
44
|
END AS "isAutoGenerated",
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
EXISTS (
|
|
46
|
+
SELECT 1
|
|
47
|
+
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
48
|
+
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
49
|
+
ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
50
|
+
AND kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
|
|
51
|
+
AND kcu.TABLE_NAME = tc.TABLE_NAME
|
|
52
|
+
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
53
|
+
AND tc.TABLE_SCHEMA = c.TABLE_SCHEMA
|
|
54
|
+
AND tc.TABLE_NAME = c.TABLE_NAME
|
|
55
|
+
AND kcu.COLUMN_NAME = c.COLUMN_NAME
|
|
56
|
+
) AS "isPrimaryKey",
|
|
57
|
+
c.IS_NULLABLE AS "isNullable",
|
|
58
|
+
c.COLUMN_DEFAULT AS "defaultValue",
|
|
59
|
+
c.CHARACTER_MAXIMUM_LENGTH AS "characterMaximumLength",
|
|
60
|
+
c.NUMERIC_PRECISION AS "numericPrecision",
|
|
61
|
+
c.NUMERIC_SCALE AS "numericScale",
|
|
62
|
+
c.ORDINAL_POSITION AS "ordinalPosition"
|
|
63
|
+
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
64
|
+
WHERE c.TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')
|
|
65
|
+
ORDER BY c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION
|
|
54
66
|
`);
|
|
55
67
|
return rows.map((row) => ({
|
|
56
68
|
tableSchema: row.tableSchema ?? null,
|
|
@@ -58,6 +70,7 @@ let PostgresDatasourceIntrospectionProviderService = class PostgresDatasourceInt
|
|
|
58
70
|
columnName: row.columnName,
|
|
59
71
|
dataType: row.dataType,
|
|
60
72
|
isAutoGenerated: Boolean(row.isAutoGenerated),
|
|
73
|
+
isPrimaryKey: Boolean(row.isPrimaryKey),
|
|
61
74
|
isNullable: String(row.isNullable).toUpperCase() === "YES",
|
|
62
75
|
defaultValue: row.defaultValue ?? null,
|
|
63
76
|
characterMaximumLength: this.toNumberOrNull(row.characterMaximumLength),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-datasource-introspection-provider.service.js","sourceRoot":"","sources":["../../../src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AASrC,IAAM,8CAA8C,GAApD,MAAM,8CAA8C;IAApD;QACM,SAAI,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-datasource-introspection-provider.service.js","sourceRoot":"","sources":["../../../src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AASrC,IAAM,8CAA8C,GAApD,MAAM,8CAA8C;IAApD;QACM,SAAI,GAAG,UAAU,CAAC;IAkK/B,CAAC;IAhKG,QAAQ,CAAC,IAAY;QACjB,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAsB;QACnC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC;;;;;;;;SAQnC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAC3B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;YACpC,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAsB;QACpC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgCnC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAC3B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;YACpC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC7C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACvC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;YAC1D,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;YACtC,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACvE,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC3D,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;YACnD,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;SAC5D,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAsB,EAAE,KAAsC;QACnF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuEC,EACD,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CACvC,CAAC;QAEF,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;IAClC,CAAC;IAEO,cAAc,CAAC,KAAc;QACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;CACJ,CAAA;AAnKY,wGAA8C;yDAA9C,8CAA8C;IAD1D,IAAA,mBAAU,GAAE;GACA,8CAA8C,CAmK1D","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { DataSource } from \"typeorm\";\nimport {\n DatasourceIntrospectionColumn,\n DatasourceIntrospectionProvider,\n DatasourceIntrospectionTableRef,\n} from \"src/interfaces/datasource-introspection-provider.interface\";\n\n@Injectable()\nexport class PostgresDatasourceIntrospectionProviderService implements DatasourceIntrospectionProvider {\n readonly type = \"postgres\";\n\n supports(type: string) {\n return type?.toLowerCase() === this.type;\n }\n\n async listTables(dataSource: DataSource): Promise<DatasourceIntrospectionTableRef[]> {\n const rows = await dataSource.query(`\n SELECT\n TABLE_SCHEMA AS \"tableSchema\",\n TABLE_NAME AS \"tableName\"\n FROM INFORMATION_SCHEMA.TABLES\n WHERE TABLE_TYPE = 'BASE TABLE'\n AND TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')\n ORDER BY TABLE_SCHEMA, TABLE_NAME\n `);\n\n return rows.map((row: any) => ({\n tableSchema: row.tableSchema ?? null,\n tableName: row.tableName,\n }));\n }\n\n async listColumns(dataSource: DataSource): Promise<DatasourceIntrospectionColumn[]> {\n const rows = await dataSource.query(`\n SELECT\n c.TABLE_SCHEMA AS \"tableSchema\",\n c.TABLE_NAME AS \"tableName\",\n c.COLUMN_NAME AS \"columnName\",\n c.DATA_TYPE AS \"dataType\",\n CASE\n WHEN c.is_identity = 'YES' THEN true\n WHEN c.COLUMN_DEFAULT LIKE 'nextval(%' THEN true\n ELSE false\n END AS \"isAutoGenerated\",\n EXISTS (\n SELECT 1\n FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc\n INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu\n ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME\n AND kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA\n AND kcu.TABLE_NAME = tc.TABLE_NAME\n WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'\n AND tc.TABLE_SCHEMA = c.TABLE_SCHEMA\n AND tc.TABLE_NAME = c.TABLE_NAME\n AND kcu.COLUMN_NAME = c.COLUMN_NAME\n ) AS \"isPrimaryKey\",\n c.IS_NULLABLE AS \"isNullable\",\n c.COLUMN_DEFAULT AS \"defaultValue\",\n c.CHARACTER_MAXIMUM_LENGTH AS \"characterMaximumLength\",\n c.NUMERIC_PRECISION AS \"numericPrecision\",\n c.NUMERIC_SCALE AS \"numericScale\",\n c.ORDINAL_POSITION AS \"ordinalPosition\"\n FROM INFORMATION_SCHEMA.COLUMNS c\n WHERE c.TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')\n ORDER BY c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION\n `);\n\n return rows.map((row: any) => ({\n tableSchema: row.tableSchema ?? null,\n tableName: row.tableName,\n columnName: row.columnName,\n dataType: row.dataType,\n isAutoGenerated: Boolean(row.isAutoGenerated),\n isPrimaryKey: Boolean(row.isPrimaryKey),\n isNullable: String(row.isNullable).toUpperCase() === \"YES\",\n defaultValue: row.defaultValue ?? null,\n characterMaximumLength: this.toNumberOrNull(row.characterMaximumLength),\n numericPrecision: this.toNumberOrNull(row.numericPrecision),\n numericScale: this.toNumberOrNull(row.numericScale),\n ordinalPosition: this.toNumberOrNull(row.ordinalPosition),\n }));\n }\n\n async getTableDefinition(dataSource: DataSource, table: DatasourceIntrospectionTableRef): Promise<string | null> {\n const rows = await dataSource.query(\n `\n WITH target_table AS (\n SELECT c.oid, n.nspname AS schema_name, c.relname AS table_name\n FROM pg_class c\n INNER JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE c.relkind = 'r'\n AND c.relname = $1\n AND ($2::text IS NULL OR n.nspname = $2)\n LIMIT 1\n ),\n column_lines AS (\n SELECT\n a.attnum,\n format(\n ' %I %s%s%s%s',\n a.attname,\n format_type(a.atttypid, a.atttypmod),\n CASE\n WHEN a.attidentity = 'a' THEN ' GENERATED ALWAYS AS IDENTITY'\n WHEN a.attidentity = 'd' THEN ' GENERATED BY DEFAULT AS IDENTITY'\n ELSE ''\n END,\n CASE\n WHEN ad.adbin IS NOT NULL THEN ' DEFAULT ' || pg_get_expr(ad.adbin, ad.adrelid)\n ELSE ''\n END,\n CASE\n WHEN a.attnotnull THEN ' NOT NULL'\n ELSE ''\n END\n ) AS line\n FROM target_table tt\n INNER JOIN pg_attribute a ON a.attrelid = tt.oid\n LEFT JOIN pg_attrdef ad\n ON ad.adrelid = a.attrelid\n AND ad.adnum = a.attnum\n WHERE a.attnum > 0\n AND NOT a.attisdropped\n ),\n constraint_lines AS (\n SELECT\n c.conname,\n format(' CONSTRAINT %I %s', c.conname, pg_get_constraintdef(c.oid, true)) AS line\n FROM target_table tt\n INNER JOIN pg_constraint c ON c.conrelid = tt.oid\n WHERE c.contype IN ('p', 'u', 'f', 'c')\n )\n SELECT format(\n 'CREATE TABLE %I.%I (\\n%s%s\\n);',\n tt.schema_name,\n tt.table_name,\n COALESCE(\n (\n SELECT string_agg(line, ',\\n' ORDER BY attnum)\n FROM column_lines\n ),\n ''\n ),\n COALESCE(\n (\n SELECT CASE\n WHEN EXISTS (SELECT 1 FROM constraint_lines)\n THEN ',\\n' || string_agg(line, ',\\n' ORDER BY conname)\n ELSE ''\n END\n FROM constraint_lines\n ),\n ''\n )\n ) AS ddl\n FROM target_table tt\n `,\n [table.tableName, table.tableSchema],\n );\n\n return rows?.[0]?.ddl ?? null;\n }\n\n private toNumberOrNull(value: unknown) {\n if (value === null || value === undefined || value === \"\") {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n}\n"]}
|
|
@@ -6,8 +6,10 @@ import { ModelMetadataHelperService } from "../helpers/model-metadata-helper.ser
|
|
|
6
6
|
import { ModelMetadataRepository } from "../repository/model-metadata.repository";
|
|
7
7
|
import { ModuleMetadataRepository } from "../repository/module-metadata.repository";
|
|
8
8
|
import { DatasourceManagementService } from "./datasource-management.service";
|
|
9
|
+
import { CommandService } from "../helpers/command.service";
|
|
9
10
|
import { FieldMetadataService } from "./field-metadata.service";
|
|
10
11
|
import { ModelMetadataService } from "./model-metadata.service";
|
|
12
|
+
import { ModuleMetadataService } from "./module-metadata.service";
|
|
11
13
|
import { MssqlDatasourceIntrospectionProviderService } from "./datasource-introspection/mssql-datasource-introspection-provider.service";
|
|
12
14
|
import { MysqlDatasourceIntrospectionProviderService } from "./datasource-introspection/mysql-datasource-introspection-provider.service";
|
|
13
15
|
import { PostgresDatasourceIntrospectionProviderService } from "./datasource-introspection/postgres-datasource-introspection-provider.service";
|
|
@@ -27,10 +29,15 @@ type TableInventoryRecord = {
|
|
|
27
29
|
suggestedUserKeyField: string;
|
|
28
30
|
columnCount: number;
|
|
29
31
|
physicalColumnCount: number;
|
|
32
|
+
hasPrimaryKey: boolean;
|
|
33
|
+
primaryKeyColumnCount: number;
|
|
34
|
+
primaryKeyColumnNames: string[];
|
|
35
|
+
mappingBlockedReason: string | null;
|
|
30
36
|
};
|
|
31
37
|
type TableDetailColumnRecord = {
|
|
32
38
|
columnName: string;
|
|
33
39
|
fieldName: string;
|
|
40
|
+
displayName: string;
|
|
34
41
|
dataType: string;
|
|
35
42
|
solidFieldType: string;
|
|
36
43
|
ormType: string;
|
|
@@ -41,6 +48,7 @@ type TableDetailColumnRecord = {
|
|
|
41
48
|
numericScale: number | null;
|
|
42
49
|
ordinalPosition: number | null;
|
|
43
50
|
isAutoGenerated: boolean;
|
|
51
|
+
isPrimaryKey: boolean;
|
|
44
52
|
handledBySuperclass: boolean;
|
|
45
53
|
superclassFieldName: string | null;
|
|
46
54
|
};
|
|
@@ -58,11 +66,13 @@ export declare class DatasourceIntrospectionService {
|
|
|
58
66
|
private readonly modelMetadataHelperService;
|
|
59
67
|
private readonly fieldMetadataService;
|
|
60
68
|
private readonly modelMetadataService;
|
|
69
|
+
private readonly moduleMetadataService;
|
|
70
|
+
private readonly commandService;
|
|
61
71
|
private readonly mssqlProvider;
|
|
62
72
|
private readonly mysqlProvider;
|
|
63
73
|
private readonly postgresProvider;
|
|
64
74
|
private readonly supportedDatasourceTypes;
|
|
65
|
-
constructor(moduleRef: ModuleRef, datasourceManagementService: DatasourceManagementService, moduleMetadataRepository: ModuleMetadataRepository, modelMetadataRepository: ModelMetadataRepository, moduleMetadataHelperService: ModuleMetadataHelperService, modelMetadataHelperService: ModelMetadataHelperService, fieldMetadataService: FieldMetadataService, modelMetadataService: ModelMetadataService, mssqlProvider: MssqlDatasourceIntrospectionProviderService, mysqlProvider: MysqlDatasourceIntrospectionProviderService, postgresProvider: PostgresDatasourceIntrospectionProviderService);
|
|
75
|
+
constructor(moduleRef: ModuleRef, datasourceManagementService: DatasourceManagementService, moduleMetadataRepository: ModuleMetadataRepository, modelMetadataRepository: ModelMetadataRepository, moduleMetadataHelperService: ModuleMetadataHelperService, modelMetadataHelperService: ModelMetadataHelperService, fieldMetadataService: FieldMetadataService, modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, commandService: CommandService, mssqlProvider: MssqlDatasourceIntrospectionProviderService, mysqlProvider: MysqlDatasourceIntrospectionProviderService, postgresProvider: PostgresDatasourceIntrospectionProviderService);
|
|
66
76
|
getBootstrap(moduleId: number): Promise<{
|
|
67
77
|
data: {
|
|
68
78
|
module: {
|
|
@@ -220,6 +230,18 @@ export declare class DatasourceIntrospectionService {
|
|
|
220
230
|
filePath: string;
|
|
221
231
|
model: Record<string, any>;
|
|
222
232
|
};
|
|
233
|
+
summary: {
|
|
234
|
+
includedColumnNames: string[];
|
|
235
|
+
removedColumnNames: string[];
|
|
236
|
+
missingSystemColumns: string[];
|
|
237
|
+
generatedSystemColumnCount: number;
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
}>;
|
|
241
|
+
createMigrationArtifacts(moduleId: number, mappingDto: DatasourceIntrospectionMappingDto): Promise<{
|
|
242
|
+
data: {
|
|
243
|
+
modelId: number;
|
|
244
|
+
operation: "create" | "update";
|
|
223
245
|
migration: {
|
|
224
246
|
written: boolean;
|
|
225
247
|
willGenerate: boolean;
|
|
@@ -231,6 +253,13 @@ export declare class DatasourceIntrospectionService {
|
|
|
231
253
|
note: string;
|
|
232
254
|
missingSystemColumns: string[];
|
|
233
255
|
};
|
|
256
|
+
datasourceFile: {
|
|
257
|
+
filePath: string;
|
|
258
|
+
created: boolean;
|
|
259
|
+
updated: boolean;
|
|
260
|
+
entityRegistered: boolean;
|
|
261
|
+
migrationGlobRegistered: boolean;
|
|
262
|
+
};
|
|
234
263
|
summary: {
|
|
235
264
|
includedColumnNames: string[];
|
|
236
265
|
removedColumnNames: string[];
|
|
@@ -239,6 +268,22 @@ export declare class DatasourceIntrospectionService {
|
|
|
239
268
|
};
|
|
240
269
|
};
|
|
241
270
|
}>;
|
|
271
|
+
generateCode(moduleId: number): Promise<{
|
|
272
|
+
data: {
|
|
273
|
+
moduleId: number;
|
|
274
|
+
output: string;
|
|
275
|
+
message: string;
|
|
276
|
+
};
|
|
277
|
+
}>;
|
|
278
|
+
runMigration(moduleId: number, datasourceName: string): Promise<{
|
|
279
|
+
data: {
|
|
280
|
+
moduleId: number;
|
|
281
|
+
datasource: string;
|
|
282
|
+
output: string;
|
|
283
|
+
command: string;
|
|
284
|
+
message: string;
|
|
285
|
+
};
|
|
286
|
+
}>;
|
|
242
287
|
private buildMappingPreview;
|
|
243
288
|
private buildModelPayload;
|
|
244
289
|
private buildModelPayloadFromReviewedModel;
|
|
@@ -247,7 +292,10 @@ export declare class DatasourceIntrospectionService {
|
|
|
247
292
|
private buildMetadataPreviewFields;
|
|
248
293
|
private buildMigrationPreview;
|
|
249
294
|
private sanitizeExistingFieldPayload;
|
|
295
|
+
private sanitizeConfiguredFieldPayload;
|
|
250
296
|
private normalizeReviewedMetadataModel;
|
|
297
|
+
private resolveReviewedUserKeyFieldName;
|
|
298
|
+
private isGeneratedIdInheritedUserKey;
|
|
251
299
|
private normalizeReviewedField;
|
|
252
300
|
private matchExistingFieldForReviewedModel;
|
|
253
301
|
private buildFieldPayload;
|
|
@@ -255,20 +303,27 @@ export declare class DatasourceIntrospectionService {
|
|
|
255
303
|
private getLegacySystemColumnDefinitions;
|
|
256
304
|
private renderMigrationTemplate;
|
|
257
305
|
private renderTableColumnLiteral;
|
|
306
|
+
private renderTableIndexLiteral;
|
|
258
307
|
private buildMigrationObjectName;
|
|
259
308
|
private toMigrationTableName;
|
|
260
309
|
private buildRawDdl;
|
|
261
310
|
private buildTableInventory;
|
|
262
|
-
private
|
|
311
|
+
private buildModelLookup;
|
|
312
|
+
private resolveMappedModel;
|
|
263
313
|
private groupColumnsByTable;
|
|
314
|
+
private isSolidxInternalTableName;
|
|
264
315
|
private detectLegacyTableType;
|
|
265
316
|
private getSuggestedIdColumn;
|
|
266
317
|
private buildUserKeyCandidates;
|
|
267
318
|
private toDetailColumnRecord;
|
|
319
|
+
private validateTablePrimaryKeyForMapping;
|
|
320
|
+
private validateReviewedPrimaryKeyFields;
|
|
321
|
+
private buildMissingPrimaryKeyMessage;
|
|
268
322
|
private getSuperclassFieldName;
|
|
269
323
|
private getLegacySuperclassFieldName;
|
|
270
324
|
private isHandledBySuperclass;
|
|
271
325
|
private getBaseClassName;
|
|
326
|
+
private getDatasourceTypeFamily;
|
|
272
327
|
private toSolidFieldType;
|
|
273
328
|
private toOrmFieldType;
|
|
274
329
|
private toFieldName;
|
|
@@ -276,6 +331,11 @@ export declare class DatasourceIntrospectionService {
|
|
|
276
331
|
private toPluralNameCandidate;
|
|
277
332
|
private toTableKey;
|
|
278
333
|
private toModelMapKey;
|
|
334
|
+
private syncTypeormDatasourceFile;
|
|
335
|
+
private renderTypeormDatasourceTemplate;
|
|
336
|
+
private arrayLiteralContainsValue;
|
|
337
|
+
private getTypeormDatasourceOptions;
|
|
338
|
+
private getObjectPropertyArrayLiteral;
|
|
279
339
|
private buildSynchronizeBlockedMessage;
|
|
280
340
|
private resolveDataSourceByName;
|
|
281
341
|
private getProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-introspection.service.d.ts","sourceRoot":"","sources":["../../src/services/datasource-introspection.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"datasource-introspection.service.d.ts","sourceRoot":"","sources":["../../src/services/datasource-introspection.service.ts"],"names":[],"mappings":"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"}
|