Skip to content

hyoo-ru/mam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a1ef817 · Feb 3, 2025
Jan 4, 2025
Mar 9, 2023
Dec 9, 2019
Oct 9, 2024
Sep 4, 2021
Jan 24, 2025
Mar 26, 2019
Feb 20, 2024
Feb 11, 2016
Oct 28, 2023
Oct 26, 2023
Oct 26, 2023
Feb 3, 2025
Jul 6, 2022
Jun 17, 2021
Mar 26, 2023
Nov 29, 2024
Mar 7, 2020
Dec 16, 2024
Oct 10, 2017

Repository files navigation

MAM

Mam owns language-Agnostic Modules. This is the base MAM project.

Articles

Features

  • Agnostic modules. Module is a directory with the mixed source files (JS, TS, CSS, JSON, HTML, Tree, images, etc).
  • Automatic dependency tracking. You don't need import/export - simply use the namespaced names according to the directory structure, like $mol_button_major / $jin.time.moment in *.JAM.JS/*.TS or --mol_theme_back / [mol_page_title] / .my-header-avatar in *.CSS.
  • Development server with automatic bundling on request. Will be bundled only if you use it.
  • Build any module as standalone bundle. You can develop thousand of modules in one project.
  • Cordova project generation. Simply add config.xml to the module, and -cordova dir with the cordova project will be generated.

Cloud usage

Gitpod Online Dev Workspace

Installation

Checkout this repo (~2s):

git clone https://github.com/hyoo-ru/mam.git ./mam && cd mam

Linux limits

$mol_build and typescript uses inotify by default on Linux to monitor directories for changes. It's not uncommon to encounter a system limit on the number of files you can monitor.

/etc/sysctl.d/20-watch.conf

fs.inotify.max_user_watches=524288
fs.file-max=500000

Development server

Install node modules and build dev server from actual sources

npm install

Start dev server:

npm start

Open simple $mol based ToDoMVC application:

start http://localhost:9080/hyoo/todomvc/-/test.html

Manual build

  • Execute npm start hyoo/todomvc to build standalone ToDoMVC application at hyoo/todomvc/-.
  • Execute npm start mol/regexp to build standalone $mol_regexp library at mol/regexp/-.

NPM Integration

Publish to NPM

npm start mol/regexp
npm publish mol/regexp/-

Usage from NPM

Import to CJS

const { $mol_regexp: RE } = require( 'mol_regexp' )

Import to ESM

import { $mol_regexp as RE } from 'mol_regexp'

NodeJS dependencies

Using $node namespace you can auto-install and dynamically lazy load any NPM packages:

const isOdd = $node['is-odd']( '123' )

Bundling NPM dependencies

If possible, try to use the existing MAM ecosystem implementations. You can bundle the NPM packages as well via an adapter like:

// lib/ramda/ramda.ts
namespace $ {
	export let $lib_ramda = require('ramda/src/index.js') as typeof import('ramda')
}

Custom package

Video tutorial

  1. Create dir for your namespace: my in example.
  2. Create dir for your module: my/alert in example.
  3. Create module source file: my/alert/alert.ts with content function $my_alert( msg : string ) { alert( msg ) } in example.
  4. Create dir for your application module: my/app in example.
  5. Create application source file: my/app/app.ts with content $my_alert( 'Hello, World!' ) in example.
  6. Create application web entry point: my/app/index.html with content <script src="-/web.js"></script> in example.
  7. Start development server: npm start
  8. Open your application: http://localhost:9080/my/app/-/test.html in example.

MAM based projects