nodality 1.0.162 → 1.0.163
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 +94 -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,90 @@ 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
|
+
fs.copyFileSync(path.join(srcDir, srcFile), entryPath);
|
|
196
|
+
wrote++;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const htmlPath = path.join(uploadDir, `${pageName}.html`);
|
|
200
|
+
if (!fs.existsSync(htmlPath)) {
|
|
201
|
+
fs.writeFileSync(htmlPath, renderUploadHtml(projectName, pageName));
|
|
202
|
+
wrote++;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (wrote > 0) {
|
|
207
|
+
console.log(`[nodality] Bootstrapped upload/ from src/ (${wrote} file(s) written)`);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (!fs.existsSync(path.join(uploadDir, "lib.bundle.js"))) {
|
|
211
|
+
console.warn(
|
|
212
|
+
`[nodality] ⚠ upload/lib.bundle.js missing — run \`npm run build\` first ` +
|
|
213
|
+
`so the prerendered HTML can load the library bundle at runtime.`,
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function renderUploadHtml(projectName, pageName) {
|
|
220
|
+
return `<!DOCTYPE html>
|
|
221
|
+
<html lang="en">
|
|
222
|
+
<head>
|
|
223
|
+
<meta charset="UTF-8">
|
|
224
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
225
|
+
<title>${projectName}</title>
|
|
226
|
+
<script type="importmap">
|
|
227
|
+
{
|
|
228
|
+
"imports": {
|
|
229
|
+
"nodality": "./lib.bundle.js"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
</script>
|
|
233
|
+
</head>
|
|
234
|
+
<body>
|
|
235
|
+
<div id="mount"></div>
|
|
236
|
+
<script type="module" src="./pages/${pageName}.js"></script>
|
|
237
|
+
</body>
|
|
238
|
+
</html>
|
|
239
|
+
`;
|
|
240
|
+
}
|
|
241
|
+
|
|
158
242
|
// ─── Page auto-discovery ────────────────────────────────────────
|
|
159
243
|
|
|
160
244
|
/**
|
|
@@ -251,6 +335,16 @@ async function runPrerender(rawArgs) {
|
|
|
251
335
|
);
|
|
252
336
|
}
|
|
253
337
|
|
|
338
|
+
// First-run bootstrap: if upload/ is missing or has no HTML pages
|
|
339
|
+
// yet, derive it from the project's src/ + root index.html. This is
|
|
340
|
+
// what create-nodality projects rely on so the scaffolder doesn't
|
|
341
|
+
// have to ship duplicate copies of source files. No-op if upload/
|
|
342
|
+
// is already populated.
|
|
343
|
+
const needsBootstrap =
|
|
344
|
+
!fs.existsSync(uploadDir) ||
|
|
345
|
+
fs.readdirSync(uploadDir).filter((f) => f.endsWith(".html")).length === 0;
|
|
346
|
+
if (needsBootstrap) bootstrapUpload(cwd, uploadDir);
|
|
347
|
+
|
|
254
348
|
// Explicit `pages` from config wins over auto-discovery. The
|
|
255
349
|
// discovery rules (pages/<base>.js, <base>.js) can't infer
|
|
256
350
|
// irregular pairs like h7-nodality's `index.html → app.js`; for
|