From 0477c1fd390eeac5da8dc11a1d427565190ac587 Mon Sep 17 00:00:00 2001 From: Darryl Walker Date: Tue, 14 May 2024 09:29:47 +0100 Subject: [PATCH] chore: fixes #52 and clarifies behaviour of ace editor. Updates github actions --- .github/workflows/nextjs.yml | 32 +++++++++++++------ .github/workflows/unit-test.yml | 6 ++-- .nvmrc | 2 +- src/components/RemoveEmptyProps.tsx | 10 +++++- src/packages/async-timeout/package.json | 2 +- src/packages/camel-to-kebab/package-lock.json | 2 +- src/packages/camel-to-kebab/package.json | 2 +- .../flatten-object-array/package.json | 2 +- src/packages/guid/package.json | 2 +- src/packages/is-client/package.json | 2 +- src/packages/is-external/package.json | 2 +- .../remove-empty-props/package-lock.json | 2 +- src/packages/remove-empty-props/package.json | 2 +- .../remove-empty-props/remove-empty-props.js | 1 + .../strip-chars-url-safe/package.json | 2 +- src/pages/api/hello.ts | 13 -------- .../remove-empty-props.test.ts.snap | 4 +-- tests/remove-empty-props.test.ts | 9 +++--- 18 files changed, 53 insertions(+), 44 deletions(-) delete mode 100644 src/pages/api/hello.ts diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 11d6098..3af05d8 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -7,7 +7,7 @@ name: Deploy Next.js site to Pages on: # Runs on pushes targeting the default branch push: - branches: ["main"] + branches: ['main'] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -21,7 +21,7 @@ permissions: # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: - group: "pages" + group: 'pages' cancel-in-progress: false jobs: @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Detect package manager id: detect-package-manager run: | @@ -49,12 +49,12 @@ jobs: exit 1 fi - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: "18" + node-version: '18' cache: ${{ steps.detect-package-manager.outputs.manager }} - name: Setup Pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v4 with: # Automatically inject basePath in your Next.js configuration file and disable # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). @@ -62,7 +62,7 @@ jobs: # You may remove this line if you want to manage the configuration yourself. static_site_generator: next - name: Restore cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | .next/cache @@ -71,6 +71,20 @@ jobs: # If source files changed but packages didn't, rebuild from a prior cache. restore-keys: | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- + + - name: Restore build cache + uses: actions/cache@v4 + with: + # See here for caching with `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn or you can leverage caching with actions/setup-node https://github.com/actions/setup-node + path: | + ~/.npm + ${{ github.workspace }}/.next/cache + # Generate a new cache whenever packages or source files change. + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} + # If source files changed but packages didn't, rebuild from a prior cache. + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- + - name: Install dependencies run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} - name: Build with Next.js @@ -78,7 +92,7 @@ jobs: #- name: Static HTML export with Next.js # run: ${{ steps.detect-package-manager.outputs.runner }} next export - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: path: ./out @@ -92,4 +106,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index e652566..326965b 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -13,12 +13,12 @@ jobs: strategy: matrix: - node-version: [16.x, v18.x,v20.x] + node-version: [16.x, v18.x, v20.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - run: npm install -g npm@9 diff --git a/.nvmrc b/.nvmrc index 3f430af..9a2a0e2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18 +v20 diff --git a/src/components/RemoveEmptyProps.tsx b/src/components/RemoveEmptyProps.tsx index bf3443a..397cc02 100644 --- a/src/components/RemoveEmptyProps.tsx +++ b/src/components/RemoveEmptyProps.tsx @@ -41,9 +41,17 @@ const RemoveEmptyProps = () => {

Enter some JSON below and watch the{' '} - null and undefined properties{' '} + null and undefined properties magically disappear... recursively!

+

+ + Note: due to a limitation of the editor library and the use of{' '} + JSON, you cannot put undefined in + the editor, however the library itself will handle those + values just fine. + +

