@pasosdejesus/m 0.25.0 → 0.26.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/dist/CHANGELOG.md +59 -0
- package/dist/base-model/baseline.generated.d.ts +48 -0
- package/dist/base-model/baseline.generated.d.ts.map +1 -0
- package/dist/base-model/baseline.generated.js +930 -0
- package/dist/base-model/baseline.generated.js.map +1 -0
- package/dist/base-model/check.d.ts +6 -0
- package/dist/base-model/check.d.ts.map +1 -0
- package/dist/base-model/check.js +195 -0
- package/dist/base-model/check.js.map +1 -0
- package/dist/base-model/generate.d.ts +42 -0
- package/dist/base-model/generate.d.ts.map +1 -0
- package/dist/base-model/generate.js +241 -0
- package/dist/base-model/generate.js.map +1 -0
- package/dist/base-model/guidelines.d.ts +13 -0
- package/dist/base-model/guidelines.d.ts.map +1 -0
- package/dist/base-model/guidelines.js +61 -0
- package/dist/base-model/guidelines.js.map +1 -0
- package/dist/base-model/index.d.ts +22 -0
- package/dist/base-model/index.d.ts.map +1 -0
- package/dist/base-model/index.js +26 -0
- package/dist/base-model/index.js.map +1 -0
- package/dist/base-model/parse-structure.d.ts +4 -0
- package/dist/base-model/parse-structure.d.ts.map +1 -0
- package/dist/base-model/parse-structure.js +170 -0
- package/dist/base-model/parse-structure.js.map +1 -0
- package/dist/base-model/queries.d.ts +34 -0
- package/dist/base-model/queries.d.ts.map +1 -0
- package/dist/base-model/queries.js +118 -0
- package/dist/base-model/queries.js.map +1 -0
- package/dist/base-model/references/learn-tg.d.ts +21 -0
- package/dist/base-model/references/learn-tg.d.ts.map +1 -0
- package/dist/base-model/references/learn-tg.js +65 -0
- package/dist/base-model/references/learn-tg.js.map +1 -0
- package/dist/base-model/references/msip.d.ts +29 -0
- package/dist/base-model/references/msip.d.ts.map +1 -0
- package/dist/base-model/references/msip.js +33 -0
- package/dist/base-model/references/msip.js.map +1 -0
- package/dist/base-model/types.d.ts +207 -0
- package/dist/base-model/types.d.ts.map +1 -0
- package/dist/base-model/types.js +10 -0
- package/dist/base-model/types.js.map +1 -0
- package/dist/base-model/version.d.ts +19 -0
- package/dist/base-model/version.d.ts.map +1 -0
- package/dist/base-model/version.js +26 -0
- package/dist/base-model/version.js.map +1 -0
- package/dist/base-model/wallet-link.d.ts +69 -0
- package/dist/base-model/wallet-link.d.ts.map +1 -0
- package/dist/base-model/wallet-link.js +220 -0
- package/dist/base-model/wallet-link.js.map +1 -0
- package/dist/base-model/wallet-link.test.d.ts +2 -0
- package/dist/base-model/wallet-link.test.d.ts.map +1 -0
- package/dist/base-model/wallet-link.test.js +147 -0
- package/dist/base-model/wallet-link.test.js.map +1 -0
- package/dist/e2e/full-wallet.d.ts +19 -0
- package/dist/e2e/full-wallet.d.ts.map +1 -1
- package/dist/e2e/full-wallet.js +12 -4
- package/dist/e2e/full-wallet.js.map +1 -1
- package/dist/e2e/full-wallet.test.js +26 -0
- package/dist/e2e/full-wallet.test.js.map +1 -1
- package/dist/e2e/in-app-wallet.d.ts +23 -0
- package/dist/e2e/in-app-wallet.d.ts.map +1 -0
- package/dist/e2e/in-app-wallet.js +40 -0
- package/dist/e2e/in-app-wallet.js.map +1 -0
- package/dist/e2e/in-app-wallet.test.d.ts +2 -0
- package/dist/e2e/in-app-wallet.test.d.ts.map +1 -0
- package/dist/e2e/in-app-wallet.test.js +52 -0
- package/dist/e2e/in-app-wallet.test.js.map +1 -0
- package/dist/e2e/index.d.ts +5 -1
- package/dist/e2e/index.d.ts.map +1 -1
- package/dist/e2e/index.js +2 -0
- package/dist/e2e/index.js.map +1 -1
- package/dist/e2e/warmup.d.ts +38 -0
- package/dist/e2e/warmup.d.ts.map +1 -0
- package/dist/e2e/warmup.js +84 -0
- package/dist/e2e/warmup.js.map +1 -0
- package/dist/e2e/warmup.test.d.ts +2 -0
- package/dist/e2e/warmup.test.d.ts.map +1 -0
- package/dist/e2e/warmup.test.js +67 -0
- package/dist/e2e/warmup.test.js.map +1 -0
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +8 -0
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +13 -1
- package/dist/m.js.map +1 -1
- package/dist/tasks/base-model.d.ts +4 -0
- package/dist/tasks/base-model.d.ts.map +1 -0
- package/dist/tasks/base-model.js +260 -0
- package/dist/tasks/base-model.js.map +1 -0
- package/dist/tasks/db.d.ts.map +1 -1
- package/dist/tasks/db.js +27 -0
- package/dist/tasks/db.js.map +1 -1
- package/dist/tasks/warmup.d.ts +4 -0
- package/dist/tasks/warmup.d.ts.map +1 -0
- package/dist/tasks/warmup.js +67 -0
- package/dist/tasks/warmup.js.map +1 -0
- package/dist/tasks/warmup.test.d.ts +2 -0
- package/dist/tasks/warmup.test.d.ts.map +1 -0
- package/dist/tasks/warmup.test.js +40 -0
- package/dist/tasks/warmup.test.js.map +1 -0
- package/dist/templates/apps/nextjs/package.json.hbs +1 -1
- package/dist/test-utils/console.d.ts +37 -0
- package/dist/test-utils/console.d.ts.map +1 -0
- package/dist/test-utils/console.js +52 -0
- package/dist/test-utils/console.js.map +1 -0
- package/dist/test-utils/console.test.d.ts +2 -0
- package/dist/test-utils/console.test.d.ts.map +1 -0
- package/dist/test-utils/console.test.js +57 -0
- package/dist/test-utils/console.test.js.map +1 -0
- package/dist/test-utils/index.d.ts +1 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +1 -0
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/kysely-mocks.d.ts +163 -33
- package/dist/test-utils/kysely-mocks.d.ts.map +1 -1
- package/dist/test-utils/kysely-mocks.js +147 -18
- package/dist/test-utils/kysely-mocks.js.map +1 -1
- package/dist/test-utils/kysely-mocks.test.d.ts +2 -0
- package/dist/test-utils/kysely-mocks.test.d.ts.map +1 -0
- package/dist/test-utils/kysely-mocks.test.js +94 -0
- package/dist/test-utils/kysely-mocks.test.js.map +1 -0
- package/package.json +5 -1
- package/src/e2e/README.md +42 -0
- package/src/tasks/README.md +1 -0
- package/src/test-utils/README.md +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guidelines.js","sourceRoot":"","sources":["../../src/base-model/guidelines.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE,sNAAsN;KAC7N;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,kGAAkG;KACzG;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,sIAAsI;KAC7I;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,uDAAuD;KAC9D;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,+BAA+B;QACtC,IAAI,EAAE,uFAAuF;KAC9F;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,sDAAsD;QAC7D,IAAI,EAAE,6MAA6M;KACpN;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,6DAA6D;QACpE,IAAI,EAAE,mFAAmF;KAC1F;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,8DAA8D;KACrE;IACD;QACE,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,mDAAmD;QAC1D,IAAI,EAAE,8FAA8F;KACrG;IACD;QACE,CAAC,EAAE,EAAE;QACL,KAAK,EAAE,qDAAqD;QAC5D,IAAI,EAAE,kIAAkI;KACzI;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { BASE_MODEL_VERSION, BASE_MODEL_TABLES, isBaseModelTable } from './version.js';
|
|
2
|
+
export type { BaseModelTable } from './version.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export { parseStructureSql, normalizeType } from './parse-structure.js';
|
|
5
|
+
export { buildBaseline, buildInventory, renderBaselineSql, renderGeneratedModule } from './generate.js';
|
|
6
|
+
export { compareInventories, formatCheckReport, inventoryFromDb, inventoryFromParsed, } from './check.js';
|
|
7
|
+
export { USUARIO_BASE_COLUMNS, SEARCH_TOWNS_SQL, siweNusuario, isSessionSubject, getUserById, readProfile, updateProfile, setVisibility, listCountries, listDepartments, listMunicipalities, searchTowns, catalogCounts, baseModelInfo, } from './queries.js';
|
|
8
|
+
export { GUIDELINES, renderGuidelines, type Guideline } from './guidelines.js';
|
|
9
|
+
export { LEARN_TG_EXTENSIONS } from './references/learn-tg.js';
|
|
10
|
+
export { MSIP_ADDITIONS } from './references/msip.js';
|
|
11
|
+
export { normalizeWallet, getUserByWallet, listWallets, ensureWalletLink, linkWallet, unlinkWallet, upsertUserByWallet, inviteWallet, listInvitations, cancelInvitation, findPendingInvitation, acceptInvitation, WALLET_LINK_DDL, WALLET_LINK_SEQUENCE_DDL, WALLET_INVITE_DDL, WALLET_INVITE_SEQUENCE_DDL, } from './wallet-link.js';
|
|
12
|
+
export type { WalletLink, WalletInvitation } from './wallet-link.js';
|
|
13
|
+
import { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST } from './baseline.generated.js';
|
|
14
|
+
import type { CheckReport, SqlExecutor } from './types.js';
|
|
15
|
+
export { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST };
|
|
16
|
+
/**
|
|
17
|
+
* Conformance check of a live database against the shipped baseline.
|
|
18
|
+
* Extensions are reported as `extra` and never fail; missing or changed base
|
|
19
|
+
* tables/columns are `drift`/`absent` and make the report not ok.
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkBaseModel(db: SqlExecutor): Promise<CheckReport>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EACL,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,GAC5E,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EACtE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EACtD,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAC9E,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAC3E,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EACjF,qBAAqB,EAAE,gBAAgB,EACvC,eAAe,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,0BAA0B,GACzF,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAExG,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,CAAC;AAEzE;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAG1E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { BASE_MODEL_VERSION, BASE_MODEL_TABLES, isBaseModelTable } from './version.js';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export { parseStructureSql, normalizeType } from './parse-structure.js';
|
|
4
|
+
export { buildBaseline, buildInventory, renderBaselineSql, renderGeneratedModule } from './generate.js';
|
|
5
|
+
export { compareInventories, formatCheckReport, inventoryFromDb, inventoryFromParsed, } from './check.js';
|
|
6
|
+
export { USUARIO_BASE_COLUMNS, SEARCH_TOWNS_SQL, siweNusuario, isSessionSubject, getUserById, readProfile, updateProfile, setVisibility, listCountries, listDepartments, listMunicipalities, searchTowns, catalogCounts, baseModelInfo, } from './queries.js';
|
|
7
|
+
export { GUIDELINES, renderGuidelines } from './guidelines.js';
|
|
8
|
+
export { LEARN_TG_EXTENSIONS } from './references/learn-tg.js';
|
|
9
|
+
export { MSIP_ADDITIONS } from './references/msip.js';
|
|
10
|
+
// Extensión opcional: requiere la tabla `billetera_usuario`, que NO es del modelo
|
|
11
|
+
// base (msip-2.2 no la tiene). Ver `wallet-link.ts`.
|
|
12
|
+
export { normalizeWallet, getUserByWallet, listWallets, ensureWalletLink, linkWallet, unlinkWallet, upsertUserByWallet, inviteWallet, listInvitations, cancelInvitation, findPendingInvitation, acceptInvitation, WALLET_LINK_DDL, WALLET_LINK_SEQUENCE_DDL, WALLET_INVITE_DDL, WALLET_INVITE_SEQUENCE_DDL, } from './wallet-link.js';
|
|
13
|
+
import { BASE_MODEL_VERSION } from './version.js';
|
|
14
|
+
import { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST } from './baseline.generated.js';
|
|
15
|
+
import { compareInventories, inventoryFromDb } from './check.js';
|
|
16
|
+
export { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST };
|
|
17
|
+
/**
|
|
18
|
+
* Conformance check of a live database against the shipped baseline.
|
|
19
|
+
* Extensions are reported as `extra` and never fail; missing or changed base
|
|
20
|
+
* tables/columns are `drift`/`absent` and make the report not ok.
|
|
21
|
+
*/
|
|
22
|
+
export async function checkBaseModel(db) {
|
|
23
|
+
const actual = await inventoryFromDb(db, Object.keys(BASELINE_INVENTORY.tables), BASE_MODEL_VERSION);
|
|
24
|
+
return compareInventories(BASELINE_INVENTORY, actual);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEvF,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EACL,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,GAC5E,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EACtE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EACtD,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAC9E,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,kFAAkF;AAClF,qDAAqD;AACrD,OAAO,EACL,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAC3E,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EACjF,qBAAqB,EAAE,gBAAgB,EACvC,eAAe,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,0BAA0B,GACzF,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAqB,eAAe,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAe;IAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrG,OAAO,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-structure.d.ts","sourceRoot":"","sources":["../../src/base-model/parse-structure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACiB,eAAe,EAC3C,MAAM,YAAY,CAAC;AAwCpB,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAgDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAkE1F"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
function splitTopLevel(body) {
|
|
2
|
+
const parts = [];
|
|
3
|
+
let depth = 0;
|
|
4
|
+
let current = '';
|
|
5
|
+
let inQuote = false;
|
|
6
|
+
for (let i = 0; i < body.length; i++) {
|
|
7
|
+
const ch = body[i];
|
|
8
|
+
if (ch === "'")
|
|
9
|
+
inQuote = !inQuote;
|
|
10
|
+
if (!inQuote) {
|
|
11
|
+
if (ch === '(')
|
|
12
|
+
depth++;
|
|
13
|
+
else if (ch === ')')
|
|
14
|
+
depth--;
|
|
15
|
+
else if (ch === ',' && depth === 0) {
|
|
16
|
+
parts.push(current);
|
|
17
|
+
current = '';
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
current += ch;
|
|
22
|
+
}
|
|
23
|
+
if (current.trim())
|
|
24
|
+
parts.push(current);
|
|
25
|
+
return parts.map((part) => part.trim()).filter(Boolean);
|
|
26
|
+
}
|
|
27
|
+
function findTopLevel(text, needle) {
|
|
28
|
+
let depth = 0;
|
|
29
|
+
let inQuote = false;
|
|
30
|
+
for (let i = 0; i <= text.length - needle.length; i++) {
|
|
31
|
+
const ch = text[i];
|
|
32
|
+
if (ch === "'")
|
|
33
|
+
inQuote = !inQuote;
|
|
34
|
+
if (!inQuote) {
|
|
35
|
+
if (ch === '(')
|
|
36
|
+
depth++;
|
|
37
|
+
else if (ch === ')')
|
|
38
|
+
depth--;
|
|
39
|
+
else if (depth === 0 && text.startsWith(needle, i))
|
|
40
|
+
return i;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return -1;
|
|
44
|
+
}
|
|
45
|
+
export function normalizeType(type) {
|
|
46
|
+
return type
|
|
47
|
+
.replace(/\s+COLLATE\s+\S+/i, '')
|
|
48
|
+
// `information_schema.datetime_precision` is 6 both for `timestamp` and
|
|
49
|
+
// `timestamp(6)`, so the explicit default precision is not comparable.
|
|
50
|
+
.replace(/\b(timestamp|time)\(6\)/gi, '$1')
|
|
51
|
+
.replace(/\s+/g, ' ')
|
|
52
|
+
.trim();
|
|
53
|
+
}
|
|
54
|
+
function parseConstraint(item) {
|
|
55
|
+
const match = item.match(/^CONSTRAINT\s+(\S+)\s+([\s\S]+)$/);
|
|
56
|
+
if (!match)
|
|
57
|
+
return null;
|
|
58
|
+
const name = match[1];
|
|
59
|
+
const definition = match[2].trim();
|
|
60
|
+
const kind = /PRIMARY KEY/i.test(definition)
|
|
61
|
+
? 'primary-key'
|
|
62
|
+
: /UNIQUE/i.test(definition)
|
|
63
|
+
? 'unique'
|
|
64
|
+
: /FOREIGN KEY/i.test(definition)
|
|
65
|
+
? 'foreign-key'
|
|
66
|
+
: 'check';
|
|
67
|
+
const columnsMatch = definition.match(/\((?:[^()]|\([^()]*\))*\)/);
|
|
68
|
+
const columns = columnsMatch
|
|
69
|
+
? columnsMatch[0].slice(1, -1).split(',').map((column) => column.trim().split(/\s+/)[0])
|
|
70
|
+
: [];
|
|
71
|
+
const referencesMatch = definition.match(/REFERENCES\s+public\.(\w+)\s*\(([^)]*)\)/);
|
|
72
|
+
return {
|
|
73
|
+
name,
|
|
74
|
+
kind,
|
|
75
|
+
definition,
|
|
76
|
+
columns,
|
|
77
|
+
references: referencesMatch
|
|
78
|
+
? { table: referencesMatch[1], columns: referencesMatch[2].split(',').map((column) => column.trim()) }
|
|
79
|
+
: undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function parseColumn(item) {
|
|
83
|
+
const match = item.match(/^(\S+)\s+([\s\S]+)$/);
|
|
84
|
+
if (!match)
|
|
85
|
+
return null;
|
|
86
|
+
const name = match[1];
|
|
87
|
+
let rest = match[2].trim();
|
|
88
|
+
// `NOT NULL` may precede other column options (pg_dump writes
|
|
89
|
+
// `nombre character varying(200) NOT NULL COLLATE public.es_co_utf_8`).
|
|
90
|
+
const notNull = /\bNOT NULL\b/i.test(rest);
|
|
91
|
+
rest = rest.replace(/\s*\bNOT NULL\b/i, '').trim();
|
|
92
|
+
let defaultValue;
|
|
93
|
+
const defaultIndex = findTopLevel(rest, ' DEFAULT ');
|
|
94
|
+
if (defaultIndex >= 0) {
|
|
95
|
+
defaultValue = rest.slice(defaultIndex + ' DEFAULT '.length).trim();
|
|
96
|
+
rest = rest.slice(0, defaultIndex).trim();
|
|
97
|
+
}
|
|
98
|
+
return { name, type: normalizeType(rest), notNull, default: defaultValue };
|
|
99
|
+
}
|
|
100
|
+
export function parseStructureSql(sql, tables) {
|
|
101
|
+
const wanted = tables ? new Set(tables) : null;
|
|
102
|
+
const parsed = { tables: {}, sequences: {}, serverDefaults: [], indexes: [] };
|
|
103
|
+
const tableRe = /^CREATE TABLE (?:ONLY )?public\.(\w+) \(\r?\n([\s\S]*?)\r?\n\);/gm;
|
|
104
|
+
for (const match of sql.matchAll(tableRe)) {
|
|
105
|
+
const name = match[1];
|
|
106
|
+
if (wanted && !wanted.has(name))
|
|
107
|
+
continue;
|
|
108
|
+
const columns = [];
|
|
109
|
+
const constraints = [];
|
|
110
|
+
for (const item of splitTopLevel(match[2])) {
|
|
111
|
+
if (/^CONSTRAINT\s/i.test(item)) {
|
|
112
|
+
const constraint = parseConstraint(item);
|
|
113
|
+
if (constraint)
|
|
114
|
+
constraints.push(constraint);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const column = parseColumn(item);
|
|
118
|
+
if (column)
|
|
119
|
+
columns.push(column);
|
|
120
|
+
}
|
|
121
|
+
parsed.tables[name] = { name, columns, constraints };
|
|
122
|
+
}
|
|
123
|
+
const sequenceRe = /^CREATE SEQUENCE public\.(\w+)\r?\n([\s\S]*?);/gm;
|
|
124
|
+
for (const match of sql.matchAll(sequenceRe)) {
|
|
125
|
+
const name = match[1];
|
|
126
|
+
const definition = match[2].trim();
|
|
127
|
+
const owned = definition.match(/OWNED BY public\.(\w+)\.(\w+)/);
|
|
128
|
+
const spec = {
|
|
129
|
+
name,
|
|
130
|
+
definition: `CREATE SEQUENCE public.${name}\n ${definition}`,
|
|
131
|
+
ownedBy: owned ? { table: owned[1], column: owned[2] } : undefined,
|
|
132
|
+
};
|
|
133
|
+
if (wanted && !wanted.has(name.replace(/_\w+_seq$/, '')))
|
|
134
|
+
continue;
|
|
135
|
+
parsed.sequences[name] = spec;
|
|
136
|
+
}
|
|
137
|
+
const defaultRe = /^ALTER TABLE (?:ONLY )?public\.(\w+) ALTER COLUMN (\w+) SET DEFAULT ([\s\S]*?);/gm;
|
|
138
|
+
for (const match of sql.matchAll(defaultRe)) {
|
|
139
|
+
const spec = { table: match[1], column: match[2], default: match[3].trim() };
|
|
140
|
+
if (wanted && !wanted.has(spec.table))
|
|
141
|
+
continue;
|
|
142
|
+
parsed.serverDefaults.push(spec);
|
|
143
|
+
}
|
|
144
|
+
const constraintRe = /^ALTER TABLE (?:ONLY )?public\.(\w+)\r?\n\s*ADD CONSTRAINT (\S+) ([\s\S]*?);/gm;
|
|
145
|
+
for (const match of sql.matchAll(constraintRe)) {
|
|
146
|
+
const table = match[1];
|
|
147
|
+
if (wanted && !wanted.has(table))
|
|
148
|
+
continue;
|
|
149
|
+
const tableSpec = parsed.tables[table];
|
|
150
|
+
if (!tableSpec)
|
|
151
|
+
continue;
|
|
152
|
+
const constraint = parseConstraint(`CONSTRAINT ${match[2]} ${match[3]}`);
|
|
153
|
+
if (constraint)
|
|
154
|
+
tableSpec.constraints.push(constraint);
|
|
155
|
+
}
|
|
156
|
+
const indexRe = /^CREATE (UNIQUE )?INDEX (\w+) ON public\.(\w+) USING btree ([\s\S]*?);/gm;
|
|
157
|
+
for (const match of sql.matchAll(indexRe)) {
|
|
158
|
+
const spec = {
|
|
159
|
+
name: match[2],
|
|
160
|
+
table: match[3],
|
|
161
|
+
unique: Boolean(match[1]),
|
|
162
|
+
definition: `CREATE ${match[1] ?? ''}INDEX ${match[2]} ON public.${match[3]} USING btree ${match[4].trim()}`,
|
|
163
|
+
};
|
|
164
|
+
if (wanted && !wanted.has(spec.table))
|
|
165
|
+
continue;
|
|
166
|
+
parsed.indexes.push(spec);
|
|
167
|
+
}
|
|
168
|
+
return parsed;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=parse-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-structure.js","sourceRoot":"","sources":["../../src/base-model/parse-structure.ts"],"names":[],"mappings":"AAIA,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG;YAAG,OAAO,GAAG,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACnB,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACxB,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACnB,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACxB,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACjC,wEAAwE;QACxE,uEAAuE;SACtE,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC1C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAA2B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAClE,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;YAC1B,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC/B,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,OAAO,CAAC;IAChB,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrF,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,OAAO;QACP,UAAU,EAAE,eAAe;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;YACtG,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,wEAAwE;IACxE,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,YAAgC,CAAC;IACrC,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAA0B;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE/F,MAAM,OAAO,GAAG,mEAAmE,CAAC;IACpF,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,MAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,UAAU;oBAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7C,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,UAAU,GAAG,kDAAkD,CAAC;IACtE,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChE,MAAM,IAAI,GAAiB;YACzB,IAAI;YACJ,UAAU,EAAE,0BAA0B,IAAI,SAAS,UAAU,EAAE;YAC/D,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC;QACF,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAAE,SAAS;QACnE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,SAAS,GAAG,mFAAmF,CAAC;IACtG,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAChG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,YAAY,GAAG,gFAAgF,CAAC;IACtG,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,UAAU;YAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,0EAA0E,CAAC;IAC3F,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAc;YACtB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,UAAU,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;SAC7G,CAAC;QACF,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAChD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SqlExecutor, TownResult, Usuario, VisibilityConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Columns of `usuario` that the base model publishes (the reference's, msip-2.2).
|
|
4
|
+
* A consumer that adds columns reads them with `readProfile({ columns })`; the
|
|
5
|
+
* wallet-link helpers live in `wallet-link.ts` (optional extension).
|
|
6
|
+
*/
|
|
7
|
+
export declare const USUARIO_BASE_COLUMNS: readonly ["id", "nusuario", "password", "nombre", "descripcion", "rol", "idioma", "email", "encrypted_password", "sign_in_count", "fechacreacion", "fechadeshabilitacion", "reset_password_token", "reset_password_sent_at", "remember_created_at", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "created_at", "updated_at", "failed_attempts", "unlock_token", "locked_at", "tema_id"];
|
|
8
|
+
export declare const SEARCH_TOWNS_SQL: string;
|
|
9
|
+
export declare function getUserById(db: SqlExecutor, id: number): Promise<Usuario | null>;
|
|
10
|
+
export declare function siweNusuario(wallet: string): string;
|
|
11
|
+
export declare function isSessionSubject(session: {
|
|
12
|
+
address?: string | null;
|
|
13
|
+
} | null | undefined, wallet: string): boolean;
|
|
14
|
+
export declare function readProfile(db: SqlExecutor, userId: number, options?: {
|
|
15
|
+
columns?: string[];
|
|
16
|
+
}): Promise<Record<string, unknown> | null>;
|
|
17
|
+
export declare function updateProfile(db: SqlExecutor, userId: number, fields: Record<string, unknown>, allowList: readonly string[]): Promise<Record<string, unknown> | null>;
|
|
18
|
+
export declare function setVisibility(db: SqlExecutor, userId: number, values: Record<string, unknown>, config: VisibilityConfig): Promise<Record<string, unknown> | null>;
|
|
19
|
+
export declare function listCountries(db: SqlExecutor): Promise<Array<Record<string, unknown>>>;
|
|
20
|
+
export declare function listDepartments(db: SqlExecutor, paisId: number): Promise<Array<Record<string, unknown>>>;
|
|
21
|
+
export declare function listMunicipalities(db: SqlExecutor, departamentoId: number): Promise<Array<Record<string, unknown>>>;
|
|
22
|
+
export declare function searchTowns(db: SqlExecutor, query?: {
|
|
23
|
+
q?: string;
|
|
24
|
+
countryId?: number;
|
|
25
|
+
departamentoId?: number;
|
|
26
|
+
municipalityId?: number;
|
|
27
|
+
limit?: number;
|
|
28
|
+
}): Promise<TownResult[]>;
|
|
29
|
+
export declare function catalogCounts(db: SqlExecutor): Promise<Record<string, number>>;
|
|
30
|
+
export declare function baseModelInfo(): {
|
|
31
|
+
version: string;
|
|
32
|
+
tables: readonly string[];
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/base-model/queries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAErF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,8ZAMvB,CAAC;AAEX,eAAO,MAAM,gBAAgB,QAOjB,CAAC;AAMb,wBAAsB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAGtF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACvD,MAAM,EAAE,MAAM,GACb,OAAO,CAIT;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAQzC;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAWzC;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CASzC;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAK5F;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAM9G;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAMzH;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,WAAW,EACf,KAAK,GAAE;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/G,OAAO,CAAC,UAAU,EAAE,CAAC,CA6BvB;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUpF;AAED,wBAAgB,aAAa,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAE9E"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { BASE_MODEL_VERSION } from './version.js';
|
|
2
|
+
import { BASELINE_INVENTORY } from './baseline.generated.js';
|
|
3
|
+
/**
|
|
4
|
+
* Columns of `usuario` that the base model publishes (the reference's, msip-2.2).
|
|
5
|
+
* A consumer that adds columns reads them with `readProfile({ columns })`; the
|
|
6
|
+
* wallet-link helpers live in `wallet-link.ts` (optional extension).
|
|
7
|
+
*/
|
|
8
|
+
export const USUARIO_BASE_COLUMNS = [
|
|
9
|
+
'id', 'nusuario', 'password', 'nombre', 'descripcion', 'rol', 'idioma', 'email',
|
|
10
|
+
'encrypted_password', 'sign_in_count', 'fechacreacion', 'fechadeshabilitacion',
|
|
11
|
+
'reset_password_token', 'reset_password_sent_at', 'remember_created_at',
|
|
12
|
+
'current_sign_in_at', 'last_sign_in_at', 'current_sign_in_ip', 'last_sign_in_ip',
|
|
13
|
+
'created_at', 'updated_at', 'failed_attempts', 'unlock_token', 'locked_at', 'tema_id',
|
|
14
|
+
];
|
|
15
|
+
export const SEARCH_TOWNS_SQL = [
|
|
16
|
+
'SELECT t.id, t.nombre AS town, m.id AS municipio_id, m.nombre AS municipio,',
|
|
17
|
+
' d.id AS departamento_id, d.nombre AS departamento',
|
|
18
|
+
' FROM msip_centropoblado t',
|
|
19
|
+
' JOIN msip_municipio m ON m.id = t.municipio_id',
|
|
20
|
+
' JOIN msip_departamento d ON d.id = m.departamento_id',
|
|
21
|
+
' WHERE t.fechadeshabilitacion IS NULL',
|
|
22
|
+
].join('\n');
|
|
23
|
+
function selectUsuario() {
|
|
24
|
+
return `SELECT ${USUARIO_BASE_COLUMNS.map((column) => `u.${column}`).join(', ')}\n FROM usuario u`;
|
|
25
|
+
}
|
|
26
|
+
export async function getUserById(db, id) {
|
|
27
|
+
const result = await db.query(`${selectUsuario()}\n WHERE u.id = $1`, [id]);
|
|
28
|
+
return result.rows[0] ?? null;
|
|
29
|
+
}
|
|
30
|
+
export function siweNusuario(wallet) {
|
|
31
|
+
return `${wallet.slice(0, 7)}...${wallet.slice(-5)}`;
|
|
32
|
+
}
|
|
33
|
+
export function isSessionSubject(session, wallet) {
|
|
34
|
+
const address = session?.address;
|
|
35
|
+
if (!address || !wallet)
|
|
36
|
+
return false;
|
|
37
|
+
return address.toLowerCase() === wallet.toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
export async function readProfile(db, userId, options = {}) {
|
|
40
|
+
const extra = (options.columns ?? []).filter((column) => /^[a-z_][a-z0-9_]*$/.test(column));
|
|
41
|
+
const selected = [...USUARIO_BASE_COLUMNS, ...extra];
|
|
42
|
+
const result = await db.query(`SELECT ${selected.join(', ')} FROM usuario WHERE id = $1`, [userId]);
|
|
43
|
+
return result.rows[0] ?? null;
|
|
44
|
+
}
|
|
45
|
+
export async function updateProfile(db, userId, fields, allowList) {
|
|
46
|
+
const allowed = new Set(allowList);
|
|
47
|
+
const entries = Object.entries(fields).filter(([key]) => allowed.has(key) && /^[a-z_][a-z0-9_]*$/.test(key));
|
|
48
|
+
if (entries.length === 0)
|
|
49
|
+
return readProfile(db, userId);
|
|
50
|
+
const assignments = entries.map(([key], index) => `${key} = $${index + 2}`);
|
|
51
|
+
const values = entries.map(([, value]) => value);
|
|
52
|
+
const result = await db.query(`UPDATE usuario SET ${assignments.join(', ')}, updated_at = now() WHERE id = $1 RETURNING *`, [userId, ...values]);
|
|
53
|
+
return result.rows[0] ?? null;
|
|
54
|
+
}
|
|
55
|
+
export async function setVisibility(db, userId, values, config) {
|
|
56
|
+
const entries = Object.entries(values).filter(([key]) => config.columns.includes(key));
|
|
57
|
+
if (entries.length === 0)
|
|
58
|
+
return null;
|
|
59
|
+
const assignments = entries.map(([key], index) => `${key} = $${index + 2}`);
|
|
60
|
+
const result = await db.query(`UPDATE usuario SET ${assignments.join(', ')}, updated_at = now() WHERE id = $1 RETURNING id, ${config.columns.join(', ')}`, [userId, ...entries.map(([, value]) => value)]);
|
|
61
|
+
return result.rows[0] ?? null;
|
|
62
|
+
}
|
|
63
|
+
export async function listCountries(db) {
|
|
64
|
+
const result = await db.query('SELECT id, nombre, alfa2, alfa3 FROM msip_pais WHERE fechadeshabilitacion IS NULL ORDER BY nombre');
|
|
65
|
+
return result.rows;
|
|
66
|
+
}
|
|
67
|
+
export async function listDepartments(db, paisId) {
|
|
68
|
+
const result = await db.query('SELECT id, nombre, pais_id FROM msip_departamento WHERE pais_id = $1 AND fechadeshabilitacion IS NULL ORDER BY nombre', [paisId]);
|
|
69
|
+
return result.rows;
|
|
70
|
+
}
|
|
71
|
+
export async function listMunicipalities(db, departamentoId) {
|
|
72
|
+
const result = await db.query('SELECT id, nombre, departamento_id FROM msip_municipio WHERE departamento_id = $1 AND fechadeshabilitacion IS NULL ORDER BY nombre', [departamentoId]);
|
|
73
|
+
return result.rows;
|
|
74
|
+
}
|
|
75
|
+
export async function searchTowns(db, query = {}) {
|
|
76
|
+
const params = [];
|
|
77
|
+
const where = [];
|
|
78
|
+
if (query.countryId !== undefined) {
|
|
79
|
+
params.push(query.countryId);
|
|
80
|
+
where.push(`d.pais_id = $${params.length}`);
|
|
81
|
+
}
|
|
82
|
+
if (query.departamentoId !== undefined) {
|
|
83
|
+
params.push(query.departamentoId);
|
|
84
|
+
where.push(`d.id = $${params.length}`);
|
|
85
|
+
}
|
|
86
|
+
if (query.municipalityId !== undefined) {
|
|
87
|
+
params.push(query.municipalityId);
|
|
88
|
+
where.push(`m.id = $${params.length}`);
|
|
89
|
+
}
|
|
90
|
+
const q = query.q ?? '';
|
|
91
|
+
if (q.length >= 2) {
|
|
92
|
+
params.push(`${q}%`);
|
|
93
|
+
where.push(`t.nombre ILIKE $${params.length}`);
|
|
94
|
+
}
|
|
95
|
+
params.push(query.limit ?? 20);
|
|
96
|
+
const sql = [
|
|
97
|
+
SEARCH_TOWNS_SQL,
|
|
98
|
+
...(where.length > 0 ? [` AND ${where.join(' AND ')}`] : []),
|
|
99
|
+
' ORDER BY t.nombre',
|
|
100
|
+
` LIMIT $${params.length}`,
|
|
101
|
+
].join('\n');
|
|
102
|
+
const result = await db.query(sql, params);
|
|
103
|
+
return result.rows;
|
|
104
|
+
}
|
|
105
|
+
export async function catalogCounts(db) {
|
|
106
|
+
const result = await db.query(`SELECT 'msip_pais' AS table, count(*)::text AS total FROM msip_pais
|
|
107
|
+
UNION ALL SELECT 'msip_departamento', count(*)::text FROM msip_departamento
|
|
108
|
+
UNION ALL SELECT 'msip_municipio', count(*)::text FROM msip_municipio
|
|
109
|
+
UNION ALL SELECT 'msip_centropoblado', count(*)::text FROM msip_centropoblado`);
|
|
110
|
+
const counts = {};
|
|
111
|
+
for (const row of result.rows)
|
|
112
|
+
counts[row.table] = Number(row.total);
|
|
113
|
+
return counts;
|
|
114
|
+
}
|
|
115
|
+
export function baseModelInfo() {
|
|
116
|
+
return { version: BASE_MODEL_VERSION, tables: Object.keys(BASELINE_INVENTORY.tables) };
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/base-model/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BaselineExtensions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Columns and constraints that belong to learn.tg (not to the base).
|
|
4
|
+
*
|
|
5
|
+
* This is a **subtraction** list: it is used when the reference is a superset of
|
|
6
|
+
* the base (learn.tg). The base model is derived from msip-2.2 now, which is a
|
|
7
|
+
* subset, so the default mechanism is `references/msip.ts` (additions) and this
|
|
8
|
+
* list is only used with `--extensions <file>`; it doubles as the inventory of
|
|
9
|
+
* what learn.tg adds over msip.
|
|
10
|
+
*
|
|
11
|
+
* Source: learn.tg REQ/260 §2 (the ~35 columns of the learn.tg era) plus the
|
|
12
|
+
* visibility flags of R-#259, which the base model keeps generic (decision D5).
|
|
13
|
+
* `religion_id` and `pais_id` are **not** here: the classification annex of
|
|
14
|
+
* REQ/260 §5 puts them in group B (base, shared by both apps), even though §2
|
|
15
|
+
* lists them among the learn.tg-era columns. Same for the rest of the base
|
|
16
|
+
* groups A and B. This list is the reviewed subtraction: the derivation guard
|
|
17
|
+
* fails when the reference has a column that is neither in the base nor
|
|
18
|
+
* declared here.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LEARN_TG_EXTENSIONS: BaselineExtensions;
|
|
21
|
+
//# sourceMappingURL=learn-tg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn-tg.d.ts","sourceRoot":"","sources":["../../../src/base-model/references/learn-tg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBA6CjC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Columns and constraints that belong to learn.tg (not to the base).
|
|
3
|
+
*
|
|
4
|
+
* This is a **subtraction** list: it is used when the reference is a superset of
|
|
5
|
+
* the base (learn.tg). The base model is derived from msip-2.2 now, which is a
|
|
6
|
+
* subset, so the default mechanism is `references/msip.ts` (additions) and this
|
|
7
|
+
* list is only used with `--extensions <file>`; it doubles as the inventory of
|
|
8
|
+
* what learn.tg adds over msip.
|
|
9
|
+
*
|
|
10
|
+
* Source: learn.tg REQ/260 §2 (the ~35 columns of the learn.tg era) plus the
|
|
11
|
+
* visibility flags of R-#259, which the base model keeps generic (decision D5).
|
|
12
|
+
* `religion_id` and `pais_id` are **not** here: the classification annex of
|
|
13
|
+
* REQ/260 §5 puts them in group B (base, shared by both apps), even though §2
|
|
14
|
+
* lists them among the learn.tg-era columns. Same for the rest of the base
|
|
15
|
+
* groups A and B. This list is the reviewed subtraction: the derivation guard
|
|
16
|
+
* fails when the reference has a column that is neither in the base nor
|
|
17
|
+
* declared here.
|
|
18
|
+
*/
|
|
19
|
+
export const LEARN_TG_EXTENSIONS = {
|
|
20
|
+
columns: [
|
|
21
|
+
'usuario.passport_name',
|
|
22
|
+
'usuario.passport_nationality',
|
|
23
|
+
'usuario.profilescore',
|
|
24
|
+
'usuario.learningscore_deprecated',
|
|
25
|
+
'usuario.lastgooddollarverification',
|
|
26
|
+
'usuario.excluir_leaderboard',
|
|
27
|
+
'usuario.church_relationship',
|
|
28
|
+
'usuario.whatsapp',
|
|
29
|
+
'usuario.telegram',
|
|
30
|
+
'usuario.country_id',
|
|
31
|
+
'usuario.city_id',
|
|
32
|
+
'usuario.place_of_worship',
|
|
33
|
+
'usuario.place_of_worship_location',
|
|
34
|
+
'usuario.church_id',
|
|
35
|
+
'usuario.id_photo_front',
|
|
36
|
+
'usuario.id_photo_back',
|
|
37
|
+
'usuario.id_photo_verified',
|
|
38
|
+
'usuario.verified_whatsapp',
|
|
39
|
+
'usuario.verified_telegram',
|
|
40
|
+
'usuario.verified_email',
|
|
41
|
+
'usuario.verified_city_id',
|
|
42
|
+
'usuario.verified_place_of_worship',
|
|
43
|
+
'usuario.verified_place_of_worship_location',
|
|
44
|
+
'usuario.verified_church_relationship',
|
|
45
|
+
'usuario.proposed_date_of_interview',
|
|
46
|
+
'usuario.conducted_date_of_interview',
|
|
47
|
+
'usuario.working_hours',
|
|
48
|
+
'usuario.pastor_name',
|
|
49
|
+
'usuario.pastor_whatsapp',
|
|
50
|
+
'usuario.position_israel_gaza',
|
|
51
|
+
'usuario.registration',
|
|
52
|
+
'usuario.registration_photo',
|
|
53
|
+
'usuario.denomination',
|
|
54
|
+
'usuario.mostrar_cursos_publico',
|
|
55
|
+
'usuario.mostrar_cursos_sensibles_publico',
|
|
56
|
+
'billetera_usuario.answer_fib',
|
|
57
|
+
'billetera_usuario.nonce',
|
|
58
|
+
'billetera_usuario.nonce_expires_at',
|
|
59
|
+
],
|
|
60
|
+
constraints: [
|
|
61
|
+
'usuario.usuario_church_relationship_check',
|
|
62
|
+
'usuario.usuario_verified_church_relationship_check',
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=learn-tg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn-tg.js","sourceRoot":"","sources":["../../../src/base-model/references/learn-tg.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAuB;IACrD,OAAO,EAAE;QACP,uBAAuB;QACvB,8BAA8B;QAC9B,sBAAsB;QACtB,kCAAkC;QAClC,oCAAoC;QACpC,6BAA6B;QAC7B,6BAA6B;QAC7B,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,iBAAiB;QACjB,0BAA0B;QAC1B,mCAAmC;QACnC,mBAAmB;QACnB,wBAAwB;QACxB,uBAAuB;QACvB,2BAA2B;QAC3B,2BAA2B;QAC3B,2BAA2B;QAC3B,wBAAwB;QACxB,0BAA0B;QAC1B,mCAAmC;QACnC,4CAA4C;QAC5C,sCAAsC;QACtC,oCAAoC;QACpC,qCAAqC;QACrC,uBAAuB;QACvB,qBAAqB;QACrB,yBAAyB;QACzB,8BAA8B;QAC9B,sBAAsB;QACtB,4BAA4B;QAC5B,sBAAsB;QACtB,gCAAgC;QAChC,0CAA0C;QAC1C,8BAA8B;QAC9B,yBAAyB;QACzB,oCAAoC;KACrC;IACD,WAAW,EAAE;QACX,2CAA2C;QAC3C,oDAAoD;KACrD;CACF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BaselineAdditions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Entries the base model declares **beyond its reference**.
|
|
4
|
+
*
|
|
5
|
+
* The reference is **msip-2.2** (`msip-2.2/test/dummy/db/structure.sql`), the
|
|
6
|
+
* upstream schema of `usuario` and of the geographic catalogs, and today the
|
|
7
|
+
* base is exactly that schema: nothing to subtract and nothing to add. That is
|
|
8
|
+
* deliberate: projects that already use msip (or its catalogs) conform without
|
|
9
|
+
* changes, which makes their migration to the base model a no-op.
|
|
10
|
+
*
|
|
11
|
+
* The list stays here, empty, as the reviewed place to declare what the base
|
|
12
|
+
* should have and msip does not (yet):
|
|
13
|
+
*
|
|
14
|
+
* - `tables`: a whole table (with its columns and constraints) plus, under
|
|
15
|
+
* `sequences`, the sequence its `id` default needs. The wallet link
|
|
16
|
+
* (`billetera_usuario`) is **not** here on purpose: msip-2.2 does not have it,
|
|
17
|
+
* so it is an *optional extension* of the consumers that need it — see
|
|
18
|
+
* `base-model/wallet-link.ts` (which also ships the DDL) and
|
|
19
|
+
* `references/learn-tg.ts` (learn.tg's version of that table).
|
|
20
|
+
* - `columns`: columns added to tables the reference does have (e.g. a new
|
|
21
|
+
* shared field), as `{ table, name, type, notNull, default? }`.
|
|
22
|
+
* - `constraints`: extra integrity rules on those tables, as
|
|
23
|
+
* `{ table, name, kind, definition, columns, references? }`.
|
|
24
|
+
*
|
|
25
|
+
* `base-model:verify` fails if a declared addition does not reach the baseline
|
|
26
|
+
* and warns when the reference already has it, so this list cannot rot.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MSIP_ADDITIONS: BaselineAdditions;
|
|
29
|
+
//# sourceMappingURL=msip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msip.d.ts","sourceRoot":"","sources":["../../../src/base-model/references/msip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,cAAc,EAAE,iBAK5B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entries the base model declares **beyond its reference**.
|
|
3
|
+
*
|
|
4
|
+
* The reference is **msip-2.2** (`msip-2.2/test/dummy/db/structure.sql`), the
|
|
5
|
+
* upstream schema of `usuario` and of the geographic catalogs, and today the
|
|
6
|
+
* base is exactly that schema: nothing to subtract and nothing to add. That is
|
|
7
|
+
* deliberate: projects that already use msip (or its catalogs) conform without
|
|
8
|
+
* changes, which makes their migration to the base model a no-op.
|
|
9
|
+
*
|
|
10
|
+
* The list stays here, empty, as the reviewed place to declare what the base
|
|
11
|
+
* should have and msip does not (yet):
|
|
12
|
+
*
|
|
13
|
+
* - `tables`: a whole table (with its columns and constraints) plus, under
|
|
14
|
+
* `sequences`, the sequence its `id` default needs. The wallet link
|
|
15
|
+
* (`billetera_usuario`) is **not** here on purpose: msip-2.2 does not have it,
|
|
16
|
+
* so it is an *optional extension* of the consumers that need it — see
|
|
17
|
+
* `base-model/wallet-link.ts` (which also ships the DDL) and
|
|
18
|
+
* `references/learn-tg.ts` (learn.tg's version of that table).
|
|
19
|
+
* - `columns`: columns added to tables the reference does have (e.g. a new
|
|
20
|
+
* shared field), as `{ table, name, type, notNull, default? }`.
|
|
21
|
+
* - `constraints`: extra integrity rules on those tables, as
|
|
22
|
+
* `{ table, name, kind, definition, columns, references? }`.
|
|
23
|
+
*
|
|
24
|
+
* `base-model:verify` fails if a declared addition does not reach the baseline
|
|
25
|
+
* and warns when the reference already has it, so this list cannot rot.
|
|
26
|
+
*/
|
|
27
|
+
export const MSIP_ADDITIONS = {
|
|
28
|
+
tables: [],
|
|
29
|
+
sequences: [],
|
|
30
|
+
columns: [],
|
|
31
|
+
constraints: [],
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=msip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msip.js","sourceRoot":"","sources":["../../../src/base-model/references/msip.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;CAChB,CAAC"}
|