@pasosdejesus/m 0.27.2 → 0.28.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/README.md +2 -2
- package/dist/CHANGELOG.md +126 -0
- package/dist/compose/derive.d.ts +53 -0
- package/dist/compose/derive.d.ts.map +1 -0
- package/dist/compose/derive.js +128 -0
- package/dist/compose/derive.js.map +1 -0
- package/dist/compose/discover.d.ts +32 -0
- package/dist/compose/discover.d.ts.map +1 -0
- package/dist/compose/discover.js +96 -0
- package/dist/compose/discover.js.map +1 -0
- package/dist/compose/index.d.ts +17 -0
- package/dist/compose/index.d.ts.map +1 -0
- package/dist/compose/index.js +16 -0
- package/dist/compose/index.js.map +1 -0
- package/dist/compose/manifest.d.ts +89 -0
- package/dist/compose/manifest.d.ts.map +1 -0
- package/dist/compose/manifest.js +16 -0
- package/dist/compose/manifest.js.map +1 -0
- package/dist/compose/sync.d.ts +12 -0
- package/dist/compose/sync.d.ts.map +1 -0
- package/dist/compose/sync.js +27 -0
- package/dist/compose/sync.js.map +1 -0
- package/dist/compose/usage.d.ts +54 -0
- package/dist/compose/usage.d.ts.map +1 -0
- package/dist/compose/usage.js +167 -0
- package/dist/compose/usage.js.map +1 -0
- package/dist/compose/vendor.d.ts +45 -0
- package/dist/compose/vendor.d.ts.map +1 -0
- package/dist/compose/vendor.js +147 -0
- package/dist/compose/vendor.js.map +1 -0
- package/dist/compose/verify.d.ts +11 -0
- package/dist/compose/verify.d.ts.map +1 -0
- package/dist/compose/verify.js +74 -0
- package/dist/compose/verify.js.map +1 -0
- package/dist/e2e/env.d.ts +1 -1
- package/dist/e2e/env.js +3 -3
- package/dist/e2e/env.js.map +1 -1
- package/dist/e2e/local-node.js +1 -1
- package/dist/e2e/local-node.js.map +1 -1
- package/dist/e2e/wallet-mock.js +1 -1
- package/dist/e2e/wallet-mock.js.map +1 -1
- package/dist/e2e/warmup.js +1 -1
- package/dist/e2e/warmup.js.map +1 -1
- package/dist/engine.d.ts +3 -16
- package/dist/engine.d.ts.map +1 -1
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +16 -10
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +13 -10
- package/dist/m.js.map +1 -1
- package/dist/shadcn_components/ui/button.d.ts +1 -1
- package/dist/tasks/create.d.ts +1 -1
- package/dist/tasks/create.d.ts.map +1 -1
- package/dist/tasks/create.js +5 -13
- package/dist/tasks/create.js.map +1 -1
- package/dist/tasks/db.d.ts +2 -1
- package/dist/tasks/db.d.ts.map +1 -1
- package/dist/tasks/db.js +14 -11
- package/dist/tasks/db.js.map +1 -1
- package/dist/tasks/e2e-summary.js +1 -1
- package/dist/tasks/e2e-summary.js.map +1 -1
- package/dist/tasks/e2e.js +1 -1
- package/dist/tasks/e2e.js.map +1 -1
- package/dist/tasks/engine.d.ts.map +1 -1
- package/dist/tasks/engine.js +246 -17
- package/dist/tasks/engine.js.map +1 -1
- package/dist/tasks/msip.d.ts +11 -0
- package/dist/tasks/msip.d.ts.map +1 -0
- package/dist/tasks/{base-model.js → msip.js} +161 -25
- package/dist/tasks/msip.js.map +1 -0
- package/dist/tasks/warmup.js +1 -1
- package/dist/tasks/warmup.js.map +1 -1
- package/dist/templates/apps/hardhat/README.md +0 -8
- package/dist/templates/apps/nextjs/bin/m +3 -0
- package/dist/templates/apps/nextjs/tests/global-setup.ts +28 -0
- package/dist/templates/apps/nextjs/vitest.config.ts +3 -0
- package/dist/test-utils/console.d.ts +1 -1
- package/dist/test-utils/console.js +1 -1
- package/dist/test-utils/kysely-mocks.d.ts +1 -1
- package/dist/test-utils/kysely-mocks.js +1 -1
- package/dist/test-utils/wallet-mocks.js +1 -1
- package/dist/test-utils/wallet-setup.js +1 -1
- package/dist/util/engines.d.ts +4 -6
- package/dist/util/engines.d.ts.map +1 -1
- package/dist/util/engines.js +5 -38
- package/dist/util/engines.js.map +1 -1
- package/dist/util/msip.d.ts +17 -0
- package/dist/util/msip.d.ts.map +1 -0
- package/dist/util/msip.js +86 -0
- package/dist/util/msip.js.map +1 -0
- package/dist/wallet/index.js +1 -1
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/next/i18n.d.ts +1 -1
- package/dist/wallet/next/i18n.js +1 -1
- package/dist/wallet/next/index.js +1 -1
- package/dist/wallet/next/index.js.map +1 -1
- package/dist/wallet/next/namespaces.d.ts +1 -1
- package/dist/wallet/next/namespaces.js +1 -1
- package/dist/wallet/storage/idb.d.ts +1 -1
- package/dist/wallet/storage/idb.js +1 -1
- package/package.json +4 -6
- package/src/e2e/README.md +6 -6
- package/src/tasks/README.md +3 -3
- package/src/test-utils/README.md +2 -2
- package/src/wallet/README.md +4 -4
- package/dist/base-model/baseline.generated.d.ts +0 -48
- package/dist/base-model/baseline.generated.d.ts.map +0 -1
- package/dist/base-model/baseline.generated.js +0 -930
- package/dist/base-model/baseline.generated.js.map +0 -1
- package/dist/base-model/check.d.ts +0 -6
- package/dist/base-model/check.d.ts.map +0 -1
- package/dist/base-model/check.js +0 -195
- package/dist/base-model/check.js.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.d.ts +0 -3
- package/dist/base-model/forward/baseline_1_0_0.d.ts.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.js +0 -23
- package/dist/base-model/forward/baseline_1_0_0.js.map +0 -1
- package/dist/base-model/forward/index.d.ts +0 -28
- package/dist/base-model/forward/index.d.ts.map +0 -1
- package/dist/base-model/forward/index.js +0 -126
- package/dist/base-model/forward/index.js.map +0 -1
- package/dist/base-model/forward/index.test.d.ts +0 -2
- package/dist/base-model/forward/index.test.d.ts.map +0 -1
- package/dist/base-model/forward/index.test.js +0 -65
- package/dist/base-model/forward/index.test.js.map +0 -1
- package/dist/base-model/forward/policy.d.ts +0 -16
- package/dist/base-model/forward/policy.d.ts.map +0 -1
- package/dist/base-model/forward/policy.js +0 -37
- package/dist/base-model/forward/policy.js.map +0 -1
- package/dist/base-model/forward/policy.test.d.ts +0 -2
- package/dist/base-model/forward/policy.test.d.ts.map +0 -1
- package/dist/base-model/forward/policy.test.js +0 -40
- package/dist/base-model/forward/policy.test.js.map +0 -1
- package/dist/base-model/forward/types.d.ts +0 -21
- package/dist/base-model/forward/types.d.ts.map +0 -1
- package/dist/base-model/forward/types.js +0 -2
- package/dist/base-model/forward/types.js.map +0 -1
- package/dist/base-model/generate.d.ts +0 -42
- package/dist/base-model/generate.d.ts.map +0 -1
- package/dist/base-model/generate.js +0 -241
- package/dist/base-model/generate.js.map +0 -1
- package/dist/base-model/guidelines.d.ts +0 -13
- package/dist/base-model/guidelines.d.ts.map +0 -1
- package/dist/base-model/guidelines.js +0 -61
- package/dist/base-model/guidelines.js.map +0 -1
- package/dist/base-model/index.d.ts +0 -24
- package/dist/base-model/index.d.ts.map +0 -1
- package/dist/base-model/index.js +0 -29
- package/dist/base-model/index.js.map +0 -1
- package/dist/base-model/parse-structure.d.ts +0 -4
- package/dist/base-model/parse-structure.d.ts.map +0 -1
- package/dist/base-model/parse-structure.js +0 -170
- package/dist/base-model/parse-structure.js.map +0 -1
- package/dist/base-model/queries.d.ts +0 -34
- package/dist/base-model/queries.d.ts.map +0 -1
- package/dist/base-model/queries.js +0 -118
- package/dist/base-model/queries.js.map +0 -1
- package/dist/base-model/references/learn-tg.d.ts +0 -21
- package/dist/base-model/references/learn-tg.d.ts.map +0 -1
- package/dist/base-model/references/learn-tg.js +0 -65
- package/dist/base-model/references/learn-tg.js.map +0 -1
- package/dist/base-model/references/msip.d.ts +0 -29
- package/dist/base-model/references/msip.d.ts.map +0 -1
- package/dist/base-model/references/msip.js +0 -33
- package/dist/base-model/references/msip.js.map +0 -1
- package/dist/base-model/types.d.ts +0 -207
- package/dist/base-model/types.d.ts.map +0 -1
- package/dist/base-model/types.js +0 -10
- package/dist/base-model/types.js.map +0 -1
- package/dist/base-model/version.d.ts +0 -19
- package/dist/base-model/version.d.ts.map +0 -1
- package/dist/base-model/version.js +0 -26
- package/dist/base-model/version.js.map +0 -1
- package/dist/base-model/wallet-link.d.ts +0 -69
- package/dist/base-model/wallet-link.d.ts.map +0 -1
- package/dist/base-model/wallet-link.js +0 -220
- package/dist/base-model/wallet-link.js.map +0 -1
- package/dist/base-model/wallet-link.test.d.ts +0 -2
- package/dist/base-model/wallet-link.test.d.ts.map +0 -1
- package/dist/base-model/wallet-link.test.js +0 -147
- package/dist/base-model/wallet-link.test.js.map +0 -1
- package/dist/e2e/env.test.d.ts +0 -2
- package/dist/e2e/env.test.d.ts.map +0 -1
- package/dist/e2e/env.test.js +0 -72
- package/dist/e2e/env.test.js.map +0 -1
- package/dist/e2e/full-wallet.test.d.ts +0 -2
- package/dist/e2e/full-wallet.test.d.ts.map +0 -1
- package/dist/e2e/full-wallet.test.js +0 -63
- package/dist/e2e/full-wallet.test.js.map +0 -1
- package/dist/e2e/in-app-wallet.test.d.ts +0 -2
- package/dist/e2e/in-app-wallet.test.d.ts.map +0 -1
- package/dist/e2e/in-app-wallet.test.js +0 -52
- package/dist/e2e/in-app-wallet.test.js.map +0 -1
- package/dist/e2e/local-node.test.d.ts +0 -2
- package/dist/e2e/local-node.test.d.ts.map +0 -1
- package/dist/e2e/local-node.test.js +0 -43
- package/dist/e2e/local-node.test.js.map +0 -1
- package/dist/e2e/retry.test.d.ts +0 -2
- package/dist/e2e/retry.test.d.ts.map +0 -1
- package/dist/e2e/retry.test.js +0 -43
- package/dist/e2e/retry.test.js.map +0 -1
- package/dist/e2e/signer.test.d.ts +0 -2
- package/dist/e2e/signer.test.d.ts.map +0 -1
- package/dist/e2e/signer.test.js +0 -57
- package/dist/e2e/signer.test.js.map +0 -1
- package/dist/e2e/siwe-optional.test.d.ts +0 -2
- package/dist/e2e/siwe-optional.test.d.ts.map +0 -1
- package/dist/e2e/siwe-optional.test.js +0 -13
- package/dist/e2e/siwe-optional.test.js.map +0 -1
- package/dist/e2e/wallet-mock.test.d.ts +0 -2
- package/dist/e2e/wallet-mock.test.d.ts.map +0 -1
- package/dist/e2e/wallet-mock.test.js +0 -28
- package/dist/e2e/wallet-mock.test.js.map +0 -1
- package/dist/e2e/warmup.test.d.ts +0 -2
- package/dist/e2e/warmup.test.d.ts.map +0 -1
- package/dist/e2e/warmup.test.js +0 -67
- package/dist/e2e/warmup.test.js.map +0 -1
- package/dist/engine.test.d.ts +0 -2
- package/dist/engine.test.d.ts.map +0 -1
- package/dist/engine.test.js +0 -35
- package/dist/engine.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -11
- package/dist/index.test.js.map +0 -1
- package/dist/tasks/base-model.d.ts +0 -5
- package/dist/tasks/base-model.d.ts.map +0 -1
- package/dist/tasks/base-model.js.map +0 -1
- package/dist/tasks/create.test.d.ts +0 -2
- package/dist/tasks/create.test.d.ts.map +0 -1
- package/dist/tasks/create.test.js +0 -41
- package/dist/tasks/create.test.js.map +0 -1
- package/dist/tasks/e2e.test.d.ts +0 -2
- package/dist/tasks/e2e.test.d.ts.map +0 -1
- package/dist/tasks/e2e.test.js +0 -108
- package/dist/tasks/e2e.test.js.map +0 -1
- package/dist/tasks/update.test.d.ts +0 -2
- package/dist/tasks/update.test.d.ts.map +0 -1
- package/dist/tasks/update.test.js +0 -79
- package/dist/tasks/update.test.js.map +0 -1
- package/dist/tasks/warmup.test.d.ts +0 -2
- package/dist/tasks/warmup.test.d.ts.map +0 -1
- package/dist/tasks/warmup.test.js +0 -40
- package/dist/tasks/warmup.test.js.map +0 -1
- package/dist/templates/apps/nextjs/tests/index.test.ts +0 -7
- package/dist/templates/apps/nextjs/tests/test-utils.example.test.ts +0 -169
- package/dist/templates/apps/nextjs/tsconfig.test.json +0 -38
- package/dist/test-utils/console.test.d.ts +0 -2
- package/dist/test-utils/console.test.d.ts.map +0 -1
- package/dist/test-utils/console.test.js +0 -70
- package/dist/test-utils/console.test.js.map +0 -1
- package/dist/test-utils/kysely-mocks.test.d.ts +0 -2
- package/dist/test-utils/kysely-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/kysely-mocks.test.js +0 -126
- package/dist/test-utils/kysely-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-mocks.test.d.ts +0 -2
- package/dist/test-utils/wallet-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-mocks.test.js +0 -55
- package/dist/test-utils/wallet-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-setup.test.d.ts +0 -2
- package/dist/test-utils/wallet-setup.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-setup.test.js +0 -18
- package/dist/test-utils/wallet-setup.test.js.map +0 -1
- package/dist/util/engines.test.d.ts +0 -2
- package/dist/util/engines.test.d.ts.map +0 -1
- package/dist/util/engines.test.js +0 -79
- package/dist/util/engines.test.js.map +0 -1
- package/dist/wallet/biometric.test.d.ts +0 -2
- package/dist/wallet/biometric.test.d.ts.map +0 -1
- package/dist/wallet/biometric.test.js +0 -44
- package/dist/wallet/biometric.test.js.map +0 -1
- package/dist/wallet/crypto.test.d.ts +0 -2
- package/dist/wallet/crypto.test.d.ts.map +0 -1
- package/dist/wallet/crypto.test.js +0 -34
- package/dist/wallet/crypto.test.js.map +0 -1
- package/dist/wallet/destinations.test.d.ts +0 -2
- package/dist/wallet/destinations.test.d.ts.map +0 -1
- package/dist/wallet/destinations.test.js +0 -34
- package/dist/wallet/destinations.test.js.map +0 -1
- package/dist/wallet/external-provider.test.d.ts +0 -2
- package/dist/wallet/external-provider.test.d.ts.map +0 -1
- package/dist/wallet/external-provider.test.js +0 -44
- package/dist/wallet/external-provider.test.js.map +0 -1
- package/dist/wallet/indexeddb.test.d.ts +0 -2
- package/dist/wallet/indexeddb.test.d.ts.map +0 -1
- package/dist/wallet/indexeddb.test.js +0 -28
- package/dist/wallet/indexeddb.test.js.map +0 -1
- package/dist/wallet/kdf.test.d.ts +0 -2
- package/dist/wallet/kdf.test.d.ts.map +0 -1
- package/dist/wallet/kdf.test.js +0 -54
- package/dist/wallet/kdf.test.js.map +0 -1
- package/dist/wallet/next/components.test.d.ts +0 -2
- package/dist/wallet/next/components.test.d.ts.map +0 -1
- package/dist/wallet/next/components.test.js +0 -122
- package/dist/wallet/next/components.test.js.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.d.ts +0 -2
- package/dist/wallet/next/useInAppWallet.test.d.ts.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.js +0 -261
- package/dist/wallet/next/useInAppWallet.test.js.map +0 -1
- package/dist/wallet/provider.test.d.ts +0 -2
- package/dist/wallet/provider.test.d.ts.map +0 -1
- package/dist/wallet/provider.test.js +0 -170
- package/dist/wallet/provider.test.js.map +0 -1
- package/dist/wallet/signer.test.d.ts +0 -2
- package/dist/wallet/signer.test.d.ts.map +0 -1
- package/dist/wallet/signer.test.js +0 -62
- package/dist/wallet/signer.test.js.map +0 -1
- package/dist/wallet/storage.test.d.ts +0 -2
- package/dist/wallet/storage.test.d.ts.map +0 -1
- package/dist/wallet/storage.test.js +0 -103
- package/dist/wallet/storage.test.js.map +0 -1
- package/dist/wallet/wallet.test.d.ts +0 -2
- package/dist/wallet/wallet.test.d.ts.map +0 -1
- package/dist/wallet/wallet.test.js +0 -150
- package/dist/wallet/wallet.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -31,12 +31,12 @@ credentials). The `usdt` payment engine lives in `@pasosdejesus/usdt`.
|
|
|
31
31
|
| Area | Commands |
|
|
32
32
|
|------|----------|
|
|
33
33
|
| Scaffolding | `m:create`, `m:update` |
|
|
34
|
-
| Database (PostgreSQL + Kysely) | `db:create`, `db:migrate`, `db:rollback`, `db:dump`, `db:restore`, `db:structure:dump/load`, `db:
|
|
34
|
+
| Database (PostgreSQL + Kysely) | `db:create`, `db:migrate`, `db:rollback`, `db:dump`, `db:restore`, `db:structure:dump/load`, `db:console`, `db:test`, `db:seed` |
|
|
35
35
|
| Wallet (replaces `cast` on OpenBSD) | `wallet:generate`, `wallet:import`, `wallet:list`, `wallet:balance`, `wallet:send`, `wallet:approve`, `wallet:call`, `wallet:sign`, `wallet:broadcast`, `wallet:keccak`, `wallet:derive` — keys in `~/.m/wallets/` with `chmod 600` |
|
|
36
36
|
| Contracts | `contract:test` (EVM via `@pasosdejesus/edr`, no native binaries) |
|
|
37
37
|
| AI tooling | `ai:context`, `ai:readfile`, `ai:writefile`, `ai:edit`, `ai:grep`, `ai:glob` |
|
|
38
38
|
| Requirements | `req:list`, `req:show`, `req:cross`, `req:compare`, `req:sync-from-repo`, `req:sync-to-repo`, `req:list-repo`, `req:create`, `req:close` |
|
|
39
|
-
| Engines | `m:create engine`, `eng:list`, `eng:check`, `eng:wba:setup`, `eng:credentials:setup` |
|
|
39
|
+
| Engines | `m:create engine`, `eng:list`, `eng:sync`, `eng:verify`, `eng:check`, `eng:setup`, `eng:wba:setup`, `eng:credentials:setup`, `eng:msip:setup`, `eng:msip:seed` |
|
|
40
40
|
| Environment | `env:diff` |
|
|
41
41
|
|
|
42
42
|
Subpath exports for programmatic use: `@pasosdejesus/m/i18n`,
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,132 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@pasosdejesus/m` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.28.0] - 2026-10-12
|
|
6
|
+
|
|
7
|
+
### Changed (breaking) — Fase 1 de `m/REQ/39`
|
|
8
|
+
|
|
9
|
+
- **`base-model` → `msip`, y el modelo sale de `m`:** ya no hay subpath `@pasosdejesus/m/base-model`
|
|
10
|
+
**ni `@pasosdejesus/m/msip`**: el modelo base es el motor **`@pasosdejesus/msip`** (paquete aparte,
|
|
11
|
+
versión propia) y `m` **lo resuelve al ejecutar** donde el consumidor lo tenga (vendorizado en
|
|
12
|
+
`packages/generated/msip`, o instalado). Actualizar imports (`@pasosdejesus/m/base-model` →
|
|
13
|
+
`@pasosdejesus/msip`, o a la copia vendorizada).
|
|
14
|
+
- **Comandos:** la familia `base-model:*` se retira; ahora **`eng:msip:setup` / `eng:msip:baseline` /
|
|
15
|
+
`eng:msip:dump` / `eng:msip:verify`**, y **`db:check` se fusiona en `eng:check`**.
|
|
16
|
+
- **`engine.json` → `m-engine.json`**: el manifiesto de un motor se descubre **si y sólo si** el
|
|
17
|
+
paquete tiene `m-engine.json` (sin `"mEngine": true` ni convención de nombre). `name`/`version`
|
|
18
|
+
salen del `package.json`; el montaje va en `mount`.
|
|
19
|
+
- **Sin material específico de consumidores** en `m`: se eliminan
|
|
20
|
+
`packages/m/src/msip/references/` (`msip.ts`, `learn-tg.ts`) y el export `LEARN_TG_EXTENSIONS`; lo
|
|
21
|
+
específico se aporta en tiempo de ejecución (`--additions`/`--extensions`).
|
|
22
|
+
- **Docs:** `doc/base-model-*` → `doc/engines-*`.
|
|
23
|
+
|
|
24
|
+
### Added — Fase 2 de `m/REQ/39` (composición de motores)
|
|
25
|
+
|
|
26
|
+
- **Dos archivos por motor:** `m-engine.json` (intención, a mano) y `m-engine.generated.ts` (hechos
|
|
27
|
+
derivados, generado por `eng:sync`). Regla de oro: lo que se deriva no se escribe a mano.
|
|
28
|
+
- **`eng:sync [<motor>] [--check]`:** regenera `m-engine.generated.ts` desde las fuentes (idempotente;
|
|
29
|
+
`--check` no escribe y sale ≠ 0 si está desactualizado). Sin `<motor>`, opera sobre toda la composición.
|
|
30
|
+
- **`eng:verify [<motor>]`:** guarda el generado contra las fuentes y la intención (`GENERATED_MISSING` /
|
|
31
|
+
`GENERATED_STALE`) y comprueba la propiedad de `engines.<motor>.tables` (`MISSING_ENGINE` /
|
|
32
|
+
`UNKNOWN_TABLE` / `BROKEN_REFERENCE`). El guard del baseline `msip` pasa a **`eng:msip:verify`**.
|
|
33
|
+
- **Descubrimiento:** un paquete es motor **si y sólo si** tiene `m-engine.json`; `eng:list` lo halla
|
|
34
|
+
entre las dependencias y sigue el closure de `engines`.
|
|
35
|
+
|
|
36
|
+
### Changed (breaking) — Fase 3 de `m/REQ/39` (el modelo `msip` sale a un motor propio)
|
|
37
|
+
|
|
38
|
+
- **Nuevo paquete `@pasosdejesus/msip`** (`packages/msip`): el modelo de msip sale de `m` (`db/structure.sql`
|
|
39
|
+
con su **esquema real de 40 tablas**: `usuario` + `msip_*`), más el baseline, los pasos `forward/*`,
|
|
40
|
+
`wallet-link` y la capa de datos. Expone la forma genérica `model` (`{ version, tables, migrations }`)
|
|
41
|
+
en `@pasosdejesus/msip/model`; `model.tables` se **deriva** de `src/m-engine.generated.ts` (no de una
|
|
42
|
+
lista a mano). Un motor exporta **todo** su esquema; el recorte es del consumidor (`engines.<motor>.tables`).
|
|
43
|
+
- **`eng:sync`** escribe el generado en **`src/m-engine.generated.ts`** (compilable/importable) y crea
|
|
44
|
+
el directorio si falta.
|
|
45
|
+
- **Baseline derivado del esquema:** `eng:msip:dump` regenera `baseline.generated.ts` para **todas** las
|
|
46
|
+
tablas del esquema (40), y `BASE_MODEL_TABLES`/`BASE_MODEL_VERSION` se **derivan** de él.
|
|
47
|
+
`eng:msip:setup` + `db:migrate` ahora crean las **40** (antes 5). Corregido de paso: una secuencia se
|
|
48
|
+
emitía una vez por cada tabla que la prefijaba (`msip_pais` ⊂ `msip_pais_histvigencia`).
|
|
49
|
+
- **Datos iniciales (`eng:msip:seed`)**: carga el seed del motor —subconjunto empaquetado
|
|
50
|
+
`db/seed.sql.gz` (catálogos + `msip_pais`/`msip_departamento`/`msip_municipio`)—; `--file <sql|gz>`
|
|
51
|
+
para el dataset completo (~104 MB, con centros poblados/veredas), `--force` recarga y `--check`
|
|
52
|
+
reporta. Atómico (`psql -1`) e idempotente.
|
|
53
|
+
- **`m` ya no depende del motor `msip`:** sólo figura en sus `devDependencies` (para el monorepo), así que
|
|
54
|
+
el manifiesto **publicado** de `m` no lo menciona; sus comandos lo resuelven al ejecutar con `import()`:
|
|
55
|
+
**primero** la copia vendorizada del consumidor (`packages/generated/msip/dist`, hay que compilarla con
|
|
56
|
+
`tsc -b`) y si no el paquete instalado; si no hay ninguno, error con instrucciones. Con eso publicar `m`
|
|
57
|
+
**no obliga a publicar el motor**: `msip` queda **`private`** (su `version` sirve para **trazar
|
|
58
|
+
procedencia** —`PROVENANCE.json`, drift—, no para el registro de npm) y los consumidores lo vendorizan
|
|
59
|
+
con `eng:sync --vendor`.
|
|
60
|
+
|
|
61
|
+
### Added — Fases 4–6 de `m/REQ/39`
|
|
62
|
+
|
|
63
|
+
- **Vendorización `eng:sync <motor> --vendor [--out <dir>]`:** copia trazable de un motor a
|
|
64
|
+
`packages/generated/<motor>` con `PROVENANCE.json` (motor, versión, origen, `sha256`); `eng:check`
|
|
65
|
+
mide el **drift** de las copias vendorizadas (`ok`/`drift`/`absent`). El descubrimiento incluye
|
|
66
|
+
`packages/generated/*`.
|
|
67
|
+
- **`eng:remove <motor> [--drop]`:** quita una copia vendorizada (simétrico de `--vendor`); `--drop`
|
|
68
|
+
borra además las tablas del modelo. Test de ciclo completo (`agregar → poblar → consultar → quitar`)
|
|
69
|
+
en `tests/test-project/apps/nextjs/tests/msip-motor-lifecycle.test.ts`.
|
|
70
|
+
- **Autocontención en `eng:check`:** deriva "lo usado" del código (`src/**`, `app/**`; parser de `tsc`
|
|
71
|
+
con fallback) y lo compara con lo declarado (`engines.<motor>.tables`), reportando `missing`/`extra`.
|
|
72
|
+
- **Limpieza/documentación (Fase 6):** test que impide listas específicas de consumidores en `m`
|
|
73
|
+
(`src/consumers.test.ts`); docs del modelo renombrados de `base-model-*`/`engines-*` a **`doc/msip-*`**
|
|
74
|
+
(`msip-tutorial.md`, `msip-tutorial-contabilidad.md`, `msip-demo.mjs`); `doc/engines.md`, `API.md`,
|
|
75
|
+
`README.md` y `ARCHITECTURE.md` al día.
|
|
76
|
+
|
|
77
|
+
### Changed — citas de requisitos y guía de agentes
|
|
78
|
+
|
|
79
|
+
- **Citas `REQ/<n>` → URL del work item** en código, docs y comentarios (política en `AGENTS.md` §10):
|
|
80
|
+
los requisitos de `m` apuntan a `https://gitlab.com/pasosdeJesus/m/-/work_items/<n>`, los de learn.tg
|
|
81
|
+
a `https://github.com/pasosdeJesus/learn.tg/issues/<n>` y los de sivel3 a
|
|
82
|
+
`https://github.com/pasosdeJesus/sivel3/issues/<n>`; los enlaces de GitLab `/-/issues/<n>` pasan a
|
|
83
|
+
`/-/work_items/<n>`. El `CHANGELOG` histórico y los bloques de código con diagramas o ejemplos quedan
|
|
84
|
+
como estaban.
|
|
85
|
+
- **`AGENTS.md`**: se añaden los comandos `ai:*` de asimilación (§1, con `ai:adJ` para OpenBSD/adJ), las
|
|
86
|
+
trampas estructurales (§4b), la restricción financiera (§8), el trabajo en segundo plano (§9), las
|
|
87
|
+
citas por URL de work item (§10) y las herramientas de búsqueda del proyecto (§11).
|
|
88
|
+
- **Restos de `base-model` retirados del motor `msip`**: la cabecera de las migraciones generadas cita
|
|
89
|
+
`m eng:msip:setup`, la ruta pasa a `msip/forward/` y las guías hablan de la versión de `msip`.
|
|
90
|
+
|
|
91
|
+
### Added — vendorización (etapa 0) verificada
|
|
92
|
+
|
|
93
|
+
- **`eng:sync <motor> --vendor` emite un paquete compilable aparte**: `package.json` (con `exports` y
|
|
94
|
+
`build`/`typecheck`) y `tsconfig.json` **autónomos** en `packages/generated/<motor>`, más las
|
|
95
|
+
`dependencies`/`peerDependencies` declaradas por el motor. Así el consumidor compila el motor por
|
|
96
|
+
separado (`tsc -b`) y su app no carga ese build.
|
|
97
|
+
- **`eng:check --from <dir>`**: mide el drift de las copias vendorizadas contra un **checkout** del motor
|
|
98
|
+
(carpeta del motor o `packages/<motor>`); sin original alcanzable sólo avisa. Por defecto sigue usando
|
|
99
|
+
el `source` de `PROVENANCE.json`.
|
|
100
|
+
- Guía y lineamientos en `doc/engines.md` §12.1 (copia derivada, paquete aparte, drift, dependencias) y
|
|
101
|
+
nota de **fuentes futuras** (npm o subárboles git, de terceros incluidos) en `doc/diseno/engines.md`.
|
|
102
|
+
Verificado por `tests/test-project/apps/nextjs/tests/msip-motor-lifecycle.test.ts` (vendorizar →
|
|
103
|
+
compilar la copia → `eng:check --from` → quitar).
|
|
104
|
+
- **Guardia "el motor declara lo que usa"** en `eng:verify`: falla con `UNDECLARED_IMPORT` si el `src/`
|
|
105
|
+
de un motor importa un paquete que no está en sus `dependencies`/`peerDependencies`/
|
|
106
|
+
`optionalDependencies` (en pruebas vale `devDependencies`). Analiza el AST (`import`/`export … from`/
|
|
107
|
+
`require`), así que **no** cuenta el texto que el motor emite dentro de plantillas (el caso de `msip`,
|
|
108
|
+
cuya migración generada importa `kysely` para el consumidor).
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
|
|
112
|
+
- **La suite de `tests/test-project` ya no ensucia el árbol**: los tests de BD (`db:migrate`,
|
|
113
|
+
`db:rollback`, `db:structure:dump`) regeneran derivados del esquema y dejaban `db/db.d.ts` (que está
|
|
114
|
+
versionado y usa `.config/kysely.config.ts`) convertido en un stub de 4 líneas, y `db/structure.sql`
|
|
115
|
+
como archivo suelto. Un `globalSetup` de vitest (`tests/test-project/apps/nextjs/tests/global-setup.ts`)
|
|
116
|
+
los fotografía al inicio de la corrida y los restaura al final (se propagó a la plantilla).
|
|
117
|
+
- **Los paquetes publicados ya no incluyen pruebas**: `files` con negaciones (`!dist/**/*.test.*`,
|
|
118
|
+
`!src/**/*.test.*`, `!contracts/**/*.test.*`) en `m`, `msip` y `usdt`; antes el tarball de `m` llevaba
|
|
119
|
+
36 `*.test.js` (y `msip`/`usdt` sus fuentes de prueba). Verificado con `npm pack --dry-run`
|
|
120
|
+
([REQ/40](https://gitlab.com/pasosdeJesus/m/-/work_items/40)).
|
|
121
|
+
- **Los tipos publicados ya no mencionan el motor `msip`**: `dist/util/msip.d.ts` decía
|
|
122
|
+
`typeof import('@pasosdejesus/msip')` y un consumidor sin el motor (con `skipLibCheck: false`) no podía
|
|
123
|
+
resolverlo; ahora el tipo es local a `tasks/msip.ts` (no se emite) y `util/msip.ts` valida en ejecución
|
|
124
|
+
los símbolos que necesita (`MSIP_SYMBOLS`), descartando versiones incompatibles.
|
|
125
|
+
|
|
126
|
+
- **Plantilla `bin/m` y `tests/test-project`**: el `bin/m` ahora importa `@pasosdejesus/mpdj` (como
|
|
127
|
+
documenta `ARCHITECTURE.md` §5.2). Desde la Fase 1 el plugin ya no se descubre por nombre (`@pasosdejesus/m*`)
|
|
128
|
+
y `mpdj` no trae `m-engine.json`, así que un proyecto generado perdía `ai:*`, `req:*` y
|
|
129
|
+
`eng:credentials:*`; la suite de integración lo detectó (10 fallos que ahora pasan).
|
|
130
|
+
|
|
5
131
|
## [0.27.2] - 2026-10-10
|
|
6
132
|
|
|
7
133
|
### Fixed
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor derivation (https://gitlab.com/pasosdeJesus/m/-/work_items/39, §3.4): the facts `eng:sync` reads from a package's
|
|
3
|
+
* sources and writes into `m-engine.generated.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Derivable → generated: `name`/`version` (package.json), `model.migrations`
|
|
6
|
+
* (convention), `model.tables` (the motor's reference
|
|
7
|
+
* structure), `contracts` (`contracts/contracts/*.sol`),
|
|
8
|
+
* `views` (`src/components`, `assets`).
|
|
9
|
+
* Intention → `m-engine.json`: `mount`, `engines`, `provides`/`requires`.
|
|
10
|
+
*
|
|
11
|
+
* "Porque ¿quién de vosotros, queriendo edificar una torre, no se sienta primero y calcula los gastos…?" (Lucas 14:28)
|
|
12
|
+
*/
|
|
13
|
+
import type { Derived } from './manifest.js';
|
|
14
|
+
/** Header of a generated file; `eng:sync` writes it verbatim. */
|
|
15
|
+
export declare const GENERATED_HEADER = "// m-engine.generated.ts \u2014 generado por `eng:sync`; no editar a mano.";
|
|
16
|
+
/** Name of the generated file. */
|
|
17
|
+
export declare const GENERATED_FILENAME = "m-engine.generated.ts";
|
|
18
|
+
/**
|
|
19
|
+
* Generated facts live under `src/` (like `baseline.generated.ts`) so they
|
|
20
|
+
* compile and can be imported by the motor's `model` subpath. `eng:sync` writes
|
|
21
|
+
* them there and `eng:verify` reads them from there.
|
|
22
|
+
*/
|
|
23
|
+
export declare const GENERATED_RELATIVE = "src/m-engine.generated.ts";
|
|
24
|
+
/**
|
|
25
|
+
* Tablas de una estructura de referencia (`pg_dump`): `CREATE TABLE [ONLY] public.<tabla> (`.
|
|
26
|
+
* Mismo patrón que `msip/src/parse-structure.ts`; aquí sólo se derivan los **nombres** para
|
|
27
|
+
* `m-engine.generated.ts` (el inventario completo de columnas/restricciones vive en el motor).
|
|
28
|
+
*/
|
|
29
|
+
export declare function structureTables(sql: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Tables of a motor's own model, derived from its **reference structure**
|
|
32
|
+
* (`db/structure.sql`), never from scanning all migrations (which have
|
|
33
|
+
* `DROP`/`RENAME`). A motor with no structure has no model tables (`[]`).
|
|
34
|
+
*/
|
|
35
|
+
export declare function deriveTables(dir: string): string[];
|
|
36
|
+
/** Migrations directory, by convention `db/migrations` when it exists. */
|
|
37
|
+
export declare function deriveMigrations(dir: string): string | undefined;
|
|
38
|
+
/** Solidity contract names, from `contracts/contracts/*.sol` (skipping `_`-prefixed mocks). */
|
|
39
|
+
export declare function deriveContracts(dir: string): string[];
|
|
40
|
+
/** Views: React components under `src/components` and an `assets` directory. */
|
|
41
|
+
export declare function deriveViews(dir: string): Derived['views'];
|
|
42
|
+
/** Commands the motor declares on `package.json` (`m.commands`); empty if none. */
|
|
43
|
+
export declare function deriveCommands(pkg: unknown): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Build the derived facts of a motor. Key order is fixed so the generated file
|
|
46
|
+
* is byte-identical across runs (idempotent, diffable).
|
|
47
|
+
*/
|
|
48
|
+
export declare function deriveFrom(dir: string, name: string, version: string, pkg?: unknown): Derived;
|
|
49
|
+
/** Render `m-engine.generated.ts` from the derived facts (pure JSON body + `as const`). */
|
|
50
|
+
export declare function renderGenerated(derived: Derived): string;
|
|
51
|
+
/** Read and parse the generated facts, or `null` when absent/unreadable. */
|
|
52
|
+
export declare function readGenerated(dir: string): Derived | null;
|
|
53
|
+
//# sourceMappingURL=derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/compose/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,+EAA0E,CAAA;AAEvG,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AAEzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAK7D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOlD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAGrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAc7F;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAWzD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor derivation (https://gitlab.com/pasosdeJesus/m/-/work_items/39, §3.4): the facts `eng:sync` reads from a package's
|
|
3
|
+
* sources and writes into `m-engine.generated.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Derivable → generated: `name`/`version` (package.json), `model.migrations`
|
|
6
|
+
* (convention), `model.tables` (the motor's reference
|
|
7
|
+
* structure), `contracts` (`contracts/contracts/*.sol`),
|
|
8
|
+
* `views` (`src/components`, `assets`).
|
|
9
|
+
* Intention → `m-engine.json`: `mount`, `engines`, `provides`/`requires`.
|
|
10
|
+
*
|
|
11
|
+
* "Porque ¿quién de vosotros, queriendo edificar una torre, no se sienta primero y calcula los gastos…?" (Lucas 14:28)
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
/** Header of a generated file; `eng:sync` writes it verbatim. */
|
|
16
|
+
export const GENERATED_HEADER = '// m-engine.generated.ts — generado por `eng:sync`; no editar a mano.';
|
|
17
|
+
/** Name of the generated file. */
|
|
18
|
+
export const GENERATED_FILENAME = 'm-engine.generated.ts';
|
|
19
|
+
/**
|
|
20
|
+
* Generated facts live under `src/` (like `baseline.generated.ts`) so they
|
|
21
|
+
* compile and can be imported by the motor's `model` subpath. `eng:sync` writes
|
|
22
|
+
* them there and `eng:verify` reads them from there.
|
|
23
|
+
*/
|
|
24
|
+
export const GENERATED_RELATIVE = `src/${GENERATED_FILENAME}`;
|
|
25
|
+
/** Reference structures a motor may ship (the "current inventory", like the baseline). */
|
|
26
|
+
const STRUCTURE_CANDIDATES = ['db/structure.sql', 'db/schema.sql'];
|
|
27
|
+
/**
|
|
28
|
+
* Tablas de una estructura de referencia (`pg_dump`): `CREATE TABLE [ONLY] public.<tabla> (`.
|
|
29
|
+
* Mismo patrón que `msip/src/parse-structure.ts`; aquí sólo se derivan los **nombres** para
|
|
30
|
+
* `m-engine.generated.ts` (el inventario completo de columnas/restricciones vive en el motor).
|
|
31
|
+
*/
|
|
32
|
+
export function structureTables(sql) {
|
|
33
|
+
const found = new Set();
|
|
34
|
+
for (const match of sql.matchAll(/^CREATE TABLE (?:ONLY )?public\.(\w+) \(\r?\n/gm))
|
|
35
|
+
found.add(match[1]);
|
|
36
|
+
return [...found].sort();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Tables of a motor's own model, derived from its **reference structure**
|
|
40
|
+
* (`db/structure.sql`), never from scanning all migrations (which have
|
|
41
|
+
* `DROP`/`RENAME`). A motor with no structure has no model tables (`[]`).
|
|
42
|
+
*/
|
|
43
|
+
export function deriveTables(dir) {
|
|
44
|
+
for (const candidate of STRUCTURE_CANDIDATES) {
|
|
45
|
+
const file = join(dir, candidate);
|
|
46
|
+
if (!existsSync(file))
|
|
47
|
+
continue;
|
|
48
|
+
return structureTables(readFileSync(file, 'utf-8'));
|
|
49
|
+
}
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
/** Migrations directory, by convention `db/migrations` when it exists. */
|
|
53
|
+
export function deriveMigrations(dir) {
|
|
54
|
+
return existsSync(join(dir, 'db', 'migrations')) ? 'db/migrations' : undefined;
|
|
55
|
+
}
|
|
56
|
+
/** Solidity contract names, from `contracts/contracts/*.sol` (skipping `_`-prefixed mocks). */
|
|
57
|
+
export function deriveContracts(dir) {
|
|
58
|
+
const contractsDir = join(dir, 'contracts', 'contracts');
|
|
59
|
+
if (!existsSync(contractsDir))
|
|
60
|
+
return [];
|
|
61
|
+
return readdirSync(contractsDir)
|
|
62
|
+
.filter((file) => file.endsWith('.sol') && !file.startsWith('_'))
|
|
63
|
+
.map((file) => file.replace(/\.sol$/, ''))
|
|
64
|
+
.sort();
|
|
65
|
+
}
|
|
66
|
+
/** Views: React components under `src/components` and an `assets` directory. */
|
|
67
|
+
export function deriveViews(dir) {
|
|
68
|
+
const componentsDir = join(dir, 'src', 'components');
|
|
69
|
+
const components = existsSync(componentsDir)
|
|
70
|
+
? readdirSync(componentsDir)
|
|
71
|
+
.filter((file) => /\.tsx?$/.test(file) && !/\.test\./.test(file))
|
|
72
|
+
.map((file) => file.replace(/\.tsx?$/, ''))
|
|
73
|
+
.filter((name) => name !== 'index')
|
|
74
|
+
.sort()
|
|
75
|
+
: [];
|
|
76
|
+
const assets = existsSync(join(dir, 'assets')) ? 'assets' : undefined;
|
|
77
|
+
if (components.length === 0 && !assets)
|
|
78
|
+
return undefined;
|
|
79
|
+
return { components, ...(assets ? { assets } : {}) };
|
|
80
|
+
}
|
|
81
|
+
/** Commands the motor declares on `package.json` (`m.commands`); empty if none. */
|
|
82
|
+
export function deriveCommands(pkg) {
|
|
83
|
+
const declared = pkg?.m?.commands;
|
|
84
|
+
return Array.isArray(declared) ? declared.filter((c) => typeof c === 'string') : [];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Build the derived facts of a motor. Key order is fixed so the generated file
|
|
88
|
+
* is byte-identical across runs (idempotent, diffable).
|
|
89
|
+
*/
|
|
90
|
+
export function deriveFrom(dir, name, version, pkg) {
|
|
91
|
+
const migrations = deriveMigrations(dir);
|
|
92
|
+
const derived = {
|
|
93
|
+
name,
|
|
94
|
+
version,
|
|
95
|
+
model: { tables: deriveTables(dir), ...(migrations ? { migrations } : {}) },
|
|
96
|
+
};
|
|
97
|
+
const contracts = deriveContracts(dir);
|
|
98
|
+
if (contracts.length > 0)
|
|
99
|
+
derived.contracts = contracts;
|
|
100
|
+
const commands = deriveCommands(pkg);
|
|
101
|
+
if (commands.length > 0)
|
|
102
|
+
derived.commands = commands;
|
|
103
|
+
const views = deriveViews(dir);
|
|
104
|
+
if (views)
|
|
105
|
+
derived.views = views;
|
|
106
|
+
return derived;
|
|
107
|
+
}
|
|
108
|
+
/** Render `m-engine.generated.ts` from the derived facts (pure JSON body + `as const`). */
|
|
109
|
+
export function renderGenerated(derived) {
|
|
110
|
+
return `${GENERATED_HEADER}\nexport const engine = ${JSON.stringify(derived, null, 2)} as const;\n`;
|
|
111
|
+
}
|
|
112
|
+
/** Read and parse the generated facts, or `null` when absent/unreadable. */
|
|
113
|
+
export function readGenerated(dir) {
|
|
114
|
+
const file = join(dir, GENERATED_RELATIVE);
|
|
115
|
+
if (!existsSync(file))
|
|
116
|
+
return null;
|
|
117
|
+
const text = readFileSync(file, 'utf-8');
|
|
118
|
+
const match = text.match(/export const engine = (\{[\s\S]*\}) as const/);
|
|
119
|
+
if (!match)
|
|
120
|
+
return null;
|
|
121
|
+
try {
|
|
122
|
+
return JSON.parse(match[1]);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/compose/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine discovery (https://gitlab.com/pasosdeJesus/m/-/work_items/39, D5): a package is a motor **iff** it ships an
|
|
3
|
+
* `m-engine.json` (the file is the marker; no `mEngine` flag nor naming). `m`
|
|
4
|
+
* finds the motors among the dependencies (`packages/*`) and follows the
|
|
5
|
+
* **closure** of what each motor declares in `engines`.
|
|
6
|
+
*
|
|
7
|
+
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
8
|
+
*/
|
|
9
|
+
import type { EngineManifest, Intention } from './manifest.js';
|
|
10
|
+
export interface PackageJson {
|
|
11
|
+
name?: string;
|
|
12
|
+
version?: string;
|
|
13
|
+
dependencies?: Record<string, string>;
|
|
14
|
+
peerDependencies?: Record<string, string>;
|
|
15
|
+
optionalDependencies?: Record<string, string>;
|
|
16
|
+
devDependencies?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
/** Read `m-engine.json` (the intention), or `null` when the package is not a motor. */
|
|
19
|
+
export declare function readIntention(dir: string): Intention | null;
|
|
20
|
+
/** Read `package.json` (name/version), or `null` when absent/unreadable. */
|
|
21
|
+
export declare function readPackageJson(dir: string): PackageJson | null;
|
|
22
|
+
/** Resolve a single motor directory into a manifest (intention + derived facts). */
|
|
23
|
+
export declare function readEngineManifest(dir: string, fallbackName?: string): EngineManifest | null;
|
|
24
|
+
/** Discover the motors of a monorepo by reading the marker under `packages/`. */
|
|
25
|
+
export declare function discoverEngines(rootDir: string): Promise<EngineManifest[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Closure of a set of motors: the requested motors **plus** everything they
|
|
28
|
+
* declare in `engines`, transitively. Deterministic order (roots first, then
|
|
29
|
+
* declared dependencies, depth-first).
|
|
30
|
+
*/
|
|
31
|
+
export declare function engineClosure(roots: readonly string[], byName: ReadonlyMap<string, EngineManifest>): EngineManifest[];
|
|
32
|
+
//# sourceMappingURL=discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/compose/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ3D;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ/D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQ5F;AAED,iFAAiF;AACjF,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAoBhF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAC1C,cAAc,EAAE,CAalB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine discovery (https://gitlab.com/pasosdeJesus/m/-/work_items/39, D5): a package is a motor **iff** it ships an
|
|
3
|
+
* `m-engine.json` (the file is the marker; no `mEngine` flag nor naming). `m`
|
|
4
|
+
* finds the motors among the dependencies (`packages/*`) and follows the
|
|
5
|
+
* **closure** of what each motor declares in `engines`.
|
|
6
|
+
*
|
|
7
|
+
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
10
|
+
import { readdir } from 'node:fs/promises';
|
|
11
|
+
import { basename, join } from 'node:path';
|
|
12
|
+
import { deriveFrom, readGenerated } from './derive.js';
|
|
13
|
+
/** Read `m-engine.json` (the intention), or `null` when the package is not a motor. */
|
|
14
|
+
export function readIntention(dir) {
|
|
15
|
+
const file = join(dir, 'm-engine.json');
|
|
16
|
+
if (!existsSync(file))
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(readFileSync(file, 'utf-8'));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Read `package.json` (name/version), or `null` when absent/unreadable. */
|
|
26
|
+
export function readPackageJson(dir) {
|
|
27
|
+
const file = join(dir, 'package.json');
|
|
28
|
+
if (!existsSync(file))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(readFileSync(file, 'utf-8'));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Resolve a single motor directory into a manifest (intention + derived facts). */
|
|
38
|
+
export function readEngineManifest(dir, fallbackName) {
|
|
39
|
+
const intention = readIntention(dir);
|
|
40
|
+
if (!intention)
|
|
41
|
+
return null;
|
|
42
|
+
const pkg = readPackageJson(dir);
|
|
43
|
+
const name = pkg?.name ?? fallbackName ?? basename(dir);
|
|
44
|
+
const version = pkg?.version ?? '0.0.0';
|
|
45
|
+
const derived = readGenerated(dir) ?? deriveFrom(dir, name, version, pkg);
|
|
46
|
+
return { ...derived, ...intention, name, version, dir };
|
|
47
|
+
}
|
|
48
|
+
/** Discover the motors of a monorepo by reading the marker under `packages/`. */
|
|
49
|
+
export async function discoverEngines(rootDir) {
|
|
50
|
+
const packagesDir = join(rootDir, 'packages');
|
|
51
|
+
const manifests = [];
|
|
52
|
+
const scan = async (dir) => {
|
|
53
|
+
let entries;
|
|
54
|
+
try {
|
|
55
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (!entry.isDirectory())
|
|
62
|
+
continue;
|
|
63
|
+
const manifest = readEngineManifest(join(dir, entry.name), entry.name);
|
|
64
|
+
if (manifest)
|
|
65
|
+
manifests.push(manifest);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
await scan(packagesDir);
|
|
69
|
+
// Copias vendorizadas (https://gitlab.com/pasosdeJesus/m/-/work_items/39 D17): `packages/generated/<motor>`.
|
|
70
|
+
await scan(join(packagesDir, 'generated'));
|
|
71
|
+
return manifests;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Closure of a set of motors: the requested motors **plus** everything they
|
|
75
|
+
* declare in `engines`, transitively. Deterministic order (roots first, then
|
|
76
|
+
* declared dependencies, depth-first).
|
|
77
|
+
*/
|
|
78
|
+
export function engineClosure(roots, byName) {
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
const out = [];
|
|
81
|
+
const visit = (name) => {
|
|
82
|
+
if (seen.has(name))
|
|
83
|
+
return;
|
|
84
|
+
seen.add(name);
|
|
85
|
+
const manifest = byName.get(name);
|
|
86
|
+
if (!manifest)
|
|
87
|
+
return;
|
|
88
|
+
out.push(manifest);
|
|
89
|
+
for (const dep of Object.keys(manifest.engines ?? {}))
|
|
90
|
+
visit(dep);
|
|
91
|
+
};
|
|
92
|
+
for (const name of roots)
|
|
93
|
+
visit(name);
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/compose/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAYvD,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAc,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAgB,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,YAAqB;IACnE,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAC3B,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,OAAO,CAAA;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IACzE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;AACzD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAqB,EAAE,CAAA;IACtC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;QAChD,IAAI,OAAO,CAAA;QACX,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAM;QACR,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAQ;YAClC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACtE,IAAI,QAAQ;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxC,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,CAAC,WAAW,CAAC,CAAA;IACvB,6GAA6G;IAC7G,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;IAC1C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAwB,EACxB,MAA2C;IAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,GAAG,GAAqB,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAM;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACd,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACnE,CAAC,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — módulo puro.
|
|
3
|
+
*
|
|
4
|
+
* `m` es un orquestador de motores: los **descubre** (por `m-engine.json`),
|
|
5
|
+
* compone, verifica y aplica. Este módulo reúne las funciones puras; el CLI
|
|
6
|
+
* (`src/tasks/engine.ts`) es sólo *glue*.
|
|
7
|
+
*
|
|
8
|
+
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
9
|
+
*/
|
|
10
|
+
export type { Intention, Derived, DerivedModel, DerivedViews, EngineManifest, EngineMount, EngineRef, Finding, FindingCode, SyncResult, VerifyResult, } from './manifest.js';
|
|
11
|
+
export { deriveFrom, deriveTables, deriveMigrations, deriveContracts, deriveViews, deriveCommands, structureTables, renderGenerated, readGenerated, GENERATED_FILENAME, GENERATED_RELATIVE, GENERATED_HEADER, } from './derive.js';
|
|
12
|
+
export { discoverEngines, readEngineManifest, readIntention, readPackageJson, engineClosure, } from './discover.js';
|
|
13
|
+
export { sync } from './sync.js';
|
|
14
|
+
export { verify } from './verify.js';
|
|
15
|
+
export { vendor, unvendor, drift, readProvenance, structureSha, type Provenance, type DriftFinding, type DriftCode, } from './vendor.js';
|
|
16
|
+
export { tablesUsed, declaredUsage, usageReport, projectSources, type DeclaredUsage, type UsageReport, } from './usage.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EACL,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EACrD,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,GACnD,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EACtD,KAAK,aAAa,EAAE,KAAK,WAAW,GACrC,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — módulo puro.
|
|
3
|
+
*
|
|
4
|
+
* `m` es un orquestador de motores: los **descubre** (por `m-engine.json`),
|
|
5
|
+
* compone, verifica y aplica. Este módulo reúne las funciones puras; el CLI
|
|
6
|
+
* (`src/tasks/engine.ts`) es sólo *glue*.
|
|
7
|
+
*
|
|
8
|
+
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
9
|
+
*/
|
|
10
|
+
export { deriveFrom, deriveTables, deriveMigrations, deriveContracts, deriveViews, deriveCommands, structureTables, renderGenerated, readGenerated, GENERATED_FILENAME, GENERATED_RELATIVE, GENERATED_HEADER, } from './derive.js';
|
|
11
|
+
export { discoverEngines, readEngineManifest, readIntention, readPackageJson, engineClosure, } from './discover.js';
|
|
12
|
+
export { sync } from './sync.js';
|
|
13
|
+
export { verify } from './verify.js';
|
|
14
|
+
export { vendor, unvendor, drift, readProvenance, structureSha, } from './vendor.js';
|
|
15
|
+
export { tablesUsed, declaredUsage, usageReport, projectSources, } from './usage.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EACL,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,GAEtD,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,GAEvD,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composición de motores (https://gitlab.com/pasosdeJesus/m/-/work_items/39) — tipos puros.
|
|
3
|
+
*
|
|
4
|
+
* Un motor se describe con **dos archivos**:
|
|
5
|
+
* - `m-engine.json` → **intención** (a mano): montaje, motores/tablas
|
|
6
|
+
* que usa, capacidades, futuros renombres.
|
|
7
|
+
* - `m-engine.generated.ts` → **hechos derivados** (generado por `eng:sync`):
|
|
8
|
+
* nombre/versión, modelo, contratos, vistas, comandos.
|
|
9
|
+
*
|
|
10
|
+
* Regla de oro: lo que se **deriva** no se escribe a mano; lo que es **intención**
|
|
11
|
+
* (y no se puede derivar) va en `m-engine.json`.
|
|
12
|
+
*
|
|
13
|
+
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
14
|
+
*/
|
|
15
|
+
/** Puntos de montaje del motor: prefijos de API y de rutas. Intención pura. */
|
|
16
|
+
export interface EngineMount {
|
|
17
|
+
api?: string;
|
|
18
|
+
route?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Referencia de un motor a otro: qué tablas (y columnas) usa de él. Intención pura. */
|
|
21
|
+
export interface EngineRef {
|
|
22
|
+
/** Paquete que provee el motor (si difiere del alias). */
|
|
23
|
+
package?: string;
|
|
24
|
+
/** Subpath del modelo dentro del paquete (por defecto `model`). */
|
|
25
|
+
subpath?: string;
|
|
26
|
+
/** Subconjunto de tablas propias del motor que se usan (si se omite, todas). */
|
|
27
|
+
tables?: string[];
|
|
28
|
+
/** Subconjunto de columnas por tabla (si falta, todas). */
|
|
29
|
+
columns?: Record<string, string[]>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `m-engine.json` — intención del motor (a mano, mínima). No repite lo derivable
|
|
33
|
+
* (`name`/`version` salen del `package.json`).
|
|
34
|
+
*/
|
|
35
|
+
export interface Intention {
|
|
36
|
+
mount?: EngineMount;
|
|
37
|
+
/** Capacidades que ofrece el motor (reemplazabilidad, D12 de https://gitlab.com/pasosdeJesus/m/-/work_items/39). */
|
|
38
|
+
provides?: string[];
|
|
39
|
+
/** Capacidades que necesita de otros motores. */
|
|
40
|
+
requires?: string[];
|
|
41
|
+
/** Motores de los que depende y qué tablas/columnas usa de cada uno. */
|
|
42
|
+
engines?: Record<string, EngineRef>;
|
|
43
|
+
}
|
|
44
|
+
/** Modelo del motor: sus tablas propias, migraciones y (a futuro) prefijo. */
|
|
45
|
+
export interface DerivedModel {
|
|
46
|
+
tablePrefix?: string;
|
|
47
|
+
tables: string[];
|
|
48
|
+
migrations?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Vistas del motor: componentes y directorio de assets. */
|
|
51
|
+
export interface DerivedViews {
|
|
52
|
+
components?: string[];
|
|
53
|
+
assets?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* `m-engine.generated.ts` — hechos **derivados** de las fuentes del paquete
|
|
57
|
+
* (generado por `eng:sync`; verificado por `eng:verify`). Nunca se edita a mano.
|
|
58
|
+
*/
|
|
59
|
+
export interface Derived {
|
|
60
|
+
name: string;
|
|
61
|
+
version: string;
|
|
62
|
+
model: DerivedModel;
|
|
63
|
+
contracts?: string[];
|
|
64
|
+
commands?: string[];
|
|
65
|
+
views?: DerivedViews;
|
|
66
|
+
}
|
|
67
|
+
/** Manifiesto resuelto de un motor: intención + hechos + su directorio. */
|
|
68
|
+
export interface EngineManifest extends Intention, Derived {
|
|
69
|
+
dir: string;
|
|
70
|
+
}
|
|
71
|
+
/** Grado de un hallazgo de verificación (análogo a los grados D6 de conformidad). */
|
|
72
|
+
export type FindingCode = 'GENERATED_MISSING' | 'GENERATED_STALE' | 'MISSING_ENGINE' | 'UNKNOWN_TABLE' | 'BROKEN_REFERENCE';
|
|
73
|
+
export interface Finding {
|
|
74
|
+
code: FindingCode;
|
|
75
|
+
message: string;
|
|
76
|
+
motor?: string;
|
|
77
|
+
table?: string;
|
|
78
|
+
}
|
|
79
|
+
/** Resultado de `eng:sync`. */
|
|
80
|
+
export interface SyncResult {
|
|
81
|
+
path: string;
|
|
82
|
+
changed: boolean;
|
|
83
|
+
}
|
|
84
|
+
/** Resultado de `eng:verify`. */
|
|
85
|
+
export interface VerifyResult {
|
|
86
|
+
ok: boolean;
|
|
87
|
+
findings: Finding[];
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/compose/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wFAAwF;AACxF,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,oHAAoH;IACpH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACpC;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAe,SAAQ,SAAS,EAAE,OAAO;IACxD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qFAAqF;AACrF,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,CAAA;AAEtB,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB"}
|