@datakable/core 1.0.1 → 2.0.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 +5 -3
- package/dist/catalog/codes.cjs +12 -8
- package/dist/catalog/codes.cjs.map +1 -1
- package/dist/catalog/codes.js +12 -8
- package/dist/catalog/codes.js.map +1 -1
- package/dist/catalog/slots.cjs +10 -6
- package/dist/catalog/slots.cjs.map +1 -1
- package/dist/catalog/slots.js +10 -6
- package/dist/catalog/slots.js.map +1 -1
- package/dist/{codes-OsjAR3Wz.d.cts → codes-B9bCK73-.d.cts} +30 -4
- package/dist/{codes-OsjAR3Wz.d.ts → codes-B9bCK73-.d.ts} +30 -4
- package/dist/column/column-def.cjs.map +1 -1
- package/dist/column/get-value.cjs +6 -1
- package/dist/column/get-value.cjs.map +1 -1
- package/dist/column/get-value.js +6 -1
- package/dist/column/get-value.js.map +1 -1
- package/dist/column-filters.d.cts +2 -2
- package/dist/column-filters.d.ts +2 -2
- package/dist/diagnostics/build.cjs +4 -1
- package/dist/diagnostics/build.cjs.map +1 -1
- package/dist/diagnostics/build.js +4 -1
- package/dist/diagnostics/build.js.map +1 -1
- package/dist/diagnostics/catalog.cjs +11 -5
- package/dist/diagnostics/catalog.cjs.map +1 -1
- package/dist/diagnostics/catalog.js +10 -5
- package/dist/diagnostics/catalog.js.map +1 -1
- package/dist/diagnostics/codes.cjs +12 -8
- package/dist/diagnostics/codes.cjs.map +1 -1
- package/dist/diagnostics/codes.js +12 -8
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/console.cjs +13 -6
- package/dist/diagnostics/console.cjs.map +1 -1
- package/dist/diagnostics/console.js +13 -6
- package/dist/diagnostics/console.js.map +1 -1
- package/dist/diagnostics/env.cjs +1 -0
- package/dist/diagnostics/env.cjs.map +1 -1
- package/dist/diagnostics/env.js +1 -0
- package/dist/diagnostics/env.js.map +1 -1
- package/dist/diagnostics/explain-text.cjs +2 -1
- package/dist/diagnostics/explain-text.cjs.map +1 -1
- package/dist/diagnostics/explain-text.js +2 -1
- package/dist/diagnostics/explain-text.js.map +1 -1
- package/dist/diagnostics/explain.cjs +3 -2
- package/dist/diagnostics/explain.cjs.map +1 -1
- package/dist/diagnostics/explain.js +3 -2
- package/dist/diagnostics/explain.js.map +1 -1
- package/dist/diagnostics/hub.cjs +5 -4
- package/dist/diagnostics/hub.cjs.map +1 -1
- package/dist/diagnostics/hub.js +5 -4
- package/dist/diagnostics/hub.js.map +1 -1
- package/dist/diagnostics/process-guard.cjs +26 -0
- package/dist/diagnostics/process-guard.cjs.map +1 -0
- package/dist/diagnostics/process-guard.js +9 -0
- package/dist/diagnostics/process-guard.js.map +1 -0
- package/dist/diagnostics/prose.cjs +120 -0
- package/dist/diagnostics/prose.cjs.map +1 -0
- package/dist/diagnostics/prose.js +93 -0
- package/dist/diagnostics/prose.js.map +1 -0
- package/dist/diagnostics/redact.cjs +7 -4
- package/dist/diagnostics/redact.cjs.map +1 -1
- package/dist/diagnostics/redact.js +6 -4
- package/dist/diagnostics/redact.js.map +1 -1
- package/dist/diagnostics/trace-store.cjs +6 -0
- package/dist/diagnostics/trace-store.cjs.map +1 -1
- package/dist/diagnostics/trace-store.js +4 -0
- package/dist/diagnostics/trace-store.js.map +1 -1
- package/dist/diagnostics/tracer.cjs +74 -13
- package/dist/diagnostics/tracer.cjs.map +1 -1
- package/dist/diagnostics/tracer.js +75 -14
- package/dist/diagnostics/tracer.js.map +1 -1
- package/dist/diagnostics/types.cjs.map +1 -1
- package/dist/{explain-vkD2cewE.d.cts → explain-Q8Cg0cZy.d.cts} +13 -4
- package/dist/{explain-Dn99IQt0.d.ts → explain-i0OATi_W.d.ts} +13 -4
- package/dist/feature/codes.cjs +1 -0
- package/dist/feature/codes.cjs.map +1 -1
- package/dist/feature/codes.js +1 -0
- package/dist/feature/codes.js.map +1 -1
- package/dist/feature/install.cjs +4 -3
- package/dist/feature/install.cjs.map +1 -1
- package/dist/feature/install.js +4 -3
- package/dist/feature/install.js.map +1 -1
- package/dist/features/column-filters/codes.cjs +1 -0
- package/dist/features/column-filters/codes.cjs.map +1 -1
- package/dist/features/column-filters/codes.js +1 -0
- package/dist/features/column-filters/codes.js.map +1 -1
- package/dist/features/column-filters/column-filters.cjs +4 -2
- package/dist/features/column-filters/column-filters.cjs.map +1 -1
- package/dist/features/column-filters/column-filters.js +4 -2
- package/dist/features/column-filters/column-filters.js.map +1 -1
- package/dist/features/column-filters/match.cjs +5 -5
- package/dist/features/column-filters/match.cjs.map +1 -1
- package/dist/features/column-filters/match.js +5 -5
- package/dist/features/column-filters/match.js.map +1 -1
- package/dist/features/pagination/codes.cjs +1 -0
- package/dist/features/pagination/codes.cjs.map +1 -1
- package/dist/features/pagination/codes.js +1 -0
- package/dist/features/pagination/codes.js.map +1 -1
- package/dist/features/pagination/pagination.cjs +16 -13
- package/dist/features/pagination/pagination.cjs.map +1 -1
- package/dist/features/pagination/pagination.js +16 -13
- package/dist/features/pagination/pagination.js.map +1 -1
- package/dist/features/search/codes.cjs +1 -0
- package/dist/features/search/codes.cjs.map +1 -1
- package/dist/features/search/codes.js +1 -0
- package/dist/features/search/codes.js.map +1 -1
- package/dist/features/search/search-index.cjs +68 -15
- package/dist/features/search/search-index.cjs.map +1 -1
- package/dist/features/search/search-index.js +68 -15
- package/dist/features/search/search-index.js.map +1 -1
- package/dist/features/search/search.cjs +41 -9
- package/dist/features/search/search.cjs.map +1 -1
- package/dist/features/search/search.js +41 -9
- package/dist/features/search/search.js.map +1 -1
- package/dist/features/search/skipped-codes.cjs +45 -0
- package/dist/features/search/skipped-codes.cjs.map +1 -0
- package/dist/features/search/skipped-codes.js +20 -0
- package/dist/features/search/skipped-codes.js.map +1 -0
- package/dist/features/sorting/codes.cjs +1 -0
- package/dist/features/sorting/codes.cjs.map +1 -1
- package/dist/features/sorting/codes.js +1 -0
- package/dist/features/sorting/codes.js.map +1 -1
- package/dist/features/sorting/sorting.cjs +16 -20
- package/dist/features/sorting/sorting.cjs.map +1 -1
- package/dist/features/sorting/sorting.js +16 -20
- package/dist/features/sorting/sorting.js.map +1 -1
- package/dist/features/sorting/strategy.cjs +4 -4
- package/dist/features/sorting/strategy.cjs.map +1 -1
- package/dist/features/sorting/strategy.js +4 -4
- package/dist/features/sorting/strategy.js.map +1 -1
- package/dist/features/validity/codes.cjs +1 -0
- package/dist/features/validity/codes.cjs.map +1 -1
- package/dist/features/validity/codes.js +1 -0
- package/dist/features/validity/codes.js.map +1 -1
- package/dist/features/validity/validity.cjs +3 -3
- package/dist/features/validity/validity.cjs.map +1 -1
- package/dist/features/validity/validity.js +3 -3
- package/dist/features/validity/validity.js.map +1 -1
- package/dist/index.d.cts +13 -10
- package/dist/index.d.ts +13 -10
- package/dist/ingest/data-check-codes.cjs +4 -2
- package/dist/ingest/data-check-codes.cjs.map +1 -1
- package/dist/ingest/data-check-codes.js +4 -2
- package/dist/ingest/data-check-codes.js.map +1 -1
- package/dist/ingest/data-checks.cjs +1 -1
- package/dist/ingest/data-checks.cjs.map +1 -1
- package/dist/ingest/data-checks.js +1 -1
- package/dist/ingest/data-checks.js.map +1 -1
- package/dist/ingest/row-key-codes.cjs +1 -0
- package/dist/ingest/row-key-codes.cjs.map +1 -1
- package/dist/ingest/row-key-codes.js +1 -0
- package/dist/ingest/row-key-codes.js.map +1 -1
- package/dist/ingest/row-key.cjs +23 -20
- package/dist/ingest/row-key.cjs.map +1 -1
- package/dist/ingest/row-key.js +23 -20
- package/dist/ingest/row-key.js.map +1 -1
- package/dist/ingest/schema-codes.cjs +1 -0
- package/dist/ingest/schema-codes.cjs.map +1 -1
- package/dist/ingest/schema-codes.js +1 -0
- package/dist/ingest/schema-codes.js.map +1 -1
- package/dist/ingest/unique-fields.cjs +2 -2
- package/dist/ingest/unique-fields.cjs.map +1 -1
- package/dist/ingest/unique-fields.js +2 -2
- package/dist/ingest/unique-fields.js.map +1 -1
- package/dist/intercept/boundary.cjs +4 -2
- package/dist/intercept/boundary.cjs.map +1 -1
- package/dist/intercept/boundary.js +4 -2
- package/dist/intercept/boundary.js.map +1 -1
- package/dist/intercept/cell-batch.cjs +4 -4
- package/dist/intercept/cell-batch.cjs.map +1 -1
- package/dist/intercept/cell-batch.js +4 -4
- package/dist/intercept/cell-batch.js.map +1 -1
- package/dist/intercept/codes.cjs +1 -0
- package/dist/intercept/codes.cjs.map +1 -1
- package/dist/intercept/codes.js +1 -0
- package/dist/intercept/codes.js.map +1 -1
- package/dist/intercept/fallbacks.cjs +12 -20
- package/dist/intercept/fallbacks.cjs.map +1 -1
- package/dist/intercept/fallbacks.js +12 -20
- package/dist/intercept/fallbacks.js.map +1 -1
- package/dist/intercept/runtime.cjs +7 -9
- package/dist/intercept/runtime.cjs.map +1 -1
- package/dist/intercept/runtime.js +7 -9
- package/dist/intercept/runtime.js.map +1 -1
- package/dist/messages/index.cjs +4 -1
- package/dist/messages/index.cjs.map +1 -1
- package/dist/messages/index.js +4 -1
- package/dist/messages/index.js.map +1 -1
- package/dist/pagination.d.cts +2 -2
- package/dist/pagination.d.ts +2 -2
- package/dist/pipeline/codes.cjs +1 -0
- package/dist/pipeline/codes.cjs.map +1 -1
- package/dist/pipeline/codes.js +1 -0
- package/dist/pipeline/codes.js.map +1 -1
- package/dist/pipeline/column-cache.cjs +94 -76
- package/dist/pipeline/column-cache.cjs.map +1 -1
- package/dist/pipeline/column-cache.js +92 -75
- package/dist/pipeline/column-cache.js.map +1 -1
- package/dist/pipeline/dev-checks.cjs +1 -0
- package/dist/pipeline/dev-checks.cjs.map +1 -1
- package/dist/pipeline/dev-checks.js +1 -0
- package/dist/pipeline/dev-checks.js.map +1 -1
- package/dist/pipeline/env-codes.cjs +3 -2
- package/dist/pipeline/env-codes.cjs.map +1 -1
- package/dist/pipeline/env-codes.js +3 -2
- package/dist/pipeline/env-codes.js.map +1 -1
- package/dist/pipeline/perf-codes.cjs +1 -0
- package/dist/pipeline/perf-codes.cjs.map +1 -1
- package/dist/pipeline/perf-codes.js +1 -0
- package/dist/pipeline/perf-codes.js.map +1 -1
- package/dist/pipeline/runner.cjs +17 -9
- package/dist/pipeline/runner.cjs.map +1 -1
- package/dist/pipeline/runner.js +17 -9
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pipeline/slice.cjs +3 -1
- package/dist/pipeline/slice.cjs.map +1 -1
- package/dist/pipeline/slice.js +3 -1
- package/dist/pipeline/slice.js.map +1 -1
- package/dist/schema.d.cts +2 -2
- package/dist/schema.d.ts +2 -2
- package/dist/{search-async-entry-v5JdEk5Y.d.cts → search-async-entry-CuLYPfY_.d.cts} +2 -2
- package/dist/{search-async-entry-DGSw2pDL.d.ts → search-async-entry-Cx7xpuVZ.d.ts} +2 -2
- package/dist/search-async.d.cts +3 -3
- package/dist/search-async.d.ts +3 -3
- package/dist/search.d.cts +8 -6
- package/dist/search.d.ts +8 -6
- package/dist/server.d.cts +3 -3
- package/dist/server.d.ts +3 -3
- package/dist/sorting.d.cts +2 -2
- package/dist/sorting.d.ts +2 -2
- package/dist/source/codes.cjs +1 -0
- package/dist/source/codes.cjs.map +1 -1
- package/dist/source/codes.js +1 -0
- package/dist/source/codes.js.map +1 -1
- package/dist/source/fetch-codes.cjs +1 -0
- package/dist/source/fetch-codes.cjs.map +1 -1
- package/dist/source/fetch-codes.js +1 -0
- package/dist/source/fetch-codes.js.map +1 -1
- package/dist/table/codes.cjs +1 -0
- package/dist/table/codes.cjs.map +1 -1
- package/dist/table/codes.js +1 -0
- package/dist/table/codes.js.map +1 -1
- package/dist/table/create-table.cjs +39 -9
- package/dist/table/create-table.cjs.map +1 -1
- package/dist/table/create-table.js +39 -9
- package/dist/table/create-table.js.map +1 -1
- package/dist/table/data-mutation.cjs +1 -0
- package/dist/table/data-mutation.cjs.map +1 -1
- package/dist/table/data-mutation.js +1 -0
- package/dist/table/data-mutation.js.map +1 -1
- package/dist/table/internals.cjs.map +1 -1
- package/dist/table/internals.js.map +1 -1
- package/dist/table/ssr-codes.cjs +1 -0
- package/dist/table/ssr-codes.cjs.map +1 -1
- package/dist/table/ssr-codes.js +1 -0
- package/dist/table/ssr-codes.js.map +1 -1
- package/dist/table/ssr.cjs +4 -1
- package/dist/table/ssr.cjs.map +1 -1
- package/dist/table/ssr.js +4 -1
- package/dist/table/ssr.js.map +1 -1
- package/dist/table/state-feedback.cjs +19 -0
- package/dist/table/state-feedback.cjs.map +1 -1
- package/dist/table/state-feedback.js +19 -0
- package/dist/table/state-feedback.js.map +1 -1
- package/dist/table/types.cjs.map +1 -1
- package/dist/table/types.js.map +1 -1
- package/dist/validity.d.cts +2 -2
- package/dist/validity.d.ts +2 -2
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/versioning/codes.cjs +18 -0
- package/dist/versioning/codes.cjs.map +1 -1
- package/dist/versioning/codes.js +18 -0
- package/dist/versioning/codes.js.map +1 -1
- package/dist/versioning/registry.cjs +4 -2
- package/dist/versioning/registry.cjs.map +1 -1
- package/dist/versioning/registry.js +4 -2
- package/dist/versioning/registry.js.map +1 -1
- package/package.json +39 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/messages/index.ts"],"sourcesContent":["/**\n * `@datakable/core/messages` (`datakable/messages`): full diagnostic text in production (§8.2).\n *\n * Production builds strip `problem` / `impact` / `fix` and keep `code`, `where`, `context` and a\n * docs URL. `import '@datakable/core/messages'` once (e.g. in the app entry) installs the text of\n * every code a production build can emit. Development builds already have it. This module is the\n * package's only side effect (`sideEffects` in package.json).\n */\nimport { optionMessages } from '../catalog/codes'\nimport { installMessages } from '../diagnostics/catalog'\nimport { coreMessages } from '../diagnostics/codes'\nimport { redactionMessages } from '../diagnostics/redact'\nimport { featureMessages } from '../feature/codes'\nimport { columnFiltersMessages } from '../features/column-filters/codes'\nimport { paginationMessages } from '../features/pagination/codes'\nimport { searchMessages } from '../features/search/codes'\nimport { sortingMessages } from '../features/sorting/codes'\nimport { validityMessages } from '../features/validity/codes'\nimport { dataCheckMessages } from '../ingest/data-check-codes'\nimport { rowKeyMessages } from '../ingest/row-key-codes'\nimport { schemaMessages } from '../ingest/schema-codes'\nimport { boundaryMessages } from '../intercept/codes'\nimport { pipelineMessages } from '../pipeline/codes'\nimport { envMessages } from '../pipeline/env-codes'\nimport { asyncMessages } from '../source/codes'\nimport { fetchMessages } from '../source/fetch-codes'\nimport { tableMessages } from '../table/codes'\nimport { ssrMessages } from '../table/ssr-codes'\nimport { versioningMessages } from '../versioning/codes'\n\n/** Every message object core ships, one per module that owns codes. */\nexport const allMessages: ReadonlyArray<Readonly<Record<string, unknown>>> = [\n coreMessages,\n redactionMessages,\n optionMessages,\n featureMessages,\n boundaryMessages,\n pipelineMessages,\n tableMessages,\n ssrMessages,\n asyncMessages,\n fetchMessages,\n rowKeyMessages,\n schemaMessages,\n dataCheckMessages,\n versioningMessages,\n columnFiltersMessages,\n validityMessages,\n searchMessages,\n sortingMessages,\n paginationMessages,\n envMessages,\n]\n\ninstallMessages(...allMessages)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,mBAA+B;AAC/B,qBAAgC;AAChC,IAAAA,gBAA6B;AAC7B,oBAAkC;AAClC,IAAAA,gBAAgC;AAChC,IAAAA,gBAAsC;AACtC,IAAAA,gBAAmC;AACnC,IAAAA,gBAA+B;AAC/B,IAAAA,gBAAgC;AAChC,IAAAA,gBAAiC;AACjC,8BAAkC;AAClC,2BAA+B;AAC/B,0BAA+B;AAC/B,IAAAA,gBAAiC;AACjC,IAAAA,iBAAiC;AACjC,uBAA4B;AAC5B,IAAAA,iBAA8B;AAC9B,yBAA8B;AAC9B,IAAAA,iBAA8B;AAC9B,uBAA4B;AAC5B,IAAAA,iBAAmC;AAG5B,IAAM,cAAgE;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAAA,IAEA,gCAAgB,GAAG,WAAW;","names":["import_codes"]}
|
|
1
|
+
{"version":3,"sources":["../../src/messages/index.ts"],"sourcesContent":["/**\n * `@datakable/core/messages` (`datakable/messages`): full diagnostic text in production (§8.2).\n *\n * Production builds strip `problem` / `impact` / `fix` and keep `code`, `where`, `context` and a\n * docs URL. `import '@datakable/core/messages'` once (e.g. in the app entry) installs the text of\n * every code a production build can emit. Development builds already have it. This module is the\n * package's only side effect (`sideEffects` in package.json).\n */\nimport { optionMessages } from '../catalog/codes'\nimport { installMessages } from '../diagnostics/catalog'\nimport { coreMessages } from '../diagnostics/codes'\nimport { proseMessages } from '../diagnostics/prose'\nimport { redactionMessages } from '../diagnostics/redact'\nimport { featureMessages } from '../feature/codes'\nimport { columnFiltersMessages } from '../features/column-filters/codes'\nimport { paginationMessages } from '../features/pagination/codes'\nimport { searchMessages } from '../features/search/codes'\nimport { sortingMessages } from '../features/sorting/codes'\nimport { validityMessages } from '../features/validity/codes'\nimport { dataCheckMessages } from '../ingest/data-check-codes'\nimport { rowKeyMessages } from '../ingest/row-key-codes'\nimport { schemaMessages } from '../ingest/schema-codes'\nimport { boundaryMessages } from '../intercept/codes'\nimport { pipelineMessages } from '../pipeline/codes'\nimport { envMessages } from '../pipeline/env-codes'\nimport { asyncMessages } from '../source/codes'\nimport { fetchMessages } from '../source/fetch-codes'\nimport { tableMessages } from '../table/codes'\nimport { ssrMessages } from '../table/ssr-codes'\nimport { versioningMessages } from '../versioning/codes'\n\n/** Every message object core ships, one per module that owns codes. */\nexport const allMessages: ReadonlyArray<Readonly<Record<string, unknown>>> = [\n coreMessages,\n redactionMessages,\n optionMessages,\n featureMessages,\n boundaryMessages,\n pipelineMessages,\n tableMessages,\n ssrMessages,\n asyncMessages,\n fetchMessages,\n rowKeyMessages,\n schemaMessages,\n dataCheckMessages,\n versioningMessages,\n columnFiltersMessages,\n validityMessages,\n searchMessages,\n sortingMessages,\n paginationMessages,\n envMessages,\n // The detail sentences production keeps as keys (`fallback: 'cells-undefined'`).\n proseMessages,\n]\n\ninstallMessages(...allMessages)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,mBAA+B;AAC/B,qBAAgC;AAChC,IAAAA,gBAA6B;AAC7B,mBAA8B;AAC9B,oBAAkC;AAClC,IAAAA,gBAAgC;AAChC,IAAAA,gBAAsC;AACtC,IAAAA,gBAAmC;AACnC,IAAAA,gBAA+B;AAC/B,IAAAA,gBAAgC;AAChC,IAAAA,gBAAiC;AACjC,8BAAkC;AAClC,2BAA+B;AAC/B,0BAA+B;AAC/B,IAAAA,gBAAiC;AACjC,IAAAA,iBAAiC;AACjC,uBAA4B;AAC5B,IAAAA,iBAA8B;AAC9B,yBAA8B;AAC9B,IAAAA,iBAA8B;AAC9B,uBAA4B;AAC5B,IAAAA,iBAAmC;AAG5B,IAAM,cAAgE;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF;AAAA,IAEA,gCAAgB,GAAG,WAAW;","names":["import_codes"]}
|
package/dist/messages/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { optionMessages } from "../catalog/codes.js";
|
|
3
3
|
import { installMessages } from "../diagnostics/catalog.js";
|
|
4
4
|
import { coreMessages } from "../diagnostics/codes.js";
|
|
5
|
+
import { proseMessages } from "../diagnostics/prose.js";
|
|
5
6
|
import { redactionMessages } from "../diagnostics/redact.js";
|
|
6
7
|
import { featureMessages } from "../feature/codes.js";
|
|
7
8
|
import { columnFiltersMessages } from "../features/column-filters/codes.js";
|
|
@@ -40,7 +41,9 @@ var allMessages = [
|
|
|
40
41
|
searchMessages,
|
|
41
42
|
sortingMessages,
|
|
42
43
|
paginationMessages,
|
|
43
|
-
envMessages
|
|
44
|
+
envMessages,
|
|
45
|
+
// The detail sentences production keeps as keys (`fallback: 'cells-undefined'`).
|
|
46
|
+
proseMessages
|
|
44
47
|
];
|
|
45
48
|
installMessages(...allMessages);
|
|
46
49
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/messages/index.ts"],"sourcesContent":["/**\n * `@datakable/core/messages` (`datakable/messages`): full diagnostic text in production (§8.2).\n *\n * Production builds strip `problem` / `impact` / `fix` and keep `code`, `where`, `context` and a\n * docs URL. `import '@datakable/core/messages'` once (e.g. in the app entry) installs the text of\n * every code a production build can emit. Development builds already have it. This module is the\n * package's only side effect (`sideEffects` in package.json).\n */\nimport { optionMessages } from '../catalog/codes'\nimport { installMessages } from '../diagnostics/catalog'\nimport { coreMessages } from '../diagnostics/codes'\nimport { redactionMessages } from '../diagnostics/redact'\nimport { featureMessages } from '../feature/codes'\nimport { columnFiltersMessages } from '../features/column-filters/codes'\nimport { paginationMessages } from '../features/pagination/codes'\nimport { searchMessages } from '../features/search/codes'\nimport { sortingMessages } from '../features/sorting/codes'\nimport { validityMessages } from '../features/validity/codes'\nimport { dataCheckMessages } from '../ingest/data-check-codes'\nimport { rowKeyMessages } from '../ingest/row-key-codes'\nimport { schemaMessages } from '../ingest/schema-codes'\nimport { boundaryMessages } from '../intercept/codes'\nimport { pipelineMessages } from '../pipeline/codes'\nimport { envMessages } from '../pipeline/env-codes'\nimport { asyncMessages } from '../source/codes'\nimport { fetchMessages } from '../source/fetch-codes'\nimport { tableMessages } from '../table/codes'\nimport { ssrMessages } from '../table/ssr-codes'\nimport { versioningMessages } from '../versioning/codes'\n\n/** Every message object core ships, one per module that owns codes. */\nexport const allMessages: ReadonlyArray<Readonly<Record<string, unknown>>> = [\n coreMessages,\n redactionMessages,\n optionMessages,\n featureMessages,\n boundaryMessages,\n pipelineMessages,\n tableMessages,\n ssrMessages,\n asyncMessages,\n fetchMessages,\n rowKeyMessages,\n schemaMessages,\n dataCheckMessages,\n versioningMessages,\n columnFiltersMessages,\n validityMessages,\n searchMessages,\n sortingMessages,\n paginationMessages,\n envMessages,\n]\n\ninstallMessages(...allMessages)\n"],"mappings":";AAQA,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAG5B,IAAM,cAAgE;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,gBAAgB,GAAG,WAAW;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/messages/index.ts"],"sourcesContent":["/**\n * `@datakable/core/messages` (`datakable/messages`): full diagnostic text in production (§8.2).\n *\n * Production builds strip `problem` / `impact` / `fix` and keep `code`, `where`, `context` and a\n * docs URL. `import '@datakable/core/messages'` once (e.g. in the app entry) installs the text of\n * every code a production build can emit. Development builds already have it. This module is the\n * package's only side effect (`sideEffects` in package.json).\n */\nimport { optionMessages } from '../catalog/codes'\nimport { installMessages } from '../diagnostics/catalog'\nimport { coreMessages } from '../diagnostics/codes'\nimport { proseMessages } from '../diagnostics/prose'\nimport { redactionMessages } from '../diagnostics/redact'\nimport { featureMessages } from '../feature/codes'\nimport { columnFiltersMessages } from '../features/column-filters/codes'\nimport { paginationMessages } from '../features/pagination/codes'\nimport { searchMessages } from '../features/search/codes'\nimport { sortingMessages } from '../features/sorting/codes'\nimport { validityMessages } from '../features/validity/codes'\nimport { dataCheckMessages } from '../ingest/data-check-codes'\nimport { rowKeyMessages } from '../ingest/row-key-codes'\nimport { schemaMessages } from '../ingest/schema-codes'\nimport { boundaryMessages } from '../intercept/codes'\nimport { pipelineMessages } from '../pipeline/codes'\nimport { envMessages } from '../pipeline/env-codes'\nimport { asyncMessages } from '../source/codes'\nimport { fetchMessages } from '../source/fetch-codes'\nimport { tableMessages } from '../table/codes'\nimport { ssrMessages } from '../table/ssr-codes'\nimport { versioningMessages } from '../versioning/codes'\n\n/** Every message object core ships, one per module that owns codes. */\nexport const allMessages: ReadonlyArray<Readonly<Record<string, unknown>>> = [\n coreMessages,\n redactionMessages,\n optionMessages,\n featureMessages,\n boundaryMessages,\n pipelineMessages,\n tableMessages,\n ssrMessages,\n asyncMessages,\n fetchMessages,\n rowKeyMessages,\n schemaMessages,\n dataCheckMessages,\n versioningMessages,\n columnFiltersMessages,\n validityMessages,\n searchMessages,\n sortingMessages,\n paginationMessages,\n envMessages,\n // The detail sentences production keeps as keys (`fallback: 'cells-undefined'`).\n proseMessages,\n]\n\ninstallMessages(...allMessages)\n"],"mappings":";AAQA,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAG5B,IAAM,cAAgE;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF;AAEA,gBAAgB,GAAG,WAAW;","names":[]}
|
package/dist/pagination.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ai as paginationDiagnostics } from './codes-
|
|
2
|
-
import { F as Feature, b as FixedTypes } from './explain-
|
|
1
|
+
export { ai as paginationDiagnostics } from './codes-B9bCK73-.cjs';
|
|
2
|
+
import { F as Feature, b as FixedTypes } from './explain-Q8Cg0cZy.cjs';
|
|
3
3
|
import { a as DataMode } from './mode-DFV8ryXo.cjs';
|
|
4
4
|
|
|
5
5
|
interface PaginationState {
|
package/dist/pagination.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ai as paginationDiagnostics } from './codes-
|
|
2
|
-
import { F as Feature, b as FixedTypes } from './explain-
|
|
1
|
+
export { ai as paginationDiagnostics } from './codes-B9bCK73-.js';
|
|
2
|
+
import { F as Feature, b as FixedTypes } from './explain-i0OATi_W.js';
|
|
3
3
|
import { a as DataMode } from './mode-DFV8ryXo.js';
|
|
4
4
|
|
|
5
5
|
interface PaginationState {
|
package/dist/pipeline/codes.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(codes_exports, {
|
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(codes_exports);
|
|
27
27
|
var import_catalog = require("../diagnostics/catalog.cjs");
|
|
28
|
+
var import_process_guard = require("../diagnostics/process-guard.cjs");
|
|
28
29
|
var rowList = (rows, count) => {
|
|
29
30
|
const list = rows.map((r) => `#${r}`).join(", ");
|
|
30
31
|
return count > rows.length ? `first: ${list}, \u2026` : `rows ${list}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/pipeline/codes.ts"],"sourcesContent":["import { type DiagnosticMessages, defineDiagnostic } from '../diagnostics/catalog'\n\ndeclare module '../diagnostics/catalog' {\n interface DiagnosticCatalog {\n DK_UNRENDERABLE_VALUE: {\n /** Column id (`key` or `id`). */\n column: string\n /** Position in `options.columns`. */\n index: number\n /** How many cells could not be rendered. */\n count: number\n /** A sample of the row indices (first few, in order). */\n rows: readonly number[]\n /** The type of the first unrenderable value: `object`, `array` or `function`. */\n valueType: string\n }\n }\n}\n\nconst rowList = (rows: readonly number[], count: number) => {\n const list = rows.map((r) => `#${r}`).join(', ')\n return count > rows.length ? `first: ${list}, …` : `rows ${list}`\n}\n\n/** Message text (§8.2): development builds, or production via `@datakable/core/messages`. */\nexport const pipelineMessages: DiagnosticMessages<'DK_UNRENDERABLE_VALUE'> = {\n DK_UNRENDERABLE_VALUE: {\n problem: (d) =>\n `column \"${d.column}\" has ${d.count === 1 ? '1 value' : `${d.count} values`} of type ` +\n `${d.valueType} (${rowList(d.rows, d.count)}) that the default formatter cannot render`,\n impact: () => \"those cells render '' (and match no search)\",\n fix: (d) => [\n `give columns[${d.index}] a format: (value) => string, e.g. format: (v) => v.name`,\n `or render it yourself with cell: ({ value }) => … on columns[${d.index}]`,\n `or point the column at a primitive field: key: '${d.column}.<field>'`,\n ],\n },\n}\n\n/** Codes owned by the pipeline / column cache (§4.3, §8.3). */\nexport const pipelineDiagnostics = [\n defineDiagnostic(\n {\n code: 'DK_UNRENDERABLE_VALUE',\n level: 'warn',\n where: (d) => ({ kind: 'column', index: d.index, id: d.column }),\n },\n (process.env.NODE_ENV !== \"production\") && pipelineMessages.DK_UNRENDERABLE_VALUE,\n ),\n]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA0D;
|
|
1
|
+
{"version":3,"sources":["../../src/pipeline/codes.ts"],"sourcesContent":["import { type DiagnosticMessages, defineDiagnostic } from '../diagnostics/catalog'\nimport '../diagnostics/process-guard'\n\ndeclare module '../diagnostics/catalog' {\n interface DiagnosticCatalog {\n DK_UNRENDERABLE_VALUE: {\n /** Column id (`key` or `id`). */\n column: string\n /** Position in `options.columns`. */\n index: number\n /** How many cells could not be rendered. */\n count: number\n /** A sample of the row indices (first few, in order). */\n rows: readonly number[]\n /** The type of the first unrenderable value: `object`, `array` or `function`. */\n valueType: string\n }\n }\n}\n\nconst rowList = (rows: readonly number[], count: number) => {\n const list = rows.map((r) => `#${r}`).join(', ')\n return count > rows.length ? `first: ${list}, …` : `rows ${list}`\n}\n\n/** Message text (§8.2): development builds, or production via `@datakable/core/messages`. */\nexport const pipelineMessages: DiagnosticMessages<'DK_UNRENDERABLE_VALUE'> = {\n DK_UNRENDERABLE_VALUE: {\n problem: (d) =>\n `column \"${d.column}\" has ${d.count === 1 ? '1 value' : `${d.count} values`} of type ` +\n `${d.valueType} (${rowList(d.rows, d.count)}) that the default formatter cannot render`,\n impact: () => \"those cells render '' (and match no search)\",\n fix: (d) => [\n `give columns[${d.index}] a format: (value) => string, e.g. format: (v) => v.name`,\n `or render it yourself with cell: ({ value }) => … on columns[${d.index}]`,\n `or point the column at a primitive field: key: '${d.column}.<field>'`,\n ],\n },\n}\n\n/** Codes owned by the pipeline / column cache (§4.3, §8.3). */\nexport const pipelineDiagnostics = [\n defineDiagnostic(\n {\n code: 'DK_UNRENDERABLE_VALUE',\n level: 'warn',\n where: (d) => ({ kind: 'column', index: d.index, id: d.column }),\n },\n (process.env.NODE_ENV !== \"production\") && pipelineMessages.DK_UNRENDERABLE_VALUE,\n ),\n]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA0D;AAC1D,2BAAO;AAmBP,IAAM,UAAU,CAAC,MAAyB,UAAkB;AAC1D,QAAM,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AAC/C,SAAO,QAAQ,KAAK,SAAS,UAAU,IAAI,aAAQ,QAAQ,IAAI;AACjE;AAGO,IAAM,mBAAgE;AAAA,EAC3E,uBAAuB;AAAA,IACrB,SAAS,CAAC,MACR,WAAW,EAAE,MAAM,SAAS,EAAE,UAAU,IAAI,YAAY,GAAG,EAAE,KAAK,SAAS,YACxE,EAAE,SAAS,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;AAAA,IAC7C,QAAQ,MAAM;AAAA,IACd,KAAK,CAAC,MAAM;AAAA,MACV,gBAAgB,EAAE,KAAK;AAAA,MACvB,qEAAgE,EAAE,KAAK;AAAA,MACvE,mDAAmD,EAAE,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;AAGO,IAAM,sBAAsB;AAAA,MACjC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO,CAAC,OAAO,EAAE,MAAM,UAAU,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO;AAAA,IAChE;AAAA,IACC,QAAQ,IAAI,aAAa,gBAAiB,iBAAiB;AAAA,EAC9D;AACF;","names":[]}
|
package/dist/pipeline/codes.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// src/pipeline/codes.ts
|
|
2
2
|
import { defineDiagnostic } from "../diagnostics/catalog.js";
|
|
3
|
+
import "../diagnostics/process-guard.js";
|
|
3
4
|
var rowList = (rows, count) => {
|
|
4
5
|
const list = rows.map((r) => `#${r}`).join(", ");
|
|
5
6
|
return count > rows.length ? `first: ${list}, \u2026` : `rows ${list}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/pipeline/codes.ts"],"sourcesContent":["import { type DiagnosticMessages, defineDiagnostic } from '../diagnostics/catalog'\n\ndeclare module '../diagnostics/catalog' {\n interface DiagnosticCatalog {\n DK_UNRENDERABLE_VALUE: {\n /** Column id (`key` or `id`). */\n column: string\n /** Position in `options.columns`. */\n index: number\n /** How many cells could not be rendered. */\n count: number\n /** A sample of the row indices (first few, in order). */\n rows: readonly number[]\n /** The type of the first unrenderable value: `object`, `array` or `function`. */\n valueType: string\n }\n }\n}\n\nconst rowList = (rows: readonly number[], count: number) => {\n const list = rows.map((r) => `#${r}`).join(', ')\n return count > rows.length ? `first: ${list}, …` : `rows ${list}`\n}\n\n/** Message text (§8.2): development builds, or production via `@datakable/core/messages`. */\nexport const pipelineMessages: DiagnosticMessages<'DK_UNRENDERABLE_VALUE'> = {\n DK_UNRENDERABLE_VALUE: {\n problem: (d) =>\n `column \"${d.column}\" has ${d.count === 1 ? '1 value' : `${d.count} values`} of type ` +\n `${d.valueType} (${rowList(d.rows, d.count)}) that the default formatter cannot render`,\n impact: () => \"those cells render '' (and match no search)\",\n fix: (d) => [\n `give columns[${d.index}] a format: (value) => string, e.g. format: (v) => v.name`,\n `or render it yourself with cell: ({ value }) => … on columns[${d.index}]`,\n `or point the column at a primitive field: key: '${d.column}.<field>'`,\n ],\n },\n}\n\n/** Codes owned by the pipeline / column cache (§4.3, §8.3). */\nexport const pipelineDiagnostics = [\n defineDiagnostic(\n {\n code: 'DK_UNRENDERABLE_VALUE',\n level: 'warn',\n where: (d) => ({ kind: 'column', index: d.index, id: d.column }),\n },\n (process.env.NODE_ENV !== \"production\") && pipelineMessages.DK_UNRENDERABLE_VALUE,\n ),\n]\n"],"mappings":";AAAA,SAAkC,wBAAwB;
|
|
1
|
+
{"version":3,"sources":["../../src/pipeline/codes.ts"],"sourcesContent":["import { type DiagnosticMessages, defineDiagnostic } from '../diagnostics/catalog'\nimport '../diagnostics/process-guard'\n\ndeclare module '../diagnostics/catalog' {\n interface DiagnosticCatalog {\n DK_UNRENDERABLE_VALUE: {\n /** Column id (`key` or `id`). */\n column: string\n /** Position in `options.columns`. */\n index: number\n /** How many cells could not be rendered. */\n count: number\n /** A sample of the row indices (first few, in order). */\n rows: readonly number[]\n /** The type of the first unrenderable value: `object`, `array` or `function`. */\n valueType: string\n }\n }\n}\n\nconst rowList = (rows: readonly number[], count: number) => {\n const list = rows.map((r) => `#${r}`).join(', ')\n return count > rows.length ? `first: ${list}, …` : `rows ${list}`\n}\n\n/** Message text (§8.2): development builds, or production via `@datakable/core/messages`. */\nexport const pipelineMessages: DiagnosticMessages<'DK_UNRENDERABLE_VALUE'> = {\n DK_UNRENDERABLE_VALUE: {\n problem: (d) =>\n `column \"${d.column}\" has ${d.count === 1 ? '1 value' : `${d.count} values`} of type ` +\n `${d.valueType} (${rowList(d.rows, d.count)}) that the default formatter cannot render`,\n impact: () => \"those cells render '' (and match no search)\",\n fix: (d) => [\n `give columns[${d.index}] a format: (value) => string, e.g. format: (v) => v.name`,\n `or render it yourself with cell: ({ value }) => … on columns[${d.index}]`,\n `or point the column at a primitive field: key: '${d.column}.<field>'`,\n ],\n },\n}\n\n/** Codes owned by the pipeline / column cache (§4.3, §8.3). */\nexport const pipelineDiagnostics = [\n defineDiagnostic(\n {\n code: 'DK_UNRENDERABLE_VALUE',\n level: 'warn',\n where: (d) => ({ kind: 'column', index: d.index, id: d.column }),\n },\n (process.env.NODE_ENV !== \"production\") && pipelineMessages.DK_UNRENDERABLE_VALUE,\n ),\n]\n"],"mappings":";AAAA,SAAkC,wBAAwB;AAC1D,OAAO;AAmBP,IAAM,UAAU,CAAC,MAAyB,UAAkB;AAC1D,QAAM,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AAC/C,SAAO,QAAQ,KAAK,SAAS,UAAU,IAAI,aAAQ,QAAQ,IAAI;AACjE;AAGO,IAAM,mBAAgE;AAAA,EAC3E,uBAAuB;AAAA,IACrB,SAAS,CAAC,MACR,WAAW,EAAE,MAAM,SAAS,EAAE,UAAU,IAAI,YAAY,GAAG,EAAE,KAAK,SAAS,YACxE,EAAE,SAAS,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;AAAA,IAC7C,QAAQ,MAAM;AAAA,IACd,KAAK,CAAC,MAAM;AAAA,MACV,gBAAgB,EAAE,KAAK;AAAA,MACvB,qEAAgE,EAAE,KAAK;AAAA,MACvE,mDAAmD,EAAE,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;AAGO,IAAM,sBAAsB;AAAA,EACjC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO,CAAC,OAAO,EAAE,MAAM,UAAU,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO;AAAA,IAChE;AAAA,IACC,QAAQ,IAAI,aAAa,gBAAiB,iBAAiB;AAAA,EAC9D;AACF;","names":[]}
|
|
@@ -20,31 +20,47 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/pipeline/column-cache.ts
|
|
21
21
|
var column_cache_exports = {};
|
|
22
22
|
__export(column_cache_exports, {
|
|
23
|
-
createColumnCache: () => createColumnCache
|
|
23
|
+
createColumnCache: () => createColumnCache,
|
|
24
|
+
nullishOf: () => nullishOf
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(column_cache_exports);
|
|
26
27
|
var import_slots = require("../catalog/slots.cjs");
|
|
27
28
|
var import_format = require("../column/format.cjs");
|
|
28
29
|
var import_get_value = require("../column/get-value.cjs");
|
|
29
30
|
var import_catalog = require("../diagnostics/catalog.cjs");
|
|
31
|
+
var import_process_guard = require("../diagnostics/process-guard.cjs");
|
|
30
32
|
var import_cell_batch = require("../intercept/cell-batch.cjs");
|
|
31
33
|
var import_context = require("../intercept/context.cjs");
|
|
32
34
|
var import_codes = require("./codes.cjs");
|
|
33
35
|
var import_indices = require("./indices.cjs");
|
|
36
|
+
var import_slice = require("./slice.cjs");
|
|
34
37
|
(0, import_catalog.keepDiagnostics)(import_codes.pipelineDiagnostics, import_slots.slotDiagnostics);
|
|
35
38
|
var NULL = 1;
|
|
36
39
|
var UNDEFINED = 2;
|
|
40
|
+
var nullishKinds = /* @__PURE__ */ new WeakMap();
|
|
41
|
+
function nullishOf(values) {
|
|
42
|
+
return nullishKinds.get(values);
|
|
43
|
+
}
|
|
37
44
|
function allStrings(values) {
|
|
38
45
|
for (let i = 0; i < values.length; i++) if (typeof values[i] !== "string") return false;
|
|
39
46
|
return true;
|
|
40
47
|
}
|
|
41
48
|
var typeName = (v) => Array.isArray(v) ? "array" : typeof v;
|
|
49
|
+
var STEP = 512;
|
|
50
|
+
var SHARED = 1024;
|
|
51
|
+
function share(cells) {
|
|
52
|
+
const seen = /* @__PURE__ */ new Map();
|
|
53
|
+
for (let r = 0; r < cells.length; r++) {
|
|
54
|
+
const s = cells[r];
|
|
55
|
+
const hit = seen.get(s);
|
|
56
|
+
if (hit !== void 0) cells[r] = hit;
|
|
57
|
+
else if (seen.size < SHARED) seen.set(s, s);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
42
60
|
function createColumnCache(host) {
|
|
43
61
|
const byData = /* @__PURE__ */ new WeakMap();
|
|
44
62
|
const pool = (0, import_context.createContextPool)();
|
|
45
63
|
const failures = new import_cell_batch.CellFailures();
|
|
46
|
-
const unrenderable = new import_cell_batch.CellFailures();
|
|
47
|
-
const badReturns = new import_cell_batch.CellFailures();
|
|
48
64
|
function entry(data, column) {
|
|
49
65
|
let cols = byData.get(data);
|
|
50
66
|
if (!cols) {
|
|
@@ -71,8 +87,6 @@ function createColumnCache(host) {
|
|
|
71
87
|
body();
|
|
72
88
|
} finally {
|
|
73
89
|
failures.reset();
|
|
74
|
-
unrenderable.reset();
|
|
75
|
-
badReturns.reset();
|
|
76
90
|
}
|
|
77
91
|
});
|
|
78
92
|
} finally {
|
|
@@ -128,6 +142,7 @@ function createColumnCache(host) {
|
|
|
128
142
|
}
|
|
129
143
|
}
|
|
130
144
|
e.nullish = kinds;
|
|
145
|
+
if (kinds) nullishKinds.set(out, kinds);
|
|
131
146
|
return out;
|
|
132
147
|
}
|
|
133
148
|
const flags = host.flags;
|
|
@@ -142,14 +157,15 @@ function createColumnCache(host) {
|
|
|
142
157
|
if (flags && flags.count > before) e.flaggedValues = true;
|
|
143
158
|
return e.values;
|
|
144
159
|
}
|
|
145
|
-
function
|
|
146
|
-
|
|
160
|
+
function* formatting(data, column, sliced) {
|
|
161
|
+
let e = entry(data, column);
|
|
147
162
|
if (e.formatted) {
|
|
148
163
|
if (flags && e.flaggedFormatted) flags.count++;
|
|
149
164
|
return e.formatted;
|
|
150
165
|
}
|
|
151
166
|
const before = flags?.count ?? 0;
|
|
152
167
|
const vals = values(data, column);
|
|
168
|
+
if (sliced) yield;
|
|
153
169
|
const kinds = e.nullish;
|
|
154
170
|
const valueAt = (r) => {
|
|
155
171
|
const k = kinds?.[r];
|
|
@@ -157,81 +173,83 @@ function createColumnCache(host) {
|
|
|
157
173
|
};
|
|
158
174
|
const n = data.length;
|
|
159
175
|
const rows = (0, import_indices.allRows)(data);
|
|
160
|
-
let out;
|
|
161
176
|
const format = column.format;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
badReturns.add(r, void 0);
|
|
179
|
-
}
|
|
180
|
-
return (0, import_format.defaultFormat)(s);
|
|
181
|
-
},
|
|
182
|
-
cells,
|
|
183
|
-
"",
|
|
184
|
-
failures
|
|
185
|
-
);
|
|
186
|
-
failures.report(host.emit, column.index, column.id, "format");
|
|
187
|
-
if (process.env.NODE_ENV !== "production" && badReturns.count > 0) {
|
|
188
|
-
host.emit("DK_CALLBACK_BAD_RETURN", {
|
|
189
|
-
slot: `columns[${column.index}].format`,
|
|
190
|
-
column: column.id,
|
|
191
|
-
expected: (0, import_slots.expectedReturn)(import_slots.formatSlot),
|
|
192
|
-
received: (0, import_slots.describeReturn)(firstBad),
|
|
193
|
-
count: badReturns.count,
|
|
194
|
-
rows: Array.from(badReturns.sample()),
|
|
195
|
-
fallback: import_slots.formatSlot.fallback
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
let cur = 0;
|
|
201
|
-
let firstType = "";
|
|
202
|
-
const onUnrenderable = column.hasCell ? void 0 : (v) => {
|
|
203
|
-
if (unrenderable.count === 0) firstType = typeName(v);
|
|
204
|
-
unrenderable.add(cur, void 0);
|
|
205
|
-
};
|
|
206
|
-
(0, import_cell_batch.runCells)(
|
|
207
|
-
rows,
|
|
208
|
-
(r) => {
|
|
209
|
-
cur = r;
|
|
210
|
-
return (0, import_format.defaultFormat)(valueAt(r), onUnrenderable);
|
|
211
|
-
},
|
|
212
|
-
cells,
|
|
213
|
-
"",
|
|
214
|
-
failures
|
|
215
|
-
);
|
|
216
|
-
failures.report(host.emit, column.index, column.id, "format");
|
|
217
|
-
if (unrenderable.count > 0) {
|
|
218
|
-
host.emit("DK_UNRENDERABLE_VALUE", {
|
|
219
|
-
column: column.id,
|
|
220
|
-
index: column.index,
|
|
221
|
-
count: unrenderable.count,
|
|
222
|
-
rows: Array.from(unrenderable.sample()),
|
|
223
|
-
valueType: firstType
|
|
224
|
-
});
|
|
177
|
+
const failed = new import_cell_batch.CellFailures();
|
|
178
|
+
const bad = process.env.NODE_ENV !== "production" ? new import_cell_batch.CellFailures() : void 0;
|
|
179
|
+
const unrendered = new import_cell_batch.CellFailures();
|
|
180
|
+
let firstBad;
|
|
181
|
+
let firstType = "";
|
|
182
|
+
let cur = 0;
|
|
183
|
+
const onUnrenderable = column.hasCell ? void 0 : (v) => {
|
|
184
|
+
if (unrendered.count === 0) firstType = typeName(v);
|
|
185
|
+
unrendered.add(cur, void 0);
|
|
186
|
+
};
|
|
187
|
+
const cell = format ? (r) => {
|
|
188
|
+
const s = format(valueAt(r));
|
|
189
|
+
if (typeof s === "string") return s;
|
|
190
|
+
if (process.env.NODE_ENV !== "production" && bad) {
|
|
191
|
+
if (bad.count === 0) firstBad = s;
|
|
192
|
+
bad.add(r, void 0);
|
|
225
193
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
194
|
+
return (0, import_format.defaultFormat)(s);
|
|
195
|
+
} : (r) => {
|
|
196
|
+
cur = r;
|
|
197
|
+
return (0, import_format.defaultFormat)(valueAt(r), onUnrenderable);
|
|
198
|
+
};
|
|
199
|
+
const strings = !format && !(vals instanceof Float64Array) && allStrings(vals);
|
|
200
|
+
let out = strings ? void 0 : new Array(n).fill("");
|
|
201
|
+
for (let from = 0; from < n; from += STEP) {
|
|
202
|
+
const part = sliced && !strings ? rows.subarray(from, from + STEP) : rows;
|
|
203
|
+
batch(column, "format", "format", part, () => {
|
|
204
|
+
if (strings) out = vals;
|
|
205
|
+
else (0, import_cell_batch.runCells)(part, cell, out, "", failed);
|
|
206
|
+
});
|
|
207
|
+
if (part === rows || from + STEP >= n) break;
|
|
208
|
+
yield;
|
|
209
|
+
}
|
|
210
|
+
out ??= new Array(n).fill("");
|
|
211
|
+
failed.report(host.emit, column.index, column.id, "format");
|
|
212
|
+
if (process.env.NODE_ENV !== "production" && bad && bad.count > 0) {
|
|
213
|
+
host.emit("DK_CALLBACK_BAD_RETURN", {
|
|
214
|
+
slot: `columns[${column.index}].format`,
|
|
215
|
+
column: column.id,
|
|
216
|
+
expected: (0, import_slots.expectedReturn)(import_slots.formatSlot),
|
|
217
|
+
received: (0, import_slots.describeReturn)(firstBad),
|
|
218
|
+
count: bad.count,
|
|
219
|
+
rows: Array.from(bad.sample()),
|
|
220
|
+
fallback: import_slots.formatSlot.fallback
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
if (unrendered.count > 0) {
|
|
224
|
+
host.emit("DK_UNRENDERABLE_VALUE", {
|
|
225
|
+
column: column.id,
|
|
226
|
+
index: column.index,
|
|
227
|
+
count: unrendered.count,
|
|
228
|
+
rows: Array.from(unrendered.sample()),
|
|
229
|
+
valueType: firstType
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (out !== vals) share(out);
|
|
233
|
+
e = entry(data, column);
|
|
234
|
+
if (!e.formatted) {
|
|
235
|
+
e.formatted = out;
|
|
236
|
+
if (flags && flags.count > before) e.flaggedFormatted = true;
|
|
237
|
+
}
|
|
229
238
|
return e.formatted;
|
|
230
239
|
}
|
|
231
|
-
|
|
240
|
+
function formatted(data, column) {
|
|
241
|
+
return (0, import_slice.runJob)(() => formatting(data, column, false));
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
values,
|
|
245
|
+
formatted,
|
|
246
|
+
formattedSliced: (data, column) => formatting(data, column, true),
|
|
247
|
+
batch
|
|
248
|
+
};
|
|
232
249
|
}
|
|
233
250
|
// Annotate the CommonJS export names for ESM import in node:
|
|
234
251
|
0 && (module.exports = {
|
|
235
|
-
createColumnCache
|
|
252
|
+
createColumnCache,
|
|
253
|
+
nullishOf
|
|
236
254
|
});
|
|
237
255
|
//# sourceMappingURL=column-cache.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/pipeline/column-cache.ts"],"sourcesContent":["import { describeReturn, expectedReturn, formatSlot, slotDiagnostics } from '../catalog/slots'\nimport { defaultFormat } from '../column/format'\nimport { getValue } from '../column/get-value'\nimport { keepDiagnostics } from '../diagnostics/catalog'\nimport type { Emit } from '../diagnostics/types'\nimport { CellFailures, type CellSlot, runCells } from '../intercept/cell-batch'\nimport { type ContextBase, createContextPool } from '../intercept/context'\nimport type { InterceptorRuntime } from '../intercept/runtime'\nimport { pipelineDiagnostics } from './codes'\nimport type { ColumnLike, ResolvedColumn } from './columns'\nimport { allRows } from './indices'\nimport type { ColumnValues } from './types'\n\nkeepDiagnostics(pipelineDiagnostics, slotDiagnostics)\n\nexport interface ColumnCacheHost {\n readonly runtime: InterceptorRuntime\n readonly emit: Emit\n base(): ContextBase\n /**\n * The §6.6 status rule's counter (pipeline/status-rule.ts): `emit` increments it for a diagnostic\n * the rule counts. An entry whose read incremented it is flagged, and every later read of that\n * entry increments it again (its cells still hold the fallback values).\n */\n readonly flags?: { count: number }\n}\n\nexport interface ColumnCache {\n /**\n * The values of `column` for every row of `data` (index = row index). An all-number column is a\n * `Float64Array` with `NaN` for `null` / `undefined`; any other column a plain array.\n */\n values(data: readonly unknown[], column: ResolvedColumn): ColumnValues\n /** `format` (or the default formatter) applied to {@link values}: what the user sees. */\n formatted(data: readonly unknown[], column: ResolvedColumn): readonly string[]\n /**\n * Runs `body` as one `column:batch` over `rows` (pooled ctx, `where` = `columns[i].<field>`):\n * interceptors see one dispatch per column, never one per cell. `body` loops over the cells\n * with an inline `try/catch` and reports its own failures.\n */\n batch(\n column: ResolvedColumn,\n slot: CellSlot,\n field: string,\n rows: Uint32Array,\n body: () => void,\n ): void\n}\n\ninterface Entry {\n values?: ColumnValues\n /** Numeric columns: 1 = `null`, 2 = `undefined` per row. Absent when there are none. */\n nullish?: Uint8Array | undefined\n formatted?: readonly string[]\n /** Reading `values` / `formatted` reported a diagnostic the status rule counts. */\n flaggedValues?: boolean\n flaggedFormatted?: boolean\n}\n\nconst NULL = 1\nconst UNDEFINED = 2\n\nfunction allStrings(values: readonly unknown[]): boolean {\n for (let i = 0; i < values.length; i++) if (typeof values[i] !== 'string') return false\n return true\n}\n\nconst typeName = (v: unknown) => (Array.isArray(v) ? 'array' : typeof v)\n\n/**\n * The lazy column cache (§9.1): a column is read only when a step asks for it, once per data\n * reference, in one `column:batch` per column (never per cell, §3.4). Entries live in a `WeakMap`\n * keyed by the data reference, then by the column definition, so new data or a changed column\n * releases them.\n */\nexport function createColumnCache(host: ColumnCacheHost): ColumnCache {\n const byData = new WeakMap<readonly unknown[], WeakMap<ColumnLike, Entry>>()\n const pool = createContextPool()\n const failures = new CellFailures()\n const unrenderable = new CellFailures()\n /** Dev: `format` returns that broke the slot contract (`first` = the first bad value). */\n const badReturns = new CellFailures()\n\n function entry(data: readonly unknown[], column: ResolvedColumn): Entry {\n let cols = byData.get(data)\n if (!cols) {\n cols = new WeakMap()\n byData.set(data, cols)\n }\n let e = cols.get(column.def)\n if (!e) {\n e = {}\n cols.set(column.def, e)\n }\n return e\n }\n\n /** One `column:batch` (pooled ctx); `where` = `columns[i].<field>`, never row data. */\n function batch(\n column: ResolvedColumn,\n slot: CellSlot,\n field: string,\n rows: Uint32Array,\n body: () => void,\n ) {\n const ctx = pool.acquire(\n 'column:batch',\n { column: column.id, slot, rows },\n `columns[${column.index}].${field}`,\n host.base(),\n )\n try {\n void host.runtime.run('column:batch', ctx, (): undefined => {\n try {\n body()\n } finally {\n failures.reset()\n unrenderable.reset()\n badReturns.reset()\n }\n })\n } finally {\n pool.release(ctx)\n }\n }\n\n function readValues(data: readonly unknown[], column: ResolvedColumn, e: Entry): ColumnValues {\n const n = data.length\n const rows = allRows(data)\n const out: unknown[] = new Array(n).fill(undefined)\n const field = column.path ? 'key' : 'accessor'\n batch(column, 'accessor', field, rows, () => {\n const path = column.path\n const accessor = column.accessor\n if (path) {\n let cur = 0\n const onError = (error: unknown) => failures.add(cur, error)\n runCells(\n rows,\n (r) => {\n cur = r\n return getValue(data[r], path, onError)\n },\n out,\n undefined,\n failures,\n )\n } else if (accessor) {\n runCells(rows, (r) => accessor(data[r]), out, undefined, failures)\n }\n failures.report(host.emit, column.index, column.id, 'accessor', undefined, field)\n })\n return toNumeric(out, e) ?? out\n }\n\n /** A `Float64Array` when every non-nullish value is a number (and there is one); else nothing. */\n function toNumeric(values: unknown[], e: Entry): Float64Array | undefined {\n let numbers = 0\n let nullish = 0\n for (let i = 0; i < values.length; i++) {\n const v = values[i]\n if (typeof v === 'number') numbers++\n else if (v === null || v === undefined) nullish++\n else return undefined\n }\n if (numbers === 0) return undefined\n const out = new Float64Array(values.length)\n const kinds = nullish > 0 ? new Uint8Array(values.length) : undefined\n for (let i = 0; i < values.length; i++) {\n const v = values[i]\n if (typeof v === 'number') out[i] = v\n else {\n out[i] = Number.NaN\n if (kinds) kinds[i] = v === null ? NULL : UNDEFINED\n }\n }\n e.nullish = kinds\n return out\n }\n\n const flags = host.flags\n\n function values(data: readonly unknown[], column: ResolvedColumn): ColumnValues {\n const e = entry(data, column)\n if (e.values) {\n if (flags && e.flaggedValues) flags.count++\n return e.values\n }\n const before = flags?.count ?? 0\n e.values = readValues(data, column, e)\n if (flags && flags.count > before) e.flaggedValues = true\n return e.values\n }\n\n function formatted(data: readonly unknown[], column: ResolvedColumn): readonly string[] {\n const e = entry(data, column)\n if (e.formatted) {\n if (flags && e.flaggedFormatted) flags.count++\n return e.formatted\n }\n const before = flags?.count ?? 0\n const vals = values(data, column)\n const kinds = e.nullish\n // The raw value: nullish numbers read back as null / undefined, not NaN.\n const valueAt = (r: number): unknown => {\n const k = kinds?.[r]\n return k ? (k === NULL ? null : undefined) : vals[r]\n }\n const n = data.length\n const rows = allRows(data)\n let out: string[] | undefined\n const format = column.format\n batch(column, 'format', 'format', rows, () => {\n // Values that are all strings already format to themselves: no copy (§9.3 memory).\n if (!format && !(vals instanceof Float64Array) && allStrings(vals)) {\n out = vals as string[]\n return\n }\n const cells: string[] = new Array(n).fill('')\n out = cells\n if (format) {\n let firstBad: unknown\n runCells(\n rows,\n (r) => {\n const s = format(valueAt(r))\n if (typeof s === 'string') return s\n // Slot contract (dev): counted only on this non-string path; coerced either way.\n if ((process.env.NODE_ENV !== \"production\")) {\n if (badReturns.count === 0) firstBad = s\n badReturns.add(r, undefined)\n }\n return defaultFormat(s)\n },\n cells,\n '',\n failures,\n )\n failures.report(host.emit, column.index, column.id, 'format')\n if ((process.env.NODE_ENV !== \"production\") && badReturns.count > 0) {\n host.emit('DK_CALLBACK_BAD_RETURN', {\n slot: `columns[${column.index}].format`,\n column: column.id,\n expected: expectedReturn(formatSlot),\n received: describeReturn(firstBad),\n count: badReturns.count,\n rows: Array.from(badReturns.sample()),\n fallback: formatSlot.fallback,\n })\n }\n return\n }\n let cur = 0\n let firstType = ''\n // A column with `cell` renders itself: its formatted value only feeds search.\n const onUnrenderable = column.hasCell\n ? undefined\n : (v: unknown) => {\n if (unrenderable.count === 0) firstType = typeName(v)\n unrenderable.add(cur, undefined)\n }\n runCells(\n rows,\n (r) => {\n cur = r\n return defaultFormat(valueAt(r), onUnrenderable)\n },\n cells,\n '',\n failures,\n )\n failures.report(host.emit, column.index, column.id, 'format')\n if (unrenderable.count > 0) {\n host.emit('DK_UNRENDERABLE_VALUE', {\n column: column.id,\n index: column.index,\n count: unrenderable.count,\n rows: Array.from(unrenderable.sample()),\n valueType: firstType,\n })\n }\n })\n // An interceptor skipped the batch: every cell is the slot fallback.\n e.formatted = out ?? new Array<string>(n).fill('')\n if (flags && flags.count > before) e.flaggedFormatted = true\n return e.formatted\n }\n\n return { values, formatted, batch }\n}\n"],"mappings":"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","names":["values"]}
|
|
1
|
+
{"version":3,"sources":["../../src/pipeline/column-cache.ts"],"sourcesContent":["import { describeReturn, expectedReturn, formatSlot, slotDiagnostics } from '../catalog/slots'\nimport { defaultFormat } from '../column/format'\nimport { getValue } from '../column/get-value'\nimport { keepDiagnostics } from '../diagnostics/catalog'\nimport '../diagnostics/process-guard'\nimport type { Emit } from '../diagnostics/types'\nimport { CellFailures, type CellSlot, runCells } from '../intercept/cell-batch'\nimport { type ContextBase, createContextPool } from '../intercept/context'\nimport type { InterceptorRuntime } from '../intercept/runtime'\nimport { pipelineDiagnostics } from './codes'\nimport type { ColumnLike, ResolvedColumn } from './columns'\nimport { allRows } from './indices'\nimport { runJob } from './slice'\nimport type { ColumnValues } from './types'\n\nkeepDiagnostics(pipelineDiagnostics, slotDiagnostics)\n\nexport interface ColumnCacheHost {\n readonly runtime: InterceptorRuntime\n readonly emit: Emit\n base(): ContextBase\n /**\n * The §6.6 status rule's counter (pipeline/status-rule.ts): `emit` increments it for a diagnostic\n * the rule counts. An entry whose read incremented it is flagged, and every later read of that\n * entry increments it again (its cells still hold the fallback values).\n */\n readonly flags?: { count: number }\n}\n\n/**\n * Internal member of the pipeline's run context (not on the public `RowModelContext`): a column's\n * formatted values as a time-sliced job (search, #40); `undefined` for an unknown column.\n */\nexport interface SlicedFormatting {\n readonly formattedSliced?: (\n id: string,\n ) => Generator<undefined, readonly string[] | undefined, undefined>\n}\n\nexport interface ColumnCache {\n /**\n * The values of `column` for every row of `data` (index = row index). An all-number column is a\n * `Float64Array` with `NaN` for `null` / `undefined`; any other column a plain array.\n */\n values(data: readonly unknown[], column: ResolvedColumn): ColumnValues\n /** `format` (or the default formatter) applied to {@link values}: what the user sees. */\n formatted(data: readonly unknown[], column: ResolvedColumn): readonly string[]\n /**\n * {@link formatted} as a time-sliced job (§9.1, #40): the cells are formatted in batches of a few\n * milliseconds with a `yield` between them (one `column:batch` per batch, never per cell).\n */\n formattedSliced(\n data: readonly unknown[],\n column: ResolvedColumn,\n ): Generator<undefined, readonly string[], undefined>\n /**\n * Runs `body` as one `column:batch` over `rows` (pooled ctx, `where` = `columns[i].<field>`):\n * interceptors see one dispatch per column, never one per cell. `body` loops over the cells\n * with an inline `try/catch` and reports its own failures.\n */\n batch(\n column: ResolvedColumn,\n slot: CellSlot,\n field: string,\n rows: Uint32Array,\n body: () => void,\n ): void\n}\n\ninterface Entry {\n values?: ColumnValues\n /** Numeric columns: 1 = `null`, 2 = `undefined` per row. Absent when there are none. */\n nullish?: Uint8Array | undefined\n formatted?: readonly string[]\n /** Reading `values` / `formatted` reported a diagnostic the status rule counts. */\n flaggedValues?: boolean\n flaggedFormatted?: boolean\n}\n\nconst NULL = 1\nconst UNDEFINED = 2\n\n/** The nullish kinds of each cached numeric column that has any (see {@link nullishOf}). */\nconst nullishKinds = new WeakMap<Float64Array, Uint8Array>()\n\n/**\n * Which rows of a cached all-number column (`values` from the column cache) hold `null` /\n * `undefined` (non-zero) rather than a real `NaN`: both are stored as `NaN`. `undefined` when no\n * row does. Lets search format such a column on the fly (`''` / `'NaN'`) instead of caching a\n * string per row (#27).\n */\nexport function nullishOf(values: Float64Array): Uint8Array | undefined {\n return nullishKinds.get(values)\n}\n\nfunction allStrings(values: readonly unknown[]): boolean {\n for (let i = 0; i < values.length; i++) if (typeof values[i] !== 'string') return false\n return true\n}\n\nconst typeName = (v: unknown) => (Array.isArray(v) ? 'array' : typeof v)\n\n/** Rows per batch of a sliced format (#40): small, so the slicer's clock check comes often. */\nconst STEP = 512\n\n/** Distinct strings {@link share} remembers per column: enough for categories, tags, flags. */\nconst SHARED = 1024\n\n/**\n * Repeated formatted strings of a column share one copy (§9.3 memory, #27): each formatted cell is\n * a fresh string, so a column of tags or categories would keep one per row. Only the first\n * {@link SHARED} distinct strings are remembered; once per column, after formatting.\n */\nfunction share(cells: string[]) {\n const seen = new Map<string, string>()\n for (let r = 0; r < cells.length; r++) {\n const s = cells[r] as string\n const hit = seen.get(s)\n if (hit !== undefined) cells[r] = hit\n else if (seen.size < SHARED) seen.set(s, s)\n }\n}\n\n/**\n * The lazy column cache (§9.1): a column is read only when a step asks for it, once per data\n * reference, in one `column:batch` per column (never per cell, §3.4). Entries live in a `WeakMap`\n * keyed by the data reference, then by the column definition, so new data or a changed column\n * releases them.\n */\nexport function createColumnCache(host: ColumnCacheHost): ColumnCache {\n const byData = new WeakMap<readonly unknown[], WeakMap<ColumnLike, Entry>>()\n const pool = createContextPool()\n const failures = new CellFailures()\n\n function entry(data: readonly unknown[], column: ResolvedColumn): Entry {\n let cols = byData.get(data)\n if (!cols) {\n cols = new WeakMap()\n byData.set(data, cols)\n }\n let e = cols.get(column.def)\n if (!e) {\n e = {}\n cols.set(column.def, e)\n }\n return e\n }\n\n /** One `column:batch` (pooled ctx); `where` = `columns[i].<field>`, never row data. */\n function batch(\n column: ResolvedColumn,\n slot: CellSlot,\n field: string,\n rows: Uint32Array,\n body: () => void,\n ) {\n const ctx = pool.acquire(\n 'column:batch',\n { column: column.id, slot, rows },\n `columns[${column.index}].${field}`,\n host.base(),\n )\n try {\n void host.runtime.run('column:batch', ctx, (): undefined => {\n try {\n body()\n } finally {\n failures.reset()\n }\n })\n } finally {\n pool.release(ctx)\n }\n }\n\n function readValues(data: readonly unknown[], column: ResolvedColumn, e: Entry): ColumnValues {\n const n = data.length\n const rows = allRows(data)\n const out: unknown[] = new Array(n).fill(undefined)\n const field = column.path ? 'key' : 'accessor'\n batch(column, 'accessor', field, rows, () => {\n const path = column.path\n const accessor = column.accessor\n if (path) {\n let cur = 0\n const onError = (error: unknown) => failures.add(cur, error)\n runCells(\n rows,\n (r) => {\n cur = r\n return getValue(data[r], path, onError)\n },\n out,\n undefined,\n failures,\n )\n } else if (accessor) {\n runCells(rows, (r) => accessor(data[r]), out, undefined, failures)\n }\n failures.report(host.emit, column.index, column.id, 'accessor', undefined, field)\n })\n return toNumeric(out, e) ?? out\n }\n\n /** A `Float64Array` when every non-nullish value is a number (and there is one); else nothing. */\n function toNumeric(values: unknown[], e: Entry): Float64Array | undefined {\n let numbers = 0\n let nullish = 0\n for (let i = 0; i < values.length; i++) {\n const v = values[i]\n if (typeof v === 'number') numbers++\n else if (v === null || v === undefined) nullish++\n else return undefined\n }\n if (numbers === 0) return undefined\n const out = new Float64Array(values.length)\n const kinds = nullish > 0 ? new Uint8Array(values.length) : undefined\n for (let i = 0; i < values.length; i++) {\n const v = values[i]\n if (typeof v === 'number') out[i] = v\n else {\n out[i] = Number.NaN\n if (kinds) kinds[i] = v === null ? NULL : UNDEFINED\n }\n }\n e.nullish = kinds\n if (kinds) nullishKinds.set(out, kinds)\n return out\n }\n\n const flags = host.flags\n\n function values(data: readonly unknown[], column: ResolvedColumn): ColumnValues {\n const e = entry(data, column)\n if (e.values) {\n if (flags && e.flaggedValues) flags.count++\n return e.values\n }\n const before = flags?.count ?? 0\n e.values = readValues(data, column, e)\n if (flags && flags.count > before) e.flaggedValues = true\n return e.values\n }\n\n /**\n * Formats `column` once per data reference, in one `column:batch`; `sliced` (#40): in batches of\n * {@link STEP} rows with a `yield` between them, so the slicer can end the task on time (a slow\n * formatter, e.g. dates, is never one long task). Failures and slot-contract breaks are counted\n * over the whole column and reported once.\n */\n function* formatting(\n data: readonly unknown[],\n column: ResolvedColumn,\n sliced: boolean,\n ): Generator<undefined, readonly string[], undefined> {\n let e = entry(data, column)\n if (e.formatted) {\n if (flags && e.flaggedFormatted) flags.count++\n return e.formatted\n }\n const before = flags?.count ?? 0\n const vals = values(data, column)\n if (sliced) yield // reading the values is a task of its own\n const kinds = e.nullish\n // The raw value: nullish numbers read back as null / undefined, not NaN.\n const valueAt = (r: number): unknown => {\n const k = kinds?.[r]\n return k ? (k === NULL ? null : undefined) : vals[r]\n }\n const n = data.length\n const rows = allRows(data)\n const format = column.format\n // Job-local counts: a sliced column spans several batches.\n const failed = new CellFailures()\n const bad = (process.env.NODE_ENV !== \"production\") ? new CellFailures() : undefined\n const unrendered = new CellFailures()\n let firstBad: unknown\n let firstType = ''\n let cur = 0\n // A column with `cell` renders itself: its formatted value only feeds search.\n const onUnrenderable = column.hasCell\n ? undefined\n : (v: unknown) => {\n if (unrendered.count === 0) firstType = typeName(v)\n unrendered.add(cur, undefined)\n }\n const cell = format\n ? (r: number) => {\n const s = format(valueAt(r))\n if (typeof s === 'string') return s\n // Slot contract (dev): counted only on this non-string path; coerced either way.\n if ((process.env.NODE_ENV !== \"production\") && bad) {\n if (bad.count === 0) firstBad = s\n bad.add(r, undefined)\n }\n return defaultFormat(s)\n }\n : (r: number) => {\n cur = r\n return defaultFormat(valueAt(r), onUnrenderable)\n }\n // Values that are all strings already format to themselves: no copy (§9.3 memory).\n const strings = !format && !(vals instanceof Float64Array) && allStrings(vals)\n let out: string[] | undefined = strings ? undefined : new Array(n).fill('')\n for (let from = 0; from < n; from += STEP) {\n const part = sliced && !strings ? rows.subarray(from, from + STEP) : rows\n // An interceptor may skip a batch: its cells keep the slot fallback ('').\n batch(column, 'format', 'format', part, () => {\n if (strings) out = vals as string[]\n else runCells(part, cell, out as string[], '', failed)\n })\n if (part === rows || from + STEP >= n) break\n yield\n }\n out ??= new Array<string>(n).fill('')\n failed.report(host.emit, column.index, column.id, 'format')\n if ((process.env.NODE_ENV !== \"production\") && bad && bad.count > 0) {\n host.emit('DK_CALLBACK_BAD_RETURN', {\n slot: `columns[${column.index}].format`,\n column: column.id,\n expected: expectedReturn(formatSlot),\n received: describeReturn(firstBad),\n count: bad.count,\n rows: Array.from(bad.sample()),\n fallback: formatSlot.fallback,\n })\n }\n if (unrendered.count > 0) {\n host.emit('DK_UNRENDERABLE_VALUE', {\n column: column.id,\n index: column.index,\n count: unrendered.count,\n rows: Array.from(unrendered.sample()),\n valueType: firstType,\n })\n }\n if (out !== vals) share(out)\n // A synchronous read may have cached the column while a sliced job ran.\n e = entry(data, column)\n if (!e.formatted) {\n e.formatted = out\n if (flags && flags.count > before) e.flaggedFormatted = true\n }\n return e.formatted\n }\n\n function formatted(data: readonly unknown[], column: ResolvedColumn): readonly string[] {\n return runJob(() => formatting(data, column, false))\n }\n\n return {\n values,\n formatted,\n formattedSliced: (data, column) => formatting(data, column, true),\n batch,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4E;AAC5E,oBAA8B;AAC9B,uBAAyB;AACzB,qBAAgC;AAChC,2BAAO;AAEP,wBAAsD;AACtD,qBAAoD;AAEpD,mBAAoC;AAEpC,qBAAwB;AACxB,mBAAuB;AAAA,IAGvB,gCAAgB,kCAAqB,4BAAe;AAgEpD,IAAM,OAAO;AACb,IAAM,YAAY;AAGlB,IAAM,eAAe,oBAAI,QAAkC;AAQpD,SAAS,UAAU,QAA8C;AACtE,SAAO,aAAa,IAAI,MAAM;AAChC;AAEA,SAAS,WAAW,QAAqC;AACvD,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,KAAI,OAAO,OAAO,CAAC,MAAM,SAAU,QAAO;AAClF,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,MAAgB,MAAM,QAAQ,CAAC,IAAI,UAAU,OAAO;AAGtE,IAAM,OAAO;AAGb,IAAM,SAAS;AAOf,SAAS,MAAM,OAAiB;AAC9B,QAAM,OAAO,oBAAI,IAAoB;AACrC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,MAAM,CAAC;AACjB,UAAM,MAAM,KAAK,IAAI,CAAC;AACtB,QAAI,QAAQ,OAAW,OAAM,CAAC,IAAI;AAAA,aACzB,KAAK,OAAO,OAAQ,MAAK,IAAI,GAAG,CAAC;AAAA,EAC5C;AACF;AAQO,SAAS,kBAAkB,MAAoC;AACpE,QAAM,SAAS,oBAAI,QAAwD;AAC3E,QAAM,WAAO,kCAAkB;AAC/B,QAAM,WAAW,IAAI,+BAAa;AAElC,WAAS,MAAM,MAA0B,QAA+B;AACtE,QAAI,OAAO,OAAO,IAAI,IAAI;AAC1B,QAAI,CAAC,MAAM;AACT,aAAO,oBAAI,QAAQ;AACnB,aAAO,IAAI,MAAM,IAAI;AAAA,IACvB;AACA,QAAI,IAAI,KAAK,IAAI,OAAO,GAAG;AAC3B,QAAI,CAAC,GAAG;AACN,UAAI,CAAC;AACL,WAAK,IAAI,OAAO,KAAK,CAAC;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAGA,WAAS,MACP,QACA,MACA,OACA,MACA,MACA;AACA,UAAM,MAAM,KAAK;AAAA,MACf;AAAA,MACA,EAAE,QAAQ,OAAO,IAAI,MAAM,KAAK;AAAA,MAChC,WAAW,OAAO,KAAK,KAAK,KAAK;AAAA,MACjC,KAAK,KAAK;AAAA,IACZ;AACA,QAAI;AACF,WAAK,KAAK,QAAQ,IAAI,gBAAgB,KAAK,MAAiB;AAC1D,YAAI;AACF,eAAK;AAAA,QACP,UAAE;AACA,mBAAS,MAAM;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH,UAAE;AACA,WAAK,QAAQ,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,WAAS,WAAW,MAA0B,QAAwB,GAAwB;AAC5F,UAAM,IAAI,KAAK;AACf,UAAM,WAAO,wBAAQ,IAAI;AACzB,UAAM,MAAiB,IAAI,MAAM,CAAC,EAAE,KAAK,MAAS;AAClD,UAAM,QAAQ,OAAO,OAAO,QAAQ;AACpC,UAAM,QAAQ,YAAY,OAAO,MAAM,MAAM;AAC3C,YAAM,OAAO,OAAO;AACpB,YAAM,WAAW,OAAO;AACxB,UAAI,MAAM;AACR,YAAI,MAAM;AACV,cAAM,UAAU,CAAC,UAAmB,SAAS,IAAI,KAAK,KAAK;AAC3D;AAAA,UACE;AAAA,UACA,CAAC,MAAM;AACL,kBAAM;AACN,uBAAO,2BAAS,KAAK,CAAC,GAAG,MAAM,OAAO;AAAA,UACxC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,WAAW,UAAU;AACnB,wCAAS,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC,GAAG,KAAK,QAAW,QAAQ;AAAA,MACnE;AACA,eAAS,OAAO,KAAK,MAAM,OAAO,OAAO,OAAO,IAAI,YAAY,QAAW,KAAK;AAAA,IAClF,CAAC;AACD,WAAO,UAAU,KAAK,CAAC,KAAK;AAAA,EAC9B;AAGA,WAAS,UAAUA,SAAmB,GAAoC;AACxE,QAAI,UAAU;AACd,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AACtC,YAAM,IAAIA,QAAO,CAAC;AAClB,UAAI,OAAO,MAAM,SAAU;AAAA,eAClB,MAAM,QAAQ,MAAM,OAAW;AAAA,UACnC,QAAO;AAAA,IACd;AACA,QAAI,YAAY,EAAG,QAAO;AAC1B,UAAM,MAAM,IAAI,aAAaA,QAAO,MAAM;AAC1C,UAAM,QAAQ,UAAU,IAAI,IAAI,WAAWA,QAAO,MAAM,IAAI;AAC5D,aAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AACtC,YAAM,IAAIA,QAAO,CAAC;AAClB,UAAI,OAAO,MAAM,SAAU,KAAI,CAAC,IAAI;AAAA,WAC/B;AACH,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,MAAO,OAAM,CAAC,IAAI,MAAM,OAAO,OAAO;AAAA,MAC5C;AAAA,IACF;AACA,MAAE,UAAU;AACZ,QAAI,MAAO,cAAa,IAAI,KAAK,KAAK;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,KAAK;AAEnB,WAAS,OAAO,MAA0B,QAAsC;AAC9E,UAAM,IAAI,MAAM,MAAM,MAAM;AAC5B,QAAI,EAAE,QAAQ;AACZ,UAAI,SAAS,EAAE,cAAe,OAAM;AACpC,aAAO,EAAE;AAAA,IACX;AACA,UAAM,SAAS,OAAO,SAAS;AAC/B,MAAE,SAAS,WAAW,MAAM,QAAQ,CAAC;AACrC,QAAI,SAAS,MAAM,QAAQ,OAAQ,GAAE,gBAAgB;AACrD,WAAO,EAAE;AAAA,EACX;AAQA,YAAU,WACR,MACA,QACA,QACoD;AACpD,QAAI,IAAI,MAAM,MAAM,MAAM;AAC1B,QAAI,EAAE,WAAW;AACf,UAAI,SAAS,EAAE,iBAAkB,OAAM;AACvC,aAAO,EAAE;AAAA,IACX;AACA,UAAM,SAAS,OAAO,SAAS;AAC/B,UAAM,OAAO,OAAO,MAAM,MAAM;AAChC,QAAI,OAAQ;AACZ,UAAM,QAAQ,EAAE;AAEhB,UAAM,UAAU,CAAC,MAAuB;AACtC,YAAM,IAAI,QAAQ,CAAC;AACnB,aAAO,IAAK,MAAM,OAAO,OAAO,SAAa,KAAK,CAAC;AAAA,IACrD;AACA,UAAM,IAAI,KAAK;AACf,UAAM,WAAO,wBAAQ,IAAI;AACzB,UAAM,SAAS,OAAO;AAEtB,UAAM,SAAS,IAAI,+BAAa;AAChC,UAAM,MAAO,QAAQ,IAAI,aAAa,eAAgB,IAAI,+BAAa,IAAI;AAC3E,UAAM,aAAa,IAAI,+BAAa;AACpC,QAAI;AACJ,QAAI,YAAY;AAChB,QAAI,MAAM;AAEV,UAAM,iBAAiB,OAAO,UAC1B,SACA,CAAC,MAAe;AACd,UAAI,WAAW,UAAU,EAAG,aAAY,SAAS,CAAC;AAClD,iBAAW,IAAI,KAAK,MAAS;AAAA,IAC/B;AACJ,UAAM,OAAO,SACT,CAAC,MAAc;AACb,YAAM,IAAI,OAAO,QAAQ,CAAC,CAAC;AAC3B,UAAI,OAAO,MAAM,SAAU,QAAO;AAElC,UAAK,QAAQ,IAAI,aAAa,gBAAiB,KAAK;AAClD,YAAI,IAAI,UAAU,EAAG,YAAW;AAChC,YAAI,IAAI,GAAG,MAAS;AAAA,MACtB;AACA,iBAAO,6BAAc,CAAC;AAAA,IACxB,IACA,CAAC,MAAc;AACb,YAAM;AACN,iBAAO,6BAAc,QAAQ,CAAC,GAAG,cAAc;AAAA,IACjD;AAEJ,UAAM,UAAU,CAAC,UAAU,EAAE,gBAAgB,iBAAiB,WAAW,IAAI;AAC7E,QAAI,MAA4B,UAAU,SAAY,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAC1E,aAAS,OAAO,GAAG,OAAO,GAAG,QAAQ,MAAM;AACzC,YAAM,OAAO,UAAU,CAAC,UAAU,KAAK,SAAS,MAAM,OAAO,IAAI,IAAI;AAErE,YAAM,QAAQ,UAAU,UAAU,MAAM,MAAM;AAC5C,YAAI,QAAS,OAAM;AAAA,YACd,iCAAS,MAAM,MAAM,KAAiB,IAAI,MAAM;AAAA,MACvD,CAAC;AACD,UAAI,SAAS,QAAQ,OAAO,QAAQ,EAAG;AACvC;AAAA,IACF;AACA,YAAQ,IAAI,MAAc,CAAC,EAAE,KAAK,EAAE;AACpC,WAAO,OAAO,KAAK,MAAM,OAAO,OAAO,OAAO,IAAI,QAAQ;AAC1D,QAAK,QAAQ,IAAI,aAAa,gBAAiB,OAAO,IAAI,QAAQ,GAAG;AACnE,WAAK,KAAK,0BAA0B;AAAA,QAClC,MAAM,WAAW,OAAO,KAAK;AAAA,QAC7B,QAAQ,OAAO;AAAA,QACf,cAAU,6BAAe,uBAAU;AAAA,QACnC,cAAU,6BAAe,QAAQ;AAAA,QACjC,OAAO,IAAI;AAAA,QACX,MAAM,MAAM,KAAK,IAAI,OAAO,CAAC;AAAA,QAC7B,UAAU,wBAAW;AAAA,MACvB,CAAC;AAAA,IACH;AACA,QAAI,WAAW,QAAQ,GAAG;AACxB,WAAK,KAAK,yBAAyB;AAAA,QACjC,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,OAAO,WAAW;AAAA,QAClB,MAAM,MAAM,KAAK,WAAW,OAAO,CAAC;AAAA,QACpC,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,KAAM,OAAM,GAAG;AAE3B,QAAI,MAAM,MAAM,MAAM;AACtB,QAAI,CAAC,EAAE,WAAW;AAChB,QAAE,YAAY;AACd,UAAI,SAAS,MAAM,QAAQ,OAAQ,GAAE,mBAAmB;AAAA,IAC1D;AACA,WAAO,EAAE;AAAA,EACX;AAEA,WAAS,UAAU,MAA0B,QAA2C;AACtF,eAAO,qBAAO,MAAM,WAAW,MAAM,QAAQ,KAAK,CAAC;AAAA,EACrD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,CAAC,MAAM,WAAW,WAAW,MAAM,QAAQ,IAAI;AAAA,IAChE;AAAA,EACF;AACF;","names":["values"]}
|