@codedrifters/configulator 0.0.305 → 0.0.307
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 +96 -2
- package/lib/index.d.ts +97 -3
- package/lib/index.js +417 -28
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +392 -7
- package/lib/index.mjs.map +1 -1
- package/package.json +2 -2
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,
|
|
@@ -28277,7 +28281,7 @@ var VERSION = {
|
|
|
28277
28281
|
/**
|
|
28278
28282
|
* Version of PNPM to use in workflows at github actions.
|
|
28279
28283
|
*/
|
|
28280
|
-
PNPM_VERSION: "11.1.
|
|
28284
|
+
PNPM_VERSION: "11.1.1",
|
|
28281
28285
|
/**
|
|
28282
28286
|
* Version of Projen to use.
|
|
28283
28287
|
*/
|
|
@@ -33009,8 +33013,88 @@ var JsiiFaker = class _JsiiFaker extends import_projen13.Component {
|
|
|
33009
33013
|
}
|
|
33010
33014
|
};
|
|
33011
33015
|
|
|
33016
|
+
// src/projects/add-playwright.ts
|
|
33017
|
+
var import_projen14 = require("projen");
|
|
33018
|
+
function addPlaywright(project) {
|
|
33019
|
+
project.addDevDeps("@playwright/test");
|
|
33020
|
+
project.tasks.addTask("e2e:install", {
|
|
33021
|
+
description: "Install Playwright browsers",
|
|
33022
|
+
steps: [{ exec: "npx playwright install --with-deps" }]
|
|
33023
|
+
});
|
|
33024
|
+
project.tasks.addTask("e2e", {
|
|
33025
|
+
description: "Run Playwright E2E tests (headless)",
|
|
33026
|
+
steps: [{ exec: "npx playwright test" }]
|
|
33027
|
+
});
|
|
33028
|
+
project.tasks.addTask("e2e:ui", {
|
|
33029
|
+
description: "Run Playwright in UI mode",
|
|
33030
|
+
steps: [{ exec: "npx playwright test --ui" }]
|
|
33031
|
+
});
|
|
33032
|
+
project.tasks.addTask("e2e:report", {
|
|
33033
|
+
description: "Open last HTML report",
|
|
33034
|
+
steps: [{ exec: "npx playwright show-report" }]
|
|
33035
|
+
});
|
|
33036
|
+
project.setScript("e2e:install", "npx projen e2e:install");
|
|
33037
|
+
project.setScript("e2e", "npx projen e2e");
|
|
33038
|
+
project.setScript("e2e:ui", "npx projen e2e:ui");
|
|
33039
|
+
project.setScript("e2e:report", "npx projen e2e:report");
|
|
33040
|
+
new import_projen14.SampleFile(project, "playwright.config.ts", {
|
|
33041
|
+
contents: `import { defineConfig, devices } from '@playwright/test';
|
|
33042
|
+
|
|
33043
|
+
export default defineConfig({
|
|
33044
|
+
testDir: './tests',
|
|
33045
|
+
reporter: [['html', { open: 'never' }]],
|
|
33046
|
+
use: {
|
|
33047
|
+
baseURL: process.env.PLAYWRIGHT_BASE_URL || 'http://localhost:5173',
|
|
33048
|
+
trace: 'on-first-retry',
|
|
33049
|
+
},
|
|
33050
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
33051
|
+
});
|
|
33052
|
+
`
|
|
33053
|
+
});
|
|
33054
|
+
project.gitignore.addPatterns("test-results/", "playwright-report/");
|
|
33055
|
+
}
|
|
33056
|
+
|
|
33057
|
+
// src/projects/add-storybook.ts
|
|
33058
|
+
var import_projen15 = require("projen");
|
|
33059
|
+
function addStorybook(project, options = {}) {
|
|
33060
|
+
const withDocs = options.withDocs ?? true;
|
|
33061
|
+
project.addDevDeps(
|
|
33062
|
+
"storybook",
|
|
33063
|
+
"@storybook/react@^9",
|
|
33064
|
+
"@storybook/react-vite@^9",
|
|
33065
|
+
...withDocs ? ["@storybook/addon-docs@^9"] : []
|
|
33066
|
+
);
|
|
33067
|
+
project.tasks.addTask("storybook", {
|
|
33068
|
+
description: "Run Storybook (Vite)",
|
|
33069
|
+
steps: [{ exec: "storybook dev -p 6006" }]
|
|
33070
|
+
});
|
|
33071
|
+
project.tasks.addTask("build-storybook", {
|
|
33072
|
+
description: "Build static Storybook",
|
|
33073
|
+
steps: [{ exec: "storybook build" }]
|
|
33074
|
+
});
|
|
33075
|
+
project.setScript("storybook", "npx projen storybook");
|
|
33076
|
+
project.setScript("build-storybook", "npx projen build-storybook");
|
|
33077
|
+
new import_projen15.SampleFile(project, ".storybook/main.ts", {
|
|
33078
|
+
contents: `import type { StorybookConfig } from '@storybook/react-vite';
|
|
33079
|
+
|
|
33080
|
+
const config: StorybookConfig = {
|
|
33081
|
+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
|
|
33082
|
+
addons: [${withDocs ? `'@storybook/addon-docs'` : ""}],
|
|
33083
|
+
framework: { name: '@storybook/react-vite', options: {} },
|
|
33084
|
+
};
|
|
33085
|
+
export default config;
|
|
33086
|
+
`
|
|
33087
|
+
});
|
|
33088
|
+
new import_projen15.SampleFile(project, ".storybook/preview.ts", {
|
|
33089
|
+
contents: `import '../src/index.css';
|
|
33090
|
+
const preview = { parameters: { controls: { expanded: true } } };
|
|
33091
|
+
export default preview;
|
|
33092
|
+
`
|
|
33093
|
+
});
|
|
33094
|
+
}
|
|
33095
|
+
|
|
33012
33096
|
// src/projects/astro-project.ts
|
|
33013
|
-
var
|
|
33097
|
+
var import_projen21 = require("projen");
|
|
33014
33098
|
var import_ts_deepmerge3 = require("ts-deepmerge");
|
|
33015
33099
|
|
|
33016
33100
|
// src/projects/monorepo-layout.ts
|
|
@@ -33029,6 +33113,7 @@ var LAYOUT_ROOT_BY_PROJECT_TYPE = {
|
|
|
33029
33113
|
TypeScriptProject: MONOREPO_LAYOUT.PACKAGES,
|
|
33030
33114
|
AwsCdkProject: MONOREPO_LAYOUT.APPS,
|
|
33031
33115
|
AstroProject: MONOREPO_LAYOUT.SITES,
|
|
33116
|
+
ReactViteSiteProject: MONOREPO_LAYOUT.SITES,
|
|
33032
33117
|
StarlightProject: MONOREPO_LAYOUT.DOCS
|
|
33033
33118
|
};
|
|
33034
33119
|
function validateMonorepoLayout(root) {
|
|
@@ -33152,9 +33237,12 @@ function resolveAwsCdkProjectOutdir(packageName) {
|
|
|
33152
33237
|
function resolveAstroProjectOutdir(packageName) {
|
|
33153
33238
|
return resolveOutdirFromPackageName(packageName, MONOREPO_LAYOUT.SITES);
|
|
33154
33239
|
}
|
|
33240
|
+
function resolveReactViteSiteProjectOutdir(packageName) {
|
|
33241
|
+
return resolveOutdirFromPackageName(packageName, MONOREPO_LAYOUT.SITES);
|
|
33242
|
+
}
|
|
33155
33243
|
|
|
33156
33244
|
// src/projects/typescript-project.ts
|
|
33157
|
-
var
|
|
33245
|
+
var import_projen20 = require("projen");
|
|
33158
33246
|
var import_javascript4 = require("projen/lib/javascript");
|
|
33159
33247
|
var import_release = require("projen/lib/release");
|
|
33160
33248
|
var import_ts_deepmerge2 = require("ts-deepmerge");
|
|
@@ -33166,9 +33254,9 @@ var import_typescript3 = require("projen/lib/typescript");
|
|
|
33166
33254
|
var import_ts_deepmerge = require("ts-deepmerge");
|
|
33167
33255
|
|
|
33168
33256
|
// src/projects/nvmrc.ts
|
|
33169
|
-
var
|
|
33257
|
+
var import_projen16 = require("projen");
|
|
33170
33258
|
var import_textfile5 = require("projen/lib/textfile");
|
|
33171
|
-
var Nvmrc = class extends
|
|
33259
|
+
var Nvmrc = class extends import_projen16.Component {
|
|
33172
33260
|
constructor(project) {
|
|
33173
33261
|
super(project);
|
|
33174
33262
|
new import_textfile5.TextFile(project, ".nvmrc", {
|
|
@@ -33181,8 +33269,8 @@ var Nvmrc = class extends import_projen14.Component {
|
|
|
33181
33269
|
};
|
|
33182
33270
|
|
|
33183
33271
|
// src/tasks/reset-task.ts
|
|
33184
|
-
var
|
|
33185
|
-
var ResetTask = class _ResetTask extends
|
|
33272
|
+
var import_projen17 = require("projen");
|
|
33273
|
+
var ResetTask = class _ResetTask extends import_projen17.Component {
|
|
33186
33274
|
constructor(project, options = {}) {
|
|
33187
33275
|
super(project);
|
|
33188
33276
|
this.project = project;
|
|
@@ -33255,12 +33343,12 @@ var ResetTask = class _ResetTask extends import_projen15.Component {
|
|
|
33255
33343
|
};
|
|
33256
33344
|
|
|
33257
33345
|
// src/vscode/vscode.ts
|
|
33258
|
-
var
|
|
33259
|
-
var VSCodeConfig = class extends
|
|
33346
|
+
var import_projen18 = require("projen");
|
|
33347
|
+
var VSCodeConfig = class extends import_projen18.Component {
|
|
33260
33348
|
constructor(project) {
|
|
33261
33349
|
super(project);
|
|
33262
|
-
const vsConfig = new
|
|
33263
|
-
const vsSettings = new
|
|
33350
|
+
const vsConfig = new import_projen18.vscode.VsCode(project);
|
|
33351
|
+
const vsSettings = new import_projen18.vscode.VsCodeSettings(vsConfig);
|
|
33264
33352
|
vsSettings.addSetting("editor.tabSize", 2);
|
|
33265
33353
|
vsSettings.addSetting("editor.detectIndentation", false);
|
|
33266
33354
|
vsSettings.addSetting("editor.bracketPairColorization.enabled", true);
|
|
@@ -33540,7 +33628,7 @@ function patchStepArray2(steps, pinned) {
|
|
|
33540
33628
|
}
|
|
33541
33629
|
|
|
33542
33630
|
// src/workflows/sync-labels.ts
|
|
33543
|
-
var
|
|
33631
|
+
var import_projen19 = require("projen");
|
|
33544
33632
|
var import_workflows_model4 = require("projen/lib/github/workflows-model");
|
|
33545
33633
|
var DEFAULT_STATUS_LABELS = [
|
|
33546
33634
|
{
|
|
@@ -33748,10 +33836,10 @@ ${offenders}`
|
|
|
33748
33836
|
}
|
|
33749
33837
|
});
|
|
33750
33838
|
}
|
|
33751
|
-
var LabelsFile = class extends
|
|
33839
|
+
var LabelsFile = class extends import_projen19.Component {
|
|
33752
33840
|
constructor(project, labels) {
|
|
33753
33841
|
super(project);
|
|
33754
|
-
new
|
|
33842
|
+
new import_projen19.YamlFile(project, LABELS_CONFIG_PATH, {
|
|
33755
33843
|
obj: labels.map((l) => ({
|
|
33756
33844
|
name: l.name,
|
|
33757
33845
|
color: l.color,
|
|
@@ -34144,7 +34232,7 @@ var TestRunner = {
|
|
|
34144
34232
|
JEST: "jest",
|
|
34145
34233
|
VITEST: "vitest"
|
|
34146
34234
|
};
|
|
34147
|
-
var TypeScriptProject = class extends
|
|
34235
|
+
var TypeScriptProject = class extends import_projen20.typescript.TypeScriptProject {
|
|
34148
34236
|
constructor(userOptions) {
|
|
34149
34237
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
34150
34238
|
throw new Error(
|
|
@@ -34454,10 +34542,10 @@ var AstroProject = class extends TypeScriptProject {
|
|
|
34454
34542
|
adapter: options.adapter
|
|
34455
34543
|
});
|
|
34456
34544
|
if (options.sampleCode === true) {
|
|
34457
|
-
new
|
|
34545
|
+
new import_projen21.SampleFile(this, "src/pages/index.astro", {
|
|
34458
34546
|
contents: DEFAULT_INDEX_ASTRO
|
|
34459
34547
|
});
|
|
34460
|
-
new
|
|
34548
|
+
new import_projen21.SampleFile(this, "public/favicon.svg", {
|
|
34461
34549
|
contents: DEFAULT_FAVICON_SVG
|
|
34462
34550
|
});
|
|
34463
34551
|
}
|
|
@@ -34482,19 +34570,19 @@ var DEFAULT_FAVICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
|
34482
34570
|
`;
|
|
34483
34571
|
|
|
34484
34572
|
// src/projects/aws-cdk-project.ts
|
|
34485
|
-
var
|
|
34573
|
+
var import_projen24 = require("projen");
|
|
34486
34574
|
var import_javascript5 = require("projen/lib/javascript");
|
|
34487
34575
|
var import_release2 = require("projen/lib/release");
|
|
34488
34576
|
var import_ts_deepmerge4 = require("ts-deepmerge");
|
|
34489
34577
|
|
|
34490
34578
|
// src/workflows/aws-deploy-workflow.ts
|
|
34491
34579
|
var import_utils11 = __toESM(require_lib());
|
|
34492
|
-
var
|
|
34580
|
+
var import_projen22 = require("projen");
|
|
34493
34581
|
var import_build = require("projen/lib/build");
|
|
34494
34582
|
var import_github5 = require("projen/lib/github");
|
|
34495
34583
|
var import_workflows_model5 = require("projen/lib/github/workflows-model");
|
|
34496
34584
|
var PROD_DEPLOY_NAME = "prod-deploy";
|
|
34497
|
-
var AwsDeployWorkflow = class _AwsDeployWorkflow extends
|
|
34585
|
+
var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen22.Component {
|
|
34498
34586
|
constructor(project, options = {}) {
|
|
34499
34587
|
super(project);
|
|
34500
34588
|
this.project = project;
|
|
@@ -34758,7 +34846,7 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen20.Compone
|
|
|
34758
34846
|
};
|
|
34759
34847
|
|
|
34760
34848
|
// src/workflows/aws-teardown-workflow.ts
|
|
34761
|
-
var
|
|
34849
|
+
var import_projen23 = require("projen");
|
|
34762
34850
|
var import_github6 = require("projen/lib/github");
|
|
34763
34851
|
var import_workflows_model6 = require("projen/lib/github/workflows-model");
|
|
34764
34852
|
var DEFAULT_TEARDOWN_BRANCH_PATTERNS = [
|
|
@@ -34780,7 +34868,7 @@ var resolveBranchPatterns = (explicit, targets) => {
|
|
|
34780
34868
|
}
|
|
34781
34869
|
return [...DEFAULT_TEARDOWN_BRANCH_PATTERNS];
|
|
34782
34870
|
};
|
|
34783
|
-
var AwsTeardownWorkflow = class extends
|
|
34871
|
+
var AwsTeardownWorkflow = class extends import_projen23.Component {
|
|
34784
34872
|
constructor(rootProject, options) {
|
|
34785
34873
|
super(rootProject);
|
|
34786
34874
|
this.rootProject = rootProject;
|
|
@@ -34962,7 +35050,7 @@ var AwsTeardownWorkflow = class extends import_projen21.Component {
|
|
|
34962
35050
|
};
|
|
34963
35051
|
|
|
34964
35052
|
// src/projects/aws-cdk-project.ts
|
|
34965
|
-
var AwsCdkProject = class extends
|
|
35053
|
+
var AwsCdkProject = class extends import_projen24.awscdk.AwsCdkTypeScriptApp {
|
|
34966
35054
|
constructor(userOptions) {
|
|
34967
35055
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
34968
35056
|
throw new Error(
|
|
@@ -35158,8 +35246,305 @@ var AwsCdkProject = class extends import_projen22.awscdk.AwsCdkTypeScriptApp {
|
|
|
35158
35246
|
}
|
|
35159
35247
|
};
|
|
35160
35248
|
|
|
35249
|
+
// src/projects/react-vite-site-project.ts
|
|
35250
|
+
var import_projen25 = require("projen");
|
|
35251
|
+
var import_ts_deepmerge5 = require("ts-deepmerge");
|
|
35252
|
+
var ReactViteSiteProject = class extends TypeScriptProject {
|
|
35253
|
+
constructor(userOptions) {
|
|
35254
|
+
const resolvedOutdir = userOptions.outdir ?? resolveReactViteSiteProjectOutdir(
|
|
35255
|
+
userOptions.packageName ?? userOptions.name
|
|
35256
|
+
);
|
|
35257
|
+
const defaultOptions = {
|
|
35258
|
+
testRunner: TestRunner.VITEST,
|
|
35259
|
+
apiExtractor: false,
|
|
35260
|
+
// ESLint inherited from TypeScriptProject lints `src` by default;
|
|
35261
|
+
// skip projen's `.projenrc.ts` lint pass since downstream sites
|
|
35262
|
+
// configure projen through their own root project.
|
|
35263
|
+
eslintOptions: {
|
|
35264
|
+
dirs: ["src"],
|
|
35265
|
+
lintProjenRc: false
|
|
35266
|
+
},
|
|
35267
|
+
// VSCode workspace defaults (Prettier formatter, ESLint on save)
|
|
35268
|
+
// need a project-level `.vscode/` folder. The inherited
|
|
35269
|
+
// TypeScriptProject does not enable it on sub-projects by
|
|
35270
|
+
// default; flip it on so the React-site VSCode wiring below
|
|
35271
|
+
// actually renders.
|
|
35272
|
+
vscode: true,
|
|
35273
|
+
tsconfig: {
|
|
35274
|
+
compilerOptions: {
|
|
35275
|
+
declaration: false
|
|
35276
|
+
}
|
|
35277
|
+
}
|
|
35278
|
+
};
|
|
35279
|
+
const merged = (0, import_ts_deepmerge5.merge)(
|
|
35280
|
+
defaultOptions,
|
|
35281
|
+
userOptions
|
|
35282
|
+
);
|
|
35283
|
+
const options = {
|
|
35284
|
+
...merged,
|
|
35285
|
+
outdir: resolvedOutdir
|
|
35286
|
+
};
|
|
35287
|
+
super(options);
|
|
35288
|
+
this.package.addField("type", "module");
|
|
35289
|
+
new import_projen25.TextFile(this, ".nvmrc", { lines: ["v24.11.0"] });
|
|
35290
|
+
this.tsconfig?.file.addOverride("compilerOptions.target", "ES2020");
|
|
35291
|
+
this.tsconfig?.file.addOverride("compilerOptions.lib", [
|
|
35292
|
+
"ES2020",
|
|
35293
|
+
"DOM",
|
|
35294
|
+
"DOM.Iterable"
|
|
35295
|
+
]);
|
|
35296
|
+
this.tsconfig?.file.addOverride("compilerOptions.module", "ESNext");
|
|
35297
|
+
this.tsconfig?.file.addOverride(
|
|
35298
|
+
"compilerOptions.moduleResolution",
|
|
35299
|
+
"bundler"
|
|
35300
|
+
);
|
|
35301
|
+
this.tsconfig?.file.addOverride("compilerOptions.jsx", "react-jsxdev");
|
|
35302
|
+
this.tsconfig?.file.addOverride("compilerOptions.noEmit", true);
|
|
35303
|
+
this.tsconfig?.file.addOverride("compilerOptions.skipLibCheck", true);
|
|
35304
|
+
this.tsconfig?.file.addOverride("compilerOptions.strict", true);
|
|
35305
|
+
this.tsconfig?.file.addOverride("compilerOptions.resolveJsonModule", true);
|
|
35306
|
+
this.tsconfig?.file.addOverride("compilerOptions.declaration", false);
|
|
35307
|
+
this.tsconfig?.file.addOverride("compilerOptions.paths", {
|
|
35308
|
+
"@/*": ["./src/*"]
|
|
35309
|
+
});
|
|
35310
|
+
this.tsconfig?.file.addOverride("include", ["src"]);
|
|
35311
|
+
this.tsconfigDev?.file.addOverride("compilerOptions.types", [
|
|
35312
|
+
"vitest/globals",
|
|
35313
|
+
"vite/client"
|
|
35314
|
+
]);
|
|
35315
|
+
this.tsconfigDev?.file.addOverride("include", [
|
|
35316
|
+
"src",
|
|
35317
|
+
"tests",
|
|
35318
|
+
"**/*.test.ts",
|
|
35319
|
+
"**/*.test.tsx",
|
|
35320
|
+
"**/*.spec.ts",
|
|
35321
|
+
"**/*.spec.tsx",
|
|
35322
|
+
"vitest.config.ts"
|
|
35323
|
+
]);
|
|
35324
|
+
this.tsconfigDev?.file.addOverride("exclude", [
|
|
35325
|
+
"node_modules",
|
|
35326
|
+
"dist",
|
|
35327
|
+
"build",
|
|
35328
|
+
".turbo"
|
|
35329
|
+
]);
|
|
35330
|
+
new import_projen25.SampleFile(this, "vite.config.ts", {
|
|
35331
|
+
contents: `import { defineConfig } from 'vite';
|
|
35332
|
+
import react from '@vitejs/plugin-react';
|
|
35333
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
35334
|
+
import path from 'path';
|
|
35335
|
+
|
|
35336
|
+
export default defineConfig({
|
|
35337
|
+
plugins: [tailwindcss(), react()],
|
|
35338
|
+
resolve: { alias: { '@': path.resolve(__dirname, 'src') } },
|
|
35339
|
+
});
|
|
35340
|
+
`
|
|
35341
|
+
});
|
|
35342
|
+
if (options.testRunner !== TestRunner.JEST) {
|
|
35343
|
+
this.tryRemoveFile("vitest.config.ts");
|
|
35344
|
+
new import_projen25.SampleFile(this, "vitest.config.ts", {
|
|
35345
|
+
contents: `import { defineConfig, mergeConfig } from 'vitest/config';
|
|
35346
|
+
import react from '@vitejs/plugin-react';
|
|
35347
|
+
import viteConfig from './vite.config';
|
|
35348
|
+
|
|
35349
|
+
export default mergeConfig(
|
|
35350
|
+
viteConfig,
|
|
35351
|
+
defineConfig({
|
|
35352
|
+
plugins: [react()],
|
|
35353
|
+
test: {
|
|
35354
|
+
environment: 'jsdom',
|
|
35355
|
+
globals: true,
|
|
35356
|
+
setupFiles: ['./src/setupTests.ts'],
|
|
35357
|
+
passWithNoTests: true,
|
|
35358
|
+
},
|
|
35359
|
+
})
|
|
35360
|
+
);
|
|
35361
|
+
`
|
|
35362
|
+
});
|
|
35363
|
+
}
|
|
35364
|
+
this.compileTask.reset();
|
|
35365
|
+
this.compileTask.exec("vite build");
|
|
35366
|
+
this.packageTask.reset();
|
|
35367
|
+
this.tasks.tryFind("watch")?.reset("vite");
|
|
35368
|
+
if (!this.tasks.tryFind("dev")) {
|
|
35369
|
+
this.addTask("dev", {
|
|
35370
|
+
description: "Start the Vite dev server",
|
|
35371
|
+
exec: "vite",
|
|
35372
|
+
receiveArgs: true
|
|
35373
|
+
});
|
|
35374
|
+
}
|
|
35375
|
+
if (!this.tasks.tryFind("preview")) {
|
|
35376
|
+
this.addTask("preview", {
|
|
35377
|
+
description: "Preview the built site locally",
|
|
35378
|
+
exec: "vite preview",
|
|
35379
|
+
receiveArgs: true
|
|
35380
|
+
});
|
|
35381
|
+
}
|
|
35382
|
+
this.addDeps("react", "react-dom", "react-router-dom");
|
|
35383
|
+
this.addDevDeps(
|
|
35384
|
+
"vite",
|
|
35385
|
+
"@vitejs/plugin-react",
|
|
35386
|
+
"@tailwindcss/vite",
|
|
35387
|
+
"tailwindcss",
|
|
35388
|
+
"jsdom",
|
|
35389
|
+
"@testing-library/react",
|
|
35390
|
+
"@testing-library/jest-dom",
|
|
35391
|
+
"@testing-library/user-event",
|
|
35392
|
+
"@types/react",
|
|
35393
|
+
"@types/react-dom",
|
|
35394
|
+
"eslint-plugin-react",
|
|
35395
|
+
"eslint-plugin-react-hooks"
|
|
35396
|
+
);
|
|
35397
|
+
this.eslint?.addExtends("plugin:react/recommended");
|
|
35398
|
+
this.eslint?.addExtends("plugin:react/jsx-runtime");
|
|
35399
|
+
this.eslint?.addExtends("plugin:react-hooks/recommended");
|
|
35400
|
+
this.eslint?.addOverride({
|
|
35401
|
+
files: ["**/*.{tsx,jsx}"],
|
|
35402
|
+
// Projen's ESLint override type does not include `settings`, but
|
|
35403
|
+
// `settings` is a valid ESLint override key. Cast to `any` so the
|
|
35404
|
+
// generated `.eslintrc.json` carries the React-version detection
|
|
35405
|
+
// settings on the JSX glob.
|
|
35406
|
+
settings: {
|
|
35407
|
+
react: {
|
|
35408
|
+
version: "detect"
|
|
35409
|
+
}
|
|
35410
|
+
}
|
|
35411
|
+
});
|
|
35412
|
+
this.eslint?.addRules({
|
|
35413
|
+
// We use TypeScript; prop-types are unnecessary.
|
|
35414
|
+
"react/prop-types": "off",
|
|
35415
|
+
// New JSX transform — React no longer needs to be in scope.
|
|
35416
|
+
"react/react-in-jsx-scope": "off"
|
|
35417
|
+
});
|
|
35418
|
+
this.eslint?.addOverride({
|
|
35419
|
+
files: [
|
|
35420
|
+
"**/*.{test,spec}.ts",
|
|
35421
|
+
"**/*.{test,spec}.tsx",
|
|
35422
|
+
"**/__tests__/**",
|
|
35423
|
+
"src/setupTests.ts"
|
|
35424
|
+
],
|
|
35425
|
+
rules: {
|
|
35426
|
+
"import/no-extraneous-dependencies": [
|
|
35427
|
+
"error",
|
|
35428
|
+
{ devDependencies: true }
|
|
35429
|
+
]
|
|
35430
|
+
}
|
|
35431
|
+
});
|
|
35432
|
+
this.vscode?.settings.addSettings({
|
|
35433
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
35434
|
+
"editor.formatOnSave": true,
|
|
35435
|
+
// Prettier must format the whole file; "modifications" mode is
|
|
35436
|
+
// known to mis-merge ranges with Prettier and can corrupt saves.
|
|
35437
|
+
"editor.formatOnSaveMode": "file",
|
|
35438
|
+
"prettier.requireConfig": true,
|
|
35439
|
+
"eslint.useFlatConfig": false,
|
|
35440
|
+
"eslint.workingDirectories": [{ directory: ".", changeProcessCWD: true }],
|
|
35441
|
+
// Prettier is the default formatter; ESLint's fixAll must not
|
|
35442
|
+
// re-apply prettier/prettier (would double-format).
|
|
35443
|
+
"eslint.codeActionsOnSave.rules": ["!prettier/prettier", "*"],
|
|
35444
|
+
"eslint.format.enable": false,
|
|
35445
|
+
"[typescript]": {
|
|
35446
|
+
"editor.codeActionsOnSave": {
|
|
35447
|
+
"source.fixAll.eslint": "always",
|
|
35448
|
+
"source.organizeImports": "always"
|
|
35449
|
+
}
|
|
35450
|
+
},
|
|
35451
|
+
"[typescriptreact]": {
|
|
35452
|
+
"editor.codeActionsOnSave": {
|
|
35453
|
+
"source.fixAll.eslint": "always",
|
|
35454
|
+
"source.organizeImports": "always"
|
|
35455
|
+
}
|
|
35456
|
+
},
|
|
35457
|
+
"[javascript]": {
|
|
35458
|
+
"editor.codeActionsOnSave": {
|
|
35459
|
+
"source.fixAll.eslint": "always"
|
|
35460
|
+
}
|
|
35461
|
+
},
|
|
35462
|
+
"[javascriptreact]": {
|
|
35463
|
+
"editor.codeActionsOnSave": {
|
|
35464
|
+
"source.fixAll.eslint": "always"
|
|
35465
|
+
}
|
|
35466
|
+
},
|
|
35467
|
+
"eslint.validate": [
|
|
35468
|
+
"javascript",
|
|
35469
|
+
"javascriptreact",
|
|
35470
|
+
"typescript",
|
|
35471
|
+
"typescriptreact"
|
|
35472
|
+
]
|
|
35473
|
+
});
|
|
35474
|
+
this.vscode?.extensions.addRecommendations("dbaeumer.vscode-eslint");
|
|
35475
|
+
this.vscode?.extensions.addRecommendations("esbenp.prettier-vscode");
|
|
35476
|
+
const turbo = TurboRepo.of(this);
|
|
35477
|
+
if (turbo?.compileTask) {
|
|
35478
|
+
turbo.compileTask.inputs.push(
|
|
35479
|
+
"public/**",
|
|
35480
|
+
"index.html",
|
|
35481
|
+
"vite.config.ts"
|
|
35482
|
+
);
|
|
35483
|
+
}
|
|
35484
|
+
if (userOptions.sampleCode === true) {
|
|
35485
|
+
const siteName = options.name;
|
|
35486
|
+
new import_projen25.SampleFile(this, "index.html", {
|
|
35487
|
+
contents: `<!doctype html>
|
|
35488
|
+
<html>
|
|
35489
|
+
<head>
|
|
35490
|
+
<meta charset="utf-8"/>
|
|
35491
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
35492
|
+
<title>${siteName}</title>
|
|
35493
|
+
</head>
|
|
35494
|
+
<body>
|
|
35495
|
+
<div id="root"></div>
|
|
35496
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
35497
|
+
</body>
|
|
35498
|
+
</html>
|
|
35499
|
+
`
|
|
35500
|
+
});
|
|
35501
|
+
new import_projen25.SampleFile(this, "src/routes.tsx", {
|
|
35502
|
+
contents: `import { createBrowserRouter } from 'react-router-dom';
|
|
35503
|
+
import App from './App';
|
|
35504
|
+
|
|
35505
|
+
export const router = createBrowserRouter([
|
|
35506
|
+
{ path: '/', element: <App /> },
|
|
35507
|
+
]);
|
|
35508
|
+
`
|
|
35509
|
+
});
|
|
35510
|
+
new import_projen25.SampleFile(this, "src/main.tsx", {
|
|
35511
|
+
contents: `import React from 'react';
|
|
35512
|
+
import ReactDOM from 'react-dom/client';
|
|
35513
|
+
import { RouterProvider } from 'react-router-dom';
|
|
35514
|
+
import { router } from './routes';
|
|
35515
|
+
import './index.css';
|
|
35516
|
+
|
|
35517
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
35518
|
+
<React.StrictMode>
|
|
35519
|
+
<RouterProvider router={router} />
|
|
35520
|
+
</React.StrictMode>
|
|
35521
|
+
);
|
|
35522
|
+
`
|
|
35523
|
+
});
|
|
35524
|
+
new import_projen25.SampleFile(this, "src/App.tsx", {
|
|
35525
|
+
contents: `export default function App() {
|
|
35526
|
+
return (
|
|
35527
|
+
<main className="p-4">
|
|
35528
|
+
<h1 className="text-2xl font-bold">Hello from ${siteName}</h1>
|
|
35529
|
+
</main>
|
|
35530
|
+
);
|
|
35531
|
+
}
|
|
35532
|
+
`
|
|
35533
|
+
});
|
|
35534
|
+
new import_projen25.SampleFile(this, "src/index.css", {
|
|
35535
|
+
contents: `@import "tailwindcss";
|
|
35536
|
+
`
|
|
35537
|
+
});
|
|
35538
|
+
new import_projen25.SampleFile(this, "src/setupTests.ts", {
|
|
35539
|
+
contents: `import '@testing-library/jest-dom';
|
|
35540
|
+
`
|
|
35541
|
+
});
|
|
35542
|
+
}
|
|
35543
|
+
}
|
|
35544
|
+
};
|
|
35545
|
+
|
|
35161
35546
|
// src/projects/starlight-project.ts
|
|
35162
|
-
var
|
|
35547
|
+
var import_projen26 = require("projen");
|
|
35163
35548
|
var STARLIGHT_ROLE = {
|
|
35164
35549
|
DOCS: "docs",
|
|
35165
35550
|
SITE: "site"
|
|
@@ -35201,10 +35586,10 @@ var StarlightProject = class extends AstroProject {
|
|
|
35201
35586
|
turbo.compileTask.inputs.push("src/content/**");
|
|
35202
35587
|
}
|
|
35203
35588
|
if (userOptions.sampleContent === true) {
|
|
35204
|
-
new
|
|
35589
|
+
new import_projen26.SampleFile(this, "src/content/docs/index.mdx", {
|
|
35205
35590
|
contents: DEFAULT_INDEX_MDX
|
|
35206
35591
|
});
|
|
35207
|
-
new
|
|
35592
|
+
new import_projen26.SampleFile(this, "src/content.config.ts", {
|
|
35208
35593
|
contents: DEFAULT_CONTENT_CONFIG_TS
|
|
35209
35594
|
});
|
|
35210
35595
|
}
|
|
@@ -35254,9 +35639,9 @@ export const collections = {
|
|
|
35254
35639
|
|
|
35255
35640
|
// src/typescript/typescript-config.ts
|
|
35256
35641
|
var import_node_path2 = require("path");
|
|
35257
|
-
var
|
|
35642
|
+
var import_projen27 = require("projen");
|
|
35258
35643
|
var import_path2 = require("projen/lib/util/path");
|
|
35259
|
-
var TypeScriptConfig = class extends
|
|
35644
|
+
var TypeScriptConfig = class extends import_projen27.Component {
|
|
35260
35645
|
constructor(project) {
|
|
35261
35646
|
super(project);
|
|
35262
35647
|
let tsPaths = {};
|
|
@@ -35381,6 +35766,7 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35381
35766
|
REQUIREMENTS_WRITER_PATHS,
|
|
35382
35767
|
ROOT_CI_TASK_NAME,
|
|
35383
35768
|
ROOT_TURBO_TASK_NAME,
|
|
35769
|
+
ReactViteSiteProject,
|
|
35384
35770
|
ResetTask,
|
|
35385
35771
|
SCHEDULED_TASK_MODEL_VALUES,
|
|
35386
35772
|
SCOPE_CLASS_VALUES,
|
|
@@ -35407,6 +35793,8 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35407
35793
|
Vitest,
|
|
35408
35794
|
addApproveMergeUpgradeWorkflow,
|
|
35409
35795
|
addBuildCompleteJob,
|
|
35796
|
+
addPlaywright,
|
|
35797
|
+
addStorybook,
|
|
35410
35798
|
addSyncLabelsWorkflow,
|
|
35411
35799
|
agendaBundle,
|
|
35412
35800
|
analyzeTsDocCoverage,
|
|
@@ -35534,6 +35922,7 @@ var TypeScriptConfig = class extends import_projen24.Component {
|
|
|
35534
35922
|
resolveOutdirFromPackageName,
|
|
35535
35923
|
resolveOverrideForLabels,
|
|
35536
35924
|
resolveProgressFiles,
|
|
35925
|
+
resolveReactViteSiteProjectOutdir,
|
|
35537
35926
|
resolveRunRatio,
|
|
35538
35927
|
resolveScheduledTasks,
|
|
35539
35928
|
resolveScopeGate,
|