nodality 1.0.162 → 1.0.164
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/bin/nodality.js +99 -0
- package/dist/bundle.umd.js +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/layout/animator.js +1 -1
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base-2.js +1 -1
- package/layout/base.js +1 -1
- package/layout/beta-desktop-bar.js +1 -1
- package/layout/beta-mobile-bar.js +1 -1
- package/layout/box.js +1 -1
- package/layout/button.js +1 -1
- package/layout/cards.js +1 -1
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/clean-row.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +1 -1
- package/layout/custom.js +1 -1
- package/layout/div-image.js +1 -1
- package/layout/dropdown-2025.js +1 -1
- package/layout/dropdown.js +1 -1
- package/layout/empty-element.js +1 -1
- package/layout/external-stylesheet.js +1 -1
- package/layout/flex-card.js +1 -1
- package/layout/flex-grid.js +1 -1
- package/layout/flex-row.js +1 -1
- package/layout/footer.js +1 -1
- package/layout/form-components/custom.js +1 -1
- package/layout/form-components/data-list.js +1 -1
- package/layout/form-components/floating-input.js +1 -1
- package/layout/form-components/form-all.js +1 -1
- package/layout/form-components/form.js +1 -1
- package/layout/form-components/image-picker.js +1 -1
- package/layout/form-components/picker.js +1 -1
- package/layout/form-components/radio.js +1 -1
- package/layout/form-components/radiogroup.js +1 -1
- package/layout/form-components/range.js +1 -1
- package/layout/free.js +1 -1
- package/layout/grid-new.js +1 -1
- package/layout/grid-switcher.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/group.js +1 -1
- package/layout/header.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image-old.js +1 -1
- package/layout/image.js +1 -1
- package/layout/index.js +1 -1
- package/layout/label.js +1 -1
- package/layout/link.js +1 -1
- package/layout/list-OLD.js +1 -1
- package/layout/list.js +1 -1
- package/layout/meta-adder.js +1 -1
- package/layout/modal-2025.js +1 -1
- package/layout/modernwrap.js +1 -1
- package/layout/multiswitcher.js +1 -1
- package/layout/multiswitcherBeta.js +1 -1
- package/layout/nav-bar.js +1 -1
- package/layout/nav-factor/custom-div.js +1 -1
- package/layout/navBar-OLD.js +1 -1
- package/layout/new-flat-adder.js +1 -1
- package/layout/new-nav-bar.js +1 -1
- package/layout/offset-container.js +1 -1
- package/layout/polygon.js +1 -1
- package/layout/prerender-site.js +1 -1
- package/layout/prerender.js +1 -1
- package/layout/progress.js +1 -1
- package/layout/row.js +1 -1
- package/layout/saved-new-nav-bar.js +1 -1
- package/layout/scroll-video.js +1 -1
- package/layout/side-bar.js +1 -1
- package/layout/side-nav-bar.js +1 -1
- package/layout/simple-bar.js +1 -1
- package/layout/slider-2025.js +1 -1
- package/layout/spacer.js +1 -1
- package/layout/stack.js +1 -1
- package/layout/styler.js +1 -1
- package/layout/svg.js +1 -1
- package/layout/switcher.js +1 -1
- package/layout/table.js +1 -1
- package/layout/text-field.js +1 -1
- package/layout/text.js +1 -1
- package/layout/ulist.js +1 -1
- package/layout/video.js +1 -1
- package/layout/without-new.js +1 -1
- package/layout/wrap.js +1 -1
- package/layout/zoom-card.js +1 -1
- package/lib/card-getter.js +1 -1
- package/lib/designer.js +10 -1
- package/lib/element-mapper.js +1 -1
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/scroll-video.js +1 -1
- package/lib/stacker.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/transform-anim.js +1 -1
- package/package.json +1 -1
package/bin/nodality.js
CHANGED
|
@@ -155,6 +155,95 @@ function loadConfigFile(cwd) {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
// ─── SSG bootstrap ──────────────────────────────────────────────
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* On first run, derive the upload/ structure from the project's root
|
|
162
|
+
* files so a freshly scaffolded project can prerender without manual
|
|
163
|
+
* setup. For each `src/<name>.js` we generate `upload/pages/<name>.js`
|
|
164
|
+
* (verbatim copy) and an `upload/<name>.html` whose importmap points
|
|
165
|
+
* at `./lib.bundle.js` and whose `<script src>` points at the page
|
|
166
|
+
* entry. The first src file (alphabetically) is also written as
|
|
167
|
+
* `upload/index.html` when no explicit index entry exists, so the
|
|
168
|
+
* dev server has a default landing page.
|
|
169
|
+
*
|
|
170
|
+
* If the user has already populated upload/ themselves, we touch
|
|
171
|
+
* nothing. Bootstrap only runs when upload/ is missing OR contains
|
|
172
|
+
* no .html files.
|
|
173
|
+
*/
|
|
174
|
+
function bootstrapUpload(cwd, uploadDir) {
|
|
175
|
+
const srcDir = path.join(cwd, "src");
|
|
176
|
+
if (!fs.existsSync(srcDir)) return false;
|
|
177
|
+
|
|
178
|
+
const srcFiles = fs.readdirSync(srcDir).filter((f) => f.endsWith(".js"));
|
|
179
|
+
if (srcFiles.length === 0) return false;
|
|
180
|
+
|
|
181
|
+
fs.mkdirSync(uploadDir, { recursive: true });
|
|
182
|
+
const pagesDir = path.join(uploadDir, "pages");
|
|
183
|
+
fs.mkdirSync(pagesDir, { recursive: true });
|
|
184
|
+
|
|
185
|
+
const projectName = path.basename(cwd);
|
|
186
|
+
let wrote = 0;
|
|
187
|
+
for (const srcFile of srcFiles) {
|
|
188
|
+
const base = path.basename(srcFile, ".js");
|
|
189
|
+
// Convention: src/app.js → upload/index.html + upload/pages/index.js.
|
|
190
|
+
// All others: src/<name>.js → upload/<name>.html + upload/pages/<name>.js.
|
|
191
|
+
const pageName = base === "app" ? "index" : base;
|
|
192
|
+
|
|
193
|
+
const entryPath = path.join(pagesDir, `${pageName}.js`);
|
|
194
|
+
if (!fs.existsSync(entryPath)) {
|
|
195
|
+
// `code: true` toggles Nodality's on-page <pre>/<code> dev panel,
|
|
196
|
+
// which is useful while writing src/ but should be off in the
|
|
197
|
+
// SSG output. Rewrite when cloning into upload/pages/.
|
|
198
|
+
const srcContent = fs.readFileSync(path.join(srcDir, srcFile), "utf8");
|
|
199
|
+
const ssgContent = srcContent.replace(/code:\s*true/g, "code: false");
|
|
200
|
+
fs.writeFileSync(entryPath, ssgContent);
|
|
201
|
+
wrote++;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const htmlPath = path.join(uploadDir, `${pageName}.html`);
|
|
205
|
+
if (!fs.existsSync(htmlPath)) {
|
|
206
|
+
fs.writeFileSync(htmlPath, renderUploadHtml(projectName, pageName));
|
|
207
|
+
wrote++;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (wrote > 0) {
|
|
212
|
+
console.log(`[nodality] Bootstrapped upload/ from src/ (${wrote} file(s) written)`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (!fs.existsSync(path.join(uploadDir, "lib.bundle.js"))) {
|
|
216
|
+
console.warn(
|
|
217
|
+
`[nodality] ⚠ upload/lib.bundle.js missing — run \`npm run build\` first ` +
|
|
218
|
+
`so the prerendered HTML can load the library bundle at runtime.`,
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function renderUploadHtml(projectName, pageName) {
|
|
225
|
+
return `<!DOCTYPE html>
|
|
226
|
+
<html lang="en">
|
|
227
|
+
<head>
|
|
228
|
+
<meta charset="UTF-8">
|
|
229
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
230
|
+
<title>${projectName}</title>
|
|
231
|
+
<script type="importmap">
|
|
232
|
+
{
|
|
233
|
+
"imports": {
|
|
234
|
+
"nodality": "./lib.bundle.js"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
</script>
|
|
238
|
+
</head>
|
|
239
|
+
<body>
|
|
240
|
+
<div id="mount"></div>
|
|
241
|
+
<script type="module" src="./pages/${pageName}.js"></script>
|
|
242
|
+
</body>
|
|
243
|
+
</html>
|
|
244
|
+
`;
|
|
245
|
+
}
|
|
246
|
+
|
|
158
247
|
// ─── Page auto-discovery ────────────────────────────────────────
|
|
159
248
|
|
|
160
249
|
/**
|
|
@@ -251,6 +340,16 @@ async function runPrerender(rawArgs) {
|
|
|
251
340
|
);
|
|
252
341
|
}
|
|
253
342
|
|
|
343
|
+
// First-run bootstrap: if upload/ is missing or has no HTML pages
|
|
344
|
+
// yet, derive it from the project's src/ + root index.html. This is
|
|
345
|
+
// what create-nodality projects rely on so the scaffolder doesn't
|
|
346
|
+
// have to ship duplicate copies of source files. No-op if upload/
|
|
347
|
+
// is already populated.
|
|
348
|
+
const needsBootstrap =
|
|
349
|
+
!fs.existsSync(uploadDir) ||
|
|
350
|
+
fs.readdirSync(uploadDir).filter((f) => f.endsWith(".html")).length === 0;
|
|
351
|
+
if (needsBootstrap) bootstrapUpload(cwd, uploadDir);
|
|
352
|
+
|
|
254
353
|
// Explicit `pages` from config wins over auto-discovery. The
|
|
255
354
|
// discovery rules (pages/<base>.js, <base>.js) can't infer
|
|
256
355
|
// irregular pairs like h7-nodality's `index.html → app.js`; for
|