@saschabrunnerch/arcgis-maps-sdk-js-ai-context 0.0.2 → 0.1.0

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 (52) hide show
  1. package/README.md +163 -203
  2. package/bin/cli.js +157 -173
  3. package/contexts/4.34/{claude → skills}/arcgis-3d-advanced/SKILL.md +586 -586
  4. package/contexts/4.34/{claude → skills}/arcgis-advanced-layers/SKILL.md +431 -431
  5. package/contexts/4.34/{claude → skills}/arcgis-analysis-services/SKILL.md +607 -607
  6. package/contexts/4.34/{claude → skills}/arcgis-authentication/SKILL.md +301 -301
  7. package/contexts/4.34/{claude → skills}/arcgis-cim-symbols/SKILL.md +486 -486
  8. package/contexts/4.34/{claude → skills}/arcgis-coordinates-projection/SKILL.md +406 -406
  9. package/contexts/4.34/{claude → skills}/arcgis-core-maps/SKILL.md +739 -739
  10. package/contexts/4.34/{claude → skills}/arcgis-core-utilities/SKILL.md +732 -732
  11. package/contexts/4.34/{claude → skills}/arcgis-custom-rendering/SKILL.md +445 -445
  12. package/contexts/4.34/{claude → skills}/arcgis-editing-advanced/SKILL.md +702 -702
  13. package/contexts/4.34/{claude → skills}/arcgis-feature-effects/SKILL.md +393 -393
  14. package/contexts/4.34/{claude → skills}/arcgis-geometry-operations/SKILL.md +489 -489
  15. package/contexts/4.34/{claude → skills}/arcgis-imagery/SKILL.md +307 -307
  16. package/contexts/4.34/{claude → skills}/arcgis-interaction/SKILL.md +572 -572
  17. package/contexts/4.34/{claude → skills}/arcgis-knowledge-graphs/SKILL.md +582 -582
  18. package/contexts/4.34/{claude → skills}/arcgis-layers/SKILL.md +601 -601
  19. package/contexts/4.34/{claude → skills}/arcgis-map-tools/SKILL.md +668 -668
  20. package/contexts/4.34/{claude → skills}/arcgis-media-layers/SKILL.md +290 -290
  21. package/contexts/4.34/{claude → skills}/arcgis-portal-content/SKILL.md +679 -679
  22. package/contexts/4.34/{claude → skills}/arcgis-scene-effects/SKILL.md +512 -512
  23. package/contexts/4.34/{claude → skills}/arcgis-smart-mapping/SKILL.md +686 -686
  24. package/contexts/4.34/{claude → skills}/arcgis-starter-app-extended/SKILL.md +649 -649
  25. package/contexts/4.34/{claude → skills}/arcgis-tables-forms/SKILL.md +877 -877
  26. package/contexts/4.34/{claude → skills}/arcgis-time-animation/SKILL.md +722 -722
  27. package/contexts/4.34/{claude → skills}/arcgis-utility-networks/SKILL.md +301 -301
  28. package/contexts/4.34/{claude → skills}/arcgis-visualization/SKILL.md +580 -580
  29. package/contexts/4.34/{claude → skills}/arcgis-widgets-ui/SKILL.md +574 -574
  30. package/lib/installer.js +19 -104
  31. package/package.json +45 -45
  32. package/contexts/4.34/copilot/arcgis-3d.instructions.md +0 -267
  33. package/contexts/4.34/copilot/arcgis-analysis.instructions.md +0 -294
  34. package/contexts/4.34/copilot/arcgis-arcade.instructions.md +0 -234
  35. package/contexts/4.34/copilot/arcgis-authentication.instructions.md +0 -187
  36. package/contexts/4.34/copilot/arcgis-cim-symbols.instructions.md +0 -177
  37. package/contexts/4.34/copilot/arcgis-core-maps.instructions.md +0 -246
  38. package/contexts/4.34/copilot/arcgis-core-utilities.instructions.md +0 -247
  39. package/contexts/4.34/copilot/arcgis-editing.instructions.md +0 -262
  40. package/contexts/4.34/copilot/arcgis-geometry.instructions.md +0 -225
  41. package/contexts/4.34/copilot/arcgis-layers.instructions.md +0 -278
  42. package/contexts/4.34/copilot/arcgis-popup-templates.instructions.md +0 -266
  43. package/contexts/4.34/copilot/arcgis-portal-advanced.instructions.md +0 -275
  44. package/contexts/4.34/copilot/arcgis-smart-mapping.instructions.md +0 -184
  45. package/contexts/4.34/copilot/arcgis-starter-app-extended.instructions.md +0 -643
  46. package/contexts/4.34/copilot/arcgis-starter-app.instructions.md +0 -268
  47. package/contexts/4.34/copilot/arcgis-time-animation.instructions.md +0 -112
  48. package/contexts/4.34/copilot/arcgis-visualization.instructions.md +0 -321
  49. package/contexts/4.34/copilot/arcgis-widgets-ui.instructions.md +0 -277
  50. /package/contexts/4.34/{claude → skills}/arcgis-arcade/SKILL.md +0 -0
  51. /package/contexts/4.34/{claude → skills}/arcgis-popup-templates/SKILL.md +0 -0
  52. /package/contexts/4.34/{claude → skills}/arcgis-starter-app/SKILL.md +0 -0
