@tanstack/cta-engine 0.14.3 → 0.14.4
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/dist/add-ons.js +5 -91
- package/dist/add-to-app.js +171 -0
- package/dist/config-file.js +34 -11
- package/dist/constants.js +0 -2
- package/dist/create-app.js +142 -451
- package/dist/custom-add-ons/add-on.js +175 -0
- package/dist/custom-add-ons/shared.js +116 -0
- package/dist/custom-add-ons/starter.js +84 -0
- package/dist/environment.js +67 -44
- package/dist/file-helpers.js +165 -0
- package/dist/frameworks.js +92 -0
- package/dist/index.js +18 -1
- package/dist/integrations/git.js +4 -0
- package/dist/integrations/shadcn.js +33 -0
- package/dist/options.js +9 -333
- package/dist/package-json.js +48 -0
- package/dist/package-manager.js +51 -6
- package/dist/registry.js +56 -0
- package/dist/special-steps/index.js +24 -0
- package/dist/special-steps/rimraf-node-modules.js +16 -0
- package/dist/template-file.js +112 -0
- package/dist/types/add-ons.d.ts +3 -8
- package/dist/types/add-to-app.d.ts +17 -0
- package/dist/types/config-file.d.ts +7 -4
- package/dist/types/constants.d.ts +0 -3
- package/dist/types/create-app.d.ts +1 -7
- package/dist/types/custom-add-ons/add-on.d.ts +69 -0
- package/dist/types/custom-add-ons/shared.d.ts +15 -0
- package/dist/types/custom-add-ons/starter.d.ts +7 -0
- package/dist/types/environment.d.ts +2 -1
- package/dist/types/file-helpers.d.ts +15 -0
- package/dist/types/frameworks.d.ts +7 -0
- package/dist/types/index.d.ts +21 -1
- package/dist/types/integrations/git.d.ts +2 -0
- package/dist/types/integrations/shadcn.d.ts +2 -0
- package/dist/types/options.d.ts +2 -6
- package/dist/types/package-json.d.ts +7 -0
- package/dist/types/package-manager.d.ts +18 -1
- package/dist/types/registry.d.ts +25 -0
- package/dist/types/special-steps/index.d.ts +2 -0
- package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
- package/dist/types/template-file.d.ts +2 -0
- package/dist/types/types.d.ts +788 -85
- package/dist/types/utils.d.ts +5 -0
- package/dist/types.js +65 -1
- package/dist/utils.js +9 -0
- package/package.json +9 -12
- package/src/add-ons.ts +7 -123
- package/src/add-to-app.ts +276 -0
- package/src/config-file.ts +51 -20
- package/src/constants.ts +0 -5
- package/src/create-app.ts +180 -730
- package/src/custom-add-ons/add-on.ts +261 -0
- package/src/custom-add-ons/shared.ts +160 -0
- package/src/custom-add-ons/starter.ts +126 -0
- package/src/environment.ts +80 -45
- package/src/file-helpers.ts +235 -0
- package/src/frameworks.ts +134 -0
- package/src/index.ts +85 -1
- package/src/integrations/git.ts +7 -0
- package/src/integrations/shadcn.ts +54 -0
- package/src/options.ts +8 -409
- package/src/package-json.ts +69 -0
- package/src/package-manager.ts +80 -9
- package/src/registry.ts +92 -0
- package/src/special-steps/index.ts +36 -0
- package/src/special-steps/rimraf-node-modules.ts +25 -0
- package/src/template-file.ts +150 -0
- package/src/types.ts +175 -87
- package/src/utils.ts +17 -0
- package/tests/add-ons.test.ts +67 -0
- package/tests/add-to-app.test.ts +358 -0
- package/tests/config-file.test.ts +105 -0
- package/tests/create-app.test.ts +120 -0
- package/tests/custom-add-ons/add-on.test.ts +12 -0
- package/tests/custom-add-ons/shared.test.ts +253 -0
- package/tests/custom-add-ons/starter.test.ts +58 -0
- package/tests/environment.test.ts +115 -0
- package/tests/file-helper.test.ts +90 -0
- package/tests/frameworks.test.ts +95 -0
- package/tests/index.test.ts +9 -0
- package/tests/integrations/git.test.ts +20 -0
- package/tests/integrations/shadcn.test.ts +91 -0
- package/tests/options.test.ts +42 -0
- package/tests/package-json.test.ts +63 -0
- package/tests/package-manager.test.ts +154 -0
- package/tests/setupVitest.ts +6 -0
- package/tests/template-file.test.ts +178 -0
- package/tests/utils.test.ts +23 -0
- package/vitest.config.ts +21 -0
- package/dist/add.js +0 -125
- package/dist/cli.js +0 -132
- package/dist/custom-add-on.js +0 -254
- package/dist/file-helper.js +0 -18
- package/dist/mcp.js +0 -229
- package/dist/templates.js +0 -6
- package/dist/toolchain.js +0 -6
- package/dist/types/add.d.ts +0 -3
- package/dist/types/cli.d.ts +0 -7
- package/dist/types/custom-add-on.d.ts +0 -3
- package/dist/types/file-helper.d.ts +0 -2
- package/dist/types/mcp.d.ts +0 -7
- package/dist/types/templates.d.ts +0 -1
- package/dist/types/toolchain.d.ts +0 -3
- package/src/add.ts +0 -186
- package/src/cli.ts +0 -210
- package/src/custom-add-on.ts +0 -325
- package/src/file-helper.ts +0 -20
- package/src/mcp.ts +0 -302
- package/src/templates.ts +0 -7
- package/src/toolchain.ts +0 -7
- package/templates/react/add-on/clerk/README.md +0 -3
- package/templates/react/add-on/clerk/assets/_dot_env.local.append +0 -2
- package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +0 -19
- package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +0 -18
- package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +0 -20
- package/templates/react/add-on/clerk/info.json +0 -13
- package/templates/react/add-on/clerk/package.json +0 -5
- package/templates/react/add-on/convex/README.md +0 -4
- package/templates/react/add-on/convex/assets/_dot_cursorrules.append +0 -93
- package/templates/react/add-on/convex/assets/_dot_env.local.append +0 -3
- package/templates/react/add-on/convex/assets/convex/products.ts +0 -8
- package/templates/react/add-on/convex/assets/convex/schema.ts +0 -10
- package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +0 -20
- package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +0 -33
- package/templates/react/add-on/convex/info.json +0 -13
- package/templates/react/add-on/convex/package.json +0 -6
- package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +0 -300
- package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +0 -4
- package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +0 -22
- package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +0 -213
- package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +0 -77
- package/templates/react/add-on/form/info.json +0 -26
- package/templates/react/add-on/form/package.json +0 -6
- package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +0 -31
- package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
- package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
- package/templates/react/add-on/module-federation/info.json +0 -7
- package/templates/react/add-on/module-federation/package.json +0 -5
- package/templates/react/add-on/netlify/README.md +0 -11
- package/templates/react/add-on/netlify/info.json +0 -7
- package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +0 -22
- package/templates/react/add-on/sentry/assets/_dot_env.local.append +0 -11
- package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +0 -11
- package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +0 -489
- package/templates/react/add-on/sentry/info.json +0 -14
- package/templates/react/add-on/sentry/package.json +0 -5
- package/templates/react/add-on/shadcn/README.md +0 -7
- package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +0 -7
- package/templates/react/add-on/shadcn/assets/components.json +0 -21
- package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +0 -6
- package/templates/react/add-on/shadcn/assets/src/styles.css +0 -138
- package/templates/react/add-on/shadcn/info.json +0 -7
- package/templates/react/add-on/shadcn/package.json +0 -9
- package/templates/react/add-on/start/assets/_dot_gitignore.append +0 -2
- package/templates/react/add-on/start/assets/app.config.ts.ejs +0 -32
- package/templates/react/add-on/start/assets/src/api.ts +0 -6
- package/templates/react/add-on/start/assets/src/client.tsx.ejs +0 -33
- package/templates/react/add-on/start/assets/src/router.tsx.ejs +0 -48
- package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +0 -11
- package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +0 -33
- package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -50
- package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +0 -30
- package/templates/react/add-on/start/info.json +0 -18
- package/templates/react/add-on/start/package.json +0 -13
- package/templates/react/add-on/store/assets/src/lib/demo-store.ts +0 -13
- package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -75
- package/templates/react/add-on/store/info.json +0 -13
- package/templates/react/add-on/store/package.json +0 -6
- package/templates/react/add-on/t3env/README.md +0 -16
- package/templates/react/add-on/t3env/assets/src/env.ts +0 -39
- package/templates/react/add-on/t3env/info.json +0 -10
- package/templates/react/add-on/t3env/package.json +0 -6
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +0 -9
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +0 -4
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +0 -18
- package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +0 -16
- package/templates/react/add-on/tRPC/info.json +0 -9
- package/templates/react/add-on/tRPC/package.json +0 -9
- package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +0 -50
- package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +0 -373
- package/templates/react/add-on/table/info.json +0 -13
- package/templates/react/add-on/table/package.json +0 -7
- package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +0 -5
- package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +0 -70
- package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +0 -53
- package/templates/react/add-on/tanstack-query/info.json +0 -13
- package/templates/react/add-on/tanstack-query/package.json +0 -6
- package/templates/react/base/README.md.ejs +0 -558
- package/templates/react/base/_dot_gitignore +0 -5
- package/templates/react/base/_dot_vscode/settings.biome.json +0 -38
- package/templates/react/base/_dot_vscode/settings.json +0 -11
- package/templates/react/base/index.html.ejs +0 -20
- package/templates/react/base/package.biome.json +0 -10
- package/templates/react/base/package.eslintprettier.json +0 -11
- package/templates/react/base/package.json +0 -30
- package/templates/react/base/package.ts.json +0 -7
- package/templates/react/base/package.tw.json +0 -6
- package/templates/react/base/public/favicon.ico +0 -0
- package/templates/react/base/public/logo192.png +0 -0
- package/templates/react/base/public/logo512.png +0 -0
- package/templates/react/base/public/manifest.json +0 -25
- package/templates/react/base/public/robots.txt +0 -3
- package/templates/react/base/src/App.css +0 -38
- package/templates/react/base/src/App.test.tsx.ejs +0 -10
- package/templates/react/base/src/App.tsx.ejs +0 -74
- package/templates/react/base/src/components/Header.tsx.ejs +0 -27
- package/templates/react/base/src/logo.svg +0 -44
- package/templates/react/base/src/reportWebVitals.ts.ejs +0 -28
- package/templates/react/base/src/styles.css.ejs +0 -15
- package/templates/react/base/toolchain/.prettierignore +0 -3
- package/templates/react/base/toolchain/biome.json +0 -31
- package/templates/react/base/toolchain/eslint.config.js +0 -5
- package/templates/react/base/toolchain/prettier.config.js +0 -10
- package/templates/react/base/tsconfig.json.ejs +0 -29
- package/templates/react/base/vite.config.js.ejs +0 -23
- package/templates/react/code-router/src/main.tsx.ejs +0 -92
- package/templates/react/example/tanchat/README.md +0 -37
- package/templates/react/example/tanchat/assets/_dot_env.local.append +0 -2
- package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
- package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +0 -173
- package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +0 -47
- package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +0 -83
- package/templates/react/example/tanchat/assets/src/demo.index.css +0 -220
- package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
- package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +0 -24
- package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +0 -23
- package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +0 -159
- package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +0 -50
- package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +0 -54
- package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +0 -3
- package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +0 -62
- package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +0 -31
- package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +0 -47
- package/templates/react/example/tanchat/info.json +0 -19
- package/templates/react/example/tanchat/package.json +0 -16
- package/templates/react/file-router/package.fr.json +0 -5
- package/templates/react/file-router/src/main.tsx.ejs +0 -55
- package/templates/react/file-router/src/routes/__root.tsx.ejs +0 -82
- package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +0 -352
- package/templates/solid/add-on/form/info.json +0 -13
- package/templates/solid/add-on/form/package.json +0 -5
- package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +0 -27
- package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
- package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
- package/templates/solid/add-on/module-federation/info.json +0 -7
- package/templates/solid/add-on/module-federation/package.json +0 -5
- package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +0 -22
- package/templates/solid/add-on/sentry/assets/_dot_env.local.append +0 -2
- package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +0 -20
- package/templates/solid/add-on/sentry/info.json +0 -13
- package/templates/solid/add-on/sentry/package.json +0 -5
- package/templates/solid/add-on/solid-ui/README.md +0 -9
- package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +0 -6
- package/templates/solid/add-on/solid-ui/assets/src/styles.css +0 -138
- package/templates/solid/add-on/solid-ui/assets/ui.config.json +0 -13
- package/templates/solid/add-on/solid-ui/info.json +0 -11
- package/templates/solid/add-on/solid-ui/package.json +0 -9
- package/templates/solid/add-on/start/assets/app.config.ts +0 -16
- package/templates/solid/add-on/start/assets/src/api.ts +0 -6
- package/templates/solid/add-on/start/assets/src/client.tsx +0 -7
- package/templates/solid/add-on/start/assets/src/router.tsx.ejs +0 -24
- package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
- package/templates/solid/add-on/start/assets/src/ssr.tsx +0 -12
- package/templates/solid/add-on/start/info.json +0 -14
- package/templates/solid/add-on/start/package.json +0 -12
- package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +0 -13
- package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -77
- package/templates/solid/add-on/store/info.json +0 -13
- package/templates/solid/add-on/store/package.json +0 -6
- package/templates/solid/add-on/t3env/README.md +0 -16
- package/templates/solid/add-on/t3env/assets/src/env.ts +0 -39
- package/templates/solid/add-on/t3env/info.json +0 -10
- package/templates/solid/add-on/t3env/package.json +0 -6
- package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +0 -5
- package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +0 -15
- package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +0 -30
- package/templates/solid/add-on/tanstack-query/info.json +0 -13
- package/templates/solid/add-on/tanstack-query/package.json +0 -6
- package/templates/solid/base/README.md.ejs +0 -215
- package/templates/solid/base/_dot_cursorrules.append +0 -35
- package/templates/solid/base/_dot_gitignore +0 -5
- package/templates/solid/base/_dot_vscode/settings.biome.json +0 -38
- package/templates/solid/base/_dot_vscode/settings.json +0 -11
- package/templates/solid/base/index.html.ejs +0 -20
- package/templates/solid/base/package.biome.json +0 -10
- package/templates/solid/base/package.eslintprettier.json +0 -11
- package/templates/solid/base/package.json +0 -23
- package/templates/solid/base/package.ts.json +0 -5
- package/templates/solid/base/package.tw.json +0 -6
- package/templates/solid/base/public/favicon.ico +0 -0
- package/templates/solid/base/public/logo192.png +0 -0
- package/templates/solid/base/public/logo512.png +0 -0
- package/templates/solid/base/public/manifest.json +0 -25
- package/templates/solid/base/public/robots.txt +0 -3
- package/templates/solid/base/src/App.css +0 -0
- package/templates/solid/base/src/App.tsx.ejs +0 -47
- package/templates/solid/base/src/components/Header.tsx.ejs +0 -26
- package/templates/solid/base/src/logo.svg +0 -120
- package/templates/solid/base/src/styles.css.ejs +0 -15
- package/templates/solid/base/toolchain/.prettierignore +0 -3
- package/templates/solid/base/toolchain/biome.json +0 -31
- package/templates/solid/base/toolchain/eslint.config.js +0 -5
- package/templates/solid/base/toolchain/prettier.config.js +0 -10
- package/templates/solid/base/tsconfig.json.ejs +0 -31
- package/templates/solid/base/vite.config.js.ejs +0 -22
- package/templates/solid/code-router/src/main.tsx.ejs +0 -71
- package/templates/solid/example/tanchat/README.md +0 -52
- package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +0 -110
- package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +0 -1
- package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +0 -26
- package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +0 -102
- package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +0 -15
- package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +0 -149
- package/templates/solid/example/tanchat/assets/src/demo.index.css +0 -227
- package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +0 -13
- package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +0 -435
- package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +0 -17
- package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +0 -133
- package/templates/solid/example/tanchat/info.json +0 -14
- package/templates/solid/example/tanchat/package.json +0 -7
- package/templates/solid/file-router/package.fr.json +0 -5
- package/templates/solid/file-router/src/main.tsx.ejs +0 -47
- package/templates/solid/file-router/src/routes/__root.tsx.ejs +0 -41
- package/templates/solid/file-router/src/routes/index.tsx +0 -43
- package/tests/cra.test.ts +0 -293
- package/tests/snapshots/cra/cr-js-npm.json +0 -33
- package/tests/snapshots/cra/cr-ts-npm.json +0 -34
- package/tests/snapshots/cra/cr-ts-start-npm.json +0 -38
- package/tests/snapshots/cra/fr-ts-npm.json +0 -34
- package/tests/snapshots/cra/fr-ts-tw-npm.json +0 -33
- package/tests/snapshots/cra/solid-cr-js-npm.json +0 -31
- package/tests/snapshots/cra/solid-cr-ts-npm.json +0 -32
- package/tests/snapshots/cra/solid-cr-ts-start-npm.json +0 -36
- package/tests/snapshots/cra/solid-fr-ts-npm.json +0 -33
- package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +0 -32
- package/tests/test-utilities.ts +0 -87
package/dist/add.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { existsSync, statSync } from 'node:fs';
|
|
3
|
-
import { basename, dirname, resolve } from 'node:path';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import { execa, execaSync } from 'execa';
|
|
6
|
-
import { cancel, confirm, intro, isCancel, log, outro, spinner, } from '@clack/prompts';
|
|
7
|
-
import { CONFIG_FILE } from './constants.js';
|
|
8
|
-
import { createDefaultEnvironment, createMemoryEnvironment, } from './environment.js';
|
|
9
|
-
import { createApp } from './create-app.js';
|
|
10
|
-
import { finalizeAddOns } from './add-ons.js';
|
|
11
|
-
import { sortObject } from './utils.js';
|
|
12
|
-
import { readConfigFile, writeConfigFile } from './config-file.js';
|
|
13
|
-
function isDirectory(path) {
|
|
14
|
-
return statSync(path).isDirectory();
|
|
15
|
-
}
|
|
16
|
-
async function hasPendingGitChanges() {
|
|
17
|
-
const status = await execaSync('git', ['status', '--porcelain']);
|
|
18
|
-
return status.stdout.length > 0;
|
|
19
|
-
}
|
|
20
|
-
async function createOptions(json, addOns) {
|
|
21
|
-
return {
|
|
22
|
-
...json,
|
|
23
|
-
tailwind: true,
|
|
24
|
-
chosenAddOns: await finalizeAddOns(json.framework, json.mode, [...json.existingAddOns, ...addOns]),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
async function runCreateApp(options) {
|
|
28
|
-
const { environment, output } = createMemoryEnvironment();
|
|
29
|
-
await createApp(options, {
|
|
30
|
-
silent: true,
|
|
31
|
-
environment,
|
|
32
|
-
cwd: process.cwd(),
|
|
33
|
-
name: 'create-tsrouter-app',
|
|
34
|
-
});
|
|
35
|
-
return output;
|
|
36
|
-
}
|
|
37
|
-
export async function add(addOns, { silent = false, } = {}) {
|
|
38
|
-
const persistedOptions = await readConfigFile(process.cwd());
|
|
39
|
-
if (!persistedOptions) {
|
|
40
|
-
console.error(`${chalk.red('There is no .cta.json file in your project.')}
|
|
41
|
-
|
|
42
|
-
This is probably because this was created with an older version of create-tsrouter-app.`);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (!silent) {
|
|
46
|
-
intro(`Adding ${addOns.join(', ')} to the project...`);
|
|
47
|
-
}
|
|
48
|
-
if (await hasPendingGitChanges()) {
|
|
49
|
-
log.error(`${chalk.red('You have pending git changes.')} Please commit or stash them before adding add-ons.`);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const newOptions = await createOptions(persistedOptions, addOns);
|
|
53
|
-
const output = await runCreateApp(newOptions);
|
|
54
|
-
const overwrittenFiles = [];
|
|
55
|
-
const changedFiles = [];
|
|
56
|
-
const contentMap = new Map();
|
|
57
|
-
for (const file of Object.keys(output.files)) {
|
|
58
|
-
const relativeFile = file.replace(process.cwd(), '');
|
|
59
|
-
if (existsSync(file)) {
|
|
60
|
-
if (!isDirectory(file)) {
|
|
61
|
-
const contents = (await readFile(file)).toString();
|
|
62
|
-
if (['package.json', CONFIG_FILE].includes(basename(file)) ||
|
|
63
|
-
contents !== output.files[file]) {
|
|
64
|
-
overwrittenFiles.push(relativeFile);
|
|
65
|
-
contentMap.set(relativeFile, output.files[file]);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
changedFiles.push(relativeFile);
|
|
71
|
-
contentMap.set(relativeFile, output.files[file]);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if (overwrittenFiles.length > 0 && !silent) {
|
|
75
|
-
log.warn(`${chalk.yellow('The following will be overwritten:')}\n${overwrittenFiles.join('\n')}`);
|
|
76
|
-
const shouldContinue = await confirm({
|
|
77
|
-
message: 'Do you want to continue?',
|
|
78
|
-
});
|
|
79
|
-
if (isCancel(shouldContinue)) {
|
|
80
|
-
cancel('Operation cancelled.');
|
|
81
|
-
process.exit(0);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
for (const file of [...changedFiles, ...overwrittenFiles]) {
|
|
85
|
-
const targetFile = `.${file}`;
|
|
86
|
-
const fName = basename(file);
|
|
87
|
-
const contents = contentMap.get(file);
|
|
88
|
-
if (fName === 'package.json') {
|
|
89
|
-
const currentJson = JSON.parse((await readFile(resolve(fName), 'utf-8')).toString());
|
|
90
|
-
const newJson = JSON.parse(contents);
|
|
91
|
-
currentJson.scripts = newJson.scripts;
|
|
92
|
-
currentJson.dependencies = sortObject({
|
|
93
|
-
...currentJson.dependencies,
|
|
94
|
-
...newJson.dependencies,
|
|
95
|
-
});
|
|
96
|
-
currentJson.devDependencies = sortObject({
|
|
97
|
-
...currentJson.devDependencies,
|
|
98
|
-
...newJson.devDependencies,
|
|
99
|
-
});
|
|
100
|
-
await writeFile(targetFile, JSON.stringify(currentJson, null, 2));
|
|
101
|
-
}
|
|
102
|
-
else if (fName !== CONFIG_FILE) {
|
|
103
|
-
await mkdir(resolve(dirname(targetFile)), { recursive: true });
|
|
104
|
-
await writeFile(resolve(targetFile), contents);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Handle commands
|
|
108
|
-
const originalOutput = await runCreateApp(await createOptions(persistedOptions, []));
|
|
109
|
-
const originalCommands = new Set(originalOutput.commands.map((c) => [c.command, ...c.args].join(' ')));
|
|
110
|
-
for (const command of output.commands) {
|
|
111
|
-
const commandString = [command.command, ...command.args].join(' ');
|
|
112
|
-
if (!originalCommands.has(commandString)) {
|
|
113
|
-
await execa(command.command, command.args);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const realEnvironment = createDefaultEnvironment();
|
|
117
|
-
writeConfigFile(realEnvironment, process.cwd(), newOptions);
|
|
118
|
-
const s = silent ? null : spinner();
|
|
119
|
-
s?.start(`Installing dependencies via ${newOptions.packageManager}...`);
|
|
120
|
-
await realEnvironment.execute(newOptions.packageManager, ['install'], resolve(process.cwd()));
|
|
121
|
-
s?.stop(`Installed dependencies`);
|
|
122
|
-
if (!silent) {
|
|
123
|
-
outro('Add-ons added successfully!');
|
|
124
|
-
}
|
|
125
|
-
}
|
package/dist/cli.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Command, InvalidArgumentError } from 'commander';
|
|
2
|
-
import { intro, log } from '@clack/prompts';
|
|
3
|
-
import { createApp } from './create-app.js';
|
|
4
|
-
import { normalizeOptions, promptForOptions } from './options.js';
|
|
5
|
-
import { SUPPORTED_PACKAGE_MANAGERS } from './package-manager.js';
|
|
6
|
-
import { SUPPORTED_TOOLCHAINS } from './toolchain.js';
|
|
7
|
-
import runServer from './mcp.js';
|
|
8
|
-
import { listAddOns } from './add-ons.js';
|
|
9
|
-
import { DEFAULT_FRAMEWORK, SUPPORTED_FRAMEWORKS } from './constants.js';
|
|
10
|
-
// import { initAddOn } from './custom-add-on.js'
|
|
11
|
-
import { createDefaultEnvironment } from './environment.js';
|
|
12
|
-
export function cli({ name, appName, forcedMode, forcedAddOns, }) {
|
|
13
|
-
const program = new Command();
|
|
14
|
-
program.name(name).description(`CLI to create a new ${appName} application`);
|
|
15
|
-
// program
|
|
16
|
-
// .command('add')
|
|
17
|
-
// .argument('add-on', 'Name of the add-on (or add-ons separated by commas)')
|
|
18
|
-
// .action(async (addOn: string) => {
|
|
19
|
-
// await add(addOn.split(',').map((addon) => addon.trim()))
|
|
20
|
-
// })
|
|
21
|
-
// program
|
|
22
|
-
// .command('update-add-on')
|
|
23
|
-
// .description('Create or update an add-on from the current project')
|
|
24
|
-
// .action(async () => {
|
|
25
|
-
// await initAddOn('add-on')
|
|
26
|
-
// })
|
|
27
|
-
// program
|
|
28
|
-
// .command('update-overlay')
|
|
29
|
-
// .description('Create or update a project overlay from the current project')
|
|
30
|
-
// .action(async () => {
|
|
31
|
-
// await initAddOn('overlay')
|
|
32
|
-
// })
|
|
33
|
-
program.argument('[project-name]', 'name of the project');
|
|
34
|
-
if (!forcedMode) {
|
|
35
|
-
program.option('--template <type>', 'project template (typescript, javascript, file-router)', (value) => {
|
|
36
|
-
if (value !== 'typescript' &&
|
|
37
|
-
value !== 'javascript' &&
|
|
38
|
-
value !== 'file-router') {
|
|
39
|
-
throw new InvalidArgumentError(`Invalid template: ${value}. Only the following are allowed: typescript, javascript, file-router`);
|
|
40
|
-
}
|
|
41
|
-
return value;
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
program
|
|
45
|
-
.option('--framework <type>', 'project framework (solid, react)', (value) => {
|
|
46
|
-
if (!SUPPORTED_FRAMEWORKS.includes(value)) {
|
|
47
|
-
throw new InvalidArgumentError(`Invalid framework: ${value}. Only the following are allowed: ${SUPPORTED_FRAMEWORKS.join(', ')}`);
|
|
48
|
-
}
|
|
49
|
-
return value;
|
|
50
|
-
}, DEFAULT_FRAMEWORK)
|
|
51
|
-
// .option('--overlay [url]', 'add an overlay from a URL', false)
|
|
52
|
-
.option(`--package-manager <${SUPPORTED_PACKAGE_MANAGERS.join('|')}>`, `Explicitly tell the CLI to use this package manager`, (value) => {
|
|
53
|
-
if (!SUPPORTED_PACKAGE_MANAGERS.includes(value)) {
|
|
54
|
-
throw new InvalidArgumentError(`Invalid package manager: ${value}. The following are allowed: ${SUPPORTED_PACKAGE_MANAGERS.join(', ')}`);
|
|
55
|
-
}
|
|
56
|
-
return value;
|
|
57
|
-
})
|
|
58
|
-
.option(`--toolchain <${SUPPORTED_TOOLCHAINS.join('|')}>`, `Explicitly tell the CLI to use this toolchain`, (value) => {
|
|
59
|
-
if (!SUPPORTED_TOOLCHAINS.includes(value)) {
|
|
60
|
-
throw new InvalidArgumentError(`Invalid toolchain: ${value}. The following are allowed: ${SUPPORTED_TOOLCHAINS.join(', ')}`);
|
|
61
|
-
}
|
|
62
|
-
return value;
|
|
63
|
-
})
|
|
64
|
-
.option('--interactive', 'interactive mode', false)
|
|
65
|
-
.option('--tailwind', 'add Tailwind CSS', false)
|
|
66
|
-
.option('--add-ons [...add-ons]', 'pick from a list of available add-ons (comma separated list)', (value) => {
|
|
67
|
-
let addOns = !!value;
|
|
68
|
-
if (typeof value === 'string') {
|
|
69
|
-
addOns = value.split(',').map((addon) => addon.trim());
|
|
70
|
-
}
|
|
71
|
-
return addOns;
|
|
72
|
-
})
|
|
73
|
-
.option('--list-add-ons', 'list all available add-ons', false)
|
|
74
|
-
.option('--no-git', 'do not create a git repository')
|
|
75
|
-
.option('--target-dir <path>', 'the target directory for the application root')
|
|
76
|
-
.option('--mcp', 'run the MCP server', false)
|
|
77
|
-
.option('--mcp-sse', 'run the MCP server in SSE mode', false);
|
|
78
|
-
program.action(async (projectName, options) => {
|
|
79
|
-
if (options.listAddOns) {
|
|
80
|
-
await listAddOns(options, {
|
|
81
|
-
forcedMode: forcedMode,
|
|
82
|
-
forcedAddOns,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
else if (options.mcp || options.mcpSse) {
|
|
86
|
-
await runServer(!!options.mcpSse, {
|
|
87
|
-
forcedMode: forcedMode,
|
|
88
|
-
forcedAddOns,
|
|
89
|
-
appName,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
try {
|
|
94
|
-
const cliOptions = {
|
|
95
|
-
projectName,
|
|
96
|
-
...options,
|
|
97
|
-
};
|
|
98
|
-
if (forcedMode) {
|
|
99
|
-
cliOptions.template = forcedMode;
|
|
100
|
-
}
|
|
101
|
-
let finalOptions;
|
|
102
|
-
if (cliOptions.interactive) {
|
|
103
|
-
cliOptions.addOns = true;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
finalOptions = await normalizeOptions(cliOptions, forcedMode, forcedAddOns);
|
|
107
|
-
}
|
|
108
|
-
if (finalOptions) {
|
|
109
|
-
intro(`Creating a new ${appName} app in ${projectName}...`);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
intro(`Let's configure your ${appName} application`);
|
|
113
|
-
finalOptions = await promptForOptions(cliOptions, {
|
|
114
|
-
forcedMode: forcedMode,
|
|
115
|
-
forcedAddOns,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
await createApp(finalOptions, {
|
|
119
|
-
environment: createDefaultEnvironment(),
|
|
120
|
-
cwd: options.targetDir || undefined,
|
|
121
|
-
name,
|
|
122
|
-
appName,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
log.error(error instanceof Error ? error.message : 'An unknown error occurred');
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
program.parse();
|
|
132
|
-
}
|
package/dist/custom-add-on.js
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { readFile, readdir } from 'node:fs/promises';
|
|
2
|
-
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { basename, dirname, resolve } from 'node:path';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import { createMemoryEnvironment } from './environment.js';
|
|
6
|
-
import { createApp } from './create-app.js';
|
|
7
|
-
import { readConfigFile } from './config-file.js';
|
|
8
|
-
import { finalizeAddOns } from './add-ons.js';
|
|
9
|
-
import { readFileHelper } from './file-helper.js';
|
|
10
|
-
const INFO_FILE = {
|
|
11
|
-
'add-on': '.add-on/info.json',
|
|
12
|
-
overlay: 'overlay-info.json',
|
|
13
|
-
};
|
|
14
|
-
const COMPILED_FILE = {
|
|
15
|
-
'add-on': 'add-on.json',
|
|
16
|
-
overlay: 'overlay.json',
|
|
17
|
-
};
|
|
18
|
-
const ADD_ON_DIR = '.add-on';
|
|
19
|
-
const ASSETS_DIR = 'assets';
|
|
20
|
-
const IGNORE_FILES = [
|
|
21
|
-
ADD_ON_DIR,
|
|
22
|
-
'node_modules',
|
|
23
|
-
'dist',
|
|
24
|
-
'build',
|
|
25
|
-
'.git',
|
|
26
|
-
'pnpm-lock.yaml',
|
|
27
|
-
'package-lock.json',
|
|
28
|
-
'yarn.lock',
|
|
29
|
-
'bun.lockb',
|
|
30
|
-
'bun.lock',
|
|
31
|
-
'deno.lock',
|
|
32
|
-
'add-on.json',
|
|
33
|
-
'add-on-info.json',
|
|
34
|
-
'package.json',
|
|
35
|
-
];
|
|
36
|
-
const ADD_ON_IGNORE_FILES = [
|
|
37
|
-
'main.jsx',
|
|
38
|
-
'App.jsx',
|
|
39
|
-
'main.tsx',
|
|
40
|
-
'App.tsx',
|
|
41
|
-
'routeTree.gen.ts',
|
|
42
|
-
];
|
|
43
|
-
function templatize(routeCode, routeFile) {
|
|
44
|
-
let code = routeCode;
|
|
45
|
-
// Replace the import
|
|
46
|
-
code = code.replace(/import { createFileRoute } from '@tanstack\/react-router'/g, `import { <% if (fileRouter) { %>createFileRoute<% } else { %>createRoute<% } %> } from '@tanstack/react-router'`);
|
|
47
|
-
// Extract route path and definition, then transform the route declaration
|
|
48
|
-
const routeMatch = code.match(/export\s+const\s+Route\s*=\s*createFileRoute\(['"]([^'"]+)['"]\)\s*\(\{([^}]+)\}\)/);
|
|
49
|
-
let path = '';
|
|
50
|
-
if (routeMatch) {
|
|
51
|
-
const fullMatch = routeMatch[0];
|
|
52
|
-
path = routeMatch[1];
|
|
53
|
-
const routeDefinition = routeMatch[2];
|
|
54
|
-
code = code.replace(fullMatch, `<% if (codeRouter) { %>
|
|
55
|
-
import type { RootRoute } from '@tanstack/react-router'
|
|
56
|
-
<% } else { %>
|
|
57
|
-
export const Route = createFileRoute('${path}')({${routeDefinition}})
|
|
58
|
-
<% } %>`);
|
|
59
|
-
code += `
|
|
60
|
-
<% if (codeRouter) { %>
|
|
61
|
-
export default (parentRoute: RootRoute) => createRoute({
|
|
62
|
-
path: '${path}',
|
|
63
|
-
${routeDefinition}
|
|
64
|
-
getParentRoute: () => parentRoute,
|
|
65
|
-
})
|
|
66
|
-
<% } %>
|
|
67
|
-
`;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
console.error(`No route found in the file: ${routeFile}`);
|
|
71
|
-
}
|
|
72
|
-
const name = basename(path)
|
|
73
|
-
.replace('.tsx', '')
|
|
74
|
-
.replace(/^demo/, '')
|
|
75
|
-
.replace('.', ' ')
|
|
76
|
-
.trim();
|
|
77
|
-
return { url: path, code, name };
|
|
78
|
-
}
|
|
79
|
-
async function createOptions(json) {
|
|
80
|
-
return {
|
|
81
|
-
...json,
|
|
82
|
-
chosenAddOns: await finalizeAddOns(json.framework, json.mode, [...json.existingAddOns]),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
async function runCreateApp(options) {
|
|
86
|
-
const { environment, output } = createMemoryEnvironment();
|
|
87
|
-
await createApp(options, {
|
|
88
|
-
silent: true,
|
|
89
|
-
environment,
|
|
90
|
-
cwd: process.cwd(),
|
|
91
|
-
name: 'create-tsrouter-app',
|
|
92
|
-
});
|
|
93
|
-
return output;
|
|
94
|
-
}
|
|
95
|
-
async function recursivelyGatherFiles(path, files) {
|
|
96
|
-
const dirFiles = await readdir(path, { withFileTypes: true });
|
|
97
|
-
for (const file of dirFiles) {
|
|
98
|
-
if (file.isDirectory()) {
|
|
99
|
-
await recursivelyGatherFiles(resolve(path, file.name), files);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
files[resolve(path, file.name)] = readFileHelper(resolve(path, file.name));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async function compareFiles(path, ignore, original, changedFiles) {
|
|
107
|
-
const files = await readdir(path, { withFileTypes: true });
|
|
108
|
-
for (const file of files) {
|
|
109
|
-
const filePath = `${path}/${file.name}`;
|
|
110
|
-
if (!ignore.includes(file.name)) {
|
|
111
|
-
if (file.isDirectory()) {
|
|
112
|
-
await compareFiles(filePath, ignore, original, changedFiles);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
const contents = (await readFile(filePath)).toString();
|
|
116
|
-
const absolutePath = resolve(process.cwd(), filePath);
|
|
117
|
-
if (!original[absolutePath] || original[absolutePath] !== contents) {
|
|
118
|
-
changedFiles[filePath] = contents;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
export async function initAddOn(mode) {
|
|
125
|
-
const persistedOptions = await readConfigFile(process.cwd());
|
|
126
|
-
if (!persistedOptions) {
|
|
127
|
-
console.error(`${chalk.red('There is no .cta.json file in your project.')}
|
|
128
|
-
|
|
129
|
-
This is probably because this was created with an older version of create-tsrouter-app.`);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (mode === 'add-on') {
|
|
133
|
-
if (persistedOptions.mode !== 'file-router') {
|
|
134
|
-
console.error(`${chalk.red('This project is not using file-router mode.')}
|
|
135
|
-
|
|
136
|
-
To create an add-on, the project must be created with the file-router mode.`);
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
if (!persistedOptions.tailwind) {
|
|
140
|
-
console.error(`${chalk.red('This project is not using Tailwind CSS.')}
|
|
141
|
-
|
|
142
|
-
To create an add-on, the project must be created with Tailwind CSS.`);
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (!persistedOptions.typescript) {
|
|
146
|
-
console.error(`${chalk.red('This project is not using TypeScript.')}
|
|
147
|
-
|
|
148
|
-
To create an add-on, the project must be created with TypeScript.`);
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
const info = existsSync(INFO_FILE[mode])
|
|
153
|
-
? JSON.parse((await readFile(INFO_FILE[mode])).toString())
|
|
154
|
-
: {
|
|
155
|
-
name: `${persistedOptions.projectName}-${mode}`,
|
|
156
|
-
version: '0.0.1',
|
|
157
|
-
description: mode === 'add-on' ? 'Add-on' : 'Project overlay',
|
|
158
|
-
author: 'Jane Smith <jane.smith@example.com>',
|
|
159
|
-
license: 'MIT',
|
|
160
|
-
link: `https://github.com/jane-smith/${persistedOptions.projectName}-${mode}`,
|
|
161
|
-
command: {},
|
|
162
|
-
shadcnComponents: [],
|
|
163
|
-
templates: [persistedOptions.mode],
|
|
164
|
-
routes: [],
|
|
165
|
-
warning: '',
|
|
166
|
-
variables: {},
|
|
167
|
-
phase: 'add-on',
|
|
168
|
-
type: mode,
|
|
169
|
-
packageAdditions: {
|
|
170
|
-
scripts: {},
|
|
171
|
-
dependencies: {},
|
|
172
|
-
devDependencies: {},
|
|
173
|
-
},
|
|
174
|
-
};
|
|
175
|
-
const compiledInfo = JSON.parse(JSON.stringify(info));
|
|
176
|
-
const originalOutput = await runCreateApp(await createOptions(persistedOptions));
|
|
177
|
-
const originalPackageJson = JSON.parse(originalOutput.files[resolve(process.cwd(), 'package.json')]);
|
|
178
|
-
const currentPackageJson = JSON.parse((await readFile('package.json')).toString());
|
|
179
|
-
for (const script of Object.keys(currentPackageJson.scripts)) {
|
|
180
|
-
if (originalPackageJson.scripts[script] !== currentPackageJson.scripts[script]) {
|
|
181
|
-
info.packageAdditions.scripts[script] = currentPackageJson.scripts[script];
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
const dependencies = {};
|
|
185
|
-
for (const dependency of Object.keys(currentPackageJson.dependencies)) {
|
|
186
|
-
if (originalPackageJson.dependencies[dependency] !==
|
|
187
|
-
currentPackageJson.dependencies[dependency]) {
|
|
188
|
-
dependencies[dependency] = currentPackageJson.dependencies[dependency];
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
info.packageAdditions.dependencies = dependencies;
|
|
192
|
-
const devDependencies = {};
|
|
193
|
-
for (const dependency of Object.keys(currentPackageJson.devDependencies)) {
|
|
194
|
-
if (originalPackageJson.devDependencies[dependency] !==
|
|
195
|
-
currentPackageJson.devDependencies[dependency]) {
|
|
196
|
-
devDependencies[dependency] =
|
|
197
|
-
currentPackageJson.devDependencies[dependency];
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
info.packageAdditions.devDependencies = devDependencies;
|
|
201
|
-
// Find altered files
|
|
202
|
-
const changedFiles = {};
|
|
203
|
-
await compareFiles('.', IGNORE_FILES, originalOutput.files, changedFiles);
|
|
204
|
-
if (mode === 'overlay') {
|
|
205
|
-
compiledInfo.files = changedFiles;
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
const assetsDir = resolve(ADD_ON_DIR, ASSETS_DIR);
|
|
209
|
-
if (!existsSync(assetsDir)) {
|
|
210
|
-
await compareFiles('.', IGNORE_FILES, originalOutput.files, changedFiles);
|
|
211
|
-
for (const file of Object.keys(changedFiles).filter((file) => !ADD_ON_IGNORE_FILES.includes(basename(file)))) {
|
|
212
|
-
mkdirSync(dirname(resolve(assetsDir, file)), {
|
|
213
|
-
recursive: true,
|
|
214
|
-
});
|
|
215
|
-
if (file.includes('/routes/')) {
|
|
216
|
-
const { url, code, name } = templatize(changedFiles[file], file);
|
|
217
|
-
info.routes.push({
|
|
218
|
-
url,
|
|
219
|
-
name,
|
|
220
|
-
});
|
|
221
|
-
writeFileSync(resolve(assetsDir, `${file}.ejs`), code);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
writeFileSync(resolve(assetsDir, file), changedFiles[file]);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
const addOnFiles = {};
|
|
229
|
-
await recursivelyGatherFiles(assetsDir, addOnFiles);
|
|
230
|
-
compiledInfo.files = Object.keys(addOnFiles).reduce((acc, file) => {
|
|
231
|
-
acc[file.replace(assetsDir, '.')] = addOnFiles[file];
|
|
232
|
-
return acc;
|
|
233
|
-
}, {});
|
|
234
|
-
}
|
|
235
|
-
compiledInfo.routes = info.routes;
|
|
236
|
-
compiledInfo.framework = persistedOptions.framework;
|
|
237
|
-
compiledInfo.addDependencies = persistedOptions.existingAddOns;
|
|
238
|
-
if (mode === 'overlay') {
|
|
239
|
-
compiledInfo.mode = persistedOptions.mode;
|
|
240
|
-
compiledInfo.typescript = persistedOptions.typescript;
|
|
241
|
-
compiledInfo.tailwind = persistedOptions.tailwind;
|
|
242
|
-
compiledInfo.deletedFiles = [];
|
|
243
|
-
for (const file of Object.keys(originalOutput.files)) {
|
|
244
|
-
if (!existsSync(file)) {
|
|
245
|
-
compiledInfo.deletedFiles.push(file.replace(process.cwd(), '.'));
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (!existsSync(resolve(INFO_FILE[mode]))) {
|
|
250
|
-
mkdirSync(resolve(dirname(INFO_FILE[mode])), { recursive: true });
|
|
251
|
-
writeFileSync(INFO_FILE[mode], JSON.stringify(info, null, 2));
|
|
252
|
-
}
|
|
253
|
-
writeFileSync(COMPILED_FILE[mode], JSON.stringify(compiledInfo, null, 2));
|
|
254
|
-
}
|
package/dist/file-helper.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { extname } from 'node:path';
|
|
3
|
-
const BINARY_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico'];
|
|
4
|
-
export function readFileHelper(path) {
|
|
5
|
-
if (BINARY_EXTENSIONS.includes(extname(path))) {
|
|
6
|
-
return `base64::${readFileSync(path).toString('base64')}`;
|
|
7
|
-
}
|
|
8
|
-
else {
|
|
9
|
-
return readFileSync(path, 'utf-8').toString();
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function getBinaryFile(content) {
|
|
13
|
-
if (content.startsWith('base64::')) {
|
|
14
|
-
const binaryContent = Buffer.from(content.replace('base64::', ''), 'base64');
|
|
15
|
-
return binaryContent;
|
|
16
|
-
}
|
|
17
|
-
return null;
|
|
18
|
-
}
|