From 3fd42d7a6050866d888ee2ca677a377396150771 Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Mon, 8 Nov 2021 15:38:12 -0800 Subject: [PATCH] Move package.json inside the node/ directory Previously all APIs were available through the top-level index.ts, but now the zkgroup APIs are in their own module. To access that in the old packaging required writing import * from '@signalapp/signal-client/node/dist/zkgroup' This commit moves the package root into the node/ directory to eliminate the 'node/' component, then adds a top-level, precompiled zkgroup.js/.d.ts so that clients can use import * from '@signalapp/signal-client/zkgroup' --- .github/workflows/build_and_test.yml | 11 ++++++----- .github/workflows/npm.yml | 11 +++++++++-- .gitignore | 4 ++-- .prettierignore | 2 -- README.md | 1 + bin/update_versions.py | 4 ++-- node/.eslintignore | 2 ++ node/.prettierignore | 3 +++ node/NativeImpl.ts | 2 +- binding.gyp => node/binding.gyp | 4 ++-- package.json => node/package.json | 24 +++++++++++++----------- node/tsconfig.json | 3 ++- yarn.lock => node/yarn.lock | 0 node/zkgroup.d.ts | 7 +++++++ node/zkgroup.js | 10 ++++++++++ 15 files changed, 60 insertions(+), 28 deletions(-) delete mode 100644 .prettierignore create mode 100644 node/.prettierignore rename binding.gyp => node/binding.gyp (94%) rename package.json => node/package.json (66%) rename yarn.lock => node/yarn.lock (100%) create mode 100644 node/zkgroup.d.ts create mode 100644 node/zkgroup.js diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 4b9941ba..ddce00c7 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -51,13 +51,9 @@ jobs: node: - *all - '.nvmrc' - - '.prettierignore' - - '.prettierrc' - - 'binding.gyp' + - '.prettierrc.js' - 'node/**' - - 'package.json' - 'rust/bridge/node/**' - - 'yarn.lock' rust_ios: &rust_ios - *all - 'rust/bridge/ffi/**' @@ -236,20 +232,25 @@ jobs: if: matrix.os == 'ubuntu-latest' - run: yarn install --frozen-lockfile + working-directory: node - run: yarn tsc + working-directory: node - run: yarn lint if: matrix.os == 'ubuntu-latest' + working-directory: node - run: yarn format -c if: matrix.os == 'ubuntu-latest' + working-directory: node - name: Run yarn test uses: GabrielBB/xvfb-action@v1.4 with: # The tests use an Electron-based runner, so we need to set up a dummy display for them. run: yarn test + working-directory: node swift_package: name: Swift Package diff --git a/.github/workflows/npm.yml b/.github/workflows/npm.yml index 05dbba65..47878671 100644 --- a/.github/workflows/npm.yml +++ b/.github/workflows/npm.yml @@ -48,14 +48,16 @@ jobs: if: matrix.os == 'ubuntu-latest' - run: yarn install --ignore-scripts --frozen-lockfile + working-directory: node - run: npx prebuildify --napi + working-directory: node - name: Upload library uses: actions/upload-artifact@v2 with: name: libsignal_client (${{matrix.os}}) - path: prebuilds/* + path: node/prebuilds/* publish: name: Publish @@ -85,21 +87,26 @@ jobs: path: artifacts - name: Copy libraries - run: mkdir prebuilds && mv ${{ steps.download.outputs.download-path }}/*/* prebuilds && find prebuilds + run: mkdir node/prebuilds && mv ${{ steps.download.outputs.download-path }}/*/* node/prebuilds && find node/prebuilds - run: yarn install --frozen-lockfile + working-directory: node - run: yarn tsc + working-directory: node - run: yarn lint + working-directory: node - run: yarn format -c + working-directory: node - name: Run yarn test uses: GabrielBB/xvfb-action@v1.4 with: # The tests use an Electron-based runner, so we need to set up a dummy display for them. run: yarn test + working-directory: node - name: Publish to NPM uses: JS-DevTools/npm-publish@v1 diff --git a/.gitignore b/.gitignore index 795d799c..d8127cf3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,8 @@ /target /swift/.build /node/dist -/node_modules -/build +/node/node_modules +/node/build /rust/bridge/node/futures/tests/node-tests/node_modules diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 166c37ca..00000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -node/dist/** -node/Native.d.ts diff --git a/README.md b/README.md index ef6435a4..d8e5b689 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ appropriate version automatically. We use [`yarn`](https://classic.yarnpkg.com/) as our package manager. The Rust library will automatically be built when you run `yarn install`. ```shell +$ cd node $ nvm use $ yarn install $ yarn tsc diff --git a/bin/update_versions.py b/bin/update_versions.py index 050ea923..98c3891d 100755 --- a/bin/update_versions.py +++ b/bin/update_versions.py @@ -42,7 +42,7 @@ def main(): if len(sys.argv) > 1: update_version('SignalClient.podspec', PODSPEC_PATTERN, sys.argv[1]) update_version(os.path.join('java', 'build.gradle'), GRADLE_PATTERN, sys.argv[1]) - update_version('package.json', NODE_PATTERN, sys.argv[1]) + update_version(os.path.join('node', 'package.json'), NODE_PATTERN, sys.argv[1]) update_version(bridge_path('ffi'), CARGO_PATTERN, sys.argv[1]) update_version(bridge_path('jni'), CARGO_PATTERN, sys.argv[1]) update_version(bridge_path('node'), CARGO_PATTERN, sys.argv[1]) @@ -51,7 +51,7 @@ def main(): package_versions = { 'swift': read_version('SignalClient.podspec', PODSPEC_PATTERN), 'java': read_version(os.path.join('java', 'build.gradle'), GRADLE_PATTERN), - 'node': read_version('package.json', NODE_PATTERN) + 'node': read_version(os.path.join('node', 'package.json'), NODE_PATTERN) } bridge_versions = { diff --git a/node/.eslintignore b/node/.eslintignore index 0716ff13..6e717646 100644 --- a/node/.eslintignore +++ b/node/.eslintignore @@ -1,2 +1,4 @@ dist/** .eslintrc.js +zkgroup.js +zkgroup.d.ts diff --git a/node/.prettierignore b/node/.prettierignore new file mode 100644 index 00000000..6e120731 --- /dev/null +++ b/node/.prettierignore @@ -0,0 +1,3 @@ +build/** +dist/** +Native.d.ts diff --git a/node/NativeImpl.ts b/node/NativeImpl.ts index ca2e967c..cb8b6ed4 100644 --- a/node/NativeImpl.ts +++ b/node/NativeImpl.ts @@ -5,4 +5,4 @@ import * as Native from './Native'; // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires -export default require('node-gyp-build')(__dirname + '/../..') as typeof Native; +export default require('node-gyp-build')(__dirname + '/..') as typeof Native; diff --git a/binding.gyp b/node/binding.gyp similarity index 94% rename from binding.gyp rename to node/binding.gyp index c9619872..f84b2668 100644 --- a/binding.gyp +++ b/node/binding.gyp @@ -19,10 +19,10 @@ 'type': 'none', 'actions': [ { - 'action_name': 'node/build_node_bridge.py', + 'action_name': 'build_node_bridge.py', 'action': [ 'python3', - 'node/build_node_bridge.py', + 'build_node_bridge.py', # Use separated arguments for paths, joined arguments for non-paths. '--out-dir', '<(PRODUCT_DIR)/', '--os-name=<(NODE_OS_NAME)', diff --git a/package.json b/node/package.json similarity index 66% rename from package.json rename to node/package.json index ac2118de..f8f8fa5d 100644 --- a/package.json +++ b/node/package.json @@ -2,23 +2,25 @@ "name": "@signalapp/signal-client", "version": "0.10.0", "license": "AGPL-3.0-only", - "main": "node/dist/index.js", - "types": "node/dist/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ - "node/dist/*.js", - "node/dist/*.d.ts", - "node/dist/zkgroup/**/*.js", - "node/dist/zkgroup/**/*.d.ts", + "dist/*.js", + "dist/*.d.ts", + "dist/zkgroup/**/*.js", + "dist/zkgroup/**/*.d.ts", + "zkgroup.js", + "zkgroup.d.ts", "prebuilds/*/*.node" ], "scripts": { "install": "node-gyp-build", "build": "node-gyp build", - "tsc": "tsc -b node && yarn cpy node/*.d.ts node/dist/", - "clean": "rimraf node/dist build prebuilds", - "test": "electron-mocha --recursive node/dist/test --require source-map-support/register", - "lint": "cd node && eslint . --ext .js,.jsx,.ts,.tsx", - "format": "p() { prettier ${@:- --write} package.json '*.js' 'node/**/*.{css,js,json,md,scss,ts,tsx}'; }; p" + "tsc": "tsc -b && yarn cpy Native.d.ts dist/", + "clean": "rimraf dist build prebuilds", + "test": "electron-mocha --recursive dist/test --require source-map-support/register", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "format": "p() { prettier ${@:- --write} '**/*.{css,js,json,md,scss,ts,tsx}'; }; p" }, "dependencies": { "node-gyp-build": "^4.2.3", diff --git a/node/tsconfig.json b/node/tsconfig.json index 065bdd4d..009bd9c1 100644 --- a/node/tsconfig.json +++ b/node/tsconfig.json @@ -6,5 +6,6 @@ "outDir": "./dist", "strict": true, "sourceMap": true - } + }, + "include": ["index.ts", "zkgroup/index.ts", "test/*.ts"] } diff --git a/yarn.lock b/node/yarn.lock similarity index 100% rename from yarn.lock rename to node/yarn.lock diff --git a/node/zkgroup.d.ts b/node/zkgroup.d.ts new file mode 100644 index 00000000..307f7c08 --- /dev/null +++ b/node/zkgroup.d.ts @@ -0,0 +1,7 @@ +// +// Copyright 2021 Signal Messenger, LLC. +// SPDX-License-Identifier: AGPL-3.0-only +// + +// Make it possible to import from '@signalapp/signal-client/zkgroup'. +export * from './dist/zkgroup'; diff --git a/node/zkgroup.js b/node/zkgroup.js new file mode 100644 index 00000000..0e0e2b21 --- /dev/null +++ b/node/zkgroup.js @@ -0,0 +1,10 @@ +// +// Copyright 2021 Signal Messenger, LLC. +// SPDX-License-Identifier: AGPL-3.0-only +// + +/* eslint-env commonjs */ + +// Make it possible to import from '@signalapp/signal-client/zkgroup'. +// eslint-disable-next-line @typescript-eslint/no-require-imports +module.exports = require('./dist/zkgroup');