{"_id":"@apollo/qp-analyzer","_rev":"7-5fc522e39afd5dc693c1dcf95c2f2997","name":"@apollo/qp-analyzer","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.1":{"name":"@apollo/qp-analyzer","version":"0.1.1","keywords":["graphql","apollo","federation","query-planner"],"license":"Elastic-2.0","_id":"@apollo/qp-analyzer@0.1.1","maintainers":[{"name":"duckki-apollo","email":"duckki.oe@apollographql.com"}],"homepage":"https://github.com/apollographql/qp-analyzer#readme","bugs":{"url":"https://github.com/apollographql/qp-analyzer/issues"},"dist":{"shasum":"923f92d5b3be1971eb4dea19bf0565011f68b607","tarball":"https://registry.npmjs.org/@apollo/qp-analyzer/-/qp-analyzer-0.1.1.tgz","fileCount":6,"integrity":"sha512-x8Ujrgyrn5aQU7P8G2LaNuD/XDbHBdR/wYFQHuTDXOXuau3F1j1fEalH/bv8f3ub3bjcu9GMgxHkMl2zE8xEDg==","signatures":[{"sig":"MEQCICNJjPE0R9nEx5lEob7EP/I0ZQdVuXDfYLwuTEPM8QOWAiBgD8AKhv05jaYEKQSdoPn0MIqVBpPefPBZckPP1d6tcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4232015},"main":"qp-analyzer.js","types":"qp-analyzer.d.ts","gitHead":"b1b7e2c69beaf82d7d562515f4780dda07b6ece4","_npmUser":{"name":"duckki-apollo","email":"duckki.oe@apollographql.com"},"repository":{"url":"git+https://github.com/apollographql/qp-analyzer.git","type":"git"},"_npmVersion":"10.8.2","description":"Apollo Query Plan Analyzer compiled to WebAssembly","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qp-analyzer_0.1.1_1762273501058_0.19159762666503677","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@apollo/qp-analyzer","version":"0.2.0","keywords":["graphql","apollo","federation","query-planner"],"license":"Elastic-2.0","_id":"@apollo/qp-analyzer@0.2.0","maintainers":[{"name":"dkuc","email":"dariusz_kuc@hotmail.com"}],"homepage":"https://github.com/apollographql/qp-analyzer#readme","bugs":{"url":"https://github.com/apollographql/qp-analyzer/issues"},"bin":{"qp-analyzer":"cli.js"},"dist":{"shasum":"aa46fc88eb483544878555a5d5b638f2802ce1ee","tarball":"https://registry.npmjs.org/@apollo/qp-analyzer/-/qp-analyzer-0.2.0.tgz","fileCount":7,"integrity":"sha512-ZHpLzHVM/rOZaWUhfHeNNc0wKVhL9MZFs0pVl3LqEWdAOspHMNuR7nnuHECseANDVcI7eJHqaMMeF3GLldKMUA==","signatures":[{"sig":"MEUCIDCeItrqORnMKgb/Mhkc4PseZbuj+gTDWowlnwg66Kf6AiEAmctpILlRBe0rnbgn3p+07N084GGphTo6d+bQ4iSd7h0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apollo%2fqp-analyzer@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4504000},"main":"qp-analyzer.js","types":"qp-analyzer.d.ts","gitHead":"6657bd09c6909dcc8c58e4eeb59b16b4b09f83d4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22611ce9-26b5-4075-b5bc-96be2e517ae8"}},"repository":{"url":"git+https://github.com/apollographql/qp-analyzer.git","type":"git"},"_npmVersion":"11.6.2","description":"Apollo Query Plan Analyzer compiled to WebAssembly","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qp-analyzer_0.2.0_1765903920658_0.4061164412970508","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@apollo/qp-analyzer","version":"0.2.1","keywords":["graphql","apollo","federation","query-planner"],"license":"Elastic-2.0","_id":"@apollo/qp-analyzer@0.2.1","maintainers":[{"name":"dkuc","email":"dariusz_kuc@hotmail.com"}],"homepage":"https://github.com/apollographql/qp-analyzer#readme","bugs":{"url":"https://github.com/apollographql/qp-analyzer/issues"},"bin":{"qp-analyzer":"cli.js"},"dist":{"shasum":"332f3a898731e0fd9050040ea1ffd9ed80f2182f","tarball":"https://registry.npmjs.org/@apollo/qp-analyzer/-/qp-analyzer-0.2.1.tgz","fileCount":7,"integrity":"sha512-mTs53BkOrf5Mf2tsBTr2HjP/VcA7RvoLvF2SqjwzjD5cdwXxzxZySsxqpb3YnZyiqnMB5GX1s1Nzimicm+dcow==","signatures":[{"sig":"MEUCIQCaBuKUI6vxG/9p7w8Kx1R6MQBEH2LyHwrlsvT5xYrxYwIgcfcpMWicVhL84KwwlxpRCo05G1j0WKOpkMLeOAO2lLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apollo%2fqp-analyzer@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4516491},"main":"qp-analyzer.js","types":"qp-analyzer.d.ts","gitHead":"108d3bc4da3d598145bb8832a042a3b7a01e744f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22611ce9-26b5-4075-b5bc-96be2e517ae8"}},"repository":{"url":"git+https://github.com/apollographql/qp-analyzer.git","type":"git"},"_npmVersion":"11.6.2","description":"Apollo Query Plan Analyzer compiled to WebAssembly","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qp-analyzer_0.2.1_1766191240359_0.5342558597755938","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-04T16:25:00.997Z","modified":"2026-01-22T17:30:07.319Z","0.1.1":"2025-11-04T16:25:01.307Z","0.2.0":"2025-12-16T16:52:00.837Z","0.2.1":"2025-12-20T00:40:40.596Z"},"bugs":{"url":"https://github.com/apollographql/qp-analyzer/issues"},"license":"Elastic-2.0","homepage":"https://github.com/apollographql/qp-analyzer#readme","keywords":["graphql","apollo","federation","query-planner"],"repository":{"url":"git+https://github.com/apollographql/qp-analyzer.git","type":"git"},"description":"Apollo Query Plan Analyzer compiled to WebAssembly","maintainers":[{"email":"dariusz_kuc@hotmail.com","name":"dkuc"},{"email":"mail@lenzw.de","name":"phryneas"},{"email":"npmjs@jro.cc","name":"abernix"}],"readme":"# @apollo/qp-analyzer\n\nApollo Federation Query Plan Analyzer (compiled to WebAssembly for Node.js environments).\nThis tool can be used to predict how GraphQL queries may be planned by Apollo Router.\n\n## Installation\n\n```bash\nnpm install @apollo/qp-analyzer\n```\n\nOr\n\n```bash\nnpx  @apollo/qp-analyzer\n```\n\n## CLI Usage\n\n```\nUsage: qp-analyzer <command> [options]\n\nCommands:\n  override-labels      List override labels in a schema\n  plan-all             Build all possible query plans\n  plan-one             Build a single optimized query plan\n  compare-plans        Compare two query plan JSON files (produced using the plan-one command)\n  help                 Show this help message\n\nCommon planner options:\n  --disable-generate-query-fragments\n  --disable-defer-support\n  --experimental-type-conditioned-fetching\n  --experimental-plans-limit <number>\n  --experimental-paths-limit <number>\n\nOutput options:\n  --json               Print JSON (for plan-all / plan-one)\n\nPlan-one options:\n  --override-all       Treat all override labels as applied\n  <override-labels...> Additional override labels (positional)\n\nExamples:\n  qp-analyzer override-labels schema.graphql\n  qp-analyzer plan-all schema.graphql query.graphql --json\n  qp-analyzer plan-one schema.graphql query.graphql --override-all\n  qp-analyzer plan-one schema.graphql query.graphql labelA labelB\n  qp-analyzer compare-plans schema.graphql plan1.json plan2.json\n```\n\n## Library Usage\n\n### List all override labels from supergraph schema\n\n```javascript\nimport analyzer from '@apollo/qp-analyzer';\n\nconst labels = analyzer.override_labels(supergraph);\nfor (const label of labels) {\n    console.log(label);\n}\n```\n\n* supergraph (String): Supergraph schema document\n* Return value (String[]): array of labels\n\n### Compute query plans for all possible override configurations\n\n```javascript\nimport analyzer from '@apollo/qp-analyzer';\n\nconst plans = analyzer.build_all_plans(supergraph, query, query_path, query_planner_args);\nfor (const plan of plans) {\n    console.log(plan.query_plan_display);\n}\n```\n\n* `supergraph` (String): Supergraph schema document\n* `query` (String): Operation document\n* `query_path` (String): The nominal path to the Operation document\n* `query_planner_args` (Object) has the following fields:\n  - `disable_generate_query_fragments` (bool): Disable optimization of subgraph fetch queries using fragments.\n  - `disable_defer_support` (bool): Disable defer support.\n* Return value (Object[]) is an array of objects with the following fields:\n  - `query_plan_config` (Object): Query plan configuration\n  - `query_plan_display` (String): Query plan display text\n  - `experimental_query_plan_serialized` (Object): Serialized query plan\n\n\n### Compute one query plan for given override configuration\n\n```javascript\nimport analyzer from '@apollo/qp-analyzer';\n\nconst plan = analyzer.build_one_plan(supergraph, query, query_path, query_planner_args, override_all, override_conditions);\nconsole.log(plan.query_plan_display);\n```\n\n* supergraph (String): Supergraph schema document\n* query (String): Operation document\n* query_path (String): The nominal path to the Operation document\n* `query_planner_args` (Object) has the following fields:\n  - `disable_generate_query_fragments` (bool): Disable optimization of subgraph fetch queries using fragments.\n  - `disable_defer_support` (bool): Disable defer support.\n* override_all (bool): enable all override labels, if true\n* override_conditions (String[]; optional): enabled override labels\n* Return value (Object) has the following fields:\n  - `query_plan_config` (Object): Query plan configuration\n  - `query_plan_display` (String): Query plan display text\n  - `experimental_query_plan_serialized` (Object): Serialized query plan\n\n### Compare two query plans\n\nThe `compare_plans` function compares two query plans and returns `undefined` if they are identical; Otherwise, returns an object with the following fields:\n\n* `full_diff`: The textual difference between the YAML versions of input query plans.\n* `diff_description`: The description of the first difference found.\n\n```javascript\nimport analyzer from '@apollo/qp-analyzer';\n\nconst plan1 = analyzer.build_one_plan( ... );\nconst plan2 = analyzer.build_one_plan( ... );\nconst diff = analyzer.compare_plans(supergraph, plan1, plan2);\nif (diff != null) {\n  console.log(diff.full_diff);\n  console.log(diff.diff_description);\n}\n```\n","readmeFilename":"README.md"}