@codedrifters/configulator 0.0.362 → 0.0.364
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 +9 -2
- package/lib/index.d.ts +9 -2
- package/lib/index.js +45 -40
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +15 -10
- package/lib/index.mjs.map +1 -1
- package/package.json +4 -4
package/lib/index.d.mts
CHANGED
|
@@ -10566,7 +10566,7 @@ declare const VERSION: {
|
|
|
10566
10566
|
/**
|
|
10567
10567
|
* Version of Projen to use.
|
|
10568
10568
|
*/
|
|
10569
|
-
readonly PROJEN_VERSION: "0.
|
|
10569
|
+
readonly PROJEN_VERSION: "0.100.2";
|
|
10570
10570
|
/**
|
|
10571
10571
|
* Version of `actions/setup-node` to use in GitHub workflows.
|
|
10572
10572
|
* Tracks the version projen currently emits (see node_modules/projen/lib/github/workflows.js).
|
|
@@ -10576,7 +10576,7 @@ declare const VERSION: {
|
|
|
10576
10576
|
* Version of sharp to pin for StarlightProject (required peer for
|
|
10577
10577
|
* Starlight's image optimization pipeline).
|
|
10578
10578
|
*/
|
|
10579
|
-
readonly SHARP_VERSION: "0.35.
|
|
10579
|
+
readonly SHARP_VERSION: "0.35.2";
|
|
10580
10580
|
/**
|
|
10581
10581
|
* Version of `@astrojs/starlight` to pin for StarlightProject scaffolding.
|
|
10582
10582
|
*/
|
|
@@ -12458,6 +12458,13 @@ declare class MonorepoProject extends TypeScriptAppProject {
|
|
|
12458
12458
|
* rewritten workspace — matching the canonical regen sequence consumers
|
|
12459
12459
|
* already document (`pnpm i && pnpm exec projen && pnpm i`, neither frozen).
|
|
12460
12460
|
*
|
|
12461
|
+
* Runs the task via `this.tasks.runTask` (the public task-execution API,
|
|
12462
|
+
* which projen itself uses in `NodePackage.installDependencies`) rather than
|
|
12463
|
+
* constructing a `TaskRuntime`: projen 0.100 removed `TaskRuntime` from the
|
|
12464
|
+
* package root and made it internal to the CLI. `Tasks.runTask` is stable
|
|
12465
|
+
* across the 0.99/0.100 boundary and executes against this project's outdir,
|
|
12466
|
+
* so behavior is unchanged.
|
|
12467
|
+
*
|
|
12461
12468
|
* @see https://github.com/codedrifters/packages/issues/570
|
|
12462
12469
|
*/
|
|
12463
12470
|
private installDependenciesNonFrozen;
|
package/lib/index.d.ts
CHANGED
|
@@ -10615,7 +10615,7 @@ declare const VERSION: {
|
|
|
10615
10615
|
/**
|
|
10616
10616
|
* Version of Projen to use.
|
|
10617
10617
|
*/
|
|
10618
|
-
readonly PROJEN_VERSION: "0.
|
|
10618
|
+
readonly PROJEN_VERSION: "0.100.2";
|
|
10619
10619
|
/**
|
|
10620
10620
|
* Version of `actions/setup-node` to use in GitHub workflows.
|
|
10621
10621
|
* Tracks the version projen currently emits (see node_modules/projen/lib/github/workflows.js).
|
|
@@ -10625,7 +10625,7 @@ declare const VERSION: {
|
|
|
10625
10625
|
* Version of sharp to pin for StarlightProject (required peer for
|
|
10626
10626
|
* Starlight's image optimization pipeline).
|
|
10627
10627
|
*/
|
|
10628
|
-
readonly SHARP_VERSION: "0.35.
|
|
10628
|
+
readonly SHARP_VERSION: "0.35.2";
|
|
10629
10629
|
/**
|
|
10630
10630
|
* Version of `@astrojs/starlight` to pin for StarlightProject scaffolding.
|
|
10631
10631
|
*/
|
|
@@ -12507,6 +12507,13 @@ declare class MonorepoProject extends TypeScriptAppProject {
|
|
|
12507
12507
|
* rewritten workspace — matching the canonical regen sequence consumers
|
|
12508
12508
|
* already document (`pnpm i && pnpm exec projen && pnpm i`, neither frozen).
|
|
12509
12509
|
*
|
|
12510
|
+
* Runs the task via `this.tasks.runTask` (the public task-execution API,
|
|
12511
|
+
* which projen itself uses in `NodePackage.installDependencies`) rather than
|
|
12512
|
+
* constructing a `TaskRuntime`: projen 0.100 removed `TaskRuntime` from the
|
|
12513
|
+
* package root and made it internal to the CLI. `Tasks.runTask` is stable
|
|
12514
|
+
* across the 0.99/0.100 boundary and executes against this project's outdir,
|
|
12515
|
+
* so behavior is unchanged.
|
|
12516
|
+
*
|
|
12510
12517
|
* @see https://github.com/codedrifters/packages/issues/570
|
|
12511
12518
|
*/
|
|
12512
12519
|
private installDependenciesNonFrozen;
|
package/lib/index.js
CHANGED
|
@@ -31231,7 +31231,7 @@ var VERSION = {
|
|
|
31231
31231
|
/**
|
|
31232
31232
|
* Version of Projen to use.
|
|
31233
31233
|
*/
|
|
31234
|
-
PROJEN_VERSION: "0.
|
|
31234
|
+
PROJEN_VERSION: "0.100.2",
|
|
31235
31235
|
/**
|
|
31236
31236
|
* Version of `actions/setup-node` to use in GitHub workflows.
|
|
31237
31237
|
* Tracks the version projen currently emits (see node_modules/projen/lib/github/workflows.js).
|
|
@@ -31241,7 +31241,7 @@ var VERSION = {
|
|
|
31241
31241
|
* Version of sharp to pin for StarlightProject (required peer for
|
|
31242
31242
|
* Starlight's image optimization pipeline).
|
|
31243
31243
|
*/
|
|
31244
|
-
SHARP_VERSION: "0.35.
|
|
31244
|
+
SHARP_VERSION: "0.35.2",
|
|
31245
31245
|
/**
|
|
31246
31246
|
* Version of `@astrojs/starlight` to pin for StarlightProject scaffolding.
|
|
31247
31247
|
*/
|
|
@@ -36883,7 +36883,7 @@ export default preview;
|
|
|
36883
36883
|
}
|
|
36884
36884
|
|
|
36885
36885
|
// src/projects/astro-project.ts
|
|
36886
|
-
var
|
|
36886
|
+
var import_projen24 = require("projen");
|
|
36887
36887
|
var import_ts_deepmerge3 = require("ts-deepmerge");
|
|
36888
36888
|
|
|
36889
36889
|
// src/projects/monorepo-layout.ts
|
|
@@ -37031,13 +37031,12 @@ function resolveReactViteSiteProjectOutdir(packageName) {
|
|
|
37031
37031
|
}
|
|
37032
37032
|
|
|
37033
37033
|
// src/projects/typescript-project.ts
|
|
37034
|
-
var
|
|
37034
|
+
var import_projen23 = require("projen");
|
|
37035
37035
|
var import_javascript4 = require("projen/lib/javascript");
|
|
37036
37036
|
var import_release = require("projen/lib/release");
|
|
37037
37037
|
var import_ts_deepmerge2 = require("ts-deepmerge");
|
|
37038
37038
|
|
|
37039
37039
|
// src/projects/monorepo-project.ts
|
|
37040
|
-
var import_projen21 = require("projen");
|
|
37041
37040
|
var import_github5 = require("projen/lib/github");
|
|
37042
37041
|
var import_javascript3 = require("projen/lib/javascript");
|
|
37043
37042
|
var import_typescript3 = require("projen/lib/typescript");
|
|
@@ -38080,11 +38079,17 @@ var MonorepoProject = class extends import_typescript3.TypeScriptAppProject {
|
|
|
38080
38079
|
* rewritten workspace — matching the canonical regen sequence consumers
|
|
38081
38080
|
* already document (`pnpm i && pnpm exec projen && pnpm i`, neither frozen).
|
|
38082
38081
|
*
|
|
38082
|
+
* Runs the task via `this.tasks.runTask` (the public task-execution API,
|
|
38083
|
+
* which projen itself uses in `NodePackage.installDependencies`) rather than
|
|
38084
|
+
* constructing a `TaskRuntime`: projen 0.100 removed `TaskRuntime` from the
|
|
38085
|
+
* package root and made it internal to the CLI. `Tasks.runTask` is stable
|
|
38086
|
+
* across the 0.99/0.100 boundary and executes against this project's outdir,
|
|
38087
|
+
* so behavior is unchanged.
|
|
38088
|
+
*
|
|
38083
38089
|
* @see https://github.com/codedrifters/packages/issues/570
|
|
38084
38090
|
*/
|
|
38085
38091
|
installDependenciesNonFrozen() {
|
|
38086
|
-
|
|
38087
|
-
runtime.runTask(this.package.installTask.name);
|
|
38092
|
+
this.tasks.runTask(this.package.installTask.name);
|
|
38088
38093
|
}
|
|
38089
38094
|
/**
|
|
38090
38095
|
* Hooks into the install dependencies cycle
|
|
@@ -38105,11 +38110,11 @@ var MonorepoProject = class extends import_typescript3.TypeScriptAppProject {
|
|
|
38105
38110
|
};
|
|
38106
38111
|
|
|
38107
38112
|
// src/typescript/tsdoc-config.ts
|
|
38108
|
-
var
|
|
38113
|
+
var import_projen21 = require("projen");
|
|
38109
38114
|
var STANDARD_MODIFIER_TAGS = ["@default"];
|
|
38110
38115
|
var STANDARD_INLINE_TAGS = ["@code"];
|
|
38111
38116
|
var ALWAYS_ON_SCOPES = ["@codedrifters"];
|
|
38112
|
-
var TsdocConfig = class _TsdocConfig extends
|
|
38117
|
+
var TsdocConfig = class _TsdocConfig extends import_projen21.Component {
|
|
38113
38118
|
/**
|
|
38114
38119
|
* Derive a workspace scope from a scoped package name (`@scope/name`).
|
|
38115
38120
|
* Returns `undefined` when the name is unscoped.
|
|
@@ -38154,7 +38159,7 @@ var TsdocConfig = class _TsdocConfig extends import_projen22.Component {
|
|
|
38154
38159
|
allowMultiple: true
|
|
38155
38160
|
}))
|
|
38156
38161
|
].sort((a, b) => a.tagName.localeCompare(b.tagName));
|
|
38157
|
-
new
|
|
38162
|
+
new import_projen21.JsonFile(project, "tsdoc.json", {
|
|
38158
38163
|
marker: false,
|
|
38159
38164
|
obj: {
|
|
38160
38165
|
$schema: "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
|
|
@@ -38167,9 +38172,9 @@ var TsdocConfig = class _TsdocConfig extends import_projen22.Component {
|
|
|
38167
38172
|
|
|
38168
38173
|
// src/typescript/typescript-config.ts
|
|
38169
38174
|
var import_node_path3 = require("path");
|
|
38170
|
-
var
|
|
38175
|
+
var import_projen22 = require("projen");
|
|
38171
38176
|
var import_path = require("projen/lib/util/path");
|
|
38172
|
-
var TypeScriptConfig = class extends
|
|
38177
|
+
var TypeScriptConfig = class extends import_projen22.Component {
|
|
38173
38178
|
constructor(project) {
|
|
38174
38179
|
super(project);
|
|
38175
38180
|
let tsPaths = {};
|
|
@@ -38200,7 +38205,7 @@ var TestRunner = {
|
|
|
38200
38205
|
JEST: "jest",
|
|
38201
38206
|
VITEST: "vitest"
|
|
38202
38207
|
};
|
|
38203
|
-
var TypeScriptProject = class extends
|
|
38208
|
+
var TypeScriptProject = class extends import_projen23.typescript.TypeScriptProject {
|
|
38204
38209
|
constructor(userOptions) {
|
|
38205
38210
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
38206
38211
|
throw new Error(
|
|
@@ -38522,10 +38527,10 @@ var AstroProject = class extends TypeScriptProject {
|
|
|
38522
38527
|
adapter: options.adapter
|
|
38523
38528
|
});
|
|
38524
38529
|
if (options.sampleCode === true) {
|
|
38525
|
-
new
|
|
38530
|
+
new import_projen24.SampleFile(this, "src/pages/index.astro", {
|
|
38526
38531
|
contents: DEFAULT_INDEX_ASTRO
|
|
38527
38532
|
});
|
|
38528
|
-
new
|
|
38533
|
+
new import_projen24.SampleFile(this, "public/favicon.svg", {
|
|
38529
38534
|
contents: DEFAULT_FAVICON_SVG
|
|
38530
38535
|
});
|
|
38531
38536
|
}
|
|
@@ -38550,19 +38555,19 @@ var DEFAULT_FAVICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
|
38550
38555
|
`;
|
|
38551
38556
|
|
|
38552
38557
|
// src/projects/aws-cdk-project.ts
|
|
38553
|
-
var
|
|
38558
|
+
var import_projen27 = require("projen");
|
|
38554
38559
|
var import_javascript5 = require("projen/lib/javascript");
|
|
38555
38560
|
var import_release2 = require("projen/lib/release");
|
|
38556
38561
|
var import_ts_deepmerge4 = require("ts-deepmerge");
|
|
38557
38562
|
|
|
38558
38563
|
// src/workflows/aws-deploy-workflow.ts
|
|
38559
38564
|
var import_utils11 = __toESM(require_lib());
|
|
38560
|
-
var
|
|
38565
|
+
var import_projen25 = require("projen");
|
|
38561
38566
|
var import_build = require("projen/lib/build");
|
|
38562
38567
|
var import_github6 = require("projen/lib/github");
|
|
38563
38568
|
var import_workflows_model5 = require("projen/lib/github/workflows-model");
|
|
38564
38569
|
var PROD_DEPLOY_NAME = "prod-deploy";
|
|
38565
|
-
var AwsDeployWorkflow = class _AwsDeployWorkflow extends
|
|
38570
|
+
var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen25.Component {
|
|
38566
38571
|
constructor(project, options = {}) {
|
|
38567
38572
|
super(project);
|
|
38568
38573
|
this.project = project;
|
|
@@ -38879,7 +38884,7 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen26.Compone
|
|
|
38879
38884
|
};
|
|
38880
38885
|
|
|
38881
38886
|
// src/workflows/aws-teardown-workflow.ts
|
|
38882
|
-
var
|
|
38887
|
+
var import_projen26 = require("projen");
|
|
38883
38888
|
var import_github7 = require("projen/lib/github");
|
|
38884
38889
|
var import_workflows_model6 = require("projen/lib/github/workflows-model");
|
|
38885
38890
|
var DEFAULT_TEARDOWN_BRANCH_PATTERNS = [
|
|
@@ -38901,7 +38906,7 @@ var resolveBranchPatterns = (explicit, targets) => {
|
|
|
38901
38906
|
}
|
|
38902
38907
|
return [...DEFAULT_TEARDOWN_BRANCH_PATTERNS];
|
|
38903
38908
|
};
|
|
38904
|
-
var AwsTeardownWorkflow = class extends
|
|
38909
|
+
var AwsTeardownWorkflow = class extends import_projen26.Component {
|
|
38905
38910
|
constructor(rootProject, options) {
|
|
38906
38911
|
super(rootProject);
|
|
38907
38912
|
this.rootProject = rootProject;
|
|
@@ -39083,7 +39088,7 @@ var AwsTeardownWorkflow = class extends import_projen27.Component {
|
|
|
39083
39088
|
};
|
|
39084
39089
|
|
|
39085
39090
|
// src/projects/aws-cdk-project.ts
|
|
39086
|
-
var AwsCdkProject = class extends
|
|
39091
|
+
var AwsCdkProject = class extends import_projen27.awscdk.AwsCdkTypeScriptApp {
|
|
39087
39092
|
constructor(userOptions) {
|
|
39088
39093
|
if (!(userOptions.parent instanceof MonorepoProject)) {
|
|
39089
39094
|
throw new Error(
|
|
@@ -39280,7 +39285,7 @@ var AwsCdkProject = class extends import_projen28.awscdk.AwsCdkTypeScriptApp {
|
|
|
39280
39285
|
};
|
|
39281
39286
|
|
|
39282
39287
|
// src/projects/react-vite-site-project.ts
|
|
39283
|
-
var
|
|
39288
|
+
var import_projen28 = require("projen");
|
|
39284
39289
|
var import_ts_deepmerge5 = require("ts-deepmerge");
|
|
39285
39290
|
var ReactViteSiteProject = class extends TypeScriptProject {
|
|
39286
39291
|
constructor(userOptions) {
|
|
@@ -39290,12 +39295,12 @@ var ReactViteSiteProject = class extends TypeScriptProject {
|
|
|
39290
39295
|
const defaultOptions = {
|
|
39291
39296
|
testRunner: TestRunner.VITEST,
|
|
39292
39297
|
apiExtractor: false,
|
|
39293
|
-
// ESLint inherited from TypeScriptProject lints `src`
|
|
39294
|
-
//
|
|
39295
|
-
//
|
|
39298
|
+
// ESLint inherited from TypeScriptProject lints `src` only. projen 0.100
|
|
39299
|
+
// removed the `lintProjenRc` option and no longer auto-lints the projenrc
|
|
39300
|
+
// file, so the previous explicit opt-out is unnecessary — downstream
|
|
39301
|
+
// sites configure projen through their own root project.
|
|
39296
39302
|
eslintOptions: {
|
|
39297
|
-
dirs: ["src"]
|
|
39298
|
-
lintProjenRc: false
|
|
39303
|
+
dirs: ["src"]
|
|
39299
39304
|
},
|
|
39300
39305
|
// VSCode workspace defaults (Prettier formatter, ESLint on save)
|
|
39301
39306
|
// need a project-level `.vscode/` folder. The inherited
|
|
@@ -39319,7 +39324,7 @@ var ReactViteSiteProject = class extends TypeScriptProject {
|
|
|
39319
39324
|
};
|
|
39320
39325
|
super(options);
|
|
39321
39326
|
this.package.addField("type", "module");
|
|
39322
|
-
new
|
|
39327
|
+
new import_projen28.TextFile(this, ".nvmrc", { lines: ["v24.11.0"] });
|
|
39323
39328
|
this.tsconfig?.file.addOverride("compilerOptions.target", "ES2020");
|
|
39324
39329
|
this.tsconfig?.file.addOverride("compilerOptions.lib", [
|
|
39325
39330
|
"ES2020",
|
|
@@ -39369,7 +39374,7 @@ var ReactViteSiteProject = class extends TypeScriptProject {
|
|
|
39369
39374
|
"build",
|
|
39370
39375
|
".turbo"
|
|
39371
39376
|
]);
|
|
39372
|
-
new
|
|
39377
|
+
new import_projen28.SampleFile(this, "vite.config.ts", {
|
|
39373
39378
|
contents: `import { defineConfig } from 'vite';
|
|
39374
39379
|
import react from '@vitejs/plugin-react';
|
|
39375
39380
|
import tailwindcss from '@tailwindcss/vite';
|
|
@@ -39381,7 +39386,7 @@ export default defineConfig({
|
|
|
39381
39386
|
});
|
|
39382
39387
|
`
|
|
39383
39388
|
});
|
|
39384
|
-
new
|
|
39389
|
+
new import_projen28.SampleFile(this, "src/vite-env.d.ts", {
|
|
39385
39390
|
contents: `/// <reference types="vite/client" />
|
|
39386
39391
|
|
|
39387
39392
|
interface ImportMetaEnv {
|
|
@@ -39396,7 +39401,7 @@ interface ImportMeta {
|
|
|
39396
39401
|
});
|
|
39397
39402
|
if (options.testRunner !== TestRunner.JEST) {
|
|
39398
39403
|
this.tryRemoveFile("vitest.config.ts");
|
|
39399
|
-
new
|
|
39404
|
+
new import_projen28.SampleFile(this, "vitest.config.ts", {
|
|
39400
39405
|
contents: `import { defineConfig, mergeConfig } from 'vitest/config';
|
|
39401
39406
|
import react from '@vitejs/plugin-react';
|
|
39402
39407
|
import viteConfig from './vite.config';
|
|
@@ -39540,7 +39545,7 @@ export default mergeConfig(
|
|
|
39540
39545
|
}
|
|
39541
39546
|
if (userOptions.sampleCode === true) {
|
|
39542
39547
|
const siteName = options.name;
|
|
39543
|
-
new
|
|
39548
|
+
new import_projen28.SampleFile(this, "index.html", {
|
|
39544
39549
|
contents: `<!doctype html>
|
|
39545
39550
|
<html>
|
|
39546
39551
|
<head>
|
|
@@ -39555,7 +39560,7 @@ export default mergeConfig(
|
|
|
39555
39560
|
</html>
|
|
39556
39561
|
`
|
|
39557
39562
|
});
|
|
39558
|
-
new
|
|
39563
|
+
new import_projen28.SampleFile(this, "src/routes.tsx", {
|
|
39559
39564
|
contents: `import { createBrowserRouter } from 'react-router-dom';
|
|
39560
39565
|
import App from './App';
|
|
39561
39566
|
|
|
@@ -39564,7 +39569,7 @@ export const router = createBrowserRouter([
|
|
|
39564
39569
|
]);
|
|
39565
39570
|
`
|
|
39566
39571
|
});
|
|
39567
|
-
new
|
|
39572
|
+
new import_projen28.SampleFile(this, "src/main.tsx", {
|
|
39568
39573
|
contents: `import React from 'react';
|
|
39569
39574
|
import ReactDOM from 'react-dom/client';
|
|
39570
39575
|
import { RouterProvider } from 'react-router-dom';
|
|
@@ -39578,7 +39583,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
|
39578
39583
|
);
|
|
39579
39584
|
`
|
|
39580
39585
|
});
|
|
39581
|
-
new
|
|
39586
|
+
new import_projen28.SampleFile(this, "src/App.tsx", {
|
|
39582
39587
|
contents: `export default function App() {
|
|
39583
39588
|
return (
|
|
39584
39589
|
<main className="p-4">
|
|
@@ -39588,11 +39593,11 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
|
39588
39593
|
}
|
|
39589
39594
|
`
|
|
39590
39595
|
});
|
|
39591
|
-
new
|
|
39596
|
+
new import_projen28.SampleFile(this, "src/index.css", {
|
|
39592
39597
|
contents: `@import "tailwindcss";
|
|
39593
39598
|
`
|
|
39594
39599
|
});
|
|
39595
|
-
new
|
|
39600
|
+
new import_projen28.SampleFile(this, "src/setupTests.ts", {
|
|
39596
39601
|
contents: `import '@testing-library/jest-dom';
|
|
39597
39602
|
`
|
|
39598
39603
|
});
|
|
@@ -39601,7 +39606,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
|
39601
39606
|
};
|
|
39602
39607
|
|
|
39603
39608
|
// src/projects/starlight-project.ts
|
|
39604
|
-
var
|
|
39609
|
+
var import_projen29 = require("projen");
|
|
39605
39610
|
var STARLIGHT_ROLE = {
|
|
39606
39611
|
DOCS: "docs",
|
|
39607
39612
|
SITE: "site"
|
|
@@ -39643,10 +39648,10 @@ var StarlightProject = class extends AstroProject {
|
|
|
39643
39648
|
turbo.compileTask.inputs.push("src/content/**");
|
|
39644
39649
|
}
|
|
39645
39650
|
if (userOptions.sampleContent === true) {
|
|
39646
|
-
new
|
|
39651
|
+
new import_projen29.SampleFile(this, "src/content/docs/index.mdx", {
|
|
39647
39652
|
contents: DEFAULT_INDEX_MDX
|
|
39648
39653
|
});
|
|
39649
|
-
new
|
|
39654
|
+
new import_projen29.SampleFile(this, "src/content.config.ts", {
|
|
39650
39655
|
contents: DEFAULT_CONTENT_CONFIG_TS
|
|
39651
39656
|
});
|
|
39652
39657
|
}
|