create-quadrokit 0.2.4 → 0.2.6

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.
Files changed (46) hide show
  1. package/README.md +2 -2
  2. package/dist/index.mjs +3 -2
  3. package/package.json +1 -1
  4. package/template-common/.env.example +2 -0
  5. package/template-common/tsconfig.app.json +4 -2
  6. package/{templates/ecommerce → template-common}/vite.config.ts +1 -0
  7. package/templates/README.md +5 -3
  8. package/templates/admin-shell/.cursor/rules/commitlint-conventional.mdc +0 -47
  9. package/templates/admin-shell/.env.example +0 -7
  10. package/templates/admin-shell/biome.json +0 -12
  11. package/templates/admin-shell/postcss.config.js +0 -6
  12. package/templates/admin-shell/src/vite-env.d.ts +0 -9
  13. package/templates/admin-shell/tsconfig.app.json +0 -16
  14. package/templates/admin-shell/tsconfig.base.json +0 -20
  15. package/templates/admin-shell/tsconfig.json +0 -4
  16. package/templates/admin-shell/tsconfig.node.json +0 -10
  17. package/templates/admin-shell/vite.config.ts +0 -25
  18. package/templates/dashboard/.cursor/rules/commitlint-conventional.mdc +0 -47
  19. package/templates/dashboard/.env.example +0 -7
  20. package/templates/dashboard/biome.json +0 -12
  21. package/templates/dashboard/postcss.config.js +0 -6
  22. package/templates/dashboard/src/vite-env.d.ts +0 -9
  23. package/templates/dashboard/tsconfig.app.json +0 -16
  24. package/templates/dashboard/tsconfig.base.json +0 -20
  25. package/templates/dashboard/tsconfig.json +0 -4
  26. package/templates/dashboard/tsconfig.node.json +0 -10
  27. package/templates/dashboard/vite.config.ts +0 -25
  28. package/templates/ecommerce/.cursor/rules/commitlint-conventional.mdc +0 -47
  29. package/templates/ecommerce/.env.example +0 -7
  30. package/templates/ecommerce/biome.json +0 -12
  31. package/templates/ecommerce/postcss.config.js +0 -6
  32. package/templates/ecommerce/src/vite-env.d.ts +0 -9
  33. package/templates/ecommerce/tsconfig.app.json +0 -16
  34. package/templates/ecommerce/tsconfig.base.json +0 -20
  35. package/templates/ecommerce/tsconfig.json +0 -4
  36. package/templates/ecommerce/tsconfig.node.json +0 -10
  37. package/templates/website/.cursor/rules/commitlint-conventional.mdc +0 -47
  38. package/templates/website/.env.example +0 -7
  39. package/templates/website/biome.json +0 -12
  40. package/templates/website/postcss.config.js +0 -6
  41. package/templates/website/src/vite-env.d.ts +0 -9
  42. package/templates/website/tsconfig.app.json +0 -16
  43. package/templates/website/tsconfig.base.json +0 -20
  44. package/templates/website/tsconfig.json +0 -4
  45. package/templates/website/tsconfig.node.json +0 -10
  46. package/templates/website/vite.config.ts +0 -25
package/README.md CHANGED
@@ -31,8 +31,8 @@ Interactive mode: run without `--template` / `--dir` / `--name` to be prompted.
31
31
  ## What it does
32
32
 
33
33
  1. Copies the chosen template from `create-quadrokit/templates/<name>` when installed from npm, or `packages/templates/<name>` when you run the CLI from the monorepo (skips `node_modules`, `dist`, `.quadrokit`, lockfiles).