@@ -1,643 +0,0 @@
1
- ---
2
- applyTo: "**/*.{js,ts,jsx,tsx,html,json,yml,yaml}"
3
- ---
4
-
5
- # ArcGIS Extended Starter App with TypeScript, Vite & CI/CD
6
-
7
- Scaffold a production-ready ArcGIS Maps SDK for JavaScript application with comprehensive tooling.
8
-
9
- ## Project Structure
10
-
11
- ```
12
- my-arcgis-app/
13
- ├── .github/
14
- │ └── workflows/
15
- │ ├── test.yml
16
- │ └── deploy.yml
17
- ├── src/
18
- │ ├── main.ts
19
- │ └── style.css
20
- ├── index.html
21
- ├── package.json
22
- ├── tsconfig.json
23
- ├── vite.config.ts
24
- ├── eslint.config.js
25
- ├── .prettierrc
26
- ├── .prettierignore
27
- ├── .editorconfig
28
- ├── .gitattributes
29
- ├── .gitignore
30
- ├── .env.example
31
- └── README.md
32
- ```
33
-
34
- ## package.json
35
-
36
- ```json
37
- {
38
- "name": "my-arcgis-app",
39
- "version": "0.0.1",
40
- "type": "module",
41
- "scripts": {
42
- "dev": "vite",
43
- "build": "tsc && vite build",
44
- "preview": "vite preview",
45
- "lint": "eslint .",
46
- "format:check": "prettier --check .",
47
- "format": "prettier --write .",
48
- "prepare": "simple-git-hooks"
49
- },
50
- "devDependencies": {
51
- "@eslint/js": "^9.39.1",
52
- "eslint": "^9.39.1",
53
- "eslint-config-prettier": "^9.1.0",
54
- "eslint-plugin-import": "^2.29.1",
55
- "eslint-plugin-unicorn": "^55.0.0",
56
- "globals": "^16.5.0",
57
- "prettier": "^3.7.4",
58
- "lint-staged": "^16.2.7",
59
- "simple-git-hooks": "^2.13.1",
60
- "typescript": "~5.9.3",
61
- "typescript-eslint": "^8.49.0",
62
- "vite": "^7.2.7"
63
- },
64
- "dependencies": {
65
- "@arcgis/core": "4.34.8",
66
- "@arcgis/map-components": "^4.34.9",
67
- "@esri/calcite-components": "^3.3.3"
68
- },
69
- "simple-git-hooks": {
70
- "pre-commit": "pnpm exec lint-staged",
71
- "pre-push": "pnpm exec tsc --noEmit"
72
- },
73
- "lint-staged": {
74
- "*.{ts,tsx}": ["eslint --fix", "prettier --write"],
75
- "*.{js,json,css,md,yml,yaml}": ["prettier --write"]
76
- }
77
- }
78
- ```
79
-
80
- ## eslint.config.js
81
-
82
- ```javascript
83
- import eslint from "@eslint/js";
84
- import configPrettier from "eslint-config-prettier";
85
- import importPlugin from "eslint-plugin-import";
86
- import unicornPlugin from "eslint-plugin-unicorn";
87
- import globals from "globals";
88
- import tseslint from "typescript-eslint";
89
-
90
- export default tseslint.config(
91
- eslint.configs.recommended,
92
- ...tseslint.configs.recommended,
93
- // Enable type-aware linting for TypeScript files
94
- {
95
- files: ["**/*.ts", "**/*.tsx"],
96
- languageOptions: {
97
- ecmaVersion: "latest",
98
- sourceType: "module",
99
- parserOptions: {
100
- projectService: true,
101
- allowDefaultProject: ["vite.config.ts"],
102
- },
103
- },
104
- },
105
- // Scope type-checked recommendations strictly to TS files
106
- ...tseslint.configs.recommendedTypeChecked.map((cfg) => ({
107
- ...cfg,
108
- files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
109
- })),
110
- {
111
- languageOptions: {
112
- ecmaVersion: "latest",
113
- sourceType: "module",
114
- globals: {
115
- ...globals.browser,
116
- },
117
- },
118
- },
119
- {
120
- ignores: ["dist/**", "node_modules/**"],
121
- },
122
- {
123
- ignores: ["vite.config.ts"],
124
- },
125
- {
126
- plugins: {
127
- import: importPlugin,
128
- unicorn: unicornPlugin,
129
- },
130
- rules: {
131
- // import hygiene
132
- "import/no-duplicates": "error",
133
- "import/no-useless-path-segments": "error",
134
- "import/no-extraneous-dependencies": [
135
- "error",
136
- {
137
- devDependencies: [
138
- "**/eslint.config.*",
139
- "**/vite.config.*",
140
- "**/*.config.*",
141
- "**/scripts/**",
142
- "**/*.test.*",
143
- "**/*.spec.*",
144
- ".github/**",
145
- ],
146
- optionalDependencies: false,
147
- peerDependencies: true,
148
- },
149
- ],
150
- // import ordering
151
- "import/order": [
152
- "warn",
153
- {
154
- groups: [
155
- "builtin",
156
- "external",
157
- "internal",
158
- "parent",
159
- "sibling",
160
- "index",
161
- "object",
162
- "type",
163
- ],
164
- "newlines-between": "always",
165
- alphabetize: { order: "asc", caseInsensitive: true },
166
- },
167
- ],
168
-
169
- // unused vars/imports
170
- "no-unused-vars": "off",
171
- "@typescript-eslint/no-unused-vars": [
172
- "warn",
173
- {
174
- argsIgnorePattern: "^_",
175
- varsIgnorePattern: "^_",
176
- caughtErrorsIgnorePattern: "^_",
177
- },
178
- ],
179
-
180
- // code quality
181
- eqeqeq: ["error", "always"],
182
- "no-console": ["warn", { allow: ["warn", "error"] }],
183
- "@typescript-eslint/no-explicit-any": "warn",
184
-
185
- // unicorn essentials
186
- "unicorn/prefer-node-protocol": "error",
187
- "unicorn/prefer-string-starts-ends-with": "error",
188
- "unicorn/prefer-array-find": "error",
189
- "unicorn/throw-new-error": "error",
190
-
191
- // typescript consistency
192
- "@typescript-eslint/consistent-type-imports": "warn",
193
- "@typescript-eslint/explicit-function-return-type": "off",
194
- "@typescript-eslint/no-require-imports": "error",
195
- },
196
- },
197
- // Node environment for config and build scripts
198
- {
199
- files: ["eslint.config.js", "vite.config.*", "*.config.*", "scripts/**"],
200
- languageOptions: {
201
- globals: {
202
- ...globals.node,
203
- },
204
- },
205
- },
206
- // Declarations: relax strictness for ambient types
207
- {
208
- files: ["**/*.d.ts"],
209
- rules: {
210
- "@typescript-eslint/no-redundant-type-constituents": "off",
211
- "@typescript-eslint/no-unsafe-member-access": "off",
212
- },
213
- },
214
- // TS-only: enable balanced type-aware rules
215
- {
216
- files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
217
- rules: {
218
- "@typescript-eslint/no-floating-promises": "error",
219
- "@typescript-eslint/no-misused-promises": [
220
- "error",
221
- { checksVoidReturn: false },
222
- ],
223
- "@typescript-eslint/await-thenable": "warn",
224
-
225
- "@typescript-eslint/no-unsafe-assignment": "off",
226
- "@typescript-eslint/no-unsafe-call": "off",
227
- "@typescript-eslint/no-unsafe-member-access": "off",
228
- "@typescript-eslint/no-unsafe-return": "off",
229
- "@typescript-eslint/no-unsafe-argument": "off",
230
-
231
- "@typescript-eslint/require-await": "off",
232
- "@typescript-eslint/no-unnecessary-type-assertion": "warn",
233
- "@typescript-eslint/no-redundant-type-constituents": "off",
234
- },
235
- },
236
- // Disable ESLint rules that would conflict with Prettier formatting
237
- configPrettier
238
- );
239
- ```
240
-
241
- ## .prettierrc
242
-
243
- ```json
244
- {
245
- "arrowParens": "always",
246
- "bracketSameLine": false,
247
- "bracketSpacing": true,
248
- "endOfLine": "lf",
249
- "jsxSingleQuote": false,
250
- "printWidth": 120,
251
- "quoteProps": "consistent",
252
- "semi": true,
253
- "singleQuote": true,
254
- "tabWidth": 2,
255
- "trailingComma": "all",
256
- "useTabs": false,
257
- "proseWrap": "preserve",
258
- "htmlWhitespaceSensitivity": "css"
259
- }
260
- ```
261
-
262
- ## .prettierignore
263
-
264
- ```
265
- dist/
266
- node_modules/
267
- *.min.js
268
- package-lock.json
269
- pnpm-lock.yaml
270
- ```
271
-
272
- ## .editorconfig
273
-
274
- ```
275
- root = true
276
-
277
- [*]
278
- charset = utf-8
279
- end_of_line = lf
280
- insert_final_newline = true
281
- indent_style = space
282
- indent_size = 2
283
- trim_trailing_whitespace = true
284
-
285
- [*.md]
286
- trim_trailing_whitespace = false
287
- ```
288
-
289
- ## .gitattributes
290
-
291
- ```
292
- * text=auto eol=lf
293
- ```
294
-
295
- ## .gitignore
296
-
297
- ```
298
- node_modules/
299
- dist/
300
- .env
301
- .env.local
302
- .env.*.local
303
- *.log
304
- .DS_Store
305
- *.tsbuildinfo
306
- ```
307
-
308
- ## .env.example
309
-
310
- ```
311
- # ArcGIS API Key
312
- # Get your API key from https://developers.arcgis.com/
313
- VITE_ARCGIS_API_KEY=your_arcgis_api_key_here
314
- ```
315
-
316
- ## .github/workflows/test.yml
317
-
318
- ```yaml
319
- name: Test
320
-
321
- on:
322
- pull_request:
323
- branches:
324
- - main
325
-
326
- permissions:
327
- contents: read
328
- issues: write
329
-
330
- concurrency:
331
- group: ${{ github.workflow }}-${{ github.ref }}
332
- cancel-in-progress: true
333
-
334
- jobs:
335
- test:
336
- runs-on: ubuntu-latest
337
- steps:
338
- - name: Checkout
339
- uses: actions/checkout@v4
340
-
341
- - name: Setup pnpm
342
- uses: pnpm/action-setup@v4
343
- with:
344
- version: 10
345
-
346
- - name: Setup Node.js
347
- uses: actions/setup-node@v4
348
- with:
349
- node-version: "24"
350
- cache: "pnpm"
351
-
352
- - name: Install dependencies
353
- run: pnpm install --frozen-lockfile
354
-
355
- - name: Security audit
356
- run: pnpm audit --audit-level=high
357
-
358
- - name: ESLint
359
- run: pnpm run lint
360
-
361
- - name: Prettier check
362
- run: pnpm run format:check
363
-
364
- - name: Annotate formatting issues
365
- if: failure()
366
- uses: actions/github-script@v7
367
- with:
368
- script: |
369
- const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
370
- const body = [
371
- 'Prettier check failed. Please run `pnpm run format` locally to fix formatting.',
372
- '',
373
- `Workflow run: ${runUrl}`,
374
- ].join('\n');
375
- if (context.payload.pull_request) {
376
- await github.rest.issues.createComment({
377
- owner: context.repo.owner,
378
- repo: context.repo.repo,
379
- issue_number: context.payload.pull_request.number,
380
- body,
381
- });
382
- } else {
383
- core.summary.addHeading('Prettier check failed');
384
- core.summary.addRaw(body);
385
- await core.summary.write();
386
- }
387
-
388
- - name: Type check
389
- run: pnpm exec tsc --noEmit
390
-
391
- - name: Build
392
- run: pnpm run build
393
- env:
394
- NODE_OPTIONS: "--max-old-space-size=4096"
395
- VITE_ARCGIS_API_KEY: ${{ secrets.VITE_ARCGIS_API_KEY }}
396
- ```
397
-
398
- ## .github/workflows/deploy.yml
399
-
400
- ```yaml
401
- name: Build & Deploy to GitHub Pages
402
-
403
- on:
404
- push:
405
- branches:
406
- - main
407
- workflow_dispatch:
408
-
409
- permissions:
410
- contents: read
411
- pages: write
412
- id-token: write
413
-
414
- concurrency:
415
- group: pages
416
- cancel-in-progress: false
417
-
418
- jobs:
419
- build:
420
- runs-on: ubuntu-latest
421
- steps:
422
- - name: Checkout
423
- uses: actions/checkout@v4
424
-
425
- - name: Setup pnpm
426
- uses: pnpm/action-setup@v4
427
- with:
428
- version: 10
429
-
430
- - name: Setup Node.js
431
- uses: actions/setup-node@v4
432
- with:
433
- node-version: "24"
434
- cache: "pnpm"
435
-
436
- - name: Install dependencies
437
- run: pnpm install --frozen-lockfile
438
-
439
- - name: Build
440
- run: pnpm run build
441
- env:
442
- NODE_OPTIONS: "--max-old-space-size=4096"
443
- VITE_ARCGIS_API_KEY: ${{ secrets.VITE_ARCGIS_API_KEY }}
444
-
445
- - name: Setup Pages
446
- uses: actions/configure-pages@v4
447
-
448
- - name: Upload artifact
449
- uses: actions/upload-pages-artifact@v3
450
- with:
451
- path: "./dist"
452
-
453
- deploy:
454
- environment:
455
- name: github-pages
456
- url: ${{ steps.deployment.outputs.page_url }}
457
- runs-on: ubuntu-latest
458
- needs: build
459
- steps:
460
- - name: Deploy to GitHub Pages
461
- id: deployment
462
- uses: actions/deploy-pages@v4
463
- ```
464
-
465
- ## index.html
466
-
467
- ```html
468
- <!DOCTYPE html>
469
- <html lang="en">
470
- <head>
471
- <meta charset="UTF-8" />
472
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
473
- <link rel="icon" type="image/svg+xml" href="/vite.svg" />
474
- <title>ArcGIS Map App</title>
475
- <link rel="stylesheet" href="/src/style.css" />
476
- </head>
477
- <body>
478
- <arcgis-scene item-id="YOUR_WEBSCENE_ID">
479
- <arcgis-zoom slot="top-left"></arcgis-zoom>
480
- <arcgis-navigation-toggle slot="top-left"></arcgis-navigation-toggle>
481
- <arcgis-compass slot="top-left"></arcgis-compass>
482
- </arcgis-scene>
483
- <script type="module" src="/src/main.ts"></script>
484
- </body>
485
- </html>
486
- ```
487
-
488
- ## src/main.ts
489
-
490
- ```typescript
491
- import "@arcgis/map-components/dist/components/arcgis-scene";
492
- import "@arcgis/map-components/dist/components/arcgis-zoom";
493
- import "@arcgis/map-components/dist/components/arcgis-navigation-toggle";
494
- import "@arcgis/map-components/dist/components/arcgis-compass";
495
-
496
- import { setAssetPath as setCalciteAssetPath } from "@esri/calcite-components/dist/components";
497
-
498
- import esriConfig from "@arcgis/core/config";
499
-
500
- // Set Calcite assets path
501
- setCalciteAssetPath("https://js.arcgis.com/calcite-components/3.3.3/assets");
502
-
503
- // Configure ArcGIS API key from environment variable
504
- esriConfig.apiKey = import.meta.env.VITE_ARCGIS_API_KEY as string;
505
-
506
- // Wait for map to be ready
507
- const arcgisScene = document.querySelector("arcgis-scene");
508
- arcgisScene?.addEventListener("arcgisViewReadyChange", (event) => {
509
- const { view } = (event as CustomEvent).detail;
510
- console.warn("Scene view ready:", view);
511
- });
512
- ```
513
-
514
- ## src/style.css
515
-
516
- ```css
517
- @import "@arcgis/core/assets/esri/themes/light/main.css";
518
-
519
- html,
520
- body {
521
- margin: 0;
522
- padding: 0;
523
- width: 100%;
524
- height: 100%;
525
- font-family: "Avenir Next", "Helvetica Neue", Helvetica, Arial, sans-serif;
526
- }
527
-
528
- arcgis-scene,
529
- #viewDiv {
530
- width: 100%;
531
- height: 100%;
532
- }
533
- ```
534
-
535
- ## tsconfig.json
536
-
537
- ```json
538
- {
539
- "compilerOptions": {
540
- "target": "ES2020",
541
- "useDefineForClassFields": true,
542
- "module": "ESNext",
543
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
544
- "skipLibCheck": true,
545
- "moduleResolution": "bundler",
546
- "allowImportingTsExtensions": true,
547
- "isolatedModules": true,
548
- "moduleDetection": "force",
549
- "noEmit": true,
550
- "strict": true,
551
- "noUnusedLocals": true,
552
- "noUnusedParameters": true,
553
- "noFallthroughCasesInSwitch": true,
554
- "noUncheckedSideEffectImports": true
555
- },
556
- "include": ["src"]
557
- }
558
- ```
559
-
560
- ## vite.config.ts
561
-
562
- ```typescript
563
- import { defineConfig } from "vite";
564
-
565
- export default defineConfig({
566
- build: { target: "esnext" },
567
- });
568
- ```
569
-
570
- ## README.md
571
-
572
- ```markdown
573
- # My ArcGIS App
574
-
575
- A web mapping application built with ArcGIS Maps SDK for JavaScript.
576
-
577
- ## Prerequisites
578
-
579
- - Node.js 20+
580
- - pnpm (recommended) or npm
581
-
582
- ## Setup
583
-
584
- 1. Install dependencies:
585
- pnpm install
586
-
587
- 2. Copy environment file and add your API key:
588
- cp .env.example .env
589
-
590
- 3. Start development server:
591
- pnpm dev
592
-
593
- 4. Build for production:
594
- pnpm build
595
-
596
- ## Scripts
597
-
598
- - `pnpm dev` - Start development server
599
- - `pnpm build` - Build for production
600
- - `pnpm preview` - Preview production build
601
- - `pnpm lint` - Run ESLint
602
- - `pnpm format` - Format code with Prettier
603
- - `pnpm format:check` - Check code formatting
604
-
605
- ## Git Hooks
606
-
607
- This project uses simple-git-hooks for automated checks:
608
-
609
- - **pre-commit**: Runs lint-staged (ESLint + Prettier)
610
- - **pre-push**: Runs TypeScript type checking
611
-
612
- ## CI/CD
613
-
614
- GitHub Actions workflows:
615
-
616
- - **test.yml**: Runs on PRs - security audit, lint, format, type check, build
617
- - **deploy.yml**: Deploys to GitHub Pages on push to main
618
-
619
- ## Configuration
620
-
621
- - **API Key**: Set `VITE_ARCGIS_API_KEY` in `.env`
622
- - **Web Scene ID**: Update `YOUR_WEBSCENE_ID` in `index.html`
623
-
624
- ## Technologies
625
-
626
- - ArcGIS Maps SDK for JavaScript
627
- - Calcite Design System
628
- - TypeScript
629
- - Vite
630
- - ESLint + Prettier
631
- - GitHub Actions
632
- ```
633
-
634
- ## Quick Start
635
-
636
- ```bash
637
- pnpm create vite my-arcgis-app --template vanilla-ts
638
- cd my-arcgis-app
639
- pnpm add @arcgis/map-components @arcgis/core @esri/calcite-components
640
- pnpm add -D eslint @eslint/js typescript-eslint eslint-config-prettier eslint-plugin-import eslint-plugin-unicorn globals prettier simple-git-hooks lint-staged
641
- pnpm run prepare
642
- pnpm dev
643
- ```