summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/content.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/codegen/content.ts')
-rw-r--r--src/compiler/codegen/content.ts78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/compiler/codegen/content.ts b/src/compiler/codegen/content.ts
new file mode 100644
index 000000000..14542d533
--- /dev/null
+++ b/src/compiler/codegen/content.ts
@@ -0,0 +1,78 @@
+import path from 'path';
+import { fdir, PathsOutput } from 'fdir';
+
+/**
+ * Handling for import.meta.glob and import.meta.globEager
+ */
+
+interface GlobOptions {
+ namespace: string;
+ filename: string;
+}
+
+interface GlobResult {
+ /** Array of import statements to inject */
+ imports: Set<string>;
+ /** Replace original code with */
+ code: string;
+}
+
+const crawler = new fdir();
+
+/** General glob handling */
+function globSearch(spec: string, { filename }: { filename: string }): string[] {
+ try {
+ // Note: fdir’s glob requires you to do some work finding the closest non-glob folder.
+ // For example, this fails: .glob("./post/*.md").crawl("/…/astro/pages") ❌
+ // …but this doesn’t: .glob("*.md").crawl("/…/astro/pages/post") ✅
+ let globDir = '';
+ let glob = spec;
+ for (const part of spec.split('/')) {
+ if (!part.includes('*')) {
+ // iterate through spec until first '*' is reached
+ globDir = path.posix.join(globDir, part); // this must be POSIX-style
+ glob = glob.replace(`${part}/`, ''); // move parent dirs off spec, and onto globDir
+ } else {
+ // at first '*', exit
+ break;
+ }
+ }
+
+ const cwd = path.join(path.dirname(filename), globDir.replace(/\//g, path.sep)); // this must match OS (could be '/' or '\')
+ let found = crawler.glob(glob).crawl(cwd).sync() as PathsOutput;
+ if (!found.length) {
+ throw new Error(`No files matched "${spec}" from ${filename}`);
+ }
+ return found.map((importPath) => {
+ if (importPath.startsWith('http') || importPath.startsWith('.')) return importPath;
+ return `./` + globDir + '/' + importPath;
+ });
+ } catch (err) {
+ throw new Error(`No files matched "${spec}" from ${filename}`);
+ }
+}
+
+/** import.meta.fetchContent() */
+export function fetchContent(spec: string, { namespace, filename }: GlobOptions): GlobResult {
+ let code = '';
+ const imports = new Set<string>();
+ const importPaths = globSearch(spec, { filename });
+
+ // gather imports
+ importPaths.forEach((importPath, j) => {
+ const id = `${namespace}_${j}`;
+ imports.add(`import { __content as ${id} } from '${importPath}';`);
+
+ // add URL if this appears within the /pages/ directory (probably can be improved)
+ const fullPath = path.resolve(path.dirname(filename), importPath);
+ if (fullPath.includes(`${path.sep}pages${path.sep}`)) {
+ const url = importPath.replace(/^\./, '').replace(/\.md$/, '');
+ imports.add(`${id}.url = '${url}';`);
+ }
+ });
+
+ // generate replacement code
+ code += `${namespace} = [${importPaths.map((_, j) => `${namespace}_${j}`).join(',')}];\n`;
+
+ return { imports, code };
+}
>Gravatar Matthew Phillips 2-7/+9 * Invalidate based on modulePath * Adds a changeset 2021-12-01Update ci.yml (#2077)Gravatar Fred K. Schott 1-2/+7 2021-12-01[ci] yarn formatGravatar natemoo-re 2-4/+4 2021-12-01Improving error messages for invalid client hydration directives (#2076)Gravatar Tony Sullivan 6-0/+64 * Adding check to make sure the hydration directive is valid * remove temp debug logging * Adding a check for media query with client:media + small refactor * adding changeset Co-authored-by: Tony Sullivan <tony.sullivan@hyperlab.se> 2021-12-01Upgrade compiler to 0.5.4 (#2057)Gravatar Matthew Phillips 3-6/+6 * Upgrade compiler to 0.4.0 * chore: update compiler to v0.5.1 * chore: update compiler to v0.5.3 * chore: upgrade @astrojs/compiler * test: skip flaky test Co-authored-by: Nate Moore <nate@skypack.dev> 2021-12-01Render void elements as self-closing tags (#2064)Gravatar Jonathan Neal 5-1/+64 * Render void elements as self-closing tags * changeset * nit: only check void element names if there is no child content * nit: only check void element names if there is no child content * add tests 2021-12-01Allow importing of rehype plugins (#2075)Gravatar Drew Powers 3-1/+11 Fixes #2061 2021-12-01fix: release notes (#2074)Gravatar Nate Moore 1-1/+3 2021-12-01[ci] yarn formatGravatar natemoo-re 1-2/+2 2021-12-01Prevent unknown keys in markdownOptions (#2073)Gravatar Ian VanSchooten 2-0/+7 2021-12-01Add migration guide for markdownOptions (#2070)Gravatar Ian VanSchooten 1-0/+23 2021-12-01German translation - docs (#1830)Gravatar borisv 15-109/+1537 * New translation of getting-started.md Rework of the basic translation, resolving a bunch of issues and correcting misconceptions in terminologies. * Spelling correction * Omitting redundant paragraph. Minor corrections. * New translation Fixing errors and grammatical misconceptions. Rectifying terminology. * Minor corrections in quick-start.md * Update quick-start.md Minor corrections * Update quick-start.md Small fix * Update quick-start.md * Update getting-started.md * Update quick-start.md * Update quick-start.md * Update quick-start.md * New translation installation.md New translation leveraging a consistent nomenklatura, fixing spelling errors * Update installation.md * Update installation.md * Update installation.md * Update docs/src/pages/de/getting-started.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/getting-started.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/getting-started.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/installation.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/quick-start.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/quick-start.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/quick-start.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/installation.md Co-authored-by: Kim Schneider <web@schneider.kim> * Update docs/src/pages/de/getting-started.md Co-authored-by: Kim Schneider <web@schneider.kim> * [ci] yarn format * Create 0.21.0.md First translation * [ci] yarn format * Create themes.astro First translation * Create 404.astro First translation * Update 0.21.0.md Small changes according to the reviews. Additionally changing 'Hydratation' to 'Anreicherung' in the code example (76), which is far more closer to the fact. * [ci] yarn format * Update themes.astro Changed 'Motive' to 'Vorlagen' throughout this document * Create comparing-astro-vs-other-tools.md First translation. Last missing page from the first documentation section 'SETUP' * [ci] yarn format * Create astro-components.md First translation * [ci] yarn format * Update comparing-astro-vs-other-tools.md Corrected reference to Vue in Nuxt section * Update comparing-astro-vs-other-tools.md Replaced 'Vorlagen' with the english term 'Templates' for consistency inside nomenclature across all document pages. * Create astro-pages.md First translation * [ci] yarn format * Create project-structure.md First translation * Create component-hydration.md New translation * [ci] yarn format * Create layouts.md First translation * Create routing.md First translation * [ci] yarn format * Update quick-start.md Changed expression to 'Entwickeln' * Update installation.md Changed expression to 'Entwickeln' * Update comparing-astro-vs-other-tools.md Changed all occurences of 'partielle Anreicherung' to 'Partial Hydration' * Update comparing-astro-vs-other-tools.md Minor punctuation fix * Update astro-components.md Bunch of suggestions worked in * [ci] yarn format * Update astro-pages.md Added suggestions * Update component-hydration.md Added suggestions * Update layouts.md Added suggestions * [ci] yarn format * Update project-structure.md Added suggestions * Update routing.md Added suggestions * Update installation.md Added suggestions * Update 0.21.0.md Added suggestions * Update quick-start.md added suggestions * Update themes.astro Added suggestions * Update 0.21.0.md Added suggestion * Update astro-components.md Minor punctuation fix * [ci] yarn format * Update astro-components.md Replaced last of 'Anreicherung' * Update astro-components.md Punctuation fix, again((( * [ci] yarn format * Update docs/src/pages/de/core-concepts/astro-components.md Minor punctioation fix Co-authored-by: Kim Schneider <web@schneider.kim> * [ci] yarn format * Update astro-components.md Added code example, since github hickubs when only removing ';' * Added sidebar links (de) config.ts Added links to the first two sections of the German translation * Update config.ts Replaced Getting Started with 'Erste Schritte' * Update config.ts Replaced Themes with 'Vorlagen' * Update config.ts Changed Migration to 'Umstellung' * Fixing routing error((( * Fixing routing errors(( * reverse and fix routing errors((( Co-authored-by: Kim Schneider <web@schneider.kim> Co-authored-by: borisv <borisv@users.noreply.github.com> Co-authored-by: smplrtrn <smplrtrn@gmail.com> 2021-12-01Enforce consistent import order of CSS (#2065)Gravatar Drew Powers 11-11/+134 Partially fixes #2060 2021-11-30[ci] release (#2059)astro@0.21.6Gravatar github-actions[bot] 26-37/+32 Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> 2021-11-30Modify changeset for #2052 (#2067)Gravatar Drew Powers 1-1/+1