34
- 2. Overlays **`template-common/`** (shared across all templates): `.env.example`, `tsconfig*.json`, `postcss.config.js`, `biome.json`, `src/vite-env.d.ts`, `.cursor/rules/commitlint-conventional.mdc`, etc. In the monorepo, run `bun run sync:template-common` before template `build`/`typecheck` (also runs as part of root `bun run build`).
35
- 3. Rewrites `src/lib/quadro-client.ts` to import from `../../.quadrokit/generated/client.gen.js`.
34
+ 2. Overlays **`template-common/`** (shared across all templates): `.env.example`, `vite.config.ts`, `tsconfig*.json`, `postcss.config.js`, `biome.json`, `src/vite-env.d.ts`, `.cursor/rules/commitlint-conventional.mdc`, etc. In the monorepo, `packages/templates/*` receives the same overlay via `bun run sync:template-common` (root **postinstall** and `bun run build`); those paths are gitignored under `packages/templates/` so only `template-common/` is the source of truth in git.
35
+ 3. Rewrites `src/lib/quadro-client.ts` to import from `@quadrokit/generated/client.gen.js` (alias in `vite.config.ts` / `tsconfig.app.json`).
36
36
  4. Removes `@quadrokit/sample-client` and rewrites `workspace:*` on `@quadrokit/*` deps to `^<version>` matching **create-quadrokit**’s own `package.json` `version` (run `bun run version:set` at repo root to bump public packages) unless `--keep-workspace`.
37
37
  5. Writes `QUADROKIT.md` with proxy and `quadrokit:generate` instructions. Does **not** copy `.quadrokit/generated` — run `bun run quadrokit:generate` after install.
38
38
  6. Adds a root `.gitignore` (unless the template already shipped one).
package/dist/index.mjs CHANGED
@@ -319,7 +319,7 @@ async function writeStandaloneBiome(dest, keepWorkspace) {
319
319
  }
