@nika-js/onlymap 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.
- package/.vscode/onlymap.code-snippets +173 -0
- package/LICENSE.md +133 -0
- package/README.md +188 -0
- package/bin/onlymapjs.mjs +182 -0
- package/dist/Arrow.dom-7AXne1TU.js +5233 -0
- package/dist/actions.d.ts +30 -0
- package/dist/attribute-resolution.d.ts +73 -0
- package/dist/basemap-D95W0IIA.js +25203 -0
- package/dist/basemap.d.ts +72 -0
- package/dist/convert-arrow-schema-CvZ3cT5m.js +94 -0
- package/dist/csp-sandbox.d.ts +20 -0
- package/dist/ctx.d.ts +49 -0
- package/dist/d3-bundle.d.ts +218 -0
- package/dist/data-emit.d.ts +10 -0
- package/dist/data-layer.d.ts +150 -0
- package/dist/declarative-filter.d.ts +12 -0
- package/dist/dev-error-panel.d.ts +15 -0
- package/dist/draw-controller.d.ts +51 -0
- package/dist/draw.d.ts +102 -0
- package/dist/effects.d.ts +39 -0
- package/dist/elements/om-behavior.d.ts +13 -0
- package/dist/elements/om-layer.d.ts +11 -0
- package/dist/elements/om-map.d.ts +168 -0
- package/dist/elements/om-overlay.d.ts +82 -0
- package/dist/elements/om-step.d.ts +12 -0
- package/dist/elements/om-story.d.ts +67 -0
- package/dist/elements/om-widget.d.ts +29 -0
- package/dist/env.d.ts +41 -0
- package/dist/expr/cache.d.ts +28 -0
- package/dist/expr/compile.d.ts +27 -0
- package/dist/expr/errors.d.ts +10 -0
- package/dist/expr/full-js-block.d.ts +17 -0
- package/dist/expr/index.d.ts +12 -0
- package/dist/expr/output-type.d.ts +12 -0
- package/dist/expr/scale.d.ts +13 -0
- package/dist/expr/script-block.d.ts +16 -0
- package/dist/expr/whitelist.d.ts +28 -0
- package/dist/field-access.d.ts +24 -0
- package/dist/html-data.d.ts +25 -0
- package/dist/index-2v2NXF_n.js +435 -0
- package/dist/index-BFjXVHly.js +605 -0
- package/dist/index-C9w78NS9.js +4883 -0
- package/dist/index-CU-iOTdr.js +75292 -0
- package/dist/index-D74olQ9w.js +3907 -0
- package/dist/index-Do7hmHwi.js +1457 -0
- package/dist/index.d.ts +76 -0
- package/dist/ir-snapshot.d.ts +54 -0
- package/dist/ir.d.ts +66 -0
- package/dist/layer-registry.d.ts +27 -0
- package/dist/layers/popup-layer.d.ts +65 -0
- package/dist/onlymapjs.css +1 -0
- package/dist/onlymapjs.js +30 -0
- package/dist/onlymapjs.umd.cjs +8618 -0
- package/dist/parse-manifest.d.ts +19 -0
- package/dist/recordbatch-HRu0SMKp.js +4742 -0
- package/dist/runtime-core.d.ts +170 -0
- package/dist/selection.d.ts +31 -0
- package/dist/stats.d.ts +29 -0
- package/dist/table-accessors-DBjWgN0C.js +204 -0
- package/dist/template-interpolation.d.ts +6 -0
- package/dist/testing.d.ts +90 -0
- package/dist/timeline.d.ts +37 -0
- package/dist/validation.d.ts +22 -0
- package/dist/vega-loader.d.ts +22 -0
- package/dist/viewport-filter.d.ts +25 -0
- package/dist/widget-registry.d.ts +23 -0
- package/dist/widget-script.d.ts +1 -0
- package/dist/widgets/built-in.d.ts +1 -0
- package/dist/widgets/dom-utils.d.ts +4 -0
- package/llms.txt +43 -0
- package/onlymapjs.html-data.json +1688 -0
- package/package.json +111 -0
- package/skills/onlymapjs/SKILL.md +61 -0
- package/skills/onlymapjs/agents/openai.yaml +4 -0
- package/skills/onlymapjs/references/patterns.md +213 -0
- package/skills/onlymapjs/references/syntax.md +342 -0
- package/skills/onlymapjs/references/testing.md +126 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const CUSTOM_DATA = "./node_modules/@nika-js/onlymap/onlymapjs.html-data.json";
|
|
7
|
+
const SNIPPET_FILE = "onlymap.code-snippets";
|
|
8
|
+
|
|
9
|
+
function usage() {
|
|
10
|
+
console.log(`Usage:
|
|
11
|
+
onlymapjs init [--force]
|
|
12
|
+
onlymapjs --help
|
|
13
|
+
|
|
14
|
+
Commands:
|
|
15
|
+
init Configure the current project for OnlyMapJS authoring in VS Code.
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
--force Overwrite .vscode/${SNIPPET_FILE} if it already exists.
|
|
19
|
+
`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function parseJsonc(text) {
|
|
23
|
+
let out = "";
|
|
24
|
+
let inString = false;
|
|
25
|
+
let quote = "";
|
|
26
|
+
let escaped = false;
|
|
27
|
+
|
|
28
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
29
|
+
const ch = text[i];
|
|
30
|
+
const next = text[i + 1];
|
|
31
|
+
|
|
32
|
+
if (inString) {
|
|
33
|
+
out += ch;
|
|
34
|
+
if (escaped) {
|
|
35
|
+
escaped = false;
|
|
36
|
+
} else if (ch === "\\") {
|
|
37
|
+
escaped = true;
|
|
38
|
+
} else if (ch === quote) {
|
|
39
|
+
inString = false;
|
|
40
|
+
}
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (ch === '"' || ch === "'") {
|
|
45
|
+
inString = true;
|
|
46
|
+
quote = ch;
|
|
47
|
+
out += ch;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (ch === "/" && next === "/") {
|
|
52
|
+
while (i < text.length && text[i] !== "\n") i += 1;
|
|
53
|
+
out += "\n";
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (ch === "/" && next === "*") {
|
|
58
|
+
i += 2;
|
|
59
|
+
while (i < text.length && !(text[i] === "*" && text[i + 1] === "/")) {
|
|
60
|
+
if (text[i] === "\n") out += "\n";
|
|
61
|
+
i += 1;
|
|
62
|
+
}
|
|
63
|
+
i += 1;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
out += ch;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return stripTrailingCommas(out);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function stripTrailingCommas(text) {
|
|
74
|
+
let out = "";
|
|
75
|
+
let inString = false;
|
|
76
|
+
let quote = "";
|
|
77
|
+
let escaped = false;
|
|
78
|
+
|
|
79
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
80
|
+
const ch = text[i];
|
|
81
|
+
|
|
82
|
+
if (inString) {
|
|
83
|
+
out += ch;
|
|
84
|
+
if (escaped) {
|
|
85
|
+
escaped = false;
|
|
86
|
+
} else if (ch === "\\") {
|
|
87
|
+
escaped = true;
|
|
88
|
+
} else if (ch === quote) {
|
|
89
|
+
inString = false;
|
|
90
|
+
}
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (ch === '"' || ch === "'") {
|
|
95
|
+
inString = true;
|
|
96
|
+
quote = ch;
|
|
97
|
+
out += ch;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (ch === ",") {
|
|
102
|
+
let j = i + 1;
|
|
103
|
+
while (/\s/.test(text[j] ?? "")) j += 1;
|
|
104
|
+
if (text[j] === "}" || text[j] === "]") continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
out += ch;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function readJson(path) {
|
|
114
|
+
if (!existsSync(path)) return {};
|
|
115
|
+
try {
|
|
116
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
117
|
+
} catch {
|
|
118
|
+
try {
|
|
119
|
+
return JSON.parse(parseJsonc(readFileSync(path, "utf8")));
|
|
120
|
+
} catch {
|
|
121
|
+
throw new Error(
|
|
122
|
+
`${path} could not be parsed. Add this manually instead:\n` +
|
|
123
|
+
` "html.customData": ["${CUSTOM_DATA}"]`,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function writeJson(path, value) {
|
|
130
|
+
writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function init({ force = false } = {}) {
|
|
134
|
+
const cwd = process.cwd();
|
|
135
|
+
const vscodeDir = join(cwd, ".vscode");
|
|
136
|
+
const settingsPath = join(vscodeDir, "settings.json");
|
|
137
|
+
const targetSnippetPath = join(vscodeDir, SNIPPET_FILE);
|
|
138
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
139
|
+
const sourceSnippetPath = join(packageRoot, ".vscode", SNIPPET_FILE);
|
|
140
|
+
|
|
141
|
+
mkdirSync(vscodeDir, { recursive: true });
|
|
142
|
+
|
|
143
|
+
const settings = readJson(settingsPath);
|
|
144
|
+
const existing = Array.isArray(settings["html.customData"]) ? settings["html.customData"] : [];
|
|
145
|
+
if (!existing.includes(CUSTOM_DATA)) {
|
|
146
|
+
settings["html.customData"] = [...existing, CUSTOM_DATA];
|
|
147
|
+
writeJson(settingsPath, settings);
|
|
148
|
+
console.log(`Updated ${settingsPath}`);
|
|
149
|
+
} else {
|
|
150
|
+
console.log(`${settingsPath} already references OnlyMapJS custom data`);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (existsSync(targetSnippetPath) && !force) {
|
|
154
|
+
console.log(`${targetSnippetPath} already exists; pass --force to overwrite it`);
|
|
155
|
+
} else {
|
|
156
|
+
const verb = existsSync(targetSnippetPath) ? "Updated" : "Created";
|
|
157
|
+
copyFileSync(sourceSnippetPath, targetSnippetPath);
|
|
158
|
+
console.log(`${verb} ${targetSnippetPath}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
console.log("\nOnlyMapJS authoring support is ready. Try !starter in an HTML file.");
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const args = process.argv.slice(2);
|
|
165
|
+
if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
|
|
166
|
+
usage();
|
|
167
|
+
process.exit(0);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const [command, ...rest] = args;
|
|
171
|
+
if (command !== "init") {
|
|
172
|
+
console.error(`Unknown command: ${command}\n`);
|
|
173
|
+
usage();
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
init({ force: rest.includes("--force") });
|
|
179
|
+
} catch (err) {
|
|
180
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|