lucy-cli 2.0.0-alpha.9 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarnrc.yml +0 -1
- package/dist/args.d.ts +1 -6
- package/dist/args.js +62 -7
- package/dist/args.js.map +1 -0
- package/dist/commands/checks.d.ts +7 -0
- package/dist/commands/checks.js +47 -0
- package/dist/commands/checks.js.map +1 -0
- package/dist/commands/cleanup.d.ts +4 -0
- package/dist/commands/cleanup.js +10 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/copy.d.ts +6 -0
- package/dist/commands/copy.js +20 -0
- package/dist/commands/copy.js.map +1 -0
- package/dist/commands/edit.d.ts +10 -0
- package/dist/commands/edit.js +67 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/exec.d.ts +7 -0
- package/dist/commands/exec.js +67 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/git.d.ts +8 -0
- package/dist/commands/git.js +104 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/home.d.ts +4 -0
- package/dist/commands/home.js +18 -0
- package/dist/commands/home.js.map +1 -0
- package/dist/commands/install.d.ts +8 -0
- package/dist/commands/install.js +165 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/read.d.ts +6 -0
- package/dist/commands/read.js +40 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/write.d.ts +7 -0
- package/dist/commands/write.js +28 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/commands.js +1 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +29 -7
- package/dist/config.js +90 -26
- package/dist/config.js.map +1 -0
- package/dist/error.d.ts +1 -9
- package/dist/error.js +1 -2
- package/dist/error.js.map +1 -0
- package/dist/helpers.d.ts +9 -0
- package/dist/helpers.js +83 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +77 -9
- package/dist/index.js.map +1 -0
- package/dist/init/blocks.d.ts +5 -0
- package/dist/init/blocks.js +62 -0
- package/dist/init/blocks.js.map +1 -0
- package/dist/init/cargo.d.ts +2 -0
- package/dist/init/cargo.js +21 -0
- package/dist/init/cargo.js.map +1 -0
- package/dist/init/expo.d.ts +5 -0
- package/dist/init/expo.js +52 -0
- package/dist/init/expo.js.map +1 -0
- package/dist/init/gitModules.d.ts +2 -0
- package/dist/init/gitModules.js +13 -0
- package/dist/init/gitModules.js.map +1 -0
- package/dist/init/index.d.ts +4 -0
- package/dist/init/index.js +77 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/monorepo.d.ts +4 -0
- package/dist/init/monorepo.js +48 -0
- package/dist/init/monorepo.js.map +1 -0
- package/dist/init/prepareVelo.d.ts +2 -0
- package/dist/init/prepareVelo.js +16 -0
- package/dist/init/prepareVelo.js.map +1 -0
- package/dist/init/tauri.d.ts +5 -0
- package/dist/init/tauri.js +32 -0
- package/dist/init/tauri.js.map +1 -0
- package/dist/init/templates.d.ts +5 -0
- package/dist/init/templates.js +93 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/init/velo.d.ts +5 -0
- package/dist/init/velo.js +60 -0
- package/dist/init/velo.js.map +1 -0
- package/dist/policy.js +1 -0
- package/dist/policy.js.map +1 -0
- package/dist/prepare.js +1 -0
- package/dist/prepare.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +1 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schemas/gulp.d.ts +25 -0
- package/dist/schemas/gulp.js +8 -0
- package/dist/schemas/gulp.js.map +1 -0
- package/dist/schemas/index.d.ts +10 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/lucy.d.ts +29 -0
- package/dist/schemas/lucy.js +42 -0
- package/dist/schemas/lucy.js.map +1 -0
- package/dist/schemas/tsconfig.js +2 -0
- package/dist/schemas/tsconfig.js.map +1 -0
- package/dist/schemas/types.d.ts +33 -0
- package/dist/schemas/types.js +5 -1
- package/dist/schemas/types.js.map +1 -0
- package/dist/states.js +1 -0
- package/dist/states.js.map +1 -0
- package/dist/tasks/Gulpfile.d.ts +4 -0
- package/dist/tasks/Gulpfile.js +111 -0
- package/dist/tasks/Gulpfile.js.map +1 -0
- package/dist/tasks/gulp/backend.d.ts +4 -0
- package/dist/tasks/gulp/backend.js +92 -0
- package/dist/tasks/gulp/backend.js.map +1 -0
- package/dist/tasks/gulp/checks.d.ts +4 -0
- package/dist/tasks/gulp/checks.js +202 -0
- package/dist/tasks/gulp/checks.js.map +1 -0
- package/dist/tasks/gulp/clean.d.ts +3 -0
- package/dist/tasks/gulp/clean.js +33 -0
- package/dist/tasks/gulp/clean.js.map +1 -0
- package/dist/tasks/gulp/copy.d.ts +3 -0
- package/dist/tasks/gulp/copy.js +34 -0
- package/dist/tasks/gulp/copy.js.map +1 -0
- package/dist/tasks/gulp/helpers.d.ts +3 -0
- package/dist/tasks/gulp/helpers.js +19 -0
- package/dist/tasks/gulp/helpers.js.map +1 -0
- package/dist/tasks/gulp/pages.d.ts +2 -0
- package/dist/tasks/gulp/pages.js +39 -0
- package/dist/tasks/gulp/pages.js.map +1 -0
- package/dist/tasks/gulp/pipeline.d.ts +1 -0
- package/dist/tasks/gulp/pipeline.js +29 -0
- package/dist/tasks/gulp/pipeline.js.map +1 -0
- package/dist/tasks/gulp/public.d.ts +3 -0
- package/dist/tasks/gulp/public.js +50 -0
- package/dist/tasks/gulp/public.js.map +1 -0
- package/dist/tasks/gulp/styles.d.ts +3 -0
- package/dist/tasks/gulp/styles.js +40 -0
- package/dist/tasks/gulp/styles.js.map +1 -0
- package/dist/tasks/gulp/templates.d.ts +2 -0
- package/dist/tasks/gulp/templates.js +45 -0
- package/dist/tasks/gulp/templates.js.map +1 -0
- package/dist/tasks/gulp/types.d.ts +4 -0
- package/dist/tasks/gulp/types.js +293 -0
- package/dist/tasks/gulp/types.js.map +1 -0
- package/dist/tasks/gulp/watchers.d.ts +3 -0
- package/dist/tasks/gulp/watchers.js +59 -0
- package/dist/tasks/gulp/watchers.js.map +1 -0
- package/dist/tasks/index.d.ts +4 -0
- package/dist/tasks/index.js +23 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/syncSettings.d.ts +3 -0
- package/dist/tasks/syncSettings.js +18 -0
- package/dist/tasks/syncSettings.js.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wix-sdk/check.d.ts +4 -0
- package/dist/wix-sdk/check.js +23 -0
- package/dist/wix-sdk/check.js.map +1 -0
- package/dist/wix-sdk/client.d.ts +10 -0
- package/dist/wix-sdk/client.js +18 -0
- package/dist/wix-sdk/client.js.map +1 -0
- package/dist/wix-sdk/index.d.ts +4 -0
- package/dist/wix-sdk/index.js +15 -0
- package/dist/wix-sdk/index.js.map +1 -0
- package/dist/wix-sdk/init.d.ts +4 -0
- package/dist/wix-sdk/init.js +51 -0
- package/dist/wix-sdk/init.js.map +1 -0
- package/dist/wix-sdk/run.d.ts +4 -0
- package/dist/wix-sdk/run.js +53 -0
- package/dist/wix-sdk/run.js.map +1 -0
- package/dist/wix-sync/client.d.ts +3 -0
- package/dist/wix-sync/client.js +5 -0
- package/dist/wix-sync/client.js.map +1 -0
- package/dist/wix-sync/export.d.ts +4 -0
- package/dist/wix-sync/export.js +15 -0
- package/dist/wix-sync/export.js.map +1 -0
- package/dist/wix-sync/import.d.ts +4 -0
- package/dist/wix-sync/import.js +26 -0
- package/dist/wix-sync/import.js.map +1 -0
- package/dist/wix-sync/index.d.ts +4 -0
- package/dist/wix-sync/index.js +35 -0
- package/dist/wix-sync/index.js.map +1 -0
- package/dist/wix-sync/init.d.ts +4 -0
- package/dist/wix-sync/init.js +74 -0
- package/dist/wix-sync/init.js.map +1 -0
- package/dist/wix-sync/is-alive.d.ts +4 -0
- package/dist/wix-sync/is-alive.js +23 -0
- package/dist/wix-sync/is-alive.js.map +1 -0
- package/dist/wix-sync/migrate.d.ts +4 -0
- package/dist/wix-sync/migrate.js +21 -0
- package/dist/wix-sync/migrate.js.map +1 -0
- package/dist/wix-sync/sync.d.ts +4 -0
- package/dist/wix-sync/sync.js +26 -0
- package/dist/wix-sync/sync.js.map +1 -0
- package/files/sync-data/data/test.csv +17 -0
- package/files/sync-data/files/lucy.jpg +0 -0
- package/files/sync-data/schema/test.json +11 -0
- package/files/templates/block[D]/files/.stylelintrc.js +8 -0
- package/files/templates/block[D]/lucy.json +9 -0
- package/files/templates/cargo[D]/files/.env +1 -0
- package/files/templates/cargo[D]/files/Cargo.toml +238 -0
- package/files/templates/cargo[D]/files/Makefile.toml +4 -0
- package/files/templates/cargo[D]/files/build/main.rs +35 -0
- package/files/templates/cargo[D]/files/config/beta.json +19 -0
- package/files/templates/cargo[D]/files/config/ci.json +15 -0
- package/files/templates/cargo[D]/files/config/default.json +71 -0
- package/files/templates/cargo[D]/files/config/development.json +10 -0
- package/files/templates/cargo[D]/files/config/produktion.json +5 -0
- package/files/templates/cargo[D]/files/config/stage.json +4 -0
- package/files/templates/cargo[D]/files/locales/todo.yml +3 -0
- package/files/templates/cargo[D]/files/public/index.html +1 -0
- package/files/templates/cargo[D]/lucy.json +15 -0
- package/files/templates/expo[D]/files/.stylelintrc.js +8 -0
- package/files/{expo → templates/expo[D]/files}/eas.json +9 -3
- package/files/templates/expo[D]/files/lib/data.ts +197 -0
- package/files/{expo → templates/expo[D]/files}/metro.config.js +6 -0
- package/files/templates/expo[D]/files/pnpm-workspace.yaml +3 -0
- package/files/templates/expo[D]/lucy.json +86 -0
- package/files/templates/monorepo[D]/files/.editorconfig +10 -0
- package/files/templates/monorepo[D]/files/.nvmrc +1 -0
- package/files/templates/monorepo[D]/files/.prettierignore +23 -0
- package/files/templates/monorepo[D]/files/.prettierrc.json +15 -0
- package/files/templates/monorepo[D]/files/.stylelintrc.js +8 -0
- package/files/templates/monorepo[D]/files/.yarnrc +1 -0
- package/files/templates/monorepo[D]/files/.yarnrc.yml +3 -0
- package/files/templates/monorepo[D]/files/README.md +109 -0
- package/files/templates/monorepo[D]/files/currents.config.ts +5 -0
- package/files/templates/monorepo[D]/files/nx.json +25 -0
- package/files/templates/monorepo[D]/files/pnpm-workspace.yaml +11 -0
- package/files/templates/monorepo[D]/files/tsconfig.json +6 -0
- package/files/templates/monorepo[D]/files/typedoc.json +25 -0
- package/files/templates/monorepo[D]/files/vitest.config.ts +27 -0
- package/files/templates/monorepo[D]/lucy.json +69 -0
- package/files/templates/tauri[D]/lucy.json +9 -0
- package/files/templates/velo[D]/files/.prettierignore +23 -0
- package/files/templates/velo[D]/files/.prettierrc.js +16 -0
- package/files/templates/velo[D]/lucy.json +137 -0
- package/old/Gulpfile.d.ts +34 -0
- package/old/Gulpfile.js +116 -0
- package/old/Gulpfile.js.map +1 -0
- package/old/gulp/backend.d.ts +3 -0
- package/old/gulp/backend.js +92 -0
- package/old/gulp/backend.js.map +1 -0
- package/old/gulp/checks.d.ts +3 -0
- package/old/gulp/checks.js +205 -0
- package/old/gulp/checks.js.map +1 -0
- package/old/gulp/clean.d.ts +3 -0
- package/old/gulp/clean.js +29 -0
- package/old/gulp/clean.js.map +1 -0
- package/old/gulp/copy.d.ts +2 -0
- package/old/gulp/copy.js +34 -0
- package/old/gulp/copy.js.map +1 -0
- package/old/gulp/helpers.d.ts +2 -0
- package/old/gulp/helpers.js +25 -0
- package/old/gulp/helpers.js.map +1 -0
- package/old/gulp/pages.d.ts +2 -0
- package/old/gulp/pages.js +37 -0
- package/old/gulp/pages.js.map +1 -0
- package/old/gulp/pipeline.d.ts +1 -0
- package/old/gulp/pipeline.js +29 -0
- package/old/gulp/pipeline.js.map +1 -0
- package/old/gulp/public.d.ts +2 -0
- package/old/gulp/public.js +50 -0
- package/old/gulp/public.js.map +1 -0
- package/old/gulp/styles.d.ts +2 -0
- package/old/gulp/styles.js +40 -0
- package/old/gulp/styles.js.map +1 -0
- package/old/gulp/templates.d.ts +2 -0
- package/old/gulp/templates.js +33 -0
- package/old/gulp/templates.js.map +1 -0
- package/old/gulp/types.d.ts +4 -0
- package/old/gulp/types.js +289 -0
- package/old/gulp/types.js.map +1 -0
- package/old/gulp/watchers.d.ts +9 -0
- package/old/gulp/watchers.js +59 -0
- package/old/gulp/watchers.js.map +1 -0
- package/old/helpers.d.ts +32 -0
- package/old/helpers.js +267 -0
- package/old/helpers.js.map +1 -0
- package/{src copy/helpers.ts → old/helpers.ts} +1 -1
- package/old/index.d.ts +59 -0
- package/old/index.js +288 -0
- package/old/index.js.map +1 -0
- package/old/init.d.ts +8 -0
- package/old/init.js +165 -0
- package/old/init.js.map +1 -0
- package/old/models.d.ts +37 -0
- package/old/models.js +2 -0
- package/old/models.js.map +1 -0
- package/old/prepare.d.ts +8 -0
- package/old/prepare.js +20 -0
- package/old/prepare.js.map +1 -0
- package/old/schemas/index.js +2 -0
- package/old/schemas/index.js.map +1 -0
- package/old/schemas/index.ts +0 -0
- package/old/schemas/types.d.ts +0 -0
- package/old/schemas/types.js +2 -0
- package/old/schemas/types.js.map +1 -0
- package/old/schemas/types.ts +0 -0
- package/old/sync.d.ts +2 -0
- package/old/sync.js +88 -0
- package/old/sync.js.map +1 -0
- package/package.json +18 -19
- package/patches/velo-sync+0.0.9.patch +13 -0
- package/src/args.ts +62 -17
- package/src/commands/checks.ts +51 -0
- package/src/commands/cleanup.ts +11 -0
- package/src/commands/copy.ts +28 -0
- package/src/commands/edit.ts +81 -0
- package/src/commands/exec.ts +69 -0
- package/src/commands/git.ts +113 -0
- package/src/commands/home.ts +22 -0
- package/src/commands/install.ts +249 -0
- package/src/commands/read.ts +45 -0
- package/src/commands/write.ts +45 -0
- package/src/config.ts +116 -35
- package/src/error.ts +1 -2
- package/src/helpers.ts +92 -0
- package/src/index.ts +88 -13
- package/src/init/blocks.ts +85 -0
- package/src/init/cargo.ts +25 -0
- package/src/init/expo.ts +69 -0
- package/src/init/gitModules.ts +15 -0
- package/src/init/index.ts +81 -0
- package/src/init/monorepo.ts +72 -0
- package/src/init/prepareVelo.ts +19 -0
- package/src/init/tauri.ts +42 -0
- package/src/init/templates.ts +98 -0
- package/src/init/velo.ts +65 -0
- package/src/runtime.ts +1 -0
- package/src/schemas/gulp.ts +31 -0
- package/src/schemas/index.ts +13 -1
- package/src/schemas/lucy.ts +43 -0
- package/src/schemas/types.ts +40 -0
- package/src/tasks/Gulpfile.ts +207 -0
- package/src/tasks/gulp/backend.ts +113 -0
- package/src/tasks/gulp/checks.ts +218 -0
- package/src/tasks/gulp/clean.ts +38 -0
- package/src/tasks/gulp/copy.ts +38 -0
- package/src/tasks/gulp/helpers.ts +18 -0
- package/src/tasks/gulp/pages.ts +43 -0
- package/src/tasks/gulp/pipeline.ts +31 -0
- package/src/tasks/gulp/public.ts +61 -0
- package/src/tasks/gulp/styles.ts +47 -0
- package/src/tasks/gulp/templates.ts +53 -0
- package/src/tasks/gulp/types.ts +310 -0
- package/src/tasks/gulp/watchers.ts +97 -0
- package/src/tasks/index.ts +24 -0
- package/src/tasks/syncSettings.ts +21 -0
- package/src/types.d.ts +1 -1
- package/src/utils/index.ts +0 -0
- package/src/utils/logger.ts +40 -0
- package/src/wix-sdk/check.ts +24 -0
- package/src/wix-sdk/client.ts +18 -0
- package/src/wix-sdk/index.ts +17 -0
- package/src/wix-sdk/init.ts +54 -0
- package/src/wix-sdk/run.ts +56 -0
- package/src/wix-sync/client.ts +6 -0
- package/src/wix-sync/export.ts +19 -0
- package/src/wix-sync/import.ts +27 -0
- package/src/wix-sync/index.ts +36 -0
- package/src/wix-sync/init.ts +77 -0
- package/src/wix-sync/is-alive.ts +25 -0
- package/src/wix-sync/migrate.ts +23 -0
- package/src/wix-sync/sync.ts +27 -0
- package/tsconfig.json +6 -5
- package/dist/init.d.ts +0 -4
- package/dist/init.js +0 -275
- package/dist/models.js +0 -1
- package/dist/params.d.ts +0 -7
- package/dist/params.js +0 -23
- package/files/expo/lib/data.ts +0 -48
- package/files/expo/lucy.json +0 -8
- package/src/init.ts +0 -392
- /package/dist/{models.d.ts → schemas/tsconfig.d.ts} +0 -0
- /package/{files/expo/components/.gitkeep → dist/utils/index.d.ts} +0 -0
- /package/files/{expo → templates/expo[D]/files}/.nvmrc +0 -0
- /package/files/{expo → templates/expo[D]/files}/.prettierignore +0 -0
- /package/files/{expo → templates/expo[D]/files}/.prettierrc.js +0 -0
- /package/files/{expo → templates/expo[D]/files}/.yarnrc +0 -0
- /package/files/{expo → templates/expo[D]/files}/.yarnrc.yml +0 -0
- /package/files/{expo → templates/expo[D]/files}/README.md +0 -0
- /package/files/{expo → templates/expo[D]/files}/assets/fonts/SpaceMono-Regular.ttf +0 -0
- /package/files/{expo → templates/expo[D]/files}/assets/images/adaptive-icon.png +0 -0
- /package/files/{expo → templates/expo[D]/files}/assets/images/favicon.png +0 -0
- /package/files/{expo → templates/expo[D]/files}/assets/images/icon.png +0 -0
- /package/files/{expo → templates/expo[D]/files}/assets/images/splash-icon.png +0 -0
- /package/files/{expo → templates/expo[D]/files}/babel.config.js +0 -0
- /package/files/{expo/components/ui → templates/expo[D]/files/components}/.gitkeep +0 -0
- /package/files/{velo/typescript/__mocks__ → templates/expo[D]/files/components/ui}/.gitkeep +0 -0
- /package/files/{expo → templates/expo[D]/files}/constants/theme.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/eslint.config.mjs +0 -0
- /package/files/{expo → templates/expo[D]/files}/global.css +0 -0
- /package/files/{expo → templates/expo[D]/files}/hooks/useColorScheme.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/index.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/lib/utils/index.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/lib/utils/polyfills.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/lib/wix/client.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/lib/wix/error.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/lib/wix/index.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/nativewind-env.d.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/scripts/reset-project.ts +0 -0
- /package/files/{expo → templates/expo[D]/files}/tailwind.config.js +0 -0
- /package/files/{expo → templates/expo[D]/files}/tsconfig.json +0 -0
- /package/files/{expo → templates/expo[D]/files}/types/reset.d.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/.gitmodules +0 -0
- /package/files/{velo → templates/velo[D]/files}/.madgerc +0 -0
- /package/files/{velo → templates/velo[D]/files}/.nvmrc +0 -0
- /package/files/{velo → templates/velo[D]/files}/.stylelintrc.js +0 -0
- /package/files/{velo → templates/velo[D]/files}/.yarnrc.yml +0 -0
- /package/files/{velo → templates/velo[D]/files}/currents.config.js +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress/e2e/base/base.cy.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress/fixtures/example.json +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress/support/commands.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress/support/e2e.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress/tsconfig.json +0 -0
- /package/files/{velo → templates/velo[D]/files}/cypress.config.mjs +0 -0
- /package/files/{velo → templates/velo[D]/files}/eslint.config.mjs +0 -0
- /package/files/{velo → templates/velo[D]/files}/local.tsconfig.json +0 -0
- /package/files/{velo → templates/velo[D]/files}/typedoc.json +0 -0
- /package/files/{velo/typescript/pages → templates/velo[D]/files/typescript/__mocks__}/.gitkeep +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/backend/data.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/backend/events.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/backend/http-functions.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/backend/lib/http-functions/sync.ts +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/backend/permissions.json +0 -0
- /package/files/{velo/typescript/public → templates/velo[D]/files/typescript/pages}/.gitkeep +0 -0
- /package/files/{velo/typescript/styles → templates/velo[D]/files/typescript/public}/.gitkeep +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/public/scss/app.scss +0 -0
- /package/files/{velo/typescript/styles/global.scss → templates/velo[D]/files/typescript/styles/.gitkeep} +0 -0
- /package/{src copy/schemas/index.ts → files/templates/velo[D]/files/typescript/styles/global.scss} +0 -0
- /package/files/{velo → templates/velo[D]/files}/typescript/tsconfig.json +0 -0
- /package/files/{velo → templates/velo[D]/files}/vitest.config.ts +0 -0
- /package/{src copy → old}/Gulpfile.ts +0 -0
- /package/{src copy → old}/gulp/backend.ts +0 -0
- /package/{src copy → old}/gulp/checks.ts +0 -0
- /package/{src copy → old}/gulp/clean.ts +0 -0
- /package/{src copy → old}/gulp/copy.ts +0 -0
- /package/{src copy → old}/gulp/helpers.ts +0 -0
- /package/{src copy → old}/gulp/pages.ts +0 -0
- /package/{src copy → old}/gulp/pipeline.ts +0 -0
- /package/{src copy → old}/gulp/public.ts +0 -0
- /package/{src copy → old}/gulp/styles.ts +0 -0
- /package/{src copy → old}/gulp/templates.ts +0 -0
- /package/{src copy → old}/gulp/types.ts +0 -0
- /package/{src copy → old}/gulp/watchers.ts +0 -0
- /package/{src copy → old}/index.ts +0 -0
- /package/{src copy → old}/init.ts +0 -0
- /package/{src copy → old}/models.ts +0 -0
- /package/{src copy → old}/prepare.ts +0 -0
- /package/{src copy/schemas/types.ts → old/schemas/index.d.ts} +0 -0
- /package/{src copy → old}/settings.json +0 -0
- /package/{src copy → old}/sync.ts +0 -0
- /package/{src copy → old}/types.d.ts +0 -0
- /package/src/{models.ts → schemas/tsconfig.ts} +0 -0
@@ -0,0 +1,238 @@
|
|
1
|
+
[package]
|
2
|
+
name = "wiicle_backend"
|
3
|
+
version.workspace = true
|
4
|
+
authors.workspace = true
|
5
|
+
description.workspace = true
|
6
|
+
edition.workspace = true
|
7
|
+
license.workspace = true
|
8
|
+
repository.workspace = true
|
9
|
+
homepage.workspace = true
|
10
|
+
publish = false
|
11
|
+
build = "build/main.rs"
|
12
|
+
|
13
|
+
[workspace]
|
14
|
+
members = [
|
15
|
+
".",
|
16
|
+
"./lib/core",
|
17
|
+
"./services/grpc",
|
18
|
+
"./services/http",
|
19
|
+
"./lib/common",
|
20
|
+
"./services/database",
|
21
|
+
"./lib/cli",
|
22
|
+
"./services/database/migrations",
|
23
|
+
"./lib/context",
|
24
|
+
"./features/auth",
|
25
|
+
"./features/authz",
|
26
|
+
"./lib/i18n",
|
27
|
+
"./lib/settings"
|
28
|
+
]
|
29
|
+
resolver = "2"
|
30
|
+
exclude = ["target/*"]
|
31
|
+
|
32
|
+
[workspace.metadata]
|
33
|
+
|
34
|
+
[package.metadata.docs.rs]
|
35
|
+
# Set dependencies to false if you don't want docs from external crates
|
36
|
+
dependencies = false
|
37
|
+
|
38
|
+
[workspace.package]
|
39
|
+
authors = ["Gradlon von Känel"]
|
40
|
+
description = "Wiicle Backend"
|
41
|
+
edition = "2021"
|
42
|
+
license = "MIT"
|
43
|
+
repository = ""
|
44
|
+
version = "0.1.0"
|
45
|
+
homepage = "https://www.integral-systems.ch"
|
46
|
+
|
47
|
+
[workspace.lints.rust]
|
48
|
+
unsafe-code = "forbid"
|
49
|
+
# unused = "allow"
|
50
|
+
unused = "warn"
|
51
|
+
missing_docs = "warn"
|
52
|
+
|
53
|
+
[workspace.lints.rustdoc]
|
54
|
+
missing_crate_level_docs = "allow"
|
55
|
+
|
56
|
+
[workspace.lints.clippy]
|
57
|
+
unwrap_used = "warn"
|
58
|
+
cargo = "allow"
|
59
|
+
pedantic = "allow"
|
60
|
+
expect_used = "warn"
|
61
|
+
multiple_crate_versions = "allow"
|
62
|
+
|
63
|
+
[lints]
|
64
|
+
workspace = true
|
65
|
+
|
66
|
+
[build-dependencies]
|
67
|
+
serde.workspace = true
|
68
|
+
serde_json.workspace = true
|
69
|
+
config.workspace = true
|
70
|
+
once_cell.workspace = true
|
71
|
+
serde_derive.workspace = true
|
72
|
+
schemars.workspace = true
|
73
|
+
strum_macros.workspace = true
|
74
|
+
language-tags.workspace = true
|
75
|
+
thiserror.workspace = true
|
76
|
+
anyhow.workspace = true
|
77
|
+
color-eyre.workspace = true
|
78
|
+
settings.workspace = true
|
79
|
+
|
80
|
+
[dependencies]
|
81
|
+
# Crates
|
82
|
+
cli = { path = "./lib/cli" }
|
83
|
+
lucy_core.workspace = true
|
84
|
+
settings.workspace = true
|
85
|
+
i18n_lib.workspace = true
|
86
|
+
autometrics.workspace = true
|
87
|
+
http_service.workspace = true
|
88
|
+
grpc_service.workspace = true
|
89
|
+
tracing.workspace = true
|
90
|
+
anyhow_trace.workspace = true
|
91
|
+
tokio.workspace = true
|
92
|
+
tracing-subscriber.workspace = true
|
93
|
+
color-eyre.workspace = true
|
94
|
+
anyhow.workspace = true
|
95
|
+
http.workspace = true
|
96
|
+
database.workspace = true
|
97
|
+
common.workspace = true
|
98
|
+
rust-i18n.workspace = true
|
99
|
+
async-trait.workspace = true
|
100
|
+
|
101
|
+
[workspace.dependencies]
|
102
|
+
# Crates
|
103
|
+
lucy_core = { path = "./lib/core" } # depends on your needs
|
104
|
+
database = { path = "./services/database" } # depends on your needs
|
105
|
+
common = { path = "./lib/common" }
|
106
|
+
context = { path = "./lib/context" }
|
107
|
+
auth = { path = "./features/auth" }
|
108
|
+
authz = { path = "./features/authz" }
|
109
|
+
http_service = { path = "./services/http"}
|
110
|
+
grpc_service = { path = "./services/grpc"}
|
111
|
+
i18n_lib = { path = "./lib/i18n" }
|
112
|
+
settings = { path = "./lib/settings" }
|
113
|
+
|
114
|
+
# Base
|
115
|
+
tokio = { version = "1.36.0", features = ["full", "rt-multi-thread"] }
|
116
|
+
async-std = { version = "1", features = ["attributes", "tokio1"] }
|
117
|
+
async-trait = "0.1.57"
|
118
|
+
futures = "0.3"
|
119
|
+
|
120
|
+
# http
|
121
|
+
http = "1.1"
|
122
|
+
http-body = "1.0"
|
123
|
+
|
124
|
+
# hyper
|
125
|
+
hyper = { version = "1.0.0", features = ["full"] }
|
126
|
+
hyper-util = "0.1"
|
127
|
+
|
128
|
+
tower = { version = "0.5.1", features = ["steer", "util"] }
|
129
|
+
tower-http = { version = "0.5.2", features = ["cors", "trace", "fs"] }
|
130
|
+
tower-cookies = { version = "0.10.0" }
|
131
|
+
tower-service = "0.3.3"
|
132
|
+
|
133
|
+
# Axum
|
134
|
+
axum = { version = "0.7.5", features = ["ws", "macros", "multipart", "tracing"] }
|
135
|
+
axum-macros = "0.4.1"
|
136
|
+
axum-messages = "0.7.0"
|
137
|
+
axum-extra = "0.9.3"
|
138
|
+
axum-helmet = "0.1"
|
139
|
+
|
140
|
+
# Datatypes
|
141
|
+
axum-jsonschema = { version = "0.8.0", features = ["aide"] }
|
142
|
+
serde = { version = "1.0.144", features = ["derive", "rc"] }
|
143
|
+
serde_json = "1.0.113"
|
144
|
+
serde_yaml = "0.9"
|
145
|
+
serde_derive = "1.0.196"
|
146
|
+
schemars = { version = "0.8.16", features = ["uuid1"] }
|
147
|
+
schemars-zod = "0.1.5"
|
148
|
+
|
149
|
+
# Swagger
|
150
|
+
utoipa = {git = "https://github.com/juhaku/utoipa", branch = "master", features = ["axum_extras"]}
|
151
|
+
utoipa-scalar = {git = "https://github.com/juhaku/utoipa", branch = "master", features = ["axum"]}
|
152
|
+
|
153
|
+
# Tonic
|
154
|
+
tonic = "0.12.0"
|
155
|
+
tonic-middleware = "0.2.1"
|
156
|
+
tonic-web = "0.12.0"
|
157
|
+
tonic-reflection = "0.12.0"
|
158
|
+
tonic-async-interceptor = "0.12.0"
|
159
|
+
prost = "0.13.1"
|
160
|
+
|
161
|
+
# DB's
|
162
|
+
fred = { version = "9.1.2", features = ["mocks"] }
|
163
|
+
sea-orm = { version = "1.0.1", features = [ "sqlx-postgres", "runtime-tokio-rustls", "macros", "debug-print", "mock"] }
|
164
|
+
sea-orm-migration = { version = "1.0.1", features = ["sqlx-postgres", "runtime-tokio-rustls"]}
|
165
|
+
sqlx = { version = "0.7.4", features = ["sqlite", "time", "runtime-tokio"] }
|
166
|
+
surrealdb = "1.5.4"
|
167
|
+
|
168
|
+
# Tracing and Logging
|
169
|
+
autometrics = { version = "2.0.0", features = ["prometheus-exporter"] }
|
170
|
+
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "chrono"] }
|
171
|
+
anyhow = { version = "1.0.82", features = ["backtrace"] }
|
172
|
+
thiserror = "1.0.50"
|
173
|
+
anyhow_trace = "0.1.3"
|
174
|
+
tracing = "0.1"
|
175
|
+
tower-otel = "0.2.0"
|
176
|
+
color-eyre = "0.6.3"
|
177
|
+
|
178
|
+
# I18N
|
179
|
+
language-tags = { version = "0.3.2", features = ["serde"] }
|
180
|
+
rust-i18n = "3.1.2"
|
181
|
+
|
182
|
+
# Auth/Authz
|
183
|
+
casdoor-rust-sdk = "1.3.0"
|
184
|
+
casbin = { version = "2.2.0", default-features = false, features = ["runtime-async-std", "logging", "incremental"] }
|
185
|
+
|
186
|
+
# Utils
|
187
|
+
uuid = { version = "1.8.0", features = ["v4", "v7","serde", "fast-rng"] }
|
188
|
+
lazy-regex = "3.1.0"
|
189
|
+
strum_macros = "0.26.2"
|
190
|
+
derive_more = { version = "1.0.0-beta", features = ["from"]}
|
191
|
+
serde_with = "3.8.1"
|
192
|
+
time = "0.3.30"
|
193
|
+
config = "0.14.0"
|
194
|
+
clap = { version = "4.5.3", features = ["derive"]}
|
195
|
+
reqwest = { version = "0.12.2", features = ["json"] }
|
196
|
+
structstruck ={ version = "0.4.1"}
|
197
|
+
rayon = "1.10.0"
|
198
|
+
figlet-rs = "0.1.5"
|
199
|
+
ansi_term = "0.12.1"
|
200
|
+
argon2 = "0.5.3"
|
201
|
+
lazy_static = "1.4.0"
|
202
|
+
|
203
|
+
# Time
|
204
|
+
chrono = "0.4.19"
|
205
|
+
chrono-tz = "0.10.0"
|
206
|
+
|
207
|
+
# Datatypes
|
208
|
+
once_cell = "1.19.0"
|
209
|
+
|
210
|
+
#testing
|
211
|
+
mockall ="0.13.0"
|
212
|
+
serial_test = "3.1.1"
|
213
|
+
tokio-test = "0.4.4"
|
214
|
+
pretty_assertions = "1.4.0"
|
215
|
+
tonic-mock = "0.3.0"
|
216
|
+
|
217
|
+
[workspace.dev-dependencies]
|
218
|
+
tokio = { version = "1", features = ["full"] }
|
219
|
+
testresult = "0.4.0"
|
220
|
+
pretty_assertions.workspace = true
|
221
|
+
|
222
|
+
[dev-dependencies]
|
223
|
+
anyhow.workspace = true
|
224
|
+
reqwest.workspace = true
|
225
|
+
tokio.workspace = true
|
226
|
+
serde_json.workspace = true
|
227
|
+
tokio-test.workspace = true
|
228
|
+
lucy_core.workspace = true
|
229
|
+
pretty_assertions.workspace = true
|
230
|
+
|
231
|
+
[profile.dev]
|
232
|
+
debug = true
|
233
|
+
|
234
|
+
[profile.release]
|
235
|
+
debug = false
|
236
|
+
lto = true
|
237
|
+
codegen-units = 1
|
238
|
+
panic = "abort"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
//! This build script generates a JSON schema for the `Settings` struct.
|
2
|
+
//! The schema is used by the `config` crate to validate the configuration file.
|
3
|
+
//! The schema is written to `config/schema.json`.
|
4
|
+
macro_rules! p {
|
5
|
+
($($tokens: tt)*) => {
|
6
|
+
println!("cargo:warning={}", format!($($tokens)*))
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
/// This build script generates a JSON schema for the `Settings` struct.
|
11
|
+
/// The schema is used by the `config` crate to validate the configuration file.
|
12
|
+
/// The schema is written to `../../config/schema.json`.
|
13
|
+
/// The build script is re-run if `src/lib.rs` changes.
|
14
|
+
fn main() {
|
15
|
+
p!("cargo:rerun-if-changed=src/lib.rs");
|
16
|
+
let schema = schemars::schema_for!(Settings);
|
17
|
+
let schema_file = Path::new("config/schema.json");
|
18
|
+
fs::write(
|
19
|
+
schema_file,
|
20
|
+
serde_json::to_string_pretty(&schema).unwrap_or_else(|error| {
|
21
|
+
p!("Error: {}", error);
|
22
|
+
String::new()
|
23
|
+
}),
|
24
|
+
)
|
25
|
+
.unwrap_or_else(|error| {
|
26
|
+
p!("Error: {}", error);
|
27
|
+
});
|
28
|
+
|
29
|
+
p!("Writing JSON schema to {:?}", schema_file);
|
30
|
+
}
|
31
|
+
|
32
|
+
// include!("src/lib.rs");
|
33
|
+
use std::fs;
|
34
|
+
use std::path::Path;
|
35
|
+
use settings::Settings;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "schema.json",
|
3
|
+
"environment": "Beta",
|
4
|
+
"databases": {
|
5
|
+
"redis": {
|
6
|
+
"key_prefix": "wiicle_beta"
|
7
|
+
}
|
8
|
+
},
|
9
|
+
"security": {
|
10
|
+
"alias_session_expiry": 7200,
|
11
|
+
"session_expiry": 7200
|
12
|
+
},
|
13
|
+
"product": {
|
14
|
+
"name": "Wiicle(BETA)"
|
15
|
+
},
|
16
|
+
"app": {
|
17
|
+
"log_level": "Info"
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "schema.json",
|
3
|
+
"message": "Wellcome to The Wiicle Backend",
|
4
|
+
"databases": {
|
5
|
+
"postgres": {
|
6
|
+
"url": "postgres://dev:dev@postgres/wiicle"
|
7
|
+
},
|
8
|
+
"redis": {
|
9
|
+
"url": "redis://default@redis:6379/0"
|
10
|
+
}
|
11
|
+
},
|
12
|
+
"product": {
|
13
|
+
"name": "Wiicle(CI)"
|
14
|
+
}
|
15
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "schema.json",
|
3
|
+
"message": "Wellcome to The Wiicle Backend",
|
4
|
+
"databases": {
|
5
|
+
"postgres": {
|
6
|
+
"url": "postgres://root:root@localhost:26257/wiicle_beta"
|
7
|
+
},
|
8
|
+
"mongo": {
|
9
|
+
"url": "mongodb://mongo:27017/api"
|
10
|
+
},
|
11
|
+
"redis": {
|
12
|
+
"url": "redis://default@127.0.0.1:6379/0",
|
13
|
+
"key_prefix": "wiicle",
|
14
|
+
"pool_size": 5
|
15
|
+
},
|
16
|
+
"meilisearch": {
|
17
|
+
"url": "http://localhost:7700",
|
18
|
+
"api_key": "dev"
|
19
|
+
},
|
20
|
+
"elasticsearch": {
|
21
|
+
"url": "http://127.0.0.1:9271"
|
22
|
+
}
|
23
|
+
},
|
24
|
+
"i18n": {
|
25
|
+
"default_locale": "en",
|
26
|
+
"supported_locales": ["en", "de", "fr"]
|
27
|
+
},
|
28
|
+
"security": {
|
29
|
+
"jwt_secret": "SuperSecretToken",
|
30
|
+
"jwt_expiry": 7200,
|
31
|
+
"session_expiry": 300,
|
32
|
+
"alias_session_expiry": 300,
|
33
|
+
"api_keys": ["ca03na188ame03u1d78620de67282882a84"],
|
34
|
+
"api_key_field": "api-key",
|
35
|
+
"cookie_name": "session",
|
36
|
+
"cookie_lifetime": 90,
|
37
|
+
"cors": {
|
38
|
+
"allowed_origins": ["http://localhost:8085", "http://192.168.1.87:8085"]
|
39
|
+
},
|
40
|
+
"admin": {
|
41
|
+
"username": "admin",
|
42
|
+
"password": "admin",
|
43
|
+
"password_hashed": "$2b$10$o4OYI2SOrkBZl17X1d2hg.gip6M5xNZPmpF0IsrpS62eXP4B/WoRy"
|
44
|
+
}
|
45
|
+
},
|
46
|
+
"app": {
|
47
|
+
"http_port": 3000,
|
48
|
+
"grpc_port": 3100,
|
49
|
+
"proto_out_dir": "../grpc",
|
50
|
+
"log_level": "Debug",
|
51
|
+
"lang_field": "lang",
|
52
|
+
"default_lang": "de-CH",
|
53
|
+
"context_field": "x-context",
|
54
|
+
"frontend_dir": "public"
|
55
|
+
},
|
56
|
+
"mail": {
|
57
|
+
"host": "smtp.gmail.com",
|
58
|
+
"port": 465,
|
59
|
+
"secure": true,
|
60
|
+
"auth": {
|
61
|
+
"user": "",
|
62
|
+
"pass": ""
|
63
|
+
}
|
64
|
+
},
|
65
|
+
"product": {
|
66
|
+
"name": "Wiicle",
|
67
|
+
"telegram_bot_token": "5386225720:AAEKgiysSjy-p6Z0yNgDcCl_QmqNjSSPPw4",
|
68
|
+
"telegram_chat_id": "-933647200",
|
69
|
+
"default_avatar": "https://cdn.vectorstock.com/i/1000v/45/94/default-avatar-profile-icon-grey-photo-vector-31934594.jpg"
|
70
|
+
}
|
71
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
OK
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"modules": {
|
3
|
+
"lucy-rust-lib": {
|
4
|
+
"source": "git@github.com:Sunnyside-UP-GmbH/lucy-rust-lib.git",
|
5
|
+
"branch": "1.0.0",
|
6
|
+
"path": "lib"
|
7
|
+
}
|
8
|
+
},
|
9
|
+
"devDependencies": {},
|
10
|
+
"dependencies": {},
|
11
|
+
"scripts": {},
|
12
|
+
"initialized": false,
|
13
|
+
"type": "cargo",
|
14
|
+
"packageManager": "pnpm"
|
15
|
+
}
|
@@ -5,7 +5,9 @@
|
|
5
5
|
"build": {
|
6
6
|
"development": {
|
7
7
|
"developmentClient": true,
|
8
|
-
"distribution": "internal"
|
8
|
+
"distribution": "internal",
|
9
|
+
"environment": "development",
|
10
|
+
"env": {}
|
9
11
|
},
|
10
12
|
"ios-simulator": {
|
11
13
|
"extends": "development",
|
@@ -14,10 +16,14 @@
|
|
14
16
|
}
|
15
17
|
},
|
16
18
|
"preview": {
|
17
|
-
"distribution": "internal"
|
19
|
+
"distribution": "internal",
|
20
|
+
"environment": "preview",
|
21
|
+
"env": {}
|
18
22
|
},
|
19
23
|
"production": {
|
20
|
-
"autoIncrement": true
|
24
|
+
"autoIncrement": true,
|
25
|
+
"environment": "production",
|
26
|
+
"env": {}
|
21
27
|
}
|
22
28
|
},
|
23
29
|
"submit": {
|
@@ -0,0 +1,197 @@
|
|
1
|
+
import { Data, DateTime, Effect, pipe, Schedule, Schema } from 'effect';
|
2
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
3
|
+
import * as FileSystem from 'expo-file-system';
|
4
|
+
import { Asset } from 'expo-asset';
|
5
|
+
import { getLocales } from 'expo-localization';
|
6
|
+
import Papa from 'papaparse';
|
7
|
+
|
8
|
+
export class StorageError extends Data.TaggedError('StorageError')<{reason: string}> {}
|
9
|
+
export class QuoteNotFoundError extends Data.TaggedError('QuoteNotFoundError')<{reason: string}> {}
|
10
|
+
export class DataError extends Data.TaggedError('DataError')<{reason: string}> {}
|
11
|
+
|
12
|
+
const assets = {
|
13
|
+
en: require('@/assets/data/en.csv'),
|
14
|
+
de: require('@/assets/data/de.csv'),
|
15
|
+
};
|
16
|
+
|
17
|
+
const supportedLocales = Object.keys(assets);
|
18
|
+
const fallbackLocale: keyof typeof assets = 'en';
|
19
|
+
const fallbackQuote: Quote = { source: 'The Lord', content: 'The ways of the Lord are inscrutable.' };
|
20
|
+
const storage_key = 'dailySpiritQuote';
|
21
|
+
|
22
|
+
const schema = Schema.parseJson()
|
23
|
+
const decode = Schema.decodeUnknown(schema)
|
24
|
+
|
25
|
+
const dataSchema = Schema.Struct({
|
26
|
+
source: Schema.String,
|
27
|
+
content: Schema.String,
|
28
|
+
_id: Schema.String,
|
29
|
+
_owner: Schema.String,
|
30
|
+
_createdDate: Schema.Any,
|
31
|
+
_updatedDate: Schema.Any,
|
32
|
+
});
|
33
|
+
|
34
|
+
const storageSchema = Schema.Struct({
|
35
|
+
index: Schema.Number,
|
36
|
+
date: Schema.DateTimeUtc,
|
37
|
+
})
|
38
|
+
type StorageSchema = typeof storageSchema.Type;
|
39
|
+
|
40
|
+
type Quote = {
|
41
|
+
source: string;
|
42
|
+
content: string;
|
43
|
+
}
|
44
|
+
|
45
|
+
// Type guard to check if a string is a valid locale key
|
46
|
+
function isSupportedLocale(locale: string): locale is keyof typeof assets {
|
47
|
+
return supportedLocales.includes(locale);
|
48
|
+
}
|
49
|
+
|
50
|
+
const clearStorage = Effect.gen(function* () {
|
51
|
+
yield* Effect.tryPromise({
|
52
|
+
try: () => AsyncStorage.removeItem(storage_key),
|
53
|
+
catch: (error) => {
|
54
|
+
console.error('Error clearing storage:', error);
|
55
|
+
return new StorageError({ reason: 'Failed to clear storage' });
|
56
|
+
}
|
57
|
+
});
|
58
|
+
});
|
59
|
+
|
60
|
+
const saveToStorage = (quote: StorageSchema) => Effect.gen(function* () {
|
61
|
+
yield* Effect.tryPromise({
|
62
|
+
try: () => AsyncStorage.setItem(storage_key, JSON.stringify(quote)),
|
63
|
+
catch: (error) => {
|
64
|
+
console.error('Error saving quote to storage:', error);
|
65
|
+
return new StorageError({ reason: 'Failed to save quote to storage' });
|
66
|
+
}
|
67
|
+
});
|
68
|
+
});
|
69
|
+
|
70
|
+
const getFromStorage = Effect.gen(function* () {
|
71
|
+
const quoteRaw = yield* Effect.tryPromise({
|
72
|
+
try: () => AsyncStorage.getItem(storage_key),
|
73
|
+
catch: (error) => {
|
74
|
+
console.error('Error fetching quote from storage:', error);
|
75
|
+
AsyncStorage.removeItem(storage_key)
|
76
|
+
return new StorageError({ reason: 'Failed to fetch quote from storage' });
|
77
|
+
}
|
78
|
+
}).pipe(Effect.catchAll((error) => {
|
79
|
+
console.error('Error fetching quote from storage:', error);
|
80
|
+
return Effect.succeed(null);
|
81
|
+
}));
|
82
|
+
|
83
|
+
const QuoteJSON = yield* Schema.decodeUnknown(Schema.parseJson())(quoteRaw).pipe(Effect.catchAll((error) => {
|
84
|
+
console.error('Error decoding quote from storage:', error);
|
85
|
+
return Effect.succeed(null);
|
86
|
+
}));
|
87
|
+
const data = yield* Schema.decodeUnknown(storageSchema)(QuoteJSON).pipe(
|
88
|
+
Effect.catchAll((error) => {
|
89
|
+
console.error('Failed to decode quote from storage:', error);
|
90
|
+
return Effect.gen(function* () {
|
91
|
+
yield* clearStorage.pipe(Effect.catchAll((error) => {
|
92
|
+
console.error('Error clearing storage:', error);
|
93
|
+
return Effect.succeed(null);
|
94
|
+
}));
|
95
|
+
return yield* Effect.succeed(null);
|
96
|
+
})
|
97
|
+
}
|
98
|
+
)
|
99
|
+
);
|
100
|
+
return data;
|
101
|
+
});
|
102
|
+
|
103
|
+
const getQuoteFromCSV = (index?: number) => Effect.gen(function* () {
|
104
|
+
const locale = getLocales()[0].languageTag.split('-')[0];
|
105
|
+
const asset = isSupportedLocale(locale) ? assets[locale] : assets[fallbackLocale];
|
106
|
+
|
107
|
+
const [{ localUri }] = yield* Effect.tryPromise({
|
108
|
+
try: () => Asset.loadAsync(asset),
|
109
|
+
catch: (error) => {
|
110
|
+
console.error('Error loading asset:', error);
|
111
|
+
return new DataError({ reason: 'Failed to load asset' });
|
112
|
+
}
|
113
|
+
})
|
114
|
+
const csv = yield* Effect.tryPromise({
|
115
|
+
try: () => FileSystem.readAsStringAsync(localUri || ''),
|
116
|
+
catch: (error) => {
|
117
|
+
console.error('Error loading asset:', error);
|
118
|
+
return new DataError({ reason: 'Failed to read CSV file' });
|
119
|
+
}
|
120
|
+
})
|
121
|
+
|
122
|
+
const { data: quotes, errors } = Papa.parse<{Verse: string, Reference: string, Topic: string}>(csv, { header: true, skipEmptyLines: true });
|
123
|
+
if (errors.length > 0) {
|
124
|
+
console.error('Error parsing CSV:', errors);
|
125
|
+
return yield* Effect.succeed(null);
|
126
|
+
}
|
127
|
+
|
128
|
+
if (quotes.length === 0) {
|
129
|
+
return yield* Effect.succeed(null);
|
130
|
+
}
|
131
|
+
|
132
|
+
if(index !== undefined) {
|
133
|
+
if(index <= quotes.length) {
|
134
|
+
const randomQuote = quotes[index];
|
135
|
+
return { source: randomQuote.Reference, content: randomQuote.Verse, index: index };
|
136
|
+
}
|
137
|
+
if(index < 0 || index <= quotes.length) {
|
138
|
+
yield* clearStorage
|
139
|
+
return yield* Effect.succeed(null);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
143
|
+
const randomIndex = Math.floor(Math.random() * quotes.length);
|
144
|
+
const randomQuote = quotes[randomIndex];
|
145
|
+
|
146
|
+
return { source: randomQuote.Reference, content: randomQuote.Verse, index: randomIndex };
|
147
|
+
})
|
148
|
+
|
149
|
+
export const getData = () => Effect.gen(function* () {
|
150
|
+
const currentTime = yield* DateTime.now;
|
151
|
+
const quoteTimestamp = DateTime.setParts(currentTime, {hours: 4, minutes: 30, seconds: 0});
|
152
|
+
const dataFromStorage = yield* getFromStorage
|
153
|
+
|
154
|
+
if(dataFromStorage !== null) {
|
155
|
+
const elapsed = DateTime.distance(dataFromStorage.date, currentTime);
|
156
|
+
if (elapsed <= 86400000) {
|
157
|
+
const quoteWithIndex = yield* getQuoteFromCSV(dataFromStorage.index);
|
158
|
+
if (quoteWithIndex !== null) {
|
159
|
+
const quoteDate: Quote = { source: quoteWithIndex.source, content: quoteWithIndex.content };
|
160
|
+
return quoteDate;
|
161
|
+
}
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
const quoteWithIndex = yield* getQuoteFromCSV();
|
166
|
+
if (quoteWithIndex === null) {
|
167
|
+
console.warn('No quote found, returning fallback quote');
|
168
|
+
return yield* Effect.fail(new QuoteNotFoundError({ reason: 'No quote found' }));
|
169
|
+
}
|
170
|
+
|
171
|
+
const quoteDate: Quote = { source: quoteWithIndex.source, content: quoteWithIndex.content };
|
172
|
+
yield* saveToStorage({
|
173
|
+
index: quoteWithIndex.index,
|
174
|
+
date: quoteTimestamp,
|
175
|
+
})
|
176
|
+
|
177
|
+
return quoteDate;
|
178
|
+
}).pipe(Effect.catchTags({
|
179
|
+
QuoteNotFoundError: (error) => {
|
180
|
+
console.warn('Quote not found in storage, returning fallback quote');
|
181
|
+
return Effect.succeed(fallbackQuote);
|
182
|
+
},
|
183
|
+
DataError: (error) => {
|
184
|
+
console.error('Data error occurred:', error);
|
185
|
+
return Effect.succeed(fallbackQuote);
|
186
|
+
},
|
187
|
+
StorageError: (error) => {
|
188
|
+
console.error('Storage error occurred:', error);
|
189
|
+
return Effect.gen(function* () {
|
190
|
+
yield* clearStorage.pipe(Effect.catchAll((error) => {
|
191
|
+
console.error('Error clearing storage:', error);
|
192
|
+
return Effect.succeed(null);
|
193
|
+
}));
|
194
|
+
return yield* Effect.succeed(fallbackQuote);
|
195
|
+
})
|
196
|
+
}
|
197
|
+
}))
|