@forumone/create-throughline 0.4.0 → 1.0.0-next.2

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 (50) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/dist/generator.d.ts.map +1 -1
  3. package/dist/generator.js +4 -3
  4. package/dist/generator.js.map +1 -1
  5. package/dist/post-install.d.ts.map +1 -1
  6. package/dist/post-install.js +6 -2
  7. package/dist/post-install.js.map +1 -1
  8. package/dist/templates/base/.env.example +22 -8
  9. package/dist/templates/base/CLAUDE.md +112 -0
  10. package/dist/templates/base/README.md +39 -8
  11. package/dist/templates/base/apps/web/e2e/site.ts +36 -0
  12. package/dist/templates/base/apps/web/e2e/smoke.spec.ts +52 -0
  13. package/dist/templates/base/apps/web/package.json.template +26 -25
  14. package/dist/templates/base/apps/web/playwright.config.ts +63 -0
  15. package/dist/templates/base/apps/web/src/access/anonymousAccess.test.ts +33 -0
  16. package/dist/templates/base/apps/web/src/app/api/inngest/route.ts.template +15 -79
  17. package/dist/templates/base/apps/web/src/instrumentation.ts +35 -0
  18. package/dist/templates/base/apps/web/src/lib/cache-tags.ts +23 -0
  19. package/dist/templates/base/apps/web/src/lib/inngest.ts.template +7 -0
  20. package/dist/templates/base/apps/web/src/payload.config.ts.template +138 -123
  21. package/dist/templates/base/apps/web/vitest.config.ts +56 -0
  22. package/dist/templates/base/claude/hooks/gate.sh +45 -0
  23. package/dist/templates/base/claude/settings.json +16 -0
  24. package/dist/templates/base/github/workflows/ci.yml +28 -3
  25. package/dist/templates/base/gitignore +9 -0
  26. package/dist/templates/base/package.json.template +1 -0
  27. package/dist/templates/base/scripts/check-tested-packages.ts +0 -2
  28. package/dist/templates/base/turbo.json +0 -1
  29. package/dist/templates/with-reference-ds/design-system/package.json.template +1 -1
  30. package/dist/templates/with-reference-ds/design-system/scripts/build-manifest.ts +1 -1
  31. package/dist/templates/with-reference-ds/design-system/scripts/validate.ts +3 -3
  32. package/dist/templates/with-reference-ds/design-system/src/components/CTASection/CTASection.contract.ts +1 -1
  33. package/dist/templates/with-reference-ds/design-system/src/components/Card/Card.contract.ts +1 -1
  34. package/dist/templates/with-reference-ds/design-system/src/components/CardGrid/CardGrid.contract.ts +1 -1
  35. package/dist/templates/with-reference-ds/design-system/src/components/Divider/Divider.contract.ts +2 -1
  36. package/dist/templates/with-reference-ds/design-system/src/components/FAQ/FAQ.contract.ts +1 -1
  37. package/dist/templates/with-reference-ds/design-system/src/components/Hero/Hero.contract.ts +1 -1
  38. package/dist/templates/with-reference-ds/design-system/src/components/MediaBlock/MediaBlock.contract.ts +1 -1
  39. package/dist/templates/with-reference-ds/design-system/src/components/Prose/Prose.contract.ts +1 -1
  40. package/dist/templates/with-reference-ds/design-system/src/components/Quote/Quote.contract.ts +1 -1
  41. package/dist/templates/with-reference-ds/design-system/src/components/SectionIntro/SectionIntro.contract.ts +1 -1
  42. package/dist/templates/with-reference-ds/design-system/src/components/Spacer/Spacer.contract.ts +1 -1
  43. package/dist/templates/with-reference-ds/design-system/src/components/Stats/Stats.contract.ts +1 -1
  44. package/dist/templates/with-reference-ds/design-system/src/tokens/index.ts +1 -1
  45. package/dist/utils/versions.d.ts +3 -3
  46. package/dist/utils/versions.d.ts.map +1 -1
  47. package/dist/utils/versions.js +14 -8
  48. package/dist/utils/versions.js.map +1 -1
  49. package/dist/versions.json +2 -12
  50. package/package.json +2 -1
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Stop hook: run the cheap half of CI's gate — typecheck and lint — when a
4
+ # session ends with pending changes under apps/ or design-system/.
5
+ #
6
+ # Why a hook and not only CI: these failures are cheap to fix in the session
7
+ # that caused them and expensive later. A session that touched nothing exits in
8
+ # milliseconds, which is what keeps this cheap enough to leave switched on.
9
+ #
10
+ # Deliberately not here: tests, manifest validation, the generated-files check
11
+ # and the build. They take minutes or need a database; they are CI's job. See
12
+ # CLAUDE.md for the whole gate.
13
+ #
14
+ # This reports. It never blocks and never edits, so it cannot wedge a session on
15
+ # a failure it cannot resolve. Exit is always 0. Set THROUGHLINE_SKIP_GATE=1 to
16
+ # silence it, for instance in headless sessions that run their own gate.
17
+
18
+ set -uo pipefail
19
+
20
+ [[ -z "${THROUGHLINE_SKIP_GATE:-}" ]] || exit 0
21
+
22
+ ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || exit 0
23
+ [[ -n "$ROOT" ]] || exit 0
24
+
25
+ if [[ -z "$(git -C "$ROOT" status --porcelain -- apps design-system 2>/dev/null)" ]]; then
26
+ exit 0
27
+ fi
28
+
29
+ cd "$ROOT" || exit 0
30
+
31
+ OUTPUT="$(pnpm typecheck 2>&1 && pnpm lint 2>&1)"
32
+ STATUS=$?
33
+
34
+ if [[ $STATUS -eq 0 ]]; then
35
+ MESSAGE="Gate clean: typecheck + lint. Tests, validate, check-generated and the build are CI's job — see CLAUDE.md."
36
+ else
37
+ # The failing rule or type error is at the end, and a systemMessage is read
38
+ # in a terminal, not scrolled.
39
+ MESSAGE="Gate FAILED (typecheck/lint) — CI will fail on this:
40
+
41
+ $(printf '%s' "$OUTPUT" | tail -25)"
42
+ fi
43
+
44
+ node -e 'process.stdout.write(JSON.stringify({ systemMessage: process.argv[1], suppressOutput: true }))' "$MESSAGE"
45
+ exit 0
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "GATE=\"$(git rev-parse --show-toplevel 2>/dev/null)/.claude/hooks/gate.sh\"; [ -f \"$GATE\" ] && exec bash \"$GATE\" || exit 0",
9
+ "timeout": 180,
10
+ "statusMessage": "Running the gate (typecheck + lint)…"
11
+ }
12
+ ]
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -5,8 +5,9 @@ name: CI
5
5
  # fast every pull request and every push to main. No database: every gate
6
6
  # here needs the config to parse, not to connect.
7
7
  # verify pushes to main, and on demand. A Postgres service, the migrations,
8
- # and a production build — `next build` boots Payload to collect page
9
- # data, so it needs a migrated database.
8
+ # a production build — `next build` boots Payload to collect page
9
+ # data, so it needs a migrated database — and the Playwright smoke
10
+ # pack against `next start` on that build.
10
11
  #
11
12
  # A green `fast` is what a pull request is reviewed on; `verify` is what says
12
13
  # main still builds and migrates. Add a path filter to run `verify` on pull
@@ -30,7 +31,6 @@ env:
30
31
  DATABASE_URI: postgres://ci:ci@localhost:5432/ci
31
32
  PAYLOAD_SECRET: ci-placeholder-not-a-secret-000000000000
32
33
  APPROVAL_TOKEN_SECRET: ci-placeholder-not-a-secret-000000000000
33
- FORMS_IP_HASH_SECRET: ci-placeholder-not-a-secret-000000000000
34
34
  RESEND_API_KEY: re_ci_placeholder
35
35
  EMAIL_FROM_ADDRESS: ci@example.com
36
36
  NEXT_PUBLIC_SERVER_URL: http://localhost:3000
@@ -75,6 +75,13 @@ jobs:
75
75
  - name: Validate the design-system manifest
76
76
  run: pnpm validate
77
77
 
78
+ # payload.config.ts imports the design system's built manifest, and the
79
+ # Payload commands below load the config outside turbo, which would
80
+ # otherwise have built it first. A placeholder design system has nothing
81
+ # to build.
82
+ - name: Build the design system
83
+ run: pnpm --filter ./design-system run --if-present build
84
+
78
85
  - name: Check generated Payload artifacts are current
79
86
  run: bash .github/scripts/check-generated.sh
80
87
 
@@ -121,6 +128,13 @@ jobs:
121
128
  - name: Install
122
129
  run: pnpm install --frozen-lockfile
123
130
 
131
+ # payload.config.ts imports the design system's built manifest, and the
132
+ # Payload commands below load the config outside turbo, which would
133
+ # otherwise have built it first. A placeholder design system has nothing
134
+ # to build.
135
+ - name: Build the design system
136
+ run: pnpm --filter ./design-system run --if-present build
137
+
124
138
  # A fresh database, migrated exactly as a deploy would migrate it. A
125
139
  # migration that does not apply cleanly from empty fails here rather than
126
140
  # on the first environment somebody creates.
@@ -129,3 +143,14 @@ jobs:
129
143
 
130
144
  - name: Build
131
145
  run: pnpm build
146
+
147
+ # The smoke pack (apps/web/e2e): `next start` on the build above, against
148
+ # the empty database migrated above, asserting only what answers without
149
+ # content — the front door, a 404, the admin sign-in screen, and the REST
150
+ # API refusing an anonymous read of private collections. Here and not in
151
+ # `fast`, because the server needs a database to answer at all.
152
+ - name: Install Chromium for the smoke pack
153
+ run: pnpm --dir apps/web test:smoke:install
154
+
155
+ - name: Smoke test
156
+ run: pnpm --dir apps/web test:smoke
@@ -13,3 +13,12 @@ dist/
13
13
  .vscode/
14
14
 
15
15
  coverage/
16
+
17
+ # Written by throughline-payload (@forumone/throughline): the process
18
+ # group of each in-flight Payload CLI run, so the next run can reap one whose
19
+ # runner was killed before it could clean up.
20
+ .payload-cli-pids
21
+
22
+ # Playwright: traces and screenshots from a failed smoke run
23
+ e2e/.results/
24
+ playwright-report/
@@ -15,6 +15,7 @@
15
15
  "check:tested": "tsx scripts/check-tested-packages.ts",
16
16
  "check:audit": "tsx scripts/check-audit.ts",
17
17
  "check:migrations": "pnpm --dir apps/web run check:migrations",
18
+ "payload:reap": "pnpm --dir apps/web run payload:reap",
18
19
  "format": "prettier --write ."
19
20
  },
20
21
  "devDependencies": {
@@ -25,8 +25,6 @@ after the package that caused them.
25
25
  * by the same change that makes it untrue.
26
26
  */
27
27
  const ACCEPTED: Record<string, string> = {
28
- 'apps/web':
29
- 'Freshly scaffolded: the config and routes are generated wiring. Delete this entry with your first test here — an access rule, a hook or a field validation is the place to start.',
30
28
  {{#if useReferenceDs}}{{else}} 'design-system':
31
29
  'Placeholder until the design system is written. Delete this entry with its first component.',
32
30
  {{/if}}}
@@ -14,7 +14,6 @@
14
14
  "POSTGRES_URL_NON_POOLING",
15
15
  "PAYLOAD_SECRET",
16
16
  "APPROVAL_TOKEN_SECRET",
17
- "FORMS_IP_HASH_SECRET",
18
17
  "RESEND_API_KEY",
19
18
  "EMAIL_*",
20
19
  "INNGEST_*",
@@ -34,7 +34,7 @@
34
34
  "clean": "rm -rf dist .turbo storybook-static *.tsbuildinfo"
35
35
  },
36
36
  "dependencies": {
37
- "@forumone/throughline-design-contract": "^{{version_design_contract}}",
37
+ "@forumone/throughline-design-system": "^{{version_design_system}}",
38
38
  "clsx": "^2.1.1"
39
39
  },
40
40
  "peerDependencies": {
@@ -5,7 +5,7 @@ import {
5
5
  CONTRACT_VERSION,
6
6
  ManifestSchema,
7
7
  type ComponentContract,
8
- } from '@forumone/throughline-design-contract'
8
+ } from '@forumone/throughline-design-system/contract'
9
9
  import { getTokenList } from '../src/tokens/index.ts'
10
10
 
11
11
  const __dirname = dirname(fileURLToPath(import.meta.url))
@@ -1,8 +1,8 @@
1
1
  import { readFile, stat } from 'node:fs/promises'
2
2
  import { dirname, resolve } from 'node:path'
3
3
  import { fileURLToPath } from 'node:url'
4
- import { loadManifest } from '@forumone/throughline-design-contract'
5
- import { formatLintIssues, lintManifest } from '@forumone/throughline-design-contract/lint'
4
+ import { loadManifest } from '@forumone/throughline-design-system/contract'
5
+ import { formatLintIssues, lintManifest } from '@forumone/throughline-design-system/lint'
6
6
 
7
7
  const __dirname = dirname(fileURLToPath(import.meta.url))
8
8
  const packageRoot = resolve(__dirname, '..')
@@ -36,7 +36,7 @@ async function collectStoryIds(): Promise<Set<string> | undefined> {
36
36
  Lint rules this design system treats as failures, though the shared linter
37
37
  reports them as warnings.
38
38
 
39
- `design-contract` sets both to `warning` because it serves every project, and a
39
+ The suite's linter sets both to `warning` because it serves every project, and a
40
40
  project migrating an existing design system onto the contract should not be
41
41
  blocked by prose. A design system written against the contract from the start is
42
42
  never mid-migration, so it starts strict. Relax a rule here, deliberately, if
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'CTASection',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Card',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'CardGrid',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Divider',
@@ -26,6 +26,7 @@ export const contract: ComponentContract = {
26
26
  name: 'decorative',
27
27
  type: 'boolean',
28
28
  required: false,
29
+ defaultValue: true,
29
30
  constraints: 'When true (default), the divider is aria-hidden',
30
31
  },
31
32
  ],
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'FAQ',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Hero',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'MediaBlock',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Prose',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Quote',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'SectionIntro',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Spacer',
@@ -1,4 +1,4 @@
1
- import type { ComponentContract } from '@forumone/throughline-design-contract'
1
+ import type { ComponentContract } from '@forumone/throughline-design-system/contract'
2
2
 
3
3
  export const contract: ComponentContract = {
4
4
  name: 'Stats',
@@ -21,7 +21,7 @@ export const allTokens = {
21
21
 
22
22
  export type TokenName = keyof typeof allTokens
23
23
 
24
- /** Returns every token in the shape the design-contract manifest expects. */
24
+ /** Returns every token in the shape the manifest schema (`@forumone/throughline-design-system/contract`) expects. */
25
25
  export function getTokenList() {
26
26
  const categorize = (name: string) => name.split('.')[0] ?? 'other'
27
27
  return Object.entries(allTokens).map(([name, value]) => ({
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The version of every Throughline package the scaffold depends on, keyed for
3
- * the template renderer: `@forumone/throughline-design-contract` becomes
4
- * `version_design_contract`, rendered as `"^{{version_design_contract}}"`.
3
+ * the template renderer: `@forumone/throughline-design-system` becomes
4
+ * `version_design_system`, rendered as `"^{{version_design_system}}"`.
5
5
  *
6
6
  * The ranges used to be typed into the templates by hand, and nothing moved
7
7
  * them: they sat at `^0.2.0` — which for a 0.x version admits patches only —
@@ -15,6 +15,6 @@
15
15
  * no such file and the workspace's own `package.json` files are the answer.
16
16
  */
17
17
  export declare function loadPackageVersions(templatesDir: string): Promise<Record<string, string>>;
18
- /** `{ '@forumone/throughline-core': '0.9.1', … }` from a `packages/` directory. */
18
+ /** `{ '@forumone/throughline': '1.0.0', … }` from a `packages/` directory. */
19
19
  export declare function readWorkspaceVersions(packagesDir: string): Promise<Record<string, string>>;
20
20
  //# sourceMappingURL=versions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO/F;AAED,mFAAmF;AACnF,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0BhG"}
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO/F;AAED,8EAA8E;AAC9E,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0BhG"}
@@ -2,10 +2,12 @@ import { existsSync } from 'node:fs';
2
2
  import { readFile, readdir } from 'node:fs/promises';
3
3
  import { join, resolve } from 'node:path';
4
4
  const SCOPE_PREFIX = '@forumone/throughline-';
5
+ /** The one package whose name has no suffix: `version_throughline`. */
6
+ const BARE_NAME = '@forumone/throughline';
5
7
  /**
6
8
  * The version of every Throughline package the scaffold depends on, keyed for
7
- * the template renderer: `@forumone/throughline-design-contract` becomes
8
- * `version_design_contract`, rendered as `"^{{version_design_contract}}"`.
9
+ * the template renderer: `@forumone/throughline-design-system` becomes
10
+ * `version_design_system`, rendered as `"^{{version_design_system}}"`.
9
11
  *
10
12
  * The ranges used to be typed into the templates by hand, and nothing moved
11
13
  * them: they sat at `^0.2.0` — which for a 0.x version admits patches only —
@@ -26,7 +28,7 @@ export async function loadPackageVersions(templatesDir) {
26
28
  // src/templates or dist/templates -> the package -> packages/
27
29
  return templateKeys(await readWorkspaceVersions(resolve(templatesDir, '..', '..', '..')));
28
30
  }
29
- /** `{ '@forumone/throughline-core': '0.9.1', … }` from a `packages/` directory. */
31
+ /** `{ '@forumone/throughline': '1.0.0', … }` from a `packages/` directory. */
30
32
  export async function readWorkspaceVersions(packagesDir) {
31
33
  const versions = {};
32
34
  const entries = await readdir(packagesDir, { withFileTypes: true }).catch(() => []);
@@ -37,22 +39,26 @@ export async function readWorkspaceVersions(packagesDir) {
37
39
  if (!existsSync(manifest))
38
40
  continue;
39
41
  const { name, version, private: isPrivate, } = JSON.parse(await readFile(manifest, 'utf-8'));
40
- if (!name?.startsWith(SCOPE_PREFIX) || !version || isPrivate)
42
+ if (!name || !isThroughline(name) || !version || isPrivate)
41
43
  continue;
42
44
  versions[name] = version;
43
45
  }
44
46
  if (Object.keys(versions).length === 0) {
45
47
  throw new Error(`create-throughline: no package versions found. Expected versions.json beside the ` +
46
- `templates, or @forumone/throughline-* packages in ${packagesDir}.`);
48
+ `templates, or @forumone/throughline packages in ${packagesDir}.`);
47
49
  }
48
50
  return versions;
49
51
  }
52
+ function isThroughline(name) {
53
+ return name === BARE_NAME || name.startsWith(SCOPE_PREFIX);
54
+ }
50
55
  function templateKeys(versions) {
51
56
  const keys = {};
52
57
  for (const [name, version] of Object.entries(versions)) {
53
- if (!name.startsWith(SCOPE_PREFIX))
54
- continue;
55
- keys[`version_${name.slice(SCOPE_PREFIX.length).replace(/-/g, '_')}`] = version;
58
+ if (name === BARE_NAME)
59
+ keys['version_throughline'] = version;
60
+ else if (name.startsWith(SCOPE_PREFIX))
61
+ keys[`version_${name.slice(SCOPE_PREFIX.length).replace(/-/g, '_')}`] = version;
56
62
  }
57
63
  return keys;
58
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAA;IAC1D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAA2B,CAAC,CAAA;IAC3F,CAAC;IACD,8DAA8D;IAC9D,OAAO,YAAY,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACnF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAQ;QACnC,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EAAE,SAAS,GACnB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAI/C,CAAA;QACD,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS;YAAE,SAAQ;QACtE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,mFAAmF;YACjF,qDAAqD,WAAW,GAAG,CACtE,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgC;IACpD,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAQ;QAC5C,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAA;IACjF,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAC7C,uEAAuE;AACvE,MAAM,SAAS,GAAG,uBAAuB,CAAA;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAA;IAC1D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAA2B,CAAC,CAAA;IAC3F,CAAC;IACD,8DAA8D;IAC9D,OAAO,YAAY,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACnF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAQ;QACnC,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EAAE,SAAS,GACnB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAI/C,CAAA;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS;YAAE,SAAQ;QACpE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,mFAAmF;YACjF,mDAAmD,WAAW,GAAG,CACpE,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,QAAgC;IACpD,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAA;aACxD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAA;IACnF,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,14 +1,4 @@
1
1
  {
2
- "@forumone/throughline-approvals": "0.8.8",
3
- "@forumone/throughline-audit": "0.5.4",
4
- "@forumone/throughline-components": "0.5.7",
5
- "@forumone/throughline-core": "0.9.1",
6
- "@forumone/throughline-design-contract": "0.6.0",
7
- "@forumone/throughline-email": "0.2.12",
8
- "@forumone/throughline-forms": "0.6.4",
9
- "@forumone/throughline-integrations": "0.8.5",
10
- "@forumone/throughline-plugin-contract": "0.4.1",
11
- "@forumone/throughline-publishing": "0.10.0",
12
- "@forumone/throughline-reference-ds": "0.3.6",
13
- "@forumone/throughline-workflows": "0.4.0"
2
+ "@forumone/throughline-design-system": "1.0.0-next.2",
3
+ "@forumone/throughline": "1.0.0-next.2"
14
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forumone/create-throughline",
3
- "version": "0.4.0",
3
+ "version": "1.0.0-next.2",
4
4
  "description": "Scaffolder for new Throughline projects (Payload CMS + MCP servers + Inngest workflows).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,6 +44,7 @@
44
44
  "picocolors": "^1.1.0"
45
45
  },
46
46
  "devDependencies": {
47
+ "@playwright/test": "^1.63.0",
47
48
  "@types/node": "^20.17.0",
48
49
  "eslint": "^10.11.0",
49
50
  "tsx": "^4.21.0",