@nshiab/setup-data-project 2.0.3 → 3.0.1

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 (138) hide show
  1. package/README.md +76 -28
  2. package/dist/main.mjs +852 -0
  3. package/dist/main.mjs.map +1 -0
  4. package/package.json +29 -18
  5. package/esm/_dnt.shims.d.ts +0 -2
  6. package/esm/_dnt.shims.d.ts.map +0 -1
  7. package/esm/_dnt.shims.js +0 -57
  8. package/esm/helpers/combinePlotDocs.d.ts +0 -2
  9. package/esm/helpers/combinePlotDocs.d.ts.map +0 -1
  10. package/esm/helpers/combinePlotDocs.js +0 -111
  11. package/esm/helpers/createFolderStructure.d.ts +0 -2
  12. package/esm/helpers/createFolderStructure.d.ts.map +0 -1
  13. package/esm/helpers/createFolderStructure.js +0 -40
  14. package/esm/helpers/ensureAgents.d.ts +0 -3
  15. package/esm/helpers/ensureAgents.d.ts.map +0 -1
  16. package/esm/helpers/ensureAgents.js +0 -186
  17. package/esm/helpers/ensureEnvFile.d.ts +0 -2
  18. package/esm/helpers/ensureEnvFile.d.ts.map +0 -1
  19. package/esm/helpers/ensureEnvFile.js +0 -8
  20. package/esm/helpers/ensureGitignore.d.ts +0 -3
  21. package/esm/helpers/ensureGitignore.d.ts.map +0 -1
  22. package/esm/helpers/ensureGitignore.js +0 -24
  23. package/esm/helpers/ensureManagedSection.d.ts +0 -9
  24. package/esm/helpers/ensureManagedSection.d.ts.map +0 -1
  25. package/esm/helpers/ensureManagedSection.js +0 -33
  26. package/esm/helpers/ensureReadme.d.ts +0 -2
  27. package/esm/helpers/ensureReadme.d.ts.map +0 -1
  28. package/esm/helpers/ensureReadme.js +0 -61
  29. package/esm/helpers/fetchPackageDocs.d.ts +0 -12
  30. package/esm/helpers/fetchPackageDocs.d.ts.map +0 -1
  31. package/esm/helpers/fetchPackageDocs.js +0 -75
  32. package/esm/helpers/fetchPlotDocs.d.ts +0 -5
  33. package/esm/helpers/fetchPlotDocs.d.ts.map +0 -1
  34. package/esm/helpers/fetchPlotDocs.js +0 -103
  35. package/esm/helpers/getInstalledPackageVersions.d.ts +0 -2
  36. package/esm/helpers/getInstalledPackageVersions.d.ts.map +0 -1
  37. package/esm/helpers/getInstalledPackageVersions.js +0 -94
  38. package/esm/helpers/getProjectTasks.d.ts +0 -6
  39. package/esm/helpers/getProjectTasks.d.ts.map +0 -1
  40. package/esm/helpers/getProjectTasks.js +0 -17
  41. package/esm/helpers/getRuntime.d.ts +0 -5
  42. package/esm/helpers/getRuntime.d.ts.map +0 -1
  43. package/esm/helpers/getRuntime.js +0 -19
  44. package/esm/helpers/gitignoreEntries.d.ts +0 -2
  45. package/esm/helpers/gitignoreEntries.d.ts.map +0 -1
  46. package/esm/helpers/gitignoreEntries.js +0 -10
  47. package/esm/helpers/installPackages.d.ts +0 -7
  48. package/esm/helpers/installPackages.d.ts.map +0 -1
  49. package/esm/helpers/installPackages.js +0 -49
  50. package/esm/helpers/packageOptions.d.ts +0 -6
  51. package/esm/helpers/packageOptions.d.ts.map +0 -1
  52. package/esm/helpers/packageOptions.js +0 -6
  53. package/esm/helpers/packageRegistry.d.ts +0 -10
  54. package/esm/helpers/packageRegistry.d.ts.map +0 -1
  55. package/esm/helpers/packageRegistry.js +0 -89
  56. package/esm/helpers/parseArguments.d.ts +0 -7
  57. package/esm/helpers/parseArguments.d.ts.map +0 -1
  58. package/esm/helpers/parseArguments.js +0 -30
  59. package/esm/helpers/plotDocPages.d.ts +0 -2
  60. package/esm/helpers/plotDocPages.d.ts.map +0 -1
  61. package/esm/helpers/plotDocPages.js +0 -46
  62. package/esm/helpers/projectManifest.d.ts +0 -12
  63. package/esm/helpers/projectManifest.d.ts.map +0 -1
  64. package/esm/helpers/projectManifest.js +0 -80
  65. package/esm/helpers/syncPackageDocs.d.ts +0 -3
  66. package/esm/helpers/syncPackageDocs.d.ts.map +0 -1
  67. package/esm/helpers/syncPackageDocs.js +0 -50
  68. package/esm/main.d.ts +0 -3
  69. package/esm/main.d.ts.map +0 -1
  70. package/esm/main.js +0 -104
  71. package/esm/package.json +0 -3
  72. package/script/_dnt.shims.d.ts +0 -2
  73. package/script/_dnt.shims.d.ts.map +0 -1
  74. package/script/_dnt.shims.js +0 -60
  75. package/script/helpers/combinePlotDocs.d.ts +0 -2
  76. package/script/helpers/combinePlotDocs.d.ts.map +0 -1
  77. package/script/helpers/combinePlotDocs.js +0 -114
  78. package/script/helpers/createFolderStructure.d.ts +0 -2
  79. package/script/helpers/createFolderStructure.d.ts.map +0 -1
  80. package/script/helpers/createFolderStructure.js +0 -43
  81. package/script/helpers/ensureAgents.d.ts +0 -3
  82. package/script/helpers/ensureAgents.d.ts.map +0 -1
  83. package/script/helpers/ensureAgents.js +0 -189
  84. package/script/helpers/ensureEnvFile.d.ts +0 -2
  85. package/script/helpers/ensureEnvFile.d.ts.map +0 -1
  86. package/script/helpers/ensureEnvFile.js +0 -11
  87. package/script/helpers/ensureGitignore.d.ts +0 -3
  88. package/script/helpers/ensureGitignore.d.ts.map +0 -1
  89. package/script/helpers/ensureGitignore.js +0 -28
  90. package/script/helpers/ensureManagedSection.d.ts +0 -9
  91. package/script/helpers/ensureManagedSection.d.ts.map +0 -1
  92. package/script/helpers/ensureManagedSection.js +0 -36
  93. package/script/helpers/ensureReadme.d.ts +0 -2
  94. package/script/helpers/ensureReadme.d.ts.map +0 -1
  95. package/script/helpers/ensureReadme.js +0 -64
  96. package/script/helpers/fetchPackageDocs.d.ts +0 -12
  97. package/script/helpers/fetchPackageDocs.d.ts.map +0 -1
  98. package/script/helpers/fetchPackageDocs.js +0 -78
  99. package/script/helpers/fetchPlotDocs.d.ts +0 -5
  100. package/script/helpers/fetchPlotDocs.d.ts.map +0 -1
  101. package/script/helpers/fetchPlotDocs.js +0 -106
  102. package/script/helpers/getInstalledPackageVersions.d.ts +0 -2
  103. package/script/helpers/getInstalledPackageVersions.d.ts.map +0 -1
  104. package/script/helpers/getInstalledPackageVersions.js +0 -97
  105. package/script/helpers/getProjectTasks.d.ts +0 -6
  106. package/script/helpers/getProjectTasks.d.ts.map +0 -1
  107. package/script/helpers/getProjectTasks.js +0 -20
  108. package/script/helpers/getRuntime.d.ts +0 -5
  109. package/script/helpers/getRuntime.d.ts.map +0 -1
  110. package/script/helpers/getRuntime.js +0 -59
  111. package/script/helpers/gitignoreEntries.d.ts +0 -2
  112. package/script/helpers/gitignoreEntries.d.ts.map +0 -1
  113. package/script/helpers/gitignoreEntries.js +0 -13
  114. package/script/helpers/installPackages.d.ts +0 -7
  115. package/script/helpers/installPackages.d.ts.map +0 -1
  116. package/script/helpers/installPackages.js +0 -86
  117. package/script/helpers/packageOptions.d.ts +0 -6
  118. package/script/helpers/packageOptions.d.ts.map +0 -1
  119. package/script/helpers/packageOptions.js +0 -9
  120. package/script/helpers/packageRegistry.d.ts +0 -10
  121. package/script/helpers/packageRegistry.d.ts.map +0 -1
  122. package/script/helpers/packageRegistry.js +0 -93
  123. package/script/helpers/parseArguments.d.ts +0 -7
  124. package/script/helpers/parseArguments.d.ts.map +0 -1
  125. package/script/helpers/parseArguments.js +0 -34
  126. package/script/helpers/plotDocPages.d.ts +0 -2
  127. package/script/helpers/plotDocPages.d.ts.map +0 -1
  128. package/script/helpers/plotDocPages.js +0 -49
  129. package/script/helpers/projectManifest.d.ts +0 -12
  130. package/script/helpers/projectManifest.d.ts.map +0 -1
  131. package/script/helpers/projectManifest.js +0 -84
  132. package/script/helpers/syncPackageDocs.d.ts +0 -3
  133. package/script/helpers/syncPackageDocs.d.ts.map +0 -1
  134. package/script/helpers/syncPackageDocs.js +0 -53
  135. package/script/main.d.ts +0 -3
  136. package/script/main.d.ts.map +0 -1
  137. package/script/main.js +0 -109
  138. package/script/package.json +0 -3