diff --git a/src/packages/async-timeout/package.json b/src/packages/async-timeout/package.json index 50a3311..b49cae2 100644 --- a/src/packages/async-timeout/package.json +++ b/src/packages/async-timeout/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/async-timeout", - "version": "0.9.0", + "version": "0.10.0", "main": "./async-timeout.js", "types": "./async-timeout.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/camel-to-kebab/package-lock.json b/src/packages/camel-to-kebab/package-lock.json index 67a0d70..2b6c4d6 100644 --- a/src/packages/camel-to-kebab/package-lock.json +++ b/src/packages/camel-to-kebab/package-lock.json @@ -1,5 +1,5 @@ { "name": "@bagofholding/camel-to-kebab", - "version": "0.9.0", + "version": "0.10.0", "lockfileVersion": 1 } diff --git a/src/packages/camel-to-kebab/package.json b/src/packages/camel-to-kebab/package.json index 4635177..f8bc3c9 100644 --- a/src/packages/camel-to-kebab/package.json +++ b/src/packages/camel-to-kebab/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/camel-to-kebab", - "version": "0.9.0", + "version": "0.10.0", "main": "camel-to-kebab.js", "types": "./camel-to-kebab.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/flatten-object-array/package.json b/src/packages/flatten-object-array/package.json index c3247f6..d1f003c 100644 --- a/src/packages/flatten-object-array/package.json +++ b/src/packages/flatten-object-array/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/flatten-object-array", - "version": "0.9.0", + "version": "0.10.0", "main": "flatten-object-array.js", "types": "./flatten-object-array.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/guid/package.json b/src/packages/guid/package.json index c447ee7..0709655 100644 --- a/src/packages/guid/package.json +++ b/src/packages/guid/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/guid", - "version": "0.9.0", + "version": "0.10.0", "main": "guid.js", "types": "./guid.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/is-client/package.json b/src/packages/is-client/package.json index 77d7da2..258cd1a 100644 --- a/src/packages/is-client/package.json +++ b/src/packages/is-client/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/is-client", - "version": "0.9.0", + "version": "0.10.0", "main": "is-client.js", "types": "./is-client.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/is-external/package.json b/src/packages/is-external/package.json index 02882cd..13a2129 100644 --- a/src/packages/is-external/package.json +++ b/src/packages/is-external/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/is-external", - "version": "0.9.0", + "version": "0.10.0", "main": "is-external.js", "types": "./is-external.d.ts", "scripts": { diff --git a/src/packages/remove-empty-props/package-lock.json b/src/packages/remove-empty-props/package-lock.json index 7503f03..8103841 100644 --- a/src/packages/remove-empty-props/package-lock.json +++ b/src/packages/remove-empty-props/package-lock.json @@ -1,5 +1,5 @@ { "name": "@bagofholding/remove-empty-props", - "version": "0.9.0", + "version": "0.10.0", "lockfileVersion": 1 } diff --git a/src/packages/remove-empty-props/package.json b/src/packages/remove-empty-props/package.json index 7056f99..2093347 100644 --- a/src/packages/remove-empty-props/package.json +++ b/src/packages/remove-empty-props/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/remove-empty-props", - "version": "0.9.0", + "version": "0.10.0", "main": "remove-empty-props.js", "types": "./remove-empty-props.d.ts", "author": "Darryl Walker ", diff --git a/src/packages/remove-empty-props/remove-empty-props.js b/src/packages/remove-empty-props/remove-empty-props.js index b5b9c10..f0edd44 100644 --- a/src/packages/remove-empty-props/remove-empty-props.js +++ b/src/packages/remove-empty-props/remove-empty-props.js @@ -27,6 +27,7 @@ const exportModule = (module.exports = function removeEmptyProps(object) { return Object.fromEntries( Object.entries(object) .filter(([_k, v]) => v !== null) + .filter(([_k, v]) => v !== undefined) .map(([k, v]) => { if (isArray(v)) { return [k, v]; diff --git a/src/packages/strip-chars-url-safe/package.json b/src/packages/strip-chars-url-safe/package.json index 34c0353..2f49434 100644 --- a/src/packages/strip-chars-url-safe/package.json +++ b/src/packages/strip-chars-url-safe/package.json @@ -1,6 +1,6 @@ { "name": "@bagofholding/strip-chars-url-safe", - "version": "0.9.0", + "version": "0.10.0", "main": "strip-chars-url-safe.js", "types": "./strip-chars-url-safe.d.ts", "author": "Darryl Walker ", diff --git a/src/pages/api/hello.ts b/src/pages/api/hello.ts deleted file mode 100644 index f8bcc7e..0000000 --- a/src/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler( - req: NextApiRequest, - res: NextApiResponse -) { - res.status(200).json({ name: 'John Doe' }) -} diff --git a/tests/__snapshots__/remove-empty-props.test.ts.snap b/tests/__snapshots__/remove-empty-props.test.ts.snap index cf19243..48310d4 100644 --- a/tests/__snapshots__/remove-empty-props.test.ts.snap +++ b/tests/__snapshots__/remove-empty-props.test.ts.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`leaves \`arrays\` untouched 1`] = `6`; +exports[`leaves \`arrays\` untouched 1`] = `5`; -exports[`recursively removes \`null\` and \`undefined\` properties from payload object 1`] = `6`; +exports[`recursively removes \`null\` and \`undefined\` properties from payload object 1`] = `5`; diff --git a/tests/remove-empty-props.test.ts b/tests/remove-empty-props.test.ts index 136d1fa..6b55af8 100644 --- a/tests/remove-empty-props.test.ts +++ b/tests/remove-empty-props.test.ts @@ -3,8 +3,6 @@ import removeEmptyProps, { isObject } from '../src/packages/remove-empty-props'; -import * as funcs from '../src/packages/remove-empty-props'; - const object = { foo: null, bar: undefined, @@ -18,13 +16,14 @@ const object = { three: Number('3'), four: null, five: undefined, - six: {}, - seven: [] + six: false, + seven: [], + eight: {} } }; it('recursively removes `null` and `undefined` properties from payload object', () => { - expect(Object.keys(removeEmptyProps(object)).length).toBe(6); + expect(Object.keys(removeEmptyProps(object)).length).toBe(5); expect(Object.keys(removeEmptyProps(object).object).length).toBe(6); expect(Object.keys(removeEmptyProps(object)).length).toMatchSnapshot(); });