@pasosdejesus/m 0.24.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 +75 -1
- 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 +10 -0
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +19 -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/e2e-summary.d.ts +13 -0
- package/dist/tasks/e2e-summary.d.ts.map +1 -0
- package/dist/tasks/e2e-summary.js +117 -0
- package/dist/tasks/e2e-summary.js.map +1 -0
- package/dist/tasks/e2e.d.ts +29 -0
- package/dist/tasks/e2e.d.ts.map +1 -1
- package/dist/tasks/e2e.js +130 -36
- package/dist/tasks/e2e.js.map +1 -1
- package/dist/tasks/e2e.test.d.ts +2 -0
- package/dist/tasks/e2e.test.d.ts.map +1 -0
- package/dist/tasks/e2e.test.js +108 -0
- package/dist/tasks/e2e.test.js.map +1 -0
- 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/dist/wallet/next/components/InAppWalletSetup.d.ts +11 -0
- package/dist/wallet/next/components/InAppWalletSetup.d.ts.map +1 -0
- package/dist/wallet/next/components/InAppWalletSetup.js +55 -0
- package/dist/wallet/next/components/InAppWalletSetup.js.map +1 -0
- package/dist/wallet/next/components/InAppWalletUnlock.d.ts +9 -0
- package/dist/wallet/next/components/InAppWalletUnlock.d.ts.map +1 -0
- package/dist/wallet/next/components/InAppWalletUnlock.js +29 -0
- package/dist/wallet/next/components/InAppWalletUnlock.js.map +1 -0
- package/dist/wallet/next/components.test.d.ts +2 -0
- package/dist/wallet/next/components.test.d.ts.map +1 -0
- package/dist/wallet/next/components.test.js +122 -0
- package/dist/wallet/next/components.test.js.map +1 -0
- package/dist/wallet/next/i18n.d.ts +63 -0
- package/dist/wallet/next/i18n.d.ts.map +1 -0
- package/dist/wallet/next/i18n.js +64 -0
- package/dist/wallet/next/i18n.js.map +1 -0
- package/dist/wallet/next/index.d.ts +7 -0
- package/dist/wallet/next/index.d.ts.map +1 -0
- package/dist/wallet/next/index.js +12 -0
- package/dist/wallet/next/index.js.map +1 -0
- package/dist/wallet/next/namespaces.d.ts +17 -0
- package/dist/wallet/next/namespaces.d.ts.map +1 -0
- package/dist/wallet/next/namespaces.js +17 -0
- package/dist/wallet/next/namespaces.js.map +1 -0
- package/dist/wallet/next/useInAppWallet.d.ts +55 -0
- package/dist/wallet/next/useInAppWallet.d.ts.map +1 -0
- package/dist/wallet/next/useInAppWallet.js +261 -0
- package/dist/wallet/next/useInAppWallet.js.map +1 -0
- package/dist/wallet/next/useInAppWallet.test.d.ts +2 -0
- package/dist/wallet/next/useInAppWallet.test.d.ts.map +1 -0
- package/dist/wallet/next/useInAppWallet.test.js +261 -0
- package/dist/wallet/next/useInAppWallet.test.js.map +1 -0
- package/package.json +9 -1
- package/src/e2e/README.md +58 -0
- package/src/tasks/README.md +1 -0
- package/src/test-utils/README.md +28 -0
- package/src/wallet/README.md +25 -2
package/src/e2e/README.md
CHANGED
|
@@ -123,6 +123,30 @@ await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY })
|
|
|
123
123
|
await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY, rpcUrl: process.env.RPC_URL })
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
+
**Mock parity (`m/REQ/49` 14).** Without `rpcUrl`, `eth_getTransactionReceipt` used to return
|
|
127
|
+
`null`, so a spec that sends and awaits confirmation hung. Now `setupFullWalletMock` (and
|
|
128
|
+
`fullWalletMockCode`) accept `fakeReceipt` (`{status, blockNumber, transactionHash, logs}`),
|
|
129
|
+
`fakeCelo`, `fakeCallResult` and `fakeTxHash`:
|
|
130
|
+
|
|
131
|
+
```js
|
|
132
|
+
await setupFullWalletMock(page, {
|
|
133
|
+
privateKey: process.env.PRIVATE_KEY,
|
|
134
|
+
fakeReceipt: { status: '0x1', blockNumber: '0x1312D01', logs: [] },
|
|
135
|
+
})
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### In-app wallet driver (`m/REQ/49` 15)
|
|
139
|
+
|
|
140
|
+
Drives the `m/wallet/next` components by their testids, so consumers do not rewrite selectors:
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
setupInAppWallet(page, { password, mnemonic?, privateKey?, timeoutMs? }): Promise<void>
|
|
144
|
+
unlockInAppWallet(page, { password, timeoutMs? }): Promise<void>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
With `mnemonic`/`privateKey` it switches to import mode; otherwise it creates a new wallet. It
|
|
148
|
+
selects by testid/`type` (not by localized text), so it works with any `lang`.
|
|
149
|
+
|
|
126
150
|
### Local EVM node (`m/REQ/14`)
|
|
127
151
|
|
|
128
152
|
```ts
|
|
@@ -151,6 +175,40 @@ Lessons that cost time here (see also learn.tg's `doc/e2e-testing.md`):
|
|
|
151
175
|
- **Receipt hashes**: the local node re-signs, so `setupFullWalletMock` re-keys the receipt
|
|
152
176
|
under `keccak256(rawTransaction)` (the hash viem waits for).
|
|
153
177
|
|
|
178
|
+
### Runner: retry and summary (`m/REQ/49` P3/P4)
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
./bin/m test:e2e --retry 2 --retry-delay 15000 # re-run failed specs (fresh WALLET_INDEX each)
|
|
182
|
+
./bin/m test:e2e:summary /tmp/site.log /tmp/local.log # compare two runs
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- `--retry <N>` (default 0, or `E2E_RETRIES`): after the first pass, each failed spec is re-run
|
|
186
|
+
on its own up to N times; a spec is green **only by exit code**.
|
|
187
|
+
- `--retry-delay <ms>` (default 15000): pause before each retry round.
|
|
188
|
+
- `E2E_LOG_DIR` (default `/tmp`): the run writes `<dir>/e2e-<timestamp>.log` with one
|
|
189
|
+
`[e2e-result] <file> <ok|fail|skip>` line per spec per attempt (the machine-readable format).
|
|
190
|
+
- `test:e2e:summary <log…>` reads those lines (or the human format for older logs) and prints a
|
|
191
|
+
row per spec, one column per log, marking `<-- difiere` when a spec's state changes between
|
|
192
|
+
runs (environmental vs product failure).
|
|
193
|
+
|
|
194
|
+
### Site warmup (`m/REQ/49` P5)
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
warmup(baseUrl, { paths, mode?, filter?, sequentialTimeoutMs?, parallelTimeoutMs?,
|
|
198
|
+
rejectUnauthorized?, slowMs?, logger?, request? }): Promise<WarmupOutcome>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Two passes: compile sequentially (a cold `next dev` dies under parallel load), then verify in
|
|
202
|
+
parallel. Reports routes that stay slow (>`slowMs`, default 15 s) and **does not fail on 4xx**
|
|
203
|
+
(only informs). `mode: 'sequential'` runs a single pass (the learn.tg local case).
|
|
204
|
+
|
|
205
|
+
```sh
|
|
206
|
+
./bin/m warmup [filter] [--sequential] # SITE_URL from env; paths from the consumer
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The route list lives in the consumer: `e2e/warmup-paths.json` (`["/en", "/api/x"]` or
|
|
210
|
+
`{"paths": […]}`) or `package.json:e2e.warmupPaths`.
|
|
211
|
+
|
|
154
212
|
## Environment Variables
|
|
155
213
|
|
|
156
214
|
See [doc/e2e.md](../../../../doc/e2e.md) for full reference.
|
package/src/tasks/README.md
CHANGED
|
@@ -13,6 +13,7 @@ Each file in this directory exports a `runXxx()` function registered in `../m.ts
|
|
|
13
13
|
| File | Commands | Purpose |
|
|
14
14
|
|------|----------|---------|
|
|
15
15
|
| `context.ts` | `ai:context` | Orchestrates the project context document (schema 1): detection, profiles, filters, budget and output |
|
|
16
|
+
| `base-model.ts` | `base-model:dump`, `base-model:verify` | Generates the base-model baseline from a reference and guards its derivation |
|
|
16
17
|
| `context-workspaces.ts` | *(internal)* | Detects project types and workspace roots (`rails`, `nextjs`, `hardhat`, `monorepo`, `node`) |
|
|
17
18
|
| `context-profiles.ts` | *(internal)* | Built-in task profiles plus JSON config loading, merging and validation |
|
|
18
19
|
| `context-ignore.ts` | *(internal)* | Default exclusions, absolute secrets deny list and filter precedence |
|
package/src/test-utils/README.md
CHANGED
|
@@ -284,6 +284,16 @@ beforeEach(() => {
|
|
|
284
284
|
- Mock for `pg.Pool` of PostgreSQL
|
|
285
285
|
- **Lesson learned:** The `sql.val()` method is crucial for queries using template tags
|
|
286
286
|
|
|
287
|
+
**Builder coverage (`m/REQ/49` U1):** `MockKysely`/`apiDbMocks` ahora cubren lo que usan las
|
|
288
|
+
rutas reales, así que puedes **borrar tu `GlobalMockKysely` escrito a mano**:
|
|
289
|
+
- `eb.or`/`eb.and`/`eb.not`/`eb.exists` y el callback `eb('col', 'in', cb => …)`. Si tienes el mock
|
|
290
|
+
de `kysely` a module scope, pásale `eb: apiDbMocks.mockEb` o importa `createExpressionBuilder()`.
|
|
291
|
+
- `where(sql`…`)`, `having`, `groupBy` y subconsulta-como-tabla (`db.selectFrom(base.as('lb'))`).
|
|
292
|
+
- `onConflict(b => b.column('id').doNothing())`, `transaction().execute(cb)` y `getExecutor()`.
|
|
293
|
+
- `fn.countAll/sum/avg/max/min` (`db.select(cb)` recibe `{ fn, eb, sql }`).
|
|
294
|
+
- `mockSql` (de `createMockSql()`) trae `raw`/`ref`/`val`/`literal`/`join`; `apiDbMocks.mockEb`
|
|
295
|
+
expone el `eb`. `GlobalMockKysely` se exporta como alias de `MockKysely`.
|
|
296
|
+
|
|
287
297
|
### 3. `radix-mocks.tsx` – UI Components
|
|
288
298
|
|
|
289
299
|
**Purpose:** Mock Radix UI components for React component tests.
|
|
@@ -377,6 +387,24 @@ viemMocks.createPublicClient.mockReturnValue({ ... })
|
|
|
377
387
|
- Mock chains are extensible; add new chains as needed
|
|
378
388
|
- **Lesson learned:** Some functions like `privateKeyToAccount` and `formatUnits` are necessary for transaction tests
|
|
379
389
|
|
|
390
|
+
### 6. `console.ts` – Silenciar ruido esperado de consola
|
|
391
|
+
|
|
392
|
+
**Purpose:** Ocultar ruido esperado en las pruebas (reintentos, navegaciones canceladas,
|
|
393
|
+
warnings de una dependencia simulada). Graduado de `NOISY_PATTERNS` de learn.tg (`m/REQ/49` U2).
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
import { silenceConsole } from '@pasosdejesus/m/test-utils/console'
|
|
397
|
+
|
|
398
|
+
const silence = silenceConsole(['[retry]', 'AbortError'])
|
|
399
|
+
// … ejercita el código …
|
|
400
|
+
silence.restore()
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
- `silenceConsole(patterns, opts?)`: envuelve `console.log/warn/error` (configurable con
|
|
404
|
+
`opts.methods`) y suprime la llamada cuando algún argumento contiene un patrón; el resto pasa.
|
|
405
|
+
- Los argumentos no-cadena se comparan por su `message` (Error) o `String()`.
|
|
406
|
+
- Devuelve `{ restore(), suppressed }`; `suppressed` guarda los argumentos suprimidos.
|
|
407
|
+
|
|
380
408
|
## Complete Usage Examples
|
|
381
409
|
|
|
382
410
|
### Configuration for API Route Tests
|
package/src/wallet/README.md
CHANGED
|
@@ -68,6 +68,29 @@ setDestinationsPrefix('learn.tg.pdj-wallet.') // localStorage
|
|
|
68
68
|
setRpName('learn.tg') // nombre de la credencial WebAuthn
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
## React (`./wallet/next`)
|
|
72
|
+
|
|
73
|
+
Capa React de la billetera in-app (`m/REQ/37`, graduada de `learn.tg/packages/pdj-wallet-next`):
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
import {
|
|
77
|
+
useInAppWallet, InAppWalletSetup, InAppWalletUnlock, configureInAppWallet,
|
|
78
|
+
} from '@pasosdejesus/m/wallet/next'
|
|
79
|
+
|
|
80
|
+
// Conserva tu namespace si ya tienes billeteras creadas:
|
|
81
|
+
configureInAppWallet({
|
|
82
|
+
dbName: 'learn-tg-pdj-wallet',
|
|
83
|
+
destinationsPrefix: 'learn.tg.pdj-wallet.',
|
|
84
|
+
rpName: 'learn.tg',
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// Textos: por defecto en/es; el host puede inyectar los suyos:
|
|
88
|
+
<InAppWalletSetup lang="es" messages={{ createTitle: 'Abrir cartera' }} onDone={(a) => {}} />
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`react` es un *optional peer*: el subpath está fuera del barrel, así que importar
|
|
92
|
+
`@pasosdejesus/m/wallet` no arrastra React.
|
|
93
|
+
|
|
71
94
|
## Pruebas
|
|
72
95
|
|
|
73
96
|
Mocks en `@pasosdejesus/m/test-utils` (`installLocalStorage`, `installIndexedDB`,
|
|
@@ -91,6 +114,6 @@ O a mano: `import { setupWalletTests } from '@pasosdejesus/m/test-utils'; setupW
|
|
|
91
114
|
## Notas
|
|
92
115
|
|
|
93
116
|
- Fase 1/2 de `m/REQ/14`: primitivas, estado, storage, provider, WebAuthn (L1/L2),
|
|
94
|
-
destinos y resolutor EIP-6963. La
|
|
95
|
-
|
|
117
|
+
destinos y resolutor EIP-6963. La capa React (hook + `InAppWalletSetup`/`InAppWalletUnlock`)
|
|
118
|
+
vive en el subpath `./wallet/next` (`m/REQ/37`).
|
|
96
119
|
- E2E con firma real: `@pasosdejesus/m/e2e` (`injectEIP6963`, `setupFullWalletMock`).
|