diff --git a/.gitignore b/.gitignore index f390a854..7ae9fff1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ **/.DS_Store node_modules -lib +cjs +esm +umd dist .vscode .yarn/* diff --git a/README.md b/README.md index 137f032a..dc29494b 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,36 @@ const link = new WebSocketLink({ +
+Client usage in browser + +```html + + + + + GraphQL over WebSocket + + + + + + +``` + +
+
Client usage in Node diff --git a/package.json b/package.json index 93460102..68c7327b 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,14 @@ "engines": { "node": ">=10" }, - "main": "lib/index.js", - "browser": "lib/client.js", - "types": "lib/index.d.ts", + "main": "cjs/index.js", + "module": "esm/index.js", + "browser": "umd/graphql-ws.js", + "types": "esm/index.d.ts", "files": [ - "lib", + "cjs", + "esm", + "umd", "README.md", "LICENSE.md", "PROTOCOL.md" @@ -41,7 +44,10 @@ "lint": "eslint 'src'", "type-check": "tsc --noEmit", "test": "jest", - "build": "tsc -b tsconfig.build.json", + "build:cjs": "tsc -b tsconfig.cjs.json", + "build:esm": "tsc -b tsconfig.esm.json", + "build:umd": "rollup -c && gzip umd/graphql-ws.min.js -c > umd/graphql-ws.min.js.gz", + "build": "yarn build:cjs && yarn build:esm && yarn build:umd", "release": "semantic-release" }, "peerDependencies": { @@ -71,6 +77,8 @@ "graphql": "^15.4.0", "jest": "^26.6.1", "prettier": "^2.1.2", + "rollup": "^2.33.1", + "rollup-plugin-terser": "^7.0.2", "semantic-release": "^17.2.2", "typedoc": "^0.19.2", "typedoc-plugin-markdown": "^3.0.11", diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..febf09e4 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,18 @@ +import { terser } from 'rollup-plugin-terser'; + +export default { + input: './esm/client.js', + output: [ + { + file: './umd/graphql-ws.js', + format: 'umd', + name: 'graphqlWs', + }, + { + file: './umd/graphql-ws.min.js', + format: 'umd', + name: 'graphqlWs', + plugins: [terser()], + }, + ], +}; diff --git a/tsconfig.build.json b/tsconfig.build.json deleted file mode 100644 index 78513920..00000000 --- a/tsconfig.build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["src/tests", "lib"] -} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 00000000..ff45ec3f --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "./cjs" + }, + "exclude": ["src/tests", "cjs", "esm"] +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 00000000..c3bd7f0c --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "es2015", + "outDir": "./esm" + }, + "exclude": ["src/tests", "cjs", "esm"] +} diff --git a/tsconfig.json b/tsconfig.json index 3588f871..bcaadf83 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,17 @@ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ - "target": "es2017" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "declaration": true /* Generates corresponding '.d.ts' file. */, - "outDir": "./lib" /* Redirect output structure to the directory. */, - "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - "strict": true /* Enable all strict type-checking options. */, - "noUnusedLocals": true /* Report errors on unused locals. */, - "noUnusedParameters": true /* Report errors on unused parameters. */, - "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + "moduleResolution": "node", + "target": "es2017", + "declaration": true, + "rootDir": "./src", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "baseUrl": "./src", + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true }, "exclude": ["lib"] } diff --git a/yarn.lock b/yarn.lock index 28f6f2ae..86252c0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3129,6 +3129,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: b73428e97de7624323f81ba13f8ed9271de487017432d18b4da3f07cfc528ad754bbd199004bd5d14e0ccd67d1fdfe0ec8dbbd4c438b401df3c4cc387bfd1daa + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -4540,7 +4547,7 @@ __metadata: languageName: node linkType: hard -fsevents@^2.1.2: +"fsevents@^2.1.2, fsevents@~2.1.2": version: 2.1.3 resolution: "fsevents@npm:2.1.3" dependencies: @@ -4549,7 +4556,7 @@ fsevents@^2.1.2: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#builtin": +"fsevents@patch:fsevents@^2.1.2#builtin, fsevents@patch:fsevents@~2.1.2#builtin": version: 2.1.3 resolution: "fsevents@patch:fsevents@npm%3A2.1.3#builtin::version=2.1.3&hash=127e8e" dependencies: @@ -4827,6 +4834,8 @@ fsevents@^2.1.2: graphql: ^15.4.0 jest: ^26.6.1 prettier: ^2.1.2 + rollup: ^2.33.1 + rollup-plugin-terser: ^7.0.2 semantic-release: ^17.2.2 typedoc: ^0.19.2 typedoc-plugin-markdown: ^3.0.11 @@ -6187,6 +6196,17 @@ fsevents@^2.1.2: languageName: node linkType: hard +"jest-worker@npm:^26.2.1": + version: 26.6.2 + resolution: "jest-worker@npm:26.6.2" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^7.0.0 + checksum: 5eb349833b5e9750ce8700388961dfd5d5e207c913122221e418e48b9cda3c17b0fb418f6a90f1614cfdc3ca836158b720c5dc1de82cb1e708266b4d76e31a38 + languageName: node + linkType: hard + "jest-worker@npm:^26.6.1": version: 26.6.1 resolution: "jest-worker@npm:26.6.1" @@ -8573,6 +8593,15 @@ fsevents@^2.1.2: languageName: node linkType: hard +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: ede2693af09732ceab1c273dd70db787f34a7b8d95bab13f1aca763483c0113452a78e53d61ff18d393dcea586d388e01f198a5132a4a85cebba31ec54164b75 + languageName: node + linkType: hard + "rc@npm:^1.0.1, rc@npm:^1.1.6, rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -9089,6 +9118,34 @@ fsevents@^2.1.2: languageName: node linkType: hard +"rollup-plugin-terser@npm:^7.0.2": + version: 7.0.2 + resolution: "rollup-plugin-terser@npm:7.0.2" + dependencies: + "@babel/code-frame": ^7.10.4 + jest-worker: ^26.2.1 + serialize-javascript: ^4.0.0 + terser: ^5.0.0 + peerDependencies: + rollup: ^2.0.0 + checksum: 553cc21efcea3e4d46c61fbd41cb4a82a3ab8e02ae4ce7c03f9248dea93e5a91c3624e2271490ee05b2bb481568305733b496d968d3ac9c99b777a588a336f01 + languageName: node + linkType: hard + +"rollup@npm:^2.33.1": + version: 2.33.1 + resolution: "rollup@npm:2.33.1" + dependencies: + fsevents: ~2.1.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: cf727ca4d1c6d6ad7679c8cf0a8258e41339d7d3eef5a7671cd54f4506c23f5492f6331c05d76697fa608d870407a5d2eb796647ce6add68101ca3bbb77c7d66 + languageName: node + linkType: hard + "rsvp@npm:^4.8.4": version: 4.8.5 resolution: "rsvp@npm:4.8.5" @@ -9269,6 +9326,15 @@ fsevents@^2.1.2: languageName: node linkType: hard +"serialize-javascript@npm:^4.0.0": + version: 4.0.0 + resolution: "serialize-javascript@npm:4.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: f17305aaabab9ae443505d1bf477c13b09adb7031c397d18400bec16f43f788febdd3311ca6043fdebd1d446cfa70a5804ef7268da54351dec51080f56d52fa9 + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -9492,7 +9558,7 @@ fsevents@^2.1.2: languageName: node linkType: hard -"source-map-support@npm:^0.5.6": +"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.19": version: 0.5.19 resolution: "source-map-support@npm:0.5.19" dependencies: @@ -9523,7 +9589,7 @@ fsevents@^2.1.2: languageName: node linkType: hard -"source-map@npm:^0.7.3": +"source-map@npm:^0.7.3, source-map@npm:~0.7.2": version: 0.7.3 resolution: "source-map@npm:0.7.3" checksum: 351ce26ffa1ebf203660c0d70d7566c81e65d2d994d1c2d94da140808e02da34961673ce12ecea9b40797b96fbeb8c70bf71a4ad9f779f1a4fdbba75530bb386 @@ -10027,6 +10093,19 @@ fsevents@^2.1.2: languageName: node linkType: hard +"terser@npm:^5.0.0": + version: 5.3.8 + resolution: "terser@npm:5.3.8" + dependencies: + commander: ^2.20.0 + source-map: ~0.7.2 + source-map-support: ~0.5.19 + bin: + terser: bin/terser + checksum: 3fc070378ba9981d8088a4012060f16428a97dc8f98d5a731b2ab51b8c9bc8cb651ca068aef499faad863584ae4d4883872c4f51db053bc2575c2e0bc11ab411 + languageName: node + linkType: hard + "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0"