{"_id":"@diarworld/powerbi-tom-parser","name":"@diarworld/powerbi-tom-parser","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@diarworld/powerbi-tom-parser","version":"1.0.0","description":"Node.js library to extract Power BI / Analysis Services Tabular Model metadata from .bim files","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["powerbi","tabular","analysis-services","bim","parser","tom"],"author":{"name":"Dmitry Ibragimov"},"license":"MIT","devDependencies":{"@types/jest":"^30.0.0","@types/node":"^20.10.0","jest":"^29.7.0","ts-jest":"^29.1.1","typescript":"^5.3.0"},"directories":{"test":"tests"},"dependencies":{"ansi-escapes":"^4.3.2","ansi-regex":"^5.0.1","ansi-styles":"^4.3.0","anymatch":"^3.1.3","argparse":"^1.0.10","babel-jest":"^29.7.0","babel-plugin-istanbul":"^6.1.1","babel-plugin-jest-hoist":"^29.6.3","babel-preset-current-node-syntax":"^1.2.0","babel-preset-jest":"^29.6.3","balanced-match":"^1.0.2","baseline-browser-mapping":"^2.10.0","brace-expansion":"^1.1.12","braces":"^3.0.3","browserslist":"^4.28.1","bs-logger":"^0.2.6","bser":"^2.1.1","buffer-from":"^1.1.2","callsites":"^3.1.0","camelcase":"^5.3.1","caniuse-lite":"^1.0.30001774","chalk":"^4.1.2","char-regex":"^1.0.2","ci-info":"^3.9.0","cjs-module-lexer":"^1.4.3","cliui":"^8.0.1","co":"^4.6.0","collect-v8-coverage":"^1.0.3","color-convert":"^2.0.1","color-name":"^1.1.4","concat-map":"^0.0.1","convert-source-map":"^2.0.0","create-jest":"^29.7.0","cross-spawn":"^7.0.6","debug":"^4.4.3","dedent":"^1.7.1","deepmerge":"^4.3.1","detect-newline":"^3.1.0","diff-sequences":"^29.6.3","electron-to-chromium":"^1.5.302","emittery":"^0.13.1","emoji-regex":"^8.0.0","error-ex":"^1.3.4","escalade":"^3.2.0","escape-string-regexp":"^2.0.0","esprima":"^4.0.1","execa":"^5.1.1","exit":"^0.1.2","expect":"^29.7.0","fast-json-stable-stringify":"^2.1.0","fb-watchman":"^2.0.2","fill-range":"^7.1.1","find-up":"^4.1.0","fs.realpath":"^1.0.0","function-bind":"^1.1.2","gensync":"^1.0.0-beta.2","get-caller-file":"^2.0.5","get-package-type":"^0.1.0","get-stream":"^6.0.1","glob":"^7.2.3","graceful-fs":"^4.2.11","handlebars":"^4.7.8","has-flag":"^4.0.0","hasown":"^2.0.2","html-escaper":"^2.0.2","human-signals":"^2.1.0","import-local":"^3.2.0","imurmurhash":"^0.1.4","inflight":"^1.0.6","inherits":"^2.0.4","is-arrayish":"^0.2.1","is-core-module":"^2.16.1","is-fullwidth-code-point":"^3.0.0","is-generator-fn":"^2.1.0","is-number":"^7.0.0","is-stream":"^2.0.1","isexe":"^2.0.0","istanbul-lib-coverage":"^3.2.2","istanbul-lib-instrument":"^6.0.3","istanbul-lib-report":"^3.0.1","istanbul-lib-source-maps":"^4.0.1","istanbul-reports":"^3.2.0","jest-changed-files":"^29.7.0","jest-circus":"^29.7.0","jest-cli":"^29.7.0","jest-config":"^29.7.0","jest-diff":"^29.7.0","jest-docblock":"^29.7.0","jest-each":"^29.7.0","jest-environment-node":"^29.7.0","jest-get-type":"^29.6.3","jest-haste-map":"^29.7.0","jest-leak-detector":"^29.7.0","jest-matcher-utils":"^29.7.0","jest-message-util":"^29.7.0","jest-mock":"^29.7.0","jest-pnp-resolver":"^1.2.3","jest-regex-util":"^29.6.3","jest-resolve":"^29.7.0","jest-resolve-dependencies":"^29.7.0","jest-runner":"^29.7.0","jest-runtime":"^29.7.0","jest-snapshot":"^29.7.0","jest-util":"^29.7.0","jest-validate":"^29.7.0","jest-watcher":"^29.7.0","jest-worker":"^29.7.0","js-tokens":"^4.0.0","js-yaml":"^3.14.2","jsesc":"^3.1.0","json-parse-even-better-errors":"^2.3.1","json5":"^2.2.3","kleur":"^3.0.3","leven":"^3.1.0","lines-and-columns":"^1.2.4","locate-path":"^5.0.0","lodash.memoize":"^4.1.2","lru-cache":"^5.1.1","make-dir":"^4.0.0","make-error":"^1.3.6","makeerror":"^1.0.12","merge-stream":"^2.0.0","micromatch":"^4.0.8","mimic-fn":"^2.1.0","minimatch":"^3.1.5","minimist":"^1.2.8","ms":"^2.1.3","natural-compare":"^1.4.0","neo-async":"^2.6.2","node-int64":"^0.4.0","node-releases":"^2.0.27","normalize-path":"^3.0.0","npm-run-path":"^4.0.1","once":"^1.4.0","onetime":"^5.1.2","p-limit":"^3.1.0","p-locate":"^4.1.0","p-try":"^2.2.0","parse-json":"^5.2.0","path-exists":"^4.0.0","path-is-absolute":"^1.0.1","path-key":"^3.1.1","path-parse":"^1.0.7","picocolors":"^1.1.1","picomatch":"^2.3.1","pirates":"^4.0.7","pkg-dir":"^4.2.0","pretty-format":"^29.7.0","prompts":"^2.4.2","pure-rand":"^6.1.0","react-is":"^18.3.1","require-directory":"^2.1.1","resolve":"^1.22.11","resolve-cwd":"^3.0.0","resolve-from":"^5.0.0","resolve.exports":"^2.0.3","semver":"^6.3.1","shebang-command":"^2.0.0","shebang-regex":"^3.0.0","signal-exit":"^3.0.7","sisteransi":"^1.0.5","slash":"^3.0.0","source-map":"^0.6.1","source-map-support":"^0.5.13","sprintf-js":"^1.0.3","stack-utils":"^2.0.6","string-length":"^4.0.2","string-width":"^4.2.3","strip-ansi":"^6.0.1","strip-bom":"^4.0.0","strip-final-newline":"^2.0.0","strip-json-comments":"^3.1.1","supports-color":"^7.2.0","supports-preserve-symlinks-flag":"^1.0.0","test-exclude":"^6.0.0","tmpl":"^1.0.5","to-regex-range":"^5.0.1","type-detect":"^4.0.8","type-fest":"^0.21.3","uglify-js":"^3.19.3","undici-types":"^6.21.0","update-browserslist-db":"^1.2.3","v8-to-istanbul":"^9.3.0","walker":"^1.0.8","which":"^2.0.2","wordwrap":"^1.0.0","wrap-ansi":"^7.0.0","wrappy":"^1.0.2","write-file-atomic":"^4.0.2","y18n":"^5.0.8","yallist":"^3.1.1","yargs":"^17.7.2","yargs-parser":"^21.1.1","yocto-queue":"^0.1.0"},"repository":{"type":"git","url":"git+https://github.com/diarworld/powerbi-tom-parser.git"},"bugs":{"url":"https://github.com/diarworld/powerbi-tom-parser/issues"},"homepage":"https://github.com/diarworld/powerbi-tom-parser#readme","_id":"@diarworld/powerbi-tom-parser@1.0.0","gitHead":"a0e405434149d9700689ea4f87326a7740f1bfbb","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-WRW6erhOTqe0lfZEAsdILWsIp8NXlU9f/qybQjw4ux3i5O5Ntvr0gDykc/OqXsy23xswyOni1kgx2BLliU1Ubw==","shasum":"fd15d9553ae2ef616e0c528c13539f1ce44ddeec","tarball":"https://registry.npmjs.org/@diarworld/powerbi-tom-parser/-/powerbi-tom-parser-1.0.0.tgz","fileCount":20,"unpackedSize":63591,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHV4EIibe+gLwuEPmz2pmQGC8R9KiiE26fBsYHurTq4xAiEAzJTXxNXmCklST6K1Wygu62J8TcJdOrCdF0JDSK+6Pqg="}]},"_npmUser":{"name":"diarworld","email":"diarworld@gmail.com"},"maintainers":[{"name":"diarworld","email":"diarworld@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/powerbi-tom-parser_1.0.0_1772200241066_0.3576276258126061"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-27T13:50:40.938Z","1.0.0":"2026-02-27T13:50:41.192Z","modified":"2026-02-27T13:50:41.444Z"},"maintainers":[{"name":"diarworld","email":"diarworld@gmail.com"}],"description":"Node.js library to extract Power BI / Analysis Services Tabular Model metadata from .bim files","homepage":"https://github.com/diarworld/powerbi-tom-parser#readme","keywords":["powerbi","tabular","analysis-services","bim","parser","tom"],"repository":{"type":"git","url":"git+https://github.com/diarworld/powerbi-tom-parser.git"},"author":{"name":"Dmitry Ibragimov"},"bugs":{"url":"https://github.com/diarworld/powerbi-tom-parser/issues"},"license":"MIT","readme":"# powerbi-tom-parser\n\nNode.js library to extract Power BI / Analysis Services Tabular Model metadata from `.bim` files.\n\n## Features\n\n- Parse Power BI `.bim` JSON files\n- Extract tables, columns, partitions, measures, and relationships\n- Support for various partition source types (Query, M, Calculated)\n- Automatic encoding detection (UTF-8, UTF-16 LE/BE)\n- Full TypeScript support with type definitions\n\n## Installation\n\n```bash\nnpm install powerbi-tom-parser\n```\n\n## Usage\n\n### Parse a .bim file\n\n```javascript\nimport { parseBimFile } from 'powerbi-tom-parser';\n\nconst model = await parseBimFile('./model.bim');\n\nconsole.log('Tables:', model.tables.map(t => t.name));\nconsole.log('Relationships:', model.relationships.length);\n```\n\n### Parse JSON directly\n\n```javascript\nimport { parseBimJson } from 'powerbi-tom-parser';\n\nconst bim = {\n  model: {\n    name: 'SalesModel',\n    compatibilityLevel: 1500,\n    tables: [\n      {\n        name: 'Sales',\n        columns: [\n          { name: 'Id', dataType: 'Int64' },\n          { name: 'Amount', dataType: 'Decimal' }\n        ],\n        partitions: [\n          { name: 'Sales', source: { type: 'query', query: 'SELECT * FROM Sales' } }\n        ],\n        measures: [\n          { name: 'Total Sales', expression: 'SUM(Sales[Amount])' }\n        ]\n      }\n    ],\n    relationships: []\n  }\n};\n\nconst model = parseBimJson(bim);\n```\n\n### Options\n\n```javascript\nconst model = await parseBimFile('./model.bim', {\n  includeAnnotations: true,  // Include model annotations (default: true)\n  includeHiddenObjects: false // Exclude hidden tables/columns/measures\n});\n```\n\n## TypeScript Types\n\nThe library provides full TypeScript type definitions:\n\n```typescript\nimport {\n  TabularModel,\n  DataModelSchema,\n  Table,\n  Column,\n  Partition,\n  Measure,\n  Relationship,\n  DataType,\n  PartitionSourceType,\n  RelationshipCardinality,\n  CrossFilteringBehavior\n} from 'powerbi-tom-parser';\n```\n\n### Data Types\n\n- `DataType.Int64`, `DataType.Double`, `DataType.Boolean`, `DataType.String`, `DataType.DateTime`, `DataType.Decimal`, etc.\n\n### Partition Source Types\n\n- `PartitionSourceType.Query` - SQL query partition\n- `PartitionSourceType.M` - Power Query (M) partition\n- `PartitionSourceType.Calculated` - Calculated partition\n- `PartitionSourceType.None` - No source\n\n### Relationship Cardinality\n\n- `RelationshipCardinality.OneToOne`\n- `RelationshipCardinality.OneToMany`\n- `RelationshipCardinality.ManyToOne`\n\n## Error Handling\n\n```javascript\nimport { parseBimFile, TomParserError } from 'powerbi-tom-parser';\n\ntry {\n  const model = await parseBimFile('./model.bim');\n} catch (error) {\n  if (error instanceof TomParserError) {\n    console.log('Error code:', error.code);\n    console.log('Message:', error.message);\n  }\n}\n```\n\nError codes:\n- `FILE_NOT_FOUND` - BIM file not found\n- `INVALID_JSON` - Invalid JSON in file\n- `MISSING_REQUIRED_FIELD` - Required field missing\n- `UNKNOWN_DATA_TYPE` - Unknown data type\n- `MALFORMED_RELATIONSHIP` - Invalid relationship\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Test\nnpm test\n\n# Clean\nnpm run clean\n```\n\n## License\n\nMIT","readmeFilename":"README.md","_rev":"1-e9347d0eb124dea9520f63700770e298"}