@shellicar/graphql-codegen-treeshake 1.0.0 → 1.0.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.0.1] - 2026-04-15
9
+
10
+ ### Changed
11
+
12
+ - Updated dependencies to latest versions
13
+
14
+ ## [1.0.0] - 2026-03-11
15
+
16
+ ### Added
17
+
18
+ - Initial release.
19
+
20
+ [1.0.1]: https://github.com/shellicar/ecosystem/releases/tag/graphql-codegen-treeshake@1.0.1
21
+ [1.0.0]: https://github.com/shellicar/ecosystem/releases/tag/1.0.0
package/README.md CHANGED
@@ -2,14 +2,21 @@
2
2
 
3
3
  > A graphql-codegen preset that tree-shakes unused types from TypeScript output
4
4
 
5
- ## Installation
5
+ [![npm package](https://img.shields.io/npm/v/@shellicar/graphql-codegen-treeshake.svg)](https://npmjs.com/package/@shellicar/graphql-codegen-treeshake)
6
+ [![build status](https://github.com/shellicar/ecosystem/actions/workflows/node.js.yml/badge.svg)](https://github.com/shellicar/ecosystem/actions/workflows/node.js.yml)
7
+
8
+ ## Features
9
+
10
+ - Only generates TypeScript types reachable from your actual operations and fragments
11
+ - Wraps `@graphql-codegen/client-preset` — drop-in replacement
12
+ - Reduces generated output size by excluding unused schema types
13
+
14
+ ## Installation & Quick Start
6
15
 
7
16
  ```sh
8
17
  pnpm add -D @shellicar/graphql-codegen-treeshake
9
18
  ```
10
19
 
11
- ## Quick Example
12
-
13
20
  ```ts
14
21
  // codegen.ts
15
22
  import { preset } from '@shellicar/graphql-codegen-treeshake';
@@ -31,6 +38,36 @@ const config: CodegenConfig = {
31
38
  export default config;
32
39
  ```
33
40
 
34
- ## Documentation
41
+ <!-- BEGIN_ECOSYSTEM -->
42
+
43
+ ## @shellicar TypeScript Ecosystem
44
+
45
+ ### Core Libraries
46
+
47
+ - [`@shellicar/core-config`](https://github.com/shellicar/ecosystem/tree/main/packages/core-config) - A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.
48
+ - [`@shellicar/core-di`](https://github.com/shellicar/ecosystem/tree/main/packages/core-di) - A basic dependency injection library.
49
+
50
+ ### Reference Architectures
51
+
52
+ - [`@shellicar/reference-foundation`](https://github.com/shellicar/reference-foundation) - A comprehensive starter repository. Illustrates individual concepts.
53
+ - [`@shellicar/reference-enterprise`](https://github.com/shellicar/reference-enterprise) - A comprehensive starter repository. Can be used as the basis for creating a new Azure application workload.
54
+
55
+ ### Build Tools
56
+
57
+ - [`@shellicar/build-clean`](https://github.com/shellicar/ecosystem/tree/main/packages/build-clean) - Build plugin that automatically cleans unused files from output directories.
58
+ - [`@shellicar/build-version`](https://github.com/shellicar/ecosystem/tree/main/packages/build-version) - Build plugin that calculates and exposes version information through a virtual module import.
59
+ - [`@shellicar/build-graphql`](https://github.com/shellicar/ecosystem/tree/main/packages/build-graphql) - Build plugin that loads GraphQL files and makes them available through a virtual module import.
60
+ - [`@shellicar/graphql-codegen-treeshake`](https://github.com/shellicar/ecosystem/tree/main/packages/graphql-codegen-treeshake) - A graphql-codegen preset that tree-shakes unused types from TypeScript output.
61
+
62
+ ### Framework
63
+
64
+ - [`@shellicar/svelte-adapter-azure-functions`](https://github.com/shellicar/ecosystem/tree/main/packages/svelte-adapter-azure-functions) - A [SvelteKit adapter](https://kit.svelte.dev/docs/adapters) that builds your app into an Azure Function.
65
+ - [`@shellicar/cosmos-query-builder`](https://github.com/shellicar/ecosystem/tree/main/packages/cosmos-query-builder) - Helper class for type safe advanced queries for Cosmos DB (Sql Core).
66
+ - [`@shellicar/ui-shadcn`](https://github.com/shellicar/ui-shadcn) - Shared Svelte 5 component library built on shadcn-svelte with Tailwind CSS v4 theming.
67
+
68
+ ### Logging & Monitoring
69
+
70
+ - [`@shellicar/winston-azure-application-insights`](https://github.com/shellicar/ecosystem/tree/main/packages/winston-azure-application-insights) - An [Azure Application Insights](https://azure.microsoft.com/en-us/services/application-insights/) transport for [Winston](https://github.com/winstonjs/winston) logging library.
71
+ - [`@shellicar/pino-applicationinsights-transport`](https://github.com/shellicar/pino-applicationinsights-transport) - [Azure Application Insights](https://azure.microsoft.com/en-us/services/application-insights) transport for [pino](https://github.com/pinojs/pino)
35
72
 
36
- For full documentation, visit the [GitHub repository](https://github.com/shellicar/graphql-codegen-treeshake).
73
+ <!-- END_ECOSYSTEM -->
@@ -1 +1,153 @@
1
- "use strict";var e=require("@graphql-codegen/typescript"),t=require("graphql"),n=require("@graphql-codegen/client-preset"),i=Object.defineProperty,a=(e,t)=>i(e,"name",{value:t,configurable:!0});function p(e){return e.kind===t.Kind.NAMED_TYPE?e.name.value:p(e.type)}function r(e,n){const i=t.parse(t.printSchema(e)),a=new Set([e.getQueryType(),e.getMutationType(),e.getSubscriptionType()].filter(e=>null!=e).map(e=>e.name)),r=i.definitions.filter(e=>e.kind===t.Kind.SCHEMA_DEFINITION||e.kind===t.Kind.SCHEMA_EXTENSION||!(!("name"in e)||!e.name)&&(a.has(e.name.value)||n.has(e.name.value))).map(e=>e.kind===t.Kind.OBJECT_TYPE_DEFINITION&&a.has(e.name.value)&&e.fields?{...e,fields:e.fields.filter(e=>!!n.has(p(e.type))&&(e.arguments?.every(e=>n.has(p(e.type)))??!0))}:e);return t.buildASTSchema({kind:t.Kind.DOCUMENT,definitions:r})}a(p,"unwrapTypeName"),a(r,"buildFilteredSchema");var s=new Set(["String","Int","Float","Boolean","ID"]);function o(e,n){const i=new Set;function p(e){if(null!=e&&!s.has(e.name)&&!i.has(e.name))if(i.add(e.name),t.isInputObjectType(e))for(const n of Object.values(e.getFields()))p(t.getNamedType(n.type));else if(t.isObjectType(e)||t.isInterfaceType(e)){for(const n of Object.values(e.getFields())){p(t.getNamedType(n.type));for(const e of n.args)p(t.getNamedType(e.type))}if(t.isObjectType(e))for(const t of e.getInterfaces())p(t)}else if(t.isUnionType(e))for(const t of e.getTypes())p(t)}a(p,"addType");const r=new t.TypeInfo(e);for(const i of n)t.visit(i,t.visitWithTypeInfo(r,{VariableDefinition(){p(t.getNamedType(r.getInputType()))},Field(){p(t.getNamedType(r.getType()));const e=r.getFieldDef();if(e)for(const n of e.args)p(t.getNamedType(n.type))},FragmentDefinition(t){p(e.getType(t.typeCondition.name.value))},InlineFragment(t){t.typeCondition&&p(e.getType(t.typeCondition.name.value))}}));return i}a(o,"collectReachableTypes");var l=a((t,n,i)=>{const a=r(t,o(t,n.map(e=>e.document).filter(e=>null!=e)));return e.plugin(a,n,i)},"plugin"),c={prepareDocuments:n.preset.prepareDocuments,buildGeneratesSection:a(async e=>(await n.preset.buildGeneratesSection(e)).map(e=>({...e,pluginMap:{...e.pluginMap,typescript:{plugin:l}}})),"buildGeneratesSection")};exports.plugin=l,exports.preset=c,exports.reachableTypesPreset=c;//# sourceMappingURL=index.cjs.map
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/plugin.ts
5
+ var _typescript = require('@graphql-codegen/typescript');
6
+
7
+ // src/buildFilteredSchema.ts
8
+ var _graphql = require('graphql');
9
+
10
+ // src/unwrapTypeName.ts
11
+
12
+ function unwrapTypeName(typeNode) {
13
+ if (typeNode.kind === _graphql.Kind.NAMED_TYPE) {
14
+ return typeNode.name.value;
15
+ }
16
+ return unwrapTypeName(typeNode.type);
17
+ }
18
+ __name(unwrapTypeName, "unwrapTypeName");
19
+
20
+ // src/buildFilteredSchema.ts
21
+ function buildFilteredSchema(schema, reachable) {
22
+ const fullAst = _graphql.parse.call(void 0, _graphql.printSchema.call(void 0, schema));
23
+ const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));
24
+ const filteredDefinitions = fullAst.definitions.filter((def) => {
25
+ if (def.kind === _graphql.Kind.SCHEMA_DEFINITION || def.kind === _graphql.Kind.SCHEMA_EXTENSION) {
26
+ return true;
27
+ }
28
+ if ("name" in def && def.name) {
29
+ return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);
30
+ }
31
+ return false;
32
+ }).map((def) => {
33
+ if (def.kind !== _graphql.Kind.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {
34
+ return def;
35
+ }
36
+ return {
37
+ ...def,
38
+ fields: def.fields.filter((field) => {
39
+ if (!reachable.has(unwrapTypeName(field.type))) {
40
+ return false;
41
+ }
42
+ return _nullishCoalesce(_optionalChain([field, 'access', _ => _.arguments, 'optionalAccess', _2 => _2.every, 'call', _3 => _3((arg) => reachable.has(unwrapTypeName(arg.type)))]), () => ( true));
43
+ })
44
+ };
45
+ });
46
+ return _graphql.buildASTSchema.call(void 0, { kind: _graphql.Kind.DOCUMENT, definitions: filteredDefinitions });
47
+ }
48
+ __name(buildFilteredSchema, "buildFilteredSchema");
49
+
50
+ // src/collectReachableTypes.ts
51
+
52
+
53
+ // src/consts.ts
54
+ var BUILT_IN_SCALARS = /* @__PURE__ */ new Set(["String", "Int", "Float", "Boolean", "ID"]);
55
+
56
+ // src/collectReachableTypes.ts
57
+ function collectReachableTypes(schema, documents) {
58
+ const reachable = /* @__PURE__ */ new Set();
59
+ function addType(type) {
60
+ if (type == null) {
61
+ return;
62
+ }
63
+ if (BUILT_IN_SCALARS.has(type.name)) {
64
+ return;
65
+ }
66
+ if (reachable.has(type.name)) {
67
+ return;
68
+ }
69
+ reachable.add(type.name);
70
+ if (_graphql.isInputObjectType.call(void 0, type)) {
71
+ for (const field of Object.values(type.getFields())) {
72
+ addType(_graphql.getNamedType.call(void 0, field.type));
73
+ }
74
+ } else if (_graphql.isObjectType.call(void 0, type) || _graphql.isInterfaceType.call(void 0, type)) {
75
+ for (const field of Object.values(type.getFields())) {
76
+ addType(_graphql.getNamedType.call(void 0, field.type));
77
+ for (const arg of field.args) {
78
+ addType(_graphql.getNamedType.call(void 0, arg.type));
79
+ }
80
+ }
81
+ if (_graphql.isObjectType.call(void 0, type)) {
82
+ for (const iface of type.getInterfaces()) {
83
+ addType(iface);
84
+ }
85
+ }
86
+ } else if (_graphql.isUnionType.call(void 0, type)) {
87
+ for (const member of type.getTypes()) {
88
+ addType(member);
89
+ }
90
+ }
91
+ }
92
+ __name(addType, "addType");
93
+ const typeInfo = new (0, _graphql.TypeInfo)(schema);
94
+ for (const doc of documents) {
95
+ _graphql.visit.call(void 0,
96
+ doc,
97
+ _graphql.visitWithTypeInfo.call(void 0, typeInfo, {
98
+ VariableDefinition() {
99
+ addType(_graphql.getNamedType.call(void 0, typeInfo.getInputType()));
100
+ },
101
+ Field() {
102
+ addType(_graphql.getNamedType.call(void 0, typeInfo.getType()));
103
+ const fieldDef = typeInfo.getFieldDef();
104
+ if (fieldDef) {
105
+ for (const arg of fieldDef.args) {
106
+ addType(_graphql.getNamedType.call(void 0, arg.type));
107
+ }
108
+ }
109
+ },
110
+ FragmentDefinition(node) {
111
+ addType(schema.getType(node.typeCondition.name.value));
112
+ },
113
+ InlineFragment(node) {
114
+ if (node.typeCondition) {
115
+ addType(schema.getType(node.typeCondition.name.value));
116
+ }
117
+ }
118
+ })
119
+ );
120
+ }
121
+ return reachable;
122
+ }
123
+ __name(collectReachableTypes, "collectReachableTypes");
124
+
125
+ // src/plugin.ts
126
+ var plugin = /* @__PURE__ */ __name((schema, documents, config) => {
127
+ const docs = documents.map((d) => d.document).filter((d) => d != null);
128
+ const reachable = collectReachableTypes(schema, docs);
129
+ const filteredSchema = buildFilteredSchema(schema, reachable);
130
+ return _typescript.plugin.call(void 0, filteredSchema, documents, config);
131
+ }, "plugin");
132
+
133
+ // src/preset.ts
134
+ var _clientpreset = require('@graphql-codegen/client-preset');
135
+ var reachableTypesPreset = {
136
+ prepareDocuments: _clientpreset.preset.prepareDocuments,
137
+ buildGeneratesSection: /* @__PURE__ */ __name(async (options) => {
138
+ const generates = await _clientpreset.preset.buildGeneratesSection(options);
139
+ return generates.map((generate) => ({
140
+ ...generate,
141
+ pluginMap: {
142
+ ...generate.pluginMap,
143
+ typescript: { plugin }
144
+ }
145
+ }));
146
+ }, "buildGeneratesSection")
147
+ };
148
+
149
+
150
+
151
+
152
+ exports.plugin = plugin; exports.preset = reachableTypesPreset; exports.reachableTypesPreset = reachableTypesPreset;
153
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/unwrapTypeName.ts","../../src/buildFilteredSchema.ts","../../src/consts.ts","../../src/collectReachableTypes.ts","../../src/plugin.ts","../../src/preset.ts"],"names":["Kind","parse","printSchema","buildASTSchema","isInputObjectType","getNamedType","isObjectType","isInterfaceType","isUnionType","TypeInfo","visit","visitWithTypeInfo","typescriptPlugin","clientPreset"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Kind, type TypeNode } from 'graphql';\n\nexport function unwrapTypeName(typeNode: TypeNode): string {\n if (typeNode.kind === Kind.NAMED_TYPE) {\n return typeNode.name.value;\n }\n return unwrapTypeName(typeNode.type);\n}\n","import { buildASTSchema, type GraphQLSchema, Kind, parse, printSchema } from 'graphql';\nimport { unwrapTypeName } from './unwrapTypeName';\n\nexport function buildFilteredSchema(schema: GraphQLSchema, reachable: Set<string>): GraphQLSchema {\n const fullAst = parse(printSchema(schema));\n\n const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));\n\n const filteredDefinitions = fullAst.definitions\n .filter((def) => {\n if (def.kind === Kind.SCHEMA_DEFINITION || def.kind === Kind.SCHEMA_EXTENSION) {\n return true;\n }\n if ('name' in def && def.name) {\n return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);\n }\n return false;\n })\n .map((def) => {\n if (def.kind !== Kind.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {\n return def;\n }\n return {\n ...def,\n fields: def.fields.filter((field) => {\n if (!reachable.has(unwrapTypeName(field.type))) {\n return false;\n }\n return field.arguments?.every((arg) => reachable.has(unwrapTypeName(arg.type))) ?? true;\n }),\n };\n });\n\n return buildASTSchema({ kind: Kind.DOCUMENT, definitions: filteredDefinitions });\n}\n","export const BUILT_IN_SCALARS: Set<string> = new Set(['String', 'Int', 'Float', 'Boolean', 'ID']);\n","import { type DocumentNode, type GraphQLNamedType, type GraphQLSchema, getNamedType, isInputObjectType, isInterfaceType, isObjectType, isUnionType, TypeInfo, visit, visitWithTypeInfo } from 'graphql';\nimport { BUILT_IN_SCALARS } from './consts';\n\nexport function collectReachableTypes(schema: GraphQLSchema, documents: DocumentNode[]): Set<string> {\n const reachable = new Set<string>();\n\n function addType(type: GraphQLNamedType | null | undefined): void {\n if (type == null) {\n return;\n }\n if (BUILT_IN_SCALARS.has(type.name)) {\n return;\n }\n if (reachable.has(type.name)) {\n return;\n }\n reachable.add(type.name);\n\n if (isInputObjectType(type)) {\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n }\n } else if (isObjectType(type) || isInterfaceType(type)) {\n // Must recurse into all fields to keep the filtered schema valid —\n // if a type is included, all types it references must also be included.\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n for (const arg of field.args) {\n addType(getNamedType(arg.type));\n }\n }\n if (isObjectType(type)) {\n for (const iface of type.getInterfaces()) {\n addType(iface);\n }\n }\n } else if (isUnionType(type)) {\n for (const member of type.getTypes()) {\n addType(member);\n }\n }\n }\n\n const typeInfo = new TypeInfo(schema);\n for (const doc of documents) {\n visit(\n doc,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition() {\n addType(getNamedType(typeInfo.getInputType()));\n },\n Field() {\n addType(getNamedType(typeInfo.getType()));\n const fieldDef = typeInfo.getFieldDef();\n if (fieldDef) {\n for (const arg of fieldDef.args) {\n addType(getNamedType(arg.type));\n }\n }\n },\n FragmentDefinition(node) {\n addType(schema.getType(node.typeCondition.name.value));\n },\n InlineFragment(node) {\n if (node.typeCondition) {\n addType(schema.getType(node.typeCondition.name.value));\n }\n },\n }),\n );\n }\n\n return reachable;\n}\n","import type { PluginFunction } from '@graphql-codegen/plugin-helpers';\nimport { plugin as typescriptPlugin } from '@graphql-codegen/typescript';\nimport type { DocumentNode } from 'graphql';\nimport { buildFilteredSchema } from './buildFilteredSchema';\nimport { collectReachableTypes } from './collectReachableTypes';\n\nexport const plugin: PluginFunction = (schema, documents, config) => {\n const docs = documents.map((d) => d.document).filter((d): d is DocumentNode => d != null);\n const reachable = collectReachableTypes(schema, docs);\n const filteredSchema = buildFilteredSchema(schema, reachable);\n return typescriptPlugin(filteredSchema, documents, config);\n};\n","import { preset as clientPreset } from '@graphql-codegen/client-preset';\nimport type { Types } from '@graphql-codegen/plugin-helpers';\nimport { plugin as reachableTypesPlugin } from './plugin.js';\n\nexport const reachableTypesPreset: Types.OutputPreset = {\n prepareDocuments: clientPreset.prepareDocuments,\n buildGeneratesSection: async (options) => {\n const generates = await clientPreset.buildGeneratesSection(options);\n return generates.map((generate) => ({\n ...generate,\n pluginMap: {\n ...generate.pluginMap,\n typescript: { plugin: reachableTypesPlugin },\n },\n }));\n },\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/graphql-codegen-treeshake/dist/cjs/index.cjs","../../src/plugin.ts","../../src/buildFilteredSchema.ts","../../src/unwrapTypeName.ts","../../src/collectReachableTypes.ts","../../src/consts.ts","../../src/preset.ts"],"names":["Kind"],"mappings":"AAAA,qrBAAI,UAAU,EAAE,MAAM,CAAC,cAAc;AACrC,IAAI,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AACxF;AACA;ACFA,yDAA2C;ADI3C;AACA;AENA,kCAA6E;AFQ7E;AACA;AGTA;AAEO,SAAS,cAAA,CAAe,QAAA,EAA4B;AACzD,EAAA,GAAA,CAAI,QAAA,CAAS,KAAA,IAAS,aAAA,CAAK,UAAA,EAAY;AACrC,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,EACvB;AACA,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA;AACrC;AALgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AHgBhB;AACA;AEhBO,SAAS,mBAAA,CAAoB,MAAA,EAAuB,SAAA,EAAuC;AAChG,EAAA,MAAM,QAAA,EAAU,4BAAA,kCAAM,MAAkB,CAAC,CAAA;AAEzC,EAAA,MAAM,cAAA,EAAgB,IAAI,GAAA,CAAI,CAAC,MAAA,CAAO,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,eAAA,CAAgB,CAAA,EAAG,MAAA,CAAO,mBAAA,CAAoB,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAA,GAAM,EAAA,GAAK,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAEzJ,EAAA,MAAM,oBAAA,EAAsB,OAAA,CAAQ,WAAA,CACjC,MAAA,CAAO,CAAC,GAAA,EAAA,GAAQ;AACf,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,IAASA,aAAAA,CAAK,kBAAA,GAAqB,GAAA,CAAI,KAAA,IAASA,aAAAA,CAAK,gBAAA,EAAkB;AAC7E,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA,GAAO,GAAA,CAAI,IAAA,EAAM;AAC7B,MAAA,OAAO,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAK,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,GAAA,EAAA,GAAQ;AACZ,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,IAASA,aAAAA,CAAK,uBAAA,GAA0B,CAAC,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAA,CAAI,MAAA,EAAQ;AACjG,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAA,GAAU;AACnC,QAAA,GAAA,CAAI,CAAC,SAAA,CAAU,GAAA,CAAI,cAAA,CAAe,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG;AAC9C,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,wCAAO,KAAA,mBAAM,SAAA,6BAAW,KAAA,mBAAM,CAAC,GAAA,EAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAC,GAAA,UAAK,MAAA;AAAA,MACrF,CAAC;AAAA,IACH,CAAA;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,qCAAA,EAAiB,IAAA,EAAMA,aAAAA,CAAK,QAAA,EAAU,WAAA,EAAa,oBAAoB,CAAC,CAAA;AACjF;AA/BgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AF6ChB;AACA;AIjDA;AJmDA;AACA;AKpDO,IAAM,iBAAA,kBAAgC,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,IAAI,CAAC,CAAA;ALsDhG;AACA;AIpDO,SAAS,qBAAA,CAAsB,MAAA,EAAuB,SAAA,EAAwC;AACnG,EAAA,MAAM,UAAA,kBAAY,IAAI,GAAA,CAAY,CAAA;AAElC,EAAA,SAAS,OAAA,CAAQ,IAAA,EAAiD;AAChE,IAAA,GAAA,CAAI,KAAA,GAAQ,IAAA,EAAM;AAChB,MAAA,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,MAAA,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAEvB,IAAA,GAAA,CAAI,wCAAA,IAAsB,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAA,MAAW,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,EAAG;AACnD,QAAA,OAAA,CAAQ,mCAAA,KAAa,CAAM,IAAI,CAAC,CAAA;AAAA,MAClC;AAAA,IACF,EAAA,KAAA,GAAA,CAAW,mCAAA,IAAiB,EAAA,GAAK,sCAAA,IAAoB,CAAA,EAAG;AAGtD,MAAA,IAAA,CAAA,MAAW,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,EAAG;AACnD,QAAA,OAAA,CAAQ,mCAAA,KAAa,CAAM,IAAI,CAAC,CAAA;AAChC,QAAA,IAAA,CAAA,MAAW,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM;AAC5B,UAAA,OAAA,CAAQ,mCAAA,GAAa,CAAI,IAAI,CAAC,CAAA;AAAA,QAChC;AAAA,MACF;AACA,MAAA,GAAA,CAAI,mCAAA,IAAiB,CAAA,EAAG;AACtB,QAAA,IAAA,CAAA,MAAW,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG;AACxC,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,MACF;AAAA,IACF,EAAA,KAAA,GAAA,CAAW,kCAAA,IAAgB,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAA,MAAW,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG;AACpC,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAnCS,EAAA,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAqCT,EAAA,MAAM,SAAA,EAAW,IAAI,sBAAA,CAAS,MAAM,CAAA;AACpC,EAAA,IAAA,CAAA,MAAW,IAAA,GAAO,SAAA,EAAW;AAC3B,IAAA,4BAAA;AAAA,MACE,GAAA;AAAA,MACA,wCAAA,QAAkB,EAAU;AAAA,QAC1B,kBAAA,CAAA,EAAqB;AACnB,UAAA,OAAA,CAAQ,mCAAA,QAAa,CAAS,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,QAC/C,CAAA;AAAA,QACA,KAAA,CAAA,EAAQ;AACN,UAAA,OAAA,CAAQ,mCAAA,QAAa,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA;AACxC,UAAA,MAAM,SAAA,EAAW,QAAA,CAAS,WAAA,CAAY,CAAA;AACtC,UAAA,GAAA,CAAI,QAAA,EAAU;AACZ,YAAA,IAAA,CAAA,MAAW,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM;AAC/B,cAAA,OAAA,CAAQ,mCAAA,GAAa,CAAI,IAAI,CAAC,CAAA;AAAA,YAChC;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA,kBAAA,CAAmB,IAAA,EAAM;AACvB,UAAA,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,QACvD,CAAA;AAAA,QACA,cAAA,CAAe,IAAA,EAAM;AACnB,UAAA,GAAA,CAAI,IAAA,CAAK,aAAA,EAAe;AACtB,YAAA,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,UACvD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;AAtEgB,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AJwHhB;AACA;ACtHO,IAAM,OAAA,kBAAyB,MAAA,CAAA,CAAC,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAA,GAAW;AACnE,EAAA,MAAM,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAA,GAAyB,EAAA,GAAK,IAAI,CAAA;AACxF,EAAA,MAAM,UAAA,EAAY,qBAAA,CAAsB,MAAA,EAAQ,IAAI,CAAA;AACpD,EAAA,MAAM,eAAA,EAAiB,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAC5D,EAAA,OAAO,gCAAA,cAAiB,EAAgB,SAAA,EAAW,MAAM,CAAA;AAC3D,CAAA,EALsC,QAAA,CAAA;AD6HtC;AACA;AMpIA,8DAAuC;AAIhC,IAAM,qBAAA,EAA2C;AAAA,EACtD,gBAAA,EAAkB,oBAAA,CAAa,gBAAA;AAAA,EAC/B,qBAAA,kBAAuB,MAAA,CAAA,MAAA,CAAO,OAAA,EAAA,GAAY;AACxC,IAAA,MAAM,UAAA,EAAY,MAAM,oBAAA,CAAa,qBAAA,CAAsB,OAAO,CAAA;AAClE,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,EAAA,GAAA,CAAc;AAAA,MAClC,GAAG,QAAA;AAAA,MACH,SAAA,EAAW;AAAA,QACT,GAAG,QAAA,CAAS,SAAA;AAAA,QACZ,UAAA,EAAY,EAAE,OAA6B;AAAA,MAC7C;AAAA,IACF,CAAA,CAAE,CAAA;AAAA,EACJ,CAAA,EATuB,uBAAA;AAUzB,CAAA;ANmIA;AACE;AACA;AACA;AACF,oHAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/graphql-codegen-treeshake/dist/cjs/index.cjs","sourcesContent":[null,"import type { PluginFunction } from '@graphql-codegen/plugin-helpers';\nimport { plugin as typescriptPlugin } from '@graphql-codegen/typescript';\nimport type { DocumentNode } from 'graphql';\nimport { buildFilteredSchema } from './buildFilteredSchema';\nimport { collectReachableTypes } from './collectReachableTypes';\n\nexport const plugin: PluginFunction = (schema, documents, config) => {\n const docs = documents.map((d) => d.document).filter((d): d is DocumentNode => d != null);\n const reachable = collectReachableTypes(schema, docs);\n const filteredSchema = buildFilteredSchema(schema, reachable);\n return typescriptPlugin(filteredSchema, documents, config);\n};\n","import { buildASTSchema, type GraphQLSchema, Kind, parse, printSchema } from 'graphql';\nimport { unwrapTypeName } from './unwrapTypeName';\n\nexport function buildFilteredSchema(schema: GraphQLSchema, reachable: Set<string>): GraphQLSchema {\n const fullAst = parse(printSchema(schema));\n\n const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));\n\n const filteredDefinitions = fullAst.definitions\n .filter((def) => {\n if (def.kind === Kind.SCHEMA_DEFINITION || def.kind === Kind.SCHEMA_EXTENSION) {\n return true;\n }\n if ('name' in def && def.name) {\n return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);\n }\n return false;\n })\n .map((def) => {\n if (def.kind !== Kind.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {\n return def;\n }\n return {\n ...def,\n fields: def.fields.filter((field) => {\n if (!reachable.has(unwrapTypeName(field.type))) {\n return false;\n }\n return field.arguments?.every((arg) => reachable.has(unwrapTypeName(arg.type))) ?? true;\n }),\n };\n });\n\n return buildASTSchema({ kind: Kind.DOCUMENT, definitions: filteredDefinitions });\n}\n","import { Kind, type TypeNode } from 'graphql';\n\nexport function unwrapTypeName(typeNode: TypeNode): string {\n if (typeNode.kind === Kind.NAMED_TYPE) {\n return typeNode.name.value;\n }\n return unwrapTypeName(typeNode.type);\n}\n","import { type DocumentNode, type GraphQLNamedType, type GraphQLSchema, getNamedType, isInputObjectType, isInterfaceType, isObjectType, isUnionType, TypeInfo, visit, visitWithTypeInfo } from 'graphql';\nimport { BUILT_IN_SCALARS } from './consts';\n\nexport function collectReachableTypes(schema: GraphQLSchema, documents: DocumentNode[]): Set<string> {\n const reachable = new Set<string>();\n\n function addType(type: GraphQLNamedType | null | undefined): void {\n if (type == null) {\n return;\n }\n if (BUILT_IN_SCALARS.has(type.name)) {\n return;\n }\n if (reachable.has(type.name)) {\n return;\n }\n reachable.add(type.name);\n\n if (isInputObjectType(type)) {\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n }\n } else if (isObjectType(type) || isInterfaceType(type)) {\n // Must recurse into all fields to keep the filtered schema valid —\n // if a type is included, all types it references must also be included.\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n for (const arg of field.args) {\n addType(getNamedType(arg.type));\n }\n }\n if (isObjectType(type)) {\n for (const iface of type.getInterfaces()) {\n addType(iface);\n }\n }\n } else if (isUnionType(type)) {\n for (const member of type.getTypes()) {\n addType(member);\n }\n }\n }\n\n const typeInfo = new TypeInfo(schema);\n for (const doc of documents) {\n visit(\n doc,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition() {\n addType(getNamedType(typeInfo.getInputType()));\n },\n Field() {\n addType(getNamedType(typeInfo.getType()));\n const fieldDef = typeInfo.getFieldDef();\n if (fieldDef) {\n for (const arg of fieldDef.args) {\n addType(getNamedType(arg.type));\n }\n }\n },\n FragmentDefinition(node) {\n addType(schema.getType(node.typeCondition.name.value));\n },\n InlineFragment(node) {\n if (node.typeCondition) {\n addType(schema.getType(node.typeCondition.name.value));\n }\n },\n }),\n );\n }\n\n return reachable;\n}\n","export const BUILT_IN_SCALARS: Set<string> = new Set(['String', 'Int', 'Float', 'Boolean', 'ID']);\n","import { preset as clientPreset } from '@graphql-codegen/client-preset';\nimport type { Types } from '@graphql-codegen/plugin-helpers';\nimport { plugin as reachableTypesPlugin } from './plugin.js';\n\nexport const reachableTypesPreset: Types.OutputPreset = {\n prepareDocuments: clientPreset.prepareDocuments,\n buildGeneratesSection: async (options) => {\n const generates = await clientPreset.buildGeneratesSection(options);\n return generates.map((generate) => ({\n ...generate,\n pluginMap: {\n ...generate.pluginMap,\n typescript: { plugin: reachableTypesPlugin },\n },\n }));\n },\n};\n"]}
package/dist/esm/index.js CHANGED
@@ -1 +1,153 @@
1
- import{plugin as e}from"@graphql-codegen/typescript";import{Kind as n,parse as t,printSchema as i,buildASTSchema as a,TypeInfo as o,visit as r,visitWithTypeInfo as p,getNamedType as l,isInputObjectType as s,isObjectType as f,isInterfaceType as u,isUnionType as c}from"graphql";import{preset as m}from"@graphql-codegen/client-preset";var d=Object.defineProperty,g=(e,n)=>d(e,"name",{value:n,configurable:!0});function y(e){return e.kind===n.NAMED_TYPE?e.name.value:y(e.type)}function T(e,o){const r=t(i(e)),p=new Set([e.getQueryType(),e.getMutationType(),e.getSubscriptionType()].filter(e=>null!=e).map(e=>e.name)),l=r.definitions.filter(e=>e.kind===n.SCHEMA_DEFINITION||e.kind===n.SCHEMA_EXTENSION||!(!("name"in e)||!e.name)&&(p.has(e.name.value)||o.has(e.name.value))).map(e=>e.kind===n.OBJECT_TYPE_DEFINITION&&p.has(e.name.value)&&e.fields?{...e,fields:e.fields.filter(e=>!!o.has(y(e.type))&&(e.arguments?.every(e=>o.has(y(e.type)))??!0))}:e);return a({kind:n.DOCUMENT,definitions:l})}g(y,"unwrapTypeName"),g(T,"buildFilteredSchema");var v=new Set(["String","Int","Float","Boolean","ID"]);function h(e,n){const t=new Set;function i(e){if(null!=e&&!v.has(e.name)&&!t.has(e.name))if(t.add(e.name),s(e))for(const n of Object.values(e.getFields()))i(l(n.type));else if(f(e)||u(e)){for(const n of Object.values(e.getFields())){i(l(n.type));for(const e of n.args)i(l(e.type))}if(f(e))for(const n of e.getInterfaces())i(n)}else if(c(e))for(const n of e.getTypes())i(n)}g(i,"addType");const a=new o(e);for(const t of n)r(t,p(a,{VariableDefinition(){i(l(a.getInputType()))},Field(){i(l(a.getType()));const e=a.getFieldDef();if(e)for(const n of e.args)i(l(n.type))},FragmentDefinition(n){i(e.getType(n.typeCondition.name.value))},InlineFragment(n){n.typeCondition&&i(e.getType(n.typeCondition.name.value))}}));return t}g(h,"collectReachableTypes");var I=g((n,t,i)=>{const a=T(n,h(n,t.map(e=>e.document).filter(e=>null!=e)));return e(a,t,i)},"plugin"),S={prepareDocuments:m.prepareDocuments,buildGeneratesSection:g(async e=>(await m.buildGeneratesSection(e)).map(e=>({...e,pluginMap:{...e.pluginMap,typescript:{plugin:I}}})),"buildGeneratesSection")};export{I as plugin,S as preset,S as reachableTypesPreset};//# sourceMappingURL=index.js.map
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/plugin.ts
5
+ import { plugin as typescriptPlugin } from "@graphql-codegen/typescript";
6
+
7
+ // src/buildFilteredSchema.ts
8
+ import { buildASTSchema, Kind as Kind2, parse, printSchema } from "graphql";
9
+
10
+ // src/unwrapTypeName.ts
11
+ import { Kind } from "graphql";
12
+ function unwrapTypeName(typeNode) {
13
+ if (typeNode.kind === Kind.NAMED_TYPE) {
14
+ return typeNode.name.value;
15
+ }
16
+ return unwrapTypeName(typeNode.type);
17
+ }
18
+ __name(unwrapTypeName, "unwrapTypeName");
19
+
20
+ // src/buildFilteredSchema.ts
21
+ function buildFilteredSchema(schema, reachable) {
22
+ const fullAst = parse(printSchema(schema));
23
+ const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));
24
+ const filteredDefinitions = fullAst.definitions.filter((def) => {
25
+ if (def.kind === Kind2.SCHEMA_DEFINITION || def.kind === Kind2.SCHEMA_EXTENSION) {
26
+ return true;
27
+ }
28
+ if ("name" in def && def.name) {
29
+ return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);
30
+ }
31
+ return false;
32
+ }).map((def) => {
33
+ if (def.kind !== Kind2.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {
34
+ return def;
35
+ }
36
+ return {
37
+ ...def,
38
+ fields: def.fields.filter((field) => {
39
+ if (!reachable.has(unwrapTypeName(field.type))) {
40
+ return false;
41
+ }
42
+ return field.arguments?.every((arg) => reachable.has(unwrapTypeName(arg.type))) ?? true;
43
+ })
44
+ };
45
+ });
46
+ return buildASTSchema({ kind: Kind2.DOCUMENT, definitions: filteredDefinitions });
47
+ }
48
+ __name(buildFilteredSchema, "buildFilteredSchema");
49
+
50
+ // src/collectReachableTypes.ts
51
+ import { getNamedType, isInputObjectType, isInterfaceType, isObjectType, isUnionType, TypeInfo, visit, visitWithTypeInfo } from "graphql";
52
+
53
+ // src/consts.ts
54
+ var BUILT_IN_SCALARS = /* @__PURE__ */ new Set(["String", "Int", "Float", "Boolean", "ID"]);
55
+
56
+ // src/collectReachableTypes.ts
57
+ function collectReachableTypes(schema, documents) {
58
+ const reachable = /* @__PURE__ */ new Set();
59
+ function addType(type) {
60
+ if (type == null) {
61
+ return;
62
+ }
63
+ if (BUILT_IN_SCALARS.has(type.name)) {
64
+ return;
65
+ }
66
+ if (reachable.has(type.name)) {
67
+ return;
68
+ }
69
+ reachable.add(type.name);
70
+ if (isInputObjectType(type)) {
71
+ for (const field of Object.values(type.getFields())) {
72
+ addType(getNamedType(field.type));
73
+ }
74
+ } else if (isObjectType(type) || isInterfaceType(type)) {
75
+ for (const field of Object.values(type.getFields())) {
76
+ addType(getNamedType(field.type));
77
+ for (const arg of field.args) {
78
+ addType(getNamedType(arg.type));
79
+ }
80
+ }
81
+ if (isObjectType(type)) {
82
+ for (const iface of type.getInterfaces()) {
83
+ addType(iface);
84
+ }
85
+ }
86
+ } else if (isUnionType(type)) {
87
+ for (const member of type.getTypes()) {
88
+ addType(member);
89
+ }
90
+ }
91
+ }
92
+ __name(addType, "addType");
93
+ const typeInfo = new TypeInfo(schema);
94
+ for (const doc of documents) {
95
+ visit(
96
+ doc,
97
+ visitWithTypeInfo(typeInfo, {
98
+ VariableDefinition() {
99
+ addType(getNamedType(typeInfo.getInputType()));
100
+ },
101
+ Field() {
102
+ addType(getNamedType(typeInfo.getType()));
103
+ const fieldDef = typeInfo.getFieldDef();
104
+ if (fieldDef) {
105
+ for (const arg of fieldDef.args) {
106
+ addType(getNamedType(arg.type));
107
+ }
108
+ }
109
+ },
110
+ FragmentDefinition(node) {
111
+ addType(schema.getType(node.typeCondition.name.value));
112
+ },
113
+ InlineFragment(node) {
114
+ if (node.typeCondition) {
115
+ addType(schema.getType(node.typeCondition.name.value));
116
+ }
117
+ }
118
+ })
119
+ );
120
+ }
121
+ return reachable;
122
+ }
123
+ __name(collectReachableTypes, "collectReachableTypes");
124
+
125
+ // src/plugin.ts
126
+ var plugin = /* @__PURE__ */ __name((schema, documents, config) => {
127
+ const docs = documents.map((d) => d.document).filter((d) => d != null);
128
+ const reachable = collectReachableTypes(schema, docs);
129
+ const filteredSchema = buildFilteredSchema(schema, reachable);
130
+ return typescriptPlugin(filteredSchema, documents, config);
131
+ }, "plugin");
132
+
133
+ // src/preset.ts
134
+ import { preset as clientPreset } from "@graphql-codegen/client-preset";
135
+ var reachableTypesPreset = {
136
+ prepareDocuments: clientPreset.prepareDocuments,
137
+ buildGeneratesSection: /* @__PURE__ */ __name(async (options) => {
138
+ const generates = await clientPreset.buildGeneratesSection(options);
139
+ return generates.map((generate) => ({
140
+ ...generate,
141
+ pluginMap: {
142
+ ...generate.pluginMap,
143
+ typescript: { plugin }
144
+ }
145
+ }));
146
+ }, "buildGeneratesSection")
147
+ };
148
+ export {
149
+ plugin,
150
+ reachableTypesPreset as preset,
151
+ reachableTypesPreset
152
+ };
153
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/unwrapTypeName.ts","../../src/buildFilteredSchema.ts","../../src/consts.ts","../../src/collectReachableTypes.ts","../../src/plugin.ts","../../src/preset.ts"],"names":["Kind","typescriptPlugin","clientPreset"],"mappings":"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","file":"index.js","sourcesContent":["import { Kind, type TypeNode } from 'graphql';\n\nexport function unwrapTypeName(typeNode: TypeNode): string {\n if (typeNode.kind === Kind.NAMED_TYPE) {\n return typeNode.name.value;\n }\n return unwrapTypeName(typeNode.type);\n}\n","import { buildASTSchema, type GraphQLSchema, Kind, parse, printSchema } from 'graphql';\nimport { unwrapTypeName } from './unwrapTypeName';\n\nexport function buildFilteredSchema(schema: GraphQLSchema, reachable: Set<string>): GraphQLSchema {\n const fullAst = parse(printSchema(schema));\n\n const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));\n\n const filteredDefinitions = fullAst.definitions\n .filter((def) => {\n if (def.kind === Kind.SCHEMA_DEFINITION || def.kind === Kind.SCHEMA_EXTENSION) {\n return true;\n }\n if ('name' in def && def.name) {\n return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);\n }\n return false;\n })\n .map((def) => {\n if (def.kind !== Kind.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {\n return def;\n }\n return {\n ...def,\n fields: def.fields.filter((field) => {\n if (!reachable.has(unwrapTypeName(field.type))) {\n return false;\n }\n return field.arguments?.every((arg) => reachable.has(unwrapTypeName(arg.type))) ?? true;\n }),\n };\n });\n\n return buildASTSchema({ kind: Kind.DOCUMENT, definitions: filteredDefinitions });\n}\n","export const BUILT_IN_SCALARS: Set<string> = new Set(['String', 'Int', 'Float', 'Boolean', 'ID']);\n","import { type DocumentNode, type GraphQLNamedType, type GraphQLSchema, getNamedType, isInputObjectType, isInterfaceType, isObjectType, isUnionType, TypeInfo, visit, visitWithTypeInfo } from 'graphql';\nimport { BUILT_IN_SCALARS } from './consts';\n\nexport function collectReachableTypes(schema: GraphQLSchema, documents: DocumentNode[]): Set<string> {\n const reachable = new Set<string>();\n\n function addType(type: GraphQLNamedType | null | undefined): void {\n if (type == null) {\n return;\n }\n if (BUILT_IN_SCALARS.has(type.name)) {\n return;\n }\n if (reachable.has(type.name)) {\n return;\n }\n reachable.add(type.name);\n\n if (isInputObjectType(type)) {\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n }\n } else if (isObjectType(type) || isInterfaceType(type)) {\n // Must recurse into all fields to keep the filtered schema valid —\n // if a type is included, all types it references must also be included.\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n for (const arg of field.args) {\n addType(getNamedType(arg.type));\n }\n }\n if (isObjectType(type)) {\n for (const iface of type.getInterfaces()) {\n addType(iface);\n }\n }\n } else if (isUnionType(type)) {\n for (const member of type.getTypes()) {\n addType(member);\n }\n }\n }\n\n const typeInfo = new TypeInfo(schema);\n for (const doc of documents) {\n visit(\n doc,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition() {\n addType(getNamedType(typeInfo.getInputType()));\n },\n Field() {\n addType(getNamedType(typeInfo.getType()));\n const fieldDef = typeInfo.getFieldDef();\n if (fieldDef) {\n for (const arg of fieldDef.args) {\n addType(getNamedType(arg.type));\n }\n }\n },\n FragmentDefinition(node) {\n addType(schema.getType(node.typeCondition.name.value));\n },\n InlineFragment(node) {\n if (node.typeCondition) {\n addType(schema.getType(node.typeCondition.name.value));\n }\n },\n }),\n );\n }\n\n return reachable;\n}\n","import type { PluginFunction } from '@graphql-codegen/plugin-helpers';\nimport { plugin as typescriptPlugin } from '@graphql-codegen/typescript';\nimport type { DocumentNode } from 'graphql';\nimport { buildFilteredSchema } from './buildFilteredSchema';\nimport { collectReachableTypes } from './collectReachableTypes';\n\nexport const plugin: PluginFunction = (schema, documents, config) => {\n const docs = documents.map((d) => d.document).filter((d): d is DocumentNode => d != null);\n const reachable = collectReachableTypes(schema, docs);\n const filteredSchema = buildFilteredSchema(schema, reachable);\n return typescriptPlugin(filteredSchema, documents, config);\n};\n","import { preset as clientPreset } from '@graphql-codegen/client-preset';\nimport type { Types } from '@graphql-codegen/plugin-helpers';\nimport { plugin as reachableTypesPlugin } from './plugin.js';\n\nexport const reachableTypesPreset: Types.OutputPreset = {\n prepareDocuments: clientPreset.prepareDocuments,\n buildGeneratesSection: async (options) => {\n const generates = await clientPreset.buildGeneratesSection(options);\n return generates.map((generate) => ({\n ...generate,\n pluginMap: {\n ...generate.pluginMap,\n typescript: { plugin: reachableTypesPlugin },\n },\n }));\n },\n};\n"]}
1
+ {"version":3,"sources":["../../src/plugin.ts","../../src/buildFilteredSchema.ts","../../src/unwrapTypeName.ts","../../src/collectReachableTypes.ts","../../src/consts.ts","../../src/preset.ts"],"sourcesContent":["import type { PluginFunction } from '@graphql-codegen/plugin-helpers';\nimport { plugin as typescriptPlugin } from '@graphql-codegen/typescript';\nimport type { DocumentNode } from 'graphql';\nimport { buildFilteredSchema } from './buildFilteredSchema';\nimport { collectReachableTypes } from './collectReachableTypes';\n\nexport const plugin: PluginFunction = (schema, documents, config) => {\n const docs = documents.map((d) => d.document).filter((d): d is DocumentNode => d != null);\n const reachable = collectReachableTypes(schema, docs);\n const filteredSchema = buildFilteredSchema(schema, reachable);\n return typescriptPlugin(filteredSchema, documents, config);\n};\n","import { buildASTSchema, type GraphQLSchema, Kind, parse, printSchema } from 'graphql';\nimport { unwrapTypeName } from './unwrapTypeName';\n\nexport function buildFilteredSchema(schema: GraphQLSchema, reachable: Set<string>): GraphQLSchema {\n const fullAst = parse(printSchema(schema));\n\n const rootTypeNames = new Set([schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter((t) => t != null).map((t) => t.name));\n\n const filteredDefinitions = fullAst.definitions\n .filter((def) => {\n if (def.kind === Kind.SCHEMA_DEFINITION || def.kind === Kind.SCHEMA_EXTENSION) {\n return true;\n }\n if ('name' in def && def.name) {\n return rootTypeNames.has(def.name.value) || reachable.has(def.name.value);\n }\n return false;\n })\n .map((def) => {\n if (def.kind !== Kind.OBJECT_TYPE_DEFINITION || !rootTypeNames.has(def.name.value) || !def.fields) {\n return def;\n }\n return {\n ...def,\n fields: def.fields.filter((field) => {\n if (!reachable.has(unwrapTypeName(field.type))) {\n return false;\n }\n return field.arguments?.every((arg) => reachable.has(unwrapTypeName(arg.type))) ?? true;\n }),\n };\n });\n\n return buildASTSchema({ kind: Kind.DOCUMENT, definitions: filteredDefinitions });\n}\n","import { Kind, type TypeNode } from 'graphql';\n\nexport function unwrapTypeName(typeNode: TypeNode): string {\n if (typeNode.kind === Kind.NAMED_TYPE) {\n return typeNode.name.value;\n }\n return unwrapTypeName(typeNode.type);\n}\n","import { type DocumentNode, type GraphQLNamedType, type GraphQLSchema, getNamedType, isInputObjectType, isInterfaceType, isObjectType, isUnionType, TypeInfo, visit, visitWithTypeInfo } from 'graphql';\nimport { BUILT_IN_SCALARS } from './consts';\n\nexport function collectReachableTypes(schema: GraphQLSchema, documents: DocumentNode[]): Set<string> {\n const reachable = new Set<string>();\n\n function addType(type: GraphQLNamedType | null | undefined): void {\n if (type == null) {\n return;\n }\n if (BUILT_IN_SCALARS.has(type.name)) {\n return;\n }\n if (reachable.has(type.name)) {\n return;\n }\n reachable.add(type.name);\n\n if (isInputObjectType(type)) {\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n }\n } else if (isObjectType(type) || isInterfaceType(type)) {\n // Must recurse into all fields to keep the filtered schema valid —\n // if a type is included, all types it references must also be included.\n for (const field of Object.values(type.getFields())) {\n addType(getNamedType(field.type));\n for (const arg of field.args) {\n addType(getNamedType(arg.type));\n }\n }\n if (isObjectType(type)) {\n for (const iface of type.getInterfaces()) {\n addType(iface);\n }\n }\n } else if (isUnionType(type)) {\n for (const member of type.getTypes()) {\n addType(member);\n }\n }\n }\n\n const typeInfo = new TypeInfo(schema);\n for (const doc of documents) {\n visit(\n doc,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition() {\n addType(getNamedType(typeInfo.getInputType()));\n },\n Field() {\n addType(getNamedType(typeInfo.getType()));\n const fieldDef = typeInfo.getFieldDef();\n if (fieldDef) {\n for (const arg of fieldDef.args) {\n addType(getNamedType(arg.type));\n }\n }\n },\n FragmentDefinition(node) {\n addType(schema.getType(node.typeCondition.name.value));\n },\n InlineFragment(node) {\n if (node.typeCondition) {\n addType(schema.getType(node.typeCondition.name.value));\n }\n },\n }),\n );\n }\n\n return reachable;\n}\n","export const BUILT_IN_SCALARS: Set<string> = new Set(['String', 'Int', 'Float', 'Boolean', 'ID']);\n","import { preset as clientPreset } from '@graphql-codegen/client-preset';\nimport type { Types } from '@graphql-codegen/plugin-helpers';\nimport { plugin as reachableTypesPlugin } from './plugin.js';\n\nexport const reachableTypesPreset: Types.OutputPreset = {\n prepareDocuments: clientPreset.prepareDocuments,\n buildGeneratesSection: async (options) => {\n const generates = await clientPreset.buildGeneratesSection(options);\n return generates.map((generate) => ({\n ...generate,\n pluginMap: {\n ...generate.pluginMap,\n typescript: { plugin: reachableTypesPlugin },\n },\n }));\n },\n};\n"],"mappings":"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","names":["Kind","Kind"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shellicar/graphql-codegen-treeshake",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A graphql-codegen preset that tree-shakes unused types from TypeScript output",
5
5
  "main": "./dist/cjs/index.cjs",
6
6
  "keywords": [
@@ -15,12 +15,13 @@
15
15
  "type": "module",
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "git+https://github.com/shellicar/graphql-codegen-treeshake.git"
18
+ "url": "git+https://github.com/shellicar/ecosystem.git",
19
+ "directory": "packages/graphql-codegen-treeshake"
19
20
  },
20
21
  "bugs": {
21
- "url": "https://github.com/shellicar/graphql-codegen-treeshake/issues"
22
+ "url": "https://github.com/shellicar/ecosystem/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22pkg%3A%20graphql-codegen-treeshake%22"
22
23
  },
23
- "homepage": "https://github.com/shellicar/graphql-codegen-treeshake#readme",
24
+ "homepage": "https://github.com/shellicar/ecosystem/tree/main/packages/graphql-codegen-treeshake#readme",
24
25
  "publishConfig": {
25
26
  "access": "public"
26
27
  },
@@ -43,27 +44,25 @@
43
44
  "*.md"
44
45
  ],
45
46
  "dependencies": {
46
- "@graphql-codegen/client-preset": "^5.2.4",
47
- "@graphql-codegen/typescript": "^5.0.9"
47
+ "@graphql-codegen/client-preset": "^5.3.0",
48
+ "@graphql-codegen/typescript": "^5.0.10"
48
49
  },
49
50
  "peerDependencies": {
50
51
  "graphql": "^16.12.0"
51
52
  },
52
53
  "devDependencies": {
53
- "@graphql-codegen/plugin-helpers": "^6.1.1",
54
- "@shellicar/build-clean": "^1.2.4",
55
- "@tsconfig/node22": "^22.0.5",
56
- "@types/node": "^25.4.0",
57
- "@vitest/coverage-v8": "^4.0.18",
58
- "graphql": "^16.13.1",
59
- "terser": "^5.46.0",
54
+ "@graphql-codegen/plugin-helpers": "^6.3.0",
55
+ "@types/node": "^25.6.0",
56
+ "@vitest/coverage-v8": "^4.1.4",
57
+ "graphql": "^16.13.2",
60
58
  "tsup": "^8.5.1",
61
59
  "typescript": "^5.9.3",
62
- "vitest": "^4.0.18"
60
+ "vitest": "^4.1.4",
61
+ "@shellicar/typescript-config": "^1.0.0"
63
62
  },
64
63
  "scripts": {
65
64
  "build": "tsup",
66
- "dev": "tsup --watch",
67
- "type-check": "tsc -p tsconfig.check.json"
65
+ "type-check": "tsc -p tsconfig.check.json",
66
+ "watch": "tsup --watch"
68
67
  }
69
68
  }