Skip to content

Commit

Permalink
chore: Modify FragmentRegistry method name
Browse files Browse the repository at this point in the history
  • Loading branch information
Quramy committed Mar 13, 2024
1 parent a42a5df commit c23f196
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 55 deletions.
2 changes: 1 addition & 1 deletion src/analyzer/analyzer.ts
Expand Up @@ -95,7 +95,7 @@ export class Analyzer {
return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node);
}
}) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[];
fragmentRegistry.registerDocument(
fragmentRegistry.registerDocuments(
fileName,
version,
templateLiteralNodes.reduce(
Expand Down
32 changes: 16 additions & 16 deletions src/gql-ast-util/fragment-registry.test.ts
Expand Up @@ -275,7 +275,7 @@ describe(FragmentRegistry, () => {
describe(FragmentRegistry.prototype.getExternalFragments, () => {
it('should return empty array when target document can not be parsed', () => {
const registry = new FragmentRegistry();
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -285,14 +285,14 @@ describe(FragmentRegistry, () => {
`,
},
]);
registry.registerDocument('main.ts', '0', [{ sourcePosition: 0, text: 'fragment X on Query {' }]);
registry.registerDocuments('main.ts', '0', [{ sourcePosition: 0, text: 'fragment X on Query {' }]);

expect(registry.getExternalFragments('fragment X on Query {', 'main.ts', 0)).toEqual([]);
});

it('should return dependent fragment definitions', () => {
const registry = new FragmentRegistry();
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -310,7 +310,7 @@ describe(FragmentRegistry, () => {
`,
},
]);
registry.registerDocument('main.ts', '0', [
registry.registerDocuments('main.ts', '0', [
{ sourcePosition: 0, text: 'fragment FragmentB on Query { ...FragmentA }' },
]);

Expand All @@ -323,7 +323,7 @@ describe(FragmentRegistry, () => {
it('should not use cached value when dependent fragment changes', () => {
const logger = jest.fn();
const registry = new FragmentRegistry({ logger });
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -334,13 +334,13 @@ describe(FragmentRegistry, () => {
},
]);

registry.registerDocument('main.ts', '0', [
registry.registerDocuments('main.ts', '0', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' },
]);
registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0);
expect(logger).toBeCalledTimes(0);

registry.registerDocument('fragments.ts', '1', [
registry.registerDocuments('fragments.ts', '1', [
{
sourcePosition: 0,
text: `
Expand All @@ -362,7 +362,7 @@ describe(FragmentRegistry, () => {
it('should not use cached value when FragmentSpread set in target documentString changes', () => {
const logger = jest.fn();
const registry = new FragmentRegistry({ logger });
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -380,14 +380,14 @@ describe(FragmentRegistry, () => {
`,
},
]);
registry.registerDocument('main.ts', '0', [
registry.registerDocuments('main.ts', '0', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' },
]);

registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0);
expect(logger).toBeCalledTimes(0);

registry.registerDocument('main.ts', '1', [
registry.registerDocuments('main.ts', '1', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA, ...FragmentB }' },
]);

Expand All @@ -404,7 +404,7 @@ describe(FragmentRegistry, () => {
it('should not use cached value when FragmentDefinition set in target documentString changes', () => {
const logger = jest.fn();
const registry = new FragmentRegistry({ logger });
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -414,14 +414,14 @@ describe(FragmentRegistry, () => {
`,
},
]);
registry.registerDocument('main.ts', '0', [
registry.registerDocuments('main.ts', '0', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' },
]);

registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0);
expect(logger).toBeCalledTimes(0);

registry.registerDocument('main.ts', '1', [
registry.registerDocuments('main.ts', '1', [
{
sourcePosition: 0,
text: `
Expand Down Expand Up @@ -451,7 +451,7 @@ describe(FragmentRegistry, () => {
it('should use cached value', () => {
const logger = jest.fn();
const registry = new FragmentRegistry({ logger });
registry.registerDocument('fragments.ts', '0', [
registry.registerDocuments('fragments.ts', '0', [
{
sourcePosition: 0,
text: `
Expand All @@ -469,14 +469,14 @@ describe(FragmentRegistry, () => {
`,
},
]);
registry.registerDocument('main.ts', '0', [
registry.registerDocuments('main.ts', '0', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' },
]);

registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0);
expect(logger).toBeCalledTimes(0);

registry.registerDocument('main.ts', '1', [
registry.registerDocuments('main.ts', '1', [
{ sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA, __typename }' },
]);

Expand Down
2 changes: 1 addition & 1 deletion src/gql-ast-util/fragment-registry.ts
Expand Up @@ -362,7 +362,7 @@ export class FragmentRegistry {
return externalFragments;
}

registerDocument(
registerDocuments(
fileName: string,
version: string,
documentStrings: { text: string; sourcePosition: number }[],
Expand Down
Expand Up @@ -45,6 +45,6 @@ export class AdapterFixture {
}

addFragment(fragmentDefDoc: string, sourceFileName = this._sourceFileName) {
this._fragmentRegistry.registerDocument(sourceFileName, 'v1', [{ sourcePosition: 0, text: fragmentDefDoc }]);
this._fragmentRegistry.registerDocuments(sourceFileName, 'v1', [{ sourcePosition: 0, text: fragmentDefDoc }]);
}
}
56 changes: 20 additions & 36 deletions src/language-service-plugin/plugin-module-factory.ts
Expand Up @@ -26,54 +26,38 @@ function create(info: ts.server.PluginCreateInfo): ts.LanguageService {

const fragmentRegistry = new FragmentRegistry({ logger });
if (enabledGlobalFragments) {
const handleAcquireOrUpdate = (fileName: string, sourceFile: ts.SourceFile, version: string) => {
const templateLiteralNodes = findAllNodes(sourceFile, node => {
if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) {
return true;
} else {
return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node);
}
}) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[];
fragmentRegistry.registerDocuments(
fileName,
version,
templateLiteralNodes.reduce(
(acc, node) => [...acc, getShallowText(node)],
[] as { text: string; sourcePosition: number }[],
),
);
};

registerDocumentChangeEvent(
// Note:
// documentRegistry in ts.server.Project is annotated @internal
(info.project as any).documentRegistry as ts.DocumentRegistry,
{
onAcquire: (fileName, sourceFile, version) => {
if (!isExcluded(fileName) && info.languageServiceHost.getScriptFileNames().includes(fileName)) {
// TODO remove before merge
logger('acquire script ' + fileName + version);

const templateLiteralNodes = findAllNodes(sourceFile, node => {
if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) {
return true;
} else {
return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node);
}
}) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[];
fragmentRegistry.registerDocument(
fileName,
version,
templateLiteralNodes.reduce(
(acc, node) => [...acc, getShallowText(node)],
[] as { text: string; sourcePosition: number }[],
),
);
handleAcquireOrUpdate(fileName, sourceFile, version);
}
},
onUpdate: (fileName, sourceFile, version) => {
if (!isExcluded(fileName) && info.languageServiceHost.getScriptFileNames().includes(fileName)) {
if (fragmentRegistry.getFileCurrentVersion(fileName) === version) return;
// TODO remove before merge
logger('update script ' + fileName + version);

const templateLiteralNodes = findAllNodes(sourceFile, node => {
if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) {
return true;
} else {
return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node);
}
}) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[];
fragmentRegistry.registerDocument(
fileName,
version,
templateLiteralNodes.reduce(
(acc, node) => [...acc, getShallowText(node)],
[] as { text: string; sourcePosition: number }[],
),
);
handleAcquireOrUpdate(fileName, sourceFile, version);
}
},
onRelease: fileName => {
Expand Down

0 comments on commit c23f196

Please sign in to comment.