@soda-gql/plugin-common 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +76 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +12 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +75 -55
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
let __soda_gql_builder = require("@soda-gql/builder");
|
|
2
|
-
let __soda_gql_common = require("@soda-gql/common");
|
|
3
2
|
let __soda_gql_config = require("@soda-gql/config");
|
|
4
3
|
let node_path = require("node:path");
|
|
4
|
+
let __soda_gql_common = require("@soda-gql/common");
|
|
5
5
|
|
|
6
6
|
//#region packages/plugin-common/src/errors.ts
|
|
7
7
|
/**
|
|
@@ -24,58 +24,6 @@ const assertUnreachable = (value, context) => {
|
|
|
24
24
|
throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : ""}: received ${JSON.stringify(value)}`);
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region packages/plugin-common/src/plugin-session.ts
|
|
29
|
-
/**
|
|
30
|
-
* Create plugin session by loading config and creating cached builder service.
|
|
31
|
-
* Returns null if disabled or config load fails.
|
|
32
|
-
*/
|
|
33
|
-
const createPluginSession = (options, pluginName) => {
|
|
34
|
-
if (!(options.enabled ?? true)) return null;
|
|
35
|
-
const configResult = (0, __soda_gql_config.loadConfig)(options.configPath);
|
|
36
|
-
if (configResult.isErr()) {
|
|
37
|
-
console.error(`[${pluginName}] Failed to load config:`, {
|
|
38
|
-
code: configResult.error.code,
|
|
39
|
-
message: configResult.error.message,
|
|
40
|
-
filePath: configResult.error.filePath,
|
|
41
|
-
cause: configResult.error.cause
|
|
42
|
-
});
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const config = configResult.value;
|
|
46
|
-
const ensureBuilderService = (0, __soda_gql_common.cachedFn)(() => (0, __soda_gql_builder.createBuilderService)({ config }));
|
|
47
|
-
/**
|
|
48
|
-
* Build artifact on every invocation (like tsc-plugin).
|
|
49
|
-
* If artifact.useBuilder is false and artifact.path is provided, load from file instead.
|
|
50
|
-
* This ensures the artifact is always up-to-date with the latest source files.
|
|
51
|
-
*/
|
|
52
|
-
const getArtifact = () => {
|
|
53
|
-
const buildResult = ensureBuilderService().build();
|
|
54
|
-
if (buildResult.isErr()) {
|
|
55
|
-
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return buildResult.value;
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Async version of getArtifact.
|
|
62
|
-
* Supports async metadata factories and parallel element evaluation.
|
|
63
|
-
*/
|
|
64
|
-
const getArtifactAsync = async () => {
|
|
65
|
-
const buildResult = await ensureBuilderService().buildAsync();
|
|
66
|
-
if (buildResult.isErr()) {
|
|
67
|
-
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return buildResult.value;
|
|
71
|
-
};
|
|
72
|
-
return {
|
|
73
|
-
config,
|
|
74
|
-
getArtifact,
|
|
75
|
-
getArtifactAsync
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
|
|
79
27
|
//#endregion
|
|
80
28
|
//#region packages/plugin-common/src/shared-state.ts
|
|
81
29
|
const sharedStates = /* @__PURE__ */ new Map();
|
|
@@ -91,7 +39,8 @@ const getSharedState = (key) => {
|
|
|
91
39
|
moduleAdjacency: /* @__PURE__ */ new Map(),
|
|
92
40
|
generation: 0,
|
|
93
41
|
swcTransformer: null,
|
|
94
|
-
transformerType: null
|
|
42
|
+
transformerType: null,
|
|
43
|
+
builderService: null
|
|
95
44
|
};
|
|
96
45
|
sharedStates.set(key, state);
|
|
97
46
|
}
|
|
@@ -154,6 +103,77 @@ const setSharedTransformerType = (key, transformerType) => {
|
|
|
154
103
|
const getSharedTransformerType = (key) => {
|
|
155
104
|
return getSharedState(key).transformerType;
|
|
156
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Get shared BuilderService.
|
|
108
|
+
*/
|
|
109
|
+
const getSharedBuilderService = (key) => {
|
|
110
|
+
return getSharedState(key).builderService;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Set shared BuilderService.
|
|
114
|
+
*/
|
|
115
|
+
const setSharedBuilderService = (key, service) => {
|
|
116
|
+
getSharedState(key).builderService = service;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region packages/plugin-common/src/plugin-session.ts
|
|
121
|
+
/**
|
|
122
|
+
* Create plugin session by loading config and creating cached builder service.
|
|
123
|
+
* Returns null if disabled or config load fails.
|
|
124
|
+
*/
|
|
125
|
+
const createPluginSession = (options, pluginName) => {
|
|
126
|
+
if (!(options.enabled ?? true)) return null;
|
|
127
|
+
const configResult = (0, __soda_gql_config.loadConfig)(options.configPath);
|
|
128
|
+
if (configResult.isErr()) {
|
|
129
|
+
console.error(`[${pluginName}] Failed to load config:`, {
|
|
130
|
+
code: configResult.error.code,
|
|
131
|
+
message: configResult.error.message,
|
|
132
|
+
filePath: configResult.error.filePath,
|
|
133
|
+
cause: configResult.error.cause
|
|
134
|
+
});
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const config = configResult.value;
|
|
138
|
+
const stateKey = getStateKey(options.configPath);
|
|
139
|
+
const ensureBuilderService = () => {
|
|
140
|
+
const existing = getSharedBuilderService(stateKey);
|
|
141
|
+
if (existing) return existing;
|
|
142
|
+
const service = (0, __soda_gql_builder.createBuilderService)({ config });
|
|
143
|
+
setSharedBuilderService(stateKey, service);
|
|
144
|
+
return service;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Build artifact on every invocation (like tsc-plugin).
|
|
148
|
+
* If artifact.useBuilder is false and artifact.path is provided, load from file instead.
|
|
149
|
+
* This ensures the artifact is always up-to-date with the latest source files.
|
|
150
|
+
*/
|
|
151
|
+
const getArtifact = () => {
|
|
152
|
+
const buildResult = ensureBuilderService().build();
|
|
153
|
+
if (buildResult.isErr()) {
|
|
154
|
+
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return buildResult.value;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Async version of getArtifact.
|
|
161
|
+
* Supports async metadata factories and parallel element evaluation.
|
|
162
|
+
*/
|
|
163
|
+
const getArtifactAsync = async () => {
|
|
164
|
+
const buildResult = await ensureBuilderService().buildAsync();
|
|
165
|
+
if (buildResult.isErr()) {
|
|
166
|
+
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
return buildResult.value;
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
config,
|
|
173
|
+
getArtifact,
|
|
174
|
+
getArtifactAsync
|
|
175
|
+
};
|
|
176
|
+
};
|
|
157
177
|
|
|
158
178
|
//#endregion
|
|
159
179
|
//#region packages/plugin-common/src/utils/canonical-id.ts
|
|
@@ -170,6 +190,7 @@ exports.assertUnreachable = assertUnreachable;
|
|
|
170
190
|
exports.createPluginSession = createPluginSession;
|
|
171
191
|
exports.formatPluginError = formatPluginError;
|
|
172
192
|
exports.getSharedArtifact = getSharedArtifact;
|
|
193
|
+
exports.getSharedBuilderService = getSharedBuilderService;
|
|
173
194
|
exports.getSharedPluginSession = getSharedPluginSession;
|
|
174
195
|
exports.getSharedState = getSharedState;
|
|
175
196
|
exports.getSharedSwcTransformer = getSharedSwcTransformer;
|
|
@@ -178,6 +199,7 @@ exports.getStateKey = getStateKey;
|
|
|
178
199
|
exports.isPluginError = isPluginError;
|
|
179
200
|
exports.resolveCanonicalId = resolveCanonicalId;
|
|
180
201
|
exports.setSharedArtifact = setSharedArtifact;
|
|
202
|
+
exports.setSharedBuilderService = setSharedBuilderService;
|
|
181
203
|
exports.setSharedPluginSession = setSharedPluginSession;
|
|
182
204
|
exports.setSharedSwcTransformer = setSharedSwcTransformer;
|
|
183
205
|
exports.setSharedTransformerType = setSharedTransformerType;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/utils/canonical-id.ts"],"sourcesContent":["/**\n * Error types and formatters for plugin-babel.\n * Simplified from plugin-shared to include only types actually used by the Babel transformer.\n */\n\nimport type { BuilderError } from \"@soda-gql/builder\";\nimport type { CanonicalId } from \"@soda-gql/common\";\n\ntype OptionsInvalidBuilderConfig = { readonly code: \"INVALID_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsMissingBuilderConfig = { readonly code: \"MISSING_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsConfigLoadFailed = { readonly code: \"CONFIG_LOAD_FAILED\"; readonly message: string };\n\ntype BuilderEntryNotFound = Extract<BuilderError, { code: \"ENTRY_NOT_FOUND\" }>;\ntype BuilderDocDuplicate = Extract<BuilderError, { code: \"DOC_DUPLICATE\" }>;\ntype BuilderCircularDependency = Extract<BuilderError, { code: \"GRAPH_CIRCULAR_DEPENDENCY\" }>;\ntype BuilderModuleEvaluationFailed = Extract<BuilderError, { code: \"RUNTIME_MODULE_LOAD_FAILED\" }>;\ntype BuilderWriteFailed = Extract<BuilderError, { code: \"WRITE_FAILED\" }>;\n\ntype AnalysisMetadataMissingCause = { readonly filename: string };\ntype AnalysisArtifactMissingCause = { readonly filename: string; readonly canonicalId: CanonicalId };\ntype AnalysisUnsupportedArtifactTypeCause = {\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype PluginErrorBase<Code extends string, Cause> = {\n readonly type: \"PluginError\";\n readonly code: Code;\n readonly message: string;\n readonly cause: Cause;\n};\n\nexport type PluginOptionsInvalidBuilderConfigError = PluginErrorBase<\n \"OPTIONS_INVALID_BUILDER_CONFIG\",\n OptionsInvalidBuilderConfig | OptionsMissingBuilderConfig | OptionsConfigLoadFailed\n> & { readonly stage: \"normalize-options\" };\n\nexport type PluginBuilderEntryNotFoundError = PluginErrorBase<\"SODA_GQL_BUILDER_ENTRY_NOT_FOUND\", BuilderEntryNotFound> & {\n readonly stage: \"builder\";\n readonly entry: string;\n};\n\nexport type PluginBuilderDocDuplicateError = PluginErrorBase<\"SODA_GQL_BUILDER_DOC_DUPLICATE\", BuilderDocDuplicate> & {\n readonly stage: \"builder\";\n readonly name: string;\n readonly sources: readonly string[];\n};\n\nexport type PluginBuilderCircularDependencyError = PluginErrorBase<\n \"SODA_GQL_BUILDER_CIRCULAR_DEPENDENCY\",\n BuilderCircularDependency\n> & { readonly stage: \"builder\"; readonly chain: readonly string[] };\n\nexport type PluginBuilderModuleEvaluationFailedError = PluginErrorBase<\n \"SODA_GQL_BUILDER_MODULE_EVALUATION_FAILED\",\n BuilderModuleEvaluationFailed\n> & { readonly stage: \"builder\"; readonly filePath: string; readonly astPath: string };\n\nexport type PluginBuilderWriteFailedError = PluginErrorBase<\"SODA_GQL_BUILDER_WRITE_FAILED\", BuilderWriteFailed> & {\n readonly stage: \"builder\";\n readonly outPath: string;\n};\n\nexport type PluginBuilderUnexpectedError = PluginErrorBase<\"SODA_GQL_BUILDER_UNEXPECTED\", unknown> & {\n readonly stage: \"builder\";\n};\n\nexport type PluginAnalysisMetadataMissingError = PluginErrorBase<\"SODA_GQL_METADATA_NOT_FOUND\", AnalysisMetadataMissingCause> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n};\n\nexport type PluginAnalysisArtifactMissingError = PluginErrorBase<\n \"SODA_GQL_ANALYSIS_ARTIFACT_NOT_FOUND\",\n AnalysisArtifactMissingCause\n> & { readonly stage: \"analysis\"; readonly filename: string; readonly canonicalId: CanonicalId };\n\nexport type PluginAnalysisUnsupportedArtifactTypeError = PluginErrorBase<\n \"SODA_GQL_UNSUPPORTED_ARTIFACT_TYPE\",\n AnalysisUnsupportedArtifactTypeCause\n> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype TransformMissingBuilderArgCause = { readonly filename: string; readonly builderType: string; readonly argName: string };\ntype TransformUnsupportedValueTypeCause = { readonly valueType: string };\ntype TransformAstVisitorFailedCause = { readonly filename: string; readonly reason: string };\n\nexport type PluginTransformMissingBuilderArgError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_MISSING_BUILDER_ARG\",\n TransformMissingBuilderArgCause\n> & {\n readonly stage: \"transform\";\n readonly filename: string;\n readonly builderType: string;\n readonly argName: string;\n};\n\nexport type PluginTransformUnsupportedValueTypeError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_UNSUPPORTED_VALUE_TYPE\",\n TransformUnsupportedValueTypeCause\n> & { readonly stage: \"transform\"; readonly valueType: string };\n\nexport type PluginTransformAstVisitorFailedError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_AST_VISITOR_FAILED\",\n TransformAstVisitorFailedCause\n> & { readonly stage: \"transform\"; readonly filename: string; readonly reason: string };\n\n/**\n * Union of all plugin error types.\n */\nexport type PluginError =\n | PluginOptionsInvalidBuilderConfigError\n | PluginBuilderEntryNotFoundError\n | PluginBuilderDocDuplicateError\n | PluginBuilderCircularDependencyError\n | PluginBuilderModuleEvaluationFailedError\n | PluginBuilderWriteFailedError\n | PluginBuilderUnexpectedError\n | PluginAnalysisMetadataMissingError\n | PluginAnalysisArtifactMissingError\n | PluginAnalysisUnsupportedArtifactTypeError\n | PluginTransformMissingBuilderArgError\n | PluginTransformUnsupportedValueTypeError\n | PluginTransformAstVisitorFailedError;\n\n/**\n * Format a PluginError into a human-readable message.\n */\nexport const formatPluginError = (error: PluginError): string => {\n const codePrefix = `[${error.code}]`;\n const stageInfo = \"stage\" in error ? ` (${error.stage})` : \"\";\n return `${codePrefix}${stageInfo} ${error.message}`;\n};\n\n/**\n * Type guard for PluginError.\n */\nexport const isPluginError = (value: unknown): value is PluginError => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === \"PluginError\" &&\n \"code\" in value &&\n \"message\" in value\n );\n};\n\n/**\n * Assertion helper for unreachable code paths.\n * This is the ONLY acceptable throw in plugin code.\n */\nexport const assertUnreachable = (value: never, context?: string): never => {\n throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : \"\"}: received ${JSON.stringify(value)}`);\n};\n","/**\n * Plugin session management for all plugins.\n * Unified from plugin-babel and plugin-swc implementations.\n */\n\nimport type { BuilderArtifact } from \"@soda-gql/builder\";\nimport { createBuilderService } from \"@soda-gql/builder\";\nimport { cachedFn } from \"@soda-gql/common\";\nimport { loadConfig, type ResolvedSodaGqlConfig } from \"@soda-gql/config\";\n\n/**\n * Plugin options shared across all plugins.\n */\nexport type PluginOptions = {\n readonly configPath?: string;\n readonly enabled?: boolean;\n};\n\n/**\n * Plugin session containing builder service and configuration.\n */\nexport type PluginSession = {\n readonly config: ResolvedSodaGqlConfig;\n readonly getArtifact: () => BuilderArtifact | null;\n readonly getArtifactAsync: () => Promise<BuilderArtifact | null>;\n};\n\n/**\n * Create plugin session by loading config and creating cached builder service.\n * Returns null if disabled or config load fails.\n */\nexport const createPluginSession = (options: PluginOptions, pluginName: string): PluginSession | null => {\n const enabled = options.enabled ?? true;\n if (!enabled) {\n return null;\n }\n\n const configResult = loadConfig(options.configPath);\n if (configResult.isErr()) {\n console.error(`[${pluginName}] Failed to load config:`, {\n code: configResult.error.code,\n message: configResult.error.message,\n filePath: configResult.error.filePath,\n cause: configResult.error.cause,\n });\n return null;\n }\n\n const config = configResult.value;\n const ensureBuilderService = cachedFn(() => createBuilderService({ config }));\n\n /**\n * Build artifact on every invocation (like tsc-plugin).\n * If artifact.useBuilder is false and artifact.path is provided, load from file instead.\n * This ensures the artifact is always up-to-date with the latest source files.\n */\n const getArtifact = (): BuilderArtifact | null => {\n const builderService = ensureBuilderService();\n const buildResult = builderService.build();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n /**\n * Async version of getArtifact.\n * Supports async metadata factories and parallel element evaluation.\n */\n const getArtifactAsync = async (): Promise<BuilderArtifact | null> => {\n const builderService = ensureBuilderService();\n const buildResult = await builderService.buildAsync();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n return {\n config,\n getArtifact,\n getArtifactAsync,\n };\n};\n","import type { BuilderArtifact } from \"@soda-gql/builder\";\nimport type { PluginSession } from \"./plugin-session\";\n\n/**\n * Transformer type for code transformation.\n * - 'babel': Use Babel plugin (default, wider compatibility)\n * - 'swc': Use SWC transformer (faster, requires @soda-gql/swc-transformer)\n */\nexport type TransformerType = \"babel\" | \"swc\";\n\n/**\n * Minimal interface for SWC transformer.\n * Matches the Transformer interface from @soda-gql/swc-transformer.\n */\nexport interface SwcTransformerInterface {\n transform(input: { sourceCode: string; sourcePath: string; inputSourceMap?: string }): {\n transformed: boolean;\n sourceCode: string;\n sourceMap?: string;\n };\n}\n\n/**\n * Shared state between bundler plugins and loaders.\n * Enables efficient artifact sharing across build pipeline stages.\n */\nexport type SharedState = {\n pluginSession: PluginSession | null;\n currentArtifact: BuilderArtifact | null;\n moduleAdjacency: Map<string, Set<string>>;\n generation: number;\n swcTransformer: SwcTransformerInterface | null;\n transformerType: TransformerType | null;\n};\n\n// Global state for sharing between plugin and loader\nconst sharedStates = new Map<string, SharedState>();\n\n/**\n * Get shared state for a given project (identified by config path or cwd).\n */\nexport const getSharedState = (key: string): SharedState => {\n let state = sharedStates.get(key);\n if (!state) {\n state = {\n pluginSession: null,\n currentArtifact: null,\n moduleAdjacency: new Map(),\n generation: 0,\n swcTransformer: null,\n transformerType: null,\n };\n sharedStates.set(key, state);\n }\n return state;\n};\n\n/**\n * Update shared artifact.\n */\nexport const setSharedArtifact = (\n key: string,\n artifact: BuilderArtifact | null,\n moduleAdjacency?: Map<string, Set<string>>,\n): void => {\n const state = getSharedState(key);\n state.currentArtifact = artifact;\n if (moduleAdjacency) {\n state.moduleAdjacency = moduleAdjacency;\n }\n state.generation++;\n};\n\n/**\n * Get shared artifact.\n */\nexport const getSharedArtifact = (key: string): BuilderArtifact | null => {\n return getSharedState(key).currentArtifact;\n};\n\n/**\n * Get shared plugin session.\n */\nexport const getSharedPluginSession = (key: string): PluginSession | null => {\n return getSharedState(key).pluginSession;\n};\n\n/**\n * Set shared plugin session.\n */\nexport const setSharedPluginSession = (key: string, session: PluginSession | null): void => {\n getSharedState(key).pluginSession = session;\n};\n\n/**\n * Get the state key from config path or cwd.\n */\nexport const getStateKey = (configPath?: string): string => {\n return configPath ?? process.cwd();\n};\n\n/**\n * Set shared SWC transformer.\n */\nexport const setSharedSwcTransformer = (key: string, transformer: SwcTransformerInterface | null): void => {\n getSharedState(key).swcTransformer = transformer;\n};\n\n/**\n * Get shared SWC transformer.\n */\nexport const getSharedSwcTransformer = (key: string): SwcTransformerInterface | null => {\n return getSharedState(key).swcTransformer;\n};\n\n/**\n * Set shared transformer type.\n */\nexport const setSharedTransformerType = (key: string, transformerType: TransformerType | null): void => {\n getSharedState(key).transformerType = transformerType;\n};\n\n/**\n * Get shared transformer type.\n */\nexport const getSharedTransformerType = (key: string): TransformerType | null => {\n return getSharedState(key).transformerType;\n};\n","/**\n * Utility for working with canonical IDs.\n */\n\nimport { resolve } from \"node:path\";\nimport { type CanonicalId, createCanonicalId } from \"@soda-gql/common\";\n\n/**\n * Resolve a canonical ID from a filename and AST path.\n */\nexport const resolveCanonicalId = (filename: string, astPath: string): CanonicalId =>\n createCanonicalId(resolve(filename), astPath);\n"],"mappings":";;;;;;;;;AAqIA,MAAa,qBAAqB,UAA+B;AAG/D,QAAO,GAFY,IAAI,MAAM,KAAK,KAChB,WAAW,QAAQ,KAAK,MAAM,MAAM,KAAK,GAC1B,GAAG,MAAM;;;;;AAM5C,MAAa,iBAAiB,UAAyC;AACrE,QACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,iBACf,UAAU,SACV,aAAa;;;;;;AAQjB,MAAa,qBAAqB,OAAc,YAA4B;AAC1E,OAAM,IAAI,MAAM,mCAAmC,UAAU,OAAO,YAAY,GAAG,aAAa,KAAK,UAAU,MAAM,GAAG;;;;;;;;;AC/H1H,MAAa,uBAAuB,SAAwB,eAA6C;AAEvG,KAAI,EADY,QAAQ,WAAW,MAEjC,QAAO;CAGT,MAAM,iDAA0B,QAAQ,WAAW;AACnD,KAAI,aAAa,OAAO,EAAE;AACxB,UAAQ,MAAM,IAAI,WAAW,2BAA2B;GACtD,MAAM,aAAa,MAAM;GACzB,SAAS,aAAa,MAAM;GAC5B,UAAU,aAAa,MAAM;GAC7B,OAAO,aAAa,MAAM;GAC3B,CAAC;AACF,SAAO;;CAGT,MAAM,SAAS,aAAa;CAC5B,MAAM,0GAA2D,EAAE,QAAQ,CAAC,CAAC;;;;;;CAO7E,MAAM,oBAA4C;EAEhD,MAAM,cADiB,sBAAsB,CACV,OAAO;AAC1C,MAAI,YAAY,OAAO,EAAE;AACvB,WAAQ,MAAM,IAAI,WAAW,8BAA8B,YAAY,MAAM,UAAU;AACvF,UAAO;;AAET,SAAO,YAAY;;;;;;CAOrB,MAAM,mBAAmB,YAA6C;EAEpE,MAAM,cAAc,MADG,sBAAsB,CACJ,YAAY;AACrD,MAAI,YAAY,OAAO,EAAE;AACvB,WAAQ,MAAM,IAAI,WAAW,8BAA8B,YAAY,MAAM,UAAU;AACvF,UAAO;;AAET,SAAO,YAAY;;AAGrB,QAAO;EACL;EACA;EACA;EACD;;;;;AChDH,MAAM,+BAAe,IAAI,KAA0B;;;;AAKnD,MAAa,kBAAkB,QAA6B;CAC1D,IAAI,QAAQ,aAAa,IAAI,IAAI;AACjC,KAAI,CAAC,OAAO;AACV,UAAQ;GACN,eAAe;GACf,iBAAiB;GACjB,iCAAiB,IAAI,KAAK;GAC1B,YAAY;GACZ,gBAAgB;GAChB,iBAAiB;GAClB;AACD,eAAa,IAAI,KAAK,MAAM;;AAE9B,QAAO;;;;;AAMT,MAAa,qBACX,KACA,UACA,oBACS;CACT,MAAM,QAAQ,eAAe,IAAI;AACjC,OAAM,kBAAkB;AACxB,KAAI,gBACF,OAAM,kBAAkB;AAE1B,OAAM;;;;;AAMR,MAAa,qBAAqB,QAAwC;AACxE,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,0BAA0B,QAAsC;AAC3E,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,0BAA0B,KAAa,YAAwC;AAC1F,gBAAe,IAAI,CAAC,gBAAgB;;;;;AAMtC,MAAa,eAAe,eAAgC;AAC1D,QAAO,cAAc,QAAQ,KAAK;;;;;AAMpC,MAAa,2BAA2B,KAAa,gBAAsD;AACzG,gBAAe,IAAI,CAAC,iBAAiB;;;;;AAMvC,MAAa,2BAA2B,QAAgD;AACtF,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,4BAA4B,KAAa,oBAAkD;AACtG,gBAAe,IAAI,CAAC,kBAAkB;;;;;AAMxC,MAAa,4BAA4B,QAAwC;AAC/E,QAAO,eAAe,IAAI,CAAC;;;;;;;;;;;ACpH7B,MAAa,sBAAsB,UAAkB,4EACzB,SAAS,EAAE,QAAQ"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/errors.ts","../src/shared-state.ts","../src/plugin-session.ts","../src/utils/canonical-id.ts"],"sourcesContent":["/**\n * Error types and formatters for plugin-babel.\n * Simplified from plugin-shared to include only types actually used by the Babel transformer.\n */\n\nimport type { BuilderError } from \"@soda-gql/builder\";\nimport type { CanonicalId } from \"@soda-gql/common\";\n\ntype OptionsInvalidBuilderConfig = { readonly code: \"INVALID_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsMissingBuilderConfig = { readonly code: \"MISSING_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsConfigLoadFailed = { readonly code: \"CONFIG_LOAD_FAILED\"; readonly message: string };\n\ntype BuilderEntryNotFound = Extract<BuilderError, { code: \"ENTRY_NOT_FOUND\" }>;\ntype BuilderDocDuplicate = Extract<BuilderError, { code: \"DOC_DUPLICATE\" }>;\ntype BuilderCircularDependency = Extract<BuilderError, { code: \"GRAPH_CIRCULAR_DEPENDENCY\" }>;\ntype BuilderModuleEvaluationFailed = Extract<BuilderError, { code: \"RUNTIME_MODULE_LOAD_FAILED\" }>;\ntype BuilderWriteFailed = Extract<BuilderError, { code: \"WRITE_FAILED\" }>;\n\ntype AnalysisMetadataMissingCause = { readonly filename: string };\ntype AnalysisArtifactMissingCause = { readonly filename: string; readonly canonicalId: CanonicalId };\ntype AnalysisUnsupportedArtifactTypeCause = {\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype PluginErrorBase<Code extends string, Cause> = {\n readonly type: \"PluginError\";\n readonly code: Code;\n readonly message: string;\n readonly cause: Cause;\n};\n\nexport type PluginOptionsInvalidBuilderConfigError = PluginErrorBase<\n \"OPTIONS_INVALID_BUILDER_CONFIG\",\n OptionsInvalidBuilderConfig | OptionsMissingBuilderConfig | OptionsConfigLoadFailed\n> & { readonly stage: \"normalize-options\" };\n\nexport type PluginBuilderEntryNotFoundError = PluginErrorBase<\"SODA_GQL_BUILDER_ENTRY_NOT_FOUND\", BuilderEntryNotFound> & {\n readonly stage: \"builder\";\n readonly entry: string;\n};\n\nexport type PluginBuilderDocDuplicateError = PluginErrorBase<\"SODA_GQL_BUILDER_DOC_DUPLICATE\", BuilderDocDuplicate> & {\n readonly stage: \"builder\";\n readonly name: string;\n readonly sources: readonly string[];\n};\n\nexport type PluginBuilderCircularDependencyError = PluginErrorBase<\n \"SODA_GQL_BUILDER_CIRCULAR_DEPENDENCY\",\n BuilderCircularDependency\n> & { readonly stage: \"builder\"; readonly chain: readonly string[] };\n\nexport type PluginBuilderModuleEvaluationFailedError = PluginErrorBase<\n \"SODA_GQL_BUILDER_MODULE_EVALUATION_FAILED\",\n BuilderModuleEvaluationFailed\n> & { readonly stage: \"builder\"; readonly filePath: string; readonly astPath: string };\n\nexport type PluginBuilderWriteFailedError = PluginErrorBase<\"SODA_GQL_BUILDER_WRITE_FAILED\", BuilderWriteFailed> & {\n readonly stage: \"builder\";\n readonly outPath: string;\n};\n\nexport type PluginBuilderUnexpectedError = PluginErrorBase<\"SODA_GQL_BUILDER_UNEXPECTED\", unknown> & {\n readonly stage: \"builder\";\n};\n\nexport type PluginAnalysisMetadataMissingError = PluginErrorBase<\"SODA_GQL_METADATA_NOT_FOUND\", AnalysisMetadataMissingCause> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n};\n\nexport type PluginAnalysisArtifactMissingError = PluginErrorBase<\n \"SODA_GQL_ANALYSIS_ARTIFACT_NOT_FOUND\",\n AnalysisArtifactMissingCause\n> & { readonly stage: \"analysis\"; readonly filename: string; readonly canonicalId: CanonicalId };\n\nexport type PluginAnalysisUnsupportedArtifactTypeError = PluginErrorBase<\n \"SODA_GQL_UNSUPPORTED_ARTIFACT_TYPE\",\n AnalysisUnsupportedArtifactTypeCause\n> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype TransformMissingBuilderArgCause = { readonly filename: string; readonly builderType: string; readonly argName: string };\ntype TransformUnsupportedValueTypeCause = { readonly valueType: string };\ntype TransformAstVisitorFailedCause = { readonly filename: string; readonly reason: string };\n\nexport type PluginTransformMissingBuilderArgError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_MISSING_BUILDER_ARG\",\n TransformMissingBuilderArgCause\n> & {\n readonly stage: \"transform\";\n readonly filename: string;\n readonly builderType: string;\n readonly argName: string;\n};\n\nexport type PluginTransformUnsupportedValueTypeError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_UNSUPPORTED_VALUE_TYPE\",\n TransformUnsupportedValueTypeCause\n> & { readonly stage: \"transform\"; readonly valueType: string };\n\nexport type PluginTransformAstVisitorFailedError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_AST_VISITOR_FAILED\",\n TransformAstVisitorFailedCause\n> & { readonly stage: \"transform\"; readonly filename: string; readonly reason: string };\n\n/**\n * Union of all plugin error types.\n */\nexport type PluginError =\n | PluginOptionsInvalidBuilderConfigError\n | PluginBuilderEntryNotFoundError\n | PluginBuilderDocDuplicateError\n | PluginBuilderCircularDependencyError\n | PluginBuilderModuleEvaluationFailedError\n | PluginBuilderWriteFailedError\n | PluginBuilderUnexpectedError\n | PluginAnalysisMetadataMissingError\n | PluginAnalysisArtifactMissingError\n | PluginAnalysisUnsupportedArtifactTypeError\n | PluginTransformMissingBuilderArgError\n | PluginTransformUnsupportedValueTypeError\n | PluginTransformAstVisitorFailedError;\n\n/**\n * Format a PluginError into a human-readable message.\n */\nexport const formatPluginError = (error: PluginError): string => {\n const codePrefix = `[${error.code}]`;\n const stageInfo = \"stage\" in error ? ` (${error.stage})` : \"\";\n return `${codePrefix}${stageInfo} ${error.message}`;\n};\n\n/**\n * Type guard for PluginError.\n */\nexport const isPluginError = (value: unknown): value is PluginError => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === \"PluginError\" &&\n \"code\" in value &&\n \"message\" in value\n );\n};\n\n/**\n * Assertion helper for unreachable code paths.\n * This is the ONLY acceptable throw in plugin code.\n */\nexport const assertUnreachable = (value: never, context?: string): never => {\n throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : \"\"}: received ${JSON.stringify(value)}`);\n};\n","import type { BuilderArtifact, BuilderService } from \"@soda-gql/builder\";\nimport type { PluginSession } from \"./plugin-session\";\n\n/**\n * Transformer type for code transformation.\n * - 'babel': Use Babel plugin (default, wider compatibility)\n * - 'swc': Use SWC transformer (faster, requires @soda-gql/swc-transformer)\n */\nexport type TransformerType = \"babel\" | \"swc\";\n\n/**\n * Minimal interface for SWC transformer.\n * Matches the Transformer interface from @soda-gql/swc-transformer.\n */\nexport interface SwcTransformerInterface {\n transform(input: { sourceCode: string; sourcePath: string; inputSourceMap?: string }): {\n transformed: boolean;\n sourceCode: string;\n sourceMap?: string;\n };\n}\n\n/**\n * Shared state between bundler plugins and loaders.\n * Enables efficient artifact sharing across build pipeline stages.\n */\nexport type SharedState = {\n pluginSession: PluginSession | null;\n currentArtifact: BuilderArtifact | null;\n moduleAdjacency: Map<string, Set<string>>;\n generation: number;\n swcTransformer: SwcTransformerInterface | null;\n transformerType: TransformerType | null;\n builderService: BuilderService | null;\n};\n\n// Global state for sharing between plugin and loader\nconst sharedStates = new Map<string, SharedState>();\n\n/**\n * Get shared state for a given project (identified by config path or cwd).\n */\nexport const getSharedState = (key: string): SharedState => {\n let state = sharedStates.get(key);\n if (!state) {\n state = {\n pluginSession: null,\n currentArtifact: null,\n moduleAdjacency: new Map(),\n generation: 0,\n swcTransformer: null,\n transformerType: null,\n builderService: null,\n };\n sharedStates.set(key, state);\n }\n return state;\n};\n\n/**\n * Update shared artifact.\n */\nexport const setSharedArtifact = (\n key: string,\n artifact: BuilderArtifact | null,\n moduleAdjacency?: Map<string, Set<string>>,\n): void => {\n const state = getSharedState(key);\n state.currentArtifact = artifact;\n if (moduleAdjacency) {\n state.moduleAdjacency = moduleAdjacency;\n }\n state.generation++;\n};\n\n/**\n * Get shared artifact.\n */\nexport const getSharedArtifact = (key: string): BuilderArtifact | null => {\n return getSharedState(key).currentArtifact;\n};\n\n/**\n * Get shared plugin session.\n */\nexport const getSharedPluginSession = (key: string): PluginSession | null => {\n return getSharedState(key).pluginSession;\n};\n\n/**\n * Set shared plugin session.\n */\nexport const setSharedPluginSession = (key: string, session: PluginSession | null): void => {\n getSharedState(key).pluginSession = session;\n};\n\n/**\n * Get the state key from config path or cwd.\n */\nexport const getStateKey = (configPath?: string): string => {\n return configPath ?? process.cwd();\n};\n\n/**\n * Set shared SWC transformer.\n */\nexport const setSharedSwcTransformer = (key: string, transformer: SwcTransformerInterface | null): void => {\n getSharedState(key).swcTransformer = transformer;\n};\n\n/**\n * Get shared SWC transformer.\n */\nexport const getSharedSwcTransformer = (key: string): SwcTransformerInterface | null => {\n return getSharedState(key).swcTransformer;\n};\n\n/**\n * Set shared transformer type.\n */\nexport const setSharedTransformerType = (key: string, transformerType: TransformerType | null): void => {\n getSharedState(key).transformerType = transformerType;\n};\n\n/**\n * Get shared transformer type.\n */\nexport const getSharedTransformerType = (key: string): TransformerType | null => {\n return getSharedState(key).transformerType;\n};\n\n/**\n * Get shared BuilderService.\n */\nexport const getSharedBuilderService = (key: string): BuilderService | null => {\n return getSharedState(key).builderService;\n};\n\n/**\n * Set shared BuilderService.\n */\nexport const setSharedBuilderService = (key: string, service: BuilderService | null): void => {\n getSharedState(key).builderService = service;\n};\n","/**\n * Plugin session management for all plugins.\n * Unified from plugin-babel and plugin-swc implementations.\n */\n\nimport type { BuilderArtifact, BuilderService } from \"@soda-gql/builder\";\nimport { createBuilderService } from \"@soda-gql/builder\";\nimport { loadConfig, type ResolvedSodaGqlConfig } from \"@soda-gql/config\";\nimport { getSharedBuilderService, getStateKey, setSharedBuilderService } from \"./shared-state\";\n\n/**\n * Plugin options shared across all plugins.\n */\nexport type PluginOptions = {\n readonly configPath?: string;\n readonly enabled?: boolean;\n};\n\n/**\n * Plugin session containing builder service and configuration.\n */\nexport type PluginSession = {\n readonly config: ResolvedSodaGqlConfig;\n readonly getArtifact: () => BuilderArtifact | null;\n readonly getArtifactAsync: () => Promise<BuilderArtifact | null>;\n};\n\n/**\n * Create plugin session by loading config and creating cached builder service.\n * Returns null if disabled or config load fails.\n */\nexport const createPluginSession = (options: PluginOptions, pluginName: string): PluginSession | null => {\n const enabled = options.enabled ?? true;\n if (!enabled) {\n return null;\n }\n\n const configResult = loadConfig(options.configPath);\n if (configResult.isErr()) {\n console.error(`[${pluginName}] Failed to load config:`, {\n code: configResult.error.code,\n message: configResult.error.message,\n filePath: configResult.error.filePath,\n cause: configResult.error.cause,\n });\n return null;\n }\n\n const config = configResult.value;\n const stateKey = getStateKey(options.configPath);\n\n // Use global BuilderService cache to share FileTracker state across plugin instances\n const ensureBuilderService = (): BuilderService => {\n const existing = getSharedBuilderService(stateKey);\n if (existing) {\n return existing;\n }\n\n const service = createBuilderService({ config });\n setSharedBuilderService(stateKey, service);\n return service;\n };\n\n /**\n * Build artifact on every invocation (like tsc-plugin).\n * If artifact.useBuilder is false and artifact.path is provided, load from file instead.\n * This ensures the artifact is always up-to-date with the latest source files.\n */\n const getArtifact = (): BuilderArtifact | null => {\n const builderService = ensureBuilderService();\n const buildResult = builderService.build();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n /**\n * Async version of getArtifact.\n * Supports async metadata factories and parallel element evaluation.\n */\n const getArtifactAsync = async (): Promise<BuilderArtifact | null> => {\n const builderService = ensureBuilderService();\n const buildResult = await builderService.buildAsync();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n return {\n config,\n getArtifact,\n getArtifactAsync,\n };\n};\n","/**\n * Utility for working with canonical IDs.\n */\n\nimport { resolve } from \"node:path\";\nimport { type CanonicalId, createCanonicalId } from \"@soda-gql/common\";\n\n/**\n * Resolve a canonical ID from a filename and AST path.\n */\nexport const resolveCanonicalId = (filename: string, astPath: string): CanonicalId =>\n createCanonicalId(resolve(filename), astPath);\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BuilderArtifact, BuilderArtifactFragment, BuilderArtifactOperation, BuilderError } from "@soda-gql/builder";
|
|
1
|
+
import { BuilderArtifact, BuilderArtifactFragment, BuilderArtifactOperation, BuilderError, BuilderService } from "@soda-gql/builder";
|
|
2
2
|
import { CanonicalId } from "@soda-gql/common";
|
|
3
3
|
import { ResolvedSodaGqlConfig } from "@soda-gql/config";
|
|
4
4
|
|
|
@@ -192,6 +192,7 @@ type SharedState = {
|
|
|
192
192
|
generation: number;
|
|
193
193
|
swcTransformer: SwcTransformerInterface | null;
|
|
194
194
|
transformerType: TransformerType | null;
|
|
195
|
+
builderService: BuilderService | null;
|
|
195
196
|
};
|
|
196
197
|
/**
|
|
197
198
|
* Get shared state for a given project (identified by config path or cwd).
|
|
@@ -233,6 +234,14 @@ declare const setSharedTransformerType: (key: string, transformerType: Transform
|
|
|
233
234
|
* Get shared transformer type.
|
|
234
235
|
*/
|
|
235
236
|
declare const getSharedTransformerType: (key: string) => TransformerType | null;
|
|
237
|
+
/**
|
|
238
|
+
* Get shared BuilderService.
|
|
239
|
+
*/
|
|
240
|
+
declare const getSharedBuilderService: (key: string) => BuilderService | null;
|
|
241
|
+
/**
|
|
242
|
+
* Set shared BuilderService.
|
|
243
|
+
*/
|
|
244
|
+
declare const setSharedBuilderService: (key: string, service: BuilderService | null) => void;
|
|
236
245
|
//#endregion
|
|
237
246
|
//#region packages/plugin-common/src/types/gql-call.d.ts
|
|
238
247
|
/**
|
|
@@ -280,5 +289,5 @@ type GqlDefinitionMetadata = {
|
|
|
280
289
|
*/
|
|
281
290
|
declare const resolveCanonicalId: (filename: string, astPath: string) => CanonicalId;
|
|
282
291
|
//#endregion
|
|
283
|
-
export { type GqlCall, type GqlCallBase, type GqlCallFragment, type GqlCallOperation, type GqlDefinitionMetadata, PluginAnalysisArtifactMissingError, PluginAnalysisMetadataMissingError, PluginAnalysisUnsupportedArtifactTypeError, PluginBuilderCircularDependencyError, PluginBuilderDocDuplicateError, PluginBuilderEntryNotFoundError, PluginBuilderModuleEvaluationFailedError, PluginBuilderUnexpectedError, PluginBuilderWriteFailedError, PluginError, PluginOptions, PluginOptionsInvalidBuilderConfigError, PluginSession, PluginTransformAstVisitorFailedError, PluginTransformMissingBuilderArgError, PluginTransformUnsupportedValueTypeError, SharedState, SwcTransformerInterface, TransformerType, assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
292
|
+
export { type GqlCall, type GqlCallBase, type GqlCallFragment, type GqlCallOperation, type GqlDefinitionMetadata, PluginAnalysisArtifactMissingError, PluginAnalysisMetadataMissingError, PluginAnalysisUnsupportedArtifactTypeError, PluginBuilderCircularDependencyError, PluginBuilderDocDuplicateError, PluginBuilderEntryNotFoundError, PluginBuilderModuleEvaluationFailedError, PluginBuilderUnexpectedError, PluginBuilderWriteFailedError, PluginError, PluginOptions, PluginOptionsInvalidBuilderConfigError, PluginSession, PluginTransformAstVisitorFailedError, PluginTransformMissingBuilderArgError, PluginTransformUnsupportedValueTypeError, SharedState, SwcTransformerInterface, TransformerType, assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedBuilderService, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedBuilderService, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
284
293
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/types/gql-call.ts","../src/types/metadata.ts","../src/utils/canonical-id.ts"],"sourcesContent":[],"mappings":";;;;;;AAQgC,KAA3B,2BAAA,GAC2B;EAC3B,SAAA,IAAA,EAAA,wBAAuB;EAEvB,SAAA,OAAA,EAAA,MAAoB;AAAU,CAAA;AACD,KAJ7B,2BAAA,GAKyB;EACzB,SAAA,IAAA,EAAA,wBAA6B;EAC7B,SAAA,OAAA,EAAA,MAAkB;AAAU,CAAA;AAEA,KAR5B,uBAAA,GASA;EACA,SAAA,IAAA,EAAA,oBAAA;EAMA,SAAA,OAAA,EAAe,MAAA;AAOpB,CAAA;KArBK,oBAAA,GAAuB,OAuB1B,CAvBkC,YAuBlC,EAAA;EAA8B,IAAA,EAAA,iBAAA;CAA8B,CAAA;KAtBzD,mBAAA,GAAsB,OAoB0B,CApBlB,YAoBkB,EAAA;EAAe,IAAA,EAAA,eAAA;AAKpE,CAAA,CAAA;AAKA,KA7BK,yBAAA,GAA4B,OA6BS,CA7BD,YA6BsD,EAAA;EAMnF,IAAA,EAAA,2BAAA;AAKZ,CAAA,CAAA;AAKA,KA5CK,6BAAA,GAAgC,OA4CI,CA5CI,YA4CgD,EAAA;EAKjF,IAAA,EAAA,4BAA4B;AAIxC,CAAA,CAAA;AAKA,KAzDK,kBAAA,GAAqB,OAyDd,CAzDsB,YAyDY,EAAA;EAE5C,IAAA,EAAA,cAAA;CAF+C,CAAA;KAvD5C,4BAAA,GA0D8E;EAAW,SAAA,QAAA,EAAA,MAAA;AAE9F,CAAA;KA3DK,4BAAA,GA6DH;EAFuD,SAAA,QAAA,EAAA,MAAA;EAMjC,SAAA,WAAA,EAjE+D,WAiE/D;CAAW;AAEjC,KAlEG,oCAAA,GAoE+B;EAC/B,SAAA,QAAA,EAAA,MAAA;EACA,SAAA,WAAA,EApEmB,WAoEW;EAEvB,SAAA,YAAA,EAAA,MAAA;AAUZ,CAAA;AAKA,KAjFK,eAiFO,CAAA,aAAA,MAAA,EAAA,KAAoC,CAAA,GAAA;EAQpC,SAAA,IAAA,EAAW,aAAA;EACnB,SAAA,IAAA,EAxFa,IAwFb;EACA,SAAA,OAAA,EAAA,MAAA;EACA,SAAA,KAAA,EAxFc,KAwFd;CACA;AACA,KAvFQ,sCAAA,GAAyC,eAuFjD,CAAA,gCAAA,EArFF,2BAqFE,GArF4B,2BAqF5B,GArF0D,uBAqF1D,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,mBAAA;CACA;AACA,KArFQ,+BAAA,GAAkC,eAqF1C,CAAA,kCAAA,EArF8F,oBAqF9F,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,SAAA;EACA,SAAA,KAAA,EAAA,MAAA;CACA;AACA,KApFQ,8BAAA,GAAiC,eAoFzC,CAAA,gCAAA,EApF2F,mBAoF3F,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,SAAA;EAAoC,SAAA,IAAA,EAAA,MAAA;EAK3B,SAAA,OAAA,EAAA,SAIZ,MAJwC,EAAA;AASzC,CAAA;AAea,KA5GD,oCAAA,GAAuC,eA8GlD,CAAA,sCAAA,EA5GC,yBA4GD,CAAA,GAAA;;;;AClJW,KDyCA,wCAAA,GAA2C,eCzC9B,CAAA,2CAAA,ED2CvB,6BC3CuB,CAAA,GAAA;EAQb,SAAA,KAAA,EAAa,SAAA;EACN,SAAA,QAAA,EAAA,MAAA;EACW,SAAA,OAAA,EAAA,MAAA;CACa;AAAR,KDmCvB,6BAAA,GAAgC,eCnCT,CAAA,+BAAA,EDmC0D,kBCnC1D,CAAA,GAAA;EAAO,SAAA,KAAA,EAAA,SAAA;EAO7B,SAAA,OAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/types/gql-call.ts","../src/types/metadata.ts","../src/utils/canonical-id.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BuilderArtifact, BuilderArtifactFragment, BuilderArtifactOperation, BuilderError } from "@soda-gql/builder";
|
|
2
|
-
import { CanonicalId } from "@soda-gql/common";
|
|
1
|
+
import { BuilderArtifact, BuilderArtifactFragment, BuilderArtifactOperation, BuilderError, BuilderService } from "@soda-gql/builder";
|
|
3
2
|
import { ResolvedSodaGqlConfig } from "@soda-gql/config";
|
|
3
|
+
import { CanonicalId } from "@soda-gql/common";
|
|
4
4
|
|
|
5
5
|
//#region packages/plugin-common/src/errors.d.ts
|
|
6
6
|
|
|
@@ -192,6 +192,7 @@ type SharedState = {
|
|
|
192
192
|
generation: number;
|
|
193
193
|
swcTransformer: SwcTransformerInterface | null;
|
|
194
194
|
transformerType: TransformerType | null;
|
|
195
|
+
builderService: BuilderService | null;
|
|
195
196
|
};
|
|
196
197
|
/**
|
|
197
198
|
* Get shared state for a given project (identified by config path or cwd).
|
|
@@ -233,6 +234,14 @@ declare const setSharedTransformerType: (key: string, transformerType: Transform
|
|
|
233
234
|
* Get shared transformer type.
|
|
234
235
|
*/
|
|
235
236
|
declare const getSharedTransformerType: (key: string) => TransformerType | null;
|
|
237
|
+
/**
|
|
238
|
+
* Get shared BuilderService.
|
|
239
|
+
*/
|
|
240
|
+
declare const getSharedBuilderService: (key: string) => BuilderService | null;
|
|
241
|
+
/**
|
|
242
|
+
* Set shared BuilderService.
|
|
243
|
+
*/
|
|
244
|
+
declare const setSharedBuilderService: (key: string, service: BuilderService | null) => void;
|
|
236
245
|
//#endregion
|
|
237
246
|
//#region packages/plugin-common/src/types/gql-call.d.ts
|
|
238
247
|
/**
|
|
@@ -280,5 +289,5 @@ type GqlDefinitionMetadata = {
|
|
|
280
289
|
*/
|
|
281
290
|
declare const resolveCanonicalId: (filename: string, astPath: string) => CanonicalId;
|
|
282
291
|
//#endregion
|
|
283
|
-
export { type GqlCall, type GqlCallBase, type GqlCallFragment, type GqlCallOperation, type GqlDefinitionMetadata, PluginAnalysisArtifactMissingError, PluginAnalysisMetadataMissingError, PluginAnalysisUnsupportedArtifactTypeError, PluginBuilderCircularDependencyError, PluginBuilderDocDuplicateError, PluginBuilderEntryNotFoundError, PluginBuilderModuleEvaluationFailedError, PluginBuilderUnexpectedError, PluginBuilderWriteFailedError, PluginError, PluginOptions, PluginOptionsInvalidBuilderConfigError, PluginSession, PluginTransformAstVisitorFailedError, PluginTransformMissingBuilderArgError, PluginTransformUnsupportedValueTypeError, SharedState, SwcTransformerInterface, TransformerType, assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
292
|
+
export { type GqlCall, type GqlCallBase, type GqlCallFragment, type GqlCallOperation, type GqlDefinitionMetadata, PluginAnalysisArtifactMissingError, PluginAnalysisMetadataMissingError, PluginAnalysisUnsupportedArtifactTypeError, PluginBuilderCircularDependencyError, PluginBuilderDocDuplicateError, PluginBuilderEntryNotFoundError, PluginBuilderModuleEvaluationFailedError, PluginBuilderUnexpectedError, PluginBuilderWriteFailedError, PluginError, PluginOptions, PluginOptionsInvalidBuilderConfigError, PluginSession, PluginTransformAstVisitorFailedError, PluginTransformMissingBuilderArgError, PluginTransformUnsupportedValueTypeError, SharedState, SwcTransformerInterface, TransformerType, assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedBuilderService, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedBuilderService, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
284
293
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/types/gql-call.ts","../src/types/metadata.ts","../src/utils/canonical-id.ts"],"sourcesContent":[],"mappings":";;;;;;AAQgC,KAA3B,2BAAA,GAC2B;EAC3B,SAAA,IAAA,EAAA,wBAAuB;EAEvB,SAAA,OAAA,EAAA,MAAoB;AAAU,CAAA;AACD,KAJ7B,2BAAA,GAKyB;EACzB,SAAA,IAAA,EAAA,wBAA6B;EAC7B,SAAA,OAAA,EAAA,MAAkB;AAAU,CAAA;AAEA,KAR5B,uBAAA,GASA;EACA,SAAA,IAAA,EAAA,oBAAA;EAMA,SAAA,OAAA,EAAe,MAAA;AAOpB,CAAA;KArBK,oBAAA,GAAuB,OAuB1B,CAvBkC,YAuBlC,EAAA;EAA8B,IAAA,EAAA,iBAAA;CAA8B,CAAA;KAtBzD,mBAAA,GAAsB,OAoB0B,CApBlB,YAoBkB,EAAA;EAAe,IAAA,EAAA,eAAA;AAKpE,CAAA,CAAA;AAKA,KA7BK,yBAAA,GAA4B,OA6BS,CA7BD,YA6BsD,EAAA;EAMnF,IAAA,EAAA,2BAAA;AAKZ,CAAA,CAAA;AAKA,KA5CK,6BAAA,GAAgC,OA4CI,CA5CI,YA4CgD,EAAA;EAKjF,IAAA,EAAA,4BAA4B;AAIxC,CAAA,CAAA;AAKA,KAzDK,kBAAA,GAAqB,OAyDd,CAzDsB,YAyDY,EAAA;EAE5C,IAAA,EAAA,cAAA;CAF+C,CAAA;KAvD5C,4BAAA,GA0D8E;EAAW,SAAA,QAAA,EAAA,MAAA;AAE9F,CAAA;KA3DK,4BAAA,GA6DH;EAFuD,SAAA,QAAA,EAAA,MAAA;EAMjC,SAAA,WAAA,EAjE+D,WAiE/D;CAAW;AAEjC,KAlEG,oCAAA,GAoE+B;EAC/B,SAAA,QAAA,EAAA,MAAA;EACA,SAAA,WAAA,EApEmB,WAoEW;EAEvB,SAAA,YAAA,EAAA,MAAA;AAUZ,CAAA;AAKA,KAjFK,eAiFO,CAAA,aAAA,MAAA,EAAA,KAAoC,CAAA,GAAA;EAQpC,SAAA,IAAA,EAAW,aAAA;EACnB,SAAA,IAAA,EAxFa,IAwFb;EACA,SAAA,OAAA,EAAA,MAAA;EACA,SAAA,KAAA,EAxFc,KAwFd;CACA;AACA,KAvFQ,sCAAA,GAAyC,eAuFjD,CAAA,gCAAA,EArFF,2BAqFE,GArF4B,2BAqF5B,GArF0D,uBAqF1D,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,mBAAA;CACA;AACA,KArFQ,+BAAA,GAAkC,eAqF1C,CAAA,kCAAA,EArF8F,oBAqF9F,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,SAAA;EACA,SAAA,KAAA,EAAA,MAAA;CACA;AACA,KApFQ,8BAAA,GAAiC,eAoFzC,CAAA,gCAAA,EApF2F,mBAoF3F,CAAA,GAAA;EACA,SAAA,KAAA,EAAA,SAAA;EAAoC,SAAA,IAAA,EAAA,MAAA;EAK3B,SAAA,OAAA,EAAA,SAIZ,MAJwC,EAAA;AASzC,CAAA;AAea,KA5GD,oCAAA,GAAuC,eA8GlD,CAAA,sCAAA,EA5GC,yBA4GD,CAAA,GAAA;;;;AClJW,KDyCA,wCAAA,GAA2C,eCzC9B,CAAA,2CAAA,ED2CvB,6BC3CuB,CAAA,GAAA;EAQb,SAAA,KAAA,EAAa,SAAA;EACN,SAAA,QAAA,EAAA,MAAA;EACW,SAAA,OAAA,EAAA,MAAA;CACa;AAAR,KDmCvB,6BAAA,GAAgC,eCnCT,CAAA,+BAAA,EDmC0D,kBCnC1D,CAAA,GAAA;EAAO,SAAA,KAAA,EAAA,SAAA;EAO7B,SAAA,OAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/types/gql-call.ts","../src/types/metadata.ts","../src/utils/canonical-id.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createBuilderService } from "@soda-gql/builder";
|
|
2
|
-
import { cachedFn, createCanonicalId } from "@soda-gql/common";
|
|
3
2
|
import { loadConfig } from "@soda-gql/config";
|
|
4
3
|
import { resolve } from "node:path";
|
|
4
|
+
import { createCanonicalId } from "@soda-gql/common";
|
|
5
5
|
|
|
6
6
|
//#region packages/plugin-common/src/errors.ts
|
|
7
7
|
/**
|
|
@@ -24,58 +24,6 @@ const assertUnreachable = (value, context) => {
|
|
|
24
24
|
throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : ""}: received ${JSON.stringify(value)}`);
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region packages/plugin-common/src/plugin-session.ts
|
|
29
|
-
/**
|
|
30
|
-
* Create plugin session by loading config and creating cached builder service.
|
|
31
|
-
* Returns null if disabled or config load fails.
|
|
32
|
-
*/
|
|
33
|
-
const createPluginSession = (options, pluginName) => {
|
|
34
|
-
if (!(options.enabled ?? true)) return null;
|
|
35
|
-
const configResult = loadConfig(options.configPath);
|
|
36
|
-
if (configResult.isErr()) {
|
|
37
|
-
console.error(`[${pluginName}] Failed to load config:`, {
|
|
38
|
-
code: configResult.error.code,
|
|
39
|
-
message: configResult.error.message,
|
|
40
|
-
filePath: configResult.error.filePath,
|
|
41
|
-
cause: configResult.error.cause
|
|
42
|
-
});
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const config = configResult.value;
|
|
46
|
-
const ensureBuilderService = cachedFn(() => createBuilderService({ config }));
|
|
47
|
-
/**
|
|
48
|
-
* Build artifact on every invocation (like tsc-plugin).
|
|
49
|
-
* If artifact.useBuilder is false and artifact.path is provided, load from file instead.
|
|
50
|
-
* This ensures the artifact is always up-to-date with the latest source files.
|
|
51
|
-
*/
|
|
52
|
-
const getArtifact = () => {
|
|
53
|
-
const buildResult = ensureBuilderService().build();
|
|
54
|
-
if (buildResult.isErr()) {
|
|
55
|
-
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return buildResult.value;
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Async version of getArtifact.
|
|
62
|
-
* Supports async metadata factories and parallel element evaluation.
|
|
63
|
-
*/
|
|
64
|
-
const getArtifactAsync = async () => {
|
|
65
|
-
const buildResult = await ensureBuilderService().buildAsync();
|
|
66
|
-
if (buildResult.isErr()) {
|
|
67
|
-
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return buildResult.value;
|
|
71
|
-
};
|
|
72
|
-
return {
|
|
73
|
-
config,
|
|
74
|
-
getArtifact,
|
|
75
|
-
getArtifactAsync
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
|
|
79
27
|
//#endregion
|
|
80
28
|
//#region packages/plugin-common/src/shared-state.ts
|
|
81
29
|
const sharedStates = /* @__PURE__ */ new Map();
|
|
@@ -91,7 +39,8 @@ const getSharedState = (key) => {
|
|
|
91
39
|
moduleAdjacency: /* @__PURE__ */ new Map(),
|
|
92
40
|
generation: 0,
|
|
93
41
|
swcTransformer: null,
|
|
94
|
-
transformerType: null
|
|
42
|
+
transformerType: null,
|
|
43
|
+
builderService: null
|
|
95
44
|
};
|
|
96
45
|
sharedStates.set(key, state);
|
|
97
46
|
}
|
|
@@ -154,6 +103,77 @@ const setSharedTransformerType = (key, transformerType) => {
|
|
|
154
103
|
const getSharedTransformerType = (key) => {
|
|
155
104
|
return getSharedState(key).transformerType;
|
|
156
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Get shared BuilderService.
|
|
108
|
+
*/
|
|
109
|
+
const getSharedBuilderService = (key) => {
|
|
110
|
+
return getSharedState(key).builderService;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Set shared BuilderService.
|
|
114
|
+
*/
|
|
115
|
+
const setSharedBuilderService = (key, service) => {
|
|
116
|
+
getSharedState(key).builderService = service;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region packages/plugin-common/src/plugin-session.ts
|
|
121
|
+
/**
|
|
122
|
+
* Create plugin session by loading config and creating cached builder service.
|
|
123
|
+
* Returns null if disabled or config load fails.
|
|
124
|
+
*/
|
|
125
|
+
const createPluginSession = (options, pluginName) => {
|
|
126
|
+
if (!(options.enabled ?? true)) return null;
|
|
127
|
+
const configResult = loadConfig(options.configPath);
|
|
128
|
+
if (configResult.isErr()) {
|
|
129
|
+
console.error(`[${pluginName}] Failed to load config:`, {
|
|
130
|
+
code: configResult.error.code,
|
|
131
|
+
message: configResult.error.message,
|
|
132
|
+
filePath: configResult.error.filePath,
|
|
133
|
+
cause: configResult.error.cause
|
|
134
|
+
});
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const config = configResult.value;
|
|
138
|
+
const stateKey = getStateKey(options.configPath);
|
|
139
|
+
const ensureBuilderService = () => {
|
|
140
|
+
const existing = getSharedBuilderService(stateKey);
|
|
141
|
+
if (existing) return existing;
|
|
142
|
+
const service = createBuilderService({ config });
|
|
143
|
+
setSharedBuilderService(stateKey, service);
|
|
144
|
+
return service;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Build artifact on every invocation (like tsc-plugin).
|
|
148
|
+
* If artifact.useBuilder is false and artifact.path is provided, load from file instead.
|
|
149
|
+
* This ensures the artifact is always up-to-date with the latest source files.
|
|
150
|
+
*/
|
|
151
|
+
const getArtifact = () => {
|
|
152
|
+
const buildResult = ensureBuilderService().build();
|
|
153
|
+
if (buildResult.isErr()) {
|
|
154
|
+
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return buildResult.value;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Async version of getArtifact.
|
|
161
|
+
* Supports async metadata factories and parallel element evaluation.
|
|
162
|
+
*/
|
|
163
|
+
const getArtifactAsync = async () => {
|
|
164
|
+
const buildResult = await ensureBuilderService().buildAsync();
|
|
165
|
+
if (buildResult.isErr()) {
|
|
166
|
+
console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
return buildResult.value;
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
config,
|
|
173
|
+
getArtifact,
|
|
174
|
+
getArtifactAsync
|
|
175
|
+
};
|
|
176
|
+
};
|
|
157
177
|
|
|
158
178
|
//#endregion
|
|
159
179
|
//#region packages/plugin-common/src/utils/canonical-id.ts
|
|
@@ -166,5 +186,5 @@ const getSharedTransformerType = (key) => {
|
|
|
166
186
|
const resolveCanonicalId = (filename, astPath) => createCanonicalId(resolve(filename), astPath);
|
|
167
187
|
|
|
168
188
|
//#endregion
|
|
169
|
-
export { assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
189
|
+
export { assertUnreachable, createPluginSession, formatPluginError, getSharedArtifact, getSharedBuilderService, getSharedPluginSession, getSharedState, getSharedSwcTransformer, getSharedTransformerType, getStateKey, isPluginError, resolveCanonicalId, setSharedArtifact, setSharedBuilderService, setSharedPluginSession, setSharedSwcTransformer, setSharedTransformerType };
|
|
170
190
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/errors.ts","../src/plugin-session.ts","../src/shared-state.ts","../src/utils/canonical-id.ts"],"sourcesContent":["/**\n * Error types and formatters for plugin-babel.\n * Simplified from plugin-shared to include only types actually used by the Babel transformer.\n */\n\nimport type { BuilderError } from \"@soda-gql/builder\";\nimport type { CanonicalId } from \"@soda-gql/common\";\n\ntype OptionsInvalidBuilderConfig = { readonly code: \"INVALID_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsMissingBuilderConfig = { readonly code: \"MISSING_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsConfigLoadFailed = { readonly code: \"CONFIG_LOAD_FAILED\"; readonly message: string };\n\ntype BuilderEntryNotFound = Extract<BuilderError, { code: \"ENTRY_NOT_FOUND\" }>;\ntype BuilderDocDuplicate = Extract<BuilderError, { code: \"DOC_DUPLICATE\" }>;\ntype BuilderCircularDependency = Extract<BuilderError, { code: \"GRAPH_CIRCULAR_DEPENDENCY\" }>;\ntype BuilderModuleEvaluationFailed = Extract<BuilderError, { code: \"RUNTIME_MODULE_LOAD_FAILED\" }>;\ntype BuilderWriteFailed = Extract<BuilderError, { code: \"WRITE_FAILED\" }>;\n\ntype AnalysisMetadataMissingCause = { readonly filename: string };\ntype AnalysisArtifactMissingCause = { readonly filename: string; readonly canonicalId: CanonicalId };\ntype AnalysisUnsupportedArtifactTypeCause = {\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype PluginErrorBase<Code extends string, Cause> = {\n readonly type: \"PluginError\";\n readonly code: Code;\n readonly message: string;\n readonly cause: Cause;\n};\n\nexport type PluginOptionsInvalidBuilderConfigError = PluginErrorBase<\n \"OPTIONS_INVALID_BUILDER_CONFIG\",\n OptionsInvalidBuilderConfig | OptionsMissingBuilderConfig | OptionsConfigLoadFailed\n> & { readonly stage: \"normalize-options\" };\n\nexport type PluginBuilderEntryNotFoundError = PluginErrorBase<\"SODA_GQL_BUILDER_ENTRY_NOT_FOUND\", BuilderEntryNotFound> & {\n readonly stage: \"builder\";\n readonly entry: string;\n};\n\nexport type PluginBuilderDocDuplicateError = PluginErrorBase<\"SODA_GQL_BUILDER_DOC_DUPLICATE\", BuilderDocDuplicate> & {\n readonly stage: \"builder\";\n readonly name: string;\n readonly sources: readonly string[];\n};\n\nexport type PluginBuilderCircularDependencyError = PluginErrorBase<\n \"SODA_GQL_BUILDER_CIRCULAR_DEPENDENCY\",\n BuilderCircularDependency\n> & { readonly stage: \"builder\"; readonly chain: readonly string[] };\n\nexport type PluginBuilderModuleEvaluationFailedError = PluginErrorBase<\n \"SODA_GQL_BUILDER_MODULE_EVALUATION_FAILED\",\n BuilderModuleEvaluationFailed\n> & { readonly stage: \"builder\"; readonly filePath: string; readonly astPath: string };\n\nexport type PluginBuilderWriteFailedError = PluginErrorBase<\"SODA_GQL_BUILDER_WRITE_FAILED\", BuilderWriteFailed> & {\n readonly stage: \"builder\";\n readonly outPath: string;\n};\n\nexport type PluginBuilderUnexpectedError = PluginErrorBase<\"SODA_GQL_BUILDER_UNEXPECTED\", unknown> & {\n readonly stage: \"builder\";\n};\n\nexport type PluginAnalysisMetadataMissingError = PluginErrorBase<\"SODA_GQL_METADATA_NOT_FOUND\", AnalysisMetadataMissingCause> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n};\n\nexport type PluginAnalysisArtifactMissingError = PluginErrorBase<\n \"SODA_GQL_ANALYSIS_ARTIFACT_NOT_FOUND\",\n AnalysisArtifactMissingCause\n> & { readonly stage: \"analysis\"; readonly filename: string; readonly canonicalId: CanonicalId };\n\nexport type PluginAnalysisUnsupportedArtifactTypeError = PluginErrorBase<\n \"SODA_GQL_UNSUPPORTED_ARTIFACT_TYPE\",\n AnalysisUnsupportedArtifactTypeCause\n> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype TransformMissingBuilderArgCause = { readonly filename: string; readonly builderType: string; readonly argName: string };\ntype TransformUnsupportedValueTypeCause = { readonly valueType: string };\ntype TransformAstVisitorFailedCause = { readonly filename: string; readonly reason: string };\n\nexport type PluginTransformMissingBuilderArgError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_MISSING_BUILDER_ARG\",\n TransformMissingBuilderArgCause\n> & {\n readonly stage: \"transform\";\n readonly filename: string;\n readonly builderType: string;\n readonly argName: string;\n};\n\nexport type PluginTransformUnsupportedValueTypeError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_UNSUPPORTED_VALUE_TYPE\",\n TransformUnsupportedValueTypeCause\n> & { readonly stage: \"transform\"; readonly valueType: string };\n\nexport type PluginTransformAstVisitorFailedError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_AST_VISITOR_FAILED\",\n TransformAstVisitorFailedCause\n> & { readonly stage: \"transform\"; readonly filename: string; readonly reason: string };\n\n/**\n * Union of all plugin error types.\n */\nexport type PluginError =\n | PluginOptionsInvalidBuilderConfigError\n | PluginBuilderEntryNotFoundError\n | PluginBuilderDocDuplicateError\n | PluginBuilderCircularDependencyError\n | PluginBuilderModuleEvaluationFailedError\n | PluginBuilderWriteFailedError\n | PluginBuilderUnexpectedError\n | PluginAnalysisMetadataMissingError\n | PluginAnalysisArtifactMissingError\n | PluginAnalysisUnsupportedArtifactTypeError\n | PluginTransformMissingBuilderArgError\n | PluginTransformUnsupportedValueTypeError\n | PluginTransformAstVisitorFailedError;\n\n/**\n * Format a PluginError into a human-readable message.\n */\nexport const formatPluginError = (error: PluginError): string => {\n const codePrefix = `[${error.code}]`;\n const stageInfo = \"stage\" in error ? ` (${error.stage})` : \"\";\n return `${codePrefix}${stageInfo} ${error.message}`;\n};\n\n/**\n * Type guard for PluginError.\n */\nexport const isPluginError = (value: unknown): value is PluginError => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === \"PluginError\" &&\n \"code\" in value &&\n \"message\" in value\n );\n};\n\n/**\n * Assertion helper for unreachable code paths.\n * This is the ONLY acceptable throw in plugin code.\n */\nexport const assertUnreachable = (value: never, context?: string): never => {\n throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : \"\"}: received ${JSON.stringify(value)}`);\n};\n","/**\n * Plugin session management for all plugins.\n * Unified from plugin-babel and plugin-swc implementations.\n */\n\nimport type { BuilderArtifact } from \"@soda-gql/builder\";\nimport { createBuilderService } from \"@soda-gql/builder\";\nimport { cachedFn } from \"@soda-gql/common\";\nimport { loadConfig, type ResolvedSodaGqlConfig } from \"@soda-gql/config\";\n\n/**\n * Plugin options shared across all plugins.\n */\nexport type PluginOptions = {\n readonly configPath?: string;\n readonly enabled?: boolean;\n};\n\n/**\n * Plugin session containing builder service and configuration.\n */\nexport type PluginSession = {\n readonly config: ResolvedSodaGqlConfig;\n readonly getArtifact: () => BuilderArtifact | null;\n readonly getArtifactAsync: () => Promise<BuilderArtifact | null>;\n};\n\n/**\n * Create plugin session by loading config and creating cached builder service.\n * Returns null if disabled or config load fails.\n */\nexport const createPluginSession = (options: PluginOptions, pluginName: string): PluginSession | null => {\n const enabled = options.enabled ?? true;\n if (!enabled) {\n return null;\n }\n\n const configResult = loadConfig(options.configPath);\n if (configResult.isErr()) {\n console.error(`[${pluginName}] Failed to load config:`, {\n code: configResult.error.code,\n message: configResult.error.message,\n filePath: configResult.error.filePath,\n cause: configResult.error.cause,\n });\n return null;\n }\n\n const config = configResult.value;\n const ensureBuilderService = cachedFn(() => createBuilderService({ config }));\n\n /**\n * Build artifact on every invocation (like tsc-plugin).\n * If artifact.useBuilder is false and artifact.path is provided, load from file instead.\n * This ensures the artifact is always up-to-date with the latest source files.\n */\n const getArtifact = (): BuilderArtifact | null => {\n const builderService = ensureBuilderService();\n const buildResult = builderService.build();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n /**\n * Async version of getArtifact.\n * Supports async metadata factories and parallel element evaluation.\n */\n const getArtifactAsync = async (): Promise<BuilderArtifact | null> => {\n const builderService = ensureBuilderService();\n const buildResult = await builderService.buildAsync();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n return {\n config,\n getArtifact,\n getArtifactAsync,\n };\n};\n","import type { BuilderArtifact } from \"@soda-gql/builder\";\nimport type { PluginSession } from \"./plugin-session\";\n\n/**\n * Transformer type for code transformation.\n * - 'babel': Use Babel plugin (default, wider compatibility)\n * - 'swc': Use SWC transformer (faster, requires @soda-gql/swc-transformer)\n */\nexport type TransformerType = \"babel\" | \"swc\";\n\n/**\n * Minimal interface for SWC transformer.\n * Matches the Transformer interface from @soda-gql/swc-transformer.\n */\nexport interface SwcTransformerInterface {\n transform(input: { sourceCode: string; sourcePath: string; inputSourceMap?: string }): {\n transformed: boolean;\n sourceCode: string;\n sourceMap?: string;\n };\n}\n\n/**\n * Shared state between bundler plugins and loaders.\n * Enables efficient artifact sharing across build pipeline stages.\n */\nexport type SharedState = {\n pluginSession: PluginSession | null;\n currentArtifact: BuilderArtifact | null;\n moduleAdjacency: Map<string, Set<string>>;\n generation: number;\n swcTransformer: SwcTransformerInterface | null;\n transformerType: TransformerType | null;\n};\n\n// Global state for sharing between plugin and loader\nconst sharedStates = new Map<string, SharedState>();\n\n/**\n * Get shared state for a given project (identified by config path or cwd).\n */\nexport const getSharedState = (key: string): SharedState => {\n let state = sharedStates.get(key);\n if (!state) {\n state = {\n pluginSession: null,\n currentArtifact: null,\n moduleAdjacency: new Map(),\n generation: 0,\n swcTransformer: null,\n transformerType: null,\n };\n sharedStates.set(key, state);\n }\n return state;\n};\n\n/**\n * Update shared artifact.\n */\nexport const setSharedArtifact = (\n key: string,\n artifact: BuilderArtifact | null,\n moduleAdjacency?: Map<string, Set<string>>,\n): void => {\n const state = getSharedState(key);\n state.currentArtifact = artifact;\n if (moduleAdjacency) {\n state.moduleAdjacency = moduleAdjacency;\n }\n state.generation++;\n};\n\n/**\n * Get shared artifact.\n */\nexport const getSharedArtifact = (key: string): BuilderArtifact | null => {\n return getSharedState(key).currentArtifact;\n};\n\n/**\n * Get shared plugin session.\n */\nexport const getSharedPluginSession = (key: string): PluginSession | null => {\n return getSharedState(key).pluginSession;\n};\n\n/**\n * Set shared plugin session.\n */\nexport const setSharedPluginSession = (key: string, session: PluginSession | null): void => {\n getSharedState(key).pluginSession = session;\n};\n\n/**\n * Get the state key from config path or cwd.\n */\nexport const getStateKey = (configPath?: string): string => {\n return configPath ?? process.cwd();\n};\n\n/**\n * Set shared SWC transformer.\n */\nexport const setSharedSwcTransformer = (key: string, transformer: SwcTransformerInterface | null): void => {\n getSharedState(key).swcTransformer = transformer;\n};\n\n/**\n * Get shared SWC transformer.\n */\nexport const getSharedSwcTransformer = (key: string): SwcTransformerInterface | null => {\n return getSharedState(key).swcTransformer;\n};\n\n/**\n * Set shared transformer type.\n */\nexport const setSharedTransformerType = (key: string, transformerType: TransformerType | null): void => {\n getSharedState(key).transformerType = transformerType;\n};\n\n/**\n * Get shared transformer type.\n */\nexport const getSharedTransformerType = (key: string): TransformerType | null => {\n return getSharedState(key).transformerType;\n};\n","/**\n * Utility for working with canonical IDs.\n */\n\nimport { resolve } from \"node:path\";\nimport { type CanonicalId, createCanonicalId } from \"@soda-gql/common\";\n\n/**\n * Resolve a canonical ID from a filename and AST path.\n */\nexport const resolveCanonicalId = (filename: string, astPath: string): CanonicalId =>\n createCanonicalId(resolve(filename), astPath);\n"],"mappings":";;;;;;;;;AAqIA,MAAa,qBAAqB,UAA+B;AAG/D,QAAO,GAFY,IAAI,MAAM,KAAK,KAChB,WAAW,QAAQ,KAAK,MAAM,MAAM,KAAK,GAC1B,GAAG,MAAM;;;;;AAM5C,MAAa,iBAAiB,UAAyC;AACrE,QACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,iBACf,UAAU,SACV,aAAa;;;;;;AAQjB,MAAa,qBAAqB,OAAc,YAA4B;AAC1E,OAAM,IAAI,MAAM,mCAAmC,UAAU,OAAO,YAAY,GAAG,aAAa,KAAK,UAAU,MAAM,GAAG;;;;;;;;;AC/H1H,MAAa,uBAAuB,SAAwB,eAA6C;AAEvG,KAAI,EADY,QAAQ,WAAW,MAEjC,QAAO;CAGT,MAAM,eAAe,WAAW,QAAQ,WAAW;AACnD,KAAI,aAAa,OAAO,EAAE;AACxB,UAAQ,MAAM,IAAI,WAAW,2BAA2B;GACtD,MAAM,aAAa,MAAM;GACzB,SAAS,aAAa,MAAM;GAC5B,UAAU,aAAa,MAAM;GAC7B,OAAO,aAAa,MAAM;GAC3B,CAAC;AACF,SAAO;;CAGT,MAAM,SAAS,aAAa;CAC5B,MAAM,uBAAuB,eAAe,qBAAqB,EAAE,QAAQ,CAAC,CAAC;;;;;;CAO7E,MAAM,oBAA4C;EAEhD,MAAM,cADiB,sBAAsB,CACV,OAAO;AAC1C,MAAI,YAAY,OAAO,EAAE;AACvB,WAAQ,MAAM,IAAI,WAAW,8BAA8B,YAAY,MAAM,UAAU;AACvF,UAAO;;AAET,SAAO,YAAY;;;;;;CAOrB,MAAM,mBAAmB,YAA6C;EAEpE,MAAM,cAAc,MADG,sBAAsB,CACJ,YAAY;AACrD,MAAI,YAAY,OAAO,EAAE;AACvB,WAAQ,MAAM,IAAI,WAAW,8BAA8B,YAAY,MAAM,UAAU;AACvF,UAAO;;AAET,SAAO,YAAY;;AAGrB,QAAO;EACL;EACA;EACA;EACD;;;;;AChDH,MAAM,+BAAe,IAAI,KAA0B;;;;AAKnD,MAAa,kBAAkB,QAA6B;CAC1D,IAAI,QAAQ,aAAa,IAAI,IAAI;AACjC,KAAI,CAAC,OAAO;AACV,UAAQ;GACN,eAAe;GACf,iBAAiB;GACjB,iCAAiB,IAAI,KAAK;GAC1B,YAAY;GACZ,gBAAgB;GAChB,iBAAiB;GAClB;AACD,eAAa,IAAI,KAAK,MAAM;;AAE9B,QAAO;;;;;AAMT,MAAa,qBACX,KACA,UACA,oBACS;CACT,MAAM,QAAQ,eAAe,IAAI;AACjC,OAAM,kBAAkB;AACxB,KAAI,gBACF,OAAM,kBAAkB;AAE1B,OAAM;;;;;AAMR,MAAa,qBAAqB,QAAwC;AACxE,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,0BAA0B,QAAsC;AAC3E,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,0BAA0B,KAAa,YAAwC;AAC1F,gBAAe,IAAI,CAAC,gBAAgB;;;;;AAMtC,MAAa,eAAe,eAAgC;AAC1D,QAAO,cAAc,QAAQ,KAAK;;;;;AAMpC,MAAa,2BAA2B,KAAa,gBAAsD;AACzG,gBAAe,IAAI,CAAC,iBAAiB;;;;;AAMvC,MAAa,2BAA2B,QAAgD;AACtF,QAAO,eAAe,IAAI,CAAC;;;;;AAM7B,MAAa,4BAA4B,KAAa,oBAAkD;AACtG,gBAAe,IAAI,CAAC,kBAAkB;;;;;AAMxC,MAAa,4BAA4B,QAAwC;AAC/E,QAAO,eAAe,IAAI,CAAC;;;;;;;;;;;ACpH7B,MAAa,sBAAsB,UAAkB,YACnD,kBAAkB,QAAQ,SAAS,EAAE,QAAQ"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/errors.ts","../src/shared-state.ts","../src/plugin-session.ts","../src/utils/canonical-id.ts"],"sourcesContent":["/**\n * Error types and formatters for plugin-babel.\n * Simplified from plugin-shared to include only types actually used by the Babel transformer.\n */\n\nimport type { BuilderError } from \"@soda-gql/builder\";\nimport type { CanonicalId } from \"@soda-gql/common\";\n\ntype OptionsInvalidBuilderConfig = { readonly code: \"INVALID_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsMissingBuilderConfig = { readonly code: \"MISSING_BUILDER_CONFIG\"; readonly message: string };\ntype OptionsConfigLoadFailed = { readonly code: \"CONFIG_LOAD_FAILED\"; readonly message: string };\n\ntype BuilderEntryNotFound = Extract<BuilderError, { code: \"ENTRY_NOT_FOUND\" }>;\ntype BuilderDocDuplicate = Extract<BuilderError, { code: \"DOC_DUPLICATE\" }>;\ntype BuilderCircularDependency = Extract<BuilderError, { code: \"GRAPH_CIRCULAR_DEPENDENCY\" }>;\ntype BuilderModuleEvaluationFailed = Extract<BuilderError, { code: \"RUNTIME_MODULE_LOAD_FAILED\" }>;\ntype BuilderWriteFailed = Extract<BuilderError, { code: \"WRITE_FAILED\" }>;\n\ntype AnalysisMetadataMissingCause = { readonly filename: string };\ntype AnalysisArtifactMissingCause = { readonly filename: string; readonly canonicalId: CanonicalId };\ntype AnalysisUnsupportedArtifactTypeCause = {\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype PluginErrorBase<Code extends string, Cause> = {\n readonly type: \"PluginError\";\n readonly code: Code;\n readonly message: string;\n readonly cause: Cause;\n};\n\nexport type PluginOptionsInvalidBuilderConfigError = PluginErrorBase<\n \"OPTIONS_INVALID_BUILDER_CONFIG\",\n OptionsInvalidBuilderConfig | OptionsMissingBuilderConfig | OptionsConfigLoadFailed\n> & { readonly stage: \"normalize-options\" };\n\nexport type PluginBuilderEntryNotFoundError = PluginErrorBase<\"SODA_GQL_BUILDER_ENTRY_NOT_FOUND\", BuilderEntryNotFound> & {\n readonly stage: \"builder\";\n readonly entry: string;\n};\n\nexport type PluginBuilderDocDuplicateError = PluginErrorBase<\"SODA_GQL_BUILDER_DOC_DUPLICATE\", BuilderDocDuplicate> & {\n readonly stage: \"builder\";\n readonly name: string;\n readonly sources: readonly string[];\n};\n\nexport type PluginBuilderCircularDependencyError = PluginErrorBase<\n \"SODA_GQL_BUILDER_CIRCULAR_DEPENDENCY\",\n BuilderCircularDependency\n> & { readonly stage: \"builder\"; readonly chain: readonly string[] };\n\nexport type PluginBuilderModuleEvaluationFailedError = PluginErrorBase<\n \"SODA_GQL_BUILDER_MODULE_EVALUATION_FAILED\",\n BuilderModuleEvaluationFailed\n> & { readonly stage: \"builder\"; readonly filePath: string; readonly astPath: string };\n\nexport type PluginBuilderWriteFailedError = PluginErrorBase<\"SODA_GQL_BUILDER_WRITE_FAILED\", BuilderWriteFailed> & {\n readonly stage: \"builder\";\n readonly outPath: string;\n};\n\nexport type PluginBuilderUnexpectedError = PluginErrorBase<\"SODA_GQL_BUILDER_UNEXPECTED\", unknown> & {\n readonly stage: \"builder\";\n};\n\nexport type PluginAnalysisMetadataMissingError = PluginErrorBase<\"SODA_GQL_METADATA_NOT_FOUND\", AnalysisMetadataMissingCause> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n};\n\nexport type PluginAnalysisArtifactMissingError = PluginErrorBase<\n \"SODA_GQL_ANALYSIS_ARTIFACT_NOT_FOUND\",\n AnalysisArtifactMissingCause\n> & { readonly stage: \"analysis\"; readonly filename: string; readonly canonicalId: CanonicalId };\n\nexport type PluginAnalysisUnsupportedArtifactTypeError = PluginErrorBase<\n \"SODA_GQL_UNSUPPORTED_ARTIFACT_TYPE\",\n AnalysisUnsupportedArtifactTypeCause\n> & {\n readonly stage: \"analysis\";\n readonly filename: string;\n readonly canonicalId: CanonicalId;\n readonly artifactType: string;\n};\n\ntype TransformMissingBuilderArgCause = { readonly filename: string; readonly builderType: string; readonly argName: string };\ntype TransformUnsupportedValueTypeCause = { readonly valueType: string };\ntype TransformAstVisitorFailedCause = { readonly filename: string; readonly reason: string };\n\nexport type PluginTransformMissingBuilderArgError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_MISSING_BUILDER_ARG\",\n TransformMissingBuilderArgCause\n> & {\n readonly stage: \"transform\";\n readonly filename: string;\n readonly builderType: string;\n readonly argName: string;\n};\n\nexport type PluginTransformUnsupportedValueTypeError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_UNSUPPORTED_VALUE_TYPE\",\n TransformUnsupportedValueTypeCause\n> & { readonly stage: \"transform\"; readonly valueType: string };\n\nexport type PluginTransformAstVisitorFailedError = PluginErrorBase<\n \"SODA_GQL_TRANSFORM_AST_VISITOR_FAILED\",\n TransformAstVisitorFailedCause\n> & { readonly stage: \"transform\"; readonly filename: string; readonly reason: string };\n\n/**\n * Union of all plugin error types.\n */\nexport type PluginError =\n | PluginOptionsInvalidBuilderConfigError\n | PluginBuilderEntryNotFoundError\n | PluginBuilderDocDuplicateError\n | PluginBuilderCircularDependencyError\n | PluginBuilderModuleEvaluationFailedError\n | PluginBuilderWriteFailedError\n | PluginBuilderUnexpectedError\n | PluginAnalysisMetadataMissingError\n | PluginAnalysisArtifactMissingError\n | PluginAnalysisUnsupportedArtifactTypeError\n | PluginTransformMissingBuilderArgError\n | PluginTransformUnsupportedValueTypeError\n | PluginTransformAstVisitorFailedError;\n\n/**\n * Format a PluginError into a human-readable message.\n */\nexport const formatPluginError = (error: PluginError): string => {\n const codePrefix = `[${error.code}]`;\n const stageInfo = \"stage\" in error ? ` (${error.stage})` : \"\";\n return `${codePrefix}${stageInfo} ${error.message}`;\n};\n\n/**\n * Type guard for PluginError.\n */\nexport const isPluginError = (value: unknown): value is PluginError => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === \"PluginError\" &&\n \"code\" in value &&\n \"message\" in value\n );\n};\n\n/**\n * Assertion helper for unreachable code paths.\n * This is the ONLY acceptable throw in plugin code.\n */\nexport const assertUnreachable = (value: never, context?: string): never => {\n throw new Error(`[INTERNAL] Unreachable code path${context ? ` in ${context}` : \"\"}: received ${JSON.stringify(value)}`);\n};\n","import type { BuilderArtifact, BuilderService } from \"@soda-gql/builder\";\nimport type { PluginSession } from \"./plugin-session\";\n\n/**\n * Transformer type for code transformation.\n * - 'babel': Use Babel plugin (default, wider compatibility)\n * - 'swc': Use SWC transformer (faster, requires @soda-gql/swc-transformer)\n */\nexport type TransformerType = \"babel\" | \"swc\";\n\n/**\n * Minimal interface for SWC transformer.\n * Matches the Transformer interface from @soda-gql/swc-transformer.\n */\nexport interface SwcTransformerInterface {\n transform(input: { sourceCode: string; sourcePath: string; inputSourceMap?: string }): {\n transformed: boolean;\n sourceCode: string;\n sourceMap?: string;\n };\n}\n\n/**\n * Shared state between bundler plugins and loaders.\n * Enables efficient artifact sharing across build pipeline stages.\n */\nexport type SharedState = {\n pluginSession: PluginSession | null;\n currentArtifact: BuilderArtifact | null;\n moduleAdjacency: Map<string, Set<string>>;\n generation: number;\n swcTransformer: SwcTransformerInterface | null;\n transformerType: TransformerType | null;\n builderService: BuilderService | null;\n};\n\n// Global state for sharing between plugin and loader\nconst sharedStates = new Map<string, SharedState>();\n\n/**\n * Get shared state for a given project (identified by config path or cwd).\n */\nexport const getSharedState = (key: string): SharedState => {\n let state = sharedStates.get(key);\n if (!state) {\n state = {\n pluginSession: null,\n currentArtifact: null,\n moduleAdjacency: new Map(),\n generation: 0,\n swcTransformer: null,\n transformerType: null,\n builderService: null,\n };\n sharedStates.set(key, state);\n }\n return state;\n};\n\n/**\n * Update shared artifact.\n */\nexport const setSharedArtifact = (\n key: string,\n artifact: BuilderArtifact | null,\n moduleAdjacency?: Map<string, Set<string>>,\n): void => {\n const state = getSharedState(key);\n state.currentArtifact = artifact;\n if (moduleAdjacency) {\n state.moduleAdjacency = moduleAdjacency;\n }\n state.generation++;\n};\n\n/**\n * Get shared artifact.\n */\nexport const getSharedArtifact = (key: string): BuilderArtifact | null => {\n return getSharedState(key).currentArtifact;\n};\n\n/**\n * Get shared plugin session.\n */\nexport const getSharedPluginSession = (key: string): PluginSession | null => {\n return getSharedState(key).pluginSession;\n};\n\n/**\n * Set shared plugin session.\n */\nexport const setSharedPluginSession = (key: string, session: PluginSession | null): void => {\n getSharedState(key).pluginSession = session;\n};\n\n/**\n * Get the state key from config path or cwd.\n */\nexport const getStateKey = (configPath?: string): string => {\n return configPath ?? process.cwd();\n};\n\n/**\n * Set shared SWC transformer.\n */\nexport const setSharedSwcTransformer = (key: string, transformer: SwcTransformerInterface | null): void => {\n getSharedState(key).swcTransformer = transformer;\n};\n\n/**\n * Get shared SWC transformer.\n */\nexport const getSharedSwcTransformer = (key: string): SwcTransformerInterface | null => {\n return getSharedState(key).swcTransformer;\n};\n\n/**\n * Set shared transformer type.\n */\nexport const setSharedTransformerType = (key: string, transformerType: TransformerType | null): void => {\n getSharedState(key).transformerType = transformerType;\n};\n\n/**\n * Get shared transformer type.\n */\nexport const getSharedTransformerType = (key: string): TransformerType | null => {\n return getSharedState(key).transformerType;\n};\n\n/**\n * Get shared BuilderService.\n */\nexport const getSharedBuilderService = (key: string): BuilderService | null => {\n return getSharedState(key).builderService;\n};\n\n/**\n * Set shared BuilderService.\n */\nexport const setSharedBuilderService = (key: string, service: BuilderService | null): void => {\n getSharedState(key).builderService = service;\n};\n","/**\n * Plugin session management for all plugins.\n * Unified from plugin-babel and plugin-swc implementations.\n */\n\nimport type { BuilderArtifact, BuilderService } from \"@soda-gql/builder\";\nimport { createBuilderService } from \"@soda-gql/builder\";\nimport { loadConfig, type ResolvedSodaGqlConfig } from \"@soda-gql/config\";\nimport { getSharedBuilderService, getStateKey, setSharedBuilderService } from \"./shared-state\";\n\n/**\n * Plugin options shared across all plugins.\n */\nexport type PluginOptions = {\n readonly configPath?: string;\n readonly enabled?: boolean;\n};\n\n/**\n * Plugin session containing builder service and configuration.\n */\nexport type PluginSession = {\n readonly config: ResolvedSodaGqlConfig;\n readonly getArtifact: () => BuilderArtifact | null;\n readonly getArtifactAsync: () => Promise<BuilderArtifact | null>;\n};\n\n/**\n * Create plugin session by loading config and creating cached builder service.\n * Returns null if disabled or config load fails.\n */\nexport const createPluginSession = (options: PluginOptions, pluginName: string): PluginSession | null => {\n const enabled = options.enabled ?? true;\n if (!enabled) {\n return null;\n }\n\n const configResult = loadConfig(options.configPath);\n if (configResult.isErr()) {\n console.error(`[${pluginName}] Failed to load config:`, {\n code: configResult.error.code,\n message: configResult.error.message,\n filePath: configResult.error.filePath,\n cause: configResult.error.cause,\n });\n return null;\n }\n\n const config = configResult.value;\n const stateKey = getStateKey(options.configPath);\n\n // Use global BuilderService cache to share FileTracker state across plugin instances\n const ensureBuilderService = (): BuilderService => {\n const existing = getSharedBuilderService(stateKey);\n if (existing) {\n return existing;\n }\n\n const service = createBuilderService({ config });\n setSharedBuilderService(stateKey, service);\n return service;\n };\n\n /**\n * Build artifact on every invocation (like tsc-plugin).\n * If artifact.useBuilder is false and artifact.path is provided, load from file instead.\n * This ensures the artifact is always up-to-date with the latest source files.\n */\n const getArtifact = (): BuilderArtifact | null => {\n const builderService = ensureBuilderService();\n const buildResult = builderService.build();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n /**\n * Async version of getArtifact.\n * Supports async metadata factories and parallel element evaluation.\n */\n const getArtifactAsync = async (): Promise<BuilderArtifact | null> => {\n const builderService = ensureBuilderService();\n const buildResult = await builderService.buildAsync();\n if (buildResult.isErr()) {\n console.error(`[${pluginName}] Failed to build artifact: ${buildResult.error.message}`);\n return null;\n }\n return buildResult.value;\n };\n\n return {\n config,\n getArtifact,\n getArtifactAsync,\n };\n};\n","/**\n * Utility for working with canonical IDs.\n */\n\nimport { resolve } from \"node:path\";\nimport { type CanonicalId, createCanonicalId } from \"@soda-gql/common\";\n\n/**\n * Resolve a canonical ID from a filename and AST path.\n */\nexport const resolveCanonicalId = (filename: string, astPath: string): CanonicalId =>\n createCanonicalId(resolve(filename), astPath);\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soda-gql/plugin-common",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Shared utilities for soda-gql build plugins",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"./package.json": "./package.json"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@soda-gql/builder": "0.4.
|
|
50
|
-
"@soda-gql/common": "0.4.
|
|
51
|
-
"@soda-gql/config": "0.4.
|
|
49
|
+
"@soda-gql/builder": "0.4.2",
|
|
50
|
+
"@soda-gql/common": "0.4.2",
|
|
51
|
+
"@soda-gql/config": "0.4.2",
|
|
52
52
|
"neverthrow": "^8.1.1"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {},
|