320
320
  async function writeQuadroClientImport(dest) {
321
321
  const p = path.join(dest, 'src', 'lib', 'quadro-client.ts');
322
- const body = `import { createClient } from '../../.quadrokit/generated/client.gen.mjs';
322
+ const body = `import { createClient } from '@quadrokit/generated/client.gen.js';
323
323
 
324
324
  /** Same-origin \`/rest\` in dev (Vite proxy) and production (reverse proxy). */
325
325
  export const quadro = createClient({ baseURL: '/rest' });
@@ -348,8 +348,9 @@ Created with **create-quadrokit** (template: \`${template}\`).
348
348
 
349
349
  - \`QUADROKIT_ACCESS_KEY\` — multipart \`accessKey\` to \`/api/login\`; then \`4DAdminSID\` for the catalog request.
350
350
  - \`QUADROKIT_LOGIN_URL\` — full login URL if not \`\${catalog origin}/api/login\`.
351
+ - \`QUADROKIT_GENERATE_VERBOSE\` / \`QUADROKIT_INSECURE_TLS\` — \`1\` / \`true\` / \`yes\` for chatty logs or self-signed HTTPS (dev only).
351
352
 
352
- Flags: \`--url\`, \`--access-key\`, \`--login-url\`, \`--token\` / \`QUADROKIT_CATALOG_TOKEN\` (Bearer).
353
+ Flags: \`--url\`, \`--access-key\`, \`--login-url\`, \`--token\` / \`QUADROKIT_CATALOG_TOKEN\` (Bearer), \`-v\` / \`--verbose\`, \`--insecure-tls\`.
353
354
 
354
355
  4. \`bun run dev\` — the dev server proxies \`/rest\` to \`VITE_4D_ORIGIN\` so **4DSID_** cookies stay same-origin.
355
356
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-quadrokit",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "Scaffold a QuadroKit Vite + React app from a template",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.mjs",
@@ -5,3 +5,5 @@ VITE_4D_ORIGIN=http://127.0.0.1:7080
5
5
  # Not used by the browser runtime.
6
6
  # QUADROKIT_ACCESS_KEY=
7
7
  # QUADROKIT_LOGIN_URL=https://127.0.0.1:7443/api/login
8
+ # QUADROKIT_GENERATE_VERBOSE=1
9
+ # QUADROKIT_INSECURE_TLS=1
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "extends": "./tsconfig.base.json",
3
3
  "compilerOptions": {
4
+ "baseUrl": ".",
4
5
  "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
6
  "useDefineForClassFields": true,
6
7
  "lib": ["ES2022", "DOM", "DOM.Iterable"],
@@ -9,8 +10,9 @@
9
10
  "jsx": "react-jsx",
10
11
  "verbatimModuleSyntax": true,
11
12
  "paths": {
12
- "@/*": ["./src/*"]
13
+ "@/*": ["./src/*"],
14
+ "@quadrokit/generated/*": [".quadrokit/generated/*"]
13
15
  }
14
16
  },
15
- "include": ["src/**/*.ts", "src/**/*.tsx"]
17
+ "include": ["src/**/*.ts", "src/**/*.tsx", ".quadrokit/generated/**/*.ts"]
16
18
  }
@@ -11,6 +11,7 @@ export default defineConfig(({ mode }) => {
11
11
  resolve: {
12
12
  alias: {
13
13
  '@': path.resolve(__dirname, 'src'),
14
+ '@quadrokit/generated': path.resolve(__dirname, '.quadrokit/generated'),
14
15
  },
15
16
  },
16
17
  server: {
@@ -11,17 +11,19 @@ Vite + React 19 + React Router 7 + **Tailwind 3.4** + **i18next** + **react-hook
11
11
 
12
12
  ## Monorepo
13
13
 
14
+ Shared config (Vite, TypeScript, Biome, PostCSS, `.env.example`, etc.) lives in **`../../create-quadrokit/template-common/`** and is copied into each template by **`bun run sync:template-common`** (runs on root **postinstall** and before template builds). Do not edit those files inside `packages/templates/<name>/`—change **`template-common`** and re-sync.
15
+
14
16
  ```bash
15
17
  cd packages/templates/dashboard # or website / ecommerce / admin-shell
16
- bun install # from repo root once
18
+ bun install # from repo root once (runs sync:template-common)
17
19
  bun run dev
18
20
  ```
19
21
 
20
- Copy [`.env.example`](dashboard/.env.example) to `.env` and set `VITE_4D_ORIGIN`.
22
+ Copy [`template-common/.env.example`](../../create-quadrokit/template-common/.env.example) to `.env` in the template directory and set `VITE_4D_ORIGIN`.
21
23
 
22
24
  ## Biome (per template)
23
25
 
24
- Each template has a [`biome.json`](dashboard/biome.json) with `"root": false` and `"extends": "//"` (Biome v2 monorepo pattern: inherit repo root, scope files to that template). `vcs.useIgnoreFile` is off so Biome does not require a `.gitignore` next to the template.
26
+ Each template uses a `biome.json` (from `template-common`) with `"root": false` and `"extends": "//"` (Biome v2 monorepo pattern: inherit repo root, scope files to that template). `vcs.useIgnoreFile` is off so Biome does not require a `.gitignore` next to the template.
25
27
 
26
28
  | Script | Purpose |
27
29
  |--------|---------|
@@ -1,47 +0,0 @@
1
- ---
2
- description: Commit messages must follow Conventional Commits (commitlint @commitlint/config-conventional)
3
- alwaysApply: true
4
- ---
5
-
6
- # Git commits (Conventional Commits / commitlint)
7
-
8
- When proposing or writing **commit messages** (including one-line suggestions, full messages, or PR squash titles), use **Conventional Commits** compatible with **@commitlint/config-conventional**.
9
-
10
- ## Header format
11
-
12
- ```
13
- <type>(<optional-scope>): <short description>
14
- ```
15
-
16
- - **type** (pick one): `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
17
- - **scope** (optional): lowercase, short package or area (e.g. `client`, `templates`, `ui`, `create-quadrokit`)
18
- - **description**: imperative mood, **lowercase**, **no trailing period**, **≤ ~72 characters** for the subject line
19
-
20
- ## Breaking changes
21
-
22
- - Add `!` after type or scope: `feat(api)!: remove legacy login endpoint`
23
- - Or explain in the body with a line starting with `BREAKING CHANGE:`
24
-
25
- ## Body and footer (when needed)
26
-
27
- - Separate body from subject with a blank line.
28
- - Wrap body at ~100 chars.
29
- - Footer: `Refs: #123` / `Fixes: #123` if applicable.
30
-
31
- ## Examples
32
-
33
- ```
34
- feat(client): add entity set release helper
35
-
36
- fix(templates): correct vite proxy target env var
37
-
38
- chore: bump biome to 2.4.10
39
-
40
- docs(readme): document ci:quick script
41
- ```
42
-
43
- ## Do not
44
-
45
- - Vague subjects: `update`, `fix stuff`, `wip`
46
- - End the subject line with a period
47
- - Use title case for the description (use sentence case / lowercase)
@@ -1,7 +0,0 @@
1
- # Origin of your 4D web server (REST). The Vite dev server proxies /rest here.
2
- VITE_4D_ORIGIN=http://127.0.0.1:7080
3
-
4
- # Generator only (quadrokit:generate): multipart accessKey → 4DAdminSID cookie for fetching /rest/$catalog.
5
- # Not used by the browser runtime.
6
- # QUADROKIT_ACCESS_KEY=
7
- # QUADROKIT_LOGIN_URL=https://127.0.0.1:7443/api/login
@@ -1,12 +0,0 @@
1
- {
2
- "root": false,
3
- "extends": "//",
4
- "vcs": {
5
- "enabled": true,
6
- "clientKind": "git",
7
- "useIgnoreFile": false
8
- },
9
- "files": {
10
- "includes": ["**", "!**/node_modules", "!**/dist", "!**/.quadrokit"]
11
- }
12
- }
@@ -1,6 +0,0 @@
1
- export default {
2
- plugins: {
3
- tailwindcss: {},
4
- autoprefixer: {},
5
- },
6
- }
@@ -1,9 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- interface ImportMetaEnv {
4
- readonly VITE_4D_ORIGIN?: string
5
- }
6
-
7
- interface ImportMeta {
8
- readonly env: ImportMetaEnv
9
- }
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "moduleDetection": "force",
8
- "noEmit": true,
9
- "jsx": "react-jsx",
10
- "verbatimModuleSyntax": true,
11
- "paths": {
12
- "@/*": ["./src/*"]
13
- }
14
- },
15
- "include": ["src/**/*.ts", "src/**/*.tsx"]
16
- }
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "resolveJsonModule": true,
8
- "strict": true,
9
- "skipLibCheck": true,
10
- "noEmit": true,
11
- "jsx": "react-jsx",
12
- "isolatedModules": true,
13
- "verbatimModuleSyntax": true,
14
- "noUnusedLocals": true,
15
- "noUnusedParameters": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "esModuleInterop": true,
18
- "allowSyntheticDefaultImports": true
19
- }
20
- }
@@ -1,4 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }]
4
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
- "noEmit": true,
6
- "moduleDetection": "force",
7
- "types": ["node"]
8
- },
9
- "include": ["vite.config.ts", "tailwind.config.ts"]
10
- }
@@ -1,25 +0,0 @@
1
- import path from 'node:path'
2
- import react from '@vitejs/plugin-react'
3
- import { defineConfig, loadEnv } from 'vite'
4
-
5
- export default defineConfig(({ mode }) => {
6
- const env = loadEnv(mode, process.cwd(), '')
7
- const target4d = env.VITE_4D_ORIGIN ?? 'http://127.0.0.1:7080'
8
-
9
- return {
10
- plugins: [react()],
11
- resolve: {
12
- alias: {
13
- '@': path.resolve(__dirname, 'src'),
14
- },
15
- },
16
- server: {
17
- proxy: {
18
- '/rest': {
19
- target: target4d,
20
- changeOrigin: true,
21
- },
22
- },
23
- },
24
- }
25
- })
@@ -1,47 +0,0 @@
1
- ---
2
- description: Commit messages must follow Conventional Commits (commitlint @commitlint/config-conventional)
3
- alwaysApply: true
4
- ---
5
-
6
- # Git commits (Conventional Commits / commitlint)
7
-
8
- When proposing or writing **commit messages** (including one-line suggestions, full messages, or PR squash titles), use **Conventional Commits** compatible with **@commitlint/config-conventional**.
9
-
10
- ## Header format
11
-
12
- ```
13
- <type>(<optional-scope>): <short description>
14
- ```
15
-
16
- - **type** (pick one): `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
17
- - **scope** (optional): lowercase, short package or area (e.g. `client`, `templates`, `ui`, `create-quadrokit`)
18
- - **description**: imperative mood, **lowercase**, **no trailing period**, **≤ ~72 characters** for the subject line
19
-
20
- ## Breaking changes
21
-
22
- - Add `!` after type or scope: `feat(api)!: remove legacy login endpoint`
23
- - Or explain in the body with a line starting with `BREAKING CHANGE:`
24
-
25
- ## Body and footer (when needed)
26
-
27
- - Separate body from subject with a blank line.
28
- - Wrap body at ~100 chars.
29
- - Footer: `Refs: #123` / `Fixes: #123` if applicable.
30
-
31
- ## Examples
32
-
33
- ```
34
- feat(client): add entity set release helper
35
-
36
- fix(templates): correct vite proxy target env var
37
-
38
- chore: bump biome to 2.4.10
39
-
40
- docs(readme): document ci:quick script
41
- ```
42
-
43
- ## Do not
44
-
45
- - Vague subjects: `update`, `fix stuff`, `wip`
46
- - End the subject line with a period
47
- - Use title case for the description (use sentence case / lowercase)
@@ -1,7 +0,0 @@
1
- # Origin of your 4D web server (REST). The Vite dev server proxies /rest here.
2
- VITE_4D_ORIGIN=http://127.0.0.1:7080
3
-
4
- # Generator only (quadrokit:generate): multipart accessKey → 4DAdminSID cookie for fetching /rest/$catalog.
5
- # Not used by the browser runtime.
6
- # QUADROKIT_ACCESS_KEY=
7
- # QUADROKIT_LOGIN_URL=https://127.0.0.1:7443/api/login
@@ -1,12 +0,0 @@
1
- {
2
- "root": false,
3
- "extends": "//",
4
- "vcs": {
5
- "enabled": true,
6
- "clientKind": "git",
7
- "useIgnoreFile": false
8
- },
9
- "files": {
10
- "includes": ["**", "!**/node_modules", "!**/dist", "!**/.quadrokit"]
11
- }
12
- }
@@ -1,6 +0,0 @@
1
- export default {
2
- plugins: {
3
- tailwindcss: {},
4
- autoprefixer: {},
5
- },
6
- }
@@ -1,9 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- interface ImportMetaEnv {
4
- readonly VITE_4D_ORIGIN?: string
5
- }
6
-
7
- interface ImportMeta {
8
- readonly env: ImportMetaEnv
9
- }
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "moduleDetection": "force",
8
- "noEmit": true,
9
- "jsx": "react-jsx",
10
- "verbatimModuleSyntax": true,
11
- "paths": {
12
- "@/*": ["./src/*"]
13
- }
14
- },
15
- "include": ["src/**/*.ts", "src/**/*.tsx"]
16
- }
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "resolveJsonModule": true,
8
- "strict": true,
9
- "skipLibCheck": true,
10
- "noEmit": true,
11
- "jsx": "react-jsx",
12
- "isolatedModules": true,
13
- "verbatimModuleSyntax": true,
14
- "noUnusedLocals": true,
15
- "noUnusedParameters": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "esModuleInterop": true,
18
- "allowSyntheticDefaultImports": true
19
- }
20
- }
@@ -1,4 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }]
4
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
- "noEmit": true,
6
- "moduleDetection": "force",
7
- "types": ["node"]
8
- },
9
- "include": ["vite.config.ts", "tailwind.config.ts"]
10
- }
@@ -1,25 +0,0 @@
1
- import path from 'node:path'
2
- import react from '@vitejs/plugin-react'
3
- import { defineConfig, loadEnv } from 'vite'
4
-
5
- export default defineConfig(({ mode }) => {
6
- const env = loadEnv(mode, process.cwd(), '')
7
- const target4d = env.VITE_4D_ORIGIN ?? 'http://127.0.0.1:7080'
8
-
9
- return {
10
- plugins: [react()],
11
- resolve: {
12
- alias: {
13
- '@': path.resolve(__dirname, 'src'),
14
- },
15
- },
16
- server: {
17
- proxy: {
18
- '/rest': {
19
- target: target4d,
20
- changeOrigin: true,
21
- },
22
- },
23
- },
24
- }
25
- })
@@ -1,47 +0,0 @@
1
- ---
2
- description: Commit messages must follow Conventional Commits (commitlint @commitlint/config-conventional)
3
- alwaysApply: true
4
- ---
5
-
6
- # Git commits (Conventional Commits / commitlint)
7
-
8
- When proposing or writing **commit messages** (including one-line suggestions, full messages, or PR squash titles), use **Conventional Commits** compatible with **@commitlint/config-conventional**.
9
-
10
- ## Header format
11
-
12
- ```
13
- <type>(<optional-scope>): <short description>
14
- ```
15
-
16
- - **type** (pick one): `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
17
- - **scope** (optional): lowercase, short package or area (e.g. `client`, `templates`, `ui`, `create-quadrokit`)
18
- - **description**: imperative mood, **lowercase**, **no trailing period**, **≤ ~72 characters** for the subject line
19
-
20
- ## Breaking changes
21
-
22
- - Add `!` after type or scope: `feat(api)!: remove legacy login endpoint`
23
- - Or explain in the body with a line starting with `BREAKING CHANGE:`
24
-
25
- ## Body and footer (when needed)
26
-
27
- - Separate body from subject with a blank line.
28
- - Wrap body at ~100 chars.
29
- - Footer: `Refs: #123` / `Fixes: #123` if applicable.
30
-
31
- ## Examples
32
-
33
- ```
34
- feat(client): add entity set release helper
35
-
36
- fix(templates): correct vite proxy target env var
37
-
38
- chore: bump biome to 2.4.10
39
-
40
- docs(readme): document ci:quick script
41
- ```
42
-
43
- ## Do not
44
-
45
- - Vague subjects: `update`, `fix stuff`, `wip`
46
- - End the subject line with a period
47
- - Use title case for the description (use sentence case / lowercase)
@@ -1,7 +0,0 @@
1
- # Origin of your 4D web server (REST). The Vite dev server proxies /rest here.
2
- VITE_4D_ORIGIN=http://127.0.0.1:7080
3
-
4
- # Generator only (quadrokit:generate): multipart accessKey → 4DAdminSID cookie for fetching /rest/$catalog.
5
- # Not used by the browser runtime.
6
- # QUADROKIT_ACCESS_KEY=
7
- # QUADROKIT_LOGIN_URL=https://127.0.0.1:7443/api/login
@@ -1,12 +0,0 @@
1
- {
2
- "root": false,
3
- "extends": "//",
4
- "vcs": {
5
- "enabled": true,
6
- "clientKind": "git",
7
- "useIgnoreFile": false
8
- },
9
- "files": {
10
- "includes": ["**", "!**/node_modules", "!**/dist", "!**/.quadrokit"]
11
- }
12
- }
@@ -1,6 +0,0 @@
1
- export default {
2
- plugins: {
3
- tailwindcss: {},
4
- autoprefixer: {},
5
- },
6
- }
@@ -1,9 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- interface ImportMetaEnv {
4
- readonly VITE_4D_ORIGIN?: string
5
- }
6
-
7
- interface ImportMeta {
8
- readonly env: ImportMetaEnv
9
- }
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "moduleDetection": "force",
8
- "noEmit": true,
9
- "jsx": "react-jsx",
10
- "verbatimModuleSyntax": true,
11
- "paths": {
12
- "@/*": ["./src/*"]
13
- }
14
- },
15
- "include": ["src/**/*.ts", "src/**/*.tsx"]
16
- }
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "resolveJsonModule": true,
8
- "strict": true,
9
- "skipLibCheck": true,
10
- "noEmit": true,
11
- "jsx": "react-jsx",
12
- "isolatedModules": true,
13
- "verbatimModuleSyntax": true,
14
- "noUnusedLocals": true,
15
- "noUnusedParameters": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "esModuleInterop": true,
18
- "allowSyntheticDefaultImports": true
19
- }
20
- }
@@ -1,4 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }]
4
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
- "noEmit": true,
6
- "moduleDetection": "force",
7
- "types": ["node"]
8
- },
9
- "include": ["vite.config.ts", "tailwind.config.ts"]
10
- }
@@ -1,47 +0,0 @@
1
- ---
2
- description: Commit messages must follow Conventional Commits (commitlint @commitlint/config-conventional)
3
- alwaysApply: true
4
- ---
5
-
6
- # Git commits (Conventional Commits / commitlint)
7
-
8
- When proposing or writing **commit messages** (including one-line suggestions, full messages, or PR squash titles), use **Conventional Commits** compatible with **@commitlint/config-conventional**.
9
-
10
- ## Header format
11
-
12
- ```
13
- <type>(<optional-scope>): <short description>
14
- ```
15
-
16
- - **type** (pick one): `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
17
- - **scope** (optional): lowercase, short package or area (e.g. `client`, `templates`, `ui`, `create-quadrokit`)
18
- - **description**: imperative mood, **lowercase**, **no trailing period**, **≤ ~72 characters** for the subject line
19
-
20
- ## Breaking changes
21
-
22
- - Add `!` after type or scope: `feat(api)!: remove legacy login endpoint`
23
- - Or explain in the body with a line starting with `BREAKING CHANGE:`
24
-
25
- ## Body and footer (when needed)
26
-
27
- - Separate body from subject with a blank line.
28
- - Wrap body at ~100 chars.
29
- - Footer: `Refs: #123` / `Fixes: #123` if applicable.
30
-
31
- ## Examples
32
-
33
- ```
34
- feat(client): add entity set release helper
35
-
36
- fix(templates): correct vite proxy target env var
37
-
38
- chore: bump biome to 2.4.10
39
-
40
- docs(readme): document ci:quick script
41
- ```
42
-
43
- ## Do not
44
-
45
- - Vague subjects: `update`, `fix stuff`, `wip`
46
- - End the subject line with a period
47
- - Use title case for the description (use sentence case / lowercase)
@@ -1,7 +0,0 @@
1
- # Origin of your 4D web server (REST). The Vite dev server proxies /rest here.
2
- VITE_4D_ORIGIN=http://127.0.0.1:7080
3
-
4
- # Generator only (quadrokit:generate): multipart accessKey → 4DAdminSID cookie for fetching /rest/$catalog.
5
- # Not used by the browser runtime.
6
- # QUADROKIT_ACCESS_KEY=
7
- # QUADROKIT_LOGIN_URL=https://127.0.0.1:7443/api/login
@@ -1,12 +0,0 @@
1
- {
2
- "root": false,
3
- "extends": "//",
4
- "vcs": {
5
- "enabled": true,
6
- "clientKind": "git",
7
- "useIgnoreFile": false
8
- },
9
- "files": {
10
- "includes": ["**", "!**/node_modules", "!**/dist", "!**/.quadrokit"]
11
- }
12
- }
@@ -1,6 +0,0 @@
1
- export default {
2
- plugins: {
3
- tailwindcss: {},
4
- autoprefixer: {},
5
- },
6
- }
@@ -1,9 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- interface ImportMetaEnv {
4
- readonly VITE_4D_ORIGIN?: string
5
- }
6
-
7
- interface ImportMeta {
8
- readonly env: ImportMetaEnv
9
- }
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "moduleDetection": "force",
8
- "noEmit": true,
9
- "jsx": "react-jsx",
10
- "verbatimModuleSyntax": true,
11
- "paths": {
12
- "@/*": ["./src/*"]
13
- }
14
- },
15
- "include": ["src/**/*.ts", "src/**/*.tsx"]
16
- }
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "resolveJsonModule": true,
8
- "strict": true,
9
- "skipLibCheck": true,
10
- "noEmit": true,
11
- "jsx": "react-jsx",
12
- "isolatedModules": true,
13
- "verbatimModuleSyntax": true,
14
- "noUnusedLocals": true,
15
- "noUnusedParameters": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "esModuleInterop": true,
18
- "allowSyntheticDefaultImports": true
19
- }
20
- }
@@ -1,4 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }]
4
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
- "noEmit": true,
6
- "moduleDetection": "force",
7
- "types": ["node"]
8
- },
9
- "include": ["vite.config.ts", "tailwind.config.ts"]
10
- }
@@ -1,25 +0,0 @@
1
- import path from 'node:path'
2
- import react from '@vitejs/plugin-react'
3
- import { defineConfig, loadEnv } from 'vite'
4
-
5
- export default defineConfig(({ mode }) => {
6
- const env = loadEnv(mode, process.cwd(), '')
7
- const target4d = env.VITE_4D_ORIGIN ?? 'http://127.0.0.1:7080'
8
-
9
- return {
10
- plugins: [react()],
11
- resolve: {
12
- alias: {
13
- '@': path.resolve(__dirname, 'src'),
14
- },
15
- },
16
- server: {
17
- proxy: {
18
- '/rest': {
19
- target: target4d,
20
- changeOrigin: true,
21
- },
22
- },
23
- },
24
- }
25
- })