@@ -1,94 +0,0 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- export function getInstalledPackageVersions(packageSpecifiers) {
4
- const denoLock = readJsonFile("deno.lock");
5
- const packageLock = readJsonFile("package-lock.json");
6
- const bunLock = existsSync("bun.lock")
7
- ? readFileSync("bun.lock", "utf-8")
8
- : undefined;
9
- const versions = {};
10
- for (const [pkg, specifier] of Object.entries(packageSpecifiers)) {
11
- const denoVersion = specifier.startsWith("jsr:") || specifier.startsWith("npm:")
12
- ? getDenoLockVersion(pkg, specifier, denoLock)
13
- : undefined;
14
- const version = specifier.startsWith("jsr:")
15
- ? denoVersion ?? getExactVersion(specifier)
16
- : denoVersion ?? getNodeModulesVersion(pkg) ??
17
- getPackageLockVersion(pkg, packageLock) ??
18
- getBunLockVersion(pkg, bunLock) ??
19
- getExactVersion(specifier);
20
- if (version !== undefined) {
21
- versions[pkg] = version;
22
- }
23
- }
24
- return versions;
25
- }
26
- function getNodeModulesVersion(pkg) {
27
- const packageJson = readJsonFile(join("node_modules", ...pkg.split("/"), "package.json"));
28
- return typeof packageJson?.version === "string"
29
- ? getExactVersion(packageJson.version)
30
- : undefined;
31
- }
32
- function getDenoLockVersion(pkg, specifier, lock) {
33
- if (!lock)
34
- return undefined;
35
- const specifiers = asObject(lock.specifiers);
36
- if (!specifiers)
37
- return undefined;
38
- const directVersion = specifiers[specifier];
39
- if (typeof directVersion === "string")
40
- return getExactVersion(directVersion);
41
- const protocol = specifier.startsWith("npm:") ? "npm" : "jsr";
42
- const prefix = `${protocol}:${pkg}@`;
43
- const matchingVersions = Object.entries(specifiers)
44
- .filter(([key, value]) => key.startsWith(prefix) && typeof value === "string")
45
- .flatMap(([, value]) => {
46
- const version = getExactVersion(value);
47
- return version === undefined ? [] : [version];
48
- });
49
- const uniqueVersions = [...new Set(matchingVersions)];
50
- return uniqueVersions.length === 1 ? uniqueVersions[0] : undefined;
51
- }
52
- function getPackageLockVersion(pkg, lock) {
53
- if (!lock)
54
- return undefined;
55
- const packages = asObject(lock.packages);
56
- const packageEntry = packages
57
- ? asObject(packages[`node_modules/${pkg}`])
58
- : undefined;
59
- if (typeof packageEntry?.version === "string") {
60
- return getExactVersion(packageEntry.version);
61
- }
62
- const dependencies = asObject(lock.dependencies);
63
- const dependencyEntry = dependencies
64
- ? asObject(dependencies[pkg])
65
- : undefined;
66
- return typeof dependencyEntry?.version === "string"
67
- ? getExactVersion(dependencyEntry.version)
68
- : undefined;
69
- }
70
- function getBunLockVersion(pkg, lock) {
71
- if (!lock)
72
- return undefined;
73
- const escapedPackage = pkg.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
74
- const match = lock.match(new RegExp(`"${escapedPackage}"\\s*:\\s*\\[\\s*"${escapedPackage}@(\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?)"`));
75
- return match?.[1];
76
- }
77
- function getExactVersion(specifier) {
78
- return specifier.match(/(?:^|@)(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/)?.[1];
79
- }
80
- function readJsonFile(path) {
81
- if (!existsSync(path))
82
- return undefined;
83
- try {
84
- return asObject(JSON.parse(readFileSync(path, "utf-8")));
85
- }
86
- catch {
87
- return undefined;
88
- }
89
- }
90
- function asObject(value) {
91
- return value !== null && typeof value === "object" && !Array.isArray(value)
92
- ? value
93
- : undefined;
94
- }
@@ -1,6 +0,0 @@
1
- export declare function getProjectTasks(): {
2
- sda: string;
3
- "all-tests": string;
4
- clean: string;
5
- };
6
- //# sourceMappingURL=getProjectTasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProjectTasks.d.ts","sourceRoot":"","sources":["../../src/helpers/getProjectTasks.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe;;;;EAgB9B"}
@@ -1,17 +0,0 @@
1
- import { getRuntime } from "./getRuntime.js";
2
- export function getProjectTasks() {
3
- const runtime = getRuntime();
4
- return {
5
- sda: runtime === "deno"
6
- ? "deno run -A --env --watch --check sda/main.ts"
7
- : runtime === "bun"
8
- ? "bun run --watch sda/main.ts"
9
- : "node --env-file-if-exists=.env --watch --experimental-strip-types sda/main.ts",
10
- "all-tests": runtime === "deno"
11
- ? "deno fmt --check sda && deno lint && deno check sda/main.ts && deno test -A --permit-no-files"
12
- : runtime === "bun"
13
- ? "bun test --pass-with-no-tests"
14
- : "node --env-file-if-exists=.env --experimental-strip-types --test",
15
- clean: "rm -rf .sda-cache .journalism-cache .tmp",
16
- };
17
- }
@@ -1,5 +0,0 @@
1
- export declare const runtimeConfig: {
2
- getRuntime: () => "node" | "bun" | "deno";
3
- };
4
- export declare function getRuntime(): "node" | "bun" | "deno";
5
- //# sourceMappingURL=getRuntime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getRuntime.d.ts","sourceRoot":"","sources":["../../src/helpers/getRuntime.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;;CAazB,CAAC;AAEF,wBAAgB,UAAU,4BAEzB"}
@@ -1,19 +0,0 @@
1
- import * as dntShim from "../_dnt.shims.js";
2
- import process from "node:process";
3
- export const runtimeConfig = {
4
- getRuntime: () => {
5
- if (typeof process !== "undefined" &&
6
- process?.versions?.node &&
7
- !process?.versions?.deno) {
8
- return "node";
9
- }
10
- if ("Bun" in dntShim.dntGlobalThis)
11
- return "bun";
12
- if ("Deno" in dntShim.dntGlobalThis)
13
- return "deno";
14
- return "node";
15
- },
16
- };
17
- export function getRuntime() {
18
- return runtimeConfig.getRuntime();
19
- }
@@ -1,2 +0,0 @@
1
- export declare const GITIGNORE_ENTRIES: string[];
2
- //# sourceMappingURL=gitignoreEntries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitignoreEntries.d.ts","sourceRoot":"","sources":["../../src/helpers/gitignoreEntries.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,UAS7B,CAAC"}
@@ -1,10 +0,0 @@
1
- export const GITIGNORE_ENTRIES = [
2
- "node_modules",
3
- ".tmp",
4
- ".sda-cache",
5
- ".journalism-cache",
6
- "sda/data",
7
- "sda/output",
8
- ".env",
9
- ".DS_Store",
10
- ];
@@ -1,7 +0,0 @@
1
- export declare const commandRunner: {
2
- exec: any;
3
- };
4
- export declare function installPackages(selectedPackages: string[], options?: {
5
- silent?: boolean;
6
- }): Promise<void>;
7
- //# sourceMappingURL=installPackages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installPackages.d.ts","sourceRoot":"","sources":["../../src/helpers/installPackages.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa;;CAEzB,CAAC;AAEF,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -1,49 +0,0 @@
1
- import { spinner } from "@clack/prompts";
2
- import * as childProcess from "node:child_process";
3
- import { getRuntime } from "./getRuntime.js";
4
- export const commandRunner = {
5
- exec: childProcess.exec,
6
- };
7
- export async function installPackages(selectedPackages, options = {}) {
8
- const runtime = getRuntime();
9
- for (const selectedPackage of selectedPackages) {
10
- const packagesToInstall = [selectedPackage];
11
- if (selectedPackage === "@nshiab/simple-data-analysis" ||
12
- selectedPackage === "@nshiab/journalism-dataviz") {
13
- packagesToInstall.push("@observablehq/plot");
14
- }
15
- for (const pkg of packagesToInstall) {
16
- const s = spinner();
17
- const isObservablePlot = pkg === "@observablehq/plot";
18
- const installCmd = runtime === "deno"
19
- ? (isObservablePlot ? "deno add npm:" + pkg : "deno add jsr:" + pkg)
20
- : runtime === "bun"
21
- ? "bun add " + pkg
22
- : "npm install " + pkg;
23
- if (!options.silent) {
24
- s.start("Installing " + pkg + " via " + runtime + "...");
25
- }
26
- try {
27
- await new Promise((resolve, reject) => {
28
- commandRunner.exec(installCmd, (error) => {
29
- if (error) {
30
- reject(error);
31
- }
32
- else {
33
- resolve();
34
- }
35
- });
36
- });
37
- if (!options.silent) {
38
- s.stop("✅ " + pkg + " installed!");
39
- }
40
- }
41
- catch (error) {
42
- if (!options.silent) {
43
- s.stop("❌ Failed to install " + pkg + ".");
44
- }
45
- throw error;
46
- }
47
- }
48
- }
49
- }
@@ -1,6 +0,0 @@
1
- export declare const PACKAGE_OPTIONS: {
2
- value: string;
3
- label: string;
4
- hint: string | undefined;
5
- }[];
6
- //# sourceMappingURL=packageOptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageOptions.d.ts","sourceRoot":"","sources":["../../src/helpers/packageOptions.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;;GAIzB,CAAC"}
@@ -1,6 +0,0 @@
1
- import { SUPPORTED_PACKAGES } from "./packageRegistry.js";
2
- export const PACKAGE_OPTIONS = SUPPORTED_PACKAGES.map((pkg) => ({
3
- value: pkg.value,
4
- label: pkg.label,
5
- hint: pkg.hint,
6
- }));
@@ -1,10 +0,0 @@
1
- export interface PackageConfig {
2
- value: string;
3
- label: string;
4
- type: "sda" | "journalism" | "other";
5
- hint?: string;
6
- }
7
- export declare const SUPPORTED_PACKAGES: PackageConfig[];
8
- export declare const DOCUMENTED_PACKAGES: PackageConfig[];
9
- export declare function getInstalledPackageConfigs(installedPackages: string[]): PackageConfig[];
10
- //# sourceMappingURL=packageRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageRegistry.d.ts","sourceRoot":"","sources":["../../src/helpers/packageRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,OAAO,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAwF7C,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,aAAa,EAG9C,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,EAAE,GAC1B,aAAa,EAAE,CAGjB"}
@@ -1,89 +0,0 @@
1
- export const SUPPORTED_PACKAGES = [
2
- {
3
- value: "@nshiab/simple-data-analysis",
4
- label: "simple-data-analysis",
5
- type: "sda",
6
- hint: "All the core functionality, plus methods for dataviz, AI, Google sheets, etc.",
7
- },
8
- {
9
- value: "@nshiab/simple-data-analysis-core",
10
- label: "simple-data-analysis-core",
11
- type: "sda",
12
- hint: "No fluff. Great for constrained environments, like a cheap server.",
13
- },
14
- {
15
- value: "@nshiab/journalism-ai",
16
- label: "journalism-ai",
17
- type: "journalism",
18
- hint: "Easily use AI local models with Ollama or remote models with Gemini/Vertex.",
19
- },
20
- {
21
- value: "@nshiab/journalism-google",
22
- label: "journalism-google",
23
- type: "journalism",
24
- hint: "Push and retrieve data from Google Sheets, Google Bucket, and more.",
25
- },
26
- {
27
- value: "@nshiab/journalism-web-scraping",
28
- label: "journalism-web-scraping",
29
- type: "journalism",
30
- hint: "Retrieve data from Statistics Canada tables, HTML table, download files...",
31
- },
32
- {
33
- value: "@nshiab/journalism-finance",
34
- label: "journalism-finance",
35
- type: "journalism",
36
- hint: "Retrieve financial data, calculate Canadian mortgage payments and taxes...",
37
- },
38
- {
39
- value: "@nshiab/journalism-format",
40
- label: "journalism-format",
41
- type: "journalism",
42
- hint: "Easily format dates, numbers, currencies...",
43
- },
44
- {
45
- value: "@nshiab/journalism-climate",
46
- label: "journalism-climate",
47
- type: "journalism",
48
- hint: "Retrieve data from Environment Canada APIs and more.",
49
- },
50
- {
51
- value: "@nshiab/journalism-dataviz",
52
- label: "journalism-dataviz",
53
- type: "journalism",
54
- hint: "Render charts/maps with Observable Plot or directly in the terminal.",
55
- },
56
- {
57
- value: "@nshiab/journalism-geo",
58
- label: "journalism-geo",
59
- type: "journalism",
60
- hint: "Calculate distances, transform 2D coordinates to 3D, wrangle GeoTIFF files...",
61
- },
62
- {
63
- value: "@nshiab/journalism-statistics",
64
- label: "journalism-statistics",
65
- type: "journalism",
66
- hint: "Functions for statistical tests, clustering, random path generation...",
67
- },
68
- {
69
- value: "@nshiab/journalism-web",
70
- label: "journalism-web",
71
- type: "journalism",
72
- hint: "Web related functions, including downloading data as CSV, extracting ZIP files to URLs...",
73
- },
74
- {
75
- value: "@nshiab/journalism-extras",
76
- label: "journalism-extras",
77
- type: "journalism",
78
- hint: "Functions to zip/unzip, sleep, reencode files, create nested directories...",
79
- },
80
- ];
81
- // Plot is installed alongside charting libraries, but is not a setup menu option.
82
- export const DOCUMENTED_PACKAGES = [
83
- ...SUPPORTED_PACKAGES,
84
- { value: "@observablehq/plot", label: "Observable Plot", type: "other" },
85
- ];
86
- export function getInstalledPackageConfigs(installedPackages) {
87
- const installedSet = new Set(installedPackages);
88
- return DOCUMENTED_PACKAGES.filter((pkg) => installedSet.has(pkg.value));
89
- }
@@ -1,7 +0,0 @@
1
- export interface CliOptions {
2
- help: boolean;
3
- package?: string;
4
- }
5
- export declare const CLI_HELP = "Usage: setup-data-project [--sda | --sda-core] [--help]\n\n --sda Select simple-data-analysis without prompting.\n --sda-core Select simple-data-analysis-core without prompting.\n -h, --help Show this help and exit.\n\nWithout a package flag, choose packages interactively.\nPackage flags keep existing versions and still set up project files and docs.\n--sda and --sda-core cannot be combined.";
6
- export declare function parseArguments(args: string[]): CliOptions;
7
- //# sourceMappingURL=parseArguments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseArguments.d.ts","sourceRoot":"","sources":["../../src/helpers/parseArguments.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ,0ZAQoB,CAAC;AAE1C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoBzD"}
@@ -1,30 +0,0 @@
1
- export const CLI_HELP = `Usage: setup-data-project [--sda | --sda-core] [--help]
2
-
3
- --sda Select simple-data-analysis without prompting.
4
- --sda-core Select simple-data-analysis-core without prompting.
5
- -h, --help Show this help and exit.
6
-
7
- Without a package flag, choose packages interactively.
8
- Package flags keep existing versions and still set up project files and docs.
9
- --sda and --sda-core cannot be combined.`;
10
- export function parseArguments(args) {
11
- const options = { help: false };
12
- for (const arg of args) {
13
- if (arg === "--help" || arg === "-h") {
14
- options.help = true;
15
- }
16
- else if (arg === "--sda" || arg === "--sda-core") {
17
- const pkg = arg === "--sda"
18
- ? "@nshiab/simple-data-analysis"
19
- : "@nshiab/simple-data-analysis-core";
20
- if (options.package && options.package !== pkg) {
21
- throw new Error("--sda and --sda-core cannot be combined.");
22
- }
23
- options.package = pkg;
24
- }
25
- else {
26
- throw new Error(`Unknown argument: ${arg}. Use --help for usage.`);
27
- }
28
- }
29
- return options;
30
- }
@@ -1,2 +0,0 @@
1
- export declare const PLOT_DOC_PAGES: string[];
2
- //# sourceMappingURL=plotDocPages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plotDocPages.d.ts","sourceRoot":"","sources":["../../src/helpers/plotDocPages.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,EAAE,MAAM,EA2C3B,CAAC"}
@@ -1,46 +0,0 @@
1
- // Static chart creation references. Keep this explicit so new upstream pages do
2
- // not silently expand the installed agent reference.
3
- export const PLOT_DOC_PAGES = [
4
- "features/plots.md",
5
- "features/marks.md",
6
- "features/scales.md",
7
- "features/projections.md",
8
- "features/legends.md",
9
- "features/facets.md",
10
- "features/formats.md",
11
- "features/curves.md",
12
- "transforms/bin.md",
13
- "transforms/group.md",
14
- "transforms/stack.md",
15
- "transforms/normalize.md",
16
- "transforms/centroid.md",
17
- "transforms/sort.md",
18
- "marks/area.md",
19
- "marks/arrow.md",
20
- "marks/axis.md",
21
- "marks/bar.md",
22
- "marks/bollinger.md",
23
- "marks/box.md",
24
- "marks/cell.md",
25
- "marks/contour.md",
26
- "marks/delaunay.md",
27
- "marks/density.md",
28
- "marks/difference.md",
29
- "marks/dot.md",
30
- "marks/frame.md",
31
- "marks/geo.md",
32
- "marks/grid.md",
33
- "marks/hexgrid.md",
34
- "marks/image.md",
35
- "marks/line.md",
36
- "marks/linear-regression.md",
37
- "marks/link.md",
38
- "marks/raster.md",
39
- "marks/rect.md",
40
- "marks/rule.md",
41
- "marks/text.md",
42
- "marks/tick.md",
43
- "marks/tree.md",
44
- "marks/vector.md",
45
- "marks/waffle.md",
46
- ].sort();
@@ -1,12 +0,0 @@
1
- type Runtime = "deno" | "node" | "bun";
2
- export declare class ProjectManifest {
3
- #private;
4
- private constructor();
5
- static open(runtime: Runtime): ProjectManifest;
6
- reload(): void;
7
- getInstalledPackages(): string[];
8
- getInstalledPackageSpecifiers(): Record<string, string>;
9
- updateTasks(tasks: Record<string, string>): void;
10
- }
11
- export {};
12
- //# sourceMappingURL=projectManifest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectManifest.d.ts","sourceRoot":"","sources":["../../src/helpers/projectManifest.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAGvC,qBAAa,eAAe;;IAM1B,OAAO;IAYP,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe;IA6B9C,MAAM,IAAI,IAAI;IAId,oBAAoB,IAAI,MAAM,EAAE;IAIhC,6BAA6B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoBvD,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;CAcjD"}
@@ -1,80 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _ProjectManifest_path, _ProjectManifest_taskKey, _ProjectManifest_dependencyKeys, _ProjectManifest_config;
13
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
14
- export class ProjectManifest {
15
- constructor(path, taskKey, dependencyKeys, config) {
16
- _ProjectManifest_path.set(this, void 0);
17
- _ProjectManifest_taskKey.set(this, void 0);
18
- _ProjectManifest_dependencyKeys.set(this, void 0);
19
- _ProjectManifest_config.set(this, void 0);
20
- __classPrivateFieldSet(this, _ProjectManifest_path, path, "f");
21
- __classPrivateFieldSet(this, _ProjectManifest_taskKey, taskKey, "f");
22
- __classPrivateFieldSet(this, _ProjectManifest_dependencyKeys, dependencyKeys, "f");
23
- __classPrivateFieldSet(this, _ProjectManifest_config, config, "f");
24
- }
25
- static open(runtime) {
26
- if (existsSync("deno.json")) {
27
- return new ProjectManifest("deno.json", "tasks", ["imports"], readManifest("deno.json"));
28
- }
29
- if (existsSync("package.json")) {
30
- return new ProjectManifest("package.json", "scripts", ["dependencies", "devDependencies"], readManifest("package.json"));
31
- }
32
- return runtime === "deno"
33
- ? new ProjectManifest("deno.json", "tasks", ["imports"], { tasks: {} })
34
- : new ProjectManifest("package.json", "scripts", ["dependencies", "devDependencies"], { name: "data-project", type: "module", scripts: {} });
35
- }
36
- reload() {
37
- __classPrivateFieldSet(this, _ProjectManifest_config, readManifest(__classPrivateFieldGet(this, _ProjectManifest_path, "f")), "f");
38
- }
39
- getInstalledPackages() {
40
- return Object.keys(this.getInstalledPackageSpecifiers());
41
- }
42
- getInstalledPackageSpecifiers() {
43
- const installed = {};
44
- for (const key of __classPrivateFieldGet(this, _ProjectManifest_dependencyKeys, "f")) {
45
- const dependencies = __classPrivateFieldGet(this, _ProjectManifest_config, "f")[key];
46
- if (dependencies && typeof dependencies === "object" &&
47
- !Array.isArray(dependencies)) {
48
- for (const [name, specifier] of Object.entries(dependencies)) {
49
- if (typeof specifier === "string") {
50
- installed[name] = specifier;
51
- }
52
- }
53
- }
54
- }
55
- return installed;
56
- }
57
- updateTasks(tasks) {
58
- const currentTasks = __classPrivateFieldGet(this, _ProjectManifest_config, "f")[__classPrivateFieldGet(this, _ProjectManifest_taskKey, "f")];
59
- const existingTasks = currentTasks && typeof currentTasks === "object" &&
60
- !Array.isArray(currentTasks)
61
- ? currentTasks
62
- : {};
63
- __classPrivateFieldGet(this, _ProjectManifest_config, "f")[__classPrivateFieldGet(this, _ProjectManifest_taskKey, "f")] = { ...existingTasks, ...tasks };
64
- writeFileSync(__classPrivateFieldGet(this, _ProjectManifest_path, "f"), JSON.stringify(__classPrivateFieldGet(this, _ProjectManifest_config, "f"), null, 2) + "\n", "utf-8");
65
- }
66
- }
67
- _ProjectManifest_path = new WeakMap(), _ProjectManifest_taskKey = new WeakMap(), _ProjectManifest_dependencyKeys = new WeakMap(), _ProjectManifest_config = new WeakMap();
68
- function readManifest(path) {
69
- try {
70
- const parsed = JSON.parse(readFileSync(path, "utf-8"));
71
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
72
- throw new SyntaxError("the root value must be a JSON object");
73
- }
74
- return parsed;
75
- }
76
- catch (error) {
77
- const detail = error instanceof Error ? ` ${error.message}` : "";
78
- throw new Error(`Failed to parse ${path}.${detail}`, { cause: error });
79
- }
80
- }
@@ -1,3 +0,0 @@
1
- import { type PackageDocs } from "./fetchPackageDocs.js";
2
- export declare function syncPackageDocs(installedPackages: string[], installedVersions: Record<string, string>): Promise<Record<string, PackageDocs>>;
3
- //# sourceMappingURL=syncPackageDocs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncPackageDocs.d.ts","sourceRoot":"","sources":["../../src/helpers/syncPackageDocs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI3E,wBAAsB,eAAe,CACnC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAkDtC"}
@@ -1,50 +0,0 @@
1
- import { log } from "@clack/prompts";
2
- import { existsSync, mkdirSync, renameSync, rmSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { fetchPackageDocs } from "./fetchPackageDocs.js";
5
- import { fetchPlotDocs } from "./fetchPlotDocs.js";
6
- import { DOCUMENTED_PACKAGES } from "./packageRegistry.js";
7
- export async function syncPackageDocs(installedPackages, installedVersions) {
8
- const installedSet = new Set(installedPackages);
9
- const docsMapping = {};
10
- for (const pkg of DOCUMENTED_PACKAGES) {
11
- const isPlot = pkg.value === "@observablehq/plot";
12
- const repoName = isPlot ? "observable-plot" : pkg.value.split("/")[1];
13
- const docsDirectory = join("docs", repoName);
14
- const llmDocsPath = join(docsDirectory, "llm.md");
15
- const legacyDocsPath = join("docs", repoName + ".md");
16
- if (!installedSet.has(pkg.value)) {
17
- for (const path of [docsDirectory, legacyDocsPath]) {
18
- if (existsSync(path)) {
19
- rmSync(path, { recursive: true });
20
- log.info(`Removed stale documentation at ${path}.`);
21
- }
22
- }
23
- continue;
24
- }
25
- if (existsSync(legacyDocsPath)) {
26
- if (!existsSync(llmDocsPath)) {
27
- mkdirSync(docsDirectory, { recursive: true });
28
- renameSync(legacyDocsPath, llmDocsPath);
29
- log.info(`Moved documentation to ${llmDocsPath}.`);
30
- }
31
- else {
32
- rmSync(legacyDocsPath);
33
- }
34
- }
35
- const version = installedVersions[pkg.value];
36
- if (version === undefined) {
37
- log.warn(`Could not determine the exact installed version of ${pkg.value}. ` +
38
- "Existing local documentation was preserved but will not be " +
39
- "included in AGENTS.md.");
40
- continue;
41
- }
42
- const docs = isPlot
43
- ? await fetchPlotDocs(version)
44
- : await fetchPackageDocs(pkg.value, version, { silent: true });
45
- if (docs.readme !== undefined || docs.llm !== undefined || docs.plot) {
46
- docsMapping[pkg.value] = docs;
47
- }
48
- }
49
- return docsMapping;
50
- }
package/esm/main.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=main.d.ts.map
package/esm/main.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}