From 62cc4e58bc72633efe173a20c6896959ab6d88a0 Mon Sep 17 00:00:00 2001 From: alvarius Date: Mon, 26 May 2025 11:42:26 +0200 Subject: [PATCH 1/2] remove change-case package --- packages/store-sync/package.json | 1 - .../src/postgres-decoded/buildTable.ts | 2 +- packages/store-sync/src/snakeCase.ts | 83 +++++++++++++++++++ packages/store-sync/src/sqlite/buildTable.ts | 2 +- .../store-sync/src/sqlite/getTableName.ts | 2 +- 5 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 packages/store-sync/src/snakeCase.ts diff --git a/packages/store-sync/package.json b/packages/store-sync/package.json index 0a09736ceb..f722e87f47 100644 --- a/packages/store-sync/package.json +++ b/packages/store-sync/package.json @@ -88,7 +88,6 @@ "@latticexyz/world-module-metadata": "workspace:*", "@trpc/client": "10.34.0", "@trpc/server": "10.34.0", - "change-case": "^5.2.0", "clarinet": "github:latticexyz/clarinet", "debug": "^4.3.4", "drizzle-orm": "^0.28.5", diff --git a/packages/store-sync/src/postgres-decoded/buildTable.ts b/packages/store-sync/src/postgres-decoded/buildTable.ts index 9d9ac37dee..43bb80ceab 100644 --- a/packages/store-sync/src/postgres-decoded/buildTable.ts +++ b/packages/store-sync/src/postgres-decoded/buildTable.ts @@ -1,5 +1,5 @@ import { PgColumnBuilderBase, PgTableWithColumns, pgSchema } from "drizzle-orm/pg-core"; -import { snakeCase } from "change-case"; +import { snakeCase } from "../snakeCase"; import { asBigInt, asHex } from "../postgres/columnTypes"; import { transformSchemaName } from "../postgres/transformSchemaName"; import { buildColumn } from "./buildColumn"; diff --git a/packages/store-sync/src/snakeCase.ts b/packages/store-sync/src/snakeCase.ts new file mode 100644 index 0000000000..bc95fc833b --- /dev/null +++ b/packages/store-sync/src/snakeCase.ts @@ -0,0 +1,83 @@ +// From https://github.com/blakeembrey/change-case/blob/main/packages/change-case/src/index.ts + +// Regexps involved with splitting words in various case formats. +const SPLIT_LOWER_UPPER_RE = /([\p{Ll}\d])(\p{Lu})/gu; +const SPLIT_UPPER_UPPER_RE = /(\p{Lu})([\p{Lu}][\p{Ll}])/gu; + +// Regexp involved with stripping non-word characters from the result. +const DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu; + +// The replacement value for splits. +const SPLIT_REPLACE_VALUE = "$1\0$2"; + +// The default characters to keep after transforming case. +const DEFAULT_PREFIX_SUFFIX_CHARACTERS = ""; + +/** + * Supported locale values. Use `false` to ignore locale. + * Defaults to `undefined`, which uses the host environment. + */ +type Locale = string[] | string | false | undefined; + +/** + * Convert a string to snake case (`foo_bar`). + */ +export function snakeCase(input: string) { + return noCase(input, "_"); +} + +/** + * Split any cased input strings into an array of words. + */ +function split(value: string) { + let result = value.trim(); + + result = result.replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE); + + result = result.replace(DEFAULT_STRIP_REGEXP, "\0"); + + let start = 0; + let end = result.length; + + // Trim the delimiter from around the output string. + while (result.charAt(start) === "\0") start++; + if (start === end) return []; + while (result.charAt(end - 1) === "\0") end--; + + return result.slice(start, end).split(/\0/g); +} + +/** + * Convert a string to space separated lower case (`foo bar`). + */ +function noCase(input: string, delimiter: string) { + const [prefix, words, suffix] = splitPrefixSuffix(input); + return prefix + words.map(lowerFactory(undefined)).join(delimiter) + suffix; +} + +function lowerFactory(locale: Locale): (input: string) => string { + return locale === false ? (input: string) => input.toLowerCase() : (input: string) => input.toLocaleLowerCase(locale); +} + +function splitPrefixSuffix(input: string): [string, string[], string] { + const splitFn = split; + const prefixCharacters = DEFAULT_PREFIX_SUFFIX_CHARACTERS; + const suffixCharacters = DEFAULT_PREFIX_SUFFIX_CHARACTERS; + let prefixIndex = 0; + let suffixIndex = input.length; + + while (prefixIndex < input.length) { + const char = input.charAt(prefixIndex); + if (!prefixCharacters.includes(char)) break; + prefixIndex++; + } + + while (suffixIndex > prefixIndex) { + const index = suffixIndex - 1; + const char = input.charAt(index); + if (!suffixCharacters.includes(char)) break; + suffixIndex = index; + } + + return [input.slice(0, prefixIndex), splitFn(input.slice(prefixIndex, suffixIndex)), input.slice(suffixIndex)]; +} diff --git a/packages/store-sync/src/sqlite/buildTable.ts b/packages/store-sync/src/sqlite/buildTable.ts index 367221e7c7..007167db5a 100644 --- a/packages/store-sync/src/sqlite/buildTable.ts +++ b/packages/store-sync/src/sqlite/buildTable.ts @@ -1,7 +1,7 @@ import { SQLiteColumnBuilderBase, SQLiteTableWithColumns, sqliteTable } from "drizzle-orm/sqlite-core"; import { buildColumn } from "./buildColumn"; import { getTableName } from "./getTableName"; -import { snakeCase } from "change-case"; +import { snakeCase } from "../snakeCase"; import { PartialTable } from "./common"; export const metaColumns = { diff --git a/packages/store-sync/src/sqlite/getTableName.ts b/packages/store-sync/src/sqlite/getTableName.ts index b9ace03826..7b12cb579c 100644 --- a/packages/store-sync/src/sqlite/getTableName.ts +++ b/packages/store-sync/src/sqlite/getTableName.ts @@ -1,4 +1,4 @@ -import { snakeCase } from "change-case"; +import { snakeCase } from "../snakeCase"; export function getTableName(address: string, namespace: string, tableName: string): string { return `${address.toLowerCase()}__${snakeCase(namespace)}__${snakeCase(tableName)}`; From 5ba3ffc848b9da0f04c343c8265ec4b0045c5aab Mon Sep 17 00:00:00 2001 From: alvarius Date: Thu, 26 Jun 2025 11:13:42 +0200 Subject: [PATCH 2/2] pnpm install --- pnpm-lock.yaml | 57 ++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db740ef93f..6b9ab7cd71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -446,7 +446,7 @@ importers: version: 2.20.2(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8) connectkit: specifier: ^1.9.0 - version: 1.9.0(@babel/core@7.27.3)(@tanstack/react-query@5.56.2(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.15.5(@tanstack/query-core@5.56.2)(@tanstack/react-query@5.56.2(react@18.2.0))(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + version: 1.9.0(@babel/core@7.25.2)(@tanstack/react-query@5.56.2(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.15.5(@tanstack/query-core@5.56.2)(@tanstack/react-query@5.56.2(react@18.2.0))(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) debug: specifier: ^4.3.4 version: 4.3.7 @@ -903,10 +903,10 @@ importers: version: 8.3.4 jest: specifier: ^29.3.1 - version: 29.5.0(@types/node@22.15.24) + version: 29.5.0(@types/node@20.17.16) ts-jest: specifier: ^29.0.5 - version: 29.0.5(@babel/core@7.27.3)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.27.3))(esbuild@0.23.1)(jest@29.5.0(@types/node@22.15.24))(typescript@5.4.2) + version: 29.0.5(@babel/core@7.25.7)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(esbuild@0.23.1)(jest@29.5.0(@types/node@20.17.16))(typescript@5.4.2) type-fest: specifier: ^2.14.0 version: 2.14.0 @@ -1195,9 +1195,6 @@ importers: '@trpc/server': specifier: 10.34.0 version: 10.34.0 - change-case: - specifier: ^5.2.0 - version: 5.2.0 clarinet: specifier: github:latticexyz/clarinet version: https://codeload.github.com/latticexyz/clarinet/tar.gz/9c30657e6000e0354c8c5b6e1efa3a434a0c0213 @@ -1292,10 +1289,10 @@ importers: version: 27.4.1 jest: specifier: ^29.3.1 - version: 29.5.0(@types/node@20.17.16) + version: 29.5.0(@types/node@22.15.24) ts-jest: specifier: ^29.0.5 - version: 29.0.5(@babel/core@7.25.7)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.25.7))(esbuild@0.23.1)(jest@29.5.0(@types/node@20.17.16))(typescript@5.4.2) + version: 29.0.5(@babel/core@7.27.3)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.27.3))(esbuild@0.23.1)(jest@29.5.0(@types/node@22.15.24))(typescript@5.4.2) packages/vite-plugin-mud: devDependencies: @@ -6315,9 +6312,6 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.2.0: - resolution: {integrity: sha512-L6VzznESnMIKKdKhVzCG+KPz4+x1FWbjOs1AdhoHStV3qo8aySMRGPUoqC0aL1ThKaQNGhAu6ZfHL/QAyQRuiw==} - change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -12201,7 +12195,8 @@ snapshots: '@babel/compat-data@7.25.7': {} - '@babel/compat-data@7.27.3': {} + '@babel/compat-data@7.27.3': + optional: true '@babel/core@7.25.2': dependencies: @@ -12262,6 +12257,7 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + optional: true '@babel/generator@7.17.7': dependencies: @@ -12325,6 +12321,7 @@ snapshots: browserslist: 4.25.0 lru-cache: 5.1.1 semver: 6.3.1 + optional: true '@babel/helper-environment-visitor@7.24.7': dependencies: @@ -12381,6 +12378,7 @@ snapshots: '@babel/traverse': 7.27.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color + optional: true '@babel/helper-plugin-utils@7.24.8': {} @@ -12426,7 +12424,8 @@ snapshots: '@babel/helper-validator-option@7.25.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.27.1': + optional: true '@babel/helpers@7.25.6': dependencies: @@ -12442,6 +12441,7 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/types': 7.27.3 + optional: true '@babel/highlight@7.24.7': dependencies: @@ -12537,9 +12537,9 @@ snapshots: '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': @@ -18201,14 +18201,14 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.18.3 - babel-plugin-styled-components@2.1.4(@babel/core@7.27.3)(styled-components@5.3.11(@babel/core@7.27.3)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.25.2)(styled-components@5.3.11(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.25.2) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.27.3)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -18344,6 +18344,7 @@ snapshots: electron-to-chromium: 1.5.161 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) + optional: true bs-logger@0.2.6: dependencies: @@ -18458,7 +18459,8 @@ snapshots: caniuse-lite@1.0.30001667: {} - caniuse-lite@1.0.30001720: {} + caniuse-lite@1.0.30001720: + optional: true chai@5.1.1: dependencies: @@ -18483,8 +18485,6 @@ snapshots: chalk@5.3.0: {} - change-case@5.2.0: {} - change-case@5.4.4: {} char-regex@1.0.2: {} @@ -18676,7 +18676,7 @@ snapshots: confbox@0.1.7: {} - connectkit@1.9.0(@babel/core@7.27.3)(@tanstack/react-query@5.56.2(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.15.5(@tanstack/query-core@5.56.2)(@tanstack/react-query@5.56.2(react@18.2.0))(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)): + connectkit@1.9.0(@babel/core@7.25.2)(@tanstack/react-query@5.56.2(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.15.5(@tanstack/query-core@5.56.2)(@tanstack/react-query@5.56.2(react@18.2.0))(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)): dependencies: '@tanstack/react-query': 5.56.2(react@18.2.0) buffer: 6.0.3 @@ -18689,7 +18689,7 @@ snapshots: react-transition-state: 1.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-use-measure: 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) resize-observer-polyfill: 1.5.1 - styled-components: 5.3.11(@babel/core@7.27.3)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) viem: 2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: 2.15.5(@tanstack/query-core@5.56.2)(@tanstack/react-query@5.56.2(react@18.2.0))(@types/react@18.2.22)(@upstash/redis@1.34.9)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(typescript@5.4.2)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.8)(typescript@5.4.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) transitivePeerDependencies: @@ -19044,7 +19044,8 @@ snapshots: electron-to-chromium@1.5.13: {} - electron-to-chromium@1.5.161: {} + electron-to-chromium@1.5.161: + optional: true electron-to-chromium@1.5.32: {} @@ -21684,7 +21685,8 @@ snapshots: node-releases@2.0.18: {} - node-releases@2.0.19: {} + node-releases@2.0.19: + optional: true node-sql-parser@5.3.3: dependencies: @@ -23344,14 +23346,14 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - styled-components@5.3.11(@babel/core@7.27.3)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): + styled-components@5.3.11(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): dependencies: '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) '@babel/traverse': 7.27.3(supports-color@5.5.0) '@emotion/is-prop-valid': 1.3.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.27.3)(styled-components@5.3.11(@babel/core@7.27.3)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.25.2)(styled-components@5.3.11(@babel/core@7.25.2)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 @@ -23946,6 +23948,7 @@ snapshots: browserslist: 4.25.0 escalade: 3.2.0 picocolors: 1.1.1 + optional: true uqr@0.1.2: {}