diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24a3dede..74f6a3e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: # Run this command as early as possible, before dependencies are installed # Learn more at https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun # Uncomment this line to enable task distribution - # - run: pnpm dlx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="build" + - run: pnpm dlx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="build" # Cache node_modules - uses: actions/setup-node@v4 diff --git a/.prettierignore b/.prettierignore index e26f0b3f..63c387c9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ /dist /coverage /.nx/cache -/.nx/workspace-data \ No newline at end of file +/.nx/workspace-data +pnpm-lock.yaml diff --git a/example/backend/project.json b/example/backend/project.json index 7bf9061b..1b1edef9 100644 --- a/example/backend/project.json +++ b/example/backend/project.json @@ -17,7 +17,6 @@ "platform": "node", "format": ["esm"], "bundle": true, - "generatePackageJson": true, "assets": [ { "glob": "example/backend/README.md", diff --git a/example/backend/src/lib/backend.ts b/example/backend/src/lib/backend.ts index 8d6a37e0..8940ac20 100644 --- a/example/backend/src/lib/backend.ts +++ b/example/backend/src/lib/backend.ts @@ -2,7 +2,6 @@ import { HttpsFunction, HttpsOptions, Request, - onCall, onRequest, } from 'firebase-functions/v2/https'; import { Response } from 'express'; @@ -12,7 +11,7 @@ import { logger } from 'firebase-functions'; function makeRuntime() { const cloudLogger = Logger.replace( Logger.defaultLogger, - Logger.make(({ logLevel, message }) => { + Logger.make(({ message }) => { logger.log(message); }) ); @@ -36,8 +35,6 @@ function onRequestEffect( }); } -function onCallEffect() {} - export const functionB = onRequestEffect( { region: 'europe-north1', diff --git a/example/backend/src/lib/on-request.ts b/example/backend/src/lib/on-request.ts deleted file mode 100644 index 301a5c2f..00000000 --- a/example/backend/src/lib/on-request.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Effect } from 'effect'; -import { - HttpsFunction, - HttpsOptions, - onRequest, -} from 'firebase-functions/https'; -import { run } from './runner.js'; - -function onRequestEffect( - options: HttpsOptions, - handler: (request: Request, response: Response) => Effect.Effect -): HttpsFunction { - return onRequest(options, async (request, response) => { - const result = await run(handler(request, response)); - response.send(result); - }); -} diff --git a/nx.json b/nx.json index 624986ed..60c2744f 100644 --- a/nx.json +++ b/nx.json @@ -17,9 +17,7 @@ { "plugin": "@nx/js/typescript", "options": { - "typecheck": { - "targetName": "typecheck" - }, + "typecheck": { "targetName": "typecheck" }, "build": { "targetName": "build", "configName": "tsconfig.lib.json", @@ -29,12 +27,7 @@ }, "exclude": ["tests/*"] }, - { - "plugin": "@nx/eslint/plugin", - "options": { - "targetName": "lint" - } - }, + { "plugin": "@nx/eslint/plugin", "options": { "targetName": "lint" } }, { "plugin": "@nx/vite/plugin", "options": { @@ -52,22 +45,13 @@ { "plugin": "@nx/js/typescript", "include": ["tests/*"], - "options": { - "typecheck": { - "targetName": "typecheck" - } - } + "options": { "typecheck": { "targetName": "typecheck" } } } ], - "targetDefaults": { - "test": { - "dependsOn": ["^build"] - } - }, + "targetDefaults": { "test": { "dependsOn": ["^build"] } }, "release": { "projects": ["!utils", "!@effect-firebase/source"], - "version": { - "preVersionCommand": "pnpm dlx nx run-many -t build" - } - } + "version": { "preVersionCommand": "pnpm dlx nx run-many -t build" } + }, + "nxCloudId": "68e6b41204d3d892e997c97b" } diff --git a/packages/admin/eslint.config.mjs b/packages/admin/eslint.config.mjs index 0803ef73..518b8c18 100644 --- a/packages/admin/eslint.config.mjs +++ b/packages/admin/eslint.config.mjs @@ -9,14 +9,14 @@ export default [ { files: ['*.json'], languageOptions: { - parser: jsoncEslintParser, + parser: await import('jsonc-eslint-parser'), }, rules: { '@nx/dependency-checks': [ 'error', { ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}'], - ignoredDependencies: ['@effect-firebase/core'], + ignoredDependencies: ['effect-firebase'], }, ], }, diff --git a/packages/admin/package.json b/packages/admin/package.json index 37bdb123..b6f6dec3 100644 --- a/packages/admin/package.json +++ b/packages/admin/package.json @@ -19,6 +19,11 @@ "!**/*.tsbuildinfo" ], "dependencies": { - "tslib": "^2.3.0" + "tslib": "^2.3.0", + "effect": "^3.17.3", + "firebase-admin": "^13.4.0" + }, + "devDependencies": { + "effect-firebase": "workspace:*" } } diff --git a/packages/admin/src/lib/firebase/firestore-service.ts b/packages/admin/src/lib/firebase/firestore-service.ts index a66741aa..5752af21 100644 --- a/packages/admin/src/lib/firebase/firestore-service.ts +++ b/packages/admin/src/lib/firebase/firestore-service.ts @@ -9,7 +9,7 @@ import { export const layer = () => Layer.succeed(FirestoreService, { - get: (path: string) => { + get: () => { return Effect.succeed(getFirestore()); }, convertToTimestamp: (date: Date) => { diff --git a/packages/admin/tsconfig.spec.json b/packages/admin/tsconfig.spec.json deleted file mode 100644 index f68d9d3b..00000000 --- a/packages/admin/tsconfig.spec.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./out-tsc/vitest", - "types": [ - "vitest/globals", - "vitest/importMeta", - "vite/client", - "node", - "vitest" - ], - "forceConsistentCasingInFileNames": true - }, - "include": [ - "vite.config.ts", - "vite.config.mts", - "vitest.config.ts", - "vitest.config.mts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.test.tsx", - "src/**/*.spec.tsx", - "src/**/*.test.js", - "src/**/*.spec.js", - "src/**/*.test.jsx", - "src/**/*.spec.jsx", - "src/**/*.d.ts" - ], - "references": [ - { - "path": "./tsconfig.lib.json" - } - ] -} diff --git a/packages/admin/vite.config.ts b/packages/admin/vite.config.ts deleted file mode 100644 index 8607bd7f..00000000 --- a/packages/admin/vite.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { defineConfig } from 'vite'; - -export default defineConfig(() => ({ - root: __dirname, - cacheDir: '../../node_modules/.vite/packages/client', - plugins: [], - // Uncomment this if you are using workers. - // worker: { - // plugins: [ nxViteTsPaths() ], - // }, - test: { - name: '@effect-firebase/admin', - watch: false, - globals: true, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - coverage: { - reportsDirectory: './test-output/vitest/coverage', - provider: 'v8' as const, - }, - }, -})); diff --git a/packages/client/package.json b/packages/client/package.json index 742da653..ff2ef543 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -20,5 +20,8 @@ ], "dependencies": { "tslib": "^2.3.0" + }, + "devDependencies": { + "effect-firebase": "workspace:*" } } diff --git a/packages/client/tsconfig.spec.json b/packages/client/tsconfig.spec.json deleted file mode 100644 index f68d9d3b..00000000 --- a/packages/client/tsconfig.spec.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./out-tsc/vitest", - "types": [ - "vitest/globals", - "vitest/importMeta", - "vite/client", - "node", - "vitest" - ], - "forceConsistentCasingInFileNames": true - }, - "include": [ - "vite.config.ts", - "vite.config.mts", - "vitest.config.ts", - "vitest.config.mts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.test.tsx", - "src/**/*.spec.tsx", - "src/**/*.test.js", - "src/**/*.spec.js", - "src/**/*.test.jsx", - "src/**/*.spec.jsx", - "src/**/*.d.ts" - ], - "references": [ - { - "path": "./tsconfig.lib.json" - } - ] -} diff --git a/packages/client/vite.config.ts b/packages/client/vite.config.ts deleted file mode 100644 index 3450837f..00000000 --- a/packages/client/vite.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { defineConfig } from 'vite'; - -export default defineConfig(() => ({ - root: __dirname, - cacheDir: '../../node_modules/.vite/packages/client', - plugins: [], - // Uncomment this if you are using workers. - // worker: { - // plugins: [ nxViteTsPaths() ], - // }, - test: { - name: '@effect-firebase/client', - watch: false, - globals: true, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - coverage: { - reportsDirectory: './test-output/vitest/coverage', - provider: 'v8' as const, - }, - }, -})); diff --git a/packages/effect-firebase/tsconfig.spec.json b/packages/effect-firebase/tsconfig.spec.json deleted file mode 100644 index f68d9d3b..00000000 --- a/packages/effect-firebase/tsconfig.spec.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./out-tsc/vitest", - "types": [ - "vitest/globals", - "vitest/importMeta", - "vite/client", - "node", - "vitest" - ], - "forceConsistentCasingInFileNames": true - }, - "include": [ - "vite.config.ts", - "vite.config.mts", - "vitest.config.ts", - "vitest.config.mts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.test.tsx", - "src/**/*.spec.tsx", - "src/**/*.test.js", - "src/**/*.spec.js", - "src/**/*.test.jsx", - "src/**/*.spec.jsx", - "src/**/*.d.ts" - ], - "references": [ - { - "path": "./tsconfig.lib.json" - } - ] -} diff --git a/packages/effect-firebase/vite.config.ts b/packages/effect-firebase/vite.config.ts deleted file mode 100644 index 65933195..00000000 --- a/packages/effect-firebase/vite.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { defineConfig } from 'vite'; - -export default defineConfig(() => ({ - root: __dirname, - cacheDir: '../../node_modules/.vite/packages/effect-firebase', - plugins: [], - // Uncomment this if you are using workers. - // worker: { - // plugins: [ nxViteTsPaths() ], - // }, - test: { - name: 'effect-firebase', - watch: false, - globals: true, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - coverage: { - reportsDirectory: './test-output/vitest/coverage', - provider: 'v8' as const, - }, - }, -})); diff --git a/packages/mock/package.json b/packages/mock/package.json index 6acfb73a..d92f0a0c 100644 --- a/packages/mock/package.json +++ b/packages/mock/package.json @@ -23,6 +23,7 @@ "tslib": "^2.3.0" }, "devDependencies": { - "vite": "^7.0.0" + "vite": "^7.0.0", + "effect-firebase": "workspace:*" } } diff --git a/packages/mock/src/lib/firestore/types/timestamp.spec.ts b/packages/mock/src/lib/firestore/types/timestamp.spec.ts new file mode 100644 index 00000000..4f686e65 --- /dev/null +++ b/packages/mock/src/lib/firestore/types/timestamp.spec.ts @@ -0,0 +1,8 @@ +import { MockTimestamp } from './timestamp.js'; + +describe('MockTimestamp', () => { + it('should be able to create a timestamp', () => { + const timestamp = MockTimestamp.now(); + expect(timestamp).toBeDefined(); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ab33811..908a1e5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -171,15 +171,29 @@ importers: packages/admin: dependencies: + effect: + specifier: ^3.17.3 + version: 3.17.3 + firebase-admin: + specifier: ^13.4.0 + version: 13.4.0(encoding@0.1.13) tslib: specifier: ^2.3.0 version: 2.8.1 + devDependencies: + effect-firebase: + specifier: workspace:* + version: link:../effect-firebase packages/client: dependencies: tslib: specifier: ^2.3.0 version: 2.8.1 + devDependencies: + effect-firebase: + specifier: workspace:* + version: link:../effect-firebase packages/effect-firebase: dependencies: @@ -196,11 +210,21 @@ importers: specifier: ^2.3.0 version: 2.8.1 devDependencies: + effect-firebase: + specifier: workspace:* + version: link:../effect-firebase vite: specifier: ^7.0.0 version: 7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(yaml@2.8.0) - tests: {} + tests: + devDependencies: + '@effect-firebase/mock': + specifier: workspace:* + version: link:../packages/mock + effect-firebase: + specifier: workspace:* + version: link:../packages/effect-firebase packages: diff --git a/tests/package.json b/tests/package.json index d56cccc6..6960080d 100644 --- a/tests/package.json +++ b/tests/package.json @@ -13,5 +13,9 @@ }, "./package.json": "./package.json" }, - "dependencies": {} + "dependencies": {}, + "devDependencies": { + "effect-firebase": "workspace:*", + "@effect-firebase/mock": "workspace:*" + } } diff --git a/tests/src/lib/firestore/schema/date.spec.ts b/tests/src/lib/firestore/schema/date.spec.ts index 3acaa671..d818f83f 100644 --- a/tests/src/lib/firestore/schema/date.spec.ts +++ b/tests/src/lib/firestore/schema/date.spec.ts @@ -1,7 +1,6 @@ import { Effect, Schema } from 'effect'; import { describe, it, expect } from '@effect/vitest'; -import { DateFromFirestore, - UnexpectedTypeError, } from 'effect-firebase'; +import { DateFromFirestore, UnexpectedTypeError } from 'effect-firebase'; import { firestoreService } from '@effect-firebase/mock'; describe('DateFromFirestore', () => {