Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix win compat #3954

Closed
wants to merge 11 commits into from
Closed

Fix win compat #3954

wants to merge 11 commits into from

Conversation

sakesun
Copy link
Contributor

@sakesun sakesun commented Aug 15, 2023

This change is for developer using Windows OS to be able to run yarn test.

  • use url.fileURLToPath instead of URL.pathname
  • use double quote instead on single quote for cspell command

- graphql need named parameters
- need JSON.stringify to log proper output
- fix json output
- use url.fileURLToPath instead of URL.pathname
- use double quote instead on single quote for shell command
@netlify
Copy link

netlify bot commented Aug 15, 2023

Deploy Preview for compassionate-pike-271cb3 ready!

Name Link
🔨 Latest commit 4846148
🔍 Latest deploy log https://app.netlify.com/sites/compassionate-pike-271cb3/deploys/64f1cac7b76d9c00086e773f
😎 Deploy Preview https://deploy-preview-3954--compassionate-pike-271cb3.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@github-actions
Copy link

Hi @sakesun, I'm @github-actions bot happy to help you with this PR 👋

Supported commands

Please post this commands in separate comments and only one per comment:

  • @github-actions run-benchmark - Run benchmark comparing base and merge commits for this PR
  • @github-actions publish-pr-on-npm - Build package from this PR and publish it on NPM

Copy link
Member

@IvanGoncharov IvanGoncharov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sakesun Can you please split either docs changes or Windows compatibility changes into separate PR?
Otherwise ready to merge

yaacovCR and others added 8 commits September 1, 2023 18:28
extracted from graphql#3929

the publisher itself can determine whether to return a single result or
the initial result + stream

the only desired change is to replace the following code block with the
below:


[FROM:](https://github.com/graphql/graphql-js/blob/fae5da500bad94c39a7ecd77a4c4361b58d6d2da/src/execution/execute.ts#L293-L340)

```ts
  const incrementalPublisher = exeContext.incrementalPublisher;
  const initialResultRecord = incrementalPublisher.prepareInitialResultRecord();
  try {
    const result = executeOperation(exeContext, initialResultRecord);
    if (isPromise(result)) {
      return result.then(
        (data) => {
          const errors =
            incrementalPublisher.getInitialErrors(initialResultRecord);
          const initialResult = buildResponse(data, errors);
          incrementalPublisher.publishInitial(initialResultRecord);
          if (incrementalPublisher.hasNext()) {
            return {
              initialResult: {
                ...initialResult,
                hasNext: true,
              },
              subsequentResults: incrementalPublisher.subscribe(),
            };
          }
          return initialResult;
        },
        (error) => {
          incrementalPublisher.addFieldError(initialResultRecord, error);
          const errors =
            incrementalPublisher.getInitialErrors(initialResultRecord);
          return buildResponse(null, errors);
        },
      );
    }
    const initialResult = buildResponse(result, initialResultRecord.errors);
    incrementalPublisher.publishInitial(initialResultRecord);
    if (incrementalPublisher.hasNext()) {
      return {
        initialResult: {
          ...initialResult,
          hasNext: true,
        },
        subsequentResults: incrementalPublisher.subscribe(),
      };
    }
    return initialResult;
  } catch (error) {
    incrementalPublisher.addFieldError(initialResultRecord, error);
    const errors = incrementalPublisher.getInitialErrors(initialResultRecord);
    return buildResponse(null, errors);
  }
}
```


[TO:](https://github.com/yaacovCR/graphql-executor/blob/598608e8d8b23bc527dd73283b477997305afd58/src/execution/execute.ts#L234-L250):

```ts
  const incrementalPublisher = exeContext.incrementalPublisher;
  const initialResultRecord = incrementalPublisher.prepareInitialResultRecord();
  try {
    const data = executeOperation(exeContext, initialResultRecord);
    if (isPromise(data)) {
      return data.then(
        (resolved) =>
          incrementalPublisher.buildDataResponse(initialResultRecord, resolved),
        (error) =>
          incrementalPublisher.buildErrorResponse(initialResultRecord, error),
      );
    }
    return incrementalPublisher.buildDataResponse(initialResultRecord, data);
  } catch (error) {
    return incrementalPublisher.buildErrorResponse(initialResultRecord, error);
  }
```

Supporting changes are required:
1. some existing public methods no longer are required to be public and
so are made private (or removed entirely!), with lint rules forcing the
reordering of existing methods
2. to prevent cyclic type dependencies (not strictly necessary, but
still!), types are moved from `execute.ts` to `IncrementalPublisher.ts`
to minimize later diffs, we can watch how the tests change, rather than
simple introducing tons of new tests

depends on graphql#3930
The `incremental` array is the actual data to be applied to the response, while the `completed` array return "metadata" about the execution, used to inform clients that defers are being executed and when all fields for that defer have been delivered.

To ensure consistency, clients are expected to process all objects in the `incremental` array for a given payload before re-rendering the associated UIs.

See graphql/defer-stream-wg#69 for full details.
graphql#3960)

updates response format to fully match new format further discussed at
graphql/defer-stream-wg#69
We can use a non-null assertion to access `items ` on the completed
StreamItemsRecord, similar to how `data` is accessed with a non-null
assertion for completed DeferredGroupedFieldSet records, avoiding
initialization of empty arrays/objects simply to avoid type errors.
@sakesun sakesun closed this Sep 1, 2023
@sakesun sakesun deleted the fix-win-compat branch September 1, 2023 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants