@codedrifters/configulator 0.0.306 → 0.0.308
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/lib/index.d.mts +95 -1
- package/lib/index.d.ts +96 -2
- package/lib/index.js +449 -28
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +424 -7
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -273,6 +273,7 @@ __export(index_exports, {
|
|
|
273
273
|
REQUIREMENTS_WRITER_PATHS: () => REQUIREMENTS_WRITER_PATHS,
|
|
274
274
|
ROOT_CI_TASK_NAME: () => ROOT_CI_TASK_NAME,
|
|
275
275
|
ROOT_TURBO_TASK_NAME: () => ROOT_TURBO_TASK_NAME,
|
|
276
|
+
ReactViteSiteProject: () => ReactViteSiteProject,
|
|
276
277
|
ResetTask: () => ResetTask,
|
|
277
278
|
SCHEDULED_TASK_MODEL_VALUES: () => SCHEDULED_TASK_MODEL_VALUES,
|
|
278
279
|
SCOPE_CLASS_VALUES: () => SCOPE_CLASS_VALUES,
|
|
@@ -299,6 +300,8 @@ __export(index_exports, {
|
|
|
299
300
|
Vitest: () => Vitest,
|
|
300
301
|
addApproveMergeUpgradeWorkflow: () => addApproveMergeUpgradeWorkflow,
|
|
301
302
|
addBuildCompleteJob: () => addBuildCompleteJob,
|
|
303
|
+
addPlaywright: () => addPlaywright,
|
|
304
|
+
addStorybook: () => addStorybook,
|
|
302
305
|
addSyncLabelsWorkflow: () => addSyncLabelsWorkflow,
|
|
303
306
|
agendaBundle: () => agendaBundle,
|
|
304
307
|
analyzeTsDocCoverage: () => analyzeTsDocCoverage,
|
|
@@ -426,6 +429,7 @@ __export(index_exports, {
|
|
|
426
429
|
resolveOutdirFromPackageName: () => resolveOutdirFromPackageName,
|
|
427
430
|
resolveOverrideForLabels: () => resolveOverrideForLabels,
|
|
428
431
|
resolveProgressFiles: () => resolveProgressFiles,
|
|
432
|
+
resolveReactViteSiteProjectOutdir: () => resolveReactViteSiteProjectOutdir,
|
|
429
433
|
resolveRunRatio: () => resolveRunRatio,
|
|
430
434
|
resolveScheduledTasks: () => resolveScheduledTasks,
|
|
431
435
|
resolveScopeGate: () => resolveScopeGate,
|
|
@@ -18626,7 +18630,39 @@ var prReviewBundle = {
|
|
|
18626
18630
|
}
|
|
18627
18631
|
],
|
|
18628
18632
|
skills: [reviewPrSkill, reviewPrsSkill],
|
|
18629
|
-
subAgents: [prReviewerSubAgent]
|
|
18633
|
+
subAgents: [prReviewerSubAgent],
|
|
18634
|
+
labels: [
|
|
18635
|
+
{
|
|
18636
|
+
name: "type:pr-review",
|
|
18637
|
+
color: "5319E7",
|
|
18638
|
+
description: "PR review tasks"
|
|
18639
|
+
},
|
|
18640
|
+
{
|
|
18641
|
+
name: "origin:issue-worker",
|
|
18642
|
+
color: "5319E7",
|
|
18643
|
+
description: "PR opened by the issue-worker agent"
|
|
18644
|
+
},
|
|
18645
|
+
{
|
|
18646
|
+
name: "review:auto-ok",
|
|
18647
|
+
color: "0E8A16",
|
|
18648
|
+
description: "Force auto-merge regardless of policy"
|
|
18649
|
+
},
|
|
18650
|
+
{
|
|
18651
|
+
name: "review:human-required",
|
|
18652
|
+
color: "D93F0B",
|
|
18653
|
+
description: "Force human review regardless of policy"
|
|
18654
|
+
},
|
|
18655
|
+
{
|
|
18656
|
+
name: "review:awaiting-human",
|
|
18657
|
+
color: "FBCA04",
|
|
18658
|
+
description: "Reviewer handed off; awaiting human merge decision"
|
|
18659
|
+
},
|
|
18660
|
+
{
|
|
18661
|
+
name: "review:fixing",
|
|
18662
|
+
color: "D4C5F9",
|
|
18663
|
+
description: "Short-lived lease while issue-worker applies feedback fixes"
|
|
18664
|
+
}
|
|
18665
|
+
]
|
|
18630
18666
|
};
|
|
18631
18667
|
|
|
18632
18668
|
// src/agent/bundles/projen.ts
|
|
@@ -33009,8 +33045,88 @@ var JsiiFaker = class _JsiiFaker extends import_projen13.Component {
|
|
|
33009
33045
|
}
|
|
33010
33046
|
};
|
|
33011
33047
|
|
|
33048
|
+
// src/projects/add-playwright.ts
|
|
33049
|
+
var import_projen14 = require("projen");
|
|
33050
|
+
function addPlaywright(project) {
|
|
33051
|
+
project.addDevDeps("@playwright/test");
|
|
33052
|
+
project.tasks.addTask("e2e:install", {
|
|
33053
|
+
description: "Install Playwright browsers",
|
|
33054
|
+
steps: [{ exec: "npx playwright install --with-deps" }]
|
|
33055
|
+
});
|
|
33056
|
+
project.tasks.addTask("e2e", {
|
|
33057
|
+
description: "Run Playwright E2E tests (headless)",
|
|
33058
|
+
steps: [{ exec: "npx playwright test" }]
|
|
33059
|
+
});
|
|
33060
|
+
project.tasks.addTask("e2e:ui", {
|
|
33061
|
+
description: "Run Playwright in UI mode",
|
|
33062
|
+
steps: [{ exec: "npx playwright test --ui" }]
|
|
33063
|
+
});
|
|
33064
|
+
project.tasks.addTask("e2e:report", {
|
|
33065
|
+
description: "Open last HTML report",
|
|
33066
|
+
steps: [{ exec: "npx playwright show-report" }]
|
|
33067
|
+
});
|
|
33068
|
+
project.setScript("e2e:install", "npx projen e2e:install");
|
|
33069
|
+
project.setScript("e2e", "npx projen e2e");
|
|
33070
|
+
project.setScript("e2e:ui", "npx projen e2e:ui");
|
|
33071
|
+
project.setScript("e2e:report", "npx projen e2e:report");
|
|
33072
|
+
new import_projen14.SampleFile(project, "playwright.config.ts", {
|
|
33073
|
+
contents: `import { defineConfig, devices } from '@playwright/test';
|
|
33074
|
+
|
|
33075
|
+
export default defineConfig({
|
|
33076
|
+
testDir: './tests',
|
|
33077
|
+
reporter: [['html', { open: 'never' }]],
|
|
33078
|
+
use: {
|
|
33079
|
+
baseURL: process.env.PLAYWRIGHT_BASE_URL || 'http://localhost:5173',
|
|
33080
|
+
trace: 'on-first-retry',
|
|
33081
|
+
},
|
|
33082
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
33083
|
+
});
|
|
33084
|
+
`
|
|
33085
|
+
});
|
|
33086
|
+
project.gitignore.addPatterns("test-results/", "playwright-report/");
|
|
33087
|
+
}
|
|
33088
|
+
|
|
33089
|
+
// src/projects/add-storybook.ts
|
|
33090
|
+
var import_projen15 = require("projen");
|
|
33091
|
+
function addStorybook(project, options = {}) {
|
|
33092
|
+
const withDocs = options.withDocs ?? true;
|
|
33093
|
+
project.addDevDeps(
|
|
33094
|
+
"storybook",
|
|
33095
|
+
"@storybook/react@^9",
|
|
33096
|
+
"@storybook/react-vite@^9",
|
|
33097
|
+
...withDocs ? ["@storybook/addon-docs@^9"] : []
|
|
33098
|
+
);
|
|
33099
|
+
project.tasks.addTask("storybook", {
|
|
33100
|
+
description: "Run Storybook (Vite)",
|
|
33101
|
+
steps: [{ exec: "storybook dev -p 6006" }]
|
|
33102
|
+
});
|
|
33103
|
+
project.tasks.addTask("build-storybook", {
|
|
33104
|
+
description: "Build static Storybook",
|
|
33105
|
+
steps: [{ exec: "storybook build" }]
|
|
33106
|
+
});
|
|
33107
|
+
project.setScript("storybook", "npx projen storybook");
|
|
33108
|
+
project.setScript("build-storybook", "npx projen build-storybook");
|
|
33109
|
+
new import_projen15.SampleFile(project, ".storybook/main.ts", {
|
|
33110
|
+
contents: `import type { StorybookConfig } from '@storybook/react-vite';
|
|
33111
|
+
|
|
33112
|
+
const config: StorybookConfig = {
|
|
33113
|
+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
|
|
33114
|
+
addons: [${withDocs ? `'@storybook/addon-docs'` : ""}],
|
|
33115
|
+
framework: { name: '@storybook/react-vite', options: {} },
|
|
33116
|
+
};
|
|
33117
|
+
export default config;
|
|
33118
|
+
`
|
|
33119
|
+
});
|
|
33120
|
+
new import_projen15.SampleFile(project, ".storybook/preview.ts", {
|
|
33121
|
+
contents: `import '../src/index.css';
|
|
33122
|
+
const preview = { parameters: { controls: { expanded: true } } };
|
|
33123
|
+
export default preview;
|
|
33124
|
+
`
|
|
33125
|
+
});
|
|
33126
|
+
}
|
|
33127
|
+
|
|
33012
33128
|
// src/projects/astro-project.ts
|
|
33013
|
-
var
|
|
33129
|
+
var import_projen21 = require("projen");
|
|
33014
33130
|
var import_ts_deepmerge3 = require("ts-deepmerge");
|
|
33015
33131
|
|
|
33016
33132
|
// src/projects/monorepo-layout.ts
|
|
@@ -33029,6 +33145,7 @@ var LAYOUT_ROOT_BY_PROJECT_TYPE = {
|
|
|
33029
33145
|
TypeScriptProject: MONOREPO_LAYOUT.PACKAGES,
|
|
33030
33146
|
AwsCdkProject: MONOREPO_LAYOUT.APPS,
|
|
33031
33147
|
AstroProject: MONOREPO_LAYOUT.SITES,
|
|
33148
|
+
ReactViteSiteProject: MONOREPO_LAYOUT.SITES,
|
|
33032
33149
|
StarlightProject: MONOREPO_LAYOUT.DOCS
|
|
33033
33150
|
};
|
|
33034
33151
|
function validateMonorepoLayout(root) {
|
|
@@ -33152,9 +33269,12 @@ function resolveAwsCdkProjectOutdir(packageName) {
|
|
|
33152
33269
|
function resolveAstroProjectOutdir(packageName) {
|
|
33153
33270
|
return resolveOutdirFromPackageName(packageName, MONOREPO_LAYOUT.SITES);
|
|
33154
33271
|
}
|
|
33272
|
+
function resolveReactViteSiteProjectOutdir(packageName) {
|
|
33273
|
+
return resolveOutdirFromPackageName(packageName, MONOREPO_LAYOUT.SITES);
|
|
33274
|
+
}
|
|
33155
33275
|
|
|
33156
33276
|
// src/projects/typescript-project.ts
|
|
33157
|
-
var
|
|
33277
|
+
var import_projen20 = require("projen");
|
|
33158
33278
|
var import_javascript4 = require("projen/lib/javascript");
|
|
33159
33279
|
var import_release = require("projen/lib/release");
|
|
33160
33280
|
var import_ts_deepmerge2 = require("ts-deepmerge");
|
|
@@ -33166,9 +33286,9 @@ var import_typescript3 = require("projen/lib/typescript");
|
|
|
33166
33286
|
var import_ts_deepmerge = require("ts-deepmerge");
|
|
33167
33287
|
|
|
33168
33288
|
// src/projects/nvmrc.ts
|
|
33169
|
-
var
|
|
33289
|
+
var import_projen16 = require("projen");
|
|
33170
33290
|
var import_textfile5 = require("projen/lib/textfile");
|
|
33171
|
-
var Nvmrc = class extends
|
|
33291
|
+
var Nvmrc = class extends import_projen16.Component {
|
|
33172
33292
|
constructor(project) {
|
|
33173
33293
|
super(project);
|
|
33174
33294
|
new import_textfile5.TextFile(project, ".nvmrc", {
|
|
@@ -33181,8 +33301,8 @@ var Nvmrc = class extends import_projen14.Component {
|
|
|
33181
33301
|
};
|
|
33182
33302
|
|
|
33183
33303
|
// src/tasks/reset-task.ts
|
|
33184
|
-
var
|
|
33185
|
-
var ResetTask = class _ResetTask extends
|
|
33304
|
+
var import_projen17 = require("projen");
|
|
33305
|
+
var ResetTask = class _ResetTask extends import_projen17.Component {
|
|
33186
33306
|
constructor(project, options = {}) {
|
|
33187
33307
|
super(project);
|
|
33188
33308
|
this.project = project;
|
|
@@ -33255,12 +33375,12 @@ var ResetTask = class _ResetTask extends import_projen15.Component {
|
|
|
33255
33375
|
};
|
|
33256
33376
|
|
|
33257
33377
|
// src/vscode/vscode.ts
|
|
33258
|
-
var
|
|
33259
|
-
var VSCodeConfig = class extends
|
|
33378
|
+
var import_projen18 = require("projen");
|
|
33379
|
+
var VSCodeConfig = class extends import_projen18.Component {
|
|
33260
33380
|
constructor(project) {
|
|
33261
33381
|
super(project);
|
|
33262
|
-
const vsConfig = new
|
|
33263
|
-
const vsSettings = new
|
|
33382
|
+
const vsConfig = new import_projen18.vscode.VsCode(project);
|
|
33383
|
+
const vsSettings = new import_projen18.vscode.VsCodeSettings(vsConfig);
|
|
33264
33384
|
vsSettings.addSetting("editor.tabSize", 2);
|
|
33265
33385
|
vsSettings.addSetting("editor.detectIndentation", false);
|
|
33266
33386
|
vsSettings.addSetting("editor.bracketPairColorization.enabled", true);
|
|
@@ -33540,7 +33660,7 @@ function patchStepArray2(steps, pinned) {
|
|
|
33540
33660
|
}
|
|
33541
33661
|
|
|
33542
33662
|
// src/workflows/sync-labels.ts
|
|
33543
|
-
var
|
|
33663
|
+
var import_projen19 = require("projen");
|
|
33544
33664
|
var import_workflows_model4 = require("projen/lib/github/workflows-model");
|
|
33545
33665
|
var DEFAULT_STATUS_LABELS = [
|
|
33546
33666
|
{
|
|
@@ -33748,10 +33868,10 @@ ${offenders}`
|
|
|
33748
33868
|
}
|
|
33749
33869
|
});
|
|
33750
33870
|
}
|
|
33751
|
-
var LabelsFile = class extends
|
|
33871
|
+
var LabelsFile = class extends import_projen19.Component {
|
|
33752
33872
|
constructor(project, labels) {
|
|
33753
33873
|
super(project);
|
|
33754
|
-
new
|
|
33874
|
+
new import_projen19.YamlFile(project, LABELS_CONFIG_PATH, {
|
|
33755
33875
|
obj: labels.map((l) => ({
|
|
33756
33876
|
name: l.name,
|
|
33757
33877
|
color: l.color,
|
|
@@ -34144,7 +34264,7 @@ var TestRunner = {
|
|
|
34144
34264
|
JEST: "jest",
|
|
34145
34265
|
VITEST: "vitest"
|
|
34146
34266
|
};
|
|
34147
|
-
var TypeScriptProject = class extends
|
|
34267
|
+
var TypeScriptProject = class extends import_projen20.typescript.TypeScriptProject {
|
|
34148
34268
|
constructor(userOptions) {
|
|
34149
34269
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
34150
34270
|
throw new Error(
|
|
@@ -34454,10 +34574,10 @@ var AstroProject = class extends TypeScriptProject {
|
|
|
34454
34574
|
adapter: options.adapter
|
|
34455
34575
|
});
|
|
34456
34576
|
if (options.sampleCode === true) {
|
|
34457
|
-
new
|
|
34577
|
+
new import_projen21.SampleFile(this, "src/pages/index.astro", {
|
|
34458
34578
|
contents: DEFAULT_INDEX_ASTRO
|
|
34459
34579
|
});
|
|
34460
|
-
new
|
|
34580
|
+
new import_projen21.SampleFile(this, "public/favicon.svg", {
|
|
34461
34581
|
contents: DEFAULT_FAVICON_SVG
|
|
34462
34582
|
});
|
|
34463
34583
|
}
|
|
@@ -34482,19 +34602,19 @@ var DEFAULT_FAVICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
|
34482
34602
|
`;
|
|
34483
34603
|
|
|
34484
34604
|
// src/projects/aws-cdk-project.ts
|
|
34485
|
-
var
|
|
34605
|
+
var import_projen24 = require("projen");
|
|
34486
34606
|
var import_javascript5 = require("projen/lib/javascript");
|
|
34487
34607
|
var import_release2 = require("projen/lib/release");
|
|
34488
34608
|
var import_ts_deepmerge4 = require("ts-deepmerge");
|
|
34489
34609
|
|
|
34490
34610
|
// src/workflows/aws-deploy-workflow.ts
|
|
34491
34611
|
var import_utils11 = __toESM(require_lib());
|
|
34492
|
-
var
|
|
34612
|
+
var import_projen22 = require("projen");
|
|
34493
34613
|
var import_build = require("projen/lib/build");
|
|
34494
34614
|
var import_github5 = require("projen/lib/github");
|
|
34495
34615
|
var import_workflows_model5 = require("projen/lib/github/workflows-model");
|
|
34496
34616
|
var PROD_DEPLOY_NAME = "prod-deploy";
|
|
34497
|
-
var AwsDeployWorkflow = class _AwsDeployWorkflow extends
|
|
34617
|
+
var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen22.Component {
|
|
34498
34618
|
constructor(project, options = {}) {
|
|
34499
34619
|
super(project);
|
|
34500
34620
|
this.project = project;
|
|
@@ -34758,7 +34878,7 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen20.Compone
|
|
|
34758
34878
|
};
|
|
34759
34879
|
|
|
34760
34880
|
// src/workflows/aws-teardown-workflow.ts
|
|
34761
|
-
var
|
|
34881
|
+
var import_projen23 = require("projen");
|
|
34762
34882
|
var import_github6 = require("projen/lib/github");
|
|
34763
34883
|
var import_workflows_model6 = require("projen/lib/github/workflows-model");
|
|
34764
34884
|
var DEFAULT_TEARDOWN_BRANCH_PATTERNS = [
|
|
@@ -34780,7 +34900,7 @@ var resolveBranchPatterns = (explicit, targets) => {
|
|
|
34780
34900
|
}
|
|
34781
34901
|
return [...DEFAULT_TEARDOWN_BRANCH_PATTERNS];
|
|
34782
34902
|
};
|
|
34783
|
-
var AwsTeardownWorkflow = class extends
|
|
34903
|
+
var AwsTeardownWorkflow = class extends import_projen23.Component {
|
|
34784
34904
|
constructor(rootProject, options) {
|
|
34785
34905
|
super(rootProject);
|
|
34786
34906
|
this.rootProject = rootProject;
|
|
@@ -34962,7 +35082,7 @@ var AwsTeardownWorkflow = class extends import_projen21.Component {
|
|
|
34962
35082
|
};
|
|
34963
35083
|
|
|
34964
35084
|
// src/projects/aws-cdk-project.ts
|
|
34965
|
-
var AwsCdkProject = class extends
|
|
35085
|
+
var AwsCdkProject = class extends import_projen24.awscdk.AwsCdkTypeScriptApp {
|
|
34966
35086
|
constructor(userOptions) {
|
|
34967
35087
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
34968
35088
|
throw new Error(
|
|
@@ -35158,8 +35278,305 @@ var AwsCdkProject = class extends import_projen22.awscdk.AwsCdkTypeScriptApp {
|
|
|
35158
35278
|
}
|
|
35159
35279
|
};
|
|
35160
35280
|
|
|
35281
|
+
// src/projects/react-vite-site-project.ts
|
|
35282
|
+
var import_projen25 = require("projen");
|
|
35283
|
+
var import_ts_deepmerge5 = require("ts-deepmerge");
|
|
35284
|
+
var ReactViteSiteProject = class extends TypeScriptProject {
|
|
35285
|
+
constructor(userOptions) {
|
|
35286
|
+
const resolvedOutdir = userOptions.outdir ?? resolveReactViteSiteProjectOutdir(
|
|
35287
|
+
userOptions.packageName ?? userOptions.name
|
|
35288
|
+
);
|
|
35289
|
+
const defaultOptions = {
|
|
35290
|
+
testRunner: TestRunner.VITEST,
|
|
35291
|
+
apiExtractor: false,
|
|
35292
|
+
// ESLint inherited from TypeScriptProject lints `src` by default;
|
|
35293
|
+
// skip projen's `.projenrc.ts` lint pass since downstream sites
|
|
35294
|
+
// configure projen through their own root project.
|
|
35295
|
+
eslintOptions: {
|
|
35296
|
+
dirs: ["src"],
|
|
35297
|
+
lintProjenRc: false
|
|
35298
|
+
},
|
|
35299
|
+
// VSCode workspace defaults (Prettier formatter, ESLint on save)
|
|
35300
|
+
// need a project-level `.vscode/` folder. The inherited
|
|
35301
|
+
// TypeScriptProject does not enable it on sub-projects by
|
|
35302
|
+
// default; flip it on so the React-site VSCode wiring below
|
|
35303
|
+
// actually renders.
|
|
35304
|
+
vscode: true,
|
|
35305
|
+
tsconfig: {
|
|
35306
|
+
compilerOptions: {
|
|
35307
|
+
declaration: false
|
|
35308
|
+
}
|
|
35309
|
+
}
|
|
35310
|
+
};
|
|
35311
|
+
const merged = (0, import_ts_deepmerge5.merge)(
|
|
35312
|
+
defaultOptions,
|
|
35313
|
+
userOptions
|
|
35314
|
+
);
|
|
35315
|
+
const options = {
|
|
35316
|
+
...merged,
|
|
35317
|
+
outdir: resolvedOutdir
|
|
35318
|
+
};
|
|
35319
|
+
super(options);
|
|
35320
|
+
this.package.addField("type", "module");
|
|
35321
|
+
new import_projen25.TextFile(this, ".nvmrc", { lines: ["v24.11.0"] });
|
|
35322
|
+
this.tsconfig?.file.addOverride("compilerOptions.target", "ES2020");
|
|
35323
|
+
this.tsconfig?.file.addOverride("compilerOptions.lib", [
|
|
35324
|
+
"ES2020",
|
|
35325
|
+
"DOM",
|
|
35326
|
+
"DOM.Iterable"
|
|
35327
|
+
]);
|
|
35328
|
+
this.tsconfig?.file.addOverride("compilerOptions.module", "ESNext");
|
|
35329
|
+
this.tsconfig?.file.addOverride(
|
|
35330
|
+
"compilerOptions.moduleResolution",
|
|
35331
|
+
"bundler"
|
|
35332
|
+
);
|
|
35333
|
+
this.tsconfig?.file.addOverride("compilerOptions.jsx", "react-jsxdev");
|
|
35334
|
+
this.tsconfig?.file.addOverride("compilerOptions.noEmit", true);
|
|
35335
|
+
this.tsconfig?.file.addOverride("compilerOptions.skipLibCheck", true);
|
|
35336
|
+
this.tsconfig?.file.addOverride("compilerOptions.strict", true);
|
|
35337
|
+
this.tsconfig?.file.addOverride("compilerOptions.resolveJsonModule", true);
|
|
35338
|
+
this.tsconfig?.file.addOverride("compilerOptions.declaration", false);
|
|
35339
|
+
this.tsconfig?.file.addOverride("compilerOptions.paths", {
|
|
35340
|
+
"@/*": ["./src/*"]
|
|
35341
|
+
});
|
|
35342
|
+
this.tsconfig?.file.addOverride("include", ["src"]);
|
|
35343
|
+
this.tsconfigDev?.file.addOverride("compilerOptions.types", [
|
|
35344
|
+
"vitest/globals",
|
|
35345
|
+
"vite/client"
|
|
35346
|
+
]);
|
|
35347
|
+
this.tsconfigDev?.file.addOverride("include", [
|
|
35348
|
+
"src",
|
|
35349
|
+
"tests",
|
|
35350
|
+
"**/*.test.ts",
|
|
35351
|
+
"**/*.test.tsx",
|
|
35352
|
+
"**/*.spec.ts",
|
|
35353
|
+
"**/*.spec.tsx",
|
|
35354
|
+
"vitest.config.ts"
|
|
35355
|
+
]);
|
|
35356
|
+
this.tsconfigDev?.file.addOverride("exclude", [
|
|
35357
|
+
"node_modules",
|
|
35358
|
+
"dist",
|
|
35359
|
+
"build",
|
|
35360
|
+
".turbo"
|
|
35361
|
+
]);
|
|
35362
|
+
new import_projen25.SampleFile(this, "vite.config.ts", {
|
|
35363
|
+
contents: `import { defineConfig } from 'vite';
|
|
35364
|
+
import react from '@vitejs/plugin-react';
|
|
35365
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
35366
|
+
import path from 'path';
|
|
35367
|
+
|
|
35368
|
+
export default defineConfig({
|
|
35369
|
+
plugins: [tailwindcss(), react()],
|
|
35370
|
+
resolve: { alias: { '@': path.resolve(__dirname, 'src') } },
|
|
35371
|
+
});
|
|
35372
|
+
`
|
|
35373
|
+
});
|
|
35374
|
+
if (options.testRunner !== TestRunner.JEST) {
|
|
35375
|
+
this.tryRemoveFile("vitest.config.ts");
|
|
35376
|
+
new import_projen25.SampleFile(this, "vitest.config.ts", {
|
|
35377
|
+
contents: `import { defineConfig, mergeConfig } from 'vitest/config';
|
|
35378
|
+
import react from '@vitejs/plugin-react';
|
|
35379
|
+
import viteConfig from './vite.config';
|
|
35380
|
+
|
|
35381
|
+
export default mergeConfig(
|
|
35382
|
+
viteConfig,
|
|
35383
|
+
defineConfig({
|
|
35384
|
+
plugins: [react()],
|
|
35385
|
+
test: {
|
|
35386
|
+
environment: 'jsdom',
|
|
35387
|
+
globals: true,
|
|
35388
|
+
setupFiles: ['./src/setupTests.ts'],
|
|
35389
|
+
passWithNoTests: true,
|
|
35390
|
+
},
|
|
35391
|
+
})
|
|
35392
|
+
);
|
|
35393
|
+
`
|
|
35394
|
+
});
|
|
35395
|
+
}
|
|
35396
|
+
this.compileTask.reset();
|
|
35397
|
+
this.compileTask.exec("vite build");
|
|
35398
|
+
this.packageTask.reset();
|
|
35399
|
+
this.tasks.tryFind("watch")?.reset("vite");
|
|
35400
|
+
if (!this.tasks.tryFind("dev")) {
|
|
35401
|
+
this.addTask("dev", {
|
|
35402
|
+
description: "Start the Vite dev server",
|
|
35403
|
+
exec: "vite",
|
|
35404
|
+
receiveArgs: true
|
|
35405
|
+
});
|
|
35406
|
+
}
|
|
35407
|
+
if (!this.tasks.tryFind("preview")) {
|
|
35408
|
+
this.addTask("preview", {
|
|
35409
|
+
description: "Preview the built site locally",
|
|
35410
|
+
exec: "vite preview",
|
|
35411
|
+
receiveArgs: true
|
|
35412
|
+
});
|
|
35413
|
+
}
|
|
35414
|
+
this.addDeps("react", "react-dom", "react-router-dom");
|
|
35415
|
+
this.addDevDeps(
|
|
35416
|
+
"vite",
|
|
35417
|
+
"@vitejs/plugin-react",
|
|
35418
|
+
"@tailwindcss/vite",
|
|
35419
|
+
"tailwindcss",
|
|
35420
|
+
"jsdom",
|
|
35421
|
+
"@testing-library/react",
|
|
35422
|
+
"@testing-library/jest-dom",
|
|
35423
|
+
"@testing-library/user-event",
|
|
35424
|
+
"@types/react",
|
|
35425
|
+
"@types/react-dom",
|
|
35426
|
+
"eslint-plugin-react",
|
|
35427
|
+
"eslint-plugin-react-hooks"
|
|
35428
|
+
);
|
|
35429
|
+
this.eslint?.addExtends("plugin:react/recommended");
|
|
35430
|
+
this.eslint?.addExtends("plugin:react/jsx-runtime");
|
|
35431
|
+
this.eslint?.addExtends("plugin:react-hooks/recommended");
|
|
35432
|
+
this.eslint?.addOverride({
|
|
35433
|
+
files: ["**/*.{tsx,jsx}"],
|
|
35434
|
+
// Projen's ESLint override type does not include `settings`, but
|
|
35435
|
+
// `settings` is a valid ESLint override key. Cast to `any` so the
|
|
35436
|
+
// generated `.eslintrc.json` carries the React-version detection
|
|
35437
|
+
// settings on the JSX glob.
|
|
35438
|
+
settings: {
|
|
35439
|
+
react: {
|
|
35440
|
+
version: "detect"
|
|
35441
|
+
}
|
|
35442
|
+
}
|
|
35443
|
+
});
|
|
35444
|
+
this.eslint?.addRules({
|
|
35445
|
+
// We use TypeScript; prop-types are unnecessary.
|
|
35446
|
+
"react/prop-types": "off",
|
|
35447
|
+
// New JSX transform — React no longer needs to be in scope.
|
|
35448
|
+
"react/react-in-jsx-scope": "off"
|
|
35449
|
+
});
|
|
35450
|
+
this.eslint?.addOverride({
|
|
35451
|
+
files: [
|
|
35452
|
+
"**/*.{test,spec}.ts",
|
|
35453
|
+
"**/*.{test,spec}.tsx",
|
|
35454
|
+
"**/__tests__/**",
|
|
35455
|
+
"src/setupTests.ts"
|
|
35456
|
+
],
|
|
35457
|
+
rules: {
|
|
35458
|
+
"import/no-extraneous-dependencies": [
|
|
35459
|
+
"error",
|
|
35460
|
+
{ devDependencies: true }
|
|
35461
|
+
]
|
|
35462
|
+
}
|
|
35463
|
+
});
|
|
35464
|
+
this.vscode?.settings.addSettings({
|
|
35465
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
35466
|
+
"editor.formatOnSave": true,
|
|
35467
|
+
// Prettier must format the whole file; "modifications" mode is
|
|
35468
|
+
// known to mis-merge ranges with Prettier and can corrupt saves.
|
|
35469
|
+
"editor.formatOnSaveMode": "file",
|
|
35470
|
+
"prettier.requireConfig": true,
|
|
35471
|
+
"eslint.useFlatConfig": false,
|
|
35472
|
+
"eslint.workingDirectories": [{ directory: ".", changeProcessCWD: true }],
|
|
35473
|
+
// Prettier is the default formatter; ESLint's fixAll must not
|
|
35474
|
+
// re-apply prettier/prettier (would double-format).
|
|
35475
|
+
"eslint.codeActionsOnSave.rules": ["!prettier/prettier", "*"],
|
|
35476
|
+
"eslint.format.enable": false,
|
|
35477
|
+
"[typescript]": {
|
|
35478
|
+
"editor.codeActionsOnSave": {
|
|
35479
|
+
"source.fixAll.eslint": "always",
|
|
35480
|
+
"source.organizeImports": "always"
|
|
35481
|
+
}
|
|
35482
|
+
},
|
|
35483
|
+
"[typescriptreact]": {
|
|
35484
|
+
"editor.codeActionsOnSave": {
|
|
35485
|
+
"source.fixAll.eslint": "always",
|
|
35486
|
+
"source.organizeImports": "always"
|
|
35487
|
+
}
|
|
35488
|
+
},
|
|
35489
|
+
"[javascript]": {
|
|
35490
|
+
"editor.codeActionsOnSave": {
|
|
35491
|
+
"source.fixAll.eslint": "always"
|
|
35492
|
+
}
|
|
35493
|
+
},
|
|
35494
|
+
"[javascriptreact]": {
|
|
35495
|
+
"editor.codeActionsOnSave": {
|
|
35496
|
+
"source.fixAll.eslint": "always"
|
|
35497
|
+
}
|
|
35498
|
+
},
|
|
35499
|
+
"eslint.validate": [
|
|
35500
|
+
"javascript",
|
|
35501
|
+
"javascriptreact",
|
|
35502
|
+
"typescript",
|
|
35503
|
+
"typescriptreact"
|
|
35504
|
+
]
|
|
35505
|
+
});
|
|
35506
|
+
this.vscode?.extensions.addRecommendations("dbaeumer.vscode-eslint");
|
|
35507
|
+
this.vscode?.extensions.addRecommendations("esbenp.prettier-vscode");
|
|
35508
|
+
const turbo = TurboRepo.of(this);
|
|
35509
|
+
if (turbo?.compileTask) {
|
|
35510
|
+
turbo.compileTask.inputs.push(
|
|
35511
|
+
"public/**",
|
|
35512
|
+
"index.html",
|
|
35513
|
+
"vite.config.ts"
|
|
35514
|
+
);
|
|
35515
|
+
}
|
|
35516
|
+
if (userOptions.sampleCode === true) {
|
|
35517
|
+
const siteName = options.name;
|
|
35518
|
+
new import_projen25.SampleFile(this, "index.html", {
|
|
35519
|
+
contents: `<!doctype html>
|
|
35520
|
+
<html>
|
|
35521
|
+
<head>
|
|
35522
|
+
<meta charset="utf-8"/>
|
|
35523
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
35524
|
+
<title>${siteName}</title>
|
|
35525
|
+
</head>
|
|
35526
|
+
<body>
|
|
35527
|
+
<div id="root"></div>
|
|
35528
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
35529
|
+
</body>
|
|
35530
|
+
</html>
|
|
35531
|
+
`
|
|
35532
|
+
});
|
|
35533
|
+
new import_projen25.SampleFile(this, "src/routes.tsx", {
|
|
35534
|
+
contents: `import { createBrowserRouter } from 'react-router-dom';
|
|
35535
|
+
import App from './App';
|
|
35536
|
+
|
|
35537
|
+
export const router = createBrowserRouter([
|
|
35538
|
+
{ path: '/', element: <App /> },
|
|
35539
|
+
]);
|
|
35540
|
+
`
|
|
35541
|
+
});
|
|
35542
|
+
new import_projen25.SampleFile(this, "src/main.tsx", {
|
|
35543
|
+
contents: `import React from 'react';
|
|
35544
|
+
import ReactDOM from 'react-dom/client';
|
|
35545
|
+
import { RouterProvider } from 'react-router-dom';
|
|
35546
|
+
import { router } from './routes';
|
|
35547
|
+
import './index.css';
|
|
35548
|
+
|
|
35549
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
35550
|
+
<React.StrictMode>
|
|
35551
|
+
<RouterProvider router={router} />
|
|
35552
|
+
</React.StrictMode>
|
|
35553
|
+
);
|
|
35554
|
+
`
|
|
35555
|
+
});
|
|
35556
|
+
new import_projen25.SampleFile(this, "src/App.tsx", {
|
|
35557
|
+
contents: `export default function App() {
|
|
35558
|
+
return (
|
|
35559
|
+
<main className="p-4">
|
|
35560
|
+
<h1 className="text-2xl font-bold">Hello from ${siteName}</h1>
|
|
35561
|
+
</main>
|
|
35562
|
+
);
|
|
35563
|
+
}
|
|
35564
|
+
`
|
|
35565
|
+
});
|
|
35566
|
+
new import_projen25.SampleFile(this, "src/index.css", {
|
|
35567
|
+
contents: `@import "tailwindcss";
|
|
35568
|
+
`
|
|
35569
|
+
});
|
|
35570
|
+
new import_projen25.SampleFile(this, "src/setupTests.ts", {
|
|
35571
|
+
contents: `import '@testing-library/jest-dom';
|
|
35572
|
+
`
|
|
35573
|
+
});
|
|
35574
|
+
}
|
|
35575
|
+
}
|
|
35576
|
+
};
|
|
35577
|
+
|
|
35161
35578
|
// src/projects/starlight-project.ts
|
|
35162
|
-
var
|
|
35579
|
+
var import_projen26 = require("projen");
|
|
35163
35580
|
var STARLIGHT_ROLE = {
|
|
35164
35581
|
DOCS: "docs",
|
|
35165
35582
|
SITE: "site"
|
|
@@ -35201,10 +35618,10 @@ var StarlightProject = class extends AstroProject {
|
|
|
35201
35618
|
turbo.compileTask.inputs.push("src/content/**");
|
|
35202
35619
|
}
|
|
35203
35620
|
if (userOptions.sampleContent === true) {
|
|
35204
|
-
new
|
|
35621
|
+
new import_projen26.SampleFile(this, "src/content/docs/index.mdx", {
|
|
35205
35622
|
contents: DEFAULT_INDEX_MDX
|
|
35206
35623
|
});
|
|
35207
|
-
new
|
|
35624
|
+
new import_projen26.SampleFile(this, "src/content.config.ts", {
|
|
35208
35625
|
contents: DEFAULT_CONTENT_CONFIG_TS
|
|
35209
35626
|
});
|
|
35210
35627
|
}
|
|
@@ -35254,9 +35671,9 @@ export const collections = {
|
|
|
35254
35671
|
|
|
35255
35672
|
// src/typescript/typescript-config.ts
|
|
35256
35673
|
var import_node_path2 = require("path");
|
|
35257
|
-
var
|
|
35674
|
+
var import_projen27 = require("projen");
|
|
35258
35675
|
var import_path2 = require("projen/lib/util/path");
|
|
35259
|
-
var TypeScriptConfig = class extends
|
|
35676
|
+
var TypeScriptConfig = class extends import_projen27.Component {
|
|
35260
35677
|
constructor(project) {
|
|
35261
35678
|
super(project);
|
|
35262
35679
|
let tsPaths = {};
|
|
@@ -35381,6 +35798,7 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35381
35798
|
REQUIREMENTS_WRITER_PATHS,
|
|
35382
35799
|
ROOT_CI_TASK_NAME,
|
|
35383
35800
|
ROOT_TURBO_TASK_NAME,
|
|
35801
|
+
ReactViteSiteProject,
|
|
35384
35802
|
ResetTask,
|
|
35385
35803
|
SCHEDULED_TASK_MODEL_VALUES,
|
|
35386
35804
|
SCOPE_CLASS_VALUES,
|
|
@@ -35407,6 +35825,8 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35407
35825
|
Vitest,
|
|
35408
35826
|
addApproveMergeUpgradeWorkflow,
|
|
35409
35827
|
addBuildCompleteJob,
|
|
35828
|
+
addPlaywright,
|
|
35829
|
+
addStorybook,
|
|
35410
35830
|
addSyncLabelsWorkflow,
|
|
35411
35831
|
agendaBundle,
|
|
35412
35832
|
analyzeTsDocCoverage,
|
|
@@ -35534,6 +35954,7 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35534
35954
|
resolveOutdirFromPackageName,
|
|
35535
35955
|
resolveOverrideForLabels,
|
|
35536
35956
|
resolveProgressFiles,
|
|
35957
|
+
resolveReactViteSiteProjectOutdir,
|
|
35537
35958
|
resolveRunRatio,
|
|
35538
35959
|
resolveScheduledTasks,
|
|
35539
35960
|
resolveScopeGate